replica-omnisciente/docs/compose/plans/2026-07-10-aurelio-theia-porting-checklist.md

28 KiB
Raw Blame History

Aurelio → Theia: Per-Feature Porting Checklist

Companion to 2026-07-10-aurelio-theia-migration-feature-inventory.md. Baseline: aurelio-vscode v0.12.2 (live main, b37e9d2) cloned to ~/portugalfuturista/aurelio-vscode; Theia fork aurelio-theia v0.1.0 (f8bed07) at ~/portugalfuturista/aurelio-theia. See 2026-07-10-aurelio-theia-live-delta.md for the measured numbers and the skeleton's current state. Risk ratings below remain static-analysis estimates pending the Wave 0 spike.

How to read this: one row per feature, with the VS Code API it leans on, the Theia target, a risk rating, a recommended path (A = run VSIX in Theia's VS Code plugin host, B = native Theia rewrite, C = hybrid), a porting owner, and a definition-of-done. Risk = chance the VS Code-compat layer can't host it unchanged.

Risk Meaning
LOW Theia's @theia/plugin-ext covers it; expect config-only changes.
MED Covered but with known caveats (CSP, lifecycle, messaging); needs testing + minor shim.
HIGH Incomplete/unsupported in compat layer, or depends on local process/serial; needs backend move or rewrite.
BLOCK Cannot work in a browser-hosted plugin at all — must move to backend/gateway.

Global findings that color every row below

  • Extension uses ~55 distinct vscode.* surfaces; heaviest: vscode.window (418 hits), vscode.commands (133), vscode.workspace (132), vscode.Uri (116), webview postMessage (361 references across 25 webview sites).
  • Node built-ins (fs/child_process/http/os/crypto/ws) are imported in 46 source files. Anything in that set that runs in a browser-hosted Theia plugin breaks; it must run in the Theia backend or be proxied.
  • Local-process spawns: dirac (bundled Rust), python3 -m esptool, python3 (PPK2), sigrok-cli, ngspice/ltspice/psim, quarkdown LSP, gcloud, git, ollama (HTTP). Plus CDP browser on :9222.
  • 3 API keys are plaintext defaults in package.json (antigravity / agyIde / agyLsp) — rotate to secret storage, do not port as-is.
  • src/_future/* (semantic cache, tool policy, voice) = 0 importers → intentionally dormant; carry, label, do not port in v1.

A. Shell, activation, settings, commands, views

# Feature Source (LOC) VS Code API Theia target Risk Path Owner Done when…
A1 Activation + lifecycle (onStartupFinished) extension.ts (1626) ExtensionContext, subscriptions, setInterval bg loop @theia/plugin-ext activation events LOW A Platform Extension activates on Theia startup; background sync loop runs; dispose cleans timers
A2 3-tier config cascade (global→workspace→realm) config/configResolver.ts (810), settingsService.ts vscode.workspace.getConfiguration, ConfigurationTarget, fs reads of ~/.aurelio, .aurelio/, realms/*/.aurelio Theia preferences + fs (backend) MED C (A shim for prefs; B for cascade files) Platform All 123 keys resolve with correct precedence; realm overrides win
A3 123 settings keys (aurelio.*, quarkdown.*) package.json contributes.configuration Theia preference schema LOW A (schema auto-mapped) Platform Settings UI shows all keys; defaults preserved except 3 rotated keys
A4 64 declared commands + palette extension.ts, coordinator/coordinator.ts, context/speculation/*, context/contextCommands.ts, quarkdown/extension.ts vscode.commands.registerCommand, menus.commandPalette @theia/plugin CommandRegistry LOW A Platform Every command appears in palette and executes; when clauses honored
A5 Activity-bar container + 6 sidebar views package.json, brain/sessionProvider.ts, brain/chronicleProvider.ts, brain/immichProvider.ts viewsContainers, TreeDataProvider, registerWebviewViewProvider Theia view containers + tree + webview view LOW A Frontend All 6 views render; refresh/inline actions work
A6 Status bar items (context + Hermes) extension.ts:323-334 createStatusBarItem, StatusBarAlignment Theia status bar LOW A Frontend Both items show, click commands fire
A7 Keybindings (Quarkdown) package.json contributes.keybindings Theia keybindings LOW A Platform shift+ctrl+v / ctrl+alt+p trigger on .qd
A8 when-clause contexts package.json menus setContext, viewItem == Theia context keys MED A (verify parity) Platform Contextual menus show/hide correctly
A9 Output channels / diagnostics / progress several OutputChannel, ProgressLocation, DiagnosticSeverity Theia output + problems + progress LOW A Frontend Logs stream; progress notifications appear

B. Chat, model routing, agent policy

# Feature Source (LOC) VS Code API Theia target Risk Path Owner Done when…
B1 Chat webview (streaming, tool calls, queue) webview/chatPanel.ts (2620) WebviewPanel, postMessage/onDidReceiveMessage, CSP, asWebviewUri Theia webview (compat) MED A (verify CSP) Frontend Streaming tokens render, tool-call UI pauses/resumes, pending queue drains
B2 Slash-command palette chatPanel.ts:806-825 webview DOM same webview LOW A Frontend /local /hermes /vertex /openrouter /antigravity /kimi /jules /run /workflow route
B3 ModelRouter (7 backends + fallback) models/modelRouter.ts (470) fetch (Ollama/OpenRouter/Hermes), google-auth-library (Vertex), SDKs (Kimi/Jules) backend Node service (network) MED C Models Each backend returns a completion; fallback chain local→hermes→vertex→openrouter→antigravity works; streaming where supported
B4 Ollama (local) modelRouter.ts:92-106 fetch http://127.0.0.1:11434 backend fetch to host Ollama LOW A/C Models /api/tags + generate reachable from Theia backend
B5 Hermes 3 (LAN 192.168.0.105:8200) modelRouter.ts fetch backend fetch MED A/C Models Reachable from Theia backend net namespace; OpenAI-compatible stream OK
B6 Vertex AI (Gemini) models/vertexAuth.ts google-auth-library, gcloud backend + gcloud present MED C Models Auth via ADC/key; gemini-2.5-pro infer works
B7 OpenRouter modelRouter.ts fetch + aurelio.openRouterApiKey backend fetch, key from secret LOW A/C Models Key moved to secret storage; infer works
B8 Kimi (Moonshot) models/kimiClient.ts fetch/SDK, fs backend MED C Models Non-streaming infer works; KIMI_API_KEY from env/secret
B9 Jules (Google) models/julesClient.ts (SDK) @google/jules-sdk backend MED C Models dispatch/cancel/history/resume/list work; JULES_API_KEY from secret
B10 Antigravity delegation modelRouter.ts case + antigravity/*, gyro/* fetch to antigravity.portugalfuturista.org, gRPC, CDP backend + CT 212 HIGH C Models/Infra Remote IDE reachable; sendPrompt/screenshot/screencast work
B11 Heterónimos (personas + per-persona memory) models/heteronimoManager.ts (170) fs frontmatter parse, gray-matter backend fs MED C Models Personas load from cascade dirs; switch updates active model routing
B12 ApprovalGate (allow/deny/ask, terminal sandbox) utils/approvalGate.ts (733) EventEmitter, vscode.window warnings Theia dialogs + event bus MED C Agent Risky tool/terminal calls prompt; allow/deny/ask lists honored; agent.reviewPolicy enforced
B13 Idempotency layer models/idempotencyLayer.ts none (pure) same LOW A Models Retried requests dedupe
B14 Review-changes diff flow chatPanel.ts WorkspaceEdit, applyEdit Theia workspace edit MED A Agent Proposed edits preview + apply/undo
B15 vscode.lm usage (sessionMemory) context/sessionMemory/sessionMemory.ts:253-280 vscode.lm.selectChatModels, LanguageModelChat.sendRequest No direct Theia equivalent HIGH B (reroute through ModelRouter) Models sessionMemory no longer calls vscode.lm; uses ModelRouter instead

B15 is the single concrete vscode.lm consumer — Theia's compat layer does not provide the Language Model API. Must reroute to the internal ModelRouter.


C. Control Center + webviews

# Feature Source (LOC) VS Code API Theia target Risk Path Owner Done when…
C1 Control Center host (16 tabs, ~95 msg cases) webview/controlCenterPanel.ts (3229) WebviewPanel, retainContextWhenHidden, localResourceRoots, postMessage Theia webview (compat) MED A (CSP verify) Frontend All 16 tabs mount; tab switch preserves state; message round-trips OK
C2 Svelte bundles (control-center/settings/pdf) webview-ui/** (47 files) asWebviewUri, Vite build to dist/webviews Theia webview static serving MED A (build path) Frontend Vite outputs served via Theia webview URI; CSP allows the bundled JS
C3 Bússola / Orchestration tabs tabs/OrchestrationTab.svelte webview same LOW A Frontend Dashboard renders; actions dispatch
C4 Motores (MCP) tab tabs/McpTab.svelte + mcp/* webview ↔ MCP hub same + backend MCP MED C MCP connect/reconnect/ping/toggle/call/setServerRealms work
C5 Antigravidade tab tabs/AntigravityTab.svelte + gyro/*, antigravity/* webview + CDP/gRPC backend to CT 212 HIGH C Infra See B10 + G-group
C6 Arquivo de Orpheu (Knowledge) tabs/KnowledgeTab.svelte webview + annas/arxiv/libgen/obsidian/calibre/zotero backend for indexers MED C Knowledge sync/open/extract/ingest/query work; vault paths configurable
C7 Oficina Sensacionista (School) tabs/EscolaTab.svelte + tabs/escola/* webview same LOW A Frontend grill-me / study-guide / cite / save / export / share work
C8 Painéis / Dashboards launcher tabs/DashboardsTab.svelte webview same LOW A Frontend Opens each dashboard panel
C9 Perícias (Skills) tabs/SkillsTab.svelte + skills/skillLoader.ts webview + fs dir scan backend dir scan MED C Skills Skills discovered from cascade dirs; dynamic commands register
C10 Sessões / Crónicas / Frota / Processos tabs/{Sessions,Chronicles,Fleet,Workflows}Tab.svelte webview same LOW A Frontend Lists render; fleet/finance/forecasting handlers return data
C11 Electrónica / Laboratório / Impressoras tabs/{Electronics,Lab,Printers}Tab.svelte webview + EDA/hardware backend/gateway HIGH C Hardware See E-group / F-group
C12 Engrenagens (Settings) settings-svelte/* (10 sections) webview same LOW A Frontend 10 sections edit the 123 keys; save persists to correct tier
C13 Artifact preview / session history / immich browser / chronicle panel webview/{artifactPreview,sessionHistoryPanel,immichBrowserPanel,chroniclePanel}.ts webview same LOWMED A Frontend Each opens + populates

Webview cross-cutting risks (apply to all C-rows): CSP strictness in Theia differs from VS Code — verify script-src/connect-src for the Svelte bundles and the *.portugalfuturista.org fetches; asWebviewUri path mapping for dist/webviews/assets (pdf.worker); retainContextWhenHidden semantics.


D. Brain, sessions, sync, wiki, memory, context

# Feature Source (LOC) VS Code API Theia target Risk Path Owner Done when…
D1 BrainManager (sessions + fallback dirs) brain/brainManager.ts (250) fs of ~/.gemini/antigravity/brain, ~/.kimi/sessions backend fs MED C Brain Lists/deletes conversations across all 3 sources
D2 Session continuity brain/sessionContinuity.ts onDidChangeActiveTextEditor, fs Theia editor events + backend fs MED C Brain Editor state captured on switch; restored on return
D3 Chronicle brain/chronicleManager.ts, chronicleProvider.ts fs, tree backend fs MED C Brain Add/open/refresh entries persist
D4 Immich sync/immichClient.ts, brain/immichProvider.ts, webview/immichBrowserPanel.ts (755) fetch to Immich, fs import backend fetch MED C Brain Browse/import from photos.portugalfuturista.org; keys from secret
D5 Proxmox brain sync (push/pull/list + 5-min loop) sync/proxmoxSync.ts (200) fetch to mcp.portugalfuturista.org/api/brain/*, createFileSystemWatcher backend fetch + Theia watcher MED C Brain pushAll/pullAll/list work; background loop interval honored; watcher triggers
D6 Wiki sync (Git-backed) sync/wikiSync.ts (300) git spawn, fs, watcher, sibling-repo discovery backend git + fs HIGH C Brain Discovers olivrododesassossego; push/pull/export/status; needs git in backend image
D7 Session export sync/sessionExporter.ts fs JSONL/JSON backend fs LOW A/C Brain Sessions serialize to brain dir
D8 Memory index/scan/search/extract memory/* (932) fs, gray-matter backend fs MED C Memory Frontmatter-typed memories index; search works; throttled extraction runs
D9 Compactor context/compactor.ts (260) tokenizer (dirac or TS fallback) backend MED C Memory Auto-compact at 0.85 / 128k
D10 AutoDream context/autoDream.ts (290) setInterval, fs, ModelRouter backend MED C Memory Consolidation fires after minHours/minSessions
D11 Away summary context/awaySummary.ts onDidChangeWindowState Theia window-state event MED A Memory Recap shows on focus return
D12 Session memory service context/sessionMemory/* vscode.lm (see B15), fs backend + ModelRouter HIGH C Memory Rerouted off vscode.lm; per-session memory writes
D13 MagicDocs context/magicDocs.ts fs, watcher backend MED C Memory Docs auto-update
D14 ContextScout / ExternalScout / PromptSuggestion context/{contextScout,externalScout,promptSuggestion}.ts fs, fetch, executeWorkspaceSymbolProvider backend + Theia symbol providers MED C Memory Repo + web scouting; prompt suggestions populate
D15 Speculative execution context/speculation/* (engine/fs/commands) WorkspaceEdit, applyEdit, speculative FS Theia workspace edit MED C Agent start/accept/abort; edits apply+save; rollback clean
D16 LSP client (generic) context/lspClient.ts vscode-languageclient, WorkspaceEdit Theia LSP client MED A/C Platform Hover/refs/symbols/code-actions route through Theia

E. MCP

# Feature Source (LOC) VS Code API Theia target Risk Path Owner Done when…
E1 MCP hub (SSE + stdio) mcp/mcpHub.ts (145) @modelcontextprotocol/sdk SSEClientTransport/StdioClientTransport backend Node (SSE dominant; stdio only if backend-local) MED C MCP Remote servers (*.portugalfuturista.org) connect via SSE; reconnect backoff works
E2 Server manager + health + realm assignment mcp/McpServerManager.ts (220) createFileSystemWatcher of mcp_config.json, fs backend MED C MCP Config watch reloads; per-realm assignment persists
E3 Registry sync + "add recommended" mcp/mcpRegistrySync.ts fetch registry backend fetch LOW A/C MCP Registry loads; recommended server installable
E4 Tool enable/disable + call routing mcpHub.ts, controlCenterPanel.ts webview messages same LOW A MCP mcp:call returns result/error; per-tool toggle persists

F. Hardware / lab / EDA

# Feature Source (LOC) VS Code API Theia target Risk Path Owner Done when…
F1 ESP32 fleet (esptool) hardware/esp32Bridge.ts (spawns python3 -m esptool, scans /dev/ttyUSB*) child_process.spawn, serial BLOCK in browser → lab gateway (CT 206) / backend BLOCK/HIGH C (move behind lab-gw) Hardware Device scan/flash/read routed via gateway; no serial from front-end
F2 PPK2 battery lab hardware/ppk2Bridge.ts (python3) + webview/ppk2Dashboard.ts spawn, serial /dev/ttyACM0 gateway/backend BLOCK/HIGH C Hardware Sampling streams via gateway; dashboard charts render
F3 sigrok logic analyzer hardware/sigrokBridge.ts (spawns sigrok-cli) + webview/logicAnalyzerDashboard.ts spawn, execSync gateway/backend BLOCK/HIGH C Hardware Capture/decode → CSV via gateway; viewer plots
F4 KiCad hardware/kicadBridge.ts + webview/schematicViewer.ts (604) fs, createFileSystemWatcher, execFile backend fs (+ .kicad CLI if used) HIGH C Hardware Project/net/DRC parse; schematic viewer renders; watcher works
F5 FMU co-sim hardware/fmiBridge.ts + webview/fmuViewer.ts (434) execFile (Reference-FMUs) backend HIGH C Hardware FMU loads + steps via backend; plots render
F6 PSIM / SPICE (ngspice/ltspice) hardware/psimBridge.ts + webview/{psimViewer,spiceViewer}.ts spawn sims backend/gateway (or remote EDA) HIGH C Hardware Sim runs server-side; waveforms stream/plot
F7 Remote EDA offload electronics/remoteEdaClient.ts (317) fetch https://eda.portugalfuturista.org backend fetch LOW A/C Hardware /sim/{spice,erc,power-rails,parse,convert,bom,bom/optimize} reachable; token from secret
F8 Engineering hub + hardware + HIL dashboards webview/{engineeringHub,hardwareDashboard,hilDashboard}.ts webview + hil.portugalfuturista.org webview + backend MED C Hardware HUB launches; HIL logs fetch via backend
F9 Sourcing / coverage / guarda-livros / bolsa dashboards webview/{sourcingDashboard,coverageDashboard,guardaLivrosDashboard,bolsaDoMundial}.ts webview + api.portugalfuturista.org webview + backend fetch MED C Hardware/Portal Search/alternates/optimize, coverage load, accounting sync, fantasy-market orders route via backend

F-group is the highest-risk cluster: serial/local-process bridges cannot run in a browser-hosted Theia plugin. Decision needed (section 6): full gateway proxy vs. backend-local vs. drop from v1.


G. Antigravity / Gyro (remote IDE control)

# Feature Source (LOC) VS Code API Theia target Risk Path Owner Done when…
G1 AgyIde (CDP bridge REST) gyro/agyIdeService.ts fetch to antigravity.portugalfuturista.org:8900 backend → CT 212 HIGH C Infra connect/screenshot/screencast/sendPrompt/quickAction/autoAccept work
G2 AgyLsp (self-hosted LS) gyro/agyLspService.ts, antigravity/antigravityLsBridge.ts fetch to agy-lsp.portugalfuturista.org:8902, fs backend HIGH C Infra listTools/executeTool/quota/sendPrompt work
G3 gRPC + OAuth injection core/diracClient.ts:135-150 gRPC, fetch token inject backend HIGH C Infra startSelfHosted + injectOAuthToken succeed; TLS toggle honored
G4 Dedup legacy antigravity/ vs gyro/ both dirs consolidate to gyro/ MED B Models Single Antigravity stack; control center uses one service

The two near-duplicate Antigravity stacks (antigravity/ 562 LOC, gyro/ 554 LOC) are both wired. Porting is the right moment to consolidate to one.


H. Coordinator, workflows, skills, evolution, native engine

# Feature Source (LOC) VS Code API Theia target Risk Path Owner Done when…
H1 Coordinator (autonomous workers) coordinator/* (1008) registerCommand, ModelRouter, fs backend MED C Agent start/status/finalize/task run; worker dispatch via ModelRouter
H2 Workflows workflow/workflowManager.ts (526) registerCommands, fs backend LOW A/C Agent Named workflows register + execute
H3 Skills (dir-based, cascade) skills/skillLoader.ts (265) fs dir scan, dynamic registerCommand backend fs + Theia commands MED C Skills Skills load from global→workspace→realm; dynamic commands register
H4 Evolution loop (MAP-Elites) evolution/* (2887) dirac NativeEngine, setInterval, fs (sandbox/snapshots) backend + dirac HIGH C Evolution mutate→evaluate→insert runs; convergence detected; the only tested subsystem — keep its mocha suite green under Theia
H5 NativeEngine (dirac spawn + respawn) core/nativeEngine.ts (520) child_process.spawn of native/dirac/target/release/dirac, JSON-lines stdio, respawn budget backend Node (binary must ship in Theia backend image) HIGH/BLOCK C Evolution/Platform dirac binary present for target arch; spawn + JSON-lines + respawn work; TS fallbacks engage if absent
H6 Remote control WS server (:34567) core/remoteServer.ts (100) http.createServer + ws + ApprovalGate backend HTTP/WS HIGH C Platform Server binds backend-side; external clients connect; ApprovalGate enforced
H7 DiracClient gRPC core/diracClient.ts (150) gRPC self-hosted backend HIGH C Platform compile_ast/evolve/ag.* requests route

I. Quarkdown (embedded language)

# Feature Source (LOC) VS Code API Theia target Risk Path Owner Done when…
I1 Language + grammar + config syntaxes/, language-configuration.json, package.json contributes.languages/grammars Theia languages/textmate LOW A Quarkdown .qd files highlight + bracket config
I2 LSP client (vscode-languageclient/node) quarkdown/client.ts LanguageClient (node), documentSelector, fileEvents watcher Theia LSP client MED A/C Quarkdown Diagnostics/completion for .qd
I3 LSP server process quarkdown/core/{quarkdownServer,processManager}.ts spawn quarkdown backend spawn (needs quarkdown in image) HIGH C Quarkdown Server starts backend-side; restarts on command
I4 Live preview webview quarkdown/{previewManager,previewWebview}.ts, core/httpPoller.ts webview + http poller Theia webview + backend poll MED C Quarkdown shift+ctrl+v live preview updates
I5 PDF export quarkdown/{pdfExport,core/pdfExportService}.ts spawn/export backend MED C Quarkdown ctrl+alt+p exports PDF

J. PDF custom editor + OTA + infra glue

# Feature Source (LOC) VS Code API Theia target Risk Path Owner Done when…
J1 PDF/EPUB custom editor webview/pdfCustomEditorProvider.ts (CustomReadonlyEditorProvider), pdfViewerPanel.ts (541), pdf-viewer-svelte/*, pdfjs-dist CustomEditorProvider, webview, worker Theia compat: CustomEditor is historically weak → native Theia widget HIGH B (likely) Frontend *.pdf/*.epub open in a Theia widget with pdf.js; pan/zoom/search work
J2 OTA self-update (VSIX) updater/otaUpdater.ts (166) + CI .github/workflows/build.yml fetch version.json, vsce package, SCP to CT 205 Replace with Theia plugin deployment (image-baked or Theia plugin registry) HIGH B Platform Update channel redesigned; no vsce/VSIX dependency; version check still works against a Theia-appropriate manifest
J3 Prevent-sleep utils/preventSleep.ts fs/power backend/no-op in browser MED C Platform Behavior defined for browser context (likely no-op or backend keepalive)
J4 AurelioRead / Toon utils utils/aurelioRead.ts, utils/toon.ts fs, pure TS backend / same LOW A Platform Read helper + toon encode/decode work

K. Secrets, network, packaging (cross-cutting)

# Concern Where Action Risk Owner
K1 3 plaintext API keys in package.json defaults (antigravity.apiKey, agyIde.apiKey, agyLsp.apiKey) manifest Move to Theia secret storage / env; rotate the shared 64-hex token HIGH Platform/Infra
K2 KIMI_API_KEY, JULES_API_KEY, ANTHROPIC_API_KEY, GEMINI_API_KEY, aurelio.openRouterApiKey, aurelio.hub.apiToken, aurelio.electronics.remoteSimToken, aurelio.immich.apiKey, aurelio.hub.cfClientId/Secret settings / .env Inject via backend env + Theia secret store; never ship in image HIGH Platform
K3 Backend network reachability to 13 *.portugalfuturista.org hosts + LAN 192.168.0.105/.54/.55 all fetch/spawn sites Confirm Theia backend pod/host can route; document egress MED Infra
K4 Native binaries in image (dirac, git, python3+esptool, sigrok-cli, ngspice/ltspice/psim, quarkdown, gcloud) native/, spawns Decide: bake into Theia backend image vs. proxy via lab gateway HIGH Infra
K5 Build system (webpack extension + Vite webviews → dist/) package.json scripts, webpack.config.cjs, vite.config.ts Keep for Path A; repackage as Theia plugin for B/C MED Platform
K6 @aurelio/shared (file:../../shared) protobuf dep package.json Ensure shared lib available to Theia plugin build MED Platform
K7 Dormant _future/ (semantic cache, tool policy, voice) src/_future/* Carry over labeled POSTPONED; do not port in v1 LOW Platform

6. Key decision points (need answers before/early in the port)

  1. Plugin hosting side: do Theia plugins run in the Node backend or the browser frontend on aurelio.portugalfuturista.org? This single decision resolves every BLOCK/HIGH row (F-group serial, H5 dirac, H6 WS server, I3 quarkdown LSP).
  2. Hardware scope for v1: drop the serial/serial-spawn panels (F1F6) from v1, or commit to routing them through lab-gw.portugalfuturista.org (CT 206)? EDA (F7) is already remote and LOW-risk.
  3. Custom editor (J1): accept Theia's CustomEditor compat if it works, or budget a native pdf.js widget now?
  4. OTA (J2): image-baked plugin vs. Theia plugin registry — pick the deployment mechanism; remove vsce.
  5. Antigravity dedup (G4): consolidate antigravity/ + gyro/ to one stack during the port.
  6. vscode.lm (B15/D12): reroute sessionMemory through ModelRouter — confirm no other vscode.lm consumers appear in the live repo.

7. Suggested sequencing

  • Wave 0 (spike): stand up Theia fork, enable plugin host, drop in aurelio-0.12.0.vsix, smoke-test A/C rows; produce the empirical gap list that upgrades these risk ratings from "estimated" to "measured."
  • Wave 1 (backend spine): config cascade (A2), secrets (K1/K2), ModelRouter (B3B9), brain+sync+wiki+memory (D-group), MCP (E-group) — all backend, all testable headlessly.
  • Wave 2 (cockpit): control center + chat webviews (B1/B2, C-group) behind the verified backend spine; fix CSP/asWebviewUri.
  • Wave 3 (specialized): evolution+dirac (H4/H5), Quarkdown (I), PDF (J1), Antigravity (G), OTA redesign (J2).
  • Wave 4 (lab): hardware/serial (F) behind gateway, per decision point 2.

8. Owners legend

Platform = shell/activation/settings/build/deploy · Frontend = webviews/views/widgets · Models = routing/personas/LM · Agent = coordinator/approval/speculation · Brain = sessions/sync/wiki · Memory = context/memory · MCP = MCP · Hardware = lab/EDA · Infra = network/secrets/CT routing · Evolution = dirac/MAP-Elites · Quarkdown · Skills · Knowledge · Portal


9. Verification status of this checklist

Risk ratings are estimated from static analysis of the v0.12.0 source (API grep, node-built-in import map, spawn sites, transports, doc-comments) — not from running against Theia. The Wave 0 spike is required to convert estimates into measured results. Counts (API hits, LOC, file lists) are measured from the reconstructed tree.