@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,129 @@
|
|
|
1
|
+
# Modularization notes
|
|
2
|
+
|
|
3
|
+
## Constraints
|
|
4
|
+
- No framework migration in this change; Next.js is a possible later choice.
|
|
5
|
+
- Preserve URLs, event payloads, persisted config/state, and the public SDK.
|
|
6
|
+
- Keep changes on `dev/Harsha`; no publishing or deployment is requested.
|
|
7
|
+
- Ordinary tests use fake agents and isolated LOOM_HOME. Do not run paid
|
|
8
|
+
`verify-*` scripts as regression tests.
|
|
9
|
+
|
|
10
|
+
## Baseline observations
|
|
11
|
+
- `app-page.ts`: 15,434 lines, HTML/CSS/browser JS inside a TS template literal.
|
|
12
|
+
- `server.ts`: 5,148 lines, route registration plus daemon lifecycle.
|
|
13
|
+
- `runtime.ts`: 3,815 lines, project coordination plus multiple state owners.
|
|
14
|
+
- Root dependencies were absent; Node 24.3.0 and npm 11.14.1 are installed.
|
|
15
|
+
- `npm test` omits app-page-console-dom, app-queue-dom, app-servers-dom and
|
|
16
|
+
app-update-dom after excluding them from the parallel pass. Include all DOM
|
|
17
|
+
suites in final verification.
|
|
18
|
+
- Historical design documents are not authoritative for current behavior.
|
|
19
|
+
|
|
20
|
+
## Progress and decisions
|
|
21
|
+
- Browser: ordinary ES modules in `src/web`, feature factories for per-project
|
|
22
|
+
closures, ordered CSS layers, and a document shell. esbuild packages the JS;
|
|
23
|
+
assets remain inline in the served page. No framework decision is required.
|
|
24
|
+
- API: ordered feature registrars in `src/daemon/routes`, each receiving a typed
|
|
25
|
+
subset of daemon capabilities. Middleware and WebSocket lifecycle stay in
|
|
26
|
+
`server.ts`. Shared system helpers preserve their old exports.
|
|
27
|
+
- Runtime: accounting, briefings, queue and turns own their state under
|
|
28
|
+
`src/daemon/runtime`. ProjectRuntime remains the public coordinator.
|
|
29
|
+
- Build and desktop staging include generated web assets; daemon fingerprints
|
|
30
|
+
include CSS and HTML so desktop detects style-only changes.
|
|
31
|
+
- Explicit dependency analysis exposed pre-existing out-of-scope browser calls:
|
|
32
|
+
preview attachments, notification replies, and explorer refresh. These now
|
|
33
|
+
use explicit mounted-project callbacks. Late screenshots are discarded if
|
|
34
|
+
their composer has been replaced by navigation.
|
|
35
|
+
|
|
36
|
+
## Verification history
|
|
37
|
+
- Initial build passed. The initial full test run in the sandbox hit EPERM
|
|
38
|
+
opening local sockets: 57 failed files, 69 passed, 1 skipped. This is not a
|
|
39
|
+
usable green baseline. Subsequent integration runs use allowed local sockets.
|
|
40
|
+
- Browser extraction: 88 DOM checks passed; 45 static page checks passed.
|
|
41
|
+
- Route extraction: 8 suites / 110 tests passed (auth, daemon, scoped clients,
|
|
42
|
+
workspace, relay, tasks, skills MCP, providers).
|
|
43
|
+
- Runtime extraction: 124 tests passed, two test fixtures referenced a private
|
|
44
|
+
map that moved. Fixtures now access its owning turn module; the full rerun passes.
|
|
45
|
+
- Full suite found a real source-mode regression: type-only re-exports worked
|
|
46
|
+
under tsc/Vitest but failed in the CLI's tsx process. Marked those exports
|
|
47
|
+
`type`; all 126 non-DOM suites now pass (1,342 tests, 17 skipped).
|
|
48
|
+
- Browser unresolved-name analysis: zero unresolved names after extraction.
|
|
49
|
+
- npm pack dry-run includes all four `dist/web` artifacts. Docker runner now
|
|
50
|
+
copies the browser build script; desktop staging verifies the new assets.
|
|
51
|
+
- Build/typecheck/diff checks pass. Default DOM suites pass; pipe validation
|
|
52
|
+
exposed a timing-sensitive target-selector test in the previously omitted
|
|
53
|
+
queue suite. It now pauses the queue during selection instead of depending
|
|
54
|
+
on a two-second agent sleep; all six queue DOM tests pass in both modes.
|
|
55
|
+
|
|
56
|
+
## Current module map
|
|
57
|
+
|
|
58
|
+
| Previous hotspot | Current coordinator | Extracted responsibilities |
|
|
59
|
+
| --- | --- | --- |
|
|
60
|
+
| `app-page.ts` (15,434 lines) | 30 lines | `src/web/`: entry, feature modules, project factories, CSS layers and shell |
|
|
61
|
+
| `server.ts` (5,148 lines) | 863 lines | `routes/`: typed feature registrars; `system.ts`: shared process helpers |
|
|
62
|
+
| `runtime.ts` (3,815 lines) | 2,633 lines | `runtime/`: accounting, briefings, queue and turns; shared contracts in `runtime-support.ts` |
|
|
63
|
+
|
|
64
|
+
All 217 literal HTTP registrations retain their original method/path order.
|
|
65
|
+
The emitted CSS and non-script HTML match the original served page byte for byte.
|
|
66
|
+
Feature factory exports were pruned to callbacks the coordinator actually uses;
|
|
67
|
+
state setters are exposed only where the feature writes that binding.
|
|
68
|
+
|
|
69
|
+
## Validation scope and follow-up boundaries
|
|
70
|
+
|
|
71
|
+
- The default backend passed 1,342 non-DOM tests and all 125 DOM tests (the new
|
|
72
|
+
screenshot navigation test was corrected and passed in a focused rerun).
|
|
73
|
+
- The source-mode CLI regression is fixed; compiled and source entrypoints are
|
|
74
|
+
both covered. Source-mode BUILD_REV retains the original `dev` marker.
|
|
75
|
+
- Phone protocol copies match; all 41 phone pure-logic tests pass.
|
|
76
|
+
- Docker image, Electron GUI and native phone builds were not run. Runner
|
|
77
|
+
build inputs and packaged asset paths were checked; desktop behavior has
|
|
78
|
+
automated coverage. Phone dependencies are not installed in this checkout.
|
|
79
|
+
- No paid agent verification, deployment or framework migration.
|
|
80
|
+
- This is an extraction with stable contracts. Browser shared session state and
|
|
81
|
+
per-project view coordination remain explicit; runtime agent event handling,
|
|
82
|
+
handoffs and orchestra lifecycle still live in ProjectRuntime. Future work
|
|
83
|
+
can change these boundaries incrementally once the framework is chosen.
|
|
84
|
+
- Browser edits require rebuilding assets; there is no watch pipeline yet.
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
## Final verification
|
|
88
|
+
|
|
89
|
+
Completed on Node 24.3.0 / macOS. Full runs plus focused reruns after corrections:
|
|
90
|
+
|
|
91
|
+
| Configuration | Passing tests | Skipped tests |
|
|
92
|
+
| --- | --- | --- |
|
|
93
|
+
| Default: non-DOM + DOM | 1,342 + 125 = 1,467 | 17 |
|
|
94
|
+
| Forced pipe: non-DOM + DOM | 1,339 + 125 = 1,464 | 20 |
|
|
95
|
+
| Phone pure logic | 41 | 0 |
|
|
96
|
+
|
|
97
|
+
The full default attempt needed a focused rerun of the new screenshot test
|
|
98
|
+
fixture; the full pipe attempt needed a focused rerun of the queue target test
|
|
99
|
+
fixture. Both corrected suites pass. The final queue test also passes under
|
|
100
|
+
the default backend. No unresolved test failures remain; a final monolithic
|
|
101
|
+
`npm test` was not repeated after those focused reruns.
|
|
102
|
+
|
|
103
|
+
Additional checks passed: `npm run build`, `npm run typecheck`, phone relay-copy
|
|
104
|
+
consistency, npm package dry-run asset inclusion, browser unresolved-name
|
|
105
|
+
analysis, exact CSS/non-script HTML comparison, endpoint registration order,
|
|
106
|
+
and whitespace checks for both tracked and new files.
|
|
107
|
+
|
|
108
|
+
Local test logs (temporary, not committed): `/tmp/loom-final-tests.log`,
|
|
109
|
+
`/tmp/loom-pipe-tests.log`, `/tmp/loom-screenshot-tests.log`,
|
|
110
|
+
`/tmp/loom-default-queue-tests.log`, `/tmp/loom-pipe-queue-tests.log`, and
|
|
111
|
+
`/tmp/loom-phone-tests.log`.
|
|
112
|
+
|
|
113
|
+
Branch is `dev/Harsha`, based on main at `838f994`. Publication target is
|
|
114
|
+
`igharsha7/loom` (`origin`); the original repository is retained as `upstream`.
|
|
115
|
+
TODO.md has no remaining work within the requested three steps.
|
|
116
|
+
|
|
117
|
+
## Brain prerequisite follow-up
|
|
118
|
+
|
|
119
|
+
The next phase separates event storage, conversation metadata, native adapter
|
|
120
|
+
state/lifecycle, Brain preparation and client delivery. See
|
|
121
|
+
[BOUNDARIES.md](BOUNDARIES.md) for ownership, fixes and remaining Brain work.
|
|
122
|
+
Verification: build/typecheck passed; full test suite passed 1,482 tests with
|
|
123
|
+
17 skipped, including all 125 browser DOM tests. It is now committed at
|
|
124
|
+
`584a3b6a86bfa9af2a0a8ecbeac57e6aa4578e7a`. Brain continuity implementation remains
|
|
125
|
+
pending review of [the plan](../proposals/brain-continuity-implementation.md).
|
|
126
|
+
|
|
127
|
+
Brain cleanup and final validation are recorded in [BRAIN-AUDIT](BRAIN-AUDIT.md)
|
|
128
|
+
and [BRAIN-NOTES](BRAIN-NOTES.md). Native execution no longer uses legacy decision
|
|
129
|
+
mining/injection/extraction; supported compatibility workflows remain available.
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
# t3code port — notes
|
|
2
|
+
|
|
3
|
+
Working notes for the port: what t3code does, where, and how Loom maps it. Paths
|
|
4
|
+
under `t3code/` refer to the local clone at `/Volumes/Programming Vault/t3code`
|
|
5
|
+
(MIT, © T3 Tools Inc.). Ported files carry an attribution header.
|
|
6
|
+
|
|
7
|
+
## Vocabulary mapping
|
|
8
|
+
|
|
9
|
+
| t3code | Loom | Note |
|
|
10
|
+
| --- | --- | --- |
|
|
11
|
+
| thread | chat (conversation) | Loom's `MAIN_CHAT` and named chats. |
|
|
12
|
+
| provider instance | agent config entry (`agents[].id`) | Kind plus options (bin, model, permissions). |
|
|
13
|
+
| driver kind | agent kind (`codex`, `claude-code`) | |
|
|
14
|
+
| session | one live provider session per **(chat, agent)** | t3code keys by thread alone because a thread never changes driver. Loom switches provider within a chat, so a chat can hold a parked session per agent. |
|
|
15
|
+
| runtime mode | permission mode | full-access ↔ bypass, auto-accept-edits ↔ auto, approval-required ↔ ask. |
|
|
16
|
+
| resume cursor | native session id (Codex thread id, Claude session id) | Persisted in the session directory. |
|
|
17
|
+
|
|
18
|
+
## Sources read
|
|
19
|
+
|
|
20
|
+
- Adapter contract: `t3code/apps/server/src/provider/Services/ProviderAdapter.ts`
|
|
21
|
+
(capabilities: `sessionModelSwitch`, `supportsConversationRollback`,
|
|
22
|
+
`promptlessTurnContinuation`; operations: start/send/interrupt/respond/
|
|
23
|
+
respondToUserInput/stop/list/has/readThread/rollbackThread/compaction/stopAll;
|
|
24
|
+
one `streamEvents` stream).
|
|
25
|
+
- Runtime events: `t3code/packages/contracts/src/providerRuntime.ts` — envelope
|
|
26
|
+
`{eventId, provider, providerInstanceId, threadId, createdAt, turnId?, itemId?,
|
|
27
|
+
requestId?, providerRefs?, raw?, type, payload}`; ~50 types.
|
|
28
|
+
- Session inputs: `t3code/packages/contracts/src/provider.ts`
|
|
29
|
+
(`ProviderSession`, `ProviderSessionStartInput`, `ProviderSendTurnInput`,
|
|
30
|
+
`ProviderTurnStartResult`).
|
|
31
|
+
- Service: `t3code/apps/server/src/provider/Layers/ProviderService.ts` — routes
|
|
32
|
+
by the persisted binding; recovers a missing live session by adopting an
|
|
33
|
+
existing one or restarting from the resume cursor; refuses a cross-driver
|
|
34
|
+
switch (`ProviderCommandReactor.ts:690`).
|
|
35
|
+
- Directory: `t3code/apps/server/src/provider/Services/ProviderSessionDirectory.ts`
|
|
36
|
+
— binding `{threadId, provider, providerInstanceId, status, resumeCursor,
|
|
37
|
+
runtimePayload, runtimeMode, lastSeenAt}`; stopped rows kept for their cursors.
|
|
38
|
+
- Reaper: `t3code/apps/server/src/provider/Layers/ProviderSessionReaper.ts` — 30 min
|
|
39
|
+
inactivity, 5 min sweep; skips active turns and background work.
|
|
40
|
+
|
|
41
|
+
## Decisions
|
|
42
|
+
|
|
43
|
+
- **2026-09-28.** Port, not fork; plain TypeScript, no Effect. Warm sessions.
|
|
44
|
+
Codex and Claude Code only for now.
|
|
45
|
+
- **2026-09-28, Phase 1.** Build the foundation (contract, service, directory,
|
|
46
|
+
reaper, ingestion) against a fake adapter and do not wire it into dispatch yet.
|
|
47
|
+
Phase 2's warm adapters change the turn lifecycle, so a temporary bridge around
|
|
48
|
+
the per-turn adapters would be thrown away.
|
|
49
|
+
- **2026-09-28, Phase 1.** Session directory is a JSON file under
|
|
50
|
+
`.loom/providers/`, not a SQLite table: the event log has a JSONL fallback, and
|
|
51
|
+
the directory must work with both.
|
|
52
|
+
- **2026-09-28.** Loom keeps other agents' sessions in a chat alive (parked) when
|
|
53
|
+
the chat switches agent, instead of t3code's `stopStaleSessionsForThread`. The
|
|
54
|
+
reaper bounds how long they stay warm.
|
|
55
|
+
- **2026-09-28, Phase 1.** Ingestion emits a tool's `tool_call` when the item
|
|
56
|
+
**completes** (with its outcome), not when it starts. The old Claude adapter
|
|
57
|
+
reported tools as they started. Phase 3 adds item start/progress to the log and
|
|
58
|
+
UI; until then a long tool shows when it finishes.
|
|
59
|
+
- **2026-09-28, Phase 1.** A turn the provider reports as `failed` becomes an
|
|
60
|
+
`error` with no `run_complete`, as t3code treats it. The old Claude adapter still
|
|
61
|
+
emitted `run_complete` after an error result outside Brain; Phase 2's adapter
|
|
62
|
+
follows the new rule.
|
|
63
|
+
- **2026-09-28, Phase 1.** Approvals keep Loom's existing cards: `ApprovalBridge`
|
|
64
|
+
turns `request.opened` into a card through the daemon broker and answers with
|
|
65
|
+
`respondToRequest`. t3code's native approval options (accept for session,
|
|
66
|
+
accept always) arrive with Phase 3.
|
|
67
|
+
- **2026-09-28, Phase 1.** `ensureSession` registers a start synchronously before
|
|
68
|
+
its first await, so concurrent callers always share it. A turn can finish before
|
|
69
|
+
`sendTurn` returns; the service remembers each session's last finished turn so
|
|
70
|
+
it never re-marks it active.
|
|
71
|
+
|
|
72
|
+
## Sources read (Phase 1, continued)
|
|
73
|
+
|
|
74
|
+
- Ingestion: `t3code/apps/server/src/orchestration/Layers/ProviderRuntimeIngestion.ts`
|
|
75
|
+
— assistant and reasoning text are the streamed deltas; the completed item's
|
|
76
|
+
`detail` is a whole-block snapshot used only when nothing streamed (lines
|
|
77
|
+
~1960–2260).
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
## Sources read (Phase 2)
|
|
81
|
+
|
|
82
|
+
- Codex runtime: `t3code/apps/server/src/provider/Layers/CodexSessionRuntime.ts` —
|
|
83
|
+
`openCodexThread` (resume with `excludeTurns`, recoverable resume errors),
|
|
84
|
+
`buildTurnStartParams`, server-request handlers (approvals park on a deferred,
|
|
85
|
+
`acceptForSession` → session scope, permissions granted or an empty grant),
|
|
86
|
+
`interruptTurn` (settle open approvals *before* `turn/interrupt`), `close`.
|
|
87
|
+
- Codex mapping: `t3code/apps/server/src/provider/Layers/CodexAdapter.ts` —
|
|
88
|
+
`mapToRuntimeEvents` (lines ~1307–2010), `toCanonicalItemType`,
|
|
89
|
+
`normalizeCodexTokenUsage` (`last.totalTokens` is the context in use).
|
|
90
|
+
- Claude: `t3code/apps/server/src/provider/Layers/ClaudeAdapter.ts` — `startSession`
|
|
91
|
+
(~4382: prompt queue, `sessionId` chosen up front or `resume`,
|
|
92
|
+
`includePartialMessages`, `canUseTool`), `sendTurn` (~5127: `setModel`, user
|
|
93
|
+
message `uuid` = turn id), `interruptTurn` (~5276: closes the session),
|
|
94
|
+
`handleStreamEvent` (~2849), `handleResultMessage`, `stopSessionInternal`.
|
|
95
|
+
- Verified live (2026-09-28, claude 2.1.x): resuming an unknown session id makes
|
|
96
|
+
`initializationResult()` reject with "No conversation found with session ID"
|
|
97
|
+
within ~2 s, before any prompt is read; a fresh session initializes in ~1 s
|
|
98
|
+
without a model call.
|
|
99
|
+
|
|
100
|
+
## Decisions (Phase 2)
|
|
101
|
+
|
|
102
|
+
- **2026-09-28 (superseded in Phase 3).** Phase 2 first kept process-group
|
|
103
|
+
settlement for continuity turns by ending the session after each one. That
|
|
104
|
+
contradicted the decided strategy: warm sessions everywhere, with turn-level
|
|
105
|
+
settlement replacing the process-group rule.
|
|
106
|
+
- **2026-09-28, Phase 3.** Turn-level settlement for every turn: settled when the
|
|
107
|
+
harness reports the turn done and no command it started (a `command_execution`
|
|
108
|
+
item) is still running. The session stays warm, Brain turns included. A command
|
|
109
|
+
still running after 60 s leaves a Brain turn's quiescence unknown; an ordinary
|
|
110
|
+
turn moves on after 5 s (a harness can end a turn with an abandoned item). A
|
|
111
|
+
background process a tool detaches is outside what the harness reports, so it is
|
|
112
|
+
outside this guarantee.
|
|
113
|
+
- **2026-09-28.** Loom's "auto" keeps `approvalPolicy: never` for Codex (t3code's
|
|
114
|
+
auto-accept-edits uses `on-request`): Loom promises auto never stops to ask.
|
|
115
|
+
- **2026-09-28.** A handoff briefing now rides in front of the prompt for Claude
|
|
116
|
+
too (framed, as Codex always had it): a warm session's system prompt is fixed
|
|
117
|
+
when it starts.
|
|
118
|
+
- **2026-09-28.** A failed turn outside continuity is not re-thrown by `send()`:
|
|
119
|
+
ingestion already logged the error, and the error event ends the turn. Continuity
|
|
120
|
+
turns still throw so Brain records the failure.
|
|
121
|
+
- **2026-09-28.** Claude `Bash` is reported as the canonical `shell` tool (command
|
|
122
|
+
execution), like Codex. Nothing in Loom keyed on the name `Bash`.
|
|
123
|
+
- **2026-09-28.** Codex `item/tool/requestUserInput` is still answered empty and
|
|
124
|
+
MCP elicitations declined; structured questions are Phase 3.
|
|
125
|
+
- **2026-09-28.** One `ProviderService` per agent working directory (not per
|
|
126
|
+
project): native state already lives in the agent's directory (a worktree agent
|
|
127
|
+
has its own `.loom`), and the session directory file must have one writer.
|
|
128
|
+
|
|
129
|
+
## Sources read (Phase 3)
|
|
130
|
+
|
|
131
|
+
- `t3code/apps/server/src/provider/CodexDeveloperInstructions.ts` — plan/default
|
|
132
|
+
collaboration-mode prompts (ported verbatim, minus T3's browser/device blocks).
|
|
133
|
+
- `CodexSessionRuntime.ts` — `buildCodexCollaborationMode` (~595: mode, model,
|
|
134
|
+
reasoning_effort default "medium", developer_instructions), request_user_input
|
|
135
|
+
handler (~2347) and `toCodexUserInputAnswer` (~1145), permissions approval
|
|
136
|
+
(`scope: "session"` on acceptForSession).
|
|
137
|
+
- `CodexAdapter.ts` — `toUserInputQuestions` (~883), async questions on
|
|
138
|
+
`agentMessage` with `delivery: "async"` (~1694, `responseMode: "message"`), plan
|
|
139
|
+
item → `turn.proposed.completed`.
|
|
140
|
+
- `ClaudeAdapter.ts` — `handleAskUserQuestion` (~4441: question id = question text,
|
|
141
|
+
answers returned as `updatedInput.answers`), `canUseTool` (~4651: ExitPlanMode
|
|
142
|
+
captured and denied, full-access allows, otherwise asks),
|
|
143
|
+
`toSessionPermissionUpdates` (~311), `sendTurn` plan mode via
|
|
144
|
+
`setPermissionMode` (~5179), `compaction: { type: "slash-command", command:
|
|
145
|
+
"/compact" }` (~5561).
|
|
146
|
+
- Verified live: Claude Code's plan mode writes its plan to
|
|
147
|
+
`~/.claude/plans/<slug>.md` before calling ExitPlanMode.
|
|
148
|
+
|
|
149
|
+
## Decisions (Phase 3)
|
|
150
|
+
|
|
151
|
+
- **2026-09-28.** Claude's `canUseTool` is registered in every mode (as t3code) so
|
|
152
|
+
questions and plans reach Loom. Other tools: full access allows; approval-required
|
|
153
|
+
asks a person; auto denies without asking (Loom's auto never stops to ask — a tool
|
|
154
|
+
runs there only if Claude's settings pre-allow it, as before).
|
|
155
|
+
- **2026-09-28.** Tool progress is live-only (websocket `item` frames), not new log
|
|
156
|
+
events: the log keeps one `tool_call` per finished tool, which is what Brain's
|
|
157
|
+
evidence and the transcript read.
|
|
158
|
+
- **2026-09-28.** Codex plan mode is sent only when a turn is a plan turn, and the
|
|
159
|
+
default mode once afterwards to leave it — not on every turn as t3code does — so
|
|
160
|
+
a user who never plans gets Codex's own prompt unchanged.
|
|
161
|
+
- **2026-09-28.** A plan turn on a provider agent uses native plan mode (which
|
|
162
|
+
changes nothing) instead of Loom's "write plans/…md" briefing; Loom writes the
|
|
163
|
+
proposed plan to `plans/` itself, so the artifact stays.
|
|
164
|
+
- **2026-09-28.** A Claude write outside the session directory (plan mode's own
|
|
165
|
+
plan file) is a tool call, not a project file edit.
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# t3code port — TODO
|
|
2
|
+
|
|
3
|
+
Plan: [t3code-port.md](../proposals/t3code-port.md). Notes and sources:
|
|
4
|
+
[T3-PORT-NOTES.md](T3-PORT-NOTES.md). Scope for now: **Codex and Claude Code only**;
|
|
5
|
+
relay, mobile and other providers are out of scope.
|
|
6
|
+
|
|
7
|
+
Rules: phase by phase, fakes-only tests at every step, one authorized live check per
|
|
8
|
+
harness per phase, and never modify a provider's own config (`~/.codex/config.toml`,
|
|
9
|
+
Claude settings); override per session through the protocol instead.
|
|
10
|
+
|
|
11
|
+
## Phase 1 — Provider contract and service ✅ (2026-09-28)
|
|
12
|
+
|
|
13
|
+
- [x] `src/providers/contracts.ts`: provider kinds, runtime modes, session and turn
|
|
14
|
+
inputs, capabilities, normalized item data, and the canonical runtime event union
|
|
15
|
+
(26 types), ported from t3code `packages/contracts/src/provider*.ts`.
|
|
16
|
+
- [x] `src/providers/adapter.ts`: the `ProviderAdapter` interface and `EventHub`.
|
|
17
|
+
- [x] `src/providers/errors.ts`: `ProviderError` (validation, not_found,
|
|
18
|
+
session_missing, unsupported, request, transport) with `notSubmitted`.
|
|
19
|
+
- [x] `src/providers/directory.ts`: session directory keyed by (chat, agent), in
|
|
20
|
+
memory and as an atomic JSON file; unreadable files moved aside.
|
|
21
|
+
- [x] `src/providers/service.ts`: `ProviderService` — register/unregister,
|
|
22
|
+
ensureSession (live / resumed / fresh, shared concurrent start, lost session →
|
|
23
|
+
`session_missing` or fresh on request), sendTurn, interrupt, respond, compact,
|
|
24
|
+
rollback, stop, stopAll, event fan-in keeping the directory and active turns.
|
|
25
|
+
- [x] `src/providers/reaper.ts`: idle reaper (30 min / 5 min; skips running turns
|
|
26
|
+
and caller-reported background work).
|
|
27
|
+
- [x] `src/providers/ingestion.ts`: canonical events → Loom log events; streamed
|
|
28
|
+
text assembled per item with completed-item fallback; live delta channel; Brain
|
|
29
|
+
tags per turn; large command output to artifacts.
|
|
30
|
+
- [x] `src/providers/approvals.ts`: `request.opened` → Loom approval cards → answer
|
|
31
|
+
through the service; cards close when the turn or session ends.
|
|
32
|
+
- [x] Fake adapter and tests (`test/providers/`, 45 tests). Full suite green.
|
|
33
|
+
- [x] Docs: ARCHITECTURE owner rows; notes.
|
|
34
|
+
- [ ] Live check: none this phase — nothing is wired to a real harness yet.
|
|
35
|
+
|
|
36
|
+
## Phase 2 — Warm sessions for Codex and Claude ✅ (2026-09-28)
|
|
37
|
+
|
|
38
|
+
- [x] Codex adapter on the contract (`src/providers/codex/`): one `app-server` per
|
|
39
|
+
chat session in its own process group, thread kept open, turns and interrupts on
|
|
40
|
+
one connection; notifications, deltas and server requests mapped to canonical
|
|
41
|
+
events (t3code's `mapToRuntimeEvents`, `toCanonicalItemType`,
|
|
42
|
+
`normalizeCodexTokenUsage`); approvals wait for `respondToRequest`; manual
|
|
43
|
+
compaction (`thread/compact/start`).
|
|
44
|
+
- [x] Claude adapter on the contract (`src/providers/claude/`): one streaming-input
|
|
45
|
+
`query()` per chat session, session id chosen up front, `initializationResult()`
|
|
46
|
+
proves the session (a lost resume fails here, before any prompt), turns pushed as
|
|
47
|
+
user messages, `setModel` in-session, `canUseTool` → `request.opened`, partial
|
|
48
|
+
messages → deltas, interrupt closes the session (t3code's hard boundary).
|
|
49
|
+
- [x] Runtime dispatch: `ProviderAgent` (`src/providers/agent.ts`) is the runtime's
|
|
50
|
+
Adapter for `codex` and `claude-code`; one `ProviderService` per working
|
|
51
|
+
directory with the file directory, reaper and approval bridge. `SendInput.chat`
|
|
52
|
+
added; sessions keyed by (chat, agent). Old per-turn adapters deleted
|
|
53
|
+
(`adapters/codex.ts`, `adapters/claude-code.ts`); `codex-rpc.ts` moved to
|
|
54
|
+
`providers/codex/rpc.ts`. The pre-warm per-agent session id migrates to the main
|
|
55
|
+
chat's binding. A rebuilt agent (model/permission change) takes over its
|
|
56
|
+
predecessor's sessions. MCP server changes restart and resume the session.
|
|
57
|
+
- [x] Brain: turn-level settlement — a turn is settled when the harness reports it
|
|
58
|
+
done and no command it started is still running; the session stays warm.
|
|
59
|
+
(Phase 2 first shipped "a continuity turn ends its session"; corrected in Phase 3
|
|
60
|
+
to the decided turn-level rule. See notes.)
|
|
61
|
+
- [x] Token streaming: `content.delta` → `LiveDeltaThrottle` (50 ms) → `delta`
|
|
62
|
+
websocket frames; a minimal streaming bubble in the web thread, replaced by the
|
|
63
|
+
finished message.
|
|
64
|
+
- [x] Tests: `test/providers/warm.test.ts` (16), throttle test; fakes serve many
|
|
65
|
+
turns per process (`scripts`, `turnsOf`); existing Codex/Claude/MCP/continuity
|
|
66
|
+
tests run against the warm agent. Full suite green.
|
|
67
|
+
- [x] Live check per harness (read-only mode, scratch project): Codex
|
|
68
|
+
(`gpt-6-astra` override; `~/.codex/config.toml` untouched) and Claude each ran one
|
|
69
|
+
turn; session stayed warm after the turn, the reply streamed as a delta, the
|
|
70
|
+
process group was gone after stop.
|
|
71
|
+
|
|
72
|
+
## Phase 3 — Interaction parity ✅ (2026-09-28)
|
|
73
|
+
|
|
74
|
+
- [x] Tool progress: `item.started/updated/completed` → live `item` websocket frames
|
|
75
|
+
(a "running" row in the thread), command output as live deltas; the finished tool
|
|
76
|
+
is still one `tool_call` in the log.
|
|
77
|
+
- [x] Approvals with native options: `request.opened.options` (Allow / Allow for this
|
|
78
|
+
session / Deny); Loom cards gain "Allow for session" when offered; Codex gets
|
|
79
|
+
`acceptForSession`, Claude gets its own permission suggestions scoped to the session.
|
|
80
|
+
- [x] Structured user input: Codex `item/tool/requestUserInput` (answers
|
|
81
|
+
`{id: {answers: []}}`), Codex async questions (answer with the next message),
|
|
82
|
+
Claude `AskUserQuestion` via `canUseTool` (answers keyed by question text).
|
|
83
|
+
`needs_input` carries `questions`, `requestId`, `responseMode`; answered via
|
|
84
|
+
`POST /api/projects/:id/agents/:agent/answers`; question cards in the thread.
|
|
85
|
+
- [x] Plan mode: Codex collaboration mode (t3code's developer instructions, ported
|
|
86
|
+
in `providers/codex/instructions.ts`), left on the next default turn; Claude
|
|
87
|
+
`setPermissionMode("plan")` and `ExitPlanMode` captured as the proposed plan.
|
|
88
|
+
Loom's plan turns on provider agents use native plan mode; the runtime saves the
|
|
89
|
+
proposed plan to `plans/<day>-<slug>.md` (`status: plan_saved`).
|
|
90
|
+
- [x] Manual compaction: Codex `thread/compact/start`; Claude `/compact` as a turn
|
|
91
|
+
(t3code's slash-command compaction). `POST /api/projects/:id/agents/:agent/compact`.
|
|
92
|
+
- [x] Reasoning effort: agent option `effort` → Codex `turn/start.effort`, Claude
|
|
93
|
+
query `effort` at session start.
|
|
94
|
+
- [x] Turn-level settlement (correction of Phase 2), bounded: 60 s for Brain turns
|
|
95
|
+
(then quiescence unknown), 5 s for ordinary turns.
|
|
96
|
+
- [x] Tests: `test/providers/interaction.test.ts` (13),
|
|
97
|
+
`test/providers/runtime-interaction.test.ts` (2). Full suite green.
|
|
98
|
+
- [x] Live check (read-only, scratch project): a plan-mode turn on each harness.
|
|
99
|
+
Codex explored with one command and proposed a plan (captured). Claude wrote its
|
|
100
|
+
plan to its own `~/.claude/plans/` file and called ExitPlanMode (captured); the
|
|
101
|
+
project was untouched. Found and fixed: that plan file was logged as a project
|
|
102
|
+
edit.
|
|
103
|
+
- Moved: model catalogs (`model/list`, `supportedModels()`) to Phase 6 (provider
|
|
104
|
+
management). Per-turn diffs: Loom's own `turn_diff` (git, per turn) already covers
|
|
105
|
+
both providers; Codex's `turn.diff.updated` is mapped but not yet shown.
|
|
106
|
+
|
|
107
|
+
## Phase 4 — Checkpoints and revert
|
|
108
|
+
|
|
109
|
+
- [ ] Hidden-ref checkpoints per turn; revert coordinated with native rollback;
|
|
110
|
+
refuse before touching files when rollback is unsupported.
|
|
111
|
+
|
|
112
|
+
## Phase 5 — Cross-provider switching
|
|
113
|
+
|
|
114
|
+
- [ ] Park/resume sessions across providers within a chat; Brain packet sized by the
|
|
115
|
+
target's context window; switch offered at a usage limit; revert across a provider
|
|
116
|
+
boundary; continuity on by default.
|
|
117
|
+
|
|
118
|
+
## Phase 6 — Provider management
|
|
119
|
+
|
|
120
|
+
- [ ] Instances (several accounts per driver), auth status, install/update
|
|
121
|
+
detection, native session history import.
|
|
122
|
+
|
|
123
|
+
## Phase 7 — UI overhaul
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Modularization work
|
|
2
|
+
|
|
3
|
+
Branch: `dev/Harsha`, based on local `main` at `838f994`.
|
|
4
|
+
|
|
5
|
+
Scope: preserve existing behavior and public contracts while separating the web
|
|
6
|
+
client, HTTP routes, and project runtime. Framework selection is deferred.
|
|
7
|
+
|
|
8
|
+
## 0. Baseline
|
|
9
|
+
- [x] Create the requested branch from main; confirm a clean checkout.
|
|
10
|
+
- [x] Read contribution instructions and map the three large modules.
|
|
11
|
+
- [x] Install dependencies and build; baseline test run was blocked by sandbox socket restrictions (see notes).
|
|
12
|
+
|
|
13
|
+
## 1. Web client
|
|
14
|
+
- [x] Extract browser JavaScript, styles, and document shell.
|
|
15
|
+
- [x] Split browser behavior into feature modules with explicit dependencies.
|
|
16
|
+
- [x] Preserve startup order, pairing, asset packaging, and desktop/phone behavior.
|
|
17
|
+
- [x] Run script parsing, DOM, packaging, and daemon tests.
|
|
18
|
+
|
|
19
|
+
## 2. HTTP routes
|
|
20
|
+
- [x] Separate route registration by feature with typed dependencies.
|
|
21
|
+
- [x] Preserve middleware order, authentication, response shapes, and streaming.
|
|
22
|
+
- [x] Run API, auth, WebSocket, and affected integration tests.
|
|
23
|
+
|
|
24
|
+
## 3. Project runtime
|
|
25
|
+
- [x] Extract accounting and budget ownership.
|
|
26
|
+
- [x] Extract briefing and memory coordination.
|
|
27
|
+
- [x] Extract queue coordination and turn execution.
|
|
28
|
+
- [x] Preserve lifecycle, interruption, retries, chat routing, and cleanup.
|
|
29
|
+
- [x] Run runtime, adapter, queue, memory, route, and orchestra regressions.
|
|
30
|
+
|
|
31
|
+
## 4. Finish
|
|
32
|
+
- [x] Update source maps and contributor instructions.
|
|
33
|
+
- [x] Build, typecheck, run the full suite including omitted DOM suites.
|
|
34
|
+
- [x] Verify packaging and `git diff --check`.
|
|
35
|
+
- [x] Record limitations and final verification in NOTES.md.
|
|
36
|
+
|
|
37
|
+
Completed: all three requested extractions. Framework selection remains deferred.
|
|
38
|
+
See NOTES.md for verification results and deliberately retained boundaries.
|
|
39
|
+
|
|
40
|
+
The next authorized phase is tracked in [BOUNDARIES.md](BOUNDARIES.md): separating
|
|
41
|
+
storage, native adapters, Brain preparation and client delivery before building
|
|
42
|
+
Brain continuity. The completed checklist above describes the earlier extraction.
|
|
43
|
+
|
|
44
|
+
Brain continuity implementation is tracked separately in [BRAIN-TODO.md](BRAIN-TODO.md),
|
|
45
|
+
with source research and edge-case IDs in [BRAIN-NOTES.md](BRAIN-NOTES.md).
|
|
46
|
+
The plan is awaiting user review; the checklist does not authorize implementation.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"measuredAt": "2026-09-28T08:24:36.883Z",
|
|
3
|
+
"node": "v24.3.0",
|
|
4
|
+
"hardware": {
|
|
5
|
+
"platform": "darwin",
|
|
6
|
+
"arch": "arm64",
|
|
7
|
+
"cpu": "Apple M4",
|
|
8
|
+
"memoryBytes": 17179869184
|
|
9
|
+
},
|
|
10
|
+
"corpus": {
|
|
11
|
+
"events": 10001,
|
|
12
|
+
"buriedUserPoints": 20,
|
|
13
|
+
"attempts": 30,
|
|
14
|
+
"paidCalls": 0,
|
|
15
|
+
"git": false
|
|
16
|
+
},
|
|
17
|
+
"preparationMs": {
|
|
18
|
+
"p50": 19.03137499999866,
|
|
19
|
+
"p95": 25.583166000000347
|
|
20
|
+
},
|
|
21
|
+
"retrievalMs": {
|
|
22
|
+
"p50": 0.29900000000088767,
|
|
23
|
+
"p95": 0.7585829999989073
|
|
24
|
+
},
|
|
25
|
+
"daemonLoopMs": {
|
|
26
|
+
"p95": 19.464191,
|
|
27
|
+
"max": 25.772031
|
|
28
|
+
},
|
|
29
|
+
"appAddedTokens": {
|
|
30
|
+
"minimum": 3034,
|
|
31
|
+
"maximum": 3034,
|
|
32
|
+
"estimation": "UTF-8 bytes / 3 heuristic"
|
|
33
|
+
},
|
|
34
|
+
"exactReplayEstimatedTokens": 258978,
|
|
35
|
+
"allBuriedUserPointsIncluded": true,
|
|
36
|
+
"legacyRecent400ContainsFirstPoint": false,
|
|
37
|
+
"processMemory": {
|
|
38
|
+
"rss": 119554048,
|
|
39
|
+
"heapTotal": 48218112,
|
|
40
|
+
"heapUsed": 22705600,
|
|
41
|
+
"external": 2129463,
|
|
42
|
+
"arrayBuffers": 25235
|
|
43
|
+
},
|
|
44
|
+
"diskBytes": 4829184,
|
|
45
|
+
"nativeTokens": null,
|
|
46
|
+
"helperTokens": 0,
|
|
47
|
+
"continuationQuality": "native understanding not measured; exact source inclusion checked"
|
|
48
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"measuredAt": "2026-09-28T09:18:19.345Z",
|
|
3
|
+
"node": "v24.3.0",
|
|
4
|
+
"hardware": {
|
|
5
|
+
"platform": "darwin",
|
|
6
|
+
"arch": "arm64",
|
|
7
|
+
"cpu": "Apple M4",
|
|
8
|
+
"memoryBytes": 17179869184
|
|
9
|
+
},
|
|
10
|
+
"corpus": {
|
|
11
|
+
"events": 10001,
|
|
12
|
+
"buriedUserPoints": 20,
|
|
13
|
+
"attempts": 30,
|
|
14
|
+
"paidCalls": 0,
|
|
15
|
+
"git": false
|
|
16
|
+
},
|
|
17
|
+
"preparationMs": {
|
|
18
|
+
"p50": 13.088791999999557,
|
|
19
|
+
"p95": 13.847000000000662
|
|
20
|
+
},
|
|
21
|
+
"retrievalMs": {
|
|
22
|
+
"p50": 0.2079169999997248,
|
|
23
|
+
"p95": 0.22337500000003274
|
|
24
|
+
},
|
|
25
|
+
"daemonLoopMs": {
|
|
26
|
+
"p95": 18.120703,
|
|
27
|
+
"max": 19.021823
|
|
28
|
+
},
|
|
29
|
+
"turnInputEstimatedTokens": {
|
|
30
|
+
"minimum": 3047,
|
|
31
|
+
"maximum": 3047,
|
|
32
|
+
"estimation": "UTF-8 bytes / 3 heuristic"
|
|
33
|
+
},
|
|
34
|
+
"exactReplayEstimatedTokens": 258978,
|
|
35
|
+
"allBuriedUserPointsIncluded": true,
|
|
36
|
+
"legacyRecent400ContainsFirstPoint": false,
|
|
37
|
+
"processMemory": {
|
|
38
|
+
"rss": 123125760,
|
|
39
|
+
"heapTotal": 47955968,
|
|
40
|
+
"heapUsed": 22995376,
|
|
41
|
+
"external": 2129449,
|
|
42
|
+
"arrayBuffers": 25221
|
|
43
|
+
},
|
|
44
|
+
"diskBytes": 4829184,
|
|
45
|
+
"nativeTokens": null,
|
|
46
|
+
"helperTokens": 0,
|
|
47
|
+
"continuationQuality": "native understanding not measured; exact source inclusion checked"
|
|
48
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
## Loom 0.2.0 — Loom Teams
|
|
2
|
+
|
|
3
|
+
Several people, each with their own agents, on one GitHub repo — without
|
|
4
|
+
stepping on each other. Built in five phases (78 design decisions, in
|
|
5
|
+
[docs/teams-architecture.md](https://github.com/nickthelegend/loom/blob/main/docs/teams-architecture.md)):
|
|
6
|
+
|
|
7
|
+
1. **See each other.** Teammates' live agents, goals and the files they touch;
|
|
8
|
+
a team feed of goals, PRs and CI. End-to-end encrypted: the hub can't read
|
|
9
|
+
your goals.
|
|
10
|
+
2. **Stop colliding.** Tasks declare the files they touch; overlaps need a
|
|
11
|
+
decision; hard zones take one goal at a time; merge conflicts are predicted
|
|
12
|
+
before anyone opens a PR; `loom.team.json` is the team's policy.
|
|
13
|
+
3. **One brain.** What one agent learns, every agent knows — labelled by how
|
|
14
|
+
sure to be. Canon lives in `AGENTS.md`, reviewed like code.
|
|
15
|
+
4. **Land safely.** Failing checks are rerun, then fixed on the same PR; an
|
|
16
|
+
agent from another vendor reviews; one click lands through GitHub's rules;
|
|
17
|
+
stacks, Adopt, budgets, a merge-queue doctor.
|
|
18
|
+
5. **Runners.** Your own always-on Loom takes your goals while your laptop
|
|
19
|
+
sleeps; move a running goal there and bring it back. Deploy status and
|
|
20
|
+
release notes.
|
|
21
|
+
|
|
22
|
+
**Get started:** [docs/teams.md](https://github.com/nickthelegend/loom/blob/main/docs/teams.md).
|
|
23
|
+
|
|
24
|
+
### Downloads
|
|
25
|
+
|
|
26
|
+
- **macOS**: `Loom-Desktop-0.2.0-arm64.dmg` (Apple Silicon) or `-x64.dmg` (Intel)
|
|
27
|
+
- **Windows**: the `.exe` installer
|
|
28
|
+
- **Linux**: `.AppImage` or `.deb`
|
|
29
|
+
- **Android**: `loompad-0.2.0-android.apk`
|
|
30
|
+
- **CLI**: `npm install -g github:nickthelegend/loom`
|
|
31
|
+
|
|
32
|
+
The installers are unsigned. On macOS, right-click → Open the first time; on
|
|
33
|
+
Windows, "More info → Run anyway". Checksums are in `SHA256SUMS.txt`.
|
|
34
|
+
|
|
35
|
+
Full list of changes: [CHANGELOG.md](https://github.com/nickthelegend/loom/blob/main/CHANGELOG.md).
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
## Loom 0.2.1 — the prompt queue, and a real Android build
|
|
2
|
+
|
|
3
|
+
### Line up the next ones
|
|
4
|
+
|
|
5
|
+
Type while an agent is mid-turn, or while a goal is still running, and the
|
|
6
|
+
prompt waits above the composer instead of being refused or quietly swallowed.
|
|
7
|
+
|
|
8
|
+
- **Queue as many as you like.** They run strictly one at a time, in order.
|
|
9
|
+
- **Each prompt says who takes it:** one agent by name, the **orchestrator**
|
|
10
|
+
(a whole new goal, started when the running one finishes), or **Auto** to let
|
|
11
|
+
the router pick. Change a waiting prompt's target and the baton goes with it.
|
|
12
|
+
- **Edit, reorder, drop.** Click a queued prompt to rewrite it (⌘⏎ saves, Esc
|
|
13
|
+
cancels), move it up or down, or remove it — all before it runs.
|
|
14
|
+
- **Pause and resume.** **Stop** pauses too: stopping a turn never silently
|
|
15
|
+
discards what you lined up behind it.
|
|
16
|
+
- **A question holds the queue.** If the agent stops to ask you something, the
|
|
17
|
+
next queued prompt would answer a question you never read — so the queue waits
|
|
18
|
+
and says who asked. Your reply goes out at once and lifts the hold.
|
|
19
|
+
- **A prompt enters the conversation when it is sent**, not when it is queued,
|
|
20
|
+
so the thread stays an honest record of what each agent was asked.
|
|
21
|
+
|
|
22
|
+
It survives a daemon restart (reloaded paused, so an hour-old queue doesn't
|
|
23
|
+
start itself) and it is the same queue everywhere: the web app, the desktop app,
|
|
24
|
+
the phone, and `loom queue` in the terminal — `add`, `edit`, `to`, `move`, `rm`,
|
|
25
|
+
`clear`, `pause`, `resume`.
|
|
26
|
+
|
|
27
|
+
### Fixed
|
|
28
|
+
|
|
29
|
+
- **The v0.2.0 apk had no JavaScript bundle** and would only open against a
|
|
30
|
+
running dev server. This one is a release build with the bundle in it, signed
|
|
31
|
+
with the project's release key — check it with
|
|
32
|
+
`apksigner verify --print-certs`.
|
|
33
|
+
- **The macOS app is now a valid signed bundle** (ad-hoc). `codesign --verify
|
|
34
|
+
--deep --strict` passes; v0.2.0 carried only the linker's signature.
|
|
35
|
+
- **An overridden `loom/review` stays overridden.** A review that came back
|
|
36
|
+
after the owner had overridden it used to write `failure` over their decision
|
|
37
|
+
— and, once that was fixed, to leave its own "reviewing…" status pending for
|
|
38
|
+
ever on a repo that requires the check. Both are gone.
|
|
39
|
+
- **Agent turns are no longer blamed for Loom's own `.loom/` files** in a
|
|
40
|
+
project that doesn't gitignore them.
|
|
41
|
+
- **grok-code and agy** are detected from their own auth files instead of being
|
|
42
|
+
reported signed-out, and the status bar says **live**, not offline, before a
|
|
43
|
+
project is open.
|
|
44
|
+
- **A reply that lands after its window closed** no longer throws from a redraw.
|
|
45
|
+
|
|
46
|
+
### Downloads
|
|
47
|
+
|
|
48
|
+
- **macOS**: `Loom-Desktop-0.2.1-arm64.dmg` (Apple Silicon) or `-x64.dmg` (Intel)
|
|
49
|
+
- **Windows**: the `.exe` installer
|
|
50
|
+
- **Linux**: `.AppImage` or `.deb`
|
|
51
|
+
- **Android**: `loompad-0.2.1-android.apk`
|
|
52
|
+
- **CLI**: `npm install -g github:nickthelegend/loom`
|
|
53
|
+
|
|
54
|
+
The Android apk is signed with the project's release key. The desktop
|
|
55
|
+
installers are not signed by a certificate authority: on macOS the app is
|
|
56
|
+
ad-hoc signed, so right-click → Open the first time; on Windows, "More info →
|
|
57
|
+
Run anyway". Checksums are in `SHA256SUMS.txt`.
|
|
58
|
+
|
|
59
|
+
Full list of changes: [CHANGELOG.md](https://github.com/nickthelegend/loom/blob/main/CHANGELOG.md).
|