28 KiB
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), webviewpostMessage(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,quarkdownLSP,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.lmconsumer — 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 | LOW–MED | 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)
- 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). - Hardware scope for v1: drop the serial/serial-spawn panels (F1–F6) from v1, or commit to routing them through
lab-gw.portugalfuturista.org(CT 206)? EDA (F7) is already remote and LOW-risk. - Custom editor (J1): accept Theia's CustomEditor compat if it works, or budget a native pdf.js widget now?
- OTA (J2): image-baked plugin vs. Theia plugin registry — pick the deployment mechanism; remove
vsce. - Antigravity dedup (G4): consolidate
antigravity/+gyro/to one stack during the port. vscode.lm(B15/D12): reroute sessionMemory through ModelRouter — confirm no othervscode.lmconsumers 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 (B3–B9), 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.