@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,134 @@
|
|
|
1
|
+
import { type ExtractEngine } from "../../core/brain-extract.js";
|
|
2
|
+
import { type Hit, type RetrieveOpts } from "../../core/brain-index.js";
|
|
3
|
+
import { Brain } from "../../core/brain.js";
|
|
4
|
+
import type { RenderedProjection } from "../../core/distill.js";
|
|
5
|
+
import { type ProjectionInput } from "../../core/projection.js";
|
|
6
|
+
import type { EventJournal } from "../../core/eventlog.js";
|
|
7
|
+
import { type ImportedBlock } from "../../core/memory.js";
|
|
8
|
+
import type { SemanticIndex } from "../../core/semantic.js";
|
|
9
|
+
import type { LoomEvent, ProjectConfig, ProjectInfo, UnifiedMemory } from "../../types.js";
|
|
10
|
+
import { type TeamBrainHook } from '../runtime-support.js';
|
|
11
|
+
/** Dependencies owned by the project coordinator, read live for each operation. */
|
|
12
|
+
export interface RuntimeBriefingsHost {
|
|
13
|
+
info: ProjectInfo;
|
|
14
|
+
config: ProjectConfig;
|
|
15
|
+
log: EventJournal;
|
|
16
|
+
teamBrain: TeamBrainHook | null;
|
|
17
|
+
brain: Brain;
|
|
18
|
+
activeSkillsBlock: () => string;
|
|
19
|
+
turnChat: ReadonlyMap<string, string>;
|
|
20
|
+
extractionEngine: (model: string) => ExtractEngine;
|
|
21
|
+
renderProjection: (input: ProjectionInput) => Promise<RenderedProjection>;
|
|
22
|
+
createSemanticIndex: () => Pick<SemanticIndex, "start" | "sync" | "query" | "byId">;
|
|
23
|
+
/** Which memories made it into a prompt (the Brain tab's "used N×"). */
|
|
24
|
+
noteMemoriesUsed: (ids: string[]) => void;
|
|
25
|
+
}
|
|
26
|
+
/** Owns briefings state for exactly one open project. */
|
|
27
|
+
export declare class RuntimeBriefings {
|
|
28
|
+
private readonly host;
|
|
29
|
+
constructor(host: RuntimeBriefingsHost);
|
|
30
|
+
/**
|
|
31
|
+
* The dense retrieval channel, when this project opted in (brain.semantic).
|
|
32
|
+
*
|
|
33
|
+
* Null is the normal state, and null costs nothing: no model is loaded, no
|
|
34
|
+
* vectors are written, and retrieval is the three lexical channels. Loading
|
|
35
|
+
* happens in the background — the first brief after a cold start uses
|
|
36
|
+
* whatever is ready, which is the honest thing for something that takes ten
|
|
37
|
+
* seconds to warm up.
|
|
38
|
+
*/
|
|
39
|
+
private semantic;
|
|
40
|
+
private readonly lifetime;
|
|
41
|
+
private extractionScope;
|
|
42
|
+
cancelExtraction(): void;
|
|
43
|
+
private semanticGeneration;
|
|
44
|
+
close(): void;
|
|
45
|
+
/** Optional loading never delays opening a project; late results are discarded. */
|
|
46
|
+
configureSemantic(enabled: boolean): Promise<void>;
|
|
47
|
+
/** Prepare context without starting agents, taking the baton or touching UI.
|
|
48
|
+
* This retains the legacy selection policy until Brain continuity is built.
|
|
49
|
+
*/
|
|
50
|
+
prepareHandoff(to: string, from: string | null, mergeNote: string, bridgeIds: string[]): Promise<{
|
|
51
|
+
memory: string;
|
|
52
|
+
briefing: string;
|
|
53
|
+
mode: "template" | "llm";
|
|
54
|
+
elapsedMs: number;
|
|
55
|
+
bridges: Array<{
|
|
56
|
+
agentId: string;
|
|
57
|
+
memory: string;
|
|
58
|
+
}>;
|
|
59
|
+
}>;
|
|
60
|
+
/** Freshly read every connected ADE's native memory from disk. */
|
|
61
|
+
importedMemory(): ImportedBlock[];
|
|
62
|
+
/** The merged brain: decisions + imported ADE memories + shared context. */
|
|
63
|
+
unifiedMemory(): UnifiedMemory;
|
|
64
|
+
/**
|
|
65
|
+
* Phase 3: the brain brief for a handoff — the memories relevant to the work
|
|
66
|
+
* in flight, compiled. Query is the recent conversation plus the files recent
|
|
67
|
+
* turns touched; scoped to the incoming agent; low-confidence memories are
|
|
68
|
+
* held back from injection (they stay visible in the Brain tab). Empty string
|
|
69
|
+
* when there's nothing relevant, so callers append it unconditionally.
|
|
70
|
+
*/
|
|
71
|
+
retrieveBrief(events: LoomEvent[], agentId: string): Promise<string>;
|
|
72
|
+
/**
|
|
73
|
+
* The memory brief for a query. Solo: this project's brain. Shared with a
|
|
74
|
+
* team: canon, confirmed, own and teammates' proposals ranked together, each
|
|
75
|
+
* line labelled with how sure to be (Loom Teams D42).
|
|
76
|
+
*/
|
|
77
|
+
brainBrief(opts: RetrieveOpts): string;
|
|
78
|
+
/**
|
|
79
|
+
* The same brief, with the dense channel when this project has one.
|
|
80
|
+
*
|
|
81
|
+
* Embedding is real work (a millisecond, warm) and retrieval is sync, so the
|
|
82
|
+
* vectors are computed here and handed in. Everything about this is
|
|
83
|
+
* best-effort: no model, no network, a slow first load — the brief is the
|
|
84
|
+
* one the three lexical channels produce, which is the brief Loom has always
|
|
85
|
+
* produced.
|
|
86
|
+
*/
|
|
87
|
+
brainBriefFor(opts: RetrieveOpts): Promise<string>;
|
|
88
|
+
/**
|
|
89
|
+
* Retrieval exactly as a briefing sees it — including the dense channel.
|
|
90
|
+
*
|
|
91
|
+
* The Brain tab and `loom brain:search` use this: a search that scored
|
|
92
|
+
* differently from the briefing it's meant to explain would be worse than
|
|
93
|
+
* no search at all.
|
|
94
|
+
*/
|
|
95
|
+
searchBrain(opts: RetrieveOpts): Promise<Hit[]>;
|
|
96
|
+
/** Vectors for one query, or null when the channel isn't available. */
|
|
97
|
+
denseFor(query: string): Promise<RetrieveOpts["dense"] | null>;
|
|
98
|
+
/**
|
|
99
|
+
* Pull each ADE's native memory into the shared log. Idempotent — a source
|
|
100
|
+
* whose content hasn't changed since its last import is skipped, so this is
|
|
101
|
+
* safe to call on connect, on demand, or on a timer.
|
|
102
|
+
*/
|
|
103
|
+
importMemories(): {
|
|
104
|
+
imported: number;
|
|
105
|
+
sources: string[];
|
|
106
|
+
};
|
|
107
|
+
/** Briefings are injected with the first turn after a handoff. */
|
|
108
|
+
pendingBriefings: Map<string, string>;
|
|
109
|
+
consumePendingBriefing(agentId: string): string | undefined;
|
|
110
|
+
/**
|
|
111
|
+
* The narrow briefing a child gets.
|
|
112
|
+
*
|
|
113
|
+
* Deliberately not the parent's thread. A child exists to answer one question
|
|
114
|
+
* and hand back an answer; giving it the whole conversation costs tokens for
|
|
115
|
+
* context it was not asked to reason about, and invites it to wander into the
|
|
116
|
+
* parent's job. It gets what it is for, who asked, the rules of the project,
|
|
117
|
+
* and the memories that match its own task — not the parent's.
|
|
118
|
+
*/
|
|
119
|
+
subtaskBriefing(parent: string, childId: string, task: string): string;
|
|
120
|
+
/**
|
|
121
|
+
* Phase 2: read a finished turn for durable memory.
|
|
122
|
+
*
|
|
123
|
+
* Fire-and-forget on purpose. A slow or missing extractor must never delay
|
|
124
|
+
* anything — extractFromTurn already swallows engine failures, and this is
|
|
125
|
+
* void-ed so even an unexpected throw can't escape into the event pipeline.
|
|
126
|
+
* Off entirely when config says so; a no-op when Claude isn't available.
|
|
127
|
+
*/
|
|
128
|
+
extractMemory(agentId: string, files: string[]): void;
|
|
129
|
+
/**
|
|
130
|
+
* The transcript of the most recent turn in a chat: from the last human
|
|
131
|
+
* message to now — the user's ask and what the agent did in reply.
|
|
132
|
+
*/
|
|
133
|
+
gatherTurnText(chat: string): string;
|
|
134
|
+
}
|
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
import { extractFromTurn, readExternalContent } from "../../core/brain-extract.js";
|
|
2
|
+
import { compileBrief, retrieve } from "../../core/brain-index.js";
|
|
3
|
+
import { CONFIDENCE_FLOOR } from "../../core/brain.js";
|
|
4
|
+
import { buildBriefing, buildProjection } from "../../core/projection.js";
|
|
5
|
+
import { logbook } from "../../core/logbook.js";
|
|
6
|
+
import { RECENT_DECISIONS, buildUnifiedMemory, hashContent, readNativeMemory, } from "../../core/memory.js";
|
|
7
|
+
import { compileTieredBrief, retrieveTiered } from "../../core/team-memory.js";
|
|
8
|
+
import { MAIN_CHAT } from "../../types.js";
|
|
9
|
+
import { PROJECTION_WINDOW } from '../runtime-support.js';
|
|
10
|
+
/** Owns briefings state for exactly one open project. */
|
|
11
|
+
export class RuntimeBriefings {
|
|
12
|
+
host;
|
|
13
|
+
constructor(host) {
|
|
14
|
+
this.host = host;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* The dense retrieval channel, when this project opted in (brain.semantic).
|
|
18
|
+
*
|
|
19
|
+
* Null is the normal state, and null costs nothing: no model is loaded, no
|
|
20
|
+
* vectors are written, and retrieval is the three lexical channels. Loading
|
|
21
|
+
* happens in the background — the first brief after a cold start uses
|
|
22
|
+
* whatever is ready, which is the honest thing for something that takes ten
|
|
23
|
+
* seconds to warm up.
|
|
24
|
+
*/
|
|
25
|
+
semantic = null;
|
|
26
|
+
lifetime = new AbortController();
|
|
27
|
+
extractionScope = new AbortController();
|
|
28
|
+
cancelExtraction() { this.extractionScope.abort(); this.extractionScope = new AbortController(); }
|
|
29
|
+
semanticGeneration = 0;
|
|
30
|
+
close() {
|
|
31
|
+
this.extractionScope.abort();
|
|
32
|
+
this.lifetime.abort();
|
|
33
|
+
this.semanticGeneration++;
|
|
34
|
+
this.semantic = null;
|
|
35
|
+
this.pendingBriefings.clear();
|
|
36
|
+
}
|
|
37
|
+
/** Optional loading never delays opening a project; late results are discarded. */
|
|
38
|
+
async configureSemantic(enabled) {
|
|
39
|
+
const generation = ++this.semanticGeneration;
|
|
40
|
+
this.semantic = null;
|
|
41
|
+
if (!enabled || this.lifetime.signal.aborted)
|
|
42
|
+
return;
|
|
43
|
+
try {
|
|
44
|
+
const index = this.host.createSemanticIndex();
|
|
45
|
+
if (!await index.start() || this.lifetime.signal.aborted || generation !== this.semanticGeneration)
|
|
46
|
+
return;
|
|
47
|
+
this.semantic = index;
|
|
48
|
+
await index.sync(this.host.brain.all());
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
if (!this.lifetime.signal.aborted) {
|
|
52
|
+
logbook.warn("brain", "semantic retrieval didn't start", String(error), this.host.info.id);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/** Prepare context without starting agents, taking the baton or touching UI.
|
|
57
|
+
* This retains the legacy selection policy until Brain continuity is built.
|
|
58
|
+
*/
|
|
59
|
+
async prepareHandoff(to, from, mergeNote, bridgeIds) {
|
|
60
|
+
if (this.lifetime.signal.aborted)
|
|
61
|
+
throw new Error("context runtime is closed");
|
|
62
|
+
this.importMemories();
|
|
63
|
+
const events = this.host.log.list({ limit: PROJECTION_WINDOW });
|
|
64
|
+
const input = { projectName: this.host.info.name, config: this.host.config, events,
|
|
65
|
+
targetAgentId: to, fromAgentId: from };
|
|
66
|
+
const start = Date.now();
|
|
67
|
+
const rendered = await this.host.renderProjection(input);
|
|
68
|
+
const brief = await this.retrieveBrief(events, to);
|
|
69
|
+
const unified = this.unifiedMemory();
|
|
70
|
+
const memory = [rendered.content, brief, ...(unified.sources.length ? [unified.document] : [])]
|
|
71
|
+
.filter(Boolean).join("\n\n---\n");
|
|
72
|
+
const elapsedMs = Date.now() - start;
|
|
73
|
+
const bridges = [];
|
|
74
|
+
for (const agentId of bridgeIds) {
|
|
75
|
+
const bridgeBrief = await this.retrieveBrief(events, agentId);
|
|
76
|
+
bridges.push({ agentId, memory: [buildProjection({ ...input, targetAgentId: agentId }), bridgeBrief]
|
|
77
|
+
.filter(Boolean).join("\n\n---\n") });
|
|
78
|
+
}
|
|
79
|
+
if (this.lifetime.signal.aborted)
|
|
80
|
+
throw new Error("context runtime is closed");
|
|
81
|
+
return { memory, briefing: [mergeNote, buildBriefing(input), brief].filter(Boolean).join("\n\n"),
|
|
82
|
+
mode: rendered.mode, elapsedMs, bridges };
|
|
83
|
+
}
|
|
84
|
+
// -------------------------------------------------------------------------
|
|
85
|
+
// Unified memory — "multiple memory in one"
|
|
86
|
+
// -------------------------------------------------------------------------
|
|
87
|
+
/** Freshly read every connected ADE's native memory from disk. */
|
|
88
|
+
importedMemory() {
|
|
89
|
+
return readNativeMemory(this.host.info.dir, this.host.config);
|
|
90
|
+
}
|
|
91
|
+
/** The merged brain: decisions + imported ADE memories + shared context. */
|
|
92
|
+
unifiedMemory() {
|
|
93
|
+
// Only the newest decisions are used: read those, not the whole log (every
|
|
94
|
+
// handoff and every Memory view built this, parsing every event ever written).
|
|
95
|
+
return buildUnifiedMemory(this.host.info.name, this.host.log.list({ kinds: ["decision"], limit: RECENT_DECISIONS * 2 }), this.importedMemory());
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Phase 3: the brain brief for a handoff — the memories relevant to the work
|
|
99
|
+
* in flight, compiled. Query is the recent conversation plus the files recent
|
|
100
|
+
* turns touched; scoped to the incoming agent; low-confidence memories are
|
|
101
|
+
* held back from injection (they stay visible in the Brain tab). Empty string
|
|
102
|
+
* when there's nothing relevant, so callers append it unconditionally.
|
|
103
|
+
*/
|
|
104
|
+
async retrieveBrief(events, agentId) {
|
|
105
|
+
const query = events
|
|
106
|
+
.filter((e) => e.kind === "message")
|
|
107
|
+
.slice(-8)
|
|
108
|
+
.map((e) => String(e.payload.text ?? ""))
|
|
109
|
+
.join(" ");
|
|
110
|
+
const files = [
|
|
111
|
+
...new Set(events
|
|
112
|
+
.filter((e) => e.kind === "turn_diff")
|
|
113
|
+
.flatMap((e) => {
|
|
114
|
+
// turn_diff stores ChangedFile[] ({status, path}); older events or
|
|
115
|
+
// other shapes may carry bare strings. Normalise to paths.
|
|
116
|
+
const raw = e.payload.files ?? [];
|
|
117
|
+
return raw.map((f) => (typeof f === "string" ? f : (f?.path ?? ""))).filter(Boolean);
|
|
118
|
+
})),
|
|
119
|
+
].slice(-20);
|
|
120
|
+
if (!query.trim() && !files.length)
|
|
121
|
+
return "";
|
|
122
|
+
const brief = await this.brainBriefFor({
|
|
123
|
+
...(query.trim() ? { query } : {}),
|
|
124
|
+
...(files.length ? { files } : {}),
|
|
125
|
+
agent: agentId,
|
|
126
|
+
minConfidence: CONFIDENCE_FLOOR,
|
|
127
|
+
limit: 14,
|
|
128
|
+
});
|
|
129
|
+
const team = files.length ? (this.host.teamBrain?.context(files) ?? "") : "";
|
|
130
|
+
return [brief, team].filter(Boolean).join("\n\n");
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* The memory brief for a query. Solo: this project's brain. Shared with a
|
|
134
|
+
* team: canon, confirmed, own and teammates' proposals ranked together, each
|
|
135
|
+
* line labelled with how sure to be (Loom Teams D42).
|
|
136
|
+
*/
|
|
137
|
+
brainBrief(opts) {
|
|
138
|
+
const pool = this.host.teamBrain?.pool(this.host.brain.all());
|
|
139
|
+
if (!pool) {
|
|
140
|
+
const hits = retrieve(this.host.brain, opts);
|
|
141
|
+
this.host.noteMemoriesUsed(hits.map((h) => h.memory.id));
|
|
142
|
+
return compileBrief(hits.map((h) => h.memory));
|
|
143
|
+
}
|
|
144
|
+
const tiered = retrieveTiered(pool, opts);
|
|
145
|
+
this.host.noteMemoriesUsed(tiered.map((h) => h.memory.id));
|
|
146
|
+
return compileTieredBrief(tiered);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* The same brief, with the dense channel when this project has one.
|
|
150
|
+
*
|
|
151
|
+
* Embedding is real work (a millisecond, warm) and retrieval is sync, so the
|
|
152
|
+
* vectors are computed here and handed in. Everything about this is
|
|
153
|
+
* best-effort: no model, no network, a slow first load — the brief is the
|
|
154
|
+
* one the three lexical channels produce, which is the brief Loom has always
|
|
155
|
+
* produced.
|
|
156
|
+
*/
|
|
157
|
+
async brainBriefFor(opts) {
|
|
158
|
+
const dense = await this.denseFor(opts.query ?? "");
|
|
159
|
+
return this.brainBrief(dense ? { ...opts, dense } : opts);
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Retrieval exactly as a briefing sees it — including the dense channel.
|
|
163
|
+
*
|
|
164
|
+
* The Brain tab and `loom brain:search` use this: a search that scored
|
|
165
|
+
* differently from the briefing it's meant to explain would be worse than
|
|
166
|
+
* no search at all.
|
|
167
|
+
*/
|
|
168
|
+
async searchBrain(opts) {
|
|
169
|
+
const dense = await this.denseFor(opts.query ?? "");
|
|
170
|
+
return retrieve(this.host.brain, dense ? { ...opts, dense } : opts);
|
|
171
|
+
}
|
|
172
|
+
/** Vectors for one query, or null when the channel isn't available. */
|
|
173
|
+
async denseFor(query) {
|
|
174
|
+
const index = this.semantic;
|
|
175
|
+
if (this.lifetime.signal.aborted || !index || !query.trim())
|
|
176
|
+
return null;
|
|
177
|
+
try {
|
|
178
|
+
const memories = this.host.brain.all();
|
|
179
|
+
await index.sync(memories);
|
|
180
|
+
const q = await index.query(query);
|
|
181
|
+
if (!q || this.lifetime.signal.aborted || index !== this.semantic)
|
|
182
|
+
return null;
|
|
183
|
+
const byId = index.byId(memories);
|
|
184
|
+
return byId.size ? { query: q, byId } : null;
|
|
185
|
+
}
|
|
186
|
+
catch (err) {
|
|
187
|
+
logbook.warn("brain", "the dense channel didn't answer", String(err), this.host.info.id);
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Pull each ADE's native memory into the shared log. Idempotent — a source
|
|
193
|
+
* whose content hasn't changed since its last import is skipped, so this is
|
|
194
|
+
* safe to call on connect, on demand, or on a timer.
|
|
195
|
+
*/
|
|
196
|
+
importMemories() {
|
|
197
|
+
const seen = new Map(); // file -> last imported hash
|
|
198
|
+
for (const e of this.host.log.list({ kinds: ["memory_import"] })) {
|
|
199
|
+
seen.set(String(e.payload.file), String(e.payload.hash));
|
|
200
|
+
}
|
|
201
|
+
const sources = [];
|
|
202
|
+
let imported = 0;
|
|
203
|
+
for (const block of this.importedMemory()) {
|
|
204
|
+
const hash = hashContent(block.content);
|
|
205
|
+
if (seen.get(block.file) === hash)
|
|
206
|
+
continue;
|
|
207
|
+
this.host.log.append({
|
|
208
|
+
kind: "memory_import",
|
|
209
|
+
agentId: block.agentId,
|
|
210
|
+
payload: { file: block.file, kind: block.kind, chars: block.content.length, hash },
|
|
211
|
+
});
|
|
212
|
+
sources.push(block.file);
|
|
213
|
+
imported += 1;
|
|
214
|
+
}
|
|
215
|
+
return { imported, sources };
|
|
216
|
+
}
|
|
217
|
+
// -------------------------------------------------------------------------
|
|
218
|
+
// Handoff
|
|
219
|
+
// -------------------------------------------------------------------------
|
|
220
|
+
/** Briefings are injected with the first turn after a handoff. */
|
|
221
|
+
pendingBriefings = new Map();
|
|
222
|
+
consumePendingBriefing(agentId) {
|
|
223
|
+
const briefing = this.pendingBriefings.get(agentId);
|
|
224
|
+
this.pendingBriefings.delete(agentId);
|
|
225
|
+
return briefing;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* The narrow briefing a child gets.
|
|
229
|
+
*
|
|
230
|
+
* Deliberately not the parent's thread. A child exists to answer one question
|
|
231
|
+
* and hand back an answer; giving it the whole conversation costs tokens for
|
|
232
|
+
* context it was not asked to reason about, and invites it to wander into the
|
|
233
|
+
* parent's job. It gets what it is for, who asked, the rules of the project,
|
|
234
|
+
* and the memories that match its own task — not the parent's.
|
|
235
|
+
*/
|
|
236
|
+
subtaskBriefing(parent, childId, task) {
|
|
237
|
+
const parts = [
|
|
238
|
+
`[Loom subtask] You are "${childId}", running one scoped subtask for "${parent}" ` +
|
|
239
|
+
`in project "${this.host.info.name}".`,
|
|
240
|
+
`The subtask: ${task}`,
|
|
241
|
+
"Do this one thing and report the result. Do not take over the wider task — " +
|
|
242
|
+
`"${parent}" still owns the conversation and holds the baton.`,
|
|
243
|
+
];
|
|
244
|
+
const skills = this.host.activeSkillsBlock();
|
|
245
|
+
if (skills)
|
|
246
|
+
parts.push(skills);
|
|
247
|
+
// Retrieval scoped to the child's own task rather than the parent's thread.
|
|
248
|
+
const brief = this.brainBrief({ query: task, agent: childId, limit: 6 });
|
|
249
|
+
if (brief)
|
|
250
|
+
parts.push(brief);
|
|
251
|
+
return parts.filter(Boolean).join("\n\n");
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Phase 2: read a finished turn for durable memory.
|
|
255
|
+
*
|
|
256
|
+
* Fire-and-forget on purpose. A slow or missing extractor must never delay
|
|
257
|
+
* anything — extractFromTurn already swallows engine failures, and this is
|
|
258
|
+
* void-ed so even an unexpected throw can't escape into the event pipeline.
|
|
259
|
+
* Off entirely when config says so; a no-op when Claude isn't available.
|
|
260
|
+
*/
|
|
261
|
+
extractMemory(agentId, files) {
|
|
262
|
+
if (this.lifetime.signal.aborted || this.host.config.brain?.continuity || this.host.config.brain?.extractor === "off")
|
|
263
|
+
return;
|
|
264
|
+
const chat = this.host.turnChat.get(agentId) ?? MAIN_CHAT;
|
|
265
|
+
const turn = this.gatherTurnText(chat);
|
|
266
|
+
if (turn.length < 40)
|
|
267
|
+
return; // nothing substantial to learn from
|
|
268
|
+
const model = this.host.config.brain?.model ?? "haiku";
|
|
269
|
+
const engine = this.host.extractionEngine(model);
|
|
270
|
+
const recent = this.host.log.list({ limit: 80 }).filter((e) => (e.chat ?? MAIN_CHAT) === chat);
|
|
271
|
+
void extractFromTurn(this.host.brain, turn, {
|
|
272
|
+
engine,
|
|
273
|
+
signal: this.extractionScope.signal,
|
|
274
|
+
agentId,
|
|
275
|
+
chat,
|
|
276
|
+
...(files.length ? { files } : {}),
|
|
277
|
+
eventId: this.host.log.lastId(),
|
|
278
|
+
...(readExternalContent(recent) ? { untrusted: true } : {}),
|
|
279
|
+
})
|
|
280
|
+
.then((res) => {
|
|
281
|
+
const learned = res.added.length + res.updated.length + res.forgotten.length;
|
|
282
|
+
if (!this.lifetime.signal.aborted && learned > 0) {
|
|
283
|
+
this.host.log.append({
|
|
284
|
+
kind: "status",
|
|
285
|
+
payload: {
|
|
286
|
+
state: "brain_extract",
|
|
287
|
+
agentId,
|
|
288
|
+
added: res.added.length,
|
|
289
|
+
updated: res.updated.length,
|
|
290
|
+
forgotten: res.forgotten.length,
|
|
291
|
+
},
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
})
|
|
295
|
+
.catch(() => { });
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* The transcript of the most recent turn in a chat: from the last human
|
|
299
|
+
* message to now — the user's ask and what the agent did in reply.
|
|
300
|
+
*/
|
|
301
|
+
gatherTurnText(chat) {
|
|
302
|
+
const events = this.host.log.list({ chat, limit: 40 });
|
|
303
|
+
let start = 0;
|
|
304
|
+
for (let i = events.length - 1; i >= 0; i--) {
|
|
305
|
+
if (events[i].kind === "message" && (!events[i].agentId || events[i].payload.author === "user")) {
|
|
306
|
+
start = i;
|
|
307
|
+
break;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
const lines = [];
|
|
311
|
+
for (const e of events.slice(start)) {
|
|
312
|
+
const p = e.payload;
|
|
313
|
+
if (e.kind === "message") {
|
|
314
|
+
lines.push(`${e.agentId ?? "user"}: ${String(p.text ?? "").slice(0, 2000)}`);
|
|
315
|
+
}
|
|
316
|
+
else if (e.kind === "tool_call") {
|
|
317
|
+
lines.push(`[${e.agentId} used ${String(p.tool ?? "a tool")}] ${String(p.summary ?? "")}`.trim());
|
|
318
|
+
}
|
|
319
|
+
else if (e.kind === "file_edit") {
|
|
320
|
+
lines.push(`[${e.agentId} edited ${String(p.path ?? "")}]`);
|
|
321
|
+
}
|
|
322
|
+
else if (e.kind === "decision") {
|
|
323
|
+
lines.push(`decision: ${String(p.text ?? "")}`);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
return lines.join("\n").trim();
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
//# sourceMappingURL=briefings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"briefings.js","sourceRoot":"","sources":["../../../src/daemon/runtime/briefings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What each native harness last said about its context and its account:
|
|
3
|
+
* tokens in context against the model's window, whether it is compacting right
|
|
4
|
+
* now, and the provider's usage-limit windows.
|
|
5
|
+
*
|
|
6
|
+
* Adapters report these as status events (context_usage, compacting,
|
|
7
|
+
* native_compacted, usage_limits). The thread renders the events themselves;
|
|
8
|
+
* this keeps the latest reading so a project status can say it without the
|
|
9
|
+
* client replaying the log. Limits belong to the provider account, not to an
|
|
10
|
+
* agent, so two Codex agents share one reading.
|
|
11
|
+
*/
|
|
12
|
+
import type { AgentContextUsage, LoomEvent, ProviderLimits } from "../../types.js";
|
|
13
|
+
export declare const providerOf: (kind: string) => string | undefined;
|
|
14
|
+
export declare class NativeUsage {
|
|
15
|
+
private readonly contexts;
|
|
16
|
+
private readonly limits;
|
|
17
|
+
/** Fold one adapter event in. Unrelated events are ignored. */
|
|
18
|
+
observe(event: Pick<LoomEvent, "kind" | "agentId" | "payload" | "ts">): void;
|
|
19
|
+
context(agentId: string): AgentContextUsage | null;
|
|
20
|
+
limitsFor(kind: string): ProviderLimits | null;
|
|
21
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What each native harness last said about its context and its account:
|
|
3
|
+
* tokens in context against the model's window, whether it is compacting right
|
|
4
|
+
* now, and the provider's usage-limit windows.
|
|
5
|
+
*
|
|
6
|
+
* Adapters report these as status events (context_usage, compacting,
|
|
7
|
+
* native_compacted, usage_limits). The thread renders the events themselves;
|
|
8
|
+
* this keeps the latest reading so a project status can say it without the
|
|
9
|
+
* client replaying the log. Limits belong to the provider account, not to an
|
|
10
|
+
* agent, so two Codex agents share one reading.
|
|
11
|
+
*/
|
|
12
|
+
const PROVIDER = { codex: "codex", "claude-code": "claude" };
|
|
13
|
+
export const providerOf = (kind) => PROVIDER[kind];
|
|
14
|
+
export class NativeUsage {
|
|
15
|
+
contexts = new Map();
|
|
16
|
+
limits = new Map();
|
|
17
|
+
/** Fold one adapter event in. Unrelated events are ignored. */
|
|
18
|
+
observe(event) {
|
|
19
|
+
const agent = event.agentId;
|
|
20
|
+
if (!agent)
|
|
21
|
+
return;
|
|
22
|
+
const p = event.payload;
|
|
23
|
+
const at = typeof event.ts === "number" ? event.ts : Date.now();
|
|
24
|
+
const current = this.contexts.get(agent);
|
|
25
|
+
const turnOver = event.kind === "run_complete" || event.kind === "error" || (event.kind === "status" && p.state === "interrupted");
|
|
26
|
+
if (turnOver) {
|
|
27
|
+
if (current?.compacting)
|
|
28
|
+
this.contexts.set(agent, { ...current, compacting: false });
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
if (event.kind !== "status")
|
|
32
|
+
return;
|
|
33
|
+
switch (p.state) {
|
|
34
|
+
case "context_usage":
|
|
35
|
+
if (typeof p.usedTokens !== "number")
|
|
36
|
+
return;
|
|
37
|
+
this.contexts.set(agent, { usedTokens: p.usedTokens,
|
|
38
|
+
maxTokens: typeof p.maxTokens === "number" ? p.maxTokens : current?.maxTokens ?? null,
|
|
39
|
+
compacting: current?.compacting ?? false, compactedAt: current?.compactedAt ?? null, at });
|
|
40
|
+
return;
|
|
41
|
+
case "compacting":
|
|
42
|
+
this.contexts.set(agent, { ...(current ?? { usedTokens: 0, maxTokens: null, compactedAt: null }), compacting: true, at });
|
|
43
|
+
return;
|
|
44
|
+
case "native_compacted":
|
|
45
|
+
this.contexts.set(agent, { ...(current ?? { usedTokens: 0, maxTokens: null }),
|
|
46
|
+
...(typeof p.postTokens === "number" ? { usedTokens: p.postTokens } : {}), compacting: false, compactedAt: at, at });
|
|
47
|
+
return;
|
|
48
|
+
case "usage_limits": {
|
|
49
|
+
if (typeof p.provider !== "string" || !Array.isArray(p.windows))
|
|
50
|
+
return;
|
|
51
|
+
// A report can carry one window (Claude sends one per event): merge by id.
|
|
52
|
+
const previous = this.limits.get(p.provider);
|
|
53
|
+
const windows = new Map((previous?.windows ?? []).map(w => [w.id, w]));
|
|
54
|
+
for (const w of p.windows)
|
|
55
|
+
if (w && typeof w.id === "string")
|
|
56
|
+
windows.set(w.id, w);
|
|
57
|
+
this.limits.set(p.provider, { provider: p.provider, windows: [...windows.values()],
|
|
58
|
+
reached: typeof p.reached === "string" ? p.reached : null, at });
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
default:
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
context(agentId) { return this.contexts.get(agentId) ?? null; }
|
|
66
|
+
limitsFor(kind) {
|
|
67
|
+
const provider = providerOf(kind);
|
|
68
|
+
return provider ? this.limits.get(provider) ?? null : null;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=native-usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-usage.js","sourceRoot":"","sources":["../../../src/daemon/runtime/native-usage.ts"],"names":[],"mappings":"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"}
|