@loompad/cli 0.1.0 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ARCHITECTURE.md +96 -11
- package/CHANGELOG.md +1042 -0
- package/README.md +1473 -44
- package/THIRD_PARTY_NOTICES.md +275 -0
- package/dist/adapters/antigravity-cli.d.ts +62 -0
- package/dist/adapters/antigravity-cli.js +258 -0
- package/dist/adapters/antigravity-cli.js.map +1 -0
- package/dist/adapters/base.d.ts +61 -9
- package/dist/adapters/base.js +266 -15
- package/dist/adapters/base.js.map +1 -1
- package/dist/adapters/bridges/antigravity.d.ts +9 -12
- package/dist/adapters/bridges/antigravity.js +9 -12
- package/dist/adapters/bridges/antigravity.js.map +1 -1
- package/dist/adapters/echo.d.ts +1 -0
- package/dist/adapters/echo.js +59 -3
- package/dist/adapters/echo.js.map +1 -1
- package/dist/adapters/grok.d.ts +7 -0
- package/dist/adapters/grok.js +20 -10
- package/dist/adapters/grok.js.map +1 -1
- package/dist/adapters/index.d.ts +5 -1
- package/dist/adapters/index.js +53 -7
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/model.d.ts +137 -0
- package/dist/adapters/model.js +527 -0
- package/dist/adapters/model.js.map +1 -0
- package/dist/adapters/opencode.d.ts +101 -1
- package/dist/adapters/opencode.js +874 -98
- package/dist/adapters/opencode.js.map +1 -1
- package/dist/cli/doctor.d.ts +32 -0
- package/dist/cli/doctor.js +89 -4
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/index.js +2651 -87
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/tui-model.js +3 -1
- package/dist/cli/tui-model.js.map +1 -1
- package/dist/cli/tui.js +44 -1
- package/dist/cli/tui.js.map +1 -1
- package/dist/cli/ui.d.ts +2 -0
- package/dist/cli/ui.js +13 -0
- package/dist/cli/ui.js.map +1 -1
- package/dist/core/ades.d.ts +32 -16
- package/dist/core/ades.js +57 -20
- package/dist/core/ades.js.map +1 -1
- package/dist/core/agent-state.d.ts +14 -0
- package/dist/core/agent-state.js +32 -0
- package/dist/core/agent-state.js.map +1 -0
- package/dist/core/approvals.d.ts +33 -0
- package/dist/core/approvals.js +29 -0
- package/dist/core/approvals.js.map +1 -0
- package/dist/core/backup.d.ts +19 -0
- package/dist/core/backup.js +86 -0
- package/dist/core/backup.js.map +1 -0
- package/dist/core/baton.d.ts +2 -2
- package/dist/core/baton.js.map +1 -1
- package/dist/core/brain-extract.d.ts +17 -0
- package/dist/core/brain-extract.js +28 -2
- package/dist/core/brain-extract.js.map +1 -1
- package/dist/core/brain-index.d.ts +71 -0
- package/dist/core/brain-index.js +204 -5
- package/dist/core/brain-index.js.map +1 -1
- package/dist/core/brain.d.ts +58 -2
- package/dist/core/brain.js +79 -1
- package/dist/core/brain.js.map +1 -1
- package/dist/core/chat-import.d.ts +71 -0
- package/dist/core/chat-import.js +419 -0
- package/dist/core/chat-import.js.map +1 -0
- package/dist/core/checkpoint.d.ts +107 -0
- package/dist/core/checkpoint.js +259 -0
- package/dist/core/checkpoint.js.map +1 -0
- package/dist/core/claude-cli.js +1 -1
- package/dist/core/claude-cli.js.map +1 -1
- package/dist/core/continuity/artifacts.d.ts +14 -0
- package/dist/core/continuity/artifacts.js +118 -0
- package/dist/core/continuity/artifacts.js.map +1 -0
- package/dist/core/continuity/capabilities.d.ts +65 -0
- package/dist/core/continuity/capabilities.js +129 -0
- package/dist/core/continuity/capabilities.js.map +1 -0
- package/dist/core/continuity/contracts.d.ts +352 -0
- package/dist/core/continuity/contracts.js +117 -0
- package/dist/core/continuity/contracts.js.map +1 -0
- package/dist/core/continuity/engine.d.ts +55 -0
- package/dist/core/continuity/engine.js +504 -0
- package/dist/core/continuity/engine.js.map +1 -0
- package/dist/core/continuity/store.d.ts +73 -0
- package/dist/core/continuity/store.js +438 -0
- package/dist/core/continuity/store.js.map +1 -0
- package/dist/core/conversations.d.ts +19 -0
- package/dist/core/conversations.js +87 -0
- package/dist/core/conversations.js.map +1 -0
- package/dist/core/crew-coordination.d.ts +6 -0
- package/dist/core/crew-coordination.js +24 -0
- package/dist/core/crew-coordination.js.map +1 -0
- package/dist/core/crew-policy.d.ts +18 -0
- package/dist/core/crew-policy.js +40 -0
- package/dist/core/crew-policy.js.map +1 -0
- package/dist/core/crew-protocol.d.ts +64 -0
- package/dist/core/crew-protocol.js +146 -0
- package/dist/core/crew-protocol.js.map +1 -0
- package/dist/core/crew-requests.d.ts +14 -0
- package/dist/core/crew-requests.js +22 -0
- package/dist/core/crew-requests.js.map +1 -0
- package/dist/core/crew.d.ts +395 -0
- package/dist/core/crew.js +1857 -0
- package/dist/core/crew.js.map +1 -0
- package/dist/core/digest.d.ts +40 -0
- package/dist/core/digest.js +94 -0
- package/dist/core/digest.js.map +1 -0
- package/dist/core/distill.js +3 -5
- package/dist/core/distill.js.map +1 -1
- package/dist/core/eventlog.d.ts +27 -25
- package/dist/core/eventlog.js +97 -150
- package/dist/core/eventlog.js.map +1 -1
- package/dist/core/events/contracts.d.ts +51 -0
- package/dist/core/events/contracts.js +2 -0
- package/dist/core/events/contracts.js.map +1 -0
- package/dist/core/events/jsonl-store.d.ts +23 -0
- package/dist/core/events/jsonl-store.js +90 -0
- package/dist/core/events/jsonl-store.js.map +1 -0
- package/dist/core/events/sqlite-store.d.ts +37 -0
- package/dist/core/events/sqlite-store.js +215 -0
- package/dist/core/events/sqlite-store.js.map +1 -0
- package/dist/core/forecast.d.ts +44 -0
- package/dist/core/forecast.js +46 -0
- package/dist/core/forecast.js.map +1 -0
- package/dist/core/free-pool.d.ts +65 -0
- package/dist/core/free-pool.js +171 -0
- package/dist/core/free-pool.js.map +1 -0
- package/dist/core/git.d.ts +30 -0
- package/dist/core/git.js +50 -2
- package/dist/core/git.js.map +1 -1
- package/dist/core/github-events.d.ts +53 -0
- package/dist/core/github-events.js +227 -0
- package/dist/core/github-events.js.map +1 -0
- package/dist/core/goal-lanes.d.ts +53 -0
- package/dist/core/goal-lanes.js +99 -0
- package/dist/core/goal-lanes.js.map +1 -0
- package/dist/core/hosted.d.ts +27 -0
- package/dist/core/hosted.js +50 -0
- package/dist/core/hosted.js.map +1 -0
- package/dist/core/http-server.d.ts +5 -0
- package/dist/core/http-server.js +8 -0
- package/dist/core/http-server.js.map +1 -0
- package/dist/core/invite-link.d.ts +31 -0
- package/dist/core/invite-link.js +45 -0
- package/dist/core/invite-link.js.map +1 -0
- package/dist/core/loops.d.ts +37 -0
- package/dist/core/loops.js +81 -0
- package/dist/core/loops.js.map +1 -0
- package/dist/core/mcp-catalog.d.ts +182 -0
- package/dist/core/mcp-catalog.js +431 -0
- package/dist/core/mcp-catalog.js.map +1 -0
- package/dist/core/mcp.d.ts +87 -0
- package/dist/core/mcp.js +181 -0
- package/dist/core/mcp.js.map +1 -0
- package/dist/core/memory.d.ts +1 -0
- package/dist/core/memory.js +5 -2
- package/dist/core/memory.js.map +1 -1
- package/dist/core/model-tools.d.ts +97 -0
- package/dist/core/model-tools.js +388 -0
- package/dist/core/model-tools.js.map +1 -0
- package/dist/core/notify.js +19 -1
- package/dist/core/notify.js.map +1 -1
- package/dist/core/orchestra.d.ts +635 -0
- package/dist/core/orchestra.js +2120 -0
- package/dist/core/orchestra.js.map +1 -0
- package/dist/core/permissions.d.ts +56 -0
- package/dist/core/permissions.js +122 -0
- package/dist/core/permissions.js.map +1 -0
- package/dist/core/preview-proxy.d.ts +70 -0
- package/dist/core/preview-proxy.js +563 -0
- package/dist/core/preview-proxy.js.map +1 -0
- package/dist/core/preview-shot.d.ts +46 -0
- package/dist/core/preview-shot.js +109 -0
- package/dist/core/preview-shot.js.map +1 -0
- package/dist/core/process.d.ts +36 -0
- package/dist/core/process.js +168 -0
- package/dist/core/process.js.map +1 -0
- package/dist/core/prompt-queue.d.ts +136 -0
- package/dist/core/prompt-queue.js +269 -0
- package/dist/core/prompt-queue.js.map +1 -0
- package/dist/core/prompts.d.ts +53 -0
- package/dist/core/prompts.js +127 -0
- package/dist/core/prompts.js.map +1 -0
- package/dist/core/proof.d.ts +82 -0
- package/dist/core/proof.js +216 -0
- package/dist/core/proof.js.map +1 -0
- package/dist/core/provider-text.d.ts +23 -0
- package/dist/core/provider-text.js +66 -0
- package/dist/core/provider-text.js.map +1 -0
- package/dist/core/providers.d.ts +152 -0
- package/dist/core/providers.js +343 -0
- package/dist/core/providers.js.map +1 -0
- package/dist/core/quota.d.ts +33 -0
- package/dist/core/quota.js +74 -0
- package/dist/core/quota.js.map +1 -0
- package/dist/core/recipes.d.ts +50 -0
- package/dist/core/recipes.js +99 -0
- package/dist/core/recipes.js.map +1 -0
- package/dist/core/registry.d.ts +54 -0
- package/dist/core/registry.js +62 -5
- package/dist/core/registry.js.map +1 -1
- package/dist/core/relay-client.d.ts +67 -0
- package/dist/core/relay-client.js +184 -0
- package/dist/core/relay-client.js.map +1 -0
- package/dist/core/relay-protocol.d.ts +140 -0
- package/dist/core/relay-protocol.js +189 -0
- package/dist/core/relay-protocol.js.map +1 -0
- package/dist/core/replay.d.ts +18 -0
- package/dist/core/replay.js +191 -0
- package/dist/core/replay.js.map +1 -0
- package/dist/core/review-triage.d.ts +41 -0
- package/dist/core/review-triage.js +124 -0
- package/dist/core/review-triage.js.map +1 -0
- package/dist/core/router.js +2 -2
- package/dist/core/router.js.map +1 -1
- package/dist/core/routes.d.ts +39 -3
- package/dist/core/routes.js +137 -4
- package/dist/core/routes.js.map +1 -1
- package/dist/core/run-command.d.ts +14 -0
- package/dist/core/run-command.js +45 -0
- package/dist/core/run-command.js.map +1 -0
- package/dist/core/runner-setup.d.ts +36 -0
- package/dist/core/runner-setup.js +114 -0
- package/dist/core/runner-setup.js.map +1 -0
- package/dist/core/search.js +0 -0
- package/dist/core/search.js.map +1 -1
- package/dist/core/semantic.d.ts +92 -0
- package/dist/core/semantic.js +227 -0
- package/dist/core/semantic.js.map +1 -0
- package/dist/core/servers.d.ts +115 -0
- package/dist/core/servers.js +305 -0
- package/dist/core/servers.js.map +1 -0
- package/dist/core/setup.js +64 -6
- package/dist/core/setup.js.map +1 -1
- package/dist/core/shield.d.ts +17 -0
- package/dist/core/shield.js +81 -0
- package/dist/core/shield.js.map +1 -0
- package/dist/core/shift.d.ts +69 -0
- package/dist/core/shift.js +120 -0
- package/dist/core/shift.js.map +1 -0
- package/dist/core/skill-install.d.ts +125 -0
- package/dist/core/skill-install.js +328 -0
- package/dist/core/skill-install.js.map +1 -0
- package/dist/core/skills.d.ts +116 -0
- package/dist/core/skills.js +223 -0
- package/dist/core/skills.js.map +1 -0
- package/dist/core/step-conditions.d.ts +65 -0
- package/dist/core/step-conditions.js +102 -0
- package/dist/core/step-conditions.js.map +1 -0
- package/dist/core/subagents.d.ts +45 -0
- package/dist/core/subagents.js +90 -0
- package/dist/core/subagents.js.map +1 -0
- package/dist/core/team-canon.d.ts +42 -0
- package/dist/core/team-canon.js +121 -0
- package/dist/core/team-canon.js.map +1 -0
- package/dist/core/team-crypto.d.ts +97 -0
- package/dist/core/team-crypto.js +175 -0
- package/dist/core/team-crypto.js.map +1 -0
- package/dist/core/team-hub.d.ts +514 -0
- package/dist/core/team-hub.js +964 -0
- package/dist/core/team-hub.js.map +1 -0
- package/dist/core/team-landing.d.ts +239 -0
- package/dist/core/team-landing.js +504 -0
- package/dist/core/team-landing.js.map +1 -0
- package/dist/core/team-leases.d.ts +44 -0
- package/dist/core/team-leases.js +145 -0
- package/dist/core/team-leases.js.map +1 -0
- package/dist/core/team-memory.d.ts +42 -0
- package/dist/core/team-memory.js +84 -0
- package/dist/core/team-memory.js.map +1 -0
- package/dist/core/team-policy.d.ts +85 -0
- package/dist/core/team-policy.js +191 -0
- package/dist/core/team-policy.js.map +1 -0
- package/dist/core/thread-md.d.ts +6 -0
- package/dist/core/thread-md.js +42 -0
- package/dist/core/thread-md.js.map +1 -0
- package/dist/core/turn-stats.d.ts +61 -0
- package/dist/core/turn-stats.js +124 -0
- package/dist/core/turn-stats.js.map +1 -0
- package/dist/core/updater.d.ts +73 -0
- package/dist/core/updater.js +153 -0
- package/dist/core/updater.js.map +1 -0
- package/dist/core/usage.d.ts +75 -0
- package/dist/core/usage.js +163 -0
- package/dist/core/usage.js.map +1 -0
- package/dist/core/windows-jobs.d.ts +15 -0
- package/dist/core/windows-jobs.js +170 -0
- package/dist/core/windows-jobs.js.map +1 -0
- package/dist/core/worktree-merge.d.ts +57 -0
- package/dist/core/worktree-merge.js +123 -0
- package/dist/core/worktree-merge.js.map +1 -0
- package/dist/core/worktree.d.ts +5 -0
- package/dist/core/worktree.js +45 -5
- package/dist/core/worktree.js.map +1 -1
- package/dist/core/worktrees.d.ts +6 -0
- package/dist/core/worktrees.js +21 -0
- package/dist/core/worktrees.js.map +1 -0
- package/dist/daemon/app-page.d.ts +0 -17
- package/dist/daemon/app-page.js +10 -6346
- package/dist/daemon/app-page.js.map +1 -1
- package/dist/daemon/auth.d.ts +24 -3
- package/dist/daemon/auth.js +66 -7
- package/dist/daemon/auth.js.map +1 -1
- package/dist/daemon/board.d.ts +7 -0
- package/dist/daemon/board.js +12 -1
- package/dist/daemon/board.js.map +1 -1
- package/dist/daemon/brand-icons.d.ts +6 -1
- package/dist/daemon/brand-icons.js +11 -3
- package/dist/daemon/brand-icons.js.map +1 -1
- package/dist/daemon/client.d.ts +665 -1
- package/dist/daemon/client.js +381 -3
- package/dist/daemon/client.js.map +1 -1
- package/dist/daemon/delivery.d.ts +34 -0
- package/dist/daemon/delivery.js +63 -0
- package/dist/daemon/delivery.js.map +1 -0
- package/dist/daemon/deploys.d.ts +62 -0
- package/dist/daemon/deploys.js +159 -0
- package/dist/daemon/deploys.js.map +1 -0
- package/dist/daemon/landing.d.ts +192 -0
- package/dist/daemon/landing.js +992 -0
- package/dist/daemon/landing.js.map +1 -0
- package/dist/daemon/onboard.d.ts +150 -0
- package/dist/daemon/onboard.js +390 -0
- package/dist/daemon/onboard.js.map +1 -0
- package/dist/daemon/proof.d.ts +70 -0
- package/dist/daemon/proof.js +172 -0
- package/dist/daemon/proof.js.map +1 -0
- package/dist/daemon/push.d.ts +19 -1
- package/dist/daemon/push.js +90 -3
- package/dist/daemon/push.js.map +1 -1
- package/dist/daemon/relay.d.ts +82 -0
- package/dist/daemon/relay.js +351 -0
- package/dist/daemon/relay.js.map +1 -0
- package/dist/daemon/routes/agent-discovery.d.ts +4 -0
- package/dist/daemon/routes/agent-discovery.js +29 -0
- package/dist/daemon/routes/agent-discovery.js.map +1 -0
- package/dist/daemon/routes/agent-settings.d.ts +4 -0
- package/dist/daemon/routes/agent-settings.js +94 -0
- package/dist/daemon/routes/agent-settings.js.map +1 -0
- package/dist/daemon/routes/agents.d.ts +4 -0
- package/dist/daemon/routes/agents.js +105 -0
- package/dist/daemon/routes/agents.js.map +1 -0
- package/dist/daemon/routes/alerts.d.ts +4 -0
- package/dist/daemon/routes/alerts.js +137 -0
- package/dist/daemon/routes/alerts.js.map +1 -0
- package/dist/daemon/routes/approvals.d.ts +4 -0
- package/dist/daemon/routes/approvals.js +40 -0
- package/dist/daemon/routes/approvals.js.map +1 -0
- package/dist/daemon/routes/assets.d.ts +3 -0
- package/dist/daemon/routes/assets.js +64 -0
- package/dist/daemon/routes/assets.js.map +1 -0
- package/dist/daemon/routes/board.d.ts +4 -0
- package/dist/daemon/routes/board.js +147 -0
- package/dist/daemon/routes/board.js.map +1 -0
- package/dist/daemon/routes/brain.d.ts +4 -0
- package/dist/daemon/routes/brain.js +270 -0
- package/dist/daemon/routes/brain.js.map +1 -0
- package/dist/daemon/routes/chats.d.ts +4 -0
- package/dist/daemon/routes/chats.js +249 -0
- package/dist/daemon/routes/chats.js.map +1 -0
- package/dist/daemon/routes/clients.d.ts +4 -0
- package/dist/daemon/routes/clients.js +49 -0
- package/dist/daemon/routes/clients.js.map +1 -0
- package/dist/daemon/routes/cloud.d.ts +4 -0
- package/dist/daemon/routes/cloud.js +46 -0
- package/dist/daemon/routes/cloud.js.map +1 -0
- package/dist/daemon/routes/config.d.ts +4 -0
- package/dist/daemon/routes/config.js +35 -0
- package/dist/daemon/routes/config.js.map +1 -0
- package/dist/daemon/routes/context.d.ts +51 -0
- package/dist/daemon/routes/context.js +2 -0
- package/dist/daemon/routes/context.js.map +1 -0
- package/dist/daemon/routes/crews.d.ts +4 -0
- package/dist/daemon/routes/crews.js +149 -0
- package/dist/daemon/routes/crews.js.map +1 -0
- package/dist/daemon/routes/files.d.ts +3 -0
- package/dist/daemon/routes/files.js +253 -0
- package/dist/daemon/routes/files.js.map +1 -0
- package/dist/daemon/routes/git.d.ts +4 -0
- package/dist/daemon/routes/git.js +96 -0
- package/dist/daemon/routes/git.js.map +1 -0
- package/dist/daemon/routes/history.d.ts +4 -0
- package/dist/daemon/routes/history.js +101 -0
- package/dist/daemon/routes/history.js.map +1 -0
- package/dist/daemon/routes/integrations-project.d.ts +3 -0
- package/dist/daemon/routes/integrations-project.js +103 -0
- package/dist/daemon/routes/integrations-project.js.map +1 -0
- package/dist/daemon/routes/integrations.d.ts +3 -0
- package/dist/daemon/routes/integrations.js +111 -0
- package/dist/daemon/routes/integrations.js.map +1 -0
- package/dist/daemon/routes/logs.d.ts +3 -0
- package/dist/daemon/routes/logs.js +40 -0
- package/dist/daemon/routes/logs.js.map +1 -0
- package/dist/daemon/routes/messages.d.ts +4 -0
- package/dist/daemon/routes/messages.js +60 -0
- package/dist/daemon/routes/messages.js.map +1 -0
- package/dist/daemon/routes/observability.d.ts +4 -0
- package/dist/daemon/routes/observability.js +247 -0
- package/dist/daemon/routes/observability.js.map +1 -0
- package/dist/daemon/routes/onboard.d.ts +12 -0
- package/dist/daemon/routes/onboard.js +67 -0
- package/dist/daemon/routes/onboard.js.map +1 -0
- package/dist/daemon/routes/orchestra.d.ts +4 -0
- package/dist/daemon/routes/orchestra.js +110 -0
- package/dist/daemon/routes/orchestra.js.map +1 -0
- package/dist/daemon/routes/pairing.d.ts +4 -0
- package/dist/daemon/routes/pairing.js +155 -0
- package/dist/daemon/routes/pairing.js.map +1 -0
- package/dist/daemon/routes/preview.d.ts +24 -0
- package/dist/daemon/routes/preview.js +122 -0
- package/dist/daemon/routes/preview.js.map +1 -0
- package/dist/daemon/routes/project-actions.d.ts +4 -0
- package/dist/daemon/routes/project-actions.js +53 -0
- package/dist/daemon/routes/project-actions.js.map +1 -0
- package/dist/daemon/routes/project-team.d.ts +4 -0
- package/dist/daemon/routes/project-team.js +201 -0
- package/dist/daemon/routes/project-team.js.map +1 -0
- package/dist/daemon/routes/projects.d.ts +14 -0
- package/dist/daemon/routes/projects.js +138 -0
- package/dist/daemon/routes/projects.js.map +1 -0
- package/dist/daemon/routes/prompts.d.ts +4 -0
- package/dist/daemon/routes/prompts.js +44 -0
- package/dist/daemon/routes/prompts.js.map +1 -0
- package/dist/daemon/routes/proof.d.ts +4 -0
- package/dist/daemon/routes/proof.js +22 -0
- package/dist/daemon/routes/proof.js.map +1 -0
- package/dist/daemon/routes/providers.d.ts +3 -0
- package/dist/daemon/routes/providers.js +60 -0
- package/dist/daemon/routes/providers.js.map +1 -0
- package/dist/daemon/routes/public.d.ts +4 -0
- package/dist/daemon/routes/public.js +64 -0
- package/dist/daemon/routes/public.js.map +1 -0
- package/dist/daemon/routes/queue.d.ts +4 -0
- package/dist/daemon/routes/queue.js +140 -0
- package/dist/daemon/routes/queue.js.map +1 -0
- package/dist/daemon/routes/routing.d.ts +4 -0
- package/dist/daemon/routes/routing.js +61 -0
- package/dist/daemon/routes/routing.js.map +1 -0
- package/dist/daemon/routes/runtime-handler.d.ts +2 -0
- package/dist/daemon/routes/runtime-handler.js +63 -0
- package/dist/daemon/routes/runtime-handler.js.map +1 -0
- package/dist/daemon/routes/search.d.ts +4 -0
- package/dist/daemon/routes/search.js +17 -0
- package/dist/daemon/routes/search.js.map +1 -0
- package/dist/daemon/routes/servers.d.ts +4 -0
- package/dist/daemon/routes/servers.js +133 -0
- package/dist/daemon/routes/servers.js.map +1 -0
- package/dist/daemon/routes/setup.d.ts +3 -0
- package/dist/daemon/routes/setup.js +50 -0
- package/dist/daemon/routes/setup.js.map +1 -0
- package/dist/daemon/routes/shift.d.ts +4 -0
- package/dist/daemon/routes/shift.js +30 -0
- package/dist/daemon/routes/shift.js.map +1 -0
- package/dist/daemon/routes/specs.d.ts +4 -0
- package/dist/daemon/routes/specs.js +57 -0
- package/dist/daemon/routes/specs.js.map +1 -0
- package/dist/daemon/routes/task-delivery.d.ts +4 -0
- package/dist/daemon/routes/task-delivery.js +38 -0
- package/dist/daemon/routes/task-delivery.js.map +1 -0
- package/dist/daemon/routes/team.d.ts +4 -0
- package/dist/daemon/routes/team.js +193 -0
- package/dist/daemon/routes/team.js.map +1 -0
- package/dist/daemon/routes/terminals.d.ts +4 -0
- package/dist/daemon/routes/terminals.js +87 -0
- package/dist/daemon/routes/terminals.js.map +1 -0
- package/dist/daemon/routes/tools.d.ts +4 -0
- package/dist/daemon/routes/tools.js +180 -0
- package/dist/daemon/routes/tools.js.map +1 -0
- package/dist/daemon/routes/updates.d.ts +4 -0
- package/dist/daemon/routes/updates.js +89 -0
- package/dist/daemon/routes/updates.js.map +1 -0
- package/dist/daemon/routes/voice.d.ts +4 -0
- package/dist/daemon/routes/voice.js +53 -0
- package/dist/daemon/routes/voice.js.map +1 -0
- package/dist/daemon/runner.d.ts +186 -0
- package/dist/daemon/runner.js +612 -0
- package/dist/daemon/runner.js.map +1 -0
- package/dist/daemon/runtime/accounting.d.ts +130 -0
- package/dist/daemon/runtime/accounting.js +303 -0
- package/dist/daemon/runtime/accounting.js.map +1 -0
- package/dist/daemon/runtime/agents.d.ts +16 -0
- package/dist/daemon/runtime/agents.js +71 -0
- package/dist/daemon/runtime/agents.js.map +1 -0
- package/dist/daemon/runtime/briefings.d.ts +134 -0
- package/dist/daemon/runtime/briefings.js +329 -0
- package/dist/daemon/runtime/briefings.js.map +1 -0
- package/dist/daemon/runtime/native-usage.d.ts +21 -0
- package/dist/daemon/runtime/native-usage.js +71 -0
- package/dist/daemon/runtime/native-usage.js.map +1 -0
- package/dist/daemon/runtime/queue.d.ts +94 -0
- package/dist/daemon/runtime/queue.js +222 -0
- package/dist/daemon/runtime/queue.js.map +1 -0
- package/dist/daemon/runtime/relay.d.ts +93 -0
- package/dist/daemon/runtime/relay.js +240 -0
- package/dist/daemon/runtime/relay.js.map +1 -0
- package/dist/daemon/runtime/turns.d.ts +202 -0
- package/dist/daemon/runtime/turns.js +663 -0
- package/dist/daemon/runtime/turns.js.map +1 -0
- package/dist/daemon/runtime-support.d.ts +76 -0
- package/dist/daemon/runtime-support.js +134 -0
- package/dist/daemon/runtime-support.js.map +1 -0
- package/dist/daemon/runtime.d.ts +739 -70
- package/dist/daemon/runtime.js +2751 -470
- package/dist/daemon/runtime.js.map +1 -1
- package/dist/daemon/server.d.ts +82 -55
- package/dist/daemon/server.js +674 -1435
- package/dist/daemon/server.js.map +1 -1
- package/dist/daemon/shift.d.ts +70 -0
- package/dist/daemon/shift.js +170 -0
- package/dist/daemon/shift.js.map +1 -0
- package/dist/daemon/specs.d.ts +92 -0
- package/dist/daemon/specs.js +285 -0
- package/dist/daemon/specs.js.map +1 -0
- package/dist/daemon/system.d.ts +208 -0
- package/dist/daemon/system.js +557 -0
- package/dist/daemon/system.js.map +1 -0
- package/dist/daemon/tasks.js +1 -1
- package/dist/daemon/team-brain.d.ts +136 -0
- package/dist/daemon/team-brain.js +659 -0
- package/dist/daemon/team-brain.js.map +1 -0
- package/dist/daemon/team-coordinator.d.ts +78 -0
- package/dist/daemon/team-coordinator.js +408 -0
- package/dist/daemon/team-coordinator.js.map +1 -0
- package/dist/daemon/team.d.ts +339 -0
- package/dist/daemon/team.js +1433 -0
- package/dist/daemon/team.js.map +1 -0
- package/dist/daemon/terminals.d.ts +22 -3
- package/dist/daemon/terminals.js +236 -16
- package/dist/daemon/terminals.js.map +1 -1
- package/dist/hub/client.d.ts +120 -0
- package/dist/hub/client.js +228 -0
- package/dist/hub/client.js.map +1 -0
- package/dist/hub/server.d.ts +32 -0
- package/dist/hub/server.js +180 -0
- package/dist/hub/server.js.map +1 -0
- package/dist/hub/supabase-client.d.ts +220 -0
- package/dist/hub/supabase-client.js +843 -0
- package/dist/hub/supabase-client.js.map +1 -0
- package/dist/observability/ask.d.ts +91 -0
- package/dist/observability/ask.js +179 -0
- package/dist/observability/ask.js.map +1 -0
- package/dist/observability/clickhouse.d.ts +33 -0
- package/dist/observability/clickhouse.js +48 -0
- package/dist/observability/clickhouse.js.map +1 -0
- package/dist/observability/decisions.d.ts +176 -0
- package/dist/observability/decisions.js +377 -0
- package/dist/observability/decisions.js.map +1 -0
- package/dist/observability/index.d.ts +89 -0
- package/dist/observability/index.js +348 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/insights.d.ts +151 -0
- package/dist/observability/insights.js +319 -0
- package/dist/observability/insights.js.map +1 -0
- package/dist/observability/logs-query.d.ts +82 -0
- package/dist/observability/logs-query.js +102 -0
- package/dist/observability/logs-query.js.map +1 -0
- package/dist/observability/logs.d.ts +72 -0
- package/dist/observability/logs.js +295 -0
- package/dist/observability/logs.js.map +1 -0
- package/dist/observability/metrics.d.ts +86 -0
- package/dist/observability/metrics.js +303 -0
- package/dist/observability/metrics.js.map +1 -0
- package/dist/observability/otlp.d.ts +127 -0
- package/dist/observability/otlp.js +242 -0
- package/dist/observability/otlp.js.map +1 -0
- package/dist/observability/snapshots.d.ts +43 -0
- package/dist/observability/snapshots.js +129 -0
- package/dist/observability/snapshots.js.map +1 -0
- package/dist/observability/triage.d.ts +49 -0
- package/dist/observability/triage.js +284 -0
- package/dist/observability/triage.js.map +1 -0
- package/dist/providers/adapter.d.ts +50 -0
- package/dist/providers/adapter.js +38 -0
- package/dist/providers/adapter.js.map +1 -0
- package/dist/providers/agent.d.ts +110 -0
- package/dist/providers/agent.js +487 -0
- package/dist/providers/agent.js.map +1 -0
- package/dist/providers/approvals.d.ts +24 -0
- package/dist/providers/approvals.js +78 -0
- package/dist/providers/approvals.js.map +1 -0
- package/dist/providers/attachments.d.ts +20 -0
- package/dist/providers/attachments.js +51 -0
- package/dist/providers/attachments.js.map +1 -0
- package/dist/providers/claude/adapter.d.ts +99 -0
- package/dist/providers/claude/adapter.js +790 -0
- package/dist/providers/claude/adapter.js.map +1 -0
- package/dist/providers/codex/adapter.d.ts +113 -0
- package/dist/providers/codex/adapter.js +881 -0
- package/dist/providers/codex/adapter.js.map +1 -0
- package/dist/providers/codex/instructions.d.ts +11 -0
- package/dist/providers/codex/instructions.js +154 -0
- package/dist/providers/codex/instructions.js.map +1 -0
- package/dist/providers/codex/rpc.d.ts +36 -0
- package/dist/providers/codex/rpc.js +104 -0
- package/dist/providers/codex/rpc.js.map +1 -0
- package/dist/providers/contracts.d.ts +339 -0
- package/dist/providers/contracts.js +19 -0
- package/dist/providers/contracts.js.map +1 -0
- package/dist/providers/directory.d.ts +70 -0
- package/dist/providers/directory.js +95 -0
- package/dist/providers/directory.js.map +1 -0
- package/dist/providers/errors.d.ts +47 -0
- package/dist/providers/errors.js +24 -0
- package/dist/providers/errors.js.map +1 -0
- package/dist/providers/index.d.ts +18 -0
- package/dist/providers/index.js +19 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/ingestion.d.ts +80 -0
- package/dist/providers/ingestion.js +330 -0
- package/dist/providers/ingestion.js.map +1 -0
- package/dist/providers/live.d.ts +22 -0
- package/dist/providers/live.js +56 -0
- package/dist/providers/live.js.map +1 -0
- package/dist/providers/process.d.ts +29 -0
- package/dist/providers/process.js +71 -0
- package/dist/providers/process.js.map +1 -0
- package/dist/providers/reaper.d.ts +33 -0
- package/dist/providers/reaper.js +65 -0
- package/dist/providers/reaper.js.map +1 -0
- package/dist/providers/service.d.ts +87 -0
- package/dist/providers/service.js +256 -0
- package/dist/providers/service.js.map +1 -0
- package/dist/sdk.d.ts +1 -1
- package/dist/sdk.js +1 -1
- package/dist/sdk.js.map +1 -1
- package/dist/types.d.ts +385 -6
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -1
- package/dist/version.d.ts +7 -0
- package/dist/version.js +16 -0
- package/dist/version.js.map +1 -0
- package/dist/web/app.css +4643 -0
- package/dist/web/app.js +22640 -0
- package/dist/web/app.js.map +7 -0
- package/dist/web/shell.html +39 -0
- package/docs/README.md +21 -0
- package/docs/SETUP.md +10 -0
- package/docs/adapters.md +21 -8
- package/docs/brain-continuity.md +186 -0
- package/docs/cloud.md +108 -0
- package/docs/crews.md +62 -0
- package/docs/design-system.md +31 -2
- package/docs/integration-notes.md +128 -20
- package/docs/loompad.md +105 -0
- package/docs/observability.md +220 -0
- package/docs/play-store.md +123 -0
- package/docs/proposals/agent-teams.md +249 -0
- package/docs/proposals/brain-continuity-implementation.md +468 -0
- package/docs/proposals/brain-session-continuity.md +623 -0
- package/docs/proposals/t3code-port.md +81 -0
- package/docs/proposals/t3code-reference.md +95 -0
- package/docs/refactoring/AGENT-TEAMS-PROGRESS.md +88 -0
- package/docs/refactoring/BOUNDARIES.md +120 -0
- package/docs/refactoring/BRAIN-AUDIT.md +176 -0
- package/docs/refactoring/BRAIN-NOTES.md +390 -0
- package/docs/refactoring/BRAIN-TODO.md +214 -0
- package/docs/refactoring/NOTES.md +129 -0
- package/docs/refactoring/T3-PORT-NOTES.md +165 -0
- package/docs/refactoring/T3-PORT-TODO.md +123 -0
- package/docs/refactoring/TODO.md +46 -0
- package/docs/refactoring/brain-benchmark-2026-09-28.json +48 -0
- package/docs/refactoring/brain-benchmark-audit-2026-09-28.json +48 -0
- package/docs/release-notes/v0.2.0.md +35 -0
- package/docs/release-notes/v0.2.1.md +59 -0
- package/docs/release-notes/v0.2.3.md +77 -0
- package/docs/release-notes/v0.2.4.md +128 -0
- package/docs/release-notes/v0.2.5.md +153 -0
- package/docs/release-notes/v0.2.6.md +62 -0
- package/docs/release-notes/v1.0.0.md +120 -0
- package/docs/release-notes/v1.0.1.md +77 -0
- package/docs/release-notes/v1.1.0.md +71 -0
- package/docs/release-notes/v1.1.1.md +38 -0
- package/docs/teams-architecture.md +697 -0
- package/docs/teams.md +171 -0
- package/docs/windows.md +85 -0
- package/package.json +22 -9
- package/dist/adapters/claude-code.d.ts +0 -26
- package/dist/adapters/claude-code.js +0 -209
- package/dist/adapters/claude-code.js.map +0 -1
- package/dist/adapters/codex.d.ts +0 -51
- package/dist/adapters/codex.js +0 -291
- package/dist/adapters/codex.js.map +0 -1
- package/docs/img/board-linear.png +0 -0
- package/docs/img/board-projects.png +0 -0
- package/docs/img/brain.png +0 -0
- package/docs/img/settings.png +0 -0
- package/docs/img/workspace.png +0 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Porting t3code's core into Loom
|
|
2
|
+
|
|
3
|
+
Status: plan, agreed 2026-09-28. Functionality first; UI after.
|
|
4
|
+
|
|
5
|
+
Loom takes t3code's provider and turn machinery (MIT, attributed per file) and keeps
|
|
6
|
+
its own app, orchestra, teams, phone client and Brain. The port is plain TypeScript;
|
|
7
|
+
t3code's Effect layers become classes and async functions. The differentiator is
|
|
8
|
+
what t3code refuses: switching provider mid-chat
|
|
9
|
+
([`ProviderCommandReactor`](../../../t3code/apps/server/src/orchestration/Layers/ProviderCommandReactor.ts):
|
|
10
|
+
"is bound to driver X and cannot switch to Y"). Loom's Brain makes that switch.
|
|
11
|
+
|
|
12
|
+
## Decisions
|
|
13
|
+
|
|
14
|
+
- **Port, not fork.** Loom's daemon, clients and features stay; the provider layer
|
|
15
|
+
and turn lifecycle are replaced with t3code's design.
|
|
16
|
+
- **Warm sessions.** One live provider session per chat, reused across turns
|
|
17
|
+
(app-server process, Agent SDK streaming query), with an idle reaper. Brain's
|
|
18
|
+
"turn owns a process group" rule becomes turn-level settlement: a turn is settled
|
|
19
|
+
when the harness reports it finished and no commands it started are running.
|
|
20
|
+
- **Normalized events at the adapter boundary.** Adapters emit one canonical runtime
|
|
21
|
+
event stream; nothing above them branches on provider.
|
|
22
|
+
|
|
23
|
+
## What t3code has that Loom lacks
|
|
24
|
+
|
|
25
|
+
| Area | t3code | Loom today |
|
|
26
|
+
| --- | --- | --- |
|
|
27
|
+
| Adapter contract | `startSession`, `sendTurn`, `interruptTurn`, `respondToRequest`, `respondToUserInput`, `readThread`, `rollbackThread`, `compaction`, `stopSession`, capabilities | `send`, `interrupt`, `available` |
|
|
28
|
+
| Runtime events | ~50 normalized types: session/turn/item lifecycle, `content.delta` streaming, requests, user input, plans, diffs, tasks, hooks, account, MCP | ~10 coarse kinds, completed messages only |
|
|
29
|
+
| Sessions | warm, directory + reaper, per instance | one process per turn |
|
|
30
|
+
| Questions | structured user input, blocking and async (Codex) | `needs_input` heuristic on a trailing `?` |
|
|
31
|
+
| Plans | plan items, proposed plan, plan-mode exit | plan-mode briefing text |
|
|
32
|
+
| Revert | hidden-ref checkpoints + conversation rollback, refused when the provider can't roll back | checkpoints restore files only |
|
|
33
|
+
| Models | catalog per provider (`model/list`, Claude manifest), effort/thinking | free-text model override |
|
|
34
|
+
| Compaction | automatic + manual start | automatic only (reported) |
|
|
35
|
+
| Providers | instances (several accounts per driver), auth status, install/update ownership | one agent per config entry |
|
|
36
|
+
|
|
37
|
+
## Phases
|
|
38
|
+
|
|
39
|
+
Each phase ends with fakes-only tests passing and one authorized live check per
|
|
40
|
+
harness.
|
|
41
|
+
|
|
42
|
+
**1. Provider contract and service.** `src/providers/` in t3code's shape: a
|
|
43
|
+
`ProviderAdapter` interface with capabilities, the canonical `ProviderRuntimeEvent`
|
|
44
|
+
union (the subset Loom uses first, extended as phases need it), a `ProviderService`
|
|
45
|
+
that routes by instance and owns a session directory and reaper, and an ingestion
|
|
46
|
+
layer that projects runtime events into Loom's event log. Existing adapters are
|
|
47
|
+
wrapped, so nothing user-facing changes yet.
|
|
48
|
+
|
|
49
|
+
**2. Warm sessions for Codex and Claude.** Codex: one `app-server` per chat, thread
|
|
50
|
+
kept open, turns started and interrupted over the same connection. Claude: one
|
|
51
|
+
streaming-input `query()` per chat, turns pushed as user messages, `setModel` for
|
|
52
|
+
in-provider model switches. Turn-level settlement replaces process-group settlement
|
|
53
|
+
in Brain. Token streaming via `content.delta`, throttled on the websocket.
|
|
54
|
+
|
|
55
|
+
**3. Interaction parity.** Tool items with start/progress/complete and streamed
|
|
56
|
+
output; approvals keeping native option ids; structured user input (Claude
|
|
57
|
+
`AskUserQuestion`, Codex `requestUserInput`, Codex async questions); plan items and
|
|
58
|
+
plan-mode exit; per-turn diffs; manual compaction; model catalogs with effort and
|
|
59
|
+
thinking settings.
|
|
60
|
+
|
|
61
|
+
**4. Checkpoints and revert.** Hidden-ref workspace checkpoints per turn; revert
|
|
62
|
+
coordinated with native rollback (Codex thread rollback, Claude resume-at);
|
|
63
|
+
refused before touching files when the provider can't roll back.
|
|
64
|
+
|
|
65
|
+
**5. Cross-provider switching (the differentiator).** Switching provider in a chat
|
|
66
|
+
parks the current warm session and starts or resumes the target's, with Brain
|
|
67
|
+
building what the target lacks. Budget by the target's context window; offer a
|
|
68
|
+
switch when a usage limit is reached; revert across a provider boundary rolls back
|
|
69
|
+
each side it touched. Brain continuity becomes the default path, not opt-in.
|
|
70
|
+
|
|
71
|
+
**6. Provider management.** Instances (several accounts per driver), auth status,
|
|
72
|
+
install/update detection by owning installer, importing native session history.
|
|
73
|
+
|
|
74
|
+
**7. UI overhaul.** Built on the settled event model.
|
|
75
|
+
|
|
76
|
+
## Not ported
|
|
77
|
+
|
|
78
|
+
Relay/T3 Connect, mobile app, desktop shell, devices, voice, analytics and
|
|
79
|
+
marketing: Loom has its own equivalents or doesn't need them now. Other providers
|
|
80
|
+
(Cursor, Grok, OpenCode, Antigravity) move to the new contract after Codex and
|
|
81
|
+
Claude.
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# T3 Code reference for Loom
|
|
2
|
+
|
|
3
|
+
Inspected 2026-09-27. Read-only checkout: `/Volumes/Programming Vault/t3code`.
|
|
4
|
+
Branch: `main`. Commit: `de251fc2971a884cb5b1305ba4daf309dc8cccb0`
|
|
5
|
+
(`fix(web): continue onboarding after incomplete history imports (#13935)`).
|
|
6
|
+
Read contributor and agent instructions. No dependencies installed, processes
|
|
7
|
+
started, benchmarks run, or T3 source changed. This is a targeted architecture
|
|
8
|
+
review, not an audit of the entire repository.
|
|
9
|
+
|
|
10
|
+
## Findings and implications
|
|
11
|
+
|
|
12
|
+
### Native sessions still have provider boundaries
|
|
13
|
+
|
|
14
|
+
The [command reactor](https://github.com/pingdotgg/t3code/blob/de251fc2971a884cb5b1305ba4daf309dc8cccb0/apps/server/src/orchestration/Layers/ProviderCommandReactor.ts#L688)
|
|
15
|
+
rejects an existing thread switching to another driver. Even instances of the
|
|
16
|
+
same driver must have matching `continuationIdentity.continuationKey` values.
|
|
17
|
+
Model selection and native session compatibility are separate concerns.
|
|
18
|
+
|
|
19
|
+
**Loom:** keep the app conversation independent of native sessions. Validate
|
|
20
|
+
resume compatibility per instance. Cross-harness switching needs a fresh or
|
|
21
|
+
compatible target session and our own source-backed handoff. This checkout does
|
|
22
|
+
not solve shared context for us. PR #3799 was inspected separately; do not
|
|
23
|
+
describe its unmerged code as behavior present here.
|
|
24
|
+
|
|
25
|
+
### Cheap helper calls through harnesses are concrete
|
|
26
|
+
|
|
27
|
+
[Model defaults](https://github.com/pingdotgg/t3code/blob/de251fc2971a884cb5b1305ba4daf309dc8cccb0/packages/contracts/src/model.ts#L164)
|
|
28
|
+
select `gpt-6-luna` for Codex text generation and `claude-haiku-4-5` for Claude.
|
|
29
|
+
The [TextGeneration interface](https://github.com/pingdotgg/t3code/blob/de251fc2971a884cb5b1305ba4daf309dc8cccb0/apps/server/src/textGeneration/TextGeneration.ts#L87)
|
|
30
|
+
provides commit messages, PR content, branch names and thread titles.
|
|
31
|
+
|
|
32
|
+
- [Codex](https://github.com/pingdotgg/t3code/blob/de251fc2971a884cb5b1305ba4daf309dc8cccb0/apps/server/src/textGeneration/CodexTextGeneration.ts#L197)
|
|
33
|
+
uses `exec --ephemeral`, a read-only sandbox and an output schema.
|
|
34
|
+
- [Claude](https://github.com/pingdotgg/t3code/blob/de251fc2971a884cb5b1305ba4daf309dc8cccb0/apps/server/src/textGeneration/ClaudeTextGeneration.ts#L199)
|
|
35
|
+
requests structured JSON, disables tools and slash commands, and specifies
|
|
36
|
+
strict MCP configuration. Thread title calls use a temporary working directory.
|
|
37
|
+
|
|
38
|
+
**Loom:** reuse the architectural pattern for a small `ContextHelper` interface.
|
|
39
|
+
Summary extraction and source validation are new responsibilities. Discover
|
|
40
|
+
available models, bound usage, isolate helper sessions and preserve deterministic
|
|
41
|
+
fallbacks. A read-only sandbox alone does not mean a helper has no tools or no
|
|
42
|
+
access to unrelated readable files. These defaults do not prove account access,
|
|
43
|
+
subscription savings or identical restrictions across harnesses.
|
|
44
|
+
|
|
45
|
+
### Streaming efficiency is an explicit design concern
|
|
46
|
+
|
|
47
|
+
The [WebSocket server](https://github.com/pingdotgg/t3code/blob/de251fc2971a884cb5b1305ba4daf309dc8cccb0/apps/server/src/ws.ts)
|
|
48
|
+
batches shell/sidebar projection events, coalesces updates by aggregate and keeps
|
|
49
|
+
survivors ordered by sequence. Synchronization markers cannot overtake pending
|
|
50
|
+
events. [Client shell state](https://github.com/pingdotgg/t3code/blob/de251fc2971a884cb5b1305ba4daf309dc8cccb0/packages/client-runtime/src/state/shell.ts)
|
|
51
|
+
applies a batch with a single state write. Chat rendering uses a virtualized list.
|
|
52
|
+
|
|
53
|
+
**Loom:** persist canonical events independently of UI update frequency. Coalesce
|
|
54
|
+
replaceable projections only; preserve messages, decisions, tool outcomes and
|
|
55
|
+
delivery acknowledgements. Test ordering and reconnect boundaries. These are
|
|
56
|
+
useful performance mechanisms, not measured proof that every screen is fast.
|
|
57
|
+
|
|
58
|
+
### Electron supervises a backend process
|
|
59
|
+
|
|
60
|
+
[DesktopBackendManager](https://github.com/pingdotgg/t3code/blob/de251fc2971a884cb5b1305ba4daf309dc8cccb0/apps/desktop/src/backend/DesktopBackendManager.ts)
|
|
61
|
+
spawns backend processes, tracks lifecycle/readiness and schedules recovery after
|
|
62
|
+
unexpected exits. Desktop, server and web are separate applications in the repo.
|
|
63
|
+
|
|
64
|
+
**Loom:** keep harness execution, SQLite, indexing and helper scheduling outside
|
|
65
|
+
the renderer. Specify startup, cancellation, shutdown and crash recovery before
|
|
66
|
+
moving the UI to Electron. Electron packaging alone does not provide performance.
|
|
67
|
+
Adopting T3's full framework stack is not required to adopt these boundaries.
|
|
68
|
+
|
|
69
|
+
### SQLite and native compaction have distinct roles
|
|
70
|
+
|
|
71
|
+
The [SQLite layer](https://github.com/pingdotgg/t3code/blob/de251fc2971a884cb5b1305ba4daf309dc8cccb0/apps/server/src/persistence/Layers/Sqlite.ts)
|
|
72
|
+
enables foreign keys, WAL, a busy timeout and migrations. Its journal-size setting
|
|
73
|
+
controls retained WAL size after reset, not a hard cap on all in-flight WAL growth.
|
|
74
|
+
|
|
75
|
+
The [Claude adapter](https://github.com/pingdotgg/t3code/blob/de251fc2971a884cb5b1305ba4daf309dc8cccb0/apps/server/src/provider/Layers/ClaudeAdapter.ts#L3628)
|
|
76
|
+
observes native compaction boundaries and updates usage/thread state. Observing a
|
|
77
|
+
native compact event does not create portable cross-provider memory.
|
|
78
|
+
|
|
79
|
+
**Loom:** SQLite remains the canonical app-owned event and continuity store;
|
|
80
|
+
JSONL is an export format. Preserve originals across native compaction and track
|
|
81
|
+
what was actually delivered to each session separately from helper summaries.
|
|
82
|
+
|
|
83
|
+
## Next work, when implementation starts
|
|
84
|
+
|
|
85
|
+
- [x] Inspect session compatibility, helper isolation, persistence and desktop boundaries.
|
|
86
|
+
- [x] Feed verified constraints into the [continuity plan](brain-session-continuity.md).
|
|
87
|
+
- [ ] Verify installed harness capabilities and helper model availability.
|
|
88
|
+
- [ ] Prototype sequential switching with exact user history and delivery receipts.
|
|
89
|
+
- [ ] Test corrections, small decisions, return-to-old-session deltas and interruption.
|
|
90
|
+
- [ ] Measure token overhead and continuation quality before adding vector retrieval.
|
|
91
|
+
- [ ] Benchmark UI streaming and backend recovery before choosing optimizations.
|
|
92
|
+
|
|
93
|
+
Pin any future T3 comparison to its commit. Read the local MIT license before
|
|
94
|
+
copying source and retain required attribution if code is reused. No source was
|
|
95
|
+
copied as part of this review.
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Agent Teams implementation and Windows audit
|
|
2
|
+
|
|
3
|
+
User scope confirmed on 2026-10-15: finish Windows reliability, then implement
|
|
4
|
+
Agent Teams P2–P5 in separate reviewable PRs. Humans merge the PRs. Hosted
|
|
5
|
+
acceptance and trusted signing issues remain open when external access is missing.
|
|
6
|
+
The feature contract is [agent-teams.md](../proposals/agent-teams.md).
|
|
7
|
+
|
|
8
|
+
## Windows foundation — PR #218
|
|
9
|
+
|
|
10
|
+
Native Job Object containment, OpenCode 1.19 protocol parity, contained spec runs
|
|
11
|
+
and dev servers, IPv6 localhost readiness, and source installation checks are
|
|
12
|
+
implemented. Real Codex/OpenCode sequential native resume across an OS daemon
|
|
13
|
+
restart, parallel Orchestra, and the sequential Ship crew passed on Windows.
|
|
14
|
+
|
|
15
|
+
The audit found a native race in node-pty 1.1.0 during simultaneous terminal
|
|
16
|
+
exits. The dependency is pinned to 1.2.0-beta.15, containing upstream #922. The
|
|
17
|
+
DLL backend also leaves its output worker alive after public `onExit` (#887);
|
|
18
|
+
Loom now drains that connection with a compatibility bridge for the pinned
|
|
19
|
+
version, awaits shutdown, and ignores stale terminal callbacks after id reuse.
|
|
20
|
+
45 ConPTY checks and 42 pipe checks passed; a standalone terminal process exits
|
|
21
|
+
normally; production staging verifies Job Objects and ConPTY execution/shutdown.
|
|
22
|
+
All ten CI jobs passed on Windows PR head bd64d26.
|
|
23
|
+
|
|
24
|
+
Automatic approval review rejected launching the packaged desktop UI. Do not
|
|
25
|
+
retry that launch. The packaged daemon has CLI acceptance evidence. Installers
|
|
26
|
+
are unsigned, and current desktop UI acceptance remains incomplete.
|
|
27
|
+
|
|
28
|
+
## P2 — persistent teammates
|
|
29
|
+
|
|
30
|
+
Branch: `feat/crew-persistent-teammates`, stacked on the Windows PR.
|
|
31
|
+
|
|
32
|
+
- [x] Native binding per seat, delta on the second card.
|
|
33
|
+
- [x] Stable checkout across goals, distinct goal branches.
|
|
34
|
+
- [x] Graceful mid-goal restart resumes the binding; uncertain actions require
|
|
35
|
+
explicit receipt reconciliation before replay.
|
|
36
|
+
- [x] Explicit teammate refresh starts a new epoch.
|
|
37
|
+
- [x] Crew memory scope, retrieval isolation and human promotion to project memory.
|
|
38
|
+
- [x] Native fake acceptance, HTTP route checks, regression/DOM checks and CI (all ten jobs on 2cb501b).
|
|
39
|
+
|
|
40
|
+
Local validation: build/typecheck passed; native restart/delta/recovery tests
|
|
41
|
+
passed (3), crew/memory HTTP and the Crew DOM acceptance passed, and the existing
|
|
42
|
+
crew/brain regressions passed. Full CI remains a separate release gate.
|
|
43
|
+
|
|
44
|
+
## P3 — parallel and safe
|
|
45
|
+
|
|
46
|
+
- [x] Builder worktrees and in-crew leases, with overlap holds and resolution.
|
|
47
|
+
- [x] Race and Fan-out plays reuse Orchestra/worktree mechanisms.
|
|
48
|
+
- [x] Merge-tree prediction before integration; conflicts return to the owner.
|
|
49
|
+
- [x] Explicit reviewer/tester results; absent protocol output cannot approve.
|
|
50
|
+
- [x] Stop and test timeout quiesce all tool descendants on Windows.
|
|
51
|
+
- [x] Overlap, conflict, stop, race and fan-out integration tests.
|
|
52
|
+
|
|
53
|
+
Local validation: build/typecheck passed. Nine parallel-flow checks and the
|
|
54
|
+
existing crew/HTTP suites passed (24 checks). Orchestra, native continuity and
|
|
55
|
+
Crew DOM acceptance passed (30 more checks). Native fan-out holds two distinct
|
|
56
|
+
workspace receipts and integrates both results. All ten CI jobs passed on P3 head 7e1b326; the corrected POSIX fixture retains detached-child coverage on Windows.
|
|
57
|
+
|
|
58
|
+
## P4 — several people
|
|
59
|
+
|
|
60
|
+
- [x] Crew/teammate metadata in presence and Fleet, without transcript sharing.
|
|
61
|
+
- [x] Cross-member requests with owner acceptance/decline.
|
|
62
|
+
- [x] Runner-hosted crews, policy limits and role permission ceilings.
|
|
63
|
+
- [x] Per-crew/member/goal budget accounting and visible budget holds.
|
|
64
|
+
- [x] Two-member overlapping work acceptance using the existing hub harness.
|
|
65
|
+
- [x] No hosted migration or landing/merge-policy changes without owner approval.
|
|
66
|
+
|
|
67
|
+
## P5 — usable from desktop and phone
|
|
68
|
+
|
|
69
|
+
- [x] Templates, parallel seat activity, native epochs, per-seat/goal/daily spend, and crew metadata on the shared board.
|
|
70
|
+
- [x] Phone Crew view: start/approve/watch, pause/resume/stop, race selection, refresh, budget and team/runner controls.
|
|
71
|
+
- [x] Crew deep links and notifications for budget/lease holds, race choices and incoming owner requests; docs.
|
|
72
|
+
- [x] Build/typecheck, HTTP, four Crew DOM flows and 76 phone model checks.
|
|
73
|
+
- [ ] Complete exact-head CI and physical native phone acceptance. Browser mobile layout inspected at 390x844; it does not establish native-device acceptance.
|
|
74
|
+
|
|
75
|
+
P5 local evidence: 96 existing board/shell/team regressions and 24 cost/crew/parallel checks passed. Four Crew
|
|
76
|
+
DOM flows cover planning/approval/apply, Stop/Resume, Race/pick/play/pause, and
|
|
77
|
+
parallel-seat/owner-request/runner-control UI. Both app and daemon compile.
|
|
78
|
+
Mechanical UI scan is clear; desktop and phone browser layouts inspected.
|
|
79
|
+
|
|
80
|
+
## Separate open issues
|
|
81
|
+
|
|
82
|
+
- #200: PR #224 aligns phone GitHub sign-in and validates PKCE callbacks.
|
|
83
|
+
Hosted redirect allow-list and physical phone acceptance still need
|
|
84
|
+
hosted/admin and device access. The issue stays open.
|
|
85
|
+
- #199: public read-only links require dedicated authorization, viewer,
|
|
86
|
+
expiry/revocation and hosted acceptance; paired encrypted relay is not public sharing.
|
|
87
|
+
- #70: trusted signing certificates and installed release-to-release acceptance.
|
|
88
|
+
- #215 stays open until every phase's acceptance criteria are met.
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# Brain-ready module boundaries
|
|
2
|
+
|
|
3
|
+
## Native continuity implementation
|
|
4
|
+
|
|
5
|
+
The prerequisite refactor below is complete. The opt-in native path now lives in
|
|
6
|
+
`src/core/continuity/` and is integrated through RuntimeTurns. See
|
|
7
|
+
[current architecture](../../ARCHITECTURE.md), [native continuity](../brain-continuity.md)
|
|
8
|
+
and [remaining gates](BRAIN-TODO.md). SQLite mutations stay on EventLog's existing
|
|
9
|
+
connection. Packet assembly and dispatch do not create another database writer;
|
|
10
|
+
client diagnostics remain downstream of persistence. Legacy behavior is available
|
|
11
|
+
when continuity is disabled.
|
|
12
|
+
|
|
13
|
+
## Objective
|
|
14
|
+
|
|
15
|
+
Prepare Loom for the Brain continuity rewrite without changing its framework,
|
|
16
|
+
client protocols, persisted history, or native harness behavior. This is the
|
|
17
|
+
prerequisite work in `docs/proposals/brain-session-continuity.md`, not the new
|
|
18
|
+
continuity implementation. Work stays on `dev/Harsha`.
|
|
19
|
+
|
|
20
|
+
## Work checklist
|
|
21
|
+
|
|
22
|
+
- [x] Read contributor instructions and trace current ownership.
|
|
23
|
+
- [x] Separate event contracts from SQLite/JSONL implementations; retain the
|
|
24
|
+
public EventLog entrypoint and test both backends.
|
|
25
|
+
- [x] Give conversation metadata its own storage module; preserve implicit Main,
|
|
26
|
+
chat bindings, deleted-chat history and existing state.json compatibility.
|
|
27
|
+
- [x] Isolate native adapter state behind per-instance storage; keep native IDs
|
|
28
|
+
separate from app conversation IDs and preserve existing resume data.
|
|
29
|
+
- [x] Give adapter subscriptions/startup/retirement explicit lifecycle ownership;
|
|
30
|
+
reject events from replaced instances and prevent duplicate startup.
|
|
31
|
+
- [x] Isolate Brain helper dependencies and handoff preparation from execution;
|
|
32
|
+
prevent background extraction from writing after shutdown.
|
|
33
|
+
- [x] Centralize client delivery and scope filtering; a failed client must not
|
|
34
|
+
break persistence or delivery to another client.
|
|
35
|
+
- [x] Add meaningful lifecycle/compatibility regressions, run focused tests,
|
|
36
|
+
typecheck, build and broader tests; record results and remaining limitations.
|
|
37
|
+
|
|
38
|
+
## Invariants
|
|
39
|
+
|
|
40
|
+
- Persist original events before notifying consumers. UI delivery is an observer.
|
|
41
|
+
- Brain depends on an event interface, not a storage implementation or UI.
|
|
42
|
+
- Native adapters translate harness behavior; they do not manage conversations.
|
|
43
|
+
- Runtime coordinates execution, permissions, baton and working-tree ownership.
|
|
44
|
+
- Shutdown/retirement invalidates subscriptions and late helper results.
|
|
45
|
+
- No paid verification, framework migration, new summarizer or vector model.
|
|
46
|
+
- Existing direct-model and bridge features remain compatible; removing them is
|
|
47
|
+
a separate product migration, not a prerequisite for these seams.
|
|
48
|
+
|
|
49
|
+
## Findings
|
|
50
|
+
|
|
51
|
+
- The previous extraction left chat storage and handoff preparation in runtime.
|
|
52
|
+
- Five harness adapters duplicate state.json reads/writes for native sessions.
|
|
53
|
+
- Replaced adapters retain callbacks and model replacement retains started state.
|
|
54
|
+
- Brain extraction and semantic startup can outlive the project log.
|
|
55
|
+
- WebSocket fanout repeats scope logic and allows one send failure to escape.
|
|
56
|
+
|
|
57
|
+
## Verification
|
|
58
|
+
|
|
59
|
+
- Initial focused run was blocked by sandbox loopback restrictions. Re-ran with
|
|
60
|
+
local socket access: 112 tests passed; subsequent expanded run: 129 passed.
|
|
61
|
+
- `npm run build`: passed, including browser assets and TypeScript compilation.
|
|
62
|
+
- Full `npm test`: backend passed 1,357 tests, 17 skipped; all 125 DOM tests
|
|
63
|
+
passed. Total: **1,482 passed, 17 skipped**, with no failed suites.
|
|
64
|
+
- Final `npm run typecheck`, `git diff --check` and whitespace checks on new
|
|
65
|
+
files: passed. No paid provider checks or Electron GUI runs were performed.
|
|
66
|
+
- Temporary logs: `/tmp/loom-boundary-focused.log`,
|
|
67
|
+
`/tmp/loom-boundary-build.log`, `/tmp/loom-boundary-full.log`.
|
|
68
|
+
|
|
69
|
+
Completed on 2026-09-27. The prerequisite checklist above is complete; the next
|
|
70
|
+
work is the sequential Brain continuity flow described in the proposal.
|
|
71
|
+
|
|
72
|
+
## Resulting ownership
|
|
73
|
+
|
|
74
|
+
| Responsibility | Owner | Callers depend on |
|
|
75
|
+
| --- | --- | --- |
|
|
76
|
+
| Canonical event persistence | `core/eventlog.ts`, `core/events/*` | EventJournal/EventReader; existing EventLog facade remains public |
|
|
77
|
+
| App conversation metadata | `core/conversations.ts` | Chat operations; runtime validates bindings |
|
|
78
|
+
| Native resume/process metadata | `core/agent-state.ts` | Per-instance read/patch via AdapterBase |
|
|
79
|
+
| Configured live adapter instances | `daemon/runtime/agents.ts` | Install/start/retire/close; read-only roster |
|
|
80
|
+
| Context selection and preparation | `daemon/runtime/briefings.ts` | Prepared memory/briefing and injected helper implementations |
|
|
81
|
+
| Execution and workspace policy | ProjectRuntime and RuntimeTurns | Existing runtime commands |
|
|
82
|
+
| Client frame delivery | `daemon/delivery.ts` | Project/log/admin audiences and transport connections |
|
|
83
|
+
|
|
84
|
+
## Correctness fixes included
|
|
85
|
+
|
|
86
|
+
- A failed event observer cannot make a durable append appear to fail or stop
|
|
87
|
+
later observers. Caller/subscriber mutations cannot alter canonical history;
|
|
88
|
+
SQLite and JSONL both return detached data. Closing is idempotent.
|
|
89
|
+
- Retired instances are unsubscribed immediately. A replacement waits for the
|
|
90
|
+
predecessor's startup/stop and has independent startup state. Concurrent starts
|
|
91
|
+
share one attempt; failed attempts can retry.
|
|
92
|
+
- Turn preparation counts as active work for replacement and hot reload. A
|
|
93
|
+
startup/send failure releases the reservation and records its error in the
|
|
94
|
+
originating chat. Dispatch refuses an instance retired during asynchronous work.
|
|
95
|
+
- Brain extraction discards cancelled results before applying memory operations.
|
|
96
|
+
Semantic load completion cannot re-enable a disabled or closed channel.
|
|
97
|
+
- OpenCode's asynchronous orphan check updates only its own latest state slot;
|
|
98
|
+
it no longer writes an old snapshot over intervening chat/baton changes.
|
|
99
|
+
- Socket send failures are isolated for project, terminal, log and team frames.
|
|
100
|
+
|
|
101
|
+
## Deliberately retained / next phase
|
|
102
|
+
|
|
103
|
+
- State.json remains the metadata format; SQLite/JSONL event history is unchanged.
|
|
104
|
+
A migration to the proposed Brain SQLite schema needs its own migration tests.
|
|
105
|
+
- Native sessions are still scoped as before (configured instance + working
|
|
106
|
+
directory). Mapping multiple native sessions to one app chat, provider resume
|
|
107
|
+
compatibility, handoff receipts and coverage are next-phase work.
|
|
108
|
+
- Context selection still uses the legacy windows/extraction policy. These
|
|
109
|
+
changes establish ownership, not a promise that switching preserves every detail.
|
|
110
|
+
- Helper cancellation discards results; it does not kill the existing helper
|
|
111
|
+
process. Its configured timeout still applies. Already running native work
|
|
112
|
+
depends on each adapter's stop implementation; no universal hard-kill policy
|
|
113
|
+
has been introduced.
|
|
114
|
+
- No Electron migration, UI batching/virtualization change, model download,
|
|
115
|
+
benchmark, paid agent verification, or removal of existing integrations.
|
|
116
|
+
- The T3 Code checkout is unchanged. No source was copied from it.
|
|
117
|
+
- The boundary work is now committed at
|
|
118
|
+
`584a3b6a86bfa9af2a0a8ecbeac57e6aa4578e7a`. The next Brain plan is in
|
|
119
|
+
[brain-continuity-implementation.md](../proposals/brain-continuity-implementation.md);
|
|
120
|
+
implementation awaits user review. Planning work does not publish changes.
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
# Brain cleanup and plan audit — 2026-09-28
|
|
2
|
+
|
|
3
|
+
Baseline: `584a3b6a86bfa9af2a0a8ecbeac57e6aa4578e7a` plus the uncommitted
|
|
4
|
+
implementation. Scope: native Brain, event storage, adapters, foreground turns,
|
|
5
|
+
queues, runtime entrypoints, HTTP and browser controls. No commit/push or paid
|
|
6
|
+
provider call was performed. Applied `code-review` (independent standards/spec
|
|
7
|
+
reviews) and `codebase-design` (keep ownership behind the existing interfaces).
|
|
8
|
+
|
|
9
|
+
## Standards review
|
|
10
|
+
|
|
11
|
+
Five initial correctness findings were fixed: cancellation during submission,
|
|
12
|
+
queue whitespace/idempotency, incomplete mode-change guards, late orchestra
|
|
13
|
+
rejection, and adapter preparation outside cleanup ownership. Follow-up fixes
|
|
14
|
+
cover inherited-pipe cleanup at parent exit, uncertain process-group errors and
|
|
15
|
+
reassembly overflow. Each has a focused regression or is exercised by the native
|
|
16
|
+
lifecycle fixtures. Heuristic duplication between legacy and native dispatch remains
|
|
17
|
+
an intentional compatibility seam; neither uses the other's briefing/extractor.
|
|
18
|
+
|
|
19
|
+
Additional cleanup removes four unused runtime forwarding methods, native legacy
|
|
20
|
+
agent-decision mining/text accumulation, duplicated semantic startup on mode changes,
|
|
21
|
+
and legacy extractor/embedding/projection controls while native mode is enabled.
|
|
22
|
+
Legacy SDK/team-memory interfaces remain supported when native continuity is off;
|
|
23
|
+
deleting those before protocol/route/OpenCode parity would break existing users.
|
|
24
|
+
|
|
25
|
+
## Spec review
|
|
26
|
+
|
|
27
|
+
Six initial gaps were corrected or bounded explicitly: current-request budget,
|
|
28
|
+
checkpoint revision coverage, new user evidence invalidating unsent snapshots,
|
|
29
|
+
atomic/addressable reconciliation, optional delta holes, and inherited descendant
|
|
30
|
+
containment. Follow-up review caught mixed packet/receipt links, repeat reconciliation,
|
|
31
|
+
failed Git observation treated as stable state, and evidence-count bounds; these were
|
|
32
|
+
fixed. Review did not certify the remaining release gates below.
|
|
33
|
+
|
|
34
|
+
Other fixes: distinguish agent-generated legacy decisions from user authority;
|
|
35
|
+
prevent tentative/helper supersession; fence uncertain writers against rewind/handoff;
|
|
36
|
+
wait for app-owned diff/commit writes before the next native turn; publish artifacts
|
|
37
|
+
without overwriting existing hashes, read without following final symlinks, verify
|
|
38
|
+
reference size/hash/path, and remove failed temporary artifacts. Native JSONL records
|
|
39
|
+
are bounded before readline can accumulate unlimited tool output. Configuration changes validate before activation and roll back ownership on failed
|
|
40
|
+
atomic config replacement; unresolved native leases also fence legacy journal writes.
|
|
41
|
+
FTS has update/delete
|
|
42
|
+
maintenance plus explicit transactional rebuild. Packet validation uses sets to avoid
|
|
43
|
+
quadratic mandatory-coverage scans; event attribution avoids loading a whole packet
|
|
44
|
+
for each native event.
|
|
45
|
+
|
|
46
|
+
Native queue action edits and autonomous routes now reject before execution until
|
|
47
|
+
durable revisions and root-task continuity are implemented. Queued target/model/text
|
|
48
|
+
remain frozen; timing changes/reordering are supported. Removing an unsent queue item
|
|
49
|
+
prevents dispatch but retains its original user evidence. This is not data erasure.
|
|
50
|
+
|
|
51
|
+
## Edge-case traceability
|
|
52
|
+
|
|
53
|
+
**Covered** means an implementation plus focused local fixtures, not live-provider or
|
|
54
|
+
all-platform certification. **Partial** records a working safeguard plus missing
|
|
55
|
+
requirements. **Gated** means explicitly unsupported/disabled or unimplemented.
|
|
56
|
+
Tests are in `test/continuity.test.ts`, `test/continuity-storage.test.ts`,
|
|
57
|
+
`test/continuity-http.test.ts`, native adapter and existing runtime/browser suites.
|
|
58
|
+
The original research matrix remains authoritative; this table reports implementation.
|
|
59
|
+
|
|
60
|
+
| Case | Status | Evidence / remaining requirement |
|
|
61
|
+
| --- | --- | --- |
|
|
62
|
+
| E01 | Covered | Buried user source fixture and 10,001-event benchmark; mandatory intent bypasses ranking. |
|
|
63
|
+
| E02 | Covered | Exact tentative discussion, explicit item status; no automatic acceptance. |
|
|
64
|
+
| E03 | Covered | Accepted user supersession, scoped revision checks; helper/tentative supersession rejected. |
|
|
65
|
+
| E04 | Partial | Chat/source scope and originals preserved; explicit task-level scopes not implemented. |
|
|
66
|
+
| E05 | Partial | Conflicting original statements remain; conflict classification/clarification is not automated. |
|
|
67
|
+
| E06 | Partial | Topic/deferred/rejected statuses retained; no native comprehension evaluation. |
|
|
68
|
+
| E07 | Gated | Message deletion/revision dependencies absent; native queue action edits explicitly rejected. |
|
|
69
|
+
| E08 | Covered | New governing user evidence invalidates unsent packets; queued/unsent requests are neither history nor invalidation (validation follow-up fix). |
|
|
70
|
+
| E09 | Covered | Same instance, distinct chat bindings; explicit native IDs. |
|
|
71
|
+
| E10 | Covered | Provider-specific bindings; Claude → Codex → Claude fixture. |
|
|
72
|
+
| E11 | Partial | Model/options/protocol/workspace fingerprint; external auth/entitlement discovery unverified. |
|
|
73
|
+
| E12 | Partial | Missing native acknowledgement stays unknown; manual reconciliation resets epoch. No automatic expiry recovery. |
|
|
74
|
+
| E13 | Covered | Both harnesses report compaction (Claude `compact_boundary`, Codex app-server `contextCompaction`); the binding is marked compacted and the next packet rebuilds state into the resumed session. |
|
|
75
|
+
| E14 | Partial | Retention unknown; protected user evidence repeated. Native reconstruction triggers pending. |
|
|
76
|
+
| E15 | Partial | Ordinary turn-input fixture avoids append-system prompt; live continuation quality unverified. |
|
|
77
|
+
| E16 | Partial | Canonical checkout, HEAD/dirty content and instruction fingerprints; non-Git file applicability and moved-store migration pending. |
|
|
78
|
+
| E17 | Covered | Picker changes only local selection; dispatch freezes target later. |
|
|
79
|
+
| E18 | Covered | Queued captured target/model stays unchanged after picker changes. |
|
|
80
|
+
| E19 | Covered | Foreground reservation, queueing and process-group interruption. |
|
|
81
|
+
| E20 | Partial | Inherited tool group and output-pipe fixture; escaped/detached descendants and Windows containment remain gates. |
|
|
82
|
+
| E21 | Partial | Failed lifecycle stop blocks successors; uncertain termination retains lease. Real approval dialogs unverified. |
|
|
83
|
+
| E22 | Partial | Run/binding/epoch correlation and original chat lookup; broader reordered/late-provider fixtures pending. |
|
|
84
|
+
| E23 | Covered | Request idempotency, one foreground writer across pinned chats/queue; unsent retries re-run instead of silently no-oping. |
|
|
85
|
+
| E24 | Partial | Orchestra/subagents/bridges/routes gated before mutation; full worktree/team parity pending. |
|
|
86
|
+
| E25 | Covered | Immutable prepared packet/receipt; revalidation before any native call. |
|
|
87
|
+
| E26 | Covered | Restart submitting intent becomes unknown with lease retained. |
|
|
88
|
+
| E27 | Covered | No automatic replay; explicit reconciliation. Native message discovery unavailable. |
|
|
89
|
+
| E28 | Covered | Spawn/init separate from acceptance; proven no-launch rejection releases safely. |
|
|
90
|
+
| E29 | Covered | Acceptance and execution separate; quiescence uncertainty retains lease. |
|
|
91
|
+
| E30 | Partial | Stable client request IDs; stale run correlation. No universal native event-ID deduplication. |
|
|
92
|
+
| E31 | Partial | Active/unknown lease retained across restart; genuine orphan OS fault matrix pending. |
|
|
93
|
+
| E32 | Partial | Live owner/host/PID fence and conservative takeover; no heartbeat/remote-filesystem certification. |
|
|
94
|
+
| E33 | Covered | Strict bounded Zod contracts, unknown versions, extra fields, nesting and boolean fixtures. |
|
|
95
|
+
| E34 | Covered | Project/chat/hash and UTF-8 source checks; helpers disabled. |
|
|
96
|
+
| E35 | Partial | Originals retained; removing checkpoint sources restores mandatory evidence; user must review summary fidelity. |
|
|
97
|
+
| E36 | Covered | Exact whitespace/Unicode capture, byte-boundary checks, quoted rendering; heuristic labelled. |
|
|
98
|
+
| E37 | Partial | Codex final shell exit and full large-output artifact; Claude final tool-result normalization pending. |
|
|
99
|
+
| E38 | Partial | Missing completion/failed streams are not success; complete partial-message/tool lifecycle schema pending. |
|
|
100
|
+
| E39 | Gated | Current snapshot checked; per-verification historical workspace applicability not implemented. |
|
|
101
|
+
| E40 | Covered | Immutable packet/receipt links, source/outcome/coverage checks, epoch/state/workspace revalidation. |
|
|
102
|
+
| E41 | Covered | Current request included in heuristic budget; durable overflow/reassembly and explicit resume. Native capacity unknown. |
|
|
103
|
+
| E42 | Covered | Deltas cover every observation since the basis packet plus prior omissions; user sources a session lacks are resent exact or referenced. |
|
|
104
|
+
| E43 | Partial | FTS backfill/update/delete/rebuild and lexical fallback; actual index/DB corruption fault matrix pending. |
|
|
105
|
+
| E44 | Partial | Escaped bounded FTS, scoped reads; aliases/entity expansion and broad paginated search pending. |
|
|
106
|
+
| E45 | Covered | Mandatory text inline, verified local artifact reference, attachments/capabilities fail explicitly. |
|
|
107
|
+
| E46 | Gated | Helpers disabled; no automatic expensive substitution. |
|
|
108
|
+
| E47 | Gated | No helper jobs; helper result invalidation must precede enablement. |
|
|
109
|
+
| E48 | Gated | No helper scheduling; account/global concurrency gate remains. |
|
|
110
|
+
| E49 | Partial | Transaction/foreign-key/busy and reconciliation rollback fixtures; real disk-full/OS permission matrix pending. |
|
|
111
|
+
| E50 | Partial | Busy timeout and bounded indexed work; long-reader/WAL/backpressure corpora pending. |
|
|
112
|
+
| E51 | Partial | SQLite required, unknown protocol/platform explicit; network filesystem detection/certification pending. |
|
|
113
|
+
| E52 | Partial | Flush/exclusive artifact publication before reference; temporary cleanup; orphan GC/grace period pending. |
|
|
114
|
+
| E53 | Partial | Hash/path/size/no-follow checks and corruption fixtures; media/binary decoding unsupported. |
|
|
115
|
+
| E54 | Partial | Consistent activation backup and transactional import; post-cutover downgrade/export pending. |
|
|
116
|
+
| E55 | Covered | Torn records/ID collisions/distinct histories rejected; originals/backups retained; idempotent import. |
|
|
117
|
+
| E56 | Covered | Legacy native cursor never adopted into a chat binding. |
|
|
118
|
+
| E57 | Partial | Chat/project source scope before search/read/artifact export; team/private parity remains gated. |
|
|
119
|
+
| E58 | Partial | Origin-labelled JSON-quoted data; no application replay. Model resistance to adversarial evidence unmeasured. |
|
|
120
|
+
| E59 | Covered | Instruction fingerprint, no user-file overwrite, legacy imported memory not injected in native mode. |
|
|
121
|
+
| E60 | Gated | Complete deletion/derived artifact/backup/native-copy policy absent; hiding is not deletion. |
|
|
122
|
+
| E61 | Partial | No fallback execution; pending capture preserved. Live offline/auth/quota/account matrix pending. |
|
|
123
|
+
| E62 | Covered | Unsupported attachment representations explicitly rejected; no visual-understanding claim. |
|
|
124
|
+
| E63 | Partial | Canonical stable request IDs and bounded packet summaries; request-ID persistence across browser reload pending. |
|
|
125
|
+
| E64 | Partial | Bounded contract diagnostics and project-authenticated routes; sensitive native output redaction/export policy pending. |
|
|
126
|
+
|
|
127
|
+
## Verification receipt
|
|
128
|
+
|
|
129
|
+
No live harness/account, Windows Job Object, escaped-child or network-filesystem
|
|
130
|
+
certification is implied by local fixtures. Native mode remains opt-in.
|
|
131
|
+
|
|
132
|
+
Verified after cleanup:
|
|
133
|
+
|
|
134
|
+
- `npm run build` and `npm run typecheck`: passed.
|
|
135
|
+
- Final focused core/native group: 87 passed across five suites.
|
|
136
|
+
- `npm test`: 1,408 non-DOM tests and all 125 browser tests passed; 17 existing skips.
|
|
137
|
+
The full suite ran outside the filesystem/network sandbox because localhost
|
|
138
|
+
listeners are required. No paid provider calls were made.
|
|
139
|
+
- `git diff --check` and documentation links: passed; all 64 unique matrix IDs have audit rows.
|
|
140
|
+
- Packaging dry run with already-built output: new compiled modules, audit and
|
|
141
|
+
benchmark artifacts included. No package published.
|
|
142
|
+
- [Audit benchmark](brain-benchmark-audit-2026-09-28.json): same M4/Node24.3 corpus,
|
|
143
|
+
all 20 buried user points retained; preparation p95 13.85 ms, retrieval p95
|
|
144
|
+
0.224 ms, event-loop p95 18.12 ms; 3,047 heuristic turn-input tokens including
|
|
145
|
+
the current request. Native token usage and understanding remain unmeasured.
|
|
146
|
+
|
|
147
|
+
Standards: eight initial/follow-up correctness findings addressed; the original
|
|
148
|
+
worst issue was Stop racing with launch. Spec: ten initial/follow-up findings
|
|
149
|
+
addressed in the supported path; full descendant/platform containment remains
|
|
150
|
+
partial. Neither verdict is release certification for every matrix row.
|
|
151
|
+
|
|
152
|
+
## Validation follow-up — 2026-09-28
|
|
153
|
+
|
|
154
|
+
A later review reproduced four defects (delta coverage window, unsent requests
|
|
155
|
+
rendered as history, capture before harness preflight with a silent retry no-op,
|
|
156
|
+
and superseded checkpoints hiding originals). All are fixed with regressions; see
|
|
157
|
+
[BRAIN-TODO](BRAIN-TODO.md#validation-follow-up--2026-09-28). The version allow-list was
|
|
158
|
+
replaced by a 20 s reachability monitor, and assembly now sends a resumed native
|
|
159
|
+
session only what it lacks. Full suite after the fixes: 1,419 non-DOM and 125
|
|
160
|
+
browser tests passed; 17 existing skips.
|
|
161
|
+
|
|
162
|
+
## Transport change (app-server / Agent SDK)
|
|
163
|
+
|
|
164
|
+
Codex moved from `codex exec --json` to `codex app-server` JSON-RPC and Claude Code
|
|
165
|
+
from `claude -p` to the Claude Agent SDK, following t3code. Brain-relevant effects:
|
|
166
|
+
|
|
167
|
+
- Acceptance evidence is explicit on both: Codex's `turn/start` response or
|
|
168
|
+
`turn/started`; Claude's `requesting` status or first output.
|
|
169
|
+
- A lost native session is reported before any turn starts (`NativeSessionMissing`);
|
|
170
|
+
`settled()` fails the receipt and moves the binding to a new epoch, so the next
|
|
171
|
+
packet reconstructs instead of sending a delta to an empty session.
|
|
172
|
+
- Prompts travel on stdin, which removes the Linux argv limit.
|
|
173
|
+
- A stream failure (an oversized record) now stops RPC parsing before anything else
|
|
174
|
+
is imported, and the failure's own message is kept.
|
|
175
|
+
- Codex `run_complete` no longer adds cached input to input (cached is a subset).
|
|
176
|
+
|