Repository navigation
v0.0.2
Changed
- Version 0.0.2 for every crate; the README says how an app depends on kitchen-ui from
crates.io and the other crates from the tag, and how a release is made. - CodeQL runs through GitHub's default setup (enforced by the organisation since the repository
went public); the repository's owncodeql.yml, which clashed with it, is removed.
Added
- Release workflow (
release.yml, as dsp-kitchen's): on av*tag, the tag is checked against
the workspace version and the changelog, the crates are packaged and checked by cargo-deny,
thepublish = truecrates go to crates.io by trusted publishing (environmentcrates-io,
approved by a reviewer), and the GitHub release takes this section as its notes. kitchen-shellcrate. Command registry: an app declares each command once (CommandSpec:
id, title, icon, hint, group, key, JSON Schema of its arguments,enabledwith the reason
when not,checkedfor toggles,run), and theRegistrybuilds from that one list the menus
(MenuSpec, submenus; a command that cannot run is greyed with its reason), the key bindings
(RunCommand) and the search. Typed commands (CommandSpec::with_args) publish their schema
and refuse arguments that do not read.kitchen-shellsearch (Ctrl+K): every command by group, title, hint or key; disabled ones
listed greyed with the reason; ↑ ↓ Enter, Esc.kitchen-shellview container (from lumen's): a dock of views dragged into splits
(new_dock,add_beside),Arrangement(tabs, side by side, stacked, grid) witharrange,
the buttons in a view's tab (tab_buttons: its kinds and "+", 24 px targets), and the "Add view
or container" dialog (AddViewDialog) over the kinds a workspace offers (ViewOption, greyed
with the reason when unavailable).kitchen-shellframe (Shellfrom aShellSpec): a title bar with the app's menu and Help,
the workspace switcher (WorkspaceSpec), the project, the remote button (RemoteSpec), layout
toggles (commands as icon buttons) and the theme; the current workspace's menu row; the
workspace as a card on the chrome; a status bar with the status line, the running jobs (each
with a cancel button) and CPU and memory meters; Settings (Ctrl+,) with a built-in Appearance
section (theme, accent, text size) and the sections an app registers (SettingsSection); the
search. The frame registers its own commands (shell.search,shell.settings,shell.theme,
shell.workspace.<id>on Ctrl+1–9) and tells the app when the look changes (ShellEvent).
A search over one kind of command (open_search_with: Process ▸ "Find an operation…"), and
the app's own readings in the status bar (ShellSpec::status_items).kitchen-shelljob registry (jobs, from lumen's): kind, name, progress and a cancel flag;
one GPU job at a time; a job ends when its handle drops.kitchen-hubcrate (lumen's and dsp-kitchen's hubs in one): anArtifact(id, family, file,
URI onhf://,gh://,zenodo://,https://orfile://, SHA-256, size) is fetched into
the app's cache (Hub::for_app), hashed while it streams and committed only when hash and size
match; progress and cancel; a cache index forstatuswithout hashing,verify,remove,
clean,disk_use;.tgzarchives unpacked once.kitchen-plugincrate (from lumen's model plugins): the JSON-lines protocol (CoreRequest,
Event), manifests with the app's own fields (PluginInfo: protocol version, licence,
capabilities, runtime status) and the handshake (compatible), discovery per app
(PluginKind: prefix, folders,$ENV), a server client (PluginProcess), theManager
(install from a file or a verified download, update, remove with its downloads, disk use) and
its Settings page (ui::PluginsPage); a gallery example over demo plugins.kitchen-shellChanges panel (ChangesPanel, on kitchen-ui'sDiffView): watches the files
that say what a project is (session.json,pipeline.json,project.json) and shows what
changed as diffs compared by key, long arrays as one summary line; against the last save, the
session's start or the last git commit (Baseline, refused with the reason outside a
repository); a count of changed lines for a badge (ChangesEvent::Changed,
WorkspaceSpec::badge); an agent's proposed change (propose) reviewed with Accept / Reject
per hunk and written with only the accepted hunks (apply_proposal; JSON stays valid).kitchen-shellScripts workspace (ScriptsWorkspace, on kitchen-ui'sCodeView): a tree of
Python and Rust scripts, the editor (errors marked on their lines: Python tracebacks, Rust
compiler messages), a run panel (output, the JSON result, errors); runs off the UI thread as a
job, with{"args", "context"}on the script's stdin (the context is what the app says is
shown). A header (# kitchen: command = …,hint,argsas JSON Schema,node = in …; out …)
makes a script a command (register: in menus, search and an agent's tools) and a pipeline
node with typed ports checked against the app's types (nodes); new scripts from a template.kitchen-agentcrate. MCP host (McpHost, rmcp 3.9): the app's registered commands are an
agent's tools (schemas and read-only hints from the registry), run in the app's window under a
Policy(run anything; only read; or read freely and ask the person for the rest, allowed or
denied in the workspace), every call recorded (CallRecord); served over any byte stream
(serve_io), stdio, or a local socket (McpHost::listen) that MCP clients reach through the
kitchen-mcp-bridgeprogram. No API keys anywhere.kitchen-agentworkspace (AgentWorkspace, on kitchen-ui'sChatPane): saved sessions
(conversation and calls as JSON), the conversation with every tool call and the calls waiting
for the person, the Changes panel or the project's files beside it; "Open in Agents"
(open_command) and the Agents section of Settings (settings_section); a gallery with a
scripted agent (no model).- README: the five crates, what each holds and how to try it.
- Each crate's example has its own name (
shell-gallery,plugin-gallery,agent-gallery;
kitchen-ui keepsgallery), so a workspace build has no output name collision. kitchen-uiCodeView: gpui-kit's code editor (tree-sitter: Rust, Python and JSON), read-only
or editable (CodeChanged), line numbers, current line, selection and copy; errors
((line, message)) get a red gutter mark, an underline with the message on hover, and a list
under the code whose entries go to their line.kitchen-uiDiffViewand thediffmodel (onsimilar): added and removed lines on green
and red tints, old and new line numbers, hunk headers, unchanged runs folded behind
"⋯ N unchanged lines"; a JSON mode comparing by key (sorted keys, long arrays as one summary
line such ascells: 2,539 → 2,712); optional Accept / Reject per hunk (HunkDecision) and
Diff::applyfor the accepted hunks of a text.kitchen-uiTextView: wrapped, selectable light markdown with highlighted fenced code;
text can stream in.kitchen-uichat::ChatPane: user, agent and tool-call rows (a tool call opens to its JSON
arguments and result), streamed agent text, a prompt box (Enter sends, Shift+Enter is a
newline, Send becomes Stop while the agent runs), context chips and an empty state; it emits
ChatEvent::Send/Stop, andChatMessageis serializable for a session file.- Theme: diff line tints (
diff_added,diff_removed, checked for contrast in both themes), the
code editor's colours and a monospace size two steps under the base text. - Gallery pages for code, diffs and text, and for the chat; the headless test draws them in both
themes, accepts and rejects hunks, and sends prompts from the chat pane.
Install
cargo add kitchen-ui (crates.io). The other crates are used from this tag:
kitchen-shell = { git = "https://github.com/neuro-kitchen/kitchen", tag = "<this tag>" }.