Skip to content

Conversation

@nikomatsakis
Copy link
Member

@nikomatsakis nikomatsakis commented Dec 13, 2025

Summary

VSCode extension improvements, release automation, and Zed extension support.

VSCode Extension Improvements

Prompt Behavior

  • Cancel previous prompt on new send: Automatically cancels in-progress prompts
  • Persist prompt input text: Draft text preserved across webview hide/show
  • Optional modifier key to send: requireModifierToSend setting flips Enter/Shift+Enter behavior

Component Configuration

  • Sparkle toggle: Enable/disable Sparkle collaborative AI component
  • Rust Crate Researcher toggle: Enable/disable crate documentation lookup
  • Components in AgentConfiguration: Different component configs get separate agent processes
  • Improved logging: Shows full config like "Claude Code + Sparkle + Rust Crate Researcher"

Settings UI

  • Checkboxes for all new settings in the Settings panel

Build Infrastructure

  • Vendored mynah-ui: Git subtree from fork for custom features

Testing

  • Comprehensive settings configuration tests

Release Infrastructure

Workflows

  • release-plz: Automated crate publishing and GitHub releases
  • release-binaries: Triggered by symposium-acp-agent-v* tags
    • Builds binaries for 6 platforms (macOS/Linux/Windows, x64/arm64, musl)
    • Builds platform-specific VSCode extensions
    • Publishes to VSCode Marketplace
    • Publishes to Open VSX

Zed Extension

  • Extension definition in zed-extension/
  • Points to GitHub release archives
  • Ready for submission to zed-industries/extensions

Documentation

  • New "Distribution" chapter in mdbook
  • Updated "Packaging" chapter focused on design decisions

nikomatsakis and others added 13 commits December 13, 2025 13:16
When users send a new prompt before the previous one completes, the
extension now sends a session/cancel notification to the agent before
dispatching the new prompt. This follows the ACP protocol specification.

Changes:
- Add cancelSession() method to AcpAgentActor
- Track active prompts per tab in ChatViewProvider
- Send cancel notification before new prompt if one is in-progress
- Add hasActivePrompt test command for integration testing
- Add cancellation test (cancellation.test.ts)

Co-authored-by: Claude <[email protected]>
Adds console.log statements to track whether promptInputText is being
saved and restored via MynahUI's getAllTabs(). This helps verify if
the prompt input is automatically synced to the store.

Co-authored-by: Claude <[email protected]>
Before saving state, sync the current prompt input text from each tab's
DOM input element to the MynahUI store. This ensures that when the
webview is hidden and restored, the user's draft prompt is preserved.

Requires mynah-ui with getPromptInputText() method (local fork for now).

Co-authored-by: Claude <[email protected]>
git-subtree-dir: vendor/mynah-ui
git-subtree-split: 345fd24b51c11108ff5715ccbc9b59d7909fe6b1
Switch from npm package to local vendor/mynah-ui which is managed as a
git subtree from nikomatsakis/mynah-ui fork. This allows us to use
custom mynah-ui features (like getPromptInputText) while upstreaming.

To update the subtree from the fork:
  git subtree pull --prefix vendor/mynah-ui [email protected]:nikomatsakis/mynah-ui.git main --squash

To push local changes to the fork:
  git subtree push --prefix vendor/mynah-ui [email protected]:nikomatsakis/mynah-ui.git main

Co-authored-by: Claude <[email protected]>
Adds a new config option that flips the Enter key behavior:

When requireModifierToSendPrompt is true:
- Enter inserts a newline
- Shift+Enter, Cmd+Enter (Mac), or Ctrl+Enter sends the prompt

When requireModifierToSendPrompt is false (default):
- Enter sends the prompt
- Shift+Enter inserts a newline

This allows users who prefer multi-line editing to use Enter naturally
for newlines while using a modifier key to submit.

Co-authored-by: Claude <[email protected]>
Adds a VSCode setting to flip Enter/Shift+Enter behavior:
- When disabled (default): Enter sends prompt, Shift+Enter adds newline
- When enabled: Enter adds newline, Shift/Cmd+Enter sends prompt

The setting is passed from the extension to the MynahUI config
via a window global embedded in the webview HTML.

Co-authored-by: Claude <[email protected]>
Adds a 'Require modifier key to send' checkbox in the Preferences
section of the Settings panel, allowing users to toggle the setting
directly from the UI without opening VSCode settings.

Co-authored-by: Claude <[email protected]>
Adds two new component settings with checkboxes in the Settings panel:
- Sparkle: collaborative AI identity and memory
- Rust Crate Researcher: Rust crate documentation lookup

When disabled, the agent is spawned with --no-sparkle or
--no-crate-researcher flags respectively.

Both components are enabled by default.

Co-authored-by: Claude <[email protected]>
Tests for the new settings added in recent commits:
- Settings registration (verifies package.json defaults)
- Settings read/write (verifies toggle behavior)
- Settings flow to webview (verifies views load with settings)

Co-authored-by: Claude <[email protected]>
Components (Sparkle, Rust Crate Researcher) are now part of the agent
configuration identity rather than being read separately at spawn time.

- AgentConfiguration now has enableSparkle and enableCrateResearcher fields
- key() includes component state, so different configs get different processes
- describe() shows full config like 'Claude Code + Sparkle + Rust Crate Researcher'
- fromSettings() reads component settings from VSCode configuration
- acpAgentActor uses config fields instead of re-reading settings

Co-authored-by: Claude <[email protected]>
@nikomatsakis nikomatsakis changed the title feat(vscode): cancel previous prompt when sending new one VSCode extension improvements: settings, components, and UX Dec 14, 2025
@nikomatsakis nikomatsakis marked this pull request as ready for review December 14, 2025 13:16
nikomatsakis and others added 9 commits December 14, 2025 09:34
The vendor/mynah-ui dist folder is gitignored, so CI needs to build it
before installing the vscode-extension dependencies that depend on it.

Co-authored-by: Claude <[email protected]>
- New mdbook chapter documenting extension packaging workflow
- Fixed .vscodeignore to exclude vendor/, node_modules/, test-workspace/
- Package size reduced from including all vendor files to just bundled output

Co-authored-by: Claude <[email protected]>
Adds release-binaries.yml workflow triggered by symposium-acp-agent releases:

- Builds binaries for all platforms:
  - darwin-arm64, darwin-x64 (macOS)
  - linux-x64, linux-arm64, linux-x64-musl (Linux)
  - windows-x64 (Windows)
- Uploads archives to GitHub Release
- Builds platform-specific VSCode extensions
- Uploads .vsix files to GitHub Release

Also updates packaging docs to reflect the platform-specific extension
approach - each platform gets its own ~7MB extension instead of one
large universal extension.

TODO: Add marketplace publishing jobs when tokens are configured.

Co-authored-by: Claude <[email protected]>
Removed implementation details (build commands, directory listings) that
will go stale. Now documents:
- Why platform-specific extensions (not universal)
- Binary resolution fallback chain
- Release flow diagram
- Why GitHub Releases as source of truth
- Why vendor mynah-ui

Co-authored-by: Claude <[email protected]>
- Fix publisher ID: 'symposium' -> 'symposium-dev' to match marketplace
- Enable publish-vscode-marketplace job (uses VSCE_PAT secret)
- Add vsix artifact upload step for publish job to consume

Open VSX publishing still TODO (needs OVSX_PAT secret).

Co-authored-by: Claude <[email protected]>
Extension points to GitHub release archives for binaries.
Wraps Claude Code with Sparkle and Rust Crate Researcher components.

To publish: submit PR to zed-industries/extensions adding this as a submodule.

Co-authored-by: Claude <[email protected]>
Documents how releases flow from release-plz through to all channels:
- crates.io (via release-plz)
- VSCode Marketplace + Open VSX (via workflow)
- Zed extensions (via GitHub release archives)
- Direct binary downloads

Co-authored-by: Claude <[email protected]>
@nikomatsakis nikomatsakis changed the title VSCode extension improvements: settings, components, and UX VSCode extension improvements + release infrastructure Dec 14, 2025
nikomatsakis and others added 2 commits December 14, 2025 10:28
Extension ID format is {publisher}.{name}, so 'symposium-dev.symposium'
not 'symposium.symposium'.

Co-authored-by: Claude <[email protected]>
The cancellation logic works correctly, but this test is unreliable
because ElizACP responds faster than the test's timing window allows.
The first prompt completes before the second one arrives.

Co-authored-by: Claude <[email protected]>
@nikomatsakis nikomatsakis merged commit 155c92f into symposium-dev:main Dec 14, 2025
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant