Files
archy/loop/plan.md
T
DorianandClaude Opus 4.6 d7d1f1df37 docs: mark M11 complete and pass TEST:M11 gate
74 tests pass, 0 typecheck errors, 0 lint errors.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 00:31:23 +00:00

185 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AIUI Plan 2 — Automated Loop Task List
> **Format**: `- [ ]` = pending, `- [x]` = done.
> Make at least 30 attempts on any difficult task before moving on. Loop reads this file. Specs are in `PLAN2.md`. Design rules are in `loop/prompt.md`.
## M8: Chat UX Polish
- [x] **M8.1** — Message editing & regeneration (pencil icon on hover, re-send clears subsequent messages)
- [x] **M8.2** — Conversation branching (fork from any message, branch switcher pill, each branch stored in IDB)
- [x] **M8.3** — Reply-to threading (quoted excerpt in input, thread line visual, prepend `> quote` to message)
- [x] **M8.4** — Conversation search (`Cmd+F` glass panel, real-time highlight, up/down to jump between matches)
- [x] **M8.5** — Auto-title generation (background AI call after first exchange, silently replaces "New Chat")
- [x] **M8.6** — Context window visualiser (slim progress bar, token estimate, orange → red > 80%)
- [x] **M8.7** — Conversation export (Markdown / JSON / plain text, File System Access API + `<a download>` fallback)
- [x] **M8.8** — Import conversations (drag-and-drop JSON, AIUI format + Claude.ai export format, merge into IDB)
- [x] **M8.9** — Long-press / right-click context menus (messages + content cards, `ContextMenu.vue` glass-card)
- [x] **M8.10** — Scroll position memory (restore per conversation ID, works with virtual scroller)
- [x] **TEST:M8** — Run `pnpm test` and `pnpm typecheck && pnpm lint`. Fix all failures before proceeding.
## M9: AI Experience
- [x] **M9.1** — Multi-model comparison mode (split-screen same prompt → 2 models, swipeable on mobile)
- [x] **M9.2** — System prompt editor / personas (named personas, model preference, accent, per-conversation)
- [x] **M9.3** — Prompt template library (`/` command palette, `{{variable}}` substitution, IDB-persisted)
- [x] **M9.4** — Vision input (drag-and-drop image, base64 in message content, only when model supports vision)
- [x] **M9.5** — Response feedback (thumbs up/down per message, stored in IDB, exported with conversations)
- [x] **M9.6** — Token & cost estimator (badge per message, running total in context bar, model pricing table)
- [x] **M9.7** — AI memory panel (pinned facts injected into every system prompt, encrypted IDB, max 20 items)
- [x] **M9.8** — Model capabilities badge (Vision / Tools / Long context badges in model selector)
- [x] **M9.9** — Temperature & params sliders (temperature, max tokens, top-P, persisted per conversation)
- [x] **M9.10** — Stop sequence configuration (comma-separated stop sequences in advanced settings)
- [x] **TEST:M9** — Run `pnpm test` and `pnpm typecheck && pnpm lint`. Fix all failures before proceeding.
## M10: Advanced Content Renderers
- [x] **M10.1** — Full article renderer (TOC sidebar, reading time, font-size control, print mode, markdown-it)
- [x] **M10.2** — PDF viewer (`pdfjs-dist` lazy loaded, page nav, zoom, text selection, page 1 thumbnail preview)
- [x] **M10.3** — Map renderer (Leaflet + OpenStreetMap lazy loaded, pins for all places, cluster > 10, fullscreen)
- [x] **M10.4** — Recipe renderer (new `recipe` content type, ingredients checklist, numbered steps, scale slider)
- [x] **M10.5** — Event renderer (new `event` content type, countdown, ICS download, Google Calendar URL)
- [x] **M10.6** — Math renderer (KaTeX lazy loaded, `$...$` inline + `$$...$$` block, batch render on stream end)
- [x] **M10.7** — Mermaid diagram renderer (lazy loaded, dark theme, flowchart/sequence/gantt, pan/zoom mobile)
- [x] **M10.8** — Audio waveform player (WaveSurfer.js lazy loaded, orange waveform, click-to-seek)
- [x] **M10.9** — Table renderer (sortable columns, row filter, CSV export, virtualise > 500 rows)
- [x] **M10.10** — Timeline renderer (new `timeline` content type, vertical layout, animate in during streaming)
- [x] **M10.11** — Code runner (HTML/CSS/JS sandboxed iframe, `sandbox="allow-scripts"`, output console)
- [x] **M10.12** — Video renderer (native `<video>`, HLS.js lazy loaded, YouTube nocookie embed fallback)
- [x] **TEST:M10** — Run `pnpm test` and `pnpm typecheck && pnpm lint`. Fix all failures before proceeding.
## M11: Nostr Ecosystem
- [x] **M11.1** — Publish Nostr notes (compose panel, sign via NIP-07, broadcast to relays, per-relay status)
- [x] **M11.2** — Nostr DMs NIP-17 (encrypted DMs, inbox tab, contact list, store in IDB)
- [x] **M11.3** — Relay management UI (add/remove relays, latency column, read/write toggle, import NIP-65)
- [x] **M11.4** — Nostr profile editor (display name, bio, avatar, NIP-05, Lightning address, publish kind:0)
- [x] **M11.5** — Zaps NIP-57 (⚡ button on notes/profiles, sat amount input, LNURL-pay flow, QR + deep-link)
- [x] **M11.6** — NIP-05 verification badge (✓ badge, fetch from NIP-05 domain, cache 24h in IDB)
- [x] **M11.7** — Nostr search NIP-50 (search input, send REQ with `search` to NIP-50 relays, filter by type)
- [x] **M11.8** — Thread view (fetch root + replies via `#e` tag, render threaded tree, max 5 levels deep)
- [x] **M11.9** — Nostr lists NIP-51 (follow/mute/pin/bookmark lists, kind:3/10000/10001/10003, add/remove)
- [x] **M11.10** — Long-form content NIP-23 (kind:30023 articles, article renderer, discovery tab, share button)
- [x] **TEST:M11** — Run `pnpm test` and `pnpm typecheck && pnpm lint`. Fix all failures before proceeding.
## M12: Bitcoin Ecosystem
- [ ] **M12.1** — On-chain address display (bech32 + legacy detect, QR, mempool.space link, copy button)
- [ ] **M12.2** — Fedimint ecash display (detect token format, amount in sats, "Receive in Fedi" deep-link)
- [ ] **M12.3** — BOLT12 offers (detect `lno1...`, decoded amount, description, QR, "Pay with wallet" deep-link)
- [ ] **M12.4** — Nostr Wallet Connect NWC (NIP-47, paste connection string, check balance, pay with confirmation)
- [ ] **M12.5** — LNURL-auth login (generate LNURL-auth QR, scan with wallet, set persistent Lightning identity)
- [ ] **M12.6** — Live sat/fiat price (mempool.space `/api/v1/prices`, 60s refresh, `useBitcoinPrice` composable)
- [ ] **M12.7** — Mempool.space tx viewer (detect txid/block height, confirmations, fee rate, live WebSocket)
- [ ] **M12.8** — BOLT11 decoder card (amount, description, expiry countdown, red when < 5min, NWC pay button)
- [ ] **TEST:M12** — Run `pnpm test` and `pnpm typecheck && pnpm lint`. Fix all failures before proceeding.
## M13: Content Discovery
- [ ] **M13.1** — "For You" feed (frequency map from favorites + history, local only, refreshes on app open)
- [ ] **M13.2** — Content tagging (user tags on any item, stored in IDB, filter grids by tag, tag cloud in favorites)
- [ ] **M13.3** — Smart playlists (recently played, most played, by genre, by decade — computed IDB views)
- [ ] **M13.4** — Similar content (background AI call per item, 3 suggestions, cached 7 days in IDB)
- [ ] **M13.5** — Recently viewed history (last 50 items any type, "Recent" tab in content panel, stored IDB)
- [ ] **M13.6** — Content collections (user-curated mixed-type lists, mosaic thumbnail grid, shareable NIP-51)
- [ ] **M13.7** — Trending in conversations (most-referenced items across 30 days, "referenced N times" badge)
- [ ] **M13.8** — Share content to Nostr (generate note with title + AI description + tag URL, sign via NIP-07)
- [ ] **TEST:M13** — Run `pnpm test` and `pnpm typecheck && pnpm lint`. Fix all failures before proceeding.
## M14: Plugin Marketplace
- [ ] **M14.1** — Plugin discovery UI (fetch static registry JSON, list with name/type/author/version, install button)
- [ ] **M14.2** — Plugin settings panel (`PluginSettingsForm.vue` renders JSON Schema, stored encrypted IDB)
- [ ] **M14.3** — Plugin permissions UI (permissions dialog on install, grant/deny per capability, stored per plugin)
- [ ] **M14.4** — Plugin dev mode (`VITE_PLUGIN_DEV=true`, hot-reload from `src/plugins/dev/`, error inspector)
- [ ] **M14.5** — Built-in plugin: Wikipedia (`/wiki {query}`, Wikipedia REST API, returns `article` card)
- [ ] **M14.6** — Built-in plugin: OpenLibrary (`/book {query}`, openlibrary.org, returns `book_ext` cards)
- [ ] **M14.7** — Plugin import by URL (paste GitHub raw URL or IPFS CID, validate manifest, permissions dialog)
- [ ] **M14.8** — Plugin versioning & auto-update (check registry on start, badge when updates available, changelog)
- [ ] **TEST:M14** — Run `pnpm test` and `pnpm typecheck && pnpm lint`. Fix all failures before proceeding.
## M15: Settings & Personalisation
- [ ] **M15.1** — Accent colour picker (colour wheel + presets, updates `--color-accent` CSS var, IDB-persisted)
- [ ] **M15.2** — Glass intensity slider (Subtle/Default/Strong presets, blur + opacity CSS vars, live preview)
- [ ] **M15.3** — Font size settings (Compact 13px / Default 15px / Large 17px, sets `--font-size-base`)
- [ ] **M15.4** — Content type visibility (toggle each of 11 renderers, hidden types still extract, just not shown)
- [ ] **M15.5** — Keyboard shortcut map (list all shortcuts, click to rebind, conflict detection, IDB-persisted)
- [ ] **M15.6** — Browser push notifications (opt-in, "Generation complete" while backgrounded, SW notification)
- [ ] **M15.7** — Auto-archive old conversations (7/30/90/never slider, "Archive" IDB store, unarchive per item)
- [ ] **M15.8** — Full data export (JSON archive of all IDB stores, optional encryption, GDPR compliant)
- [ ] **M15.9** — Data wipe (two-step confirm, clears IDB + SW cache + localStorage, checkbox for API key vault)
- [ ] **M15.10** — Default conversation settings (model, persona, web search, token counts — applies to new convos)
- [ ] **TEST:M15** — Run `pnpm test` and `pnpm typecheck && pnpm lint`. Fix all failures before proceeding.
## M16: Mobile UX Polish
- [ ] **M16.1** — Bottom sheet component (`BottomSheet.vue`, gesture drag, 40%/80%/100% snap points, backdrop)
- [ ] **M16.2** — Swipe to navigate conversations (swipe left/right in chat, slide transition, 80px + 0.3 velocity)
- [ ] **M16.3** — Pull-to-refresh on content panels (glass spinner, re-fetch context, haptic on release)
- [ ] **M16.4** — Haptic feedback (`useHaptics()` composable, `navigator.vibrate()`, settings toggle to disable)
- [ ] **M16.5** — Web Share API (native `navigator.share()`, fallback glass share sheet, copy/Nostr options)
- [ ] **M16.6** — Pinch-to-zoom on images & maps (`usePinchZoom()` composable, 1×–4×, double-tap reset)
- [ ] **M16.7** — iOS PWA polish (apple-mobile-web-app meta tags, safe area insets, splash screens)
- [ ] **M16.8** — Long-press context menus mobile (500ms trigger, opens as BottomSheet, haptic on trigger)
- [ ] **M16.9** — Scroll position memory per route (session Map, works across tab switches and back navigation)
- [ ] **M16.10** — Landscape mode optimisation (50/50 split layout, minimal player bar, smooth rotate transition)
- [ ] **TEST:M16** — Run `pnpm test` and `pnpm typecheck && pnpm lint`. Fix all failures before proceeding.
## M17: Accessibility & Internationalisation
- [ ] **M17.1** — Keyboard navigation audit (Tab order, focus trap in modals, Escape closes, arrow key grids)
- [ ] **M17.2** — ARIA audit (`aria-label` all icon buttons, `aria-live` dynamic content, dialog roles)
- [ ] **M17.3** — High contrast mode (`prefers-contrast: more` + Settings toggle, higher border/text opacity)
- [ ] **M17.4** — Automated accessibility tests (axe-core in Playwright, `pnpm test:a11y`, fail on critical)
- [ ] **M17.5** — i18n foundation (`vue-i18n`, extract strings to `en.json`, add `es.json` + `fr.json`)
- [ ] **M17.6** — RTL layout support (`dir="rtl"` for Arabic/Hebrew, logical CSS properties throughout)
- [ ] **M17.7** — Dyslexia-friendly font (OpenDyslexic WOFF2 self-hosted, Settings → Appearance → Font)
- [ ] **M17.8** — Skip navigation link (hidden "Skip to main content" visible on Tab focus, jumps to `<main>`)
- [ ] **TEST:M17** — Run `pnpm test`, `pnpm test:a11y`, and `pnpm typecheck && pnpm lint`. Fix all failures.
## M18: Performance
- [ ] **M18.1** — Bundle analysis & splitting (`vite-bundle-visualizer`, identify eager loads, add route chunks)
- [ ] **M18.2** — Image lazy loading with blur-up (`loading="lazy"`, 16×16 base64 placeholder, CSS transition)
- [ ] **M18.3** — Request deduplication (`useFetch()` composable, in-flight Promise sharing, AbortController)
- [ ] **M18.4** — Web Worker for heavy tasks (`heavy.worker.ts` via Comlink, contentExtraction + crypto)
- [ ] **M18.5** — Prefetch on hover (mouseenter/touch-hold, pre-fetch detail data, 5-min short-lived cache)
- [ ] **M18.6** — Memory leak audit (`onUnmounted` cleanup for all intervals/listeners/WebSockets/observers)
- [ ] **M18.7** — Background sync queue (queue failed IDB saves, retry on `visibilitychange`, warn badge)
- [ ] **M18.8** — OPFS storage backend (SQLite WASM via `@sqlite.org/sqlite-wasm`, `VITE_STORAGE=opfs` flag)
- [ ] **TEST:M18** — Run `pnpm test`, `pnpm build`, verify gzipped bundle < 250 KB. Fix if over budget.
## M19: Developer Experience & Quality
- [ ] **M19.1** — Storybook 8 (stories for all `ui/` components, dark glass canvas, `pnpm storybook`)
- [ ] **M19.2** — Visual regression tests (Playwright screenshots for key views, fail on > 0.5% pixel diff)
- [ ] **M19.3** — Bundle size CI gate (`bundlesize`, fail if > 250 KB gzipped, PR comment with diff)
- [ ] **M19.4** — Comprehensive mock data (20+ items per content type, mock Nostr relay, mock TMDB)
- [ ] **M19.5** — E2E cross-browser matrix (Chromium + Firefox + WebKit, mobile viewports iPhone 14 + Galaxy S21)
- [ ] **M19.6** — Proxy integration tests (mock Anthropic API, assert SSE format, tool_use, error codes, disconnect)
- [ ] **M19.7** — Lighthouse CI (LCP < 3s, CLS < 0.15, scores posted as PR comment, stored in `reports/`)
- [ ] **M19.8** — Dependency audit (`pnpm audit` + `license-checker`, weekly job, block on critical vulns)
- [ ] **TEST:M19** — Run full suite: `pnpm test && pnpm test:e2e && pnpm typecheck && pnpm lint`. All must pass.
## M20: Collaboration & Sharing
- [ ] **M20.1** — Share conversation via Nostr (export as kind:30023 long-form article, sign NIP-07, optional encrypt)
- [ ] **M20.2** — Read-only conversation viewer (`/view/:nostrAddr` route, renders shared Nostr conversation)
- [ ] **M20.3** — Collaborative playlist NIP-51 (shared kind:30004 list, invite by npub, merge contributions)
- [ ] **M20.4** — Conversation templates (pre-built starters as glass cards, system prompt + first message, NIP share)
- [ ] **M20.5** — Export as audio podcast (Web Speech API TTS, WAV export via Web Audio, optional music mix)
- [ ] **M20.6** — Community content packs (import curated JSON from GitHub/IPFS, listed in plugin marketplace)
- [ ] **TEST:M20** — Run `pnpm test && pnpm typecheck && pnpm lint`. All green before proceeding.
---
## Final Sign-off
- [ ] **FINAL** — Run `pnpm test && pnpm test:e2e && pnpm typecheck && pnpm lint && pnpm build`. All pass. Update PROGRESS.md with completion summary. Tag release `v2.0.0`.
---
## Notes
(Claude adds brief completion notes here as tasks finish.)