@loompad/cli 0.1.0 → 1.1.2
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 +1054 -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 +4646 -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/release-notes/v1.1.2.md +21 -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,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ProviderAgent: a Loom agent (the runtime's Adapter) backed by a warm provider
|
|
3
|
+
* session per chat. The runtime keeps its one-turn-at-a-time contract —
|
|
4
|
+
* `send()` resolves when the turn has ended — while the harness process stays
|
|
5
|
+
* up between turns.
|
|
6
|
+
*
|
|
7
|
+
* send() → ProviderService.sendTurn(chat, agent) → canonical events
|
|
8
|
+
* → RuntimeIngestion → Loom log events (this.emit)
|
|
9
|
+
* ← turn.completed / turn.aborted settles send()
|
|
10
|
+
*
|
|
11
|
+
* One ProviderService serves every provider agent of a working directory, so
|
|
12
|
+
* the session directory (`.loom/providers/sessions.json`) has one writer. The
|
|
13
|
+
* idle reaper and the approval bridge hang off the same service.
|
|
14
|
+
*
|
|
15
|
+
* Brain continuity keeps its binding authoritative: a continuity turn runs on
|
|
16
|
+
* the native session its binding names (or a fresh one), and a lost session is
|
|
17
|
+
* reported as NativeSessionMissing so the binding moves to a new epoch. A turn
|
|
18
|
+
* settles at turn level — the harness reported it done and no command it
|
|
19
|
+
* started is still running — not at process exit: the process outlives the
|
|
20
|
+
* turn, as in t3code.
|
|
21
|
+
*/
|
|
22
|
+
import { AdapterBase, type AgentCheck } from "../adapters/base.js";
|
|
23
|
+
import { type AgentCapabilities, type SendInput } from "../types.js";
|
|
24
|
+
import type { ProviderKind, ThreadId } from "./contracts.js";
|
|
25
|
+
import { type LiveDelta, type LiveItem } from "./ingestion.js";
|
|
26
|
+
/** Stop every warm session in this process (daemon shutdown, tests). */
|
|
27
|
+
export declare function stopAllProviderSessions(): Promise<void>;
|
|
28
|
+
export declare class ProviderAgent extends AdapterBase {
|
|
29
|
+
readonly provider: ProviderKind;
|
|
30
|
+
/** MCP servers are applied when a session starts; a change restarts (and resumes) it. */
|
|
31
|
+
readonly capabilities: AgentCapabilities;
|
|
32
|
+
private readonly options;
|
|
33
|
+
private providers;
|
|
34
|
+
private adapter;
|
|
35
|
+
private unsubscribe;
|
|
36
|
+
private readonly ingestion;
|
|
37
|
+
private current;
|
|
38
|
+
private settled;
|
|
39
|
+
/** The MCP servers each chat's live session was started with. */
|
|
40
|
+
private readonly sessionMcp;
|
|
41
|
+
private mcp;
|
|
42
|
+
private readonly liveListeners;
|
|
43
|
+
private readonly itemListeners;
|
|
44
|
+
constructor(id: string, provider: ProviderKind, projectDir: string, options?: Record<string, unknown>);
|
|
45
|
+
/** Streamed text as it arrives (not persisted; the completed message is). */
|
|
46
|
+
onLive(cb: (delta: LiveDelta) => void): () => void;
|
|
47
|
+
/** A tool's progress as it runs (not persisted; the finished tool is a tool_call). */
|
|
48
|
+
onLiveItem(cb: (item: LiveItem) => void): () => void;
|
|
49
|
+
/** Answer a structured question the agent is waiting on (needs_input with a requestId). */
|
|
50
|
+
respondToUserInput(chat: ThreadId, requestId: string, answers: Record<string, unknown>): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* Compact the chat's native context now. Codex has a request for it; Claude
|
|
53
|
+
* compacts on its `/compact` command, sent as a turn (t3code's
|
|
54
|
+
* `compaction: { type: "slash-command" }`).
|
|
55
|
+
*/
|
|
56
|
+
compact(chat?: ThreadId): Promise<void>;
|
|
57
|
+
private get bin();
|
|
58
|
+
available(): Promise<boolean>;
|
|
59
|
+
/** Installed, and (Codex) signed in — asked of the CLI itself, no turn spent. */
|
|
60
|
+
selfCheck(): Promise<AgentCheck[]>;
|
|
61
|
+
start(): Promise<void>;
|
|
62
|
+
/**
|
|
63
|
+
* Register this agent's adapter with its directory's service, once. A
|
|
64
|
+
* rebuilt agent with the same id (a model or permission change) takes over:
|
|
65
|
+
* the previous instance is stopped first, and its sessions resume here.
|
|
66
|
+
*/
|
|
67
|
+
private attach;
|
|
68
|
+
/**
|
|
69
|
+
* Before warm sessions, one native session per agent was kept in the
|
|
70
|
+
* project state. It becomes the main chat's binding, so an upgrade resumes
|
|
71
|
+
* the conversation instead of starting over.
|
|
72
|
+
*/
|
|
73
|
+
private migrateLegacySession;
|
|
74
|
+
private runtimeMode;
|
|
75
|
+
private observe;
|
|
76
|
+
/** Commands still running per chat: a turn is settled only once none are. */
|
|
77
|
+
private readonly running;
|
|
78
|
+
private commandsIdle;
|
|
79
|
+
private trackCommands;
|
|
80
|
+
/**
|
|
81
|
+
* Turn-level settlement: the harness said the turn is done and no command
|
|
82
|
+
* it started is still running. Resolves false when commands are still
|
|
83
|
+
* running at the deadline.
|
|
84
|
+
*/
|
|
85
|
+
private commandsSettled;
|
|
86
|
+
send(input: SendInput): Promise<void>;
|
|
87
|
+
/** Wait for the turn's terminal event, or the session's exit. */
|
|
88
|
+
private turnEnd;
|
|
89
|
+
/**
|
|
90
|
+
* A continuity turn runs on the native session its binding names. A live
|
|
91
|
+
* session on any other native session (or any live session, when the binding
|
|
92
|
+
* wants a fresh one) is stopped first, and the directory is pointed at the
|
|
93
|
+
* binding's session.
|
|
94
|
+
*/
|
|
95
|
+
private bindContinuity;
|
|
96
|
+
/** A session started with other MCP servers restarts (and resumes) with these. */
|
|
97
|
+
private applyMcp;
|
|
98
|
+
/** A provider error as the runtime and Brain understand dispatch failures. */
|
|
99
|
+
private dispatchError;
|
|
100
|
+
interrupt(): Promise<void>;
|
|
101
|
+
stop(): Promise<void>;
|
|
102
|
+
}
|
|
103
|
+
/** Claude Code as a Loom agent (the SDK's historical name). */
|
|
104
|
+
export declare class ClaudeCodeAdapter extends ProviderAgent {
|
|
105
|
+
constructor(id: string, projectDir: string, options?: Record<string, unknown>);
|
|
106
|
+
}
|
|
107
|
+
/** Codex as a Loom agent. */
|
|
108
|
+
export declare class CodexAdapter extends ProviderAgent {
|
|
109
|
+
constructor(id: string, projectDir: string, options?: Record<string, unknown>);
|
|
110
|
+
}
|
|
@@ -0,0 +1,487 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ProviderAgent: a Loom agent (the runtime's Adapter) backed by a warm provider
|
|
3
|
+
* session per chat. The runtime keeps its one-turn-at-a-time contract —
|
|
4
|
+
* `send()` resolves when the turn has ended — while the harness process stays
|
|
5
|
+
* up between turns.
|
|
6
|
+
*
|
|
7
|
+
* send() → ProviderService.sendTurn(chat, agent) → canonical events
|
|
8
|
+
* → RuntimeIngestion → Loom log events (this.emit)
|
|
9
|
+
* ← turn.completed / turn.aborted settles send()
|
|
10
|
+
*
|
|
11
|
+
* One ProviderService serves every provider agent of a working directory, so
|
|
12
|
+
* the session directory (`.loom/providers/sessions.json`) has one writer. The
|
|
13
|
+
* idle reaper and the approval bridge hang off the same service.
|
|
14
|
+
*
|
|
15
|
+
* Brain continuity keeps its binding authoritative: a continuity turn runs on
|
|
16
|
+
* the native session its binding names (or a fresh one), and a lost session is
|
|
17
|
+
* reported as NativeSessionMissing so the binding moves to a new epoch. A turn
|
|
18
|
+
* settles at turn level — the harness reported it done and no command it
|
|
19
|
+
* started is still running — not at process exit: the process outlives the
|
|
20
|
+
* turn, as in t3code.
|
|
21
|
+
*/
|
|
22
|
+
import path from "node:path";
|
|
23
|
+
import { AdapterBase, ADAPTER_CAPABILITIES, cliAvailable, cliOutput, firstLine, frameBriefing } from "../adapters/base.js";
|
|
24
|
+
import { hasApprovalBroker } from "../core/approvals.js";
|
|
25
|
+
import { NativeDispatchRejected, NativeQuiescenceUnknown, NativeSessionMissing } from "../core/continuity/contracts.js";
|
|
26
|
+
import { permissionFor } from "../core/permissions.js";
|
|
27
|
+
import { MAIN_CHAT } from "../types.js";
|
|
28
|
+
import { ApprovalBridge } from "./approvals.js";
|
|
29
|
+
import { ClaudeProviderAdapter, claudeBin } from "./claude/adapter.js";
|
|
30
|
+
import { CodexProviderAdapter, codexBin } from "./codex/adapter.js";
|
|
31
|
+
import { runtimeModeFor } from "./contracts.js";
|
|
32
|
+
import { FileSessionDirectory } from "./directory.js";
|
|
33
|
+
import { isProviderError } from "./errors.js";
|
|
34
|
+
import { RuntimeIngestion } from "./ingestion.js";
|
|
35
|
+
import { SessionReaper } from "./reaper.js";
|
|
36
|
+
import { ProviderService } from "./service.js";
|
|
37
|
+
const projects = new Map();
|
|
38
|
+
function acquireProviders(dir, project) {
|
|
39
|
+
const key = path.resolve(dir);
|
|
40
|
+
let p = projects.get(key);
|
|
41
|
+
if (!p) {
|
|
42
|
+
const busy = new Map();
|
|
43
|
+
const service = new ProviderService(new FileSessionDirectory(path.join(key, ".loom"), () => { }));
|
|
44
|
+
const reaper = new SessionReaper(service, { busy: (threadId, instanceId) => busy.get(instanceId)?.() === threadId });
|
|
45
|
+
reaper.start();
|
|
46
|
+
p = { service, owners: new Map(), reaper, approvals: new ApprovalBridge(service, project), busy, refs: 0 };
|
|
47
|
+
projects.set(key, p);
|
|
48
|
+
}
|
|
49
|
+
p.refs++;
|
|
50
|
+
return p;
|
|
51
|
+
}
|
|
52
|
+
function releaseProviders(dir, p) {
|
|
53
|
+
if (--p.refs > 0)
|
|
54
|
+
return;
|
|
55
|
+
p.reaper.stop();
|
|
56
|
+
p.approvals.close();
|
|
57
|
+
const key = path.resolve(dir);
|
|
58
|
+
if (projects.get(key) === p)
|
|
59
|
+
projects.delete(key);
|
|
60
|
+
}
|
|
61
|
+
/** Stop every warm session in this process (daemon shutdown, tests). */
|
|
62
|
+
export async function stopAllProviderSessions() {
|
|
63
|
+
await Promise.allSettled([...projects.values()].map(p => p.service.stopAll()));
|
|
64
|
+
}
|
|
65
|
+
/** A project MCP server as a Codex `mcp_servers.<key>` config value. */
|
|
66
|
+
function codexMcpServer(entry) {
|
|
67
|
+
if (entry.type === "stdio")
|
|
68
|
+
return { command: entry.command, ...(entry.args ? { args: entry.args } : {}), ...(entry.env ? { env: entry.env } : {}) };
|
|
69
|
+
// Codex's key for per-server HTTP headers is unverified; a guessed key is
|
|
70
|
+
// either ignored or rejected, so headers are deliberately not sent.
|
|
71
|
+
return { url: entry.url };
|
|
72
|
+
}
|
|
73
|
+
function claudeMcpServer(entry) {
|
|
74
|
+
if (entry.type === "stdio")
|
|
75
|
+
return { type: "stdio", command: entry.command, ...(entry.args ? { args: entry.args } : {}), ...(entry.env ? { env: entry.env } : {}) };
|
|
76
|
+
return { type: entry.type, url: entry.url, ...(entry.headers ? { headers: entry.headers } : {}) };
|
|
77
|
+
}
|
|
78
|
+
export class ProviderAgent extends AdapterBase {
|
|
79
|
+
provider;
|
|
80
|
+
/** MCP servers are applied when a session starts; a change restarts (and resumes) it. */
|
|
81
|
+
capabilities = { ...ADAPTER_CAPABILITIES, mcp: true };
|
|
82
|
+
options;
|
|
83
|
+
providers = null;
|
|
84
|
+
adapter = null;
|
|
85
|
+
unsubscribe = null;
|
|
86
|
+
ingestion;
|
|
87
|
+
current = null;
|
|
88
|
+
settled = null;
|
|
89
|
+
/** The MCP servers each chat's live session was started with. */
|
|
90
|
+
sessionMcp = new Map();
|
|
91
|
+
mcp;
|
|
92
|
+
liveListeners = new Set();
|
|
93
|
+
itemListeners = new Set();
|
|
94
|
+
constructor(id, provider, projectDir, options = {}) {
|
|
95
|
+
super(id, provider, projectDir);
|
|
96
|
+
this.provider = provider;
|
|
97
|
+
this.options = options;
|
|
98
|
+
this.ingestion = new RuntimeIngestion({
|
|
99
|
+
append: event => this.emit({ kind: event.kind, payload: event.payload }),
|
|
100
|
+
live: delta => { for (const cb of this.liveListeners) {
|
|
101
|
+
try {
|
|
102
|
+
cb(delta);
|
|
103
|
+
}
|
|
104
|
+
catch { /* a viewer's problem */ }
|
|
105
|
+
} },
|
|
106
|
+
liveItem: item => { for (const cb of this.itemListeners) {
|
|
107
|
+
try {
|
|
108
|
+
cb(item);
|
|
109
|
+
}
|
|
110
|
+
catch { /* a viewer's problem */ }
|
|
111
|
+
} },
|
|
112
|
+
artifactDir: () => this.projectDir,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
/** Streamed text as it arrives (not persisted; the completed message is). */
|
|
116
|
+
onLive(cb) {
|
|
117
|
+
this.liveListeners.add(cb);
|
|
118
|
+
return () => this.liveListeners.delete(cb);
|
|
119
|
+
}
|
|
120
|
+
/** A tool's progress as it runs (not persisted; the finished tool is a tool_call). */
|
|
121
|
+
onLiveItem(cb) {
|
|
122
|
+
this.itemListeners.add(cb);
|
|
123
|
+
return () => this.itemListeners.delete(cb);
|
|
124
|
+
}
|
|
125
|
+
/** Answer a structured question the agent is waiting on (needs_input with a requestId). */
|
|
126
|
+
async respondToUserInput(chat, requestId, answers) {
|
|
127
|
+
const service = this.providers?.service;
|
|
128
|
+
if (!service)
|
|
129
|
+
throw new Error(`${this.provider} agent "${this.id}" has no live session`);
|
|
130
|
+
await service.respondToUserInput(chat, this.id, requestId, answers);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Compact the chat's native context now. Codex has a request for it; Claude
|
|
134
|
+
* compacts on its `/compact` command, sent as a turn (t3code's
|
|
135
|
+
* `compaction: { type: "slash-command" }`).
|
|
136
|
+
*/
|
|
137
|
+
async compact(chat = MAIN_CHAT) {
|
|
138
|
+
if (this.provider === "claude-code")
|
|
139
|
+
return this.send({ text: "/compact", chat });
|
|
140
|
+
if (this._busy)
|
|
141
|
+
throw new Error(`${this.provider} agent "${this.id}" is busy`);
|
|
142
|
+
const { service } = await this.attach();
|
|
143
|
+
await service.ensureSession({ threadId: chat, instanceId: this.id, cwd: this.projectDir, runtimeMode: this.runtimeMode(),
|
|
144
|
+
...(this.options.model ? { model: this.options.model } : {}), onMissingSession: "fresh" });
|
|
145
|
+
await service.compact(chat, this.id);
|
|
146
|
+
}
|
|
147
|
+
get bin() {
|
|
148
|
+
return this.provider === "codex" ? codexBin(this.options.bin) : claudeBin(this.options.bin);
|
|
149
|
+
}
|
|
150
|
+
async available() {
|
|
151
|
+
const bin = this.bin;
|
|
152
|
+
return bin ? cliAvailable(bin) : false;
|
|
153
|
+
}
|
|
154
|
+
/** Installed, and (Codex) signed in — asked of the CLI itself, no turn spent. */
|
|
155
|
+
async selfCheck() {
|
|
156
|
+
const bin = this.bin;
|
|
157
|
+
const name = this.provider === "codex" ? "codex" : "claude";
|
|
158
|
+
if (!bin)
|
|
159
|
+
return [{ name: "installed", ok: false, detail: `${name} CLI not found — install it${this.provider === "codex" ? " or open Codex.app once" : ""}` }];
|
|
160
|
+
const v = await cliOutput(bin, ["--version"]);
|
|
161
|
+
const checks = [
|
|
162
|
+
{ name: "installed", ok: v?.code === 0, detail: v?.code === 0 ? firstLine(v.out) || bin : `${name} didn't answer --version` },
|
|
163
|
+
];
|
|
164
|
+
if (this.provider === "codex") {
|
|
165
|
+
const s = await cliOutput(bin, ["login", "status"]);
|
|
166
|
+
checks.push({
|
|
167
|
+
name: "signed in",
|
|
168
|
+
ok: s?.code === 0,
|
|
169
|
+
detail: s ? firstLine(s.out) || (s.code === 0 ? "signed in" : "not signed in — run: codex login") : "couldn't ask codex",
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
return checks;
|
|
173
|
+
}
|
|
174
|
+
async start() {
|
|
175
|
+
this.emit({ kind: "status", payload: { state: "ready" } });
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Register this agent's adapter with its directory's service, once. A
|
|
179
|
+
* rebuilt agent with the same id (a model or permission change) takes over:
|
|
180
|
+
* the previous instance is stopped first, and its sessions resume here.
|
|
181
|
+
*/
|
|
182
|
+
async attach() {
|
|
183
|
+
if (this.providers)
|
|
184
|
+
return { providers: this.providers, service: this.providers.service };
|
|
185
|
+
const providers = acquireProviders(this.projectDir, () => String(this.options.loomProject ?? ""));
|
|
186
|
+
const previous = providers.owners.get(this.id);
|
|
187
|
+
if (previous && previous !== this) {
|
|
188
|
+
try {
|
|
189
|
+
await previous.stop();
|
|
190
|
+
}
|
|
191
|
+
catch (error) {
|
|
192
|
+
releaseProviders(this.projectDir, providers);
|
|
193
|
+
throw error;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// A concurrent attach may have finished while the previous owner stopped.
|
|
197
|
+
const attached = this.providers;
|
|
198
|
+
if (attached) {
|
|
199
|
+
releaseProviders(this.projectDir, providers);
|
|
200
|
+
return { providers: attached, service: attached.service };
|
|
201
|
+
}
|
|
202
|
+
const mcpServers = () => this.mcp?.servers ?? [];
|
|
203
|
+
const adapter = this.provider === "codex"
|
|
204
|
+
? new CodexProviderAdapter(this.id, { ...(this.options.bin ? { bin: this.options.bin } : {}),
|
|
205
|
+
...(this.options.extraArgs ? { extraArgs: this.options.extraArgs } : {}), ...(this.options.sandbox ? { sandbox: this.options.sandbox } : {}),
|
|
206
|
+
mcpConfig: () => Object.fromEntries(mcpServers().map(s => [`mcp_servers.${s.key}`, codexMcpServer(s.entry)])) })
|
|
207
|
+
: new ClaudeProviderAdapter(this.id, { ...(this.options.bin ? { bin: this.options.bin } : {}),
|
|
208
|
+
...(this.options.extraArgs ? { extraArgs: this.options.extraArgs } : {}),
|
|
209
|
+
...(this.options.permissionMode ? { permissionMode: this.options.permissionMode } : {}),
|
|
210
|
+
mcpServers: () => Object.fromEntries(mcpServers().map(s => [s.key, claudeMcpServer(s.entry)])), canAsk: hasApprovalBroker });
|
|
211
|
+
providers.service.register(adapter);
|
|
212
|
+
providers.owners.set(this.id, this);
|
|
213
|
+
providers.busy.set(this.id, () => this.current?.chat);
|
|
214
|
+
this.unsubscribe = providers.service.onEvent(event => { if (event.instanceId === this.id)
|
|
215
|
+
this.observe(event); });
|
|
216
|
+
this.providers = providers;
|
|
217
|
+
this.adapter = adapter;
|
|
218
|
+
this.migrateLegacySession(providers.service);
|
|
219
|
+
return { providers, service: providers.service };
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Before warm sessions, one native session per agent was kept in the
|
|
223
|
+
* project state. It becomes the main chat's binding, so an upgrade resumes
|
|
224
|
+
* the conversation instead of starting over.
|
|
225
|
+
*/
|
|
226
|
+
migrateLegacySession(service) {
|
|
227
|
+
const legacy = this.nativeState.read().sessionId;
|
|
228
|
+
if (typeof legacy !== "string" || !legacy)
|
|
229
|
+
return;
|
|
230
|
+
if (!service.directory.get(MAIN_CHAT, this.id)) {
|
|
231
|
+
service.directory.upsert({ threadId: MAIN_CHAT, instanceId: this.id, provider: this.provider, status: "stopped",
|
|
232
|
+
resumeCursor: legacy, runtimePayload: { cwd: this.projectDir }, runtimeMode: this.runtimeMode() });
|
|
233
|
+
}
|
|
234
|
+
this.nativeState.patch({ sessionId: undefined });
|
|
235
|
+
}
|
|
236
|
+
runtimeMode() {
|
|
237
|
+
return runtimeModeFor(permissionFor(this.provider, this.options));
|
|
238
|
+
}
|
|
239
|
+
observe(event) {
|
|
240
|
+
this.ingestion.ingest(event);
|
|
241
|
+
this.trackCommands(event);
|
|
242
|
+
const cur = this.current;
|
|
243
|
+
if (!cur?.watching || event.threadId !== cur.chat)
|
|
244
|
+
return;
|
|
245
|
+
if ((event.type === "turn.completed" || event.type === "turn.aborted") && event.turnId)
|
|
246
|
+
cur.ended.set(event.turnId, event);
|
|
247
|
+
else if (event.type === "session.exited")
|
|
248
|
+
cur.exited = event;
|
|
249
|
+
else
|
|
250
|
+
return;
|
|
251
|
+
cur.wake?.();
|
|
252
|
+
}
|
|
253
|
+
/** Commands still running per chat: a turn is settled only once none are. */
|
|
254
|
+
running = new Map();
|
|
255
|
+
commandsIdle = new Map();
|
|
256
|
+
trackCommands(event) {
|
|
257
|
+
if (event.type === "session.exited") {
|
|
258
|
+
this.running.delete(event.threadId);
|
|
259
|
+
this.commandsIdle.get(event.threadId)?.();
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
if ((event.type !== "item.started" && event.type !== "item.completed") || event.payload.itemType !== "command_execution" || !event.itemId)
|
|
263
|
+
return;
|
|
264
|
+
const set = this.running.get(event.threadId) ?? new Set();
|
|
265
|
+
if (event.type === "item.started")
|
|
266
|
+
set.add(event.itemId);
|
|
267
|
+
else
|
|
268
|
+
set.delete(event.itemId);
|
|
269
|
+
if (set.size)
|
|
270
|
+
this.running.set(event.threadId, set);
|
|
271
|
+
else {
|
|
272
|
+
this.running.delete(event.threadId);
|
|
273
|
+
this.commandsIdle.get(event.threadId)?.();
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Turn-level settlement: the harness said the turn is done and no command
|
|
278
|
+
* it started is still running. Resolves false when commands are still
|
|
279
|
+
* running at the deadline.
|
|
280
|
+
*/
|
|
281
|
+
async commandsSettled(chat, timeoutMs = 60_000) {
|
|
282
|
+
if (!this.running.get(chat)?.size)
|
|
283
|
+
return true;
|
|
284
|
+
return new Promise(resolve => {
|
|
285
|
+
const timer = setTimeout(() => { this.commandsIdle.delete(chat); resolve(false); }, timeoutMs);
|
|
286
|
+
timer.unref();
|
|
287
|
+
this.commandsIdle.set(chat, () => { clearTimeout(timer); this.commandsIdle.delete(chat); resolve(true); });
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
async send(input) {
|
|
291
|
+
if (this._busy)
|
|
292
|
+
throw new Error(`${this.provider} agent "${this.id}" is busy`);
|
|
293
|
+
const bin = this.bin;
|
|
294
|
+
if (!bin)
|
|
295
|
+
throw new NativeDispatchRejected(this.provider === "codex" ? "codex CLI not found — install it or open Codex.app once"
|
|
296
|
+
: "claude CLI not found — install Claude Code or set its path");
|
|
297
|
+
this._busy = true;
|
|
298
|
+
this.beginContinuity(input);
|
|
299
|
+
const chat = input.chat ?? MAIN_CHAT;
|
|
300
|
+
const cur = { chat, interrupted: false, ended: new Map(), watching: false };
|
|
301
|
+
this.current = cur;
|
|
302
|
+
let release;
|
|
303
|
+
this.settled = new Promise(resolve => { release = resolve; });
|
|
304
|
+
let submitted = false;
|
|
305
|
+
try {
|
|
306
|
+
const { service } = await this.attach();
|
|
307
|
+
const runtimeMode = this.runtimeMode();
|
|
308
|
+
const model = input.model ?? this.options.model;
|
|
309
|
+
const effort = this.options.effort;
|
|
310
|
+
if (input.continuity)
|
|
311
|
+
await this.bindContinuity(service, chat, input.continuity.nativeSessionId);
|
|
312
|
+
await this.applyMcp(service, chat, input.mcp);
|
|
313
|
+
if (cur.interrupted)
|
|
314
|
+
throw new NativeDispatchRejected("interrupted before the turn started");
|
|
315
|
+
// Codex has no per-turn system channel and a warm Claude session's system
|
|
316
|
+
// prompt is fixed, so a briefing rides in front of the text, framed as an
|
|
317
|
+
// unmissable block (see frameBriefing).
|
|
318
|
+
const text = input.continuity
|
|
319
|
+
? [input.continuity.context, input.briefing, input.text].filter(Boolean).join("\n\n")
|
|
320
|
+
: input.briefing ? `${frameBriefing(input.briefing)}\n\n${input.text}` : input.text;
|
|
321
|
+
if (input.continuity)
|
|
322
|
+
this.ingestion.tagTurn(chat, this.id, { loomRunId: input.continuity.runId,
|
|
323
|
+
loomBindingId: input.continuity.bindingId, loomSessionEpoch: input.continuity.sessionEpoch });
|
|
324
|
+
let result;
|
|
325
|
+
cur.watching = true;
|
|
326
|
+
try {
|
|
327
|
+
result = await service.sendTurn({ threadId: chat, instanceId: this.id, input: text, cwd: this.projectDir, runtimeMode,
|
|
328
|
+
...(model ? { model } : {}), ...(effort ? { effort } : {}),
|
|
329
|
+
...(model || effort ? { modelSelection: { ...(model ? { model } : {}), ...(effort ? { effort } : {}) } } : {}),
|
|
330
|
+
...(input.interactionMode ? { interactionMode: input.interactionMode } : {}),
|
|
331
|
+
onMissingSession: input.continuity ? "fail" : "fresh",
|
|
332
|
+
...(input.continuity ? { clientTurnId: input.continuity.runId } : {}) });
|
|
333
|
+
}
|
|
334
|
+
catch (error) {
|
|
335
|
+
this.ingestion.untagTurn(chat, this.id);
|
|
336
|
+
const failure = this.dispatchError(error, Boolean(input.continuity));
|
|
337
|
+
// A lost session is Brain's to rebuild, not an error to show.
|
|
338
|
+
if (!(failure instanceof NativeSessionMissing) && !cur.interrupted) {
|
|
339
|
+
const stderr = isProviderError(error) ? error.details.stderr : undefined;
|
|
340
|
+
this.emit({ kind: "error", payload: { message: failure.message, ...(stderr ? { stderr: stderr.slice(-2000) } : {}) } });
|
|
341
|
+
}
|
|
342
|
+
throw failure;
|
|
343
|
+
}
|
|
344
|
+
submitted = true;
|
|
345
|
+
this.sessionMcp.set(chat, JSON.stringify(input.mcp?.servers ?? []));
|
|
346
|
+
cur.turnId = result.turnId;
|
|
347
|
+
if (cur.interrupted)
|
|
348
|
+
await service.interruptTurn(chat, this.id, result.turnId).catch(() => { });
|
|
349
|
+
const end = await this.turnEnd(cur, result.turnId);
|
|
350
|
+
// Turn-level settlement (the session stays warm): the harness reported
|
|
351
|
+
// the turn done, and no command it started is still running. A command
|
|
352
|
+
// that won't finish leaves Brain's outcome unproven.
|
|
353
|
+
// Brain waits up to a minute for proof; an ordinary turn moves on after a
|
|
354
|
+
// few seconds, since a harness can end a turn with a command it abandoned.
|
|
355
|
+
const settleMs = typeof this.options.commandSettleMs === "number" ? this.options.commandSettleMs : input.continuity ? 60_000 : 5_000;
|
|
356
|
+
if (!(await this.commandsSettled(chat, settleMs)) && input.continuity)
|
|
357
|
+
throw new NativeQuiescenceUnknown(`${this.provider} reported the turn done while a command is still running; quiescence unknown`);
|
|
358
|
+
if (end.type === "turn.completed") {
|
|
359
|
+
// A failed turn is already in the log as an error. Brain also needs to
|
|
360
|
+
// hear it from send(); outside continuity the error event ends the turn.
|
|
361
|
+
if (end.payload.state === "failed" && input.continuity)
|
|
362
|
+
throw new Error(`${this.provider} reported a failed turn${end.payload.errorMessage ? `: ${end.payload.errorMessage}` : ""}`);
|
|
363
|
+
return;
|
|
364
|
+
}
|
|
365
|
+
if (end.type === "turn.aborted")
|
|
366
|
+
throw new Error(end.payload.reason);
|
|
367
|
+
// The session went away with no word on the turn.
|
|
368
|
+
const message = `${this.provider} session ended before the turn completed; native outcome is unknown`;
|
|
369
|
+
this.emit({ kind: "error", payload: { message } });
|
|
370
|
+
throw new Error(message);
|
|
371
|
+
}
|
|
372
|
+
catch (error) {
|
|
373
|
+
if (cur.interrupted && !submitted && !(error instanceof NativeSessionMissing)) {
|
|
374
|
+
// Stopped before any prompt reached the harness: interrupted, not failed.
|
|
375
|
+
this.emit({ kind: "status", payload: { state: "interrupted" } });
|
|
376
|
+
if (input.continuity)
|
|
377
|
+
throw error instanceof NativeDispatchRejected ? error : new NativeDispatchRejected("interrupted before the turn started");
|
|
378
|
+
return;
|
|
379
|
+
}
|
|
380
|
+
throw error;
|
|
381
|
+
}
|
|
382
|
+
finally {
|
|
383
|
+
this.current = null;
|
|
384
|
+
this._busy = false;
|
|
385
|
+
this.endContinuity();
|
|
386
|
+
release();
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
/** Wait for the turn's terminal event, or the session's exit. */
|
|
390
|
+
turnEnd(cur, turnId) {
|
|
391
|
+
return new Promise(resolve => {
|
|
392
|
+
const check = () => {
|
|
393
|
+
const end = cur.ended.get(turnId) ?? cur.exited;
|
|
394
|
+
if (end) {
|
|
395
|
+
cur.wake = undefined;
|
|
396
|
+
resolve(end);
|
|
397
|
+
}
|
|
398
|
+
};
|
|
399
|
+
cur.wake = check;
|
|
400
|
+
check();
|
|
401
|
+
});
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* A continuity turn runs on the native session its binding names. A live
|
|
405
|
+
* session on any other native session (or any live session, when the binding
|
|
406
|
+
* wants a fresh one) is stopped first, and the directory is pointed at the
|
|
407
|
+
* binding's session.
|
|
408
|
+
*/
|
|
409
|
+
async bindContinuity(service, chat, nativeSessionId) {
|
|
410
|
+
const live = service.listSessions().find(s => s.threadId === chat && s.instanceId === this.id);
|
|
411
|
+
if (live && live.resumeCursor === nativeSessionId && nativeSessionId !== null)
|
|
412
|
+
return;
|
|
413
|
+
if (live)
|
|
414
|
+
await service.stopSession(chat, this.id);
|
|
415
|
+
const binding = service.directory.get(chat, this.id);
|
|
416
|
+
if ((binding?.resumeCursor ?? null) !== nativeSessionId) {
|
|
417
|
+
service.directory.upsert({ threadId: chat, instanceId: this.id, provider: this.provider, status: "stopped",
|
|
418
|
+
resumeCursor: nativeSessionId, runtimePayload: { cwd: this.projectDir }, runtimeMode: this.runtimeMode() });
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
/** A session started with other MCP servers restarts (and resumes) with these. */
|
|
422
|
+
async applyMcp(service, chat, mcp) {
|
|
423
|
+
this.mcp = mcp;
|
|
424
|
+
const wanted = JSON.stringify(mcp?.servers ?? []);
|
|
425
|
+
const had = this.sessionMcp.get(chat);
|
|
426
|
+
if (had !== undefined && had !== wanted && this.adapter?.hasSession(chat))
|
|
427
|
+
await service.stopSession(chat, this.id);
|
|
428
|
+
}
|
|
429
|
+
/** A provider error as the runtime and Brain understand dispatch failures. */
|
|
430
|
+
dispatchError(error, continuity) {
|
|
431
|
+
if (!isProviderError(error))
|
|
432
|
+
return error instanceof Error ? error : new Error(String(error));
|
|
433
|
+
if (error.code === "session_missing") {
|
|
434
|
+
return continuity ? new NativeSessionMissing(error.message) : new NativeDispatchRejected(error.message);
|
|
435
|
+
}
|
|
436
|
+
if (error.notSubmitted)
|
|
437
|
+
return new NativeDispatchRejected(error.message);
|
|
438
|
+
return new Error(/native outcome is unknown/.test(error.message) ? error.message : `${error.message}; native outcome is unknown`);
|
|
439
|
+
}
|
|
440
|
+
async interrupt() {
|
|
441
|
+
const cur = this.current;
|
|
442
|
+
if (!cur)
|
|
443
|
+
return;
|
|
444
|
+
cur.interrupted = true;
|
|
445
|
+
const service = this.providers?.service;
|
|
446
|
+
if (service && cur.turnId)
|
|
447
|
+
await service.interruptTurn(cur.chat, this.id, cur.turnId).catch(() => { });
|
|
448
|
+
const settled = this.settled ?? Promise.resolve();
|
|
449
|
+
const within = (ms) => Promise.race([settled.then(() => true), new Promise(resolve => setTimeout(() => resolve(false), ms).unref())]);
|
|
450
|
+
if (await within(15_000))
|
|
451
|
+
return;
|
|
452
|
+
// The harness did not stop the turn: end its session (and process group).
|
|
453
|
+
if (service)
|
|
454
|
+
await service.stopSession(cur.chat, this.id).catch(() => { });
|
|
455
|
+
if (!(await within(10_000)))
|
|
456
|
+
throw new NativeQuiescenceUnknown(`${this.provider} did not stop after interruption; quiescence unknown`);
|
|
457
|
+
}
|
|
458
|
+
async stop() {
|
|
459
|
+
await this.interrupt();
|
|
460
|
+
const providers = this.providers;
|
|
461
|
+
if (!providers)
|
|
462
|
+
return;
|
|
463
|
+
this.providers = null;
|
|
464
|
+
this.adapter = null;
|
|
465
|
+
try {
|
|
466
|
+
await providers.service.unregister(this.id);
|
|
467
|
+
}
|
|
468
|
+
finally {
|
|
469
|
+
this.unsubscribe?.();
|
|
470
|
+
this.unsubscribe = null;
|
|
471
|
+
if (providers.owners.get(this.id) === this) {
|
|
472
|
+
providers.owners.delete(this.id);
|
|
473
|
+
providers.busy.delete(this.id);
|
|
474
|
+
}
|
|
475
|
+
releaseProviders(this.projectDir, providers);
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
/** Claude Code as a Loom agent (the SDK's historical name). */
|
|
480
|
+
export class ClaudeCodeAdapter extends ProviderAgent {
|
|
481
|
+
constructor(id, projectDir, options = {}) { super(id, "claude-code", projectDir, options); }
|
|
482
|
+
}
|
|
483
|
+
/** Codex as a Loom agent. */
|
|
484
|
+
export class CodexAdapter extends ProviderAgent {
|
|
485
|
+
constructor(id, projectDir, options = {}) { super(id, "codex", projectDir, options); }
|
|
486
|
+
}
|
|
487
|
+
//# sourceMappingURL=agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/providers/agent.ts"],"names":[],"mappings":"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"}
|