@loompad/cli 0.1.0 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ARCHITECTURE.md +96 -11
- package/CHANGELOG.md +1042 -0
- package/README.md +1473 -44
- package/THIRD_PARTY_NOTICES.md +275 -0
- package/dist/adapters/antigravity-cli.d.ts +62 -0
- package/dist/adapters/antigravity-cli.js +258 -0
- package/dist/adapters/antigravity-cli.js.map +1 -0
- package/dist/adapters/base.d.ts +61 -9
- package/dist/adapters/base.js +266 -15
- package/dist/adapters/base.js.map +1 -1
- package/dist/adapters/bridges/antigravity.d.ts +9 -12
- package/dist/adapters/bridges/antigravity.js +9 -12
- package/dist/adapters/bridges/antigravity.js.map +1 -1
- package/dist/adapters/echo.d.ts +1 -0
- package/dist/adapters/echo.js +59 -3
- package/dist/adapters/echo.js.map +1 -1
- package/dist/adapters/grok.d.ts +7 -0
- package/dist/adapters/grok.js +20 -10
- package/dist/adapters/grok.js.map +1 -1
- package/dist/adapters/index.d.ts +5 -1
- package/dist/adapters/index.js +53 -7
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/model.d.ts +137 -0
- package/dist/adapters/model.js +527 -0
- package/dist/adapters/model.js.map +1 -0
- package/dist/adapters/opencode.d.ts +101 -1
- package/dist/adapters/opencode.js +874 -98
- package/dist/adapters/opencode.js.map +1 -1
- package/dist/cli/doctor.d.ts +32 -0
- package/dist/cli/doctor.js +89 -4
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/index.js +2651 -87
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/tui-model.js +3 -1
- package/dist/cli/tui-model.js.map +1 -1
- package/dist/cli/tui.js +44 -1
- package/dist/cli/tui.js.map +1 -1
- package/dist/cli/ui.d.ts +2 -0
- package/dist/cli/ui.js +13 -0
- package/dist/cli/ui.js.map +1 -1
- package/dist/core/ades.d.ts +32 -16
- package/dist/core/ades.js +57 -20
- package/dist/core/ades.js.map +1 -1
- package/dist/core/agent-state.d.ts +14 -0
- package/dist/core/agent-state.js +32 -0
- package/dist/core/agent-state.js.map +1 -0
- package/dist/core/approvals.d.ts +33 -0
- package/dist/core/approvals.js +29 -0
- package/dist/core/approvals.js.map +1 -0
- package/dist/core/backup.d.ts +19 -0
- package/dist/core/backup.js +86 -0
- package/dist/core/backup.js.map +1 -0
- package/dist/core/baton.d.ts +2 -2
- package/dist/core/baton.js.map +1 -1
- package/dist/core/brain-extract.d.ts +17 -0
- package/dist/core/brain-extract.js +28 -2
- package/dist/core/brain-extract.js.map +1 -1
- package/dist/core/brain-index.d.ts +71 -0
- package/dist/core/brain-index.js +204 -5
- package/dist/core/brain-index.js.map +1 -1
- package/dist/core/brain.d.ts +58 -2
- package/dist/core/brain.js +79 -1
- package/dist/core/brain.js.map +1 -1
- package/dist/core/chat-import.d.ts +71 -0
- package/dist/core/chat-import.js +419 -0
- package/dist/core/chat-import.js.map +1 -0
- package/dist/core/checkpoint.d.ts +107 -0
- package/dist/core/checkpoint.js +259 -0
- package/dist/core/checkpoint.js.map +1 -0
- package/dist/core/claude-cli.js +1 -1
- package/dist/core/claude-cli.js.map +1 -1
- package/dist/core/continuity/artifacts.d.ts +14 -0
- package/dist/core/continuity/artifacts.js +118 -0
- package/dist/core/continuity/artifacts.js.map +1 -0
- package/dist/core/continuity/capabilities.d.ts +65 -0
- package/dist/core/continuity/capabilities.js +129 -0
- package/dist/core/continuity/capabilities.js.map +1 -0
- package/dist/core/continuity/contracts.d.ts +352 -0
- package/dist/core/continuity/contracts.js +117 -0
- package/dist/core/continuity/contracts.js.map +1 -0
- package/dist/core/continuity/engine.d.ts +55 -0
- package/dist/core/continuity/engine.js +504 -0
- package/dist/core/continuity/engine.js.map +1 -0
- package/dist/core/continuity/store.d.ts +73 -0
- package/dist/core/continuity/store.js +438 -0
- package/dist/core/continuity/store.js.map +1 -0
- package/dist/core/conversations.d.ts +19 -0
- package/dist/core/conversations.js +87 -0
- package/dist/core/conversations.js.map +1 -0
- package/dist/core/crew-coordination.d.ts +6 -0
- package/dist/core/crew-coordination.js +24 -0
- package/dist/core/crew-coordination.js.map +1 -0
- package/dist/core/crew-policy.d.ts +18 -0
- package/dist/core/crew-policy.js +40 -0
- package/dist/core/crew-policy.js.map +1 -0
- package/dist/core/crew-protocol.d.ts +64 -0
- package/dist/core/crew-protocol.js +146 -0
- package/dist/core/crew-protocol.js.map +1 -0
- package/dist/core/crew-requests.d.ts +14 -0
- package/dist/core/crew-requests.js +22 -0
- package/dist/core/crew-requests.js.map +1 -0
- package/dist/core/crew.d.ts +395 -0
- package/dist/core/crew.js +1857 -0
- package/dist/core/crew.js.map +1 -0
- package/dist/core/digest.d.ts +40 -0
- package/dist/core/digest.js +94 -0
- package/dist/core/digest.js.map +1 -0
- package/dist/core/distill.js +3 -5
- package/dist/core/distill.js.map +1 -1
- package/dist/core/eventlog.d.ts +27 -25
- package/dist/core/eventlog.js +97 -150
- package/dist/core/eventlog.js.map +1 -1
- package/dist/core/events/contracts.d.ts +51 -0
- package/dist/core/events/contracts.js +2 -0
- package/dist/core/events/contracts.js.map +1 -0
- package/dist/core/events/jsonl-store.d.ts +23 -0
- package/dist/core/events/jsonl-store.js +90 -0
- package/dist/core/events/jsonl-store.js.map +1 -0
- package/dist/core/events/sqlite-store.d.ts +37 -0
- package/dist/core/events/sqlite-store.js +215 -0
- package/dist/core/events/sqlite-store.js.map +1 -0
- package/dist/core/forecast.d.ts +44 -0
- package/dist/core/forecast.js +46 -0
- package/dist/core/forecast.js.map +1 -0
- package/dist/core/free-pool.d.ts +65 -0
- package/dist/core/free-pool.js +171 -0
- package/dist/core/free-pool.js.map +1 -0
- package/dist/core/git.d.ts +30 -0
- package/dist/core/git.js +50 -2
- package/dist/core/git.js.map +1 -1
- package/dist/core/github-events.d.ts +53 -0
- package/dist/core/github-events.js +227 -0
- package/dist/core/github-events.js.map +1 -0
- package/dist/core/goal-lanes.d.ts +53 -0
- package/dist/core/goal-lanes.js +99 -0
- package/dist/core/goal-lanes.js.map +1 -0
- package/dist/core/hosted.d.ts +27 -0
- package/dist/core/hosted.js +50 -0
- package/dist/core/hosted.js.map +1 -0
- package/dist/core/http-server.d.ts +5 -0
- package/dist/core/http-server.js +8 -0
- package/dist/core/http-server.js.map +1 -0
- package/dist/core/invite-link.d.ts +31 -0
- package/dist/core/invite-link.js +45 -0
- package/dist/core/invite-link.js.map +1 -0
- package/dist/core/loops.d.ts +37 -0
- package/dist/core/loops.js +81 -0
- package/dist/core/loops.js.map +1 -0
- package/dist/core/mcp-catalog.d.ts +182 -0
- package/dist/core/mcp-catalog.js +431 -0
- package/dist/core/mcp-catalog.js.map +1 -0
- package/dist/core/mcp.d.ts +87 -0
- package/dist/core/mcp.js +181 -0
- package/dist/core/mcp.js.map +1 -0
- package/dist/core/memory.d.ts +1 -0
- package/dist/core/memory.js +5 -2
- package/dist/core/memory.js.map +1 -1
- package/dist/core/model-tools.d.ts +97 -0
- package/dist/core/model-tools.js +388 -0
- package/dist/core/model-tools.js.map +1 -0
- package/dist/core/notify.js +19 -1
- package/dist/core/notify.js.map +1 -1
- package/dist/core/orchestra.d.ts +635 -0
- package/dist/core/orchestra.js +2120 -0
- package/dist/core/orchestra.js.map +1 -0
- package/dist/core/permissions.d.ts +56 -0
- package/dist/core/permissions.js +122 -0
- package/dist/core/permissions.js.map +1 -0
- package/dist/core/preview-proxy.d.ts +70 -0
- package/dist/core/preview-proxy.js +563 -0
- package/dist/core/preview-proxy.js.map +1 -0
- package/dist/core/preview-shot.d.ts +46 -0
- package/dist/core/preview-shot.js +109 -0
- package/dist/core/preview-shot.js.map +1 -0
- package/dist/core/process.d.ts +36 -0
- package/dist/core/process.js +168 -0
- package/dist/core/process.js.map +1 -0
- package/dist/core/prompt-queue.d.ts +136 -0
- package/dist/core/prompt-queue.js +269 -0
- package/dist/core/prompt-queue.js.map +1 -0
- package/dist/core/prompts.d.ts +53 -0
- package/dist/core/prompts.js +127 -0
- package/dist/core/prompts.js.map +1 -0
- package/dist/core/proof.d.ts +82 -0
- package/dist/core/proof.js +216 -0
- package/dist/core/proof.js.map +1 -0
- package/dist/core/provider-text.d.ts +23 -0
- package/dist/core/provider-text.js +66 -0
- package/dist/core/provider-text.js.map +1 -0
- package/dist/core/providers.d.ts +152 -0
- package/dist/core/providers.js +343 -0
- package/dist/core/providers.js.map +1 -0
- package/dist/core/quota.d.ts +33 -0
- package/dist/core/quota.js +74 -0
- package/dist/core/quota.js.map +1 -0
- package/dist/core/recipes.d.ts +50 -0
- package/dist/core/recipes.js +99 -0
- package/dist/core/recipes.js.map +1 -0
- package/dist/core/registry.d.ts +54 -0
- package/dist/core/registry.js +62 -5
- package/dist/core/registry.js.map +1 -1
- package/dist/core/relay-client.d.ts +67 -0
- package/dist/core/relay-client.js +184 -0
- package/dist/core/relay-client.js.map +1 -0
- package/dist/core/relay-protocol.d.ts +140 -0
- package/dist/core/relay-protocol.js +189 -0
- package/dist/core/relay-protocol.js.map +1 -0
- package/dist/core/replay.d.ts +18 -0
- package/dist/core/replay.js +191 -0
- package/dist/core/replay.js.map +1 -0
- package/dist/core/review-triage.d.ts +41 -0
- package/dist/core/review-triage.js +124 -0
- package/dist/core/review-triage.js.map +1 -0
- package/dist/core/router.js +2 -2
- package/dist/core/router.js.map +1 -1
- package/dist/core/routes.d.ts +39 -3
- package/dist/core/routes.js +137 -4
- package/dist/core/routes.js.map +1 -1
- package/dist/core/run-command.d.ts +14 -0
- package/dist/core/run-command.js +45 -0
- package/dist/core/run-command.js.map +1 -0
- package/dist/core/runner-setup.d.ts +36 -0
- package/dist/core/runner-setup.js +114 -0
- package/dist/core/runner-setup.js.map +1 -0
- package/dist/core/search.js +0 -0
- package/dist/core/search.js.map +1 -1
- package/dist/core/semantic.d.ts +92 -0
- package/dist/core/semantic.js +227 -0
- package/dist/core/semantic.js.map +1 -0
- package/dist/core/servers.d.ts +115 -0
- package/dist/core/servers.js +305 -0
- package/dist/core/servers.js.map +1 -0
- package/dist/core/setup.js +64 -6
- package/dist/core/setup.js.map +1 -1
- package/dist/core/shield.d.ts +17 -0
- package/dist/core/shield.js +81 -0
- package/dist/core/shield.js.map +1 -0
- package/dist/core/shift.d.ts +69 -0
- package/dist/core/shift.js +120 -0
- package/dist/core/shift.js.map +1 -0
- package/dist/core/skill-install.d.ts +125 -0
- package/dist/core/skill-install.js +328 -0
- package/dist/core/skill-install.js.map +1 -0
- package/dist/core/skills.d.ts +116 -0
- package/dist/core/skills.js +223 -0
- package/dist/core/skills.js.map +1 -0
- package/dist/core/step-conditions.d.ts +65 -0
- package/dist/core/step-conditions.js +102 -0
- package/dist/core/step-conditions.js.map +1 -0
- package/dist/core/subagents.d.ts +45 -0
- package/dist/core/subagents.js +90 -0
- package/dist/core/subagents.js.map +1 -0
- package/dist/core/team-canon.d.ts +42 -0
- package/dist/core/team-canon.js +121 -0
- package/dist/core/team-canon.js.map +1 -0
- package/dist/core/team-crypto.d.ts +97 -0
- package/dist/core/team-crypto.js +175 -0
- package/dist/core/team-crypto.js.map +1 -0
- package/dist/core/team-hub.d.ts +514 -0
- package/dist/core/team-hub.js +964 -0
- package/dist/core/team-hub.js.map +1 -0
- package/dist/core/team-landing.d.ts +239 -0
- package/dist/core/team-landing.js +504 -0
- package/dist/core/team-landing.js.map +1 -0
- package/dist/core/team-leases.d.ts +44 -0
- package/dist/core/team-leases.js +145 -0
- package/dist/core/team-leases.js.map +1 -0
- package/dist/core/team-memory.d.ts +42 -0
- package/dist/core/team-memory.js +84 -0
- package/dist/core/team-memory.js.map +1 -0
- package/dist/core/team-policy.d.ts +85 -0
- package/dist/core/team-policy.js +191 -0
- package/dist/core/team-policy.js.map +1 -0
- package/dist/core/thread-md.d.ts +6 -0
- package/dist/core/thread-md.js +42 -0
- package/dist/core/thread-md.js.map +1 -0
- package/dist/core/turn-stats.d.ts +61 -0
- package/dist/core/turn-stats.js +124 -0
- package/dist/core/turn-stats.js.map +1 -0
- package/dist/core/updater.d.ts +73 -0
- package/dist/core/updater.js +153 -0
- package/dist/core/updater.js.map +1 -0
- package/dist/core/usage.d.ts +75 -0
- package/dist/core/usage.js +163 -0
- package/dist/core/usage.js.map +1 -0
- package/dist/core/windows-jobs.d.ts +15 -0
- package/dist/core/windows-jobs.js +170 -0
- package/dist/core/windows-jobs.js.map +1 -0
- package/dist/core/worktree-merge.d.ts +57 -0
- package/dist/core/worktree-merge.js +123 -0
- package/dist/core/worktree-merge.js.map +1 -0
- package/dist/core/worktree.d.ts +5 -0
- package/dist/core/worktree.js +45 -5
- package/dist/core/worktree.js.map +1 -1
- package/dist/core/worktrees.d.ts +6 -0
- package/dist/core/worktrees.js +21 -0
- package/dist/core/worktrees.js.map +1 -0
- package/dist/daemon/app-page.d.ts +0 -17
- package/dist/daemon/app-page.js +10 -6346
- package/dist/daemon/app-page.js.map +1 -1
- package/dist/daemon/auth.d.ts +24 -3
- package/dist/daemon/auth.js +66 -7
- package/dist/daemon/auth.js.map +1 -1
- package/dist/daemon/board.d.ts +7 -0
- package/dist/daemon/board.js +12 -1
- package/dist/daemon/board.js.map +1 -1
- package/dist/daemon/brand-icons.d.ts +6 -1
- package/dist/daemon/brand-icons.js +11 -3
- package/dist/daemon/brand-icons.js.map +1 -1
- package/dist/daemon/client.d.ts +665 -1
- package/dist/daemon/client.js +381 -3
- package/dist/daemon/client.js.map +1 -1
- package/dist/daemon/delivery.d.ts +34 -0
- package/dist/daemon/delivery.js +63 -0
- package/dist/daemon/delivery.js.map +1 -0
- package/dist/daemon/deploys.d.ts +62 -0
- package/dist/daemon/deploys.js +159 -0
- package/dist/daemon/deploys.js.map +1 -0
- package/dist/daemon/landing.d.ts +192 -0
- package/dist/daemon/landing.js +992 -0
- package/dist/daemon/landing.js.map +1 -0
- package/dist/daemon/onboard.d.ts +150 -0
- package/dist/daemon/onboard.js +390 -0
- package/dist/daemon/onboard.js.map +1 -0
- package/dist/daemon/proof.d.ts +70 -0
- package/dist/daemon/proof.js +172 -0
- package/dist/daemon/proof.js.map +1 -0
- package/dist/daemon/push.d.ts +19 -1
- package/dist/daemon/push.js +90 -3
- package/dist/daemon/push.js.map +1 -1
- package/dist/daemon/relay.d.ts +82 -0
- package/dist/daemon/relay.js +351 -0
- package/dist/daemon/relay.js.map +1 -0
- package/dist/daemon/routes/agent-discovery.d.ts +4 -0
- package/dist/daemon/routes/agent-discovery.js +29 -0
- package/dist/daemon/routes/agent-discovery.js.map +1 -0
- package/dist/daemon/routes/agent-settings.d.ts +4 -0
- package/dist/daemon/routes/agent-settings.js +94 -0
- package/dist/daemon/routes/agent-settings.js.map +1 -0
- package/dist/daemon/routes/agents.d.ts +4 -0
- package/dist/daemon/routes/agents.js +105 -0
- package/dist/daemon/routes/agents.js.map +1 -0
- package/dist/daemon/routes/alerts.d.ts +4 -0
- package/dist/daemon/routes/alerts.js +137 -0
- package/dist/daemon/routes/alerts.js.map +1 -0
- package/dist/daemon/routes/approvals.d.ts +4 -0
- package/dist/daemon/routes/approvals.js +40 -0
- package/dist/daemon/routes/approvals.js.map +1 -0
- package/dist/daemon/routes/assets.d.ts +3 -0
- package/dist/daemon/routes/assets.js +64 -0
- package/dist/daemon/routes/assets.js.map +1 -0
- package/dist/daemon/routes/board.d.ts +4 -0
- package/dist/daemon/routes/board.js +147 -0
- package/dist/daemon/routes/board.js.map +1 -0
- package/dist/daemon/routes/brain.d.ts +4 -0
- package/dist/daemon/routes/brain.js +270 -0
- package/dist/daemon/routes/brain.js.map +1 -0
- package/dist/daemon/routes/chats.d.ts +4 -0
- package/dist/daemon/routes/chats.js +249 -0
- package/dist/daemon/routes/chats.js.map +1 -0
- package/dist/daemon/routes/clients.d.ts +4 -0
- package/dist/daemon/routes/clients.js +49 -0
- package/dist/daemon/routes/clients.js.map +1 -0
- package/dist/daemon/routes/cloud.d.ts +4 -0
- package/dist/daemon/routes/cloud.js +46 -0
- package/dist/daemon/routes/cloud.js.map +1 -0
- package/dist/daemon/routes/config.d.ts +4 -0
- package/dist/daemon/routes/config.js +35 -0
- package/dist/daemon/routes/config.js.map +1 -0
- package/dist/daemon/routes/context.d.ts +51 -0
- package/dist/daemon/routes/context.js +2 -0
- package/dist/daemon/routes/context.js.map +1 -0
- package/dist/daemon/routes/crews.d.ts +4 -0
- package/dist/daemon/routes/crews.js +149 -0
- package/dist/daemon/routes/crews.js.map +1 -0
- package/dist/daemon/routes/files.d.ts +3 -0
- package/dist/daemon/routes/files.js +253 -0
- package/dist/daemon/routes/files.js.map +1 -0
- package/dist/daemon/routes/git.d.ts +4 -0
- package/dist/daemon/routes/git.js +96 -0
- package/dist/daemon/routes/git.js.map +1 -0
- package/dist/daemon/routes/history.d.ts +4 -0
- package/dist/daemon/routes/history.js +101 -0
- package/dist/daemon/routes/history.js.map +1 -0
- package/dist/daemon/routes/integrations-project.d.ts +3 -0
- package/dist/daemon/routes/integrations-project.js +103 -0
- package/dist/daemon/routes/integrations-project.js.map +1 -0
- package/dist/daemon/routes/integrations.d.ts +3 -0
- package/dist/daemon/routes/integrations.js +111 -0
- package/dist/daemon/routes/integrations.js.map +1 -0
- package/dist/daemon/routes/logs.d.ts +3 -0
- package/dist/daemon/routes/logs.js +40 -0
- package/dist/daemon/routes/logs.js.map +1 -0
- package/dist/daemon/routes/messages.d.ts +4 -0
- package/dist/daemon/routes/messages.js +60 -0
- package/dist/daemon/routes/messages.js.map +1 -0
- package/dist/daemon/routes/observability.d.ts +4 -0
- package/dist/daemon/routes/observability.js +247 -0
- package/dist/daemon/routes/observability.js.map +1 -0
- package/dist/daemon/routes/onboard.d.ts +12 -0
- package/dist/daemon/routes/onboard.js +67 -0
- package/dist/daemon/routes/onboard.js.map +1 -0
- package/dist/daemon/routes/orchestra.d.ts +4 -0
- package/dist/daemon/routes/orchestra.js +110 -0
- package/dist/daemon/routes/orchestra.js.map +1 -0
- package/dist/daemon/routes/pairing.d.ts +4 -0
- package/dist/daemon/routes/pairing.js +155 -0
- package/dist/daemon/routes/pairing.js.map +1 -0
- package/dist/daemon/routes/preview.d.ts +24 -0
- package/dist/daemon/routes/preview.js +122 -0
- package/dist/daemon/routes/preview.js.map +1 -0
- package/dist/daemon/routes/project-actions.d.ts +4 -0
- package/dist/daemon/routes/project-actions.js +53 -0
- package/dist/daemon/routes/project-actions.js.map +1 -0
- package/dist/daemon/routes/project-team.d.ts +4 -0
- package/dist/daemon/routes/project-team.js +201 -0
- package/dist/daemon/routes/project-team.js.map +1 -0
- package/dist/daemon/routes/projects.d.ts +14 -0
- package/dist/daemon/routes/projects.js +138 -0
- package/dist/daemon/routes/projects.js.map +1 -0
- package/dist/daemon/routes/prompts.d.ts +4 -0
- package/dist/daemon/routes/prompts.js +44 -0
- package/dist/daemon/routes/prompts.js.map +1 -0
- package/dist/daemon/routes/proof.d.ts +4 -0
- package/dist/daemon/routes/proof.js +22 -0
- package/dist/daemon/routes/proof.js.map +1 -0
- package/dist/daemon/routes/providers.d.ts +3 -0
- package/dist/daemon/routes/providers.js +60 -0
- package/dist/daemon/routes/providers.js.map +1 -0
- package/dist/daemon/routes/public.d.ts +4 -0
- package/dist/daemon/routes/public.js +64 -0
- package/dist/daemon/routes/public.js.map +1 -0
- package/dist/daemon/routes/queue.d.ts +4 -0
- package/dist/daemon/routes/queue.js +140 -0
- package/dist/daemon/routes/queue.js.map +1 -0
- package/dist/daemon/routes/routing.d.ts +4 -0
- package/dist/daemon/routes/routing.js +61 -0
- package/dist/daemon/routes/routing.js.map +1 -0
- package/dist/daemon/routes/runtime-handler.d.ts +2 -0
- package/dist/daemon/routes/runtime-handler.js +63 -0
- package/dist/daemon/routes/runtime-handler.js.map +1 -0
- package/dist/daemon/routes/search.d.ts +4 -0
- package/dist/daemon/routes/search.js +17 -0
- package/dist/daemon/routes/search.js.map +1 -0
- package/dist/daemon/routes/servers.d.ts +4 -0
- package/dist/daemon/routes/servers.js +133 -0
- package/dist/daemon/routes/servers.js.map +1 -0
- package/dist/daemon/routes/setup.d.ts +3 -0
- package/dist/daemon/routes/setup.js +50 -0
- package/dist/daemon/routes/setup.js.map +1 -0
- package/dist/daemon/routes/shift.d.ts +4 -0
- package/dist/daemon/routes/shift.js +30 -0
- package/dist/daemon/routes/shift.js.map +1 -0
- package/dist/daemon/routes/specs.d.ts +4 -0
- package/dist/daemon/routes/specs.js +57 -0
- package/dist/daemon/routes/specs.js.map +1 -0
- package/dist/daemon/routes/task-delivery.d.ts +4 -0
- package/dist/daemon/routes/task-delivery.js +38 -0
- package/dist/daemon/routes/task-delivery.js.map +1 -0
- package/dist/daemon/routes/team.d.ts +4 -0
- package/dist/daemon/routes/team.js +193 -0
- package/dist/daemon/routes/team.js.map +1 -0
- package/dist/daemon/routes/terminals.d.ts +4 -0
- package/dist/daemon/routes/terminals.js +87 -0
- package/dist/daemon/routes/terminals.js.map +1 -0
- package/dist/daemon/routes/tools.d.ts +4 -0
- package/dist/daemon/routes/tools.js +180 -0
- package/dist/daemon/routes/tools.js.map +1 -0
- package/dist/daemon/routes/updates.d.ts +4 -0
- package/dist/daemon/routes/updates.js +89 -0
- package/dist/daemon/routes/updates.js.map +1 -0
- package/dist/daemon/routes/voice.d.ts +4 -0
- package/dist/daemon/routes/voice.js +53 -0
- package/dist/daemon/routes/voice.js.map +1 -0
- package/dist/daemon/runner.d.ts +186 -0
- package/dist/daemon/runner.js +612 -0
- package/dist/daemon/runner.js.map +1 -0
- package/dist/daemon/runtime/accounting.d.ts +130 -0
- package/dist/daemon/runtime/accounting.js +303 -0
- package/dist/daemon/runtime/accounting.js.map +1 -0
- package/dist/daemon/runtime/agents.d.ts +16 -0
- package/dist/daemon/runtime/agents.js +71 -0
- package/dist/daemon/runtime/agents.js.map +1 -0
- package/dist/daemon/runtime/briefings.d.ts +134 -0
- package/dist/daemon/runtime/briefings.js +329 -0
- package/dist/daemon/runtime/briefings.js.map +1 -0
- package/dist/daemon/runtime/native-usage.d.ts +21 -0
- package/dist/daemon/runtime/native-usage.js +71 -0
- package/dist/daemon/runtime/native-usage.js.map +1 -0
- package/dist/daemon/runtime/queue.d.ts +94 -0
- package/dist/daemon/runtime/queue.js +222 -0
- package/dist/daemon/runtime/queue.js.map +1 -0
- package/dist/daemon/runtime/relay.d.ts +93 -0
- package/dist/daemon/runtime/relay.js +240 -0
- package/dist/daemon/runtime/relay.js.map +1 -0
- package/dist/daemon/runtime/turns.d.ts +202 -0
- package/dist/daemon/runtime/turns.js +663 -0
- package/dist/daemon/runtime/turns.js.map +1 -0
- package/dist/daemon/runtime-support.d.ts +76 -0
- package/dist/daemon/runtime-support.js +134 -0
- package/dist/daemon/runtime-support.js.map +1 -0
- package/dist/daemon/runtime.d.ts +739 -70
- package/dist/daemon/runtime.js +2751 -470
- package/dist/daemon/runtime.js.map +1 -1
- package/dist/daemon/server.d.ts +82 -55
- package/dist/daemon/server.js +674 -1435
- package/dist/daemon/server.js.map +1 -1
- package/dist/daemon/shift.d.ts +70 -0
- package/dist/daemon/shift.js +170 -0
- package/dist/daemon/shift.js.map +1 -0
- package/dist/daemon/specs.d.ts +92 -0
- package/dist/daemon/specs.js +285 -0
- package/dist/daemon/specs.js.map +1 -0
- package/dist/daemon/system.d.ts +208 -0
- package/dist/daemon/system.js +557 -0
- package/dist/daemon/system.js.map +1 -0
- package/dist/daemon/tasks.js +1 -1
- package/dist/daemon/team-brain.d.ts +136 -0
- package/dist/daemon/team-brain.js +659 -0
- package/dist/daemon/team-brain.js.map +1 -0
- package/dist/daemon/team-coordinator.d.ts +78 -0
- package/dist/daemon/team-coordinator.js +408 -0
- package/dist/daemon/team-coordinator.js.map +1 -0
- package/dist/daemon/team.d.ts +339 -0
- package/dist/daemon/team.js +1433 -0
- package/dist/daemon/team.js.map +1 -0
- package/dist/daemon/terminals.d.ts +22 -3
- package/dist/daemon/terminals.js +236 -16
- package/dist/daemon/terminals.js.map +1 -1
- package/dist/hub/client.d.ts +120 -0
- package/dist/hub/client.js +228 -0
- package/dist/hub/client.js.map +1 -0
- package/dist/hub/server.d.ts +32 -0
- package/dist/hub/server.js +180 -0
- package/dist/hub/server.js.map +1 -0
- package/dist/hub/supabase-client.d.ts +220 -0
- package/dist/hub/supabase-client.js +843 -0
- package/dist/hub/supabase-client.js.map +1 -0
- package/dist/observability/ask.d.ts +91 -0
- package/dist/observability/ask.js +179 -0
- package/dist/observability/ask.js.map +1 -0
- package/dist/observability/clickhouse.d.ts +33 -0
- package/dist/observability/clickhouse.js +48 -0
- package/dist/observability/clickhouse.js.map +1 -0
- package/dist/observability/decisions.d.ts +176 -0
- package/dist/observability/decisions.js +377 -0
- package/dist/observability/decisions.js.map +1 -0
- package/dist/observability/index.d.ts +89 -0
- package/dist/observability/index.js +348 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/insights.d.ts +151 -0
- package/dist/observability/insights.js +319 -0
- package/dist/observability/insights.js.map +1 -0
- package/dist/observability/logs-query.d.ts +82 -0
- package/dist/observability/logs-query.js +102 -0
- package/dist/observability/logs-query.js.map +1 -0
- package/dist/observability/logs.d.ts +72 -0
- package/dist/observability/logs.js +295 -0
- package/dist/observability/logs.js.map +1 -0
- package/dist/observability/metrics.d.ts +86 -0
- package/dist/observability/metrics.js +303 -0
- package/dist/observability/metrics.js.map +1 -0
- package/dist/observability/otlp.d.ts +127 -0
- package/dist/observability/otlp.js +242 -0
- package/dist/observability/otlp.js.map +1 -0
- package/dist/observability/snapshots.d.ts +43 -0
- package/dist/observability/snapshots.js +129 -0
- package/dist/observability/snapshots.js.map +1 -0
- package/dist/observability/triage.d.ts +49 -0
- package/dist/observability/triage.js +284 -0
- package/dist/observability/triage.js.map +1 -0
- package/dist/providers/adapter.d.ts +50 -0
- package/dist/providers/adapter.js +38 -0
- package/dist/providers/adapter.js.map +1 -0
- package/dist/providers/agent.d.ts +110 -0
- package/dist/providers/agent.js +487 -0
- package/dist/providers/agent.js.map +1 -0
- package/dist/providers/approvals.d.ts +24 -0
- package/dist/providers/approvals.js +78 -0
- package/dist/providers/approvals.js.map +1 -0
- package/dist/providers/attachments.d.ts +20 -0
- package/dist/providers/attachments.js +51 -0
- package/dist/providers/attachments.js.map +1 -0
- package/dist/providers/claude/adapter.d.ts +99 -0
- package/dist/providers/claude/adapter.js +790 -0
- package/dist/providers/claude/adapter.js.map +1 -0
- package/dist/providers/codex/adapter.d.ts +113 -0
- package/dist/providers/codex/adapter.js +881 -0
- package/dist/providers/codex/adapter.js.map +1 -0
- package/dist/providers/codex/instructions.d.ts +11 -0
- package/dist/providers/codex/instructions.js +154 -0
- package/dist/providers/codex/instructions.js.map +1 -0
- package/dist/providers/codex/rpc.d.ts +36 -0
- package/dist/providers/codex/rpc.js +104 -0
- package/dist/providers/codex/rpc.js.map +1 -0
- package/dist/providers/contracts.d.ts +339 -0
- package/dist/providers/contracts.js +19 -0
- package/dist/providers/contracts.js.map +1 -0
- package/dist/providers/directory.d.ts +70 -0
- package/dist/providers/directory.js +95 -0
- package/dist/providers/directory.js.map +1 -0
- package/dist/providers/errors.d.ts +47 -0
- package/dist/providers/errors.js +24 -0
- package/dist/providers/errors.js.map +1 -0
- package/dist/providers/index.d.ts +18 -0
- package/dist/providers/index.js +19 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/ingestion.d.ts +80 -0
- package/dist/providers/ingestion.js +330 -0
- package/dist/providers/ingestion.js.map +1 -0
- package/dist/providers/live.d.ts +22 -0
- package/dist/providers/live.js +56 -0
- package/dist/providers/live.js.map +1 -0
- package/dist/providers/process.d.ts +29 -0
- package/dist/providers/process.js +71 -0
- package/dist/providers/process.js.map +1 -0
- package/dist/providers/reaper.d.ts +33 -0
- package/dist/providers/reaper.js +65 -0
- package/dist/providers/reaper.js.map +1 -0
- package/dist/providers/service.d.ts +87 -0
- package/dist/providers/service.js +256 -0
- package/dist/providers/service.js.map +1 -0
- package/dist/sdk.d.ts +1 -1
- package/dist/sdk.js +1 -1
- package/dist/sdk.js.map +1 -1
- package/dist/types.d.ts +385 -6
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -1
- package/dist/version.d.ts +7 -0
- package/dist/version.js +16 -0
- package/dist/version.js.map +1 -0
- package/dist/web/app.css +4643 -0
- package/dist/web/app.js +22640 -0
- package/dist/web/app.js.map +7 -0
- package/dist/web/shell.html +39 -0
- package/docs/README.md +21 -0
- package/docs/SETUP.md +10 -0
- package/docs/adapters.md +21 -8
- package/docs/brain-continuity.md +186 -0
- package/docs/cloud.md +108 -0
- package/docs/crews.md +62 -0
- package/docs/design-system.md +31 -2
- package/docs/integration-notes.md +128 -20
- package/docs/loompad.md +105 -0
- package/docs/observability.md +220 -0
- package/docs/play-store.md +123 -0
- package/docs/proposals/agent-teams.md +249 -0
- package/docs/proposals/brain-continuity-implementation.md +468 -0
- package/docs/proposals/brain-session-continuity.md +623 -0
- package/docs/proposals/t3code-port.md +81 -0
- package/docs/proposals/t3code-reference.md +95 -0
- package/docs/refactoring/AGENT-TEAMS-PROGRESS.md +88 -0
- package/docs/refactoring/BOUNDARIES.md +120 -0
- package/docs/refactoring/BRAIN-AUDIT.md +176 -0
- package/docs/refactoring/BRAIN-NOTES.md +390 -0
- package/docs/refactoring/BRAIN-TODO.md +214 -0
- package/docs/refactoring/NOTES.md +129 -0
- package/docs/refactoring/T3-PORT-NOTES.md +165 -0
- package/docs/refactoring/T3-PORT-TODO.md +123 -0
- package/docs/refactoring/TODO.md +46 -0
- package/docs/refactoring/brain-benchmark-2026-09-28.json +48 -0
- package/docs/refactoring/brain-benchmark-audit-2026-09-28.json +48 -0
- package/docs/release-notes/v0.2.0.md +35 -0
- package/docs/release-notes/v0.2.1.md +59 -0
- package/docs/release-notes/v0.2.3.md +77 -0
- package/docs/release-notes/v0.2.4.md +128 -0
- package/docs/release-notes/v0.2.5.md +153 -0
- package/docs/release-notes/v0.2.6.md +62 -0
- package/docs/release-notes/v1.0.0.md +120 -0
- package/docs/release-notes/v1.0.1.md +77 -0
- package/docs/release-notes/v1.1.0.md +71 -0
- package/docs/release-notes/v1.1.1.md +38 -0
- package/docs/teams-architecture.md +697 -0
- package/docs/teams.md +171 -0
- package/docs/windows.md +85 -0
- package/package.json +22 -9
- package/dist/adapters/claude-code.d.ts +0 -26
- package/dist/adapters/claude-code.js +0 -209
- package/dist/adapters/claude-code.js.map +0 -1
- package/dist/adapters/codex.d.ts +0 -51
- package/dist/adapters/codex.js +0 -291
- package/dist/adapters/codex.js.map +0 -1
- package/docs/img/board-linear.png +0 -0
- package/docs/img/board-projects.png +0 -0
- package/docs/img/brain.png +0 -0
- package/docs/img/settings.png +0 -0
- package/docs/img/workspace.png +0 -0
|
@@ -0,0 +1,557 @@
|
|
|
1
|
+
import { execFile, spawn } from "../core/process.js";
|
|
2
|
+
import crypto from "node:crypto";
|
|
3
|
+
import fs from "node:fs";
|
|
4
|
+
import os from "node:os";
|
|
5
|
+
import path from "node:path";
|
|
6
|
+
import { fileURLToPath } from "node:url";
|
|
7
|
+
import { agyBin } from "../adapters/antigravity-cli.js";
|
|
8
|
+
import { codexBin } from "../providers/codex/adapter.js";
|
|
9
|
+
import { grokBin } from "../adapters/grok.js";
|
|
10
|
+
import { allModels } from "../core/providers.js";
|
|
11
|
+
export const DEFAULT_PORT = 7420;
|
|
12
|
+
/**
|
|
13
|
+
* Fingerprint every built file the daemon can load, as one hash.
|
|
14
|
+
*
|
|
15
|
+
* The walk is what makes it honest. This used to hash exactly two files —
|
|
16
|
+
* server.js and app-page.js — which meant a change anywhere else (an adapter,
|
|
17
|
+
* the router, core/registry.ts) left the rev identical. `loom up` said "daemon
|
|
18
|
+
* already running", the shell agreed it was current, and a daemon kept serving
|
|
19
|
+
* the old code from memory. A correct fix looked like it did nothing, which
|
|
20
|
+
* sends you debugging code that is already right.
|
|
21
|
+
*
|
|
22
|
+
* Content-based on purpose: mtimes are unreliable across runtimes on some
|
|
23
|
+
* filesystems (exFAT drives skew them by the local timezone offset). Names are
|
|
24
|
+
* hashed alongside contents so a rename or a deletion moves the rev too.
|
|
25
|
+
*
|
|
26
|
+
* Read the runtime JS, CSS and HTML once at import; exclude source maps and
|
|
27
|
+
* declarations because they do not change the running app.
|
|
28
|
+
*
|
|
29
|
+
* The desktop shell has a twin of this in desktop/loom-app.js — it can't import
|
|
30
|
+
* this module without pulling express into Electron's main process. They must
|
|
31
|
+
* agree byte for byte; test/desktop-app.test.ts compares them against the real
|
|
32
|
+
* built output so a drift fails there rather than in the field.
|
|
33
|
+
*/
|
|
34
|
+
export function fingerprintBuild(root) {
|
|
35
|
+
const rels = [];
|
|
36
|
+
const walk = (dir) => {
|
|
37
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
38
|
+
const full = path.join(dir, entry.name);
|
|
39
|
+
if (entry.isDirectory())
|
|
40
|
+
walk(full);
|
|
41
|
+
else if (/\.(?:js|css|html)$/.test(entry.name))
|
|
42
|
+
rels.push(path.relative(root, full));
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
walk(root);
|
|
46
|
+
if (rels.length === 0)
|
|
47
|
+
return null;
|
|
48
|
+
rels.sort(); // readdir order is filesystem-dependent; the hash must not be
|
|
49
|
+
const hash = crypto.createHash("sha256");
|
|
50
|
+
for (const rel of rels) {
|
|
51
|
+
hash.update(rel);
|
|
52
|
+
hash.update(fs.readFileSync(path.join(root, rel)));
|
|
53
|
+
}
|
|
54
|
+
return hash.digest("hex").slice(0, 16);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* This build's rev. Source runs retain the "dev" marker; hashing only their
|
|
58
|
+
* browser JS would misleadingly ignore changes to the TypeScript daemon.
|
|
59
|
+
*/
|
|
60
|
+
export const BUILD_REV = (() => {
|
|
61
|
+
try {
|
|
62
|
+
// dist/daemon/system.js → dist: everything this process can import.
|
|
63
|
+
const me = fileURLToPath(import.meta.url);
|
|
64
|
+
if (me.endsWith(".ts"))
|
|
65
|
+
return "dev";
|
|
66
|
+
return fingerprintBuild(path.dirname(path.dirname(me))) ?? "dev";
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return "dev";
|
|
70
|
+
}
|
|
71
|
+
})();
|
|
72
|
+
/**
|
|
73
|
+
* Loom's own install root — the directory to ask "am I behind my remote?".
|
|
74
|
+
*
|
|
75
|
+
* Walks up from this module looking for a .git directory (a source checkout or
|
|
76
|
+
* a cloned install). null when Loom was installed some other way (a package),
|
|
77
|
+
* in which case "check for updates" honestly says there's no git tree to check.
|
|
78
|
+
*/
|
|
79
|
+
export function loomRoot() {
|
|
80
|
+
try {
|
|
81
|
+
let dir = path.dirname(fileURLToPath(import.meta.url));
|
|
82
|
+
for (let i = 0; i < 6; i++) {
|
|
83
|
+
if (fs.existsSync(path.join(dir, ".git")))
|
|
84
|
+
return dir;
|
|
85
|
+
const parent = path.dirname(dir);
|
|
86
|
+
if (parent === dir)
|
|
87
|
+
break;
|
|
88
|
+
dir = parent;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
/* fall through */
|
|
93
|
+
}
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
export const TERM_MARK = "__LOOM_END__";
|
|
97
|
+
/**
|
|
98
|
+
* Just enough to give a pasted attachment a sensible extension.
|
|
99
|
+
*/
|
|
100
|
+
export const MIME_EXT = {
|
|
101
|
+
"image/png": "png",
|
|
102
|
+
"image/jpeg": "jpg",
|
|
103
|
+
"image/gif": "gif",
|
|
104
|
+
"image/webp": "webp",
|
|
105
|
+
"image/svg+xml": "svg",
|
|
106
|
+
"text/markdown": "md",
|
|
107
|
+
"text/plain": "txt",
|
|
108
|
+
"application/pdf": "pdf",
|
|
109
|
+
};
|
|
110
|
+
/**
|
|
111
|
+
* Paths from an HTTP body, as strings and nothing else.
|
|
112
|
+
*
|
|
113
|
+
* These reach `git checkout --` and `git clean -fd`, which delete things. A
|
|
114
|
+
* body is whatever the caller felt like sending, so anything that isn't a
|
|
115
|
+
* string is dropped here rather than stringified into a path somewhere deeper.
|
|
116
|
+
* This is the shape check; core/git.ts does the safety check, resolving every
|
|
117
|
+
* one of them against the project root.
|
|
118
|
+
*/
|
|
119
|
+
export function asPaths(v) {
|
|
120
|
+
if (!Array.isArray(v))
|
|
121
|
+
return [];
|
|
122
|
+
return v.filter((x) => typeof x === "string" && x.length > 0).slice(0, 500);
|
|
123
|
+
}
|
|
124
|
+
/** KAIRO-style dense fleet metrics for the Observatory Metrics tab. */
|
|
125
|
+
export function kairoMetrics(rt) {
|
|
126
|
+
const cs = rt.costSummary();
|
|
127
|
+
const decisions = rt.getDecisions();
|
|
128
|
+
const stats = rt.decisionStats();
|
|
129
|
+
const events = rt.log.list({ limit: 2000 });
|
|
130
|
+
const runs = events.filter((e) => e.kind === "run_complete");
|
|
131
|
+
const recent = runs.slice(-10);
|
|
132
|
+
const num = (v) => Number(v) || 0;
|
|
133
|
+
// Distinct paths any turn touched, and how many touches there were. The set
|
|
134
|
+
// used to be reported as `filesCreated`, which it never was — a file edited
|
|
135
|
+
// in five turns is one path here, and creating it was not what put it there.
|
|
136
|
+
const filePaths = new Set();
|
|
137
|
+
let fileChanges = 0;
|
|
138
|
+
let filesCreated = 0;
|
|
139
|
+
for (const e of events) {
|
|
140
|
+
if (e.kind !== "turn_diff")
|
|
141
|
+
continue;
|
|
142
|
+
const files = Array.isArray(e.payload.files)
|
|
143
|
+
? e.payload.files
|
|
144
|
+
: [];
|
|
145
|
+
fileChanges += files.length;
|
|
146
|
+
for (const f of files) {
|
|
147
|
+
if (f.path)
|
|
148
|
+
filePaths.add(f.path);
|
|
149
|
+
// "??" is git porcelain for untracked — the turn is where the file
|
|
150
|
+
// started existing, which is the only "created" this log can support.
|
|
151
|
+
if (String(f.status ?? "").trim() === "??")
|
|
152
|
+
filesCreated += 1;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
const tokensByAgent = {};
|
|
156
|
+
const costByAgent = {};
|
|
157
|
+
for (const a of cs.byAgent) {
|
|
158
|
+
tokensByAgent[a.agentId] = a.tokensIn + a.tokensOut;
|
|
159
|
+
costByAgent[a.agentId] = a.usd;
|
|
160
|
+
}
|
|
161
|
+
return {
|
|
162
|
+
agentsSpawned: new Set(runs.map((e) => e.agentId).filter(Boolean)).size,
|
|
163
|
+
turnsCompleted: cs.turns,
|
|
164
|
+
avgReasoningTimeMs: cs.turns ? Math.round(cs.totalMs / cs.turns) : 0,
|
|
165
|
+
filesTouched: filePaths.size,
|
|
166
|
+
filesCreated,
|
|
167
|
+
filesModified: fileChanges,
|
|
168
|
+
decisionsRecorded: decisions.length,
|
|
169
|
+
// null when no decision carries a measured confidence — see decisionStats.
|
|
170
|
+
avgConfidence: stats.avgConfidence,
|
|
171
|
+
confidenceSamples: stats.confidenceSamples,
|
|
172
|
+
decisionsBySource: stats.bySource,
|
|
173
|
+
totalCostUsd: cs.totalUsd,
|
|
174
|
+
totalTokensIn: cs.tokensIn,
|
|
175
|
+
totalTokensOut: cs.tokensOut,
|
|
176
|
+
costByAgent,
|
|
177
|
+
tokensByAgent,
|
|
178
|
+
criticalPath: stats.criticalPath,
|
|
179
|
+
retriesTotal: events.filter((e) => e.kind === "error" || e.kind === "route_failed").length,
|
|
180
|
+
tokenSparkline: recent.map((e) => num(e.payload.inputTokens) + num(e.payload.outputTokens)),
|
|
181
|
+
costSparkline: recent.map((e) => num(e.payload.costUsd)),
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
/** A server entry from the wire, checked — a command is a thing we will run. */
|
|
185
|
+
export function parseServerConfig(raw) {
|
|
186
|
+
const r = (raw ?? {});
|
|
187
|
+
const name = String(r.name ?? "").trim();
|
|
188
|
+
const command = String(r.command ?? "").trim();
|
|
189
|
+
if (!/^[a-z0-9][a-z0-9._-]*$/i.test(name))
|
|
190
|
+
throw new Error(`"${name}" isn't a usable server name`);
|
|
191
|
+
if (!command)
|
|
192
|
+
throw new Error(`server "${name}" has no command`);
|
|
193
|
+
const port = Number(r.port);
|
|
194
|
+
const url = typeof r.url === "string" && r.url.trim() ? r.url.trim() : undefined;
|
|
195
|
+
if (url && !/^https?:\/\//.test(url))
|
|
196
|
+
throw new Error(`server "${name}" has a url that isn't http(s)`);
|
|
197
|
+
return {
|
|
198
|
+
name,
|
|
199
|
+
command,
|
|
200
|
+
...(typeof r.cwd === "string" && r.cwd.trim() ? { cwd: r.cwd.trim() } : {}),
|
|
201
|
+
...(Number.isInteger(port) && port > 0 && port < 65536 ? { port } : {}),
|
|
202
|
+
...(url ? { url } : {}),
|
|
203
|
+
...(r.env && typeof r.env === "object" ? { env: Object.fromEntries(Object.entries(r.env).map(([k, v]) => [k, String(v)])) } : {}),
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
/** Resolve this machine's Tailscale IPv4 — the tailnet is the trust boundary. */
|
|
207
|
+
export function tailscaleIp() {
|
|
208
|
+
return new Promise((resolve, reject) => {
|
|
209
|
+
execFile("tailscale", ["ip", "-4"], (err, stdout) => {
|
|
210
|
+
if (err) {
|
|
211
|
+
reject(new Error("could not resolve a Tailscale IP (is tailscale installed and up?) — refusing to bind beyond localhost"));
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
const ip = stdout.trim().split("\n")[0];
|
|
215
|
+
if (!ip)
|
|
216
|
+
return void reject(new Error("tailscale returned no IPv4"));
|
|
217
|
+
resolve(ip);
|
|
218
|
+
});
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* One `tailscale status --json`, folded into the three facts the connect-a-phone
|
|
223
|
+
* flow needs: is the CLI installed, is it signed in, and the tailnet IPv4. Lets
|
|
224
|
+
* the UI tell "install Tailscale" apart from "sign in" — and offer to do the
|
|
225
|
+
* latter from inside the app. Never rejects; a missing binary is `installed:false`.
|
|
226
|
+
*/
|
|
227
|
+
export function tailscaleState() {
|
|
228
|
+
return new Promise((resolve) => {
|
|
229
|
+
execFile("tailscale", ["status", "--json"], (err, stdout) => {
|
|
230
|
+
if (err && err.code === "ENOENT") {
|
|
231
|
+
return void resolve({ installed: false, loggedIn: false, ip: null, dnsName: null, state: null });
|
|
232
|
+
}
|
|
233
|
+
// `status --json` still prints the JSON on stdout even when it exits non-zero
|
|
234
|
+
// (logged out), so parse regardless of the exit code; only ENOENT means "no CLI".
|
|
235
|
+
try {
|
|
236
|
+
const j = JSON.parse(stdout);
|
|
237
|
+
const ip = (j.TailscaleIPs ?? []).find((a) => !a.includes(":")) ?? null;
|
|
238
|
+
const dnsName = (j.Self?.DNSName ?? "").replace(/\.$/, "") || null;
|
|
239
|
+
resolve({
|
|
240
|
+
installed: true,
|
|
241
|
+
loggedIn: j.BackendState === "Running",
|
|
242
|
+
ip,
|
|
243
|
+
dnsName,
|
|
244
|
+
state: j.BackendState ?? null,
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
catch {
|
|
248
|
+
resolve({ installed: true, loggedIn: false, ip: null, dnsName: null, state: null });
|
|
249
|
+
}
|
|
250
|
+
});
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Expose a local port to the public internet over Tailscale Funnel — how the
|
|
255
|
+
* physical LoomPad reaches the voice backend from anywhere (a bare ESP32 can't
|
|
256
|
+
* route to a 100.x tailnet address, but it can reach a Funnel's HTTPS URL).
|
|
257
|
+
* `--bg` returns as soon as it's serving and prints the public URL.
|
|
258
|
+
*/
|
|
259
|
+
export function tailscaleFunnel(port) {
|
|
260
|
+
return new Promise((resolve, reject) => {
|
|
261
|
+
execFile("tailscale", ["funnel", "--bg", String(port)], (err, stdout, stderr) => {
|
|
262
|
+
const out = `${stdout}\n${stderr}`;
|
|
263
|
+
const m = out.match(/https:\/\/[^\s/]+\.ts\.net\S*/);
|
|
264
|
+
if (m)
|
|
265
|
+
return void resolve({ url: m[0].replace(/\/+$/, "") });
|
|
266
|
+
const msg = out.trim().split("\n").slice(0, 3).join(" ").trim();
|
|
267
|
+
reject(new Error(msg || (err ? String(err) : "Funnel did not return a URL")));
|
|
268
|
+
});
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Fallback ids for a codex too old to have `codex debug models`.
|
|
273
|
+
*
|
|
274
|
+
* Not the shipped set — a *previous* shipped set, which is exactly what a codex
|
|
275
|
+
* without the subcommand would be running. The current one is asked of the CLI;
|
|
276
|
+
* see codexModelCatalog. Anything served from here is reported as
|
|
277
|
+
* `source: "builtin"`.
|
|
278
|
+
*/
|
|
279
|
+
export const CODEX_MODELS = [
|
|
280
|
+
"gpt-5.5", "gpt-5.5-codex", "gpt-5.2-codex", "gpt-5.1-codex-max",
|
|
281
|
+
"gpt-5.1-codex", "gpt-5.1-codex-mini", "gpt-5-codex", "o4-mini",
|
|
282
|
+
];
|
|
283
|
+
/**
|
|
284
|
+
* Claude Code's model aliases. The only builtin list left, and it is builtin
|
|
285
|
+
* because the CLI genuinely cannot answer the question.
|
|
286
|
+
*
|
|
287
|
+
* `claude --help` has no `models` subcommand and lists none: what it documents
|
|
288
|
+
* is the shape of the argument — "Provide an alias for the latest model (e.g.
|
|
289
|
+
* 'fable', 'opus', or 'sonnet') or a model's full name (e.g. 'claude-fable-5')".
|
|
290
|
+
* And `claude models` is not an error, which is the trap: `models` is taken as a
|
|
291
|
+
* *prompt*, so the "enumeration" is a billed turn of an LLM writing prose about
|
|
292
|
+
* models, with whatever ids it believes today. A model list that costs money and
|
|
293
|
+
* can hallucinate is not a model list.
|
|
294
|
+
*
|
|
295
|
+
* So: aliases only. They are what the CLI's own help names, they resolve to the
|
|
296
|
+
* latest snapshot by definition, and they can't go stale the way a pinned
|
|
297
|
+
* "claude-sonnet-5" did — an id that used to sit in this array and has never
|
|
298
|
+
* been a model. Full ids belong in the picker's custom field, where they're your
|
|
299
|
+
* claim rather than ours.
|
|
300
|
+
*/
|
|
301
|
+
export const CLAUDE_MODELS = ["opus", "sonnet", "haiku", "fable"];
|
|
302
|
+
export const MODEL_LIST_CACHE = new Map();
|
|
303
|
+
/**
|
|
304
|
+
* Whatever a CLI prints on stdout, or "" if it can't be run. Never throws.
|
|
305
|
+
*
|
|
306
|
+
* This is `spawn` and not `execFile` for a reason that cost an afternoon:
|
|
307
|
+
* `execFile` calls back when the child's *streams* close, and `agy models`
|
|
308
|
+
* leaves a language-server process holding stdout open after it exits, so
|
|
309
|
+
* execFile waits out its whole timeout and hands back an empty string — the
|
|
310
|
+
* Antigravity picker looked exactly like a CLI that reports no models, on a
|
|
311
|
+
* machine where `agy models` prints eleven. Measured, repeatedly, one fresh
|
|
312
|
+
* process per attempt: execFile 25s/0 lines, spawn 5.3s/11 lines.
|
|
313
|
+
*
|
|
314
|
+
* So: resolve on `exit`, with a short grace period for data still in the pipe,
|
|
315
|
+
* and take `close` when it comes first (it does for every other CLI here).
|
|
316
|
+
* stderr is drained and dropped — unread, a chatty CLI can fill its pipe and
|
|
317
|
+
* block on the write.
|
|
318
|
+
*/
|
|
319
|
+
export function runCapture(cmd, args, timeoutMs = 20_000) {
|
|
320
|
+
return new Promise((resolve) => {
|
|
321
|
+
const MAX = 8 * 1024 * 1024;
|
|
322
|
+
let out = "";
|
|
323
|
+
let settled = false;
|
|
324
|
+
let hard;
|
|
325
|
+
let drain;
|
|
326
|
+
const finish = () => {
|
|
327
|
+
if (settled)
|
|
328
|
+
return;
|
|
329
|
+
settled = true;
|
|
330
|
+
clearTimeout(hard);
|
|
331
|
+
clearTimeout(drain);
|
|
332
|
+
resolve(out);
|
|
333
|
+
};
|
|
334
|
+
let child;
|
|
335
|
+
try {
|
|
336
|
+
child = spawn(cmd, args, { stdio: ["ignore", "pipe", "pipe"] });
|
|
337
|
+
}
|
|
338
|
+
catch {
|
|
339
|
+
return void resolve(""); // not a runnable path
|
|
340
|
+
}
|
|
341
|
+
hard = setTimeout(() => {
|
|
342
|
+
child.kill("SIGKILL");
|
|
343
|
+
finish();
|
|
344
|
+
}, timeoutMs);
|
|
345
|
+
child.stdout.on("data", (d) => {
|
|
346
|
+
if (out.length < MAX)
|
|
347
|
+
out += d.toString();
|
|
348
|
+
});
|
|
349
|
+
child.stderr.on("data", () => { });
|
|
350
|
+
child.on("error", finish); // not installed
|
|
351
|
+
child.on("close", finish); // streams closed — everything it wrote is here
|
|
352
|
+
child.on("exit", () => {
|
|
353
|
+
// ...unless something it spawned still holds the pipe. Give the buffered
|
|
354
|
+
// bytes a moment to arrive, then take what we have.
|
|
355
|
+
drain = setTimeout(finish, 300);
|
|
356
|
+
});
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
/** Model ids a CLI prints (one per line), ANSI stripped. Never throws. */
|
|
360
|
+
export function runModelList(cmd, args) {
|
|
361
|
+
return runCapture(cmd, args).then((stdout) => {
|
|
362
|
+
const models = [];
|
|
363
|
+
for (const raw of stdout.split("\n")) {
|
|
364
|
+
// strip ANSI + leading bullets, take the first token: grok prints
|
|
365
|
+
// " * grok-4.5 (default)", opencode a bare "provider/id" per line.
|
|
366
|
+
// eslint-disable-next-line no-control-regex
|
|
367
|
+
const cleaned = raw.replace(/\u001b?\[[0-9;]*m/g, "").replace(/^[\s>*+-]+/, "").trim();
|
|
368
|
+
const tok = cleaned.split(/\s+/)[0] ?? "";
|
|
369
|
+
if (/^[A-Za-z0-9][\w./:@+-]*$/.test(tok) &&
|
|
370
|
+
tok.length < 120 &&
|
|
371
|
+
!/^(you|default|available|logged|models?|none|error)$/i.test(tok)) {
|
|
372
|
+
models.push(tok);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
return [...new Set(models)];
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
/**
|
|
379
|
+
* codex's own model catalog, which it will print as JSON: `codex debug models`.
|
|
380
|
+
*
|
|
381
|
+
* Not a documented list command — it's under `debug` — but it is the CLI
|
|
382
|
+
* answering about itself rather than us remembering, and it's the same catalog
|
|
383
|
+
* the picker in codex's own TUI is built from. Each entry carries a `slug` (the
|
|
384
|
+
* value `-m` takes) and a `visibility`; `hide` means internal (codex-auto-review
|
|
385
|
+
* is one), and offering an agent a model its own UI won't is offering a
|
|
386
|
+
* failure. ~65ms and 184KB on this machine — the base instructions for every
|
|
387
|
+
* model ride along in that JSON, hence the buffer.
|
|
388
|
+
*
|
|
389
|
+
* Empty on any older codex that has no `debug models`, which is the caller's cue
|
|
390
|
+
* to fall back and say so.
|
|
391
|
+
*/
|
|
392
|
+
export function codexModelCatalog(bin) {
|
|
393
|
+
return runCapture(bin, ["debug", "models"]).then((stdout) => {
|
|
394
|
+
try {
|
|
395
|
+
const parsed = JSON.parse(stdout);
|
|
396
|
+
const slugs = (parsed.models ?? [])
|
|
397
|
+
.filter((m) => m.visibility !== "hide")
|
|
398
|
+
.map((m) => String(m.slug ?? "").trim())
|
|
399
|
+
.filter(Boolean);
|
|
400
|
+
return [...new Set(slugs)];
|
|
401
|
+
}
|
|
402
|
+
catch {
|
|
403
|
+
return []; // not JSON — an older codex, or one that errored
|
|
404
|
+
}
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* The models an agent kind can run, and whether Loom asked or remembered.
|
|
409
|
+
*
|
|
410
|
+
* Four of the five adapters can be asked, each in its own dialect: `opencode
|
|
411
|
+
* models` (~500 lines across every provider it has), `grok models`, `agy models`
|
|
412
|
+
* (the Antigravity CLI — this branch was missing entirely, so its picker offered
|
|
413
|
+
* "Default" and "Custom…" and nothing else), and `codex debug models`, which
|
|
414
|
+
* prints a JSON catalog rather than lines. Claude Code cannot be asked at all —
|
|
415
|
+
* see CLAUDE_MODELS.
|
|
416
|
+
*
|
|
417
|
+
* `source` is the point of the return shape. "cli" means the tool answered;
|
|
418
|
+
* "builtin" means it couldn't and this is Loom's remembered list, which the UI
|
|
419
|
+
* must be able to say out loud instead of implying a lookup that never
|
|
420
|
+
* happened. An uninstalled CLI answers with nothing, and an empty answer from a
|
|
421
|
+
* CLI is still "cli" — an empty picker for a tool you don't have is the honest
|
|
422
|
+
* result, not a reason to serve it a remembered list behind its back. codex is
|
|
423
|
+
* the one exception: an empty answer there can equally mean a codex too old to
|
|
424
|
+
* have `debug models`, so it falls back — and "builtin" is the true label for
|
|
425
|
+
* whichever of the two it was.
|
|
426
|
+
*
|
|
427
|
+
* Cached 60s per kind: the pickers reopen constantly and none of these change
|
|
428
|
+
* between two clicks.
|
|
429
|
+
*/
|
|
430
|
+
export async function listModelsForKind(kind) {
|
|
431
|
+
const hit = MODEL_LIST_CACHE.get(kind);
|
|
432
|
+
if (hit && Date.now() - hit.ts < 60_000)
|
|
433
|
+
return hit.list;
|
|
434
|
+
let list = { models: [], source: "none" };
|
|
435
|
+
if (kind === "opencode") {
|
|
436
|
+
list = { models: await runModelList("opencode", ["models"]), source: "cli" };
|
|
437
|
+
}
|
|
438
|
+
else if (kind === "grok-code") {
|
|
439
|
+
list = { models: await runModelList(grokBin() ?? "grok", ["models"]), source: "cli" };
|
|
440
|
+
}
|
|
441
|
+
else if (kind === "antigravity-cli") {
|
|
442
|
+
list = { models: await runModelList(agyBin() ?? "agy", ["models"]), source: "cli" };
|
|
443
|
+
}
|
|
444
|
+
else if (kind === "codex") {
|
|
445
|
+
const slugs = await codexModelCatalog(codexBin() ?? "codex");
|
|
446
|
+
list = slugs.length ? { models: slugs, source: "cli" } : { models: CODEX_MODELS, source: "builtin" };
|
|
447
|
+
}
|
|
448
|
+
else if (kind === "claude-code") {
|
|
449
|
+
list = { models: CLAUDE_MODELS, source: "builtin" };
|
|
450
|
+
}
|
|
451
|
+
else if (kind === "model") {
|
|
452
|
+
// Not a CLI to ask and not a list to hardcode: the providers themselves
|
|
453
|
+
// say what they have, and it changes under you (see #82).
|
|
454
|
+
const { models } = await allModels();
|
|
455
|
+
list = { models: models.map((m) => `${m.provider}/${m.id}`), source: "api" };
|
|
456
|
+
}
|
|
457
|
+
MODEL_LIST_CACHE.set(kind, { list, ts: Date.now() });
|
|
458
|
+
return list;
|
|
459
|
+
}
|
|
460
|
+
/**
|
|
461
|
+
* Bring Tailscale up from inside the app. Runs `tailscale up`; if the machine
|
|
462
|
+
* needs to sign in, that prints a one-time login URL and then blocks until the
|
|
463
|
+
* user authorizes — so we resolve with the URL as soon as we see it and leave
|
|
464
|
+
* the process running (unref'd) to finish the handshake in the background. If it
|
|
465
|
+
* was already signed in, `up` returns fast and we resolve with the tailnet IP.
|
|
466
|
+
*/
|
|
467
|
+
export function tailscaleUp() {
|
|
468
|
+
return new Promise((resolve, reject) => {
|
|
469
|
+
let child;
|
|
470
|
+
try {
|
|
471
|
+
child = spawn("tailscale", ["up"], { detached: true, stdio: ["ignore", "pipe", "pipe"] });
|
|
472
|
+
}
|
|
473
|
+
catch (err) {
|
|
474
|
+
return void reject(err instanceof Error ? err : new Error(String(err)));
|
|
475
|
+
}
|
|
476
|
+
let settled = false;
|
|
477
|
+
const settle = (fn) => {
|
|
478
|
+
if (settled)
|
|
479
|
+
return;
|
|
480
|
+
settled = true;
|
|
481
|
+
fn();
|
|
482
|
+
};
|
|
483
|
+
const scan = (buf) => {
|
|
484
|
+
const m = buf.toString().match(/https:\/\/login\.tailscale\.com\/\S+/);
|
|
485
|
+
if (m)
|
|
486
|
+
settle(() => {
|
|
487
|
+
child.unref(); // keep it running in the background to finish the login
|
|
488
|
+
resolve({ loginUrl: m[0] });
|
|
489
|
+
});
|
|
490
|
+
};
|
|
491
|
+
child.stdout?.on("data", scan);
|
|
492
|
+
child.stderr?.on("data", scan);
|
|
493
|
+
child.on("error", (err) => settle(() => reject(err)));
|
|
494
|
+
child.on("exit", () => {
|
|
495
|
+
// Exited before printing a URL: either it was already up, or it failed.
|
|
496
|
+
if (settled)
|
|
497
|
+
return;
|
|
498
|
+
tailscaleIp().then((ip) => settle(() => resolve({ ip })), () => settle(() => reject(new Error("tailscale up exited without a login URL"))));
|
|
499
|
+
});
|
|
500
|
+
setTimeout(() => settle(() => reject(new Error("timed out waiting for Tailscale to start"))), 25_000);
|
|
501
|
+
});
|
|
502
|
+
}
|
|
503
|
+
/**
|
|
504
|
+
* This machine's LAN IPv4 — the address a phone on the same Wi-Fi uses. We skip
|
|
505
|
+
* loopback, link-local (169.254), and Tailscale's own 100.64/10 CGNAT range so
|
|
506
|
+
* "local network" and "tailnet" stay distinct choices. Returns null when the
|
|
507
|
+
* only addresses are loopback (e.g. no network) — the caller says so honestly
|
|
508
|
+
* rather than minting an unreachable QR.
|
|
509
|
+
*/
|
|
510
|
+
export function lanIp() {
|
|
511
|
+
const ifaces = os.networkInterfaces();
|
|
512
|
+
const candidates = [];
|
|
513
|
+
for (const addrs of Object.values(ifaces)) {
|
|
514
|
+
for (const a of addrs ?? []) {
|
|
515
|
+
if (a.family !== "IPv4" || a.internal)
|
|
516
|
+
continue;
|
|
517
|
+
if (a.address.startsWith("169.254."))
|
|
518
|
+
continue; // link-local, not routable
|
|
519
|
+
if (a.address.startsWith("100."))
|
|
520
|
+
continue; // Tailscale CGNAT — that's the tailnet
|
|
521
|
+
candidates.push(a.address);
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
// Prefer the common private ranges (a real LAN) over anything exotic.
|
|
525
|
+
const priv = candidates.find((ip) => ip.startsWith("192.168.") || ip.startsWith("10.") || /^172\.(1[6-9]|2\d|3[01])\./.test(ip));
|
|
526
|
+
return priv ?? candidates[0] ?? null;
|
|
527
|
+
}
|
|
528
|
+
/** Is this connection from the same machine? (127.0.0.1, ::1, or v4-mapped v6.) */
|
|
529
|
+
export function isLoopback(remoteAddress) {
|
|
530
|
+
if (!remoteAddress)
|
|
531
|
+
return false;
|
|
532
|
+
return (remoteAddress === "127.0.0.1" ||
|
|
533
|
+
remoteAddress === "::1" ||
|
|
534
|
+
remoteAddress === "::ffff:127.0.0.1");
|
|
535
|
+
}
|
|
536
|
+
/**
|
|
537
|
+
* Is the request's `Host` header a loopback literal? The anti-DNS-rebinding
|
|
538
|
+
* check: a rebinding attacker loads a page from their own domain, so the browser
|
|
539
|
+
* sends `Host: attacker.example` even after the name rebinds to 127.0.0.1 — while
|
|
540
|
+
* the genuine local console is always reached at `127.0.0.1`/`localhost`. Pairing
|
|
541
|
+
* the socket check with this closes the "any website → localhost token oracle"
|
|
542
|
+
* path. The port is ignored; only the host is checked.
|
|
543
|
+
*/
|
|
544
|
+
export function isLoopbackHost(hostHeader) {
|
|
545
|
+
if (!hostHeader)
|
|
546
|
+
return false;
|
|
547
|
+
let host = hostHeader.trim().toLowerCase();
|
|
548
|
+
if (host.startsWith("[")) {
|
|
549
|
+
const end = host.indexOf("]");
|
|
550
|
+
host = end > 0 ? host.slice(1, end) : host.slice(1);
|
|
551
|
+
}
|
|
552
|
+
else if ((host.match(/:/g) || []).length === 1) {
|
|
553
|
+
host = host.slice(0, host.indexOf(":")); // strip the port off host:port
|
|
554
|
+
}
|
|
555
|
+
return host === "127.0.0.1" || host === "localhost" || host === "::1";
|
|
556
|
+
}
|
|
557
|
+
//# sourceMappingURL=system.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system.js","sourceRoot":"","sources":["../../src/daemon/system.ts"],"names":[],"mappings":"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"}
|
package/dist/daemon/tasks.js
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* no GitHub remote, we say so rather than showing an empty table that looks
|
|
9
9
|
* like "no issues".
|
|
10
10
|
*/
|
|
11
|
-
import { execFile } from "
|
|
11
|
+
import { execFile } from "../core/process.js";
|
|
12
12
|
import { cliAvailable } from "../adapters/base.js";
|
|
13
13
|
/** gh writes multi-line help after the cause; the first line is the cause. */
|
|
14
14
|
function firstLine(msg) {
|