neuro-kitchen

Changelog

What changed in each release, from GitHub.

dsp-kitchen

v0.0.9

Added

  • Install what you need: pip install dspk is the core; dspk[synapse] adds electrophysiology and
    the neural formats, dspk[app] the desktop app, dspk[all] both. import dspk.synapse without
    it says what to install. Breaking: pip install dspk no longer includes Synapse.
  • dspk autotune, dspk.runtime.autotune() and File → Tune this device: tune a device
    ahead of time, so first runs and previews don't stop to benchmark.
  • HIP (AMD) runtime in the Linux wheels and sorter build. Compiled in, but untested: no AMD GPU.
  • dspk.app.open(path), and a dspk command from the Python package (sorters, app, autotune).
  • dspk.io.open opens NWB, SpikeGLX and mtscomp files when Synapse is installed.
  • Sorter benchmarks run the current sorter program, and the Validation pages are re-measured. The Zarr
    codec comparison and 24 screens of the app are in the docs.
  • Documentation: Learn (get started, concepts,
    Python, a course generated from the playground), the App, Operations, Deploy, GPU lessons,
    Validation, Extend, a Lab notebook and the Synapse plugin's guides and sorter pages. CLI, sorter
    settings and pipeline-spec references are generated from the programs.
  • Release notes on GitHub come from this file.

Changed

  • App, on Linux: Open file… (Ctrl+O) and Open folder… (Ctrl+Shift+O) are separate, because the
    desktop's dialog shows either files or folders; the Add actions ask which.

Fixed

  • CUDA: sorters panicked at a channel count not divisible by 16 (a buffer read back with its padding).
  • Programs could hang or crash at exit in NVIDIA's Vulkan teardown, with all work already done. The
    sorter and dspk programs now skip the teardown; Python and the app limit it to 10 s.
  • App: choosing a view's tab selects that view, so the Inspector follows it.

Install

Crates are on crates.io, and pip install dspk gets the Python package. The files below are dspk-cli-sorter (every spike sorter, GPL-3.0 as a whole; source: this tag), installed by dspk sorters install.

v0.0.8

dspk v0.0.8: crates on crates.io, pip install dspk. The files below are dspk-cli-sorter (every spike sorter, GPL-3.0 as a whole; source: this tag), installed by dspk sorters install.

v0.0.7

dspk v0.0.7: crates on crates.io, pip install dspk. The files below are dspk-cli-sorter (every spike sorter, GPL-3.0 as a whole; source: this tag), installed by dspk sorters install.

v0.0.6

dspk v0.0.6: crates on crates.io, pip install dspk. The files below are dspk-cli-sorter (every spike sorter, GPL-3.0 as a whole; source: this tag), installed by dspk sorters install.

v0.0.5

dspk v0.0.5: crates on crates.io, pip install dspk. The files below are dspk-cli-sorter (every spike sorter, GPL-3.0 as a whole; source: this tag), installed by dspk sorters install.

v0.0.4

dspk v0.0.4: crates on crates.io, pip install dspk. The files below are dspk-sorters (every spike sorter, GPL-3.0 as a whole; source: this tag), installed by dspk sorters install.

kitchen

v0.0.3

Added

  • kitchen-shell menus that follow the app: MenuItem::Run (a command run with arguments under
    its own title: an entry per image, per recent file, per model) and MenuItem::Provided (the
    entries a provider makes when the menu opens, Registry::provide); Shell::set_menus replaces
    a workspace's menu row; long menus scroll.
  • kitchen-shell window frame (from lumen's and dsp-kitchen's): rounded corners while the window
    floats, square when maximised, full screen or tiled; it resizes from its own edge
    (resize_edge, frame_rounded); no shadow margin.
  • Shell::set_overlay: one view of the app's over everything (a help sheet, a dialog);
    Shell::workspace_id.

Changed

  • README: an app using kitchen-shell (or any crate besides kitchen-ui) takes kitchen-ui from
    the same git tag, not crates.io: the shell depends on it by path inside this repository, and
    two copies would mean two Theme globals.

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>" }.

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 own codeql.yml, which clashed with it, is removed.

Added

  • Release workflow (release.yml, as dsp-kitchen's): on a v* tag, the tag is checked against
    the workspace version and the changelog, the crates are packaged and checked by cargo-deny,
    the publish = true crates go to crates.io by trusted publishing (environment crates-io,
    approved by a reviewer), and the GitHub release takes this section as its notes.
  • kitchen-shell crate. Command registry: an app declares each command once (CommandSpec:
    id, title, icon, hint, group, key, JSON Schema of its arguments, enabled with the reason
    when not, checked for toggles, run), and the Registry builds 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-shell search (Ctrl+K): every command by group, title, hint or key; disabled ones
    listed greyed with the reason; ↑ ↓ Enter, Esc.
  • kitchen-shell view container (from lumen's): a dock of views dragged into splits
    (new_dock, add_beside), Arrangement (tabs, side by side, stacked, grid) with arrange,
    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-shell frame (Shell from a ShellSpec): 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-shell job 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-hub crate (lumen's and dsp-kitchen's hubs in one): an Artifact (id, family, file,
    URI on hf://, gh://, zenodo://, https:// or file://, 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 for status without hashing, verify, remove,
    clean, disk_use; .tgz archives unpacked once.
  • kitchen-plugin crate (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), the Manager
    (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-shell Changes panel (ChangesPanel, on kitchen-ui's DiffView): 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-shell Scripts workspace (ScriptsWorkspace, on kitchen-ui's CodeView): 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, args as 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-agent crate. 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-bridge program. No API keys anywhere.
  • kitchen-agent workspace (AgentWorkspace, on kitchen-ui's ChatPane): 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 keeps gallery), so a workspace build has no output name collision.
  • kitchen-ui CodeView: 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-ui DiffView and the diff model (on similar): 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 as cells: 2,539 → 2,712); optional Accept / Reject per hunk (HunkDecision) and
    Diff::apply for the accepted hunks of a text.
  • kitchen-ui TextView: wrapped, selectable light markdown with highlighted fenced code;
    text can stream in.
  • kitchen-ui chat::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, and ChatMessage is 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>" }.