diff --git a/CHANGELOG.md b/CHANGELOG.md index 27a2c90..dccde71 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Security - `claude_read_skill` path traversal: added `canonicalize()` + `starts_with()` validation to prevent reading arbitrary files via crafted skill paths (lib.rs) +### Added +- Collapsible text messages in AgentPane: model responses wrapped in `
` (open by default, user-collapsible with first-line preview) (AgentPane.svelte) +- Collapsible cost summary in AgentPane: `cost.result` wrapped in `
` (collapsed by default, expandable with 80-char preview) (AgentPane.svelte) +- Project max aspect ratio setting: `project_max_aspect` (float 0.3–3.0, default 1.0) limits project box width via CSS `max-width: calc(100vh * var(--project-max-aspect))` (SettingsTab.svelte, ProjectGrid.svelte, App.svelte) +- No-implicit-push rule: `.claude/rules/52-no-implicit-push.md` — never push unless user explicitly asks +- `StartupWMClass=bterminal` in install-v2.sh .desktop template for GNOME auto-move extension compatibility + ### Changed - AgentPane UI redesign: sans-serif root font (system-ui), tool calls paired with results in collapsible `
` groups, hook messages collapsed into compact labels, context window usage meter in status strip, cost bar made minimal (no background), session summary with translucent background, two-phase scroll anchoring, tool-aware output truncation (Bash 500/Read 50/Glob 20 lines), colors softened via `color-mix()`, responsive margins via container queries (AgentPane.svelte) - MarkdownPane: added inner scroll wrapper with `container-type: inline-size`, responsive padding via shared `--bterminal-pane-padding-inline` variable (MarkdownPane.svelte) diff --git a/TODO.md b/TODO.md index 26c1c93..09a7065 100644 --- a/TODO.md +++ b/TODO.md @@ -8,10 +8,10 @@ - [ ] **Multi-machine TLS/certificate pinning** -- TLS support for bterminal-relay + certificate pinning in RemoteManager. - [ ] **Agent Teams real-world testing** -- Env var whitelist fix done. 3 test sessions ran ($1.10, $0.69, $1.70) but model didn't spawn subagents — needs complex multi-part prompts to trigger delegation. Test with CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1. -- [ ] **AgentPane visual verification** -- Redesigned UI not yet tested in dev mode. Launch `npm run tauri dev` and verify tool grouping, hook collapsing, context meter, scroll anchoring work correctly. - ## Completed +- [x] **AgentPane collapsibles + aspect ratio** -- Text messages collapsible (open by default), cost summary collapsed by default. Project max aspect ratio setting (0.3–3.0, default 1.0) with CSS var + SettingsTab stepper. No-implicit-push rule 52. Desktop StartupWMClass. | Done: 2026-03-09 +- [x] **AgentPane + MarkdownPane UI redesign** -- AgentPane: sans-serif font, tool call/result pairing via $derived.by, hook message collapsing, context meter, muted colors via color-mix(), responsive margins via container queries. MarkdownPane: container query wrapper, shared responsive padding variable. Tribunal-elected design (S-3-R4, 88% confidence). 139/139 tests pass. | Done: 2026-03-09 - [x] **E2E testing — consolidated & expanded** -- Consolidated 4 spec files into single bterminal.test.ts (Tauri single-session requirement). 25 tests across 4 describe blocks: Smoke(6), Workspace(8), Settings(6), Keyboard(5). Fixed WebDriver clicks on Svelte components via browser.execute(), removed tauri-plugin-log (redundant with telemetry::init()). | Done: 2026-03-08 - [x] **px→rem conversion** -- All ~100 px layout violations converted to rem across 10 components (AgentPane, ToastContainer, CommandPalette, SettingsTab, TeamAgentsPanel, AgentCard, StatusBar, AgentTree, TerminalPane, AgentPreviewPane). Rule 18 fully enforced. | Done: 2026-03-08 - [x] **Workspace teardown race fix** -- Added pendingPersistCount counter + waitForPendingPersistence() fence in agent-dispatcher.ts. switchGroup() awaits persistence before clearing state. Last open HIGH audit finding resolved. | Done: 2026-03-08 @@ -20,6 +20,3 @@ - [x] **Security & correctness audit fixes** -- 5 CRITICAL + 4 HIGH findings fixed: path traversal, race conditions, memory leaks, listener leaks, transaction safety. 3 false positives dismissed. | Done: 2026-03-08 - [x] **ctx dead code cleanup** -- Removed ContextTab.svelte, CtxProject struct, list_projects(), ctx_list_projects command. | Done: 2026-03-08 - [x] **ContextPane project-scoped redesign** -- Auto-registers project in ctx DB on mount. Removed project selector. | Done: 2026-03-08 -- [x] **ctx init fix + UI init button** -- Fixed ctx CLI, added Initialize Database button in ContextPane. | Done: 2026-03-08 -- [x] **Premium markdown typography** -- MarkdownPane CSS overhaul with Inter font, prose spacing, gradient HR. | Done: 2026-03-08 -- [x] **AgentPane + MarkdownPane UI redesign** -- AgentPane: sans-serif font, tool call/result pairing via $derived.by, hook message collapsing, context meter, muted colors via color-mix(), responsive margins via container queries. MarkdownPane: container query wrapper, shared responsive padding variable. Tribunal-elected design (S-3-R4, 88% confidence). 139/139 tests pass. | Done: 2026-03-09 diff --git a/docs/progress.md b/docs/progress.md index 99014dd..0873c1d 100644 --- a/docs/progress.md +++ b/docs/progress.md @@ -223,9 +223,27 @@ - [x] Converted App.svelte sidebar header styles from px to rem (padding, close button, border-radius) - [x] Changed GlobalTabBar rail-btn color from --ctp-overlay1 to --ctp-subtext0 +### Session: 2026-03-09 — AgentPane Collapsibles, Aspect Ratio, Desktop Integration + +#### AgentPane Collapsible Messages +- [x] Text messages (`msg.type === 'text'`) wrapped in `
` — open by default, collapsible +- [x] Cost summary (`cost.result`) wrapped in `
` — collapsed by default, expandable +- [x] CSS: `.msg-text-collapsible` and `.msg-summary-collapsible` with preview text + +#### Project Max Aspect Ratio Setting +- [x] New `project_max_aspect` SQLite setting (float, default 1.0, range 0.3–3.0) +- [x] ProjectGrid: `max-width: calc(100vh * var(--project-max-aspect, 1))` on `.project-slot` +- [x] SettingsTab: stepper UI in Appearance section +- [x] App.svelte: restore on startup via getSetting() + +#### Desktop Integration +- [x] install-v2.sh: added `StartupWMClass=bterminal` to .desktop template +- [x] GNOME auto-move extension compatible + +#### No-Implicit-Push Rule +- [x] Created `.claude/rules/52-no-implicit-push.md` — never push unless explicitly asked + ### Next Steps - [ ] Real-world relay testing (2 machines) - [ ] TLS/certificate pinning for relay connections -- [ ] E2E testing with Playwright/WebDriver (when display server available) - [ ] Test agent teams with CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 -- [ ] Convert remaining components from px to rem per rule 18