@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
package/docs/teams.md
ADDED
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# Loom Teams: a user's guide
|
|
2
|
+
|
|
3
|
+
Several people, each with their own agents, on one GitHub repo. This guide is
|
|
4
|
+
the how-to; [teams-architecture.md](teams-architecture.md) has the why.
|
|
5
|
+
|
|
6
|
+
## 0. One link (the easy way)
|
|
7
|
+
|
|
8
|
+
In a project, click **Invite** or run `loom invite`. You get one https link.
|
|
9
|
+
Your teammate opens it and Loom does the rest:
|
|
10
|
+
|
|
11
|
+
1. signs them in with GitHub
|
|
12
|
+
2. joins the team
|
|
13
|
+
3. clones the repo (for a private repo, your Loom grants them access when they join)
|
|
14
|
+
4. opens it with the agents installed on their machine
|
|
15
|
+
5. shares it with the team
|
|
16
|
+
6. sets up your crews
|
|
17
|
+
|
|
18
|
+
Without Loom, the page shows one command that installs it and joins. From a
|
|
19
|
+
terminal, `loom join '<link>'` does the same.
|
|
20
|
+
|
|
21
|
+
`loom invite` creates the team (named after the project) and shares the repo if
|
|
22
|
+
you haven't yet. The link is single-use, expires in 24 hours and carries the
|
|
23
|
+
team key, so send it to one person, privately. Repo access is granted with your
|
|
24
|
+
`gh` and needs admin rights on the repo. Without them, Loom says so and you add
|
|
25
|
+
the teammate on GitHub yourself.
|
|
26
|
+
|
|
27
|
+
The links point at `https://nickthelegend.github.io/loom/join/` (`site/join/`).
|
|
28
|
+
Set `LOOM_JOIN_URL` to host the page somewhere else. It is static: the invite
|
|
29
|
+
lives in the URL's `#fragment`, which browsers never send to a server.
|
|
30
|
+
|
|
31
|
+
## 1. Set up a team
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
loom team signin # the hosted hub, with your GitHub account
|
|
35
|
+
# or a self-hosted hub: loom hub --host 0.0.0.0 --secret <s> (on one machine)
|
|
36
|
+
# loom team signin http://<host>:7430 --secret <s>
|
|
37
|
+
loom team create "Acme"
|
|
38
|
+
loom team invite # a one-time link — it carries the team key; send it like a password
|
|
39
|
+
loom team join '<link>' # on a teammate's machine
|
|
40
|
+
loom team share # in a project: its GitHub repo is now shared with the team
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
No browser on the machine? `loom team signin --paste` prints a link to open
|
|
44
|
+
anywhere and asks for the address you land on.
|
|
45
|
+
|
|
46
|
+
## 2. See each other (Phase 1)
|
|
47
|
+
|
|
48
|
+
`loom team` shows who is running what, right now: agents, goals, branches and
|
|
49
|
+
the files each task declared, plus a feed of goals, plans, PRs and CI. You see
|
|
50
|
+
your teammates' intent (goal and task titles), never their prompts or
|
|
51
|
+
transcripts. Content is encrypted to the team; the hub can't read it.
|
|
52
|
+
|
|
53
|
+
## 3. Don't collide (Phase 2)
|
|
54
|
+
|
|
55
|
+
On a shared project every orchestra task declares the files it will `touch`.
|
|
56
|
+
When a teammate's goal already holds some of them, the orchestrator must decide
|
|
57
|
+
before the task starts: wait for their PR, narrow, or proceed with a reason the
|
|
58
|
+
team sees. `loom.team.json` on your default branch holds the team's rules:
|
|
59
|
+
|
|
60
|
+
```jsonc
|
|
61
|
+
{
|
|
62
|
+
"hardZones": ["db/migrations/**", "package-lock.json"], // one goal at a time
|
|
63
|
+
"permissions": { "ceiling": "auto", "bypassRequiresPlan": true },
|
|
64
|
+
"agents": { "allow": ["claude-code", "codex"] },
|
|
65
|
+
"delivery": { "protected": ["main"], "stack": "auto" },
|
|
66
|
+
"orchestra": { "maxParallelPerMember": 6, "teamMaxConcurrentAgents": 20 },
|
|
67
|
+
"landing": { "fastTest": "npm test -- --changed", "timeoutMin": 10, "autoFixAttempts": 2 },
|
|
68
|
+
"review": { "enabled": true, "maxRuns": 3 },
|
|
69
|
+
"budgets": { "perGoalUsd": 15, "perMemberDailyUsd": 60 },
|
|
70
|
+
"runners": { "shared": true, "permissions": "bypass" }
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Changing it takes a reviewed PR; a local copy can only make it stricter.
|
|
75
|
+
|
|
76
|
+
## 4. One brain (Phase 3)
|
|
77
|
+
|
|
78
|
+
What one member's agents learn reaches everyone's briefings, labelled by how
|
|
79
|
+
sure to be: team canon, confirmed by 2+, your own, a teammate's proposal.
|
|
80
|
+
`loom team brain` shows the team's memories and an inbox of contradictions,
|
|
81
|
+
duplicates and corrections. `loom team brain promote <id>` proposes a memory as
|
|
82
|
+
canon: it goes into `AGENTS.md` on one rolling `loom/canon` PR, reviewed like
|
|
83
|
+
code, and then every agent reads it, Loom or not.
|
|
84
|
+
|
|
85
|
+
## 5. Land safely (Phase 4)
|
|
86
|
+
|
|
87
|
+
Deliver goals as PRs (`git.delivery: "pr"`). Your daemon then watches them:
|
|
88
|
+
|
|
89
|
+
- a failing required check is rerun once; a pass on rerun is labelled flaky;
|
|
90
|
+
- a real failure goes back to the goal's agents, who fix it on the same PR
|
|
91
|
+
(twice at most, then your phone buzzes);
|
|
92
|
+
- an agent from a different vendor reviews the PR and posts `loom/review`;
|
|
93
|
+
- `loom land` (or the Land button) merges fresh main in, runs the fast tests,
|
|
94
|
+
pushes, and asks GitHub to merge when approvals and checks pass.
|
|
95
|
+
|
|
96
|
+
`loom team doctor` checks the repo for merge-queue traps and offers a fix PR.
|
|
97
|
+
`loom team landing` lists goal PRs, and teammates' goals that need someone:
|
|
98
|
+
`loom team adopt <pr>` takes one over and hands it back when it's green.
|
|
99
|
+
|
|
100
|
+
### Phase 6: landing in turn, and hearing GitHub at once
|
|
101
|
+
|
|
102
|
+
**No merge queue? Land still lands one at a time.** On a repo without GitHub's
|
|
103
|
+
merge queue, Land joins Loom's landing train. Each goal waits for its lane,
|
|
104
|
+
then takes its turn: fresh main merged in, the fast tests, a push, green checks
|
|
105
|
+
on that exact commit, then Loom merges it (`gh pr merge --squash`). The next goal
|
|
106
|
+
in the lane goes after that, on top of it. A goal in the queue shows **queued**
|
|
107
|
+
("waiting behind bob's goal in lane api"). If a check fails on its turn, the lane
|
|
108
|
+
moves on to the next goal, and yours rejoins by itself once it's green again.
|
|
109
|
+
|
|
110
|
+
Lanes are path scopes. Goals in different lanes land at the same time; a goal
|
|
111
|
+
that touches two lanes waits for both. With no lanes, everything shares `main`.
|
|
112
|
+
|
|
113
|
+
```jsonc
|
|
114
|
+
// loom.team.json
|
|
115
|
+
{ "landing": { "fastTest": "npm test -- --changed",
|
|
116
|
+
"lanes": { "web": ["web/**"], "api": ["api/**", "db/**"] } } }
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
With a merge queue on the branch, Land works as in Phase 4: GitHub's queue does
|
|
120
|
+
this job.
|
|
121
|
+
|
|
122
|
+
**Webhooks: CI results the moment they happen.** Without them, Loom learns
|
|
123
|
+
about PRs and checks by polling `gh` (every 30–60 s). A repo webhook pushes them
|
|
124
|
+
to the hub instead, and your daemon reacts to a failed check or a merge right
|
|
125
|
+
away. Team owners set it up once per repo:
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
loom team webhook # prints the payload URL and the secret
|
|
129
|
+
loom team webhook --install # or creates the webhook with gh (needs repo admin)
|
|
130
|
+
loom team webhook --rotate # new secret; update the repo's webhook after
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
A self-hosted hub must be reachable from GitHub for this (a public host or a
|
|
134
|
+
tunnel). The hosted hub receives webhooks through a Supabase Edge Function.
|
|
135
|
+
Polling keeps running either way, and nothing shows up twice.
|
|
136
|
+
|
|
137
|
+
## 6. Runners (Phase 5)
|
|
138
|
+
|
|
139
|
+
A runner is your own always-on Loom (a VPS, a home server, a container) that
|
|
140
|
+
takes your goals while your laptop sleeps.
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
loom runner pair # on your laptop: a one-time link (it carries your team keys)
|
|
144
|
+
loom runner join '<link>' # on the box — then keep it up: loom runner install
|
|
145
|
+
loom runner token github_pat_… # a fine-grained token: contents + pull requests on the shared repos
|
|
146
|
+
loom runner doctor # checks the token isn't broader than that
|
|
147
|
+
loom runner goal "Add rate limiting" # start a goal there
|
|
148
|
+
loom runner move <runId> # move a running goal; `loom runner back <runId>` brings it home
|
|
149
|
+
loom runner jobs # runners and what they're doing
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Or run it in Docker: `docker build -f Dockerfile.runner -t loom-runner .`
|
|
153
|
+
|
|
154
|
+
On Windows use `loom.cmd runner install`. It adds **Loom Runner.vbs** to your
|
|
155
|
+
account's Startup folder and starts the daemon immediately, without elevation.
|
|
156
|
+
The script uses your installed Node and preserves `LOOM_HOME`. Remove that
|
|
157
|
+
file from `%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup` to disable
|
|
158
|
+
login startup. If Windows Script Host is disabled by your organization, run
|
|
159
|
+
`loom.cmd up` manually. Windows login startup does not restart a daemon after
|
|
160
|
+
a crash; run `loom.cmd up` again in that case.
|
|
161
|
+
|
|
162
|
+
Each goal gets a fresh clone (a fresh container when Docker runs), and agents
|
|
163
|
+
get a scrubbed environment with only their logins and the token. If a goal of
|
|
164
|
+
yours needs a CI fix and you've been offline 15 minutes, your runner takes it.
|
|
165
|
+
|
|
166
|
+
## 7. Deploys and release notes
|
|
167
|
+
|
|
168
|
+
`loom team deploys` lists deployments; results show in the team feed, and a
|
|
169
|
+
failed deploy containing your goal alerts your phone. `loom team
|
|
170
|
+
release-notes v1.2.0` writes notes for everything merged since that tag,
|
|
171
|
+
grouped by member. GitHub Environments stay the deploy gate: Loom never deploys.
|
package/docs/windows.md
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Windows setup and validation
|
|
2
|
+
|
|
3
|
+
Use native Windows Node.js 22.5 or newer and Git for Windows. WSL is optional.
|
|
4
|
+
|
|
5
|
+
```powershell
|
|
6
|
+
git clone https://github.com/nickthelegend/loom.git
|
|
7
|
+
cd loom
|
|
8
|
+
npm.cmd ci
|
|
9
|
+
npm.cmd link
|
|
10
|
+
loom.cmd --version
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
`scripts/install.ps1` performs a managed source installation. `LOOM_SRC`
|
|
14
|
+
chooses the checkout folder; `LOOM_REPO` chooses the repository. Use `loom.cmd`
|
|
15
|
+
when PowerShell's script policy prevents npm's `loom.ps1` shim from running.
|
|
16
|
+
|
|
17
|
+
In a project, run `loom.cmd init`, then `loom.cmd up`. Install and sign in to
|
|
18
|
+
the agents you want to use. npm-installed agents and native `.exe` agents are
|
|
19
|
+
supported; prompts are passed as literal arguments, including quotes,
|
|
20
|
+
newlines, spaces and shell characters. Commands you configure for tests and
|
|
21
|
+
transcription use `cmd.exe` on Windows, so write them in Windows shell syntax.
|
|
22
|
+
|
|
23
|
+
For OpenCode's current native Windows release:
|
|
24
|
+
|
|
25
|
+
```powershell
|
|
26
|
+
npm.cmd install -g opencode-ai@1.19.0
|
|
27
|
+
opencode.cmd --version
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Native continuity supports Codex, Claude Code and OpenCode on Windows. Enable
|
|
31
|
+
`brain.continuity` for sequential native chats. Loom probes Job Object assignment
|
|
32
|
+
on this host before admitting a native turn; a failed probe leaves it unavailable.
|
|
33
|
+
The native binding and delta context survive a daemon restart. Ship crews also
|
|
34
|
+
use native continuity when this mode is enabled; each teammate must use Codex,
|
|
35
|
+
Claude Code or OpenCode. Each seat keeps its own binding and a stable crew
|
|
36
|
+
checkout across goals. Native crew Fan-out admits parallel builders only in
|
|
37
|
+
separate workspaces. Parallel Orchestra still uses ordinary project mode.
|
|
38
|
+
|
|
39
|
+
Loom uses Koffi's packaged native binding; no local C++ toolchain is required on
|
|
40
|
+
supported Windows architectures. A Node bootstrap joins a kill-on-close Job Object
|
|
41
|
+
before it can launch the harness. Only the daemon retains a job handle. Shutdown
|
|
42
|
+
waits for Windows to report zero job members, including detached tool children;
|
|
43
|
+
a failed verification retains the continuity writer lease. Daemon crashes close
|
|
44
|
+
the handle and terminate contained processes. Shared pre-existing console hosts
|
|
45
|
+
are outside the job.
|
|
46
|
+
|
|
47
|
+
Antigravity's Windows installer and default `%LOCALAPPDATA%\agy\bin` location
|
|
48
|
+
follow its [official installation guide](https://www.antigravity.google/docs/cli/install/).
|
|
49
|
+
|
|
50
|
+
The terminal uses ConPTY when node-pty loads, with a pipe fallback otherwise.
|
|
51
|
+
The dependency is pinned to `node-pty` 1.2.0-beta.15, which includes Microsoft's
|
|
52
|
+
[fix for simultaneous Windows terminal exits](https://github.com/microsoft/node-pty/pull/922).
|
|
53
|
+
The stable 1.1.0 release still contains that native race. Terminal shutdown waits
|
|
54
|
+
for shell exit, and late callbacks from an old shell cannot close its replacement.
|
|
55
|
+
Both paths are exercised in CI. The pipe terminal preserves its shell session
|
|
56
|
+
when interrupting a foreground process. Windows console hosts are excluded
|
|
57
|
+
from ordinary process-tree shutdown.
|
|
58
|
+
|
|
59
|
+
`loom.cmd runner install` uses your Windows Startup folder. See
|
|
60
|
+
[runner setup](teams.md#6-runners-phase-5) for its lifecycle and removal command.
|
|
61
|
+
|
|
62
|
+
## Verified workflows
|
|
63
|
+
|
|
64
|
+
- A live Codex conductor ran parallel workers in separate Git worktrees,
|
|
65
|
+
reviewed and integrated their changes, ran a follow-up verification task,
|
|
66
|
+
and applied the result. All four resulting Node tests passed.
|
|
67
|
+
- Scripted crew tests cover planning, claims, review, test, apply, questions,
|
|
68
|
+
stop and restart. They use fake agents so CI never spends agent tokens.
|
|
69
|
+
- Real Windows terminal checks cover TTY detection, resize, interrupt and
|
|
70
|
+
scrollback. The UI tests exercise an Orchestra turn finishing before the
|
|
71
|
+
WebSocket subscribes, so the thread recovers its missing history.
|
|
72
|
+
- Clean phone dependency installation, type checking and 73 phone tests pass
|
|
73
|
+
on Windows. This does not substitute for running the app on a phone.
|
|
74
|
+
- The Electron desktop builds as an unpacked app and an NSIS installer. A
|
|
75
|
+
cold packaged launch starts the daemon and opens the web workspace.
|
|
76
|
+
- CI runs the full backend and DOM suites on Windows and Ubuntu, on Node 22
|
|
77
|
+
and 24, with both ConPTY/PTY and pipe terminal modes.
|
|
78
|
+
|
|
79
|
+
## Support limits
|
|
80
|
+
|
|
81
|
+
Desktop installers are currently unsigned. Trusted signing and an installed
|
|
82
|
+
release-to-release update check are still required for issue #70. Hosted
|
|
83
|
+
Supabase authentication and cloud sharing need their own deployment and
|
|
84
|
+
acceptance checks; local Windows tests do not establish that those hosted
|
|
85
|
+
features work.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loompad/cli",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1.1.1",
|
|
4
4
|
"description": "Loom — local-first control plane for coding agents: one CLI, shared memory, baton handoffs and routes across Claude Code, OpenCode, and friends.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -27,9 +27,11 @@
|
|
|
27
27
|
],
|
|
28
28
|
"files": [
|
|
29
29
|
"dist",
|
|
30
|
-
"docs",
|
|
30
|
+
"docs/**/*.md",
|
|
31
|
+
"docs/refactoring/brain-benchmark*.json",
|
|
31
32
|
"CHANGELOG.md",
|
|
32
|
-
"ARCHITECTURE.md"
|
|
33
|
+
"ARCHITECTURE.md",
|
|
34
|
+
"THIRD_PARTY_NOTICES.md"
|
|
33
35
|
],
|
|
34
36
|
"engines": {
|
|
35
37
|
"node": ">=22.5.0"
|
|
@@ -45,26 +47,36 @@
|
|
|
45
47
|
"./sdk": "./dist/sdk.js"
|
|
46
48
|
},
|
|
47
49
|
"scripts": {
|
|
48
|
-
"build": "tsc",
|
|
49
|
-
"prepare": "
|
|
50
|
+
"build": "npm run build:web && tsc && node scripts/prune-dist.mjs",
|
|
51
|
+
"prepare": "npm run build",
|
|
50
52
|
"dev": "tsx src/cli/index.ts",
|
|
51
53
|
"typecheck": "tsc --noEmit",
|
|
52
|
-
"test": "
|
|
54
|
+
"test": "node scripts/test.mjs",
|
|
53
55
|
"test:watch": "vitest",
|
|
54
|
-
"
|
|
56
|
+
"test:all-parallel": "vitest run",
|
|
57
|
+
"verify:adapters": "node scripts/verify-adapters.mjs",
|
|
58
|
+
"build:web": "node scripts/build-web.mjs",
|
|
59
|
+
"predev": "npm run build:web"
|
|
55
60
|
},
|
|
56
61
|
"dependencies": {
|
|
62
|
+
"@anthropic-ai/claude-agent-sdk": "0.3.283",
|
|
63
|
+
"@noble/ciphers": "^2.4.0",
|
|
64
|
+
"@noble/curves": "^2.4.0",
|
|
65
|
+
"@noble/hashes": "^2.4.0",
|
|
66
|
+
"@supabase/supabase-js": "^2.116.0",
|
|
57
67
|
"@xterm/addon-fit": "^0.11.0",
|
|
58
68
|
"@xterm/addon-web-links": "^0.12.0",
|
|
59
69
|
"@xterm/xterm": "^6.0.0",
|
|
60
70
|
"commander": "^15.0.0",
|
|
61
71
|
"express": "^5.2.1",
|
|
62
72
|
"ink": "^7.1.0",
|
|
73
|
+
"koffi": "3.3.3",
|
|
63
74
|
"picocolors": "^1.1.1",
|
|
64
75
|
"qrcode": "^1.5.4",
|
|
65
76
|
"qrcode-terminal": "^0.12.0",
|
|
66
77
|
"react": "^19.2.7",
|
|
67
|
-
"ws": "^8.21.1"
|
|
78
|
+
"ws": "^8.21.1",
|
|
79
|
+
"zod": "4.6.5"
|
|
68
80
|
},
|
|
69
81
|
"devDependencies": {
|
|
70
82
|
"@types/express": "^5.0.6",
|
|
@@ -73,12 +85,13 @@
|
|
|
73
85
|
"@types/qrcode-terminal": "^0.12.2",
|
|
74
86
|
"@types/react": "^19.2.17",
|
|
75
87
|
"@types/ws": "^8.18.1",
|
|
88
|
+
"esbuild": "0.28.1",
|
|
76
89
|
"jsdom": "^29.1.1",
|
|
77
90
|
"tsx": "^4.23.1",
|
|
78
91
|
"typescript": "~5.9.0",
|
|
79
92
|
"vitest": "^4.1.10"
|
|
80
93
|
},
|
|
81
94
|
"optionalDependencies": {
|
|
82
|
-
"node-pty": "
|
|
95
|
+
"node-pty": "1.2.0-beta.15"
|
|
83
96
|
}
|
|
84
97
|
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Claude Code adapter — drives the `claude` CLI headless, one process per
|
|
3
|
-
* turn, resuming the same session id across turns.
|
|
4
|
-
*
|
|
5
|
-
* claude -p "<text>" --output-format stream-json --verbose
|
|
6
|
-
* [--resume <sessionId>] [--append-system-prompt <briefing>]
|
|
7
|
-
* --permission-mode <mode>
|
|
8
|
-
*
|
|
9
|
-
* Surface verified against claude 2.1.83 — see docs/integration-notes.md.
|
|
10
|
-
*/
|
|
11
|
-
import type { SendInput } from "../types.js";
|
|
12
|
-
import { AdapterBase } from "./base.js";
|
|
13
|
-
export declare class ClaudeCodeAdapter extends AdapterBase {
|
|
14
|
-
private child;
|
|
15
|
-
private options;
|
|
16
|
-
constructor(id: string, projectDir: string, options?: Record<string, unknown>);
|
|
17
|
-
private get sessionId();
|
|
18
|
-
private set sessionId(value);
|
|
19
|
-
private get bin();
|
|
20
|
-
available(): Promise<boolean>;
|
|
21
|
-
start(): Promise<void>;
|
|
22
|
-
stop(): Promise<void>;
|
|
23
|
-
send(input: SendInput): Promise<void>;
|
|
24
|
-
private handleStreamEvent;
|
|
25
|
-
interrupt(): Promise<void>;
|
|
26
|
-
}
|
|
@@ -1,209 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Claude Code adapter — drives the `claude` CLI headless, one process per
|
|
3
|
-
* turn, resuming the same session id across turns.
|
|
4
|
-
*
|
|
5
|
-
* claude -p "<text>" --output-format stream-json --verbose
|
|
6
|
-
* [--resume <sessionId>] [--append-system-prompt <briefing>]
|
|
7
|
-
* --permission-mode <mode>
|
|
8
|
-
*
|
|
9
|
-
* Surface verified against claude 2.1.83 — see docs/integration-notes.md.
|
|
10
|
-
*/
|
|
11
|
-
import { spawn } from "node:child_process";
|
|
12
|
-
import readline from "node:readline";
|
|
13
|
-
import { readProjectState, writeProjectState } from "../core/registry.js";
|
|
14
|
-
import { AdapterBase, agentEnv, cliAvailable } from "./base.js";
|
|
15
|
-
export class ClaudeCodeAdapter extends AdapterBase {
|
|
16
|
-
child = null;
|
|
17
|
-
options;
|
|
18
|
-
constructor(id, projectDir, options = {}) {
|
|
19
|
-
super(id, "claude-code", projectDir);
|
|
20
|
-
this.options = options;
|
|
21
|
-
}
|
|
22
|
-
get sessionId() {
|
|
23
|
-
const state = readProjectState(this.projectDir);
|
|
24
|
-
return state.agents[this.id]?.sessionId;
|
|
25
|
-
}
|
|
26
|
-
set sessionId(value) {
|
|
27
|
-
const state = readProjectState(this.projectDir);
|
|
28
|
-
state.agents[this.id] = { ...state.agents[this.id], sessionId: value };
|
|
29
|
-
writeProjectState(this.projectDir, state);
|
|
30
|
-
}
|
|
31
|
-
get bin() {
|
|
32
|
-
return this.options.bin ?? "claude";
|
|
33
|
-
}
|
|
34
|
-
async available() {
|
|
35
|
-
return cliAvailable(this.bin);
|
|
36
|
-
}
|
|
37
|
-
async start() {
|
|
38
|
-
this.emit({ kind: "status", payload: { state: "ready", session: this.sessionId ?? null } });
|
|
39
|
-
}
|
|
40
|
-
async stop() {
|
|
41
|
-
await this.interrupt();
|
|
42
|
-
}
|
|
43
|
-
async send(input) {
|
|
44
|
-
if (this._busy)
|
|
45
|
-
throw new Error(`claude-code agent "${this.id}" is busy`);
|
|
46
|
-
this._busy = true;
|
|
47
|
-
const started = Date.now();
|
|
48
|
-
const args = [
|
|
49
|
-
"-p",
|
|
50
|
-
input.text,
|
|
51
|
-
"--output-format",
|
|
52
|
-
"stream-json",
|
|
53
|
-
"--verbose",
|
|
54
|
-
"--permission-mode",
|
|
55
|
-
this.options.permissionMode ?? "acceptEdits",
|
|
56
|
-
];
|
|
57
|
-
if (this.sessionId)
|
|
58
|
-
args.push("--resume", this.sessionId);
|
|
59
|
-
if (input.briefing)
|
|
60
|
-
args.push("--append-system-prompt", input.briefing);
|
|
61
|
-
if (this.options.model)
|
|
62
|
-
args.push("--model", this.options.model);
|
|
63
|
-
if (this.options.extraArgs)
|
|
64
|
-
args.push(...this.options.extraArgs);
|
|
65
|
-
try {
|
|
66
|
-
await new Promise((resolve, reject) => {
|
|
67
|
-
const child = spawn(this.bin, args, {
|
|
68
|
-
cwd: this.projectDir,
|
|
69
|
-
stdio: ["ignore", "pipe", "pipe"],
|
|
70
|
-
env: agentEnv(),
|
|
71
|
-
});
|
|
72
|
-
this.child = child;
|
|
73
|
-
let lastAssistantText = "";
|
|
74
|
-
let sawResult = false;
|
|
75
|
-
let stderrTail = "";
|
|
76
|
-
const rl = readline.createInterface({ input: child.stdout });
|
|
77
|
-
rl.on("line", (line) => {
|
|
78
|
-
const trimmed = line.trim();
|
|
79
|
-
if (!trimmed.startsWith("{"))
|
|
80
|
-
return;
|
|
81
|
-
let evt;
|
|
82
|
-
try {
|
|
83
|
-
evt = JSON.parse(trimmed);
|
|
84
|
-
}
|
|
85
|
-
catch {
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
|
-
this.handleStreamEvent(evt, (t) => (lastAssistantText = t));
|
|
89
|
-
if (evt.type === "result")
|
|
90
|
-
sawResult = true;
|
|
91
|
-
});
|
|
92
|
-
child.stderr.on("data", (d) => {
|
|
93
|
-
stderrTail = (stderrTail + d.toString()).slice(-2000);
|
|
94
|
-
});
|
|
95
|
-
child.on("error", (err) => reject(err));
|
|
96
|
-
child.on("close", (code, signal) => {
|
|
97
|
-
this.child = null;
|
|
98
|
-
if (signal) {
|
|
99
|
-
this.emit({ kind: "status", payload: { state: "interrupted", signal } });
|
|
100
|
-
resolve();
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
if (code !== 0 && !sawResult) {
|
|
104
|
-
this.emit({
|
|
105
|
-
kind: "error",
|
|
106
|
-
payload: { message: `${this.bin} exited ${code}`, stderr: stderrTail },
|
|
107
|
-
});
|
|
108
|
-
reject(new Error(`${this.bin} exited ${code}: ${stderrTail.slice(0, 200)}`));
|
|
109
|
-
return;
|
|
110
|
-
}
|
|
111
|
-
// Blocked-on-human heuristic: the turn ended on a question.
|
|
112
|
-
if (/\?\s*$/.test(lastAssistantText.trim())) {
|
|
113
|
-
this.emit({
|
|
114
|
-
kind: "needs_input",
|
|
115
|
-
payload: { question: lastAssistantText.slice(-500) },
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
this.emit({
|
|
119
|
-
kind: "run_complete",
|
|
120
|
-
payload: { durationMs: Date.now() - started },
|
|
121
|
-
});
|
|
122
|
-
resolve();
|
|
123
|
-
});
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
finally {
|
|
127
|
-
this._busy = false;
|
|
128
|
-
this.child = null;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
handleStreamEvent(evt, setLastText) {
|
|
132
|
-
const type = evt.type;
|
|
133
|
-
if (type === "system" && evt.subtype === "init") {
|
|
134
|
-
const sid = evt.session_id;
|
|
135
|
-
if (sid)
|
|
136
|
-
this.sessionId = sid;
|
|
137
|
-
this.emit({ kind: "status", payload: { state: "turn_started", session: sid ?? null } });
|
|
138
|
-
return;
|
|
139
|
-
}
|
|
140
|
-
if (type === "assistant") {
|
|
141
|
-
const message = evt.message;
|
|
142
|
-
for (const block of message?.content ?? []) {
|
|
143
|
-
if (block.type === "text" && typeof block.text === "string" && block.text.trim()) {
|
|
144
|
-
setLastText(block.text);
|
|
145
|
-
this.emit({ kind: "message", payload: { text: block.text } });
|
|
146
|
-
}
|
|
147
|
-
else if (block.type === "thinking" && typeof block.thinking === "string" && block.thinking.trim()) {
|
|
148
|
-
// Extended thinking. Emitted as a reasoning-tagged message so the UI
|
|
149
|
-
// can fold it into its "thinking" block, the same shape codex and
|
|
150
|
-
// grok use. It never becomes lastAssistantText (that's the reply).
|
|
151
|
-
this.emit({ kind: "message", payload: { text: block.thinking, reasoning: true } });
|
|
152
|
-
}
|
|
153
|
-
else if (block.type === "tool_use") {
|
|
154
|
-
const name = String(block.name ?? "tool");
|
|
155
|
-
const input = (block.input ?? {});
|
|
156
|
-
this.emit({
|
|
157
|
-
kind: "tool_call",
|
|
158
|
-
payload: { tool: name, summary: summarizeToolInput(name, input) },
|
|
159
|
-
});
|
|
160
|
-
const path = input.file_path ?? input.notebook_path;
|
|
161
|
-
if (["Edit", "Write", "NotebookEdit", "MultiEdit"].includes(name) && path) {
|
|
162
|
-
this.emit({ kind: "file_edit", payload: { path: String(path), tool: name } });
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
return;
|
|
167
|
-
}
|
|
168
|
-
if (type === "result") {
|
|
169
|
-
const cost = evt.total_cost_usd;
|
|
170
|
-
const isError = Boolean(evt.is_error);
|
|
171
|
-
if (isError) {
|
|
172
|
-
this.emit({
|
|
173
|
-
kind: "error",
|
|
174
|
-
payload: { message: String(evt.result ?? evt.subtype ?? "unknown error") },
|
|
175
|
-
});
|
|
176
|
-
}
|
|
177
|
-
if (cost !== undefined) {
|
|
178
|
-
this.emit({ kind: "status", payload: { state: "turn_cost", costUsd: cost } });
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
async interrupt() {
|
|
183
|
-
const child = this.child;
|
|
184
|
-
if (!child)
|
|
185
|
-
return;
|
|
186
|
-
child.kill("SIGINT");
|
|
187
|
-
await new Promise((resolve) => {
|
|
188
|
-
const t = setTimeout(() => {
|
|
189
|
-
try {
|
|
190
|
-
child.kill("SIGKILL");
|
|
191
|
-
}
|
|
192
|
-
catch {
|
|
193
|
-
// already gone
|
|
194
|
-
}
|
|
195
|
-
resolve();
|
|
196
|
-
}, 3000);
|
|
197
|
-
child.on("close", () => {
|
|
198
|
-
clearTimeout(t);
|
|
199
|
-
resolve();
|
|
200
|
-
});
|
|
201
|
-
});
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
function summarizeToolInput(name, input) {
|
|
205
|
-
const interesting = input.file_path ?? input.command ?? input.pattern ?? input.url ?? input.prompt ?? "";
|
|
206
|
-
const text = String(interesting).replace(/\s+/g, " ");
|
|
207
|
-
return `${name}: ${text.slice(0, 160)}`;
|
|
208
|
-
}
|
|
209
|
-
//# sourceMappingURL=claude-code.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/adapters/claude-code.ts"],"names":[],"mappings":"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"}
|
package/dist/adapters/codex.d.ts
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Codex adapter — drives the `codex` CLI headless, one process per turn,
|
|
3
|
-
* resuming the same thread across turns.
|
|
4
|
-
*
|
|
5
|
-
* codex exec --json --skip-git-repo-check -C <dir> -s <sandbox> "<text>"
|
|
6
|
-
* codex exec resume <threadId> --json … "<text>"
|
|
7
|
-
*
|
|
8
|
-
* The CLI ships inside the desktop app as well as on PATH, so `available()`
|
|
9
|
-
* looks in both places — a Mac with Codex.app installed and nothing on PATH is
|
|
10
|
-
* the common case, and refusing to find it there would be wrong.
|
|
11
|
-
*
|
|
12
|
-
* Event surface verified against codex-cli 0.142.4 by running it and reading
|
|
13
|
-
* what came out, not by guessing:
|
|
14
|
-
*
|
|
15
|
-
* {"type":"thread.started","thread_id":"019f…"}
|
|
16
|
-
* {"type":"turn.started"}
|
|
17
|
-
* {"type":"item.started","item":{"id":"item_1","type":"command_execution",…}}
|
|
18
|
-
* {"type":"item.completed","item":{"id":"item_1","type":"command_execution",
|
|
19
|
-
* "command":"/bin/zsh -lc 'echo hi'","aggregated_output":"hi\n","exit_code":0}}
|
|
20
|
-
* {"type":"item.completed","item":{"id":"item_2","type":"agent_message","text":"…"}}
|
|
21
|
-
* {"type":"item.completed","item":{"id":"item_3","type":"file_change",
|
|
22
|
-
* "changes":[{"path":"/abs/note.txt","kind":"add"}]}}
|
|
23
|
-
* {"type":"turn.completed","usage":{"input_tokens":52831,"output_tokens":120,…}}
|
|
24
|
-
*
|
|
25
|
-
* Note what is NOT in there: money. Codex reports tokens, never a dollar
|
|
26
|
-
* figure, so this adapter reports tokens and no cost. Inventing a USD number
|
|
27
|
-
* from a price table we'd have to keep current is how you end up with a fake
|
|
28
|
-
* $0.001 in the UI presented as fact.
|
|
29
|
-
*/
|
|
30
|
-
import type { SendInput } from "../types.js";
|
|
31
|
-
import { AdapterBase } from "./base.js";
|
|
32
|
-
/**
|
|
33
|
-
* Where the codex CLI is on this machine: an explicit override, then PATH,
|
|
34
|
-
* then inside the app bundle.
|
|
35
|
-
*/
|
|
36
|
-
export declare function codexBin(override?: string): string | null;
|
|
37
|
-
export declare class CodexAdapter extends AdapterBase {
|
|
38
|
-
private child;
|
|
39
|
-
private options;
|
|
40
|
-
constructor(id: string, projectDir: string, options?: Record<string, unknown>);
|
|
41
|
-
/** Codex calls it a thread; loom stores it in the same slot as any session. */
|
|
42
|
-
private get threadId();
|
|
43
|
-
private set threadId(value);
|
|
44
|
-
available(): Promise<boolean>;
|
|
45
|
-
start(): Promise<void>;
|
|
46
|
-
stop(): Promise<void>;
|
|
47
|
-
send(input: SendInput): Promise<void>;
|
|
48
|
-
private handleEvent;
|
|
49
|
-
private handleItem;
|
|
50
|
-
interrupt(): Promise<void>;
|
|
51
|
-
}
|