@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,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Proof, run: check an agent's finished turn (see core/proof.ts for the rules).
|
|
3
|
+
*
|
|
4
|
+
* The re-run happens in a clean checkout of exactly what the agent left: a
|
|
5
|
+
* detached worktree at HEAD, the working tree's tracked changes applied, its
|
|
6
|
+
* new files copied, and the project's dependency folders linked rather than
|
|
7
|
+
* reinstalled — so it's the agent's code, not its terminal session, under test.
|
|
8
|
+
* The verdict lands in the turn's chat as a `proof` event.
|
|
9
|
+
*/
|
|
10
|
+
import fs from "node:fs";
|
|
11
|
+
import os from "node:os";
|
|
12
|
+
import path from "node:path";
|
|
13
|
+
import { randomUUID } from "node:crypto";
|
|
14
|
+
import { promisify } from "node:util";
|
|
15
|
+
import { execFile } from "../core/process.js";
|
|
16
|
+
import { runCommand } from "../core/run-command.js";
|
|
17
|
+
import { detectTestCommand, evidenceFrom, extractClaims, judge, parseCounts } from "../core/proof.js";
|
|
18
|
+
import { loomHome } from "../core/registry.js";
|
|
19
|
+
import { MAIN_CHAT } from "../types.js";
|
|
20
|
+
const exec = promisify(execFile);
|
|
21
|
+
/** Dependency folders a clean checkout borrows from the real one, instead of installing. */
|
|
22
|
+
const DEP_DIRS = ["node_modules", ".venv", "venv", "vendor"];
|
|
23
|
+
export class ProofRunner {
|
|
24
|
+
host;
|
|
25
|
+
chain = Promise.resolve();
|
|
26
|
+
running = new Set();
|
|
27
|
+
constructor(host) {
|
|
28
|
+
this.host = host;
|
|
29
|
+
}
|
|
30
|
+
/** The newest finished turn in a chat: its agent, final reply, and every event since the request it answered. */
|
|
31
|
+
turn(chat = MAIN_CHAT, at) {
|
|
32
|
+
const recent = this.host.list({ chat, limit: 600, ...(at ? { before: at + 1 } : {}) });
|
|
33
|
+
const doneAt = [...recent].reverse().findIndex((e) => e.kind === "run_complete" && e.agentId);
|
|
34
|
+
if (doneAt < 0)
|
|
35
|
+
return null;
|
|
36
|
+
const di = recent.length - 1 - doneAt;
|
|
37
|
+
const done = recent[di];
|
|
38
|
+
const agentId = done.agentId;
|
|
39
|
+
// the turn starts after the last message that wasn't this agent's reply (the request), or the previous turn's end
|
|
40
|
+
let start = 0;
|
|
41
|
+
for (let i = di - 1; i >= 0; i--) {
|
|
42
|
+
const e = recent[i];
|
|
43
|
+
if (e.kind === "run_complete" || (e.kind === "message" && !e.agentId)) {
|
|
44
|
+
start = i + 1;
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
const events = recent.slice(start, di + 1).filter((e) => !e.agentId || e.agentId === agentId);
|
|
49
|
+
const reply = [...events].reverse().find((e) => e.kind === "message" && e.agentId === agentId && !e.payload.reasoning && typeof e.payload.text === "string") ?? null;
|
|
50
|
+
return { agentId, reply, done, events };
|
|
51
|
+
}
|
|
52
|
+
/** Should this finished turn be checked without being asked? (Its reply claims something.) */
|
|
53
|
+
wantsAuto(done) {
|
|
54
|
+
if ((this.host.config().auto ?? "claims") === "off" || !done.agentId)
|
|
55
|
+
return false;
|
|
56
|
+
const t = this.turn(done.chat ?? MAIN_CHAT, done.id);
|
|
57
|
+
return Boolean(t?.reply && extractClaims(String(t.reply.payload.text)).length);
|
|
58
|
+
}
|
|
59
|
+
/** Check the newest finished turn in `chat`. One proof at a time per project; a second ask for the same turn joins the first. */
|
|
60
|
+
prove(chat = MAIN_CHAT, opts = {}) {
|
|
61
|
+
this.pending++;
|
|
62
|
+
const run = this.chain.then(() => this.proveNow(chat, opts));
|
|
63
|
+
this.chain = run.catch(() => { });
|
|
64
|
+
void run.finally(() => { this.pending--; }).catch(() => { });
|
|
65
|
+
return run;
|
|
66
|
+
}
|
|
67
|
+
pending = 0;
|
|
68
|
+
/** A check asked for or running — a Night Shift waits for it before it reports. */
|
|
69
|
+
get busy() { return this.pending > 0; }
|
|
70
|
+
async proveNow(chat, opts) {
|
|
71
|
+
const t = this.turn(chat, opts.at);
|
|
72
|
+
if (!t)
|
|
73
|
+
return null;
|
|
74
|
+
const key = `${chat}:${t.done.id}`;
|
|
75
|
+
if (this.running.has(key))
|
|
76
|
+
return null;
|
|
77
|
+
this.running.add(key);
|
|
78
|
+
try {
|
|
79
|
+
const text = t.reply ? String(t.reply.payload.text) : "";
|
|
80
|
+
const claims = extractClaims(text);
|
|
81
|
+
const ran = evidenceFrom(t.events);
|
|
82
|
+
const command = opts.testCommand ?? this.host.config().testCommand ?? detectTestCommand(this.host.dir);
|
|
83
|
+
const rerun = command ? await this.rerun(command) : null;
|
|
84
|
+
const result = judge(claims, ran, rerun);
|
|
85
|
+
const event = this.host.append({ kind: "proof", chat: chat === MAIN_CHAT ? undefined : chat, payload: {
|
|
86
|
+
verdict: result.verdict, headline: result.headline, about: t.agentId,
|
|
87
|
+
turn: { done: t.done.id, ...(t.reply ? { reply: t.reply.id } : {}) },
|
|
88
|
+
claims: result.claims, ran: result.ran.slice(-12),
|
|
89
|
+
...(result.rerun ? { rerun: result.rerun } : {}), ...(opts.auto ? { auto: true } : {}),
|
|
90
|
+
} });
|
|
91
|
+
return { ...result, eventId: event.id };
|
|
92
|
+
}
|
|
93
|
+
finally {
|
|
94
|
+
this.running.delete(key);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/** Run `command` against a clean checkout of the working tree as it is now. */
|
|
98
|
+
async rerun(command) {
|
|
99
|
+
const timeoutMs = Math.max(1, this.host.config().timeoutMin ?? 10) * 60_000;
|
|
100
|
+
const repo = await this.gitRoot();
|
|
101
|
+
if (!repo) {
|
|
102
|
+
// not a git checkout: there's no clean copy to make, so it runs where it is (and says so)
|
|
103
|
+
const r = await runCommand(command, this.host.dir, { timeoutMs, keep: 64_000 });
|
|
104
|
+
return this.toRerun(command, r, false);
|
|
105
|
+
}
|
|
106
|
+
const dir = path.join(loomHome(), "proof", this.host.projectId, randomUUID().slice(0, 8));
|
|
107
|
+
fs.mkdirSync(path.dirname(dir), { recursive: true });
|
|
108
|
+
await exec("git", ["worktree", "add", "--detach", "-q", dir, "HEAD"], { cwd: repo });
|
|
109
|
+
try {
|
|
110
|
+
await this.copyWorkingTree(repo, dir);
|
|
111
|
+
for (const dep of DEP_DIRS) {
|
|
112
|
+
const from = path.join(repo, dep), to = path.join(dir, dep);
|
|
113
|
+
if (fs.existsSync(from) && !fs.existsSync(to))
|
|
114
|
+
fs.symlinkSync(from, to, process.platform === "win32" ? "junction" : "dir");
|
|
115
|
+
}
|
|
116
|
+
// where the project sits in the repo, as git sees it — comparing paths ourselves trips on
|
|
117
|
+
// /private/var vs /var (macOS) and short 8.3 names like RUNNER~1 (Windows)
|
|
118
|
+
const { stdout: prefix } = await exec("git", ["rev-parse", "--show-prefix"], { cwd: this.host.dir });
|
|
119
|
+
const sub = prefix.trim().replace(/\/$/, "");
|
|
120
|
+
const r = await runCommand(command, sub ? path.join(dir, ...sub.split("/")) : dir, { timeoutMs, keep: 64_000 });
|
|
121
|
+
return this.toRerun(command, r, true);
|
|
122
|
+
}
|
|
123
|
+
finally {
|
|
124
|
+
await exec("git", ["worktree", "remove", "--force", dir], { cwd: repo }).catch(() => fs.rmSync(dir, { recursive: true, force: true }));
|
|
125
|
+
await exec("git", ["worktree", "prune"], { cwd: repo }).catch(() => { });
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
toRerun(command, r, clean) {
|
|
129
|
+
const counts = parseCounts(r.output);
|
|
130
|
+
return { command, exitCode: r.exitCode, ok: r.ok, ms: r.ms, tail: r.output.slice(-3000), clean,
|
|
131
|
+
...(counts ? { counts } : {}), ...(r.timedOut ? { timedOut: true } : {}) };
|
|
132
|
+
}
|
|
133
|
+
async gitRoot() {
|
|
134
|
+
try {
|
|
135
|
+
const { stdout } = await exec("git", ["rev-parse", "--show-toplevel"], { cwd: this.host.dir });
|
|
136
|
+
const root = stdout.trim();
|
|
137
|
+
return root && (await exec("git", ["rev-parse", "--verify", "HEAD"], { cwd: root }).then(() => true, () => false)) ? root : null;
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/** The agent's uncommitted work: tracked changes as a patch, new files copied (Loom's own .loom/ excluded). */
|
|
144
|
+
async copyWorkingTree(repo, dir) {
|
|
145
|
+
const { stdout: patch } = await exec("git", ["diff", "HEAD", "--binary"], { cwd: repo, maxBuffer: 256 * 1024 * 1024 });
|
|
146
|
+
if (patch.trim()) {
|
|
147
|
+
const file = path.join(os.tmpdir(), `loom-proof-${randomUUID().slice(0, 8)}.patch`);
|
|
148
|
+
fs.writeFileSync(file, patch);
|
|
149
|
+
try {
|
|
150
|
+
await exec("git", ["apply", "--binary", "--whitespace=nowarn", file], { cwd: dir });
|
|
151
|
+
}
|
|
152
|
+
finally {
|
|
153
|
+
fs.rmSync(file, { force: true });
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
const { stdout: untracked } = await exec("git", ["ls-files", "--others", "--exclude-standard", "-z"], { cwd: repo, maxBuffer: 64 * 1024 * 1024 });
|
|
157
|
+
for (const rel of untracked.split("\0").filter(Boolean)) {
|
|
158
|
+
if (rel === ".loom" || rel.startsWith(".loom/"))
|
|
159
|
+
continue;
|
|
160
|
+
const from = path.join(repo, rel), to = path.join(dir, rel);
|
|
161
|
+
const stat = fs.lstatSync(from, { throwIfNoEntry: false });
|
|
162
|
+
if (!stat)
|
|
163
|
+
continue;
|
|
164
|
+
fs.mkdirSync(path.dirname(to), { recursive: true });
|
|
165
|
+
if (stat.isSymbolicLink())
|
|
166
|
+
fs.symlinkSync(fs.readlinkSync(from), to);
|
|
167
|
+
else if (stat.isFile())
|
|
168
|
+
fs.copyFileSync(from, to);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=proof.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proof.js","sourceRoot":"","sources":["../../src/daemon/proof.ts"],"names":[],"mappings":"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"}
|
package/dist/daemon/push.d.ts
CHANGED
|
@@ -15,8 +15,26 @@ export interface PushMessage {
|
|
|
15
15
|
body: string;
|
|
16
16
|
data?: Record<string, unknown>;
|
|
17
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* What a push is about — the kinds a phone can switch on and off:
|
|
20
|
+
* questions an agent (or a goal, or a crew) is waiting on your answer
|
|
21
|
+
* approvals a tool call is waiting on Allow / Deny, or a crew's plan on approval
|
|
22
|
+
* done an agent finished a turn in a chat of yours
|
|
23
|
+
* goals an Orchestra run, race, crew goal or route finished, failed or needs you
|
|
24
|
+
* updates a new Loom release is out (LoomDaemon.watchReleases)
|
|
25
|
+
*/
|
|
26
|
+
export type PushCategory = "questions" | "approvals" | "done" | "goals" | "updates";
|
|
27
|
+
export declare const PUSH_CATEGORIES: PushCategory[];
|
|
18
28
|
/** Kinds that reach the phone. run_complete is filtered upstream during routes. */
|
|
19
29
|
export declare const PUSH_KINDS: Set<string>;
|
|
20
|
-
|
|
30
|
+
/** Which category this event pushes under, or null when it doesn't buzz the phone. */
|
|
31
|
+
export declare function pushCategory(event: LoomEvent): PushCategory | null;
|
|
32
|
+
/** May this device get this category? A device that never chose gets them all. */
|
|
33
|
+
export declare function wantsPush(kinds: string[] | undefined, category: PushCategory): boolean;
|
|
34
|
+
/** Does this event buzz the phone? */
|
|
35
|
+
export declare function shouldPush(event: LoomEvent): boolean;
|
|
36
|
+
export declare function pushContent(projectName: string, event: LoomEvent, extra?: {
|
|
37
|
+
reply?: string;
|
|
38
|
+
}): PushMessage;
|
|
21
39
|
/** Send one message to many devices in a single Expo batch call. Best-effort. */
|
|
22
40
|
export declare function sendExpoPush(tokens: string[], message: PushMessage): Promise<void>;
|
package/dist/daemon/push.js
CHANGED
|
@@ -10,16 +10,77 @@
|
|
|
10
10
|
* (used by tests to point at a mock).
|
|
11
11
|
*/
|
|
12
12
|
const EXPO_PUSH_URL = "https://exp.host/--/api/v2/push/send";
|
|
13
|
+
export const PUSH_CATEGORIES = ["questions", "approvals", "done", "goals", "updates"];
|
|
13
14
|
/** Kinds that reach the phone. run_complete is filtered upstream during routes. */
|
|
14
15
|
export const PUSH_KINDS = new Set(["needs_input", "run_complete", "route_completed", "route_failed"]);
|
|
15
|
-
|
|
16
|
+
/** Which category this event pushes under, or null when it doesn't buzz the phone. */
|
|
17
|
+
export function pushCategory(event) {
|
|
18
|
+
const p = event.payload ?? {};
|
|
19
|
+
switch (event.kind) {
|
|
20
|
+
case "needs_input": return "questions";
|
|
21
|
+
case "run_complete": return "done";
|
|
22
|
+
// a "done" that didn't hold is news; a verified one repeats the done push
|
|
23
|
+
case "proof": return p.verdict === "contradicted" ? "done" : null;
|
|
24
|
+
case "route_completed":
|
|
25
|
+
case "route_failed": return "goals";
|
|
26
|
+
// an agent out of quota: the work changed hands, or waits for the reset
|
|
27
|
+
// an agent out of quota: the work changed hands, or waits for the reset; an agent going in circles needs you
|
|
28
|
+
case "status": return p.state === "quota_relay" || p.state === "quota_limit" ? "done" : p.state === "loop_detected" || p.state === "shield_tripped" ? "questions" : null;
|
|
29
|
+
case "approval": return p.phase === "requested" ? "approvals" : null;
|
|
30
|
+
// the morning report: a night shift's work, done
|
|
31
|
+
case "shift": return p.phase === "report" ? "goals" : null;
|
|
32
|
+
case "orchestra":
|
|
33
|
+
if (p.phase === "alert" || p.phase === "completed" || p.phase === "failed" || p.phase === "aborted")
|
|
34
|
+
return "goals";
|
|
35
|
+
return p.phase === "waiting" ? "questions" : null;
|
|
36
|
+
case "crew":
|
|
37
|
+
if (p.phase === "paused" || p.phase === "team_hold" || p.phase === "race_ready")
|
|
38
|
+
return "questions";
|
|
39
|
+
if (p.phase === "request_received")
|
|
40
|
+
return "approvals";
|
|
41
|
+
if (p.phase === "completed" || p.phase === "failed")
|
|
42
|
+
return "goals";
|
|
43
|
+
if (p.phase === "asks")
|
|
44
|
+
return "questions";
|
|
45
|
+
return p.phase === "planned" && p.awaitingApproval ? "approvals" : null;
|
|
46
|
+
default: return null;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/** May this device get this category? A device that never chose gets them all. */
|
|
50
|
+
export function wantsPush(kinds, category) {
|
|
51
|
+
return !kinds || kinds.includes(category);
|
|
52
|
+
}
|
|
53
|
+
/** Does this event buzz the phone? */
|
|
54
|
+
export function shouldPush(event) {
|
|
55
|
+
return pushCategory(event) !== null;
|
|
56
|
+
}
|
|
57
|
+
const clip = (s, n) => String(s ?? "").replace(/\s+/g, " ").trim().slice(0, n);
|
|
58
|
+
export function pushContent(projectName, event, extra = {}) {
|
|
16
59
|
const title = `Loom · ${projectName}`;
|
|
17
60
|
const p = event.payload;
|
|
18
61
|
switch (event.kind) {
|
|
19
62
|
case "needs_input":
|
|
20
|
-
return { title
|
|
63
|
+
return { title: `${event.agentId ?? "An agent"} needs you · ${projectName}`, body: clip(p.question, 160) || "it's waiting on your answer" };
|
|
64
|
+
case "status":
|
|
65
|
+
if (p.state === "quota_relay" || p.state === "quota_limit")
|
|
66
|
+
return { title: `${String(p.from ?? event.agentId ?? "An agent")} ran out of quota · ${projectName}`, body: clip(p.text, 160) };
|
|
67
|
+
if (p.state === "shield_tripped")
|
|
68
|
+
return { title: `⛔ ${event.agentId ?? "An agent"} ran ${clip(p.what, 50)} · ${projectName}`,
|
|
69
|
+
body: `${clip(p.command, 110)}${p.stopped ? " — Loom stopped the turn" : ""}` };
|
|
70
|
+
if (p.state === "loop_detected")
|
|
71
|
+
return { title: `${event.agentId ?? "An agent"} is going in circles · ${projectName}`,
|
|
72
|
+
body: `${clip(p.text, 140)}${p.nudged ? " — Loom stopped it and asked it to step back" : " — Stop, Nudge or hand it off"}` };
|
|
73
|
+
return { title, body: clip(p.text ?? p.state, 160) };
|
|
74
|
+
case "proof":
|
|
75
|
+
return { title: `⚠ ${String(p.about ?? "An agent")}'s “done” didn't hold · ${projectName}`, body: clip(p.headline, 160) };
|
|
21
76
|
case "run_complete":
|
|
22
|
-
return { title
|
|
77
|
+
return { title: `${event.agentId ?? "An agent"} is done · ${projectName}`, body: extra.reply ? clip(extra.reply, 160) : "finished its turn" };
|
|
78
|
+
case "approval":
|
|
79
|
+
return { title: `${event.agentId ?? "An agent"} wants to use ${clip(p.tool, 40)} · ${projectName}`, body: clip(p.input, 140) || "Allow or deny it" };
|
|
80
|
+
case "shift":
|
|
81
|
+
if (p.phase === "report")
|
|
82
|
+
return { title: `🌙 Night shift done · ${projectName}`, body: `${clip(p.summary, 140)}${p.stopped ? ` — stopped: ${clip(p.stopped, 60)}` : ""}` };
|
|
83
|
+
return { title, body: "night shift started" };
|
|
23
84
|
case "route_completed":
|
|
24
85
|
return { title, body: `✔ route complete (${Number(p.steps ?? 0)} steps)` };
|
|
25
86
|
case "route_failed":
|
|
@@ -27,6 +88,32 @@ export function pushContent(projectName, event) {
|
|
|
27
88
|
title,
|
|
28
89
|
body: `${p.aborted ? "⊘ route stopped" : "✗ route failed"}: ${String(p.reason ?? "").slice(0, 120)}`,
|
|
29
90
|
};
|
|
91
|
+
case "orchestra":
|
|
92
|
+
if (p.phase === "completed")
|
|
93
|
+
return { title: `Goal done · ${projectName}`, body: clip(p.summary ?? p.goal, 160) || "the run finished" };
|
|
94
|
+
if (p.phase === "failed" || p.phase === "aborted")
|
|
95
|
+
return { title: `Goal ${p.phase} · ${projectName}`, body: clip(p.error ?? p.goal, 160) };
|
|
96
|
+
if (p.phase === "waiting")
|
|
97
|
+
return { title: `A goal needs you · ${projectName}`, body: clip(p.question, 160) };
|
|
98
|
+
return { title, body: String(p.text ?? "a goal needs you").slice(0, 160) };
|
|
99
|
+
case "crew":
|
|
100
|
+
if (p.phase === "paused")
|
|
101
|
+
return { title: `Crew paused · ${projectName}`, body: clip(p.reason, 160) || "Review its budget and resume when ready" };
|
|
102
|
+
if (p.phase === "team_hold")
|
|
103
|
+
return { title: `Crew held · ${projectName}`, body: clip(p.hold?.reason, 160) || "Review the overlapping card before continuing" };
|
|
104
|
+
if (p.phase === "race_ready")
|
|
105
|
+
return { title: `Choose a crew result · ${projectName}`, body: "The race results are ready for your review" };
|
|
106
|
+
if (p.phase === "request_received")
|
|
107
|
+
return { title: `Crew request · ${projectName}`, body: `${clip(p.from, 40)} requests ${clip(p.teammate, 40)}. Accept or decline in Crew.` };
|
|
108
|
+
if (p.phase === "completed")
|
|
109
|
+
return { title: `${clip(p.crew, 40) || "Crew"} finished · ${projectName}`, body: clip(p.summary ?? p.text, 160) || "the goal is done — apply it when you're ready" };
|
|
110
|
+
if (p.phase === "failed")
|
|
111
|
+
return { title: `${clip(p.crew, 40) || "Crew"} stopped · ${projectName}`, body: clip(p.error, 160) || "the goal failed" };
|
|
112
|
+
if (p.phase === "asks")
|
|
113
|
+
return { title: `${clip(p.teammate, 30) || "A teammate"} asks · ${projectName}`, body: clip(p.question, 160) };
|
|
114
|
+
if (p.phase === "planned")
|
|
115
|
+
return { title: `${clip(p.crew, 40) || "Crew"} has a plan · ${projectName}`, body: "approve it to start building" };
|
|
116
|
+
return { title, body: String(p.phase ?? "crew") };
|
|
30
117
|
default:
|
|
31
118
|
return { title, body: event.kind };
|
|
32
119
|
}
|
package/dist/daemon/push.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/daemon/push.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,MAAM,aAAa,GAAG,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/daemon/push.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Loom Cloud — the daemon end of the relay.
|
|
3
|
+
*
|
|
4
|
+
* Tailscale reaches your machine when the phone is on your tailnet. Loom Cloud
|
|
5
|
+
* reaches it from anywhere: the daemon joins a Supabase Realtime channel and
|
|
6
|
+
* answers encrypted requests that arrive there. See core/relay-protocol.ts for
|
|
7
|
+
* the wire format and why Supabase never sees plaintext.
|
|
8
|
+
*
|
|
9
|
+
* The bridge is deliberately dumb. It does not re-implement the API — each
|
|
10
|
+
* relayed request becomes a real HTTP call against this daemon on loopback,
|
|
11
|
+
* carrying the phone's own bearer token, and each live stream is a real /ws
|
|
12
|
+
* connection opened with that token. So pairing, scopes, admin-only routes and
|
|
13
|
+
* every future endpoint behave identically over the relay and over the LAN.
|
|
14
|
+
*/
|
|
15
|
+
import { type RelayCredentials, type RelayTransport } from "../core/relay-protocol.js";
|
|
16
|
+
export interface CloudSettings {
|
|
17
|
+
enabled: boolean;
|
|
18
|
+
channel?: string;
|
|
19
|
+
key?: string;
|
|
20
|
+
/** Supabase project; env LOOM_SUPABASE_URL / LOOM_SUPABASE_ANON_KEY win. */
|
|
21
|
+
supabaseUrl?: string;
|
|
22
|
+
anonKey?: string;
|
|
23
|
+
}
|
|
24
|
+
export declare function readCloudSettings(): CloudSettings;
|
|
25
|
+
export declare function writeCloudSettings(s: CloudSettings): void;
|
|
26
|
+
/** The Supabase project in effect: env first, then saved settings. */
|
|
27
|
+
export declare function supabaseTarget(s?: CloudSettings): {
|
|
28
|
+
url: string;
|
|
29
|
+
anonKey: string;
|
|
30
|
+
} | null;
|
|
31
|
+
export declare function ensureCredentials(s: CloudSettings): RelayCredentials;
|
|
32
|
+
/** Supabase Realtime broadcast — the production transport. */
|
|
33
|
+
export declare function supabaseTransport(url: string, anonKey: string, channel: string): Promise<RelayTransport>;
|
|
34
|
+
/**
|
|
35
|
+
* An in-process broadcast bus with Supabase's semantics (everyone but the
|
|
36
|
+
* sender receives, asynchronously, JSON round-tripped). For tests and demos.
|
|
37
|
+
*/
|
|
38
|
+
export declare class MemoryRelayBus {
|
|
39
|
+
private members;
|
|
40
|
+
/** Every envelope that crossed the bus, as the relay operator would see it. */
|
|
41
|
+
readonly wire: unknown[];
|
|
42
|
+
connect(): RelayTransport;
|
|
43
|
+
}
|
|
44
|
+
export interface RelayBridgeOptions {
|
|
45
|
+
transport: RelayTransport;
|
|
46
|
+
key: string;
|
|
47
|
+
/** http://127.0.0.1:<port> — where relayed requests are executed. */
|
|
48
|
+
localBase: () => string;
|
|
49
|
+
identity: () => {
|
|
50
|
+
version: string;
|
|
51
|
+
name: string;
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
export declare class RelayBridge {
|
|
55
|
+
private opts;
|
|
56
|
+
private key;
|
|
57
|
+
private decoder;
|
|
58
|
+
private clients;
|
|
59
|
+
private sweeper;
|
|
60
|
+
private closed;
|
|
61
|
+
/** "<client>:<request id>" → when it was first run (see RelayRequest.ts). */
|
|
62
|
+
private seen;
|
|
63
|
+
stats: {
|
|
64
|
+
requests: number;
|
|
65
|
+
rejected: number;
|
|
66
|
+
frames: number;
|
|
67
|
+
replayed: number;
|
|
68
|
+
};
|
|
69
|
+
constructor(opts: RelayBridgeOptions);
|
|
70
|
+
clientCount(): number;
|
|
71
|
+
private client;
|
|
72
|
+
private send;
|
|
73
|
+
private handle;
|
|
74
|
+
private request;
|
|
75
|
+
private forgetSeen;
|
|
76
|
+
private subscribe;
|
|
77
|
+
private flush;
|
|
78
|
+
private unsubscribe;
|
|
79
|
+
/** A phone that stopped pinging is gone; don't hold a socket open for it. */
|
|
80
|
+
private sweep;
|
|
81
|
+
close(): Promise<void>;
|
|
82
|
+
}
|