From 9f6158ddd266ef1c0b6b22acf4e69ef3c41b8ce8 Mon Sep 17 00:00:00 2001 From: Dorian Date: Tue, 3 Mar 2026 22:29:18 +0000 Subject: [PATCH] =?UTF-8?q?chore:=20prepare=20automation=20loop=20for=20Pl?= =?UTF-8?q?an=202=20(M8=E2=80=93M20)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add PLAN2.md with 116 tasks across M8–M20 with testing gates - Populate loop/plan.md with all new tasks (30-attempt retry policy) - Update loop/prompt.md to enforce glass design system and PLAN2.md - Fix PassphraseDialog to use glass-card/gradient-button design system - Fix crypto.randomUUID fallback for non-secure contexts - Fix dev.sh to skip proxy startup if port 3141 already in use - Fix PWA manifest for Android A2HS (purpose:any, display_override, id) Co-Authored-By: Claude Opus 4.6 --- PLAN2.md | 443 ++++++++++++++++++ PROGRESS.md | 4 +- loop/plan.md | 229 ++++++--- loop/prompt.md | 45 +- packages/app/scripts/dev.sh | 11 +- .../src/components/ui/PassphraseDialog.vue | 83 ++-- packages/app/src/stores/chat.ts | 15 +- packages/app/vite.config.ts | 5 + 8 files changed, 703 insertions(+), 132 deletions(-) create mode 100644 PLAN2.md diff --git a/PLAN2.md b/PLAN2.md new file mode 100644 index 00000000..6b86299f --- /dev/null +++ b/PLAN2.md @@ -0,0 +1,443 @@ +# AIUI Plan 2 — Extended Roadmap + +## Context & Philosophy + +This plan continues from M0–M7 (all complete). Every item below must honour the core philosophy: +- **Glass morphism only** — `glass`, `glass-card`, `glass-button`, `gradient-button`. No light mode, no gray-900 hacks. +- **Open source / MIT/Apache-2.0** — no proprietary dependencies +- **Decentralised-first** — no vendor lock-in, pluggable everything +- **Bitcoin only** — sats, Lightning, Cashu, Fedimint. AIUI is never a wallet — always deep-link +- **Privacy-first** — no telemetry, no tracking, E2E encryption +- **Mobile-first, everywhere-perfect** — desktop enhances mobile, never replaces it +- **Plugin-everything** — all integrations go through typed plugin interfaces +- **< 250 KB gzipped initial load** — everything else lazy-loaded + +--- + +## M8: Chat UX Polish + +### M8.1 — Message Editing & Regeneration +Edit any sent message in place; all messages after it are cleared and AI regenerates from that point. Pencil icon appears on hover. Textarea replaces bubble on click. `Escape` cancels, `Enter` submits. + +### M8.2 — Conversation Branching +Fork from any assistant message. Branch indicator in chat header (e.g. "Branch 2 of 3"). Branch switcher as a compact glass pill above the forked message. Each branch stored as a separate conversation in IDB. + +### M8.3 — Reply-to Threading +Click any message → "Reply" option. Reply shows a quoted excerpt of the target message above the input. Thread line connects quoted block to source. Visual only — does not send separate context to AI, just prepends `> quote` to the user message. + +### M8.4 — Conversation Search +`Cmd+F` / search icon opens a slide-down glass panel above chat. Real-time filtering highlights matching messages. Up/down arrows jump between matches. `Escape` closes. + +### M8.5 — Auto-Title Generation +After the first AI response in a new conversation, send a background request: `"Give a 4-word title for this conversation: {first user message}"`. Replace "New Chat" silently. No loading state — title updates smoothly. + +### M8.6 — Context Window Visualiser +Slim progress bar at top of chat column. Estimates token count from message lengths (1 token ≈ 4 chars). Shows percentage of model's context window used. Bitcoin-orange fill → red when > 80%. Tooltip: "~12,400 / 200,000 tokens used". + +### M8.7 — Conversation Export +Three-dot menu on each conversation → Export. Options: Markdown (download .md), JSON (full data), Plain text. Uses File System Access API when available, falls back to ``. No server involved. + +### M8.8 — Import Conversations +Settings → Import → drag-and-drop or file picker for AIUI JSON export or Claude.ai export JSON. Merges into existing conversations without overwriting. Shows import summary (N conversations added). + +### M8.9 — Long-press / Right-click Context Menus +Messages: Copy, Edit, Delete, Reply, Branch from here. Content cards: Favourite, Share, Open detail, Copy title. Uses a reusable `ContextMenu.vue` glass-card component positioned at cursor. Closes on outside click or `Escape`. + +### M8.10 — Scroll Position Memory +When switching between conversations, restore the previous scroll position. Store position per conversation ID in a `Map` (not persisted — session only). Virtual scroller should seek to the stored offset on mount. + +--- + +## M9: AI Experience + +### M9.1 — Multi-Model Comparison Mode +Split-screen: same prompt sent to two models simultaneously. Side-by-side layout on desktop, swipeable tabs on mobile. Model selector per pane. Shows streaming output in both. Useful for comparing Claude vs OpenRouter models. + +### M9.2 — System Prompt Editor +Settings → Personas. Create named personas (e.g. "Film Critic", "Bitcoin Analyst"). Each has a system prompt, model preference, and accent colour. Select persona per conversation via a pill menu above the input. Default persona applies to all new conversations. + +### M9.3 — Prompt Template Library +`/` in chat input opens a command palette (glass dropdown). Templates listed with title + preview. Variables in templates use `{{variable}}` syntax — on selection, a mini form appears to fill them. Templates stored in IDB, importable/exportable as JSON. + +### M9.4 — Vision Input +Drag-and-drop or paste image into chat input. Image preview appears as a thumbnail above the input. On send, image encoded as base64 and included in the message content array (Claude vision format). Only enabled when active model supports vision. Max 4 images per message. + +### M9.5 — Response Feedback +Thumbs up / thumbs down on each AI message (appears on hover). Stored locally in IDB per message ID. Shown in conversation export. Future: aggregate across sessions for personal preference tracking. Never sent anywhere. + +### M9.6 — Token & Cost Estimator +Settings toggle to show token counts. Each message shows estimated token count in a tiny badge (bottom-right of bubble). Running total shown in context window bar. Cost estimate based on current model's pricing (hardcoded table, updated with model releases). + +### M9.7 — AI Memory Panel +Settings → Memory. A list of "always remember" facts injected into every system prompt. e.g. "I live in London", "I prefer sats over fiat". Edit/delete/add. Max 20 items. Stored encrypted in IDB. Shown as a collapsed "Memory" section in the system prompt. + +### M9.8 — Model Capabilities Badge +Model selector shows capability badges: Vision 👁, Tools 🔧, Long context 📄. Tooltip explains each. Greys out vision input button when selected model doesn't support it. Updates dynamically when switching providers. + +### M9.9 — Temperature & Params Slider +Advanced settings section (collapsed by default) beneath the model selector. Sliders for: Temperature (0–1), Max tokens (256–8192), Top-P. Values persisted per conversation in IDB. Reset to defaults button. + +### M9.10 — Stop Sequence Configuration +Advanced settings: configurable stop sequences (comma-separated). Applied to all requests for that conversation. Useful for structured output tasks. Shown as a small tag list below the slider panel. + +--- + +## M10: Advanced Content Renderers + +### M10.1 — Full Article Renderer +When AI returns a long-form article (> 800 words with headings), render it in the panel as a paginated article view. Features: auto-generated table of contents (sticky left sidebar on desktop), estimated reading time, font-size control, print mode. Uses existing markdown-it instance. + +### M10.2 — PDF Viewer +Content type `pdf` renders via `pdfjs-dist` (lazy loaded, ~400 KB). Page navigation, zoom, text selection, search within PDF. Chat preview: thumbnail of page 1. Panel play: full viewer. Files loaded from URL (no local file upload in v1). + +### M10.3 — Map Renderer +Content type `place` upgrades from static card to interactive Leaflet map (lazy loaded). OpenStreetMap tiles (no API key needed). Pins for all places mentioned in conversation. Cluster pins when > 10 places. Panel play: fullscreen map with place list sidebar. + +### M10.4 — Recipe Renderer +New content type `recipe`. Tag: ``. Structured display: ingredients checklist (tap to strike through), numbered steps, metadata chips (time, servings, calories). "Scale recipe" slider (0.5×–4×) recalculates quantities. + +### M10.5 — Event Renderer +New content type `event`. Tag: ``. Shows: date chip, location, countdown. Add to calendar buttons: ICS download, Google Calendar URL, Apple Calendar. Glass card in chat, full detail in panel. + +### M10.6 — Math Renderer +Detect `$...$` (inline) and `$$...$$` (block) LaTeX in chat messages. Render using KaTeX (lazy loaded, ~70 KB). Fallback: display raw LaTeX in a code block. No re-renders during streaming — batch render on stream end. + +### M10.7 — Mermaid Diagram Renderer +Detect ` ```mermaid ` fenced code blocks. Render using Mermaid.js (lazy loaded, ~500 KB). Support: flowchart, sequence, gantt, entity-relationship. Dark theme matching glass design. Copy SVG button. Pan/zoom on mobile. + +### M10.8 — Audio Waveform Player +Upgrade PlayerBar for locally-loaded audio. Use WaveSurfer.js (lazy loaded) to show waveform visualization. Waveform rendered in Bitcoin orange on dark background. Click to seek. Existing queue/next/prev preserved. + +### M10.9 — Table Renderer +Markdown tables rendered as interactive tables: column sort (click header), row filter (search input above table), CSV export button. Uses existing markdown-it but overrides the table token renderer. Max 500 rows before virtualisation kicks in. + +### M10.10 — Timeline Renderer +New content type `timeline`. AI returns a series of `` tags. Panel renders them as a vertical timeline: date on left, event card on right, connecting line. Animate entries in as they appear during streaming. + +### M10.11 — Code Runner +Fenced code blocks with a "Run" button for HTML/CSS/JS. Opens a sandboxed `