6 phases: ContentPanel wiring, Archy service integration, extraction hardening to 100+ tests, Archy integration tests, code mode UX, and final verification. Prompt updated with full Archy service inventory. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
5.4 KiB
You are hardening the AIUI content extraction pipeline, integrating Archy services, and completing incomplete features. Read these files first:
loop/plan.md— Your task checklist (mark items- [x]as you complete them)CLAUDE.md— Project conventions, design system rules, and coding standards
Key Context
Content Extraction Pipeline
packages/app/src/composables/contentExtraction.ts— Extracts books, films, TV, songs, podcasts, places, images, code blocks, apps from AI response textpackages/app/src/composables/contentFiltering.ts— Query/response classifiers (isBookQuery, isTVQuery, etc.) and tab routing (filterTabsByContext)packages/app/src/composables/useContentPanel.ts— Wires extraction functions to Vue reactive state and tab systempackages/app/src/components/content/ContentPanel.vue— Main content panel rendering grids and detail viewspackages/app/src/components/content/ContentGridView.vue— Grid view (already has ImageGrid/PlaceGrid wired)packages/app/src/__tests__/extractionQuality.test.ts— Extraction quality test suite (currently 64 tests)
Content flows: AI response text → extraction functions → useContentPanel refs → filterTabsByContext → ContentPanel/ContentGridView rendering
Archy Integration (CRITICAL — this is the main new work)
packages/app/src/services/archyBridge.ts— PostMessage client for AIUI ↔ Archipelago IPC (already implemented)packages/app/src/composables/useArchy.ts— Reactive Vue wrapper (just created, needs extension)packages/app/src/composables/useAI.ts— Already injects Archy context viabuildArchyContext()inbuildSystemPrompt()
Archy is a self-hosted Linux node OS with 23+ apps. AIUI runs as an iframe inside Archy at /aiui/. Communication is via postMessage with 5 context categories: apps, system, network, wallet, files. The bridge is initialized when ?embedded=true is in the URL.
Archy Services Available (that AIUI should know about):
- Bitcoin Core (blockchain data, UTXO, fee estimates)
- LND / Core Lightning / Lightning Stack (channels, payments, invoices)
- BTCPay Server (payment processing)
- Mempool (blockchain explorer)
- Nextcloud (files, notes, contacts, calendar via WebDAV)
- Immich (photos, ML-tagging)
- Nostr relays (nostr-rs-relay, strfry)
- Home Assistant (smart home)
- Grafana (monitoring)
- SearXNG (privacy search)
- Ollama (local LLM)
- Penpot (design)
- OnlyOffice (documents)
- Fedimint (federated custody)
- Meshtastic (mesh networking)
- DID Wallet (Web5 identity)
Data Handshake: AIUI requests context via archyBridge.requestContext(category). Archy's contextBroker responds with sanitized data (no secrets, no IPs, no keys). Currently wallet and files categories are stubs in Archy — build the AIUI consumer side anyway so it's ready when Archy implements them. Use realistic mock shapes.
API Path Note: All API paths use import.meta.env.BASE_URL prefix so they work at both / (dev) and /aiui/ (production). This was just implemented — don't change it.
Design System Rules (must follow for every file you touch)
- Glass morphism only — use
.glass,.glass-card,.glass-button,.glass-button-smfromsrc/styles/main.css - No light-mode conditionals — never use
isDark ?pattern. The app is dark-only. Remove any existing light-mode code you encounter. - No
bg-gray-*orbg-white— usebg-white/5,bg-white/10,bg-black/35etc. - Text opacity scale —
text-white/25→/40→/60→/70→/80→/90→/96→text-white - Accent colour —
text-accent(#F7931A),bg-accent/15,border-accent/30for Bitcoin-orange highlights - Touch targets — min 44×44px, 8px gaps between targets
- Font size — min
16pxon all inputs (prevents iOS zoom) - Animations —
animate-scale-in,animate-fade-up,animate-fade-infrom design system only
For each task in loop/plan.md:
- Find the first unchecked
- [ ]item - Read the task description carefully
- Read the relevant source files before making changes
- Implement the feature/fix following conventions and design system rules
- Run
pnpm typecheck && pnpm lint— fix all errors before committing - Run
pnpm test— fix any failing tests - If the task involves tests, run
cd packages/app && npx vitest runspecifically - Commit:
type(scope): description(conventional commits) - Mark it done
- [x]inloop/plan.md - Move to the next unchecked task immediately
Rules
- Never skip a testing gate — if tests fail, fix them before moving on
- If a task is proving difficult, keep trying different approaches. Make at least 30 genuine attempts before giving up and moving on.
- Always run typecheck + lint after every code change
- Keep initial bundle < 250 KB gzipped — lazy-load anything heavy
- Bitcoin only — never altcoins, never fiat payment flows
- Privacy first — no external analytics calls, no telemetry
- Do not stop until all tasks are checked or you are rate limited
- When adding tests, aim for realistic AI response patterns, not trivial examples
- When wiring components into ContentPanel.vue, follow the exact same pattern used for existing content types (BookGrid/BookDetail, TVSeriesGrid/TVSeriesDetail, etc.)
- When building Archy integration, the AIUI side should be resilient — always handle the case where Archy doesn't respond or data is empty
- Commit and push after each completed phase (TEST: tasks)