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:
Hibryda 2026-03-06 15:42:44 +01:00
parent 020dc20d4f
commit d021061b8a
8 changed files with 80 additions and 27 deletions

View file

@ -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)

View file

@ -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

View file

@ -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.