Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
e13a0a7
feat(vscode): cancel previous prompt when sending new one
nikomatsakis Dec 13, 2025
ad70763
chore(vscode): add debug logging for prompt input persistence
nikomatsakis Dec 13, 2025
3881653
feat(vscode): persist prompt input text across webview hide/show
nikomatsakis Dec 13, 2025
efc4f9b
Squashed 'vendor/mynah-ui/' content from commit 345fd24b
nikomatsakis Dec 13, 2025
fb485b5
Merge commit 'efc4f9b5334f7245df23a1f6120fe24514861e85' as 'vendor/my…
nikomatsakis Dec 13, 2025
02651a6
build(vscode): use vendored mynah-ui fork via git subtree
nikomatsakis Dec 13, 2025
d5b1f1f
chore(vscode): remove debug logging for prompt input persistence
nikomatsakis Dec 13, 2025
83c8c69
feat: add requireModifierToSendPrompt config option
nikomatsakis Dec 13, 2025
a3e53b9
feat(vscode): add requireModifierToSend setting
nikomatsakis Dec 13, 2025
d66998a
feat(vscode): add requireModifierToSend checkbox to Settings panel
nikomatsakis Dec 14, 2025
18c13b6
feat(vscode): add Sparkle and Rust Crate Researcher component toggles
nikomatsakis Dec 14, 2025
484bd83
test(vscode): add settings configuration tests
nikomatsakis Dec 14, 2025
c57980d
feat(vscode): include components in AgentConfiguration
nikomatsakis Dec 14, 2025
587e809
fix(ci): build vendored mynah-ui before vscode extension
nikomatsakis Dec 14, 2025
aafea24
docs(vscode): add packaging chapter and fix .vscodeignore
nikomatsakis Dec 14, 2025
6a9ff4d
chore: configure release-plz
nikomatsakis Dec 14, 2025
c980f0b
feat(ci): add release workflow for binaries and VSCode extensions
nikomatsakis Dec 14, 2025
f22dd00
docs(vscode): rewrite packaging docs to focus on design decisions
nikomatsakis Dec 14, 2025
2dfa068
feat(ci): enable VSCode Marketplace publishing
nikomatsakis Dec 14, 2025
8e5126b
feat(ci): enable Open VSX publishing
nikomatsakis Dec 14, 2025
35bcb15
feat(zed): add Zed extension for Symposium agent server
nikomatsakis Dec 14, 2025
1dc75b3
docs: add distribution chapter covering release orchestration
nikomatsakis Dec 14, 2025
0978bc7
fix(vscode): use correct extension ID in tests
nikomatsakis Dec 14, 2025
14ee397
test(vscode): skip timing-dependent cancellation test
nikomatsakis Dec 14, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 6 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,12 @@ jobs:
cache: "npm"
cache-dependency-path: vscode-extension/package-lock.json

- name: Build vendored mynah-ui
working-directory: vendor/mynah-ui
run: |
npm ci
npm run build

- name: Install dependencies
working-directory: vscode-extension
run: npm ci
Expand Down
189 changes: 189 additions & 0 deletions .github/workflows/release-binaries.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,189 @@
name: Release Binaries

# Triggered when release-plz creates a release for symposium-acp-agent
on:
release:
types: [published]

jobs:
build-binaries:
name: Build ${{ matrix.target }}
if: startsWith(github.ref_name, 'symposium-acp-agent-v')
strategy:
matrix:
include:
- target: x86_64-apple-darwin
os: macos-latest
artifact: symposium-darwin-x64
- target: aarch64-apple-darwin
os: macos-latest
artifact: symposium-darwin-arm64
- target: x86_64-unknown-linux-gnu
os: ubuntu-latest
artifact: symposium-linux-x64
- target: aarch64-unknown-linux-gnu
os: ubuntu-latest
artifact: symposium-linux-arm64
- target: x86_64-unknown-linux-musl
os: ubuntu-latest
artifact: symposium-linux-x64-musl
- target: x86_64-pc-windows-msvc
os: windows-latest
artifact: symposium-windows-x64

runs-on: ${{ matrix.os }}

steps:
- uses: actions/checkout@v4

- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}

- name: Install cross-compilation tools (Linux ARM64)
if: matrix.target == 'aarch64-unknown-linux-gnu'
run: |
sudo apt-get update
sudo apt-get install -y gcc-aarch64-linux-gnu

- name: Install musl tools
if: matrix.target == 'x86_64-unknown-linux-musl'
run: |
sudo apt-get update
sudo apt-get install -y musl-tools

- name: Build
run: cargo build --release --target ${{ matrix.target }} -p symposium-acp-agent
env:
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc

- name: Package (Unix)
if: runner.os != 'Windows'
run: |
mkdir -p dist
cp target/${{ matrix.target }}/release/symposium-acp-agent dist/
cd dist
tar -czvf ${{ matrix.artifact }}.tar.gz symposium-acp-agent

- name: Package (Windows)
if: runner.os == 'Windows'
run: |
mkdir dist
copy target\${{ matrix.target }}\release\symposium-acp-agent.exe dist\
cd dist
7z a ${{ matrix.artifact }}.zip symposium-acp-agent.exe

- name: Upload to release
uses: softprops/action-gh-release@v1
with:
files: dist/${{ matrix.artifact }}.*
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Upload artifact for VSCode job
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.artifact }}
path: dist/symposium-acp-agent*

build-vscode-extensions:
name: Build VSCode Extensions
needs: build-binaries
runs-on: ubuntu-latest

strategy:
matrix:
include:
- vscode-target: darwin-arm64
artifact: symposium-darwin-arm64
binary: symposium-acp-agent
- vscode-target: darwin-x64
artifact: symposium-darwin-x64
binary: symposium-acp-agent
- vscode-target: linux-x64
artifact: symposium-linux-x64
binary: symposium-acp-agent
- vscode-target: linux-arm64
artifact: symposium-linux-arm64
binary: symposium-acp-agent
- vscode-target: win32-x64
artifact: symposium-windows-x64
binary: symposium-acp-agent.exe

steps:
- uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "20"

- name: Download binary
uses: actions/download-artifact@v4
with:
name: ${{ matrix.artifact }}
path: vscode-extension/bin/${{ matrix.vscode-target }}

- name: Make binary executable
if: runner.os != 'Windows'
run: chmod +x vscode-extension/bin/${{ matrix.vscode-target }}/${{ matrix.binary }}

- name: Build vendored mynah-ui
working-directory: vendor/mynah-ui
run: |
npm ci
npm run build

- name: Install extension dependencies
working-directory: vscode-extension
run: npm ci

- name: Package extension
working-directory: vscode-extension
run: npx vsce package --target ${{ matrix.vscode-target }}

- name: Upload to release
uses: softprops/action-gh-release@v1
with:
files: vscode-extension/*.vsix
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Upload vsix artifact
uses: actions/upload-artifact@v4
with:
name: vsix-${{ matrix.vscode-target }}
path: vscode-extension/*.vsix

publish-vscode-marketplace:
name: Publish to VSCode Marketplace
needs: build-vscode-extensions
runs-on: ubuntu-latest
steps:
- name: Download all vsix artifacts
uses: actions/download-artifact@v4
with:
pattern: vsix-*
merge-multiple: true

- name: Publish to marketplace
run: npx vsce publish --packagePath *.vsix
env:
VSCE_PAT: ${{ secrets.VSCE_PAT }}

publish-open-vsx:
name: Publish to Open VSX
needs: build-vscode-extensions
runs-on: ubuntu-latest
steps:
- name: Download all vsix artifacts
uses: actions/download-artifact@v4
with:
pattern: vsix-*
merge-multiple: true

- name: Publish to Open VSX
run: npx ovsx publish *.vsix
env:
OVSX_PAT: ${{ secrets.OVSX_PAT }}
52 changes: 52 additions & 0 deletions .github/workflows/release-plz.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
name: Release-plz

on:
push:
branches:
- main

jobs:
release-plz-release:
name: Release-plz release
runs-on: ubuntu-latest
if: ${{ github.repository_owner == 'symposium-dev' }}
permissions:
contents: write
id-token: write
steps:
- &checkout
name: Checkout repository
uses: actions/checkout@v5
with:
fetch-depth: 0
persist-credentials: true
token: ${{ secrets.RELEASE_PLZ_TOKEN }}
- &install-rust
name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Run release-plz
uses: release-plz/[email protected]
with:
command: release
env:
GITHUB_TOKEN: ${{ secrets.RELEASE_PLZ_TOKEN }}

release-plz-pr:
name: Release-plz PR
runs-on: ubuntu-latest
if: ${{ github.repository_owner == 'symposium-dev' }}
permissions:
pull-requests: write
contents: write
concurrency:
group: release-plz-${{ github.ref }}
cancel-in-progress: false
steps:
- *checkout
- *install-rust
- name: Run release-plz
uses: release-plz/[email protected]
with:
command: release-pr
env:
GITHUB_TOKEN: ${{ secrets.RELEASE_PLZ_TOKEN }}
3 changes: 0 additions & 3 deletions book.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,6 @@ title = "Symposium"
[preprocessor.mermaid]
command = "mdbook-mermaid"

[preprocessor.rfd]
command = "cargo run -p md-rfd-preprocessor --"

[output]

[output.html]
Expand Down
2 changes: 2 additions & 0 deletions md/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
# Design and implementation

- [Overview](./design/implementation-overview.md)
- [Distribution](./design/distribution.md)
- [Components](./design/components.md)
- [Rust Crate Sources](./design/rust-crate-sources.md)
- [VSCode Extension](./design/vscode-extension/architecture.md)
Expand All @@ -27,6 +28,7 @@
- [Webview Lifecycle](./design/vscode-extension/webview-lifecycle.md)
- [Testing](./design/vscode-extension/testing.md)
- [Testing Implementation](./design/vscode-extension/testing-implementation.md)
- [Packaging](./design/vscode-extension/packaging.md)
- [Implementation Status](./design/vscode-extension/implementation-status.md)

# References
Expand Down
79 changes: 79 additions & 0 deletions md/design/distribution.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
# Distribution

This chapter documents how Symposium is released and distributed across platforms.

## Release Orchestration

Releases are triggered by [release-plz](https://release-plz.dev/), which:

1. Creates a release PR when changes accumulate on `main`
2. When merged, publishes to crates.io and creates GitHub releases with tags

The `symposium-acp-agent-v*` tag triggers the binary release workflow.

## Distribution Channels

```
release-plz creates tag
┌───────────────────────────────────────┐
│ GitHub Release │
│ - Binary archives (all platforms) │
│ - VSCode .vsix files │
│ - Source reference │
└───────────────────────────────────────┘
┌─────────────┬─────────────┬───────────┐
│ crates.io │ VSCode │ Zed │
│ │ Marketplace │Extensions │
│ │ + Open VSX │ │
└─────────────┴─────────────┴───────────┘
```

### crates.io

The Rust crates are published directly by release-plz. Users can install via:
```bash
cargo install symposium-acp-agent
```

### VSCode Marketplace / Open VSX

Platform-specific extensions are built and published automatically. Each platform gets its own ~7MB extension containing only that platform's binary.

See [VSCode Packaging](./vscode-extension/packaging.md) for details.

### Zed Extensions

The Zed extension (`zed-extension/`) points to GitHub release archives. Publishing requires submitting a PR to the [zed-industries/extensions](https://github.com/zed-industries/extensions) repository.

### Direct Download

Binary archives are attached to each GitHub release for direct download:
- `symposium-darwin-arm64.tar.gz`
- `symposium-darwin-x64.tar.gz`
- `symposium-linux-x64.tar.gz`
- `symposium-linux-arm64.tar.gz`
- `symposium-linux-x64-musl.tar.gz`
- `symposium-windows-x64.zip`

## Supported Platforms

| Platform | Architecture | Notes |
|----------|--------------|-------|
| macOS | arm64 (Apple Silicon) | Primary development platform |
| macOS | x64 (Intel) | |
| Linux | x64 (glibc) | Standard Linux distributions |
| Linux | arm64 | ARM servers, Raspberry Pi |
| Linux | x64 (musl) | Static binary, Alpine Linux |
| Windows | x64 | |

## Secrets Required

The release workflow requires these GitHub secrets:

| Secret | Purpose |
|--------|---------|
| `RELEASE_PLZ_TOKEN` | GitHub token for release-plz to create releases |
| `VSCE_PAT` | Azure DevOps PAT for VSCode Marketplace |
| `OVSX_PAT` | Open VSX access token |
Loading