docs: update all docs for session groups, Deno sidecar, signing key, and tests
Update progress log, phases, task_plan decisions, CLAUDE.md files, README, TODO, and CHANGELOG to reflect session groups, Deno-first sidecar integration, auto-update signing key, and 104-test suite.
This commit is contained in:
parent
020dc20d4f
commit
d021061b8a
8 changed files with 80 additions and 27 deletions
|
|
@ -20,7 +20,7 @@ bterminal-v2/
|
|||
src/
|
||||
main.rs # Tauri app entry
|
||||
pty.rs # PTY management (portable-pty, not plugin)
|
||||
sidecar.rs # Node.js sidecar lifecycle (spawn, restart, health)
|
||||
sidecar.rs # Sidecar lifecycle (Deno-first + Node.js fallback, SidecarCommand)
|
||||
watcher.rs # File watcher for markdown viewer
|
||||
session.rs # Session + SSH session persistence (SQLite via rusqlite)
|
||||
ctx.rs # Read-only ctx context DB access
|
||||
|
|
@ -75,6 +75,7 @@ bterminal-v2/
|
|||
app.css
|
||||
sidecar/
|
||||
agent-runner.ts # Node.js sidecar entry point
|
||||
agent-runner-deno.ts # Deno sidecar (preferred when deno available)
|
||||
package.json # Agent SDK dependency
|
||||
esbuild.config.ts # Bundle to single file
|
||||
package.json
|
||||
|
|
@ -168,7 +169,7 @@ bterminal-v2/
|
|||
- [x] SQLite persistence for sessions (rusqlite with bundled feature)
|
||||
- [x] Session types: terminal, agent, markdown (SSH via terminal args)
|
||||
- [x] Session CRUD: save, delete, update_title, touch (last_used_at)
|
||||
- [ ] Session groups/folders (deferred — not needed for MVP)
|
||||
- [x] Session groups/folders — group_name column, setPaneGroup, grouped sidebar with collapsible headers
|
||||
- [x] Remember last layout on restart (preset + pane_ids in layout_state table)
|
||||
- [x] Auto-restore panes on app startup (restoreFromDb in layout store)
|
||||
|
||||
|
|
@ -226,7 +227,8 @@ bterminal-v2/
|
|||
- [x] Auto-updater plugin integrated (tauri-plugin-updater Rust + @tauri-apps/plugin-updater npm + updater.ts)
|
||||
- [x] Auto-update latest.json generation in CI (version, platform URL, signature from .sig file)
|
||||
- [x] release.yml: TAURI_SIGNING_PRIVATE_KEY env vars passed to build step
|
||||
- [ ] Auto-update signing key generation + TAURI_SIGNING_PRIVATE_KEY secret in GitHub repo
|
||||
- [x] Auto-update signing key generated, pubkey set in tauri.conf.json
|
||||
- [ ] TAURI_SIGNING_PRIVATE_KEY secret must be set in GitHub repo settings
|
||||
|
||||
### System Requirements
|
||||
- Node.js 20+ (for Agent SDK sidecar)
|
||||
|
|
|
|||
|
|
@ -178,8 +178,42 @@ Architecture decision: Uses `claude` CLI with `--output-format stream-json` inst
|
|||
- [x] session.rs tests: SessionDb CRUD (sessions, SSH sessions, settings, layout), uses tempfile::tempdir()
|
||||
- [x] ctx.rs tests: CtxDb error handling with missing database (conn=None)
|
||||
|
||||
### Session: 2026-03-06 (continued) — Session Groups, Auto-Update Key, Deno Sidecar, Tests
|
||||
|
||||
#### Auto-Update Signing Key
|
||||
- [x] Generated Tauri signing keypair (minisign)
|
||||
- [x] Set pubkey in tauri.conf.json updater.pubkey field (base64 encoded)
|
||||
- [x] Private key to be stored as TAURI_SIGNING_PRIVATE_KEY GitHub secret by user
|
||||
|
||||
#### Session Groups/Folders
|
||||
- [x] Added group_name column to sessions table (session.rs, ALTER TABLE migration with pragma_table_info check)
|
||||
- [x] Session struct: added group_name field with #[serde(default)]
|
||||
- [x] SessionDb: update_group(id, group_name) method + save/list queries updated
|
||||
- [x] Tauri command: session_update_group registered in lib.rs
|
||||
- [x] Frontend: updateSessionGroup() in session-bridge.ts
|
||||
- [x] Layout store: Pane.group? field, setPaneGroup(id, group) function in layout.svelte.ts
|
||||
- [x] SessionList.svelte: grouped sidebar with collapsible headers (arrow + count), right-click to set group via prompt()
|
||||
- [x] Svelte 5 snippet pattern used for paneItem to avoid duplication across grouped/ungrouped rendering
|
||||
|
||||
#### Deno Sidecar Integration (upgraded from PoC)
|
||||
- [x] SidecarCommand struct in sidecar.rs: { program, args } abstracts runtime choice
|
||||
- [x] resolve_sidecar_command(): Deno-first resolution (checks agent-runner-deno.ts + deno availability), Node.js fallback
|
||||
- [x] Both sidecar runners bundled in tauri.conf.json resources array
|
||||
- [x] Graceful fallback: if Deno binary not found in PATH, falls back to Node.js with log warning
|
||||
|
||||
#### E2E/Integration Tests
|
||||
- [x] layout.test.ts (30 tests): addPane, removePane, focusPane, setPreset, autoPreset, getGridTemplate, getPaneGridArea, renamePaneTitle, setPaneGroup
|
||||
- [x] agent-bridge.test.ts (11 tests): Tauri IPC mock pattern with vi.hoisted(), invoke/listen wrappers
|
||||
- [x] agent-dispatcher.test.ts (18 tests): sidecar event routing, crash detection, vi.useFakeTimers() for async setTimeout
|
||||
- [x] sdk-messages.test.ts rewrite (25 tests): removed unused ErrorContent import
|
||||
- [x] E2E scaffold: v2/tests/e2e/README.md documenting WebDriver approach
|
||||
- [x] Total: 104 vitest tests + 29 cargo tests, all passing
|
||||
|
||||
Build status: TypeScript 0 errors, Rust 0 errors (1 pre-existing warning), all tests green.
|
||||
|
||||
### Next Steps
|
||||
- [ ] Auto-update signing key generation + TAURI_SIGNING_PRIVATE_KEY secret in GitHub repo
|
||||
- [ ] Deno sidecar: test with real claude CLI, benchmark vs Node.js, integrate with sidecar.rs
|
||||
- [ ] E2E testing with Playwright
|
||||
- [ ] Session groups/folders in sidebar
|
||||
- [ ] Set TAURI_SIGNING_PRIVATE_KEY secret in GitHub repo settings
|
||||
- [ ] Deno sidecar: test with real claude CLI, benchmark startup time vs Node.js
|
||||
- [ ] E2E testing with Playwright/WebDriver (when display server available)
|
||||
- [ ] Multi-machine support (remote agents via WebSocket)
|
||||
- [ ] Agent Teams integration
|
||||
|
|
|
|||
|
|
@ -136,10 +136,13 @@ See [phases.md](phases.md) for the full phased implementation plan (Phases 1-6).
|
|||
| Vitest for frontend tests | Vitest over Jest — zero-config with Vite, same transform pipeline, faster. Test config in vite.config.ts. | 2026-03-06 |
|
||||
| Deno sidecar evaluation | Proof-of-concept agent-runner-deno.ts created. Deno compiles to single binary (better packaging). Same NDJSON protocol. Not yet integrated. | 2026-03-06 |
|
||||
| Splitter overlays for pane resize | Fixed-position divs outside CSS Grid (avoids layout interference). Mouse drag updates customColumns/customRows state. Resets on preset change. | 2026-03-06 |
|
||||
| Deno-first sidecar with Node.js fallback | SidecarCommand struct abstracts runtime. resolve_sidecar_command() checks Deno first (runs TS directly, no build step), falls back to Node.js. Both bundled in tauri.conf.json resources. | 2026-03-06 |
|
||||
| Session groups/folders | group_name column in sessions table with ALTER TABLE migration. Pane.group field in layout store. Collapsible group headers in sidebar. Right-click to set group. | 2026-03-06 |
|
||||
| Auto-update signing key | Generated minisign keypair. Pubkey set in tauri.conf.json. Private key for TAURI_SIGNING_PRIVATE_KEY GitHub secret. | 2026-03-06 |
|
||||
|
||||
## Open Questions
|
||||
|
||||
1. **Node.js or Deno for sidecar?** Node.js has the SDK package. Deno would be a single binary (better packaging) but needs SDK compatibility testing. → Start Node.js, evaluate Deno later.
|
||||
1. **Node.js or Deno for sidecar?** Resolved: Deno-first with Node.js fallback. SidecarCommand struct in sidecar.rs abstracts the choice. Deno preferred (runs TS directly, compiles to single binary). Falls back to Node.js if Deno not in PATH.
|
||||
2. **Multi-machine support?** Remote agents via WebSocket. Phase 7+ feature.
|
||||
3. **Agent Teams integration?** Experimental Anthropic feature. Natural fit but adds complexity. Phase 7+.
|
||||
4. **Electron escape hatch threshold?** If Canvas xterm.js proves >50ms latency on target system with 4 panes, switch to Electron. Benchmark in Phase 2.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue