phase6: personas + 56-template library, slash commands, command palette, compare mode, KaTeX/Mermaid, dictation, auto-trim, conversation tools
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
20 changed files +3,356 −141
modified
docs/PLAN.md
+22 −1
@@ -124,7 +124,28 @@ icon (Big Sur squircle, sky gradient, white Z with block caret) as its PWA | |||||
| 124 | identity, matching the Dock/home-screen look of the macOS app. Favicon, | 124 | identity, matching the Dock/home-screen look of the macOS app. Favicon, | ||
| 125 | apple-touch, maskable, OG image and social meta are all in place. | 125 | apple-touch, maskable, OG image and social meta are all in place. | ||
| 126 | 126 | ||||
| 127 | −## Phase 6 — Features — pending | 127 | +## Phase 6 — Features | ||
| 128 | + | ||||
| 129 | +- [x] Personas: all 8 native personas ported verbatim (`features/personasData.ts`); apply via palette or slash menu (system prompt + personaID per conversation) | ||||
| 130 | +- [x] Prompt Library: all 56 native templates ported verbatim (8 categories × 7, `features/promptLibraryData.ts`), `{{input}}` substitution | ||||
| 131 | +- [x] Slash commands: `/` in the input → menu with quick tools (/summarize /translate /rewrite /explain), full template library, personas; keyboard-driven | ||||
| 132 | +- [x] Command palette (⌘K): actions (new chat, compare, switch model, settings, focus mode, summarize, duplicate), jump-to-conversation, models, personas, templates | ||||
| 133 | +- [x] Multi-model compare: 2–4 columns, per-column model chip/stream/stop/copy/regenerate, broadcast prompt, **promote answer into thread** | ||||
| 134 | +- [x] Branching/variants (Phase 4 store): regenerate keeps prior answer as a variant with ‹ › switcher; branch-from-message forks a conversation; edit & fork | ||||
| 135 | +- [x] Rich rendering: GFM + tables + task lists (Phase 4) + **KaTeX math** + **Mermaid diagrams** (lazy-loaded ~1MB chunk, strict security level) | ||||
| 136 | +- [x] Read-aloud (Web Speech TTS) + dictation (SpeechRecognition, mic button) | ||||
| 137 | +- [x] Continue generation (last assistant message action), Stop, live elapsed + tok/s | ||||
| 138 | +- [x] Token/cost HUD + context bar (Phase 4) + **auto-trim oldest turns** at 90% of the window (system prompt kept, toast informs) | ||||
| 139 | +- [x] Conversation tools: summarize (cheapest model), duplicate, export MD/JSON, undo delete, pin, rename, search | ||||
| 140 | +- [x] QoL: retry w/ backoff (Phase 2), human error toasts naming the provider + CORS hint, autosave everywhere, PWA shell precache trimmed 4.7MB → 1.15MB (mermaid/katex runtime-cached) | ||||
| 141 | +- [x] Coherence sweep #2: headers ✓, storage/network layering ✓, accent hexes moved to design/accents.ts | ||||
| 142 | + | ||||
| 143 | +**Phase 6 summary.** Full feature parity plus the web-specific extras: the | ||||
| 144 | +native personas and 56-template library are ported verbatim and surfaced | ||||
| 145 | +through both the ⌘K palette and a `/` slash menu; compare mode broadcasts to | ||||
| 146 | +up to four independently streaming columns with promote-to-thread; math and | ||||
| 147 | +diagrams render (lazily); reading aloud, dictation, auto-trim, and conversation | ||||
| 148 | +tools round out the spec. Sweep clean, `npm run check` green. | ||||
| 128 | 149 | ||||
| 129 | ## Phase 7 — Verification — pending | 150 | ## Phase 7 — Verification — pending | ||
| 130 | 151 | ||||
modified
package-lock.json
+1516 −110
Large diff (1,941 lines) is not loaded by default to keep the page fast.Load diff
modified
package.json
+4 −0
Large diff (15 lines) is not loaded by default to keep the page fast.Load diff
modified
src/App.tsx
+19 −1
Large diff (40 lines) is not loaded by default to keep the page fast.Load diff
modified
src/components/ChatView.tsx
+2 −1
Large diff (14 lines) is not loaded by default to keep the page fast.Load diff
added
src/components/CommandPalette.tsx
+294 −0
Large diff (294 lines) is not loaded by default to keep the page fast.Load diff
added
src/components/CompareView.tsx
+327 −0
Large diff (327 lines) is not loaded by default to keep the page fast.Load diff
modified
src/components/InputBar.tsx
+73 −2
Large diff (101 lines) is not loaded by default to keep the page fast.Load diff
modified
src/components/Markdown.tsx
+24 −3
Large diff (50 lines) is not loaded by default to keep the page fast.Load diff
added
src/components/Mermaid.tsx
+62 −0
Large diff (62 lines) is not loaded by default to keep the page fast.Load diff
modified
src/components/MessageBubble.tsx
+12 −0
Large diff (31 lines) is not loaded by default to keep the page fast.Load diff
modified
src/components/SettingsModal.tsx
+7 −14
Large diff (39 lines) is not loaded by default to keep the page fast.Load diff
added
src/components/SlashMenu.tsx
+199 −0
Large diff (199 lines) is not loaded by default to keep the page fast.Load diff
added
src/design/accents.ts
+21 −0
Large diff (21 lines) is not loaded by default to keep the page fast.Load diff
added
src/features/conversationTools.ts
+94 −0
Large diff (94 lines) is not loaded by default to keep the page fast.Load diff
added
src/features/personasData.ts
+80 −0
Large diff (80 lines) is not loaded by default to keep the page fast.Load diff
added
src/features/promptLibraryData.ts
+564 −0
Large diff (564 lines) is not loaded by default to keep the page fast.Load diff
modified
src/state/store.ts
+11 −4
Large diff (27 lines) is not loaded by default to keep the page fast.Load diff
modified
tsconfig.app.tsbuildinfo
+1 −1
Large diff (4 lines) is not loaded by default to keep the page fast.Load diff
modified
vite.config.ts
+24 −4
Large diff (37 lines) is not loaded by default to keep the page fast.Load diff