sensorium-mcp 3.1.2 → 3.1.3-board.10
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/Install-Sensorium.ps1 +257 -43
- package/README.md +2 -0
- package/dist/board/api/api.js +84 -0
- package/dist/board/api/api.test.ts +23 -0
- package/dist/board/api/client.js +113 -0
- package/dist/board/components/BottomNav.js +32 -0
- package/dist/board/components/Card.js +78 -0
- package/dist/board/components/Combobox.js +79 -0
- package/dist/board/components/CommentComposer.js +29 -0
- package/dist/board/components/CommentList.js +42 -0
- package/dist/board/components/DirTreePicker.js +128 -0
- package/dist/board/components/Dropdown.js +67 -0
- package/dist/board/components/Lane.js +47 -0
- package/dist/board/components/PriorityChip.js +20 -0
- package/dist/board/components/ProfileSummary.js +89 -0
- package/dist/board/components/StateBanner.js +24 -0
- package/dist/board/components/StatusChip.js +26 -0
- package/dist/board/components/rateLimit.js +32 -0
- package/dist/board/components/rateLimit.test.ts +16 -0
- package/dist/board/components/time.js +14 -0
- package/dist/board/config.js +56 -0
- package/dist/board/index.html +18 -0
- package/dist/board/main.js +37 -0
- package/dist/board/mock/api.mock.js +491 -0
- package/dist/board/mock/api.mock.test.ts +460 -0
- package/dist/board/mock/fixtures.js +512 -0
- package/dist/board/schema/policy.js +261 -0
- package/dist/board/state/recur.js +24 -0
- package/dist/board/state/recur.test.ts +24 -0
- package/dist/board/state/useBoard.js +161 -0
- package/dist/board/state/useBuilder.js +357 -0
- package/dist/board/state/useBuilder.test.ts +468 -0
- package/dist/board/state/useCard.js +193 -0
- package/dist/board/state/useCard.test.ts +435 -0
- package/dist/board/state/useDirBrowser.js +23 -0
- package/dist/board/styles/board.css +2885 -0
- package/dist/board/styles/tokens.css +72 -0
- package/dist/board/vendor/vue.esm-browser.js +9 -0
- package/dist/board/views/App.js +61 -0
- package/dist/board/views/BoardView.js +153 -0
- package/dist/board/views/BuilderView.js +582 -0
- package/dist/board/views/CardView.js +382 -0
- package/dist/board/views/SettingsView.js +152 -0
- package/dist/config/agent-settings.d.ts +11 -0
- package/dist/config/agent-settings.d.ts.map +1 -1
- package/dist/config/agent-settings.js +79 -0
- package/dist/config/agent-settings.js.map +1 -1
- package/dist/config/detail-grant.d.ts +7 -16
- package/dist/config/detail-grant.d.ts.map +1 -1
- package/dist/config/detail-grant.js +12 -35
- package/dist/config/detail-grant.js.map +1 -1
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +17 -0
- package/dist/config/index.js.map +1 -1
- package/dist/config/mcp-settings.d.ts +7 -1
- package/dist/config/mcp-settings.d.ts.map +1 -1
- package/dist/config/mcp-settings.js +9 -0
- package/dist/config/mcp-settings.js.map +1 -1
- package/dist/config/misc-settings.d.ts +22 -1
- package/dist/config/misc-settings.d.ts.map +1 -1
- package/dist/config/misc-settings.js +93 -3
- package/dist/config/misc-settings.js.map +1 -1
- package/dist/config/operator-grant.d.ts +9 -0
- package/dist/config/operator-grant.d.ts.map +1 -0
- package/dist/config/operator-grant.js +24 -0
- package/dist/config/operator-grant.js.map +1 -0
- package/dist/config/voice-grant.d.ts +10 -0
- package/dist/config/voice-grant.d.ts.map +1 -0
- package/dist/config/voice-grant.js +18 -0
- package/dist/config/voice-grant.js.map +1 -0
- package/dist/dashboard/board-static.d.ts +22 -0
- package/dist/dashboard/board-static.d.ts.map +1 -0
- package/dist/dashboard/board-static.js +130 -0
- package/dist/dashboard/board-static.js.map +1 -0
- package/dist/dashboard/presets.d.ts +1 -1
- package/dist/dashboard/presets.d.ts.map +1 -1
- package/dist/dashboard/presets.js +1 -1
- package/dist/dashboard/presets.js.map +1 -1
- package/dist/dashboard/routes/agent-templates.d.ts.map +1 -1
- package/dist/dashboard/routes/agent-templates.js +6 -9
- package/dist/dashboard/routes/agent-templates.js.map +1 -1
- package/dist/dashboard/routes/board-body.d.ts +8 -0
- package/dist/dashboard/routes/board-body.d.ts.map +1 -0
- package/dist/dashboard/routes/board-body.js +20 -0
- package/dist/dashboard/routes/board-body.js.map +1 -0
- package/dist/dashboard/routes/board-dir-listing.d.ts +70 -0
- package/dist/dashboard/routes/board-dir-listing.d.ts.map +1 -0
- package/dist/dashboard/routes/board-dir-listing.js +192 -0
- package/dist/dashboard/routes/board-dir-listing.js.map +1 -0
- package/dist/dashboard/routes/board-lane-groups.d.ts +6 -0
- package/dist/dashboard/routes/board-lane-groups.d.ts.map +1 -0
- package/dist/dashboard/routes/board-lane-groups.js +52 -0
- package/dist/dashboard/routes/board-lane-groups.js.map +1 -0
- package/dist/dashboard/routes/board-policy.d.ts +224 -0
- package/dist/dashboard/routes/board-policy.d.ts.map +1 -0
- package/dist/dashboard/routes/board-policy.js +214 -0
- package/dist/dashboard/routes/board-policy.js.map +1 -0
- package/dist/dashboard/routes/board-profile-parse.d.ts +32 -0
- package/dist/dashboard/routes/board-profile-parse.d.ts.map +1 -0
- package/dist/dashboard/routes/board-profile-parse.js +338 -0
- package/dist/dashboard/routes/board-profile-parse.js.map +1 -0
- package/dist/dashboard/routes/board.d.ts +90 -0
- package/dist/dashboard/routes/board.d.ts.map +1 -0
- package/dist/dashboard/routes/board.js +721 -0
- package/dist/dashboard/routes/board.js.map +1 -0
- package/dist/dashboard/routes/codex.d.ts +14 -0
- package/dist/dashboard/routes/codex.d.ts.map +1 -0
- package/dist/dashboard/routes/codex.js +92 -0
- package/dist/dashboard/routes/codex.js.map +1 -0
- package/dist/dashboard/routes/prompts.d.ts +2 -2
- package/dist/dashboard/routes/prompts.d.ts.map +1 -1
- package/dist/dashboard/routes/prompts.js +2 -2
- package/dist/dashboard/routes/prompts.js.map +1 -1
- package/dist/dashboard/routes/settings.d.ts +2 -0
- package/dist/dashboard/routes/settings.d.ts.map +1 -1
- package/dist/dashboard/routes/settings.js +24 -1
- package/dist/dashboard/routes/settings.js.map +1 -1
- package/dist/dashboard/routes/skills.d.ts +7 -1
- package/dist/dashboard/routes/skills.d.ts.map +1 -1
- package/dist/dashboard/routes/skills.js +6 -6
- package/dist/dashboard/routes/skills.js.map +1 -1
- package/dist/dashboard/routes/snapshots.d.ts +2 -1
- package/dist/dashboard/routes/snapshots.d.ts.map +1 -1
- package/dist/dashboard/routes/snapshots.js +24 -18
- package/dist/dashboard/routes/snapshots.js.map +1 -1
- package/dist/dashboard/routes/templates.js +5 -5
- package/dist/dashboard/routes/templates.js.map +1 -1
- package/dist/dashboard/routes/threads-create.d.ts +17 -0
- package/dist/dashboard/routes/threads-create.d.ts.map +1 -1
- package/dist/dashboard/routes/threads-create.js +32 -10
- package/dist/dashboard/routes/threads-create.js.map +1 -1
- package/dist/dashboard/routes/threads-helpers.d.ts +11 -2
- package/dist/dashboard/routes/threads-helpers.d.ts.map +1 -1
- package/dist/dashboard/routes/threads-helpers.js +20 -3
- package/dist/dashboard/routes/threads-helpers.js.map +1 -1
- package/dist/dashboard/routes/threads-read.d.ts +16 -4
- package/dist/dashboard/routes/threads-read.d.ts.map +1 -1
- package/dist/dashboard/routes/threads-read.js +61 -55
- package/dist/dashboard/routes/threads-read.js.map +1 -1
- package/dist/dashboard/routes/threads.d.ts +2 -2
- package/dist/dashboard/routes/threads.d.ts.map +1 -1
- package/dist/dashboard/routes/threads.js +143 -29
- package/dist/dashboard/routes/threads.js.map +1 -1
- package/dist/dashboard/routes/types.d.ts +6 -0
- package/dist/dashboard/routes/types.d.ts.map +1 -1
- package/dist/dashboard/routes/types.js.map +1 -1
- package/dist/dashboard/routes.d.ts +2 -2
- package/dist/dashboard/routes.d.ts.map +1 -1
- package/dist/dashboard/routes.js +85 -7
- package/dist/dashboard/routes.js.map +1 -1
- package/dist/dashboard/spa.html +15 -12
- package/dist/data/board/board-schema.d.ts +29 -0
- package/dist/data/board/board-schema.d.ts.map +1 -0
- package/dist/data/board/board-schema.js +202 -0
- package/dist/data/board/board-schema.js.map +1 -0
- package/dist/data/board/board-types.d.ts +175 -0
- package/dist/data/board/board-types.d.ts.map +1 -0
- package/dist/data/board/board-types.js +9 -0
- package/dist/data/board/board-types.js.map +1 -0
- package/dist/data/board/card.repository.d.ts +137 -0
- package/dist/data/board/card.repository.d.ts.map +1 -0
- package/dist/data/board/card.repository.js +470 -0
- package/dist/data/board/card.repository.js.map +1 -0
- package/dist/data/board/comment.repository.d.ts +14 -0
- package/dist/data/board/comment.repository.d.ts.map +1 -0
- package/dist/data/board/comment.repository.js +42 -0
- package/dist/data/board/comment.repository.js.map +1 -0
- package/dist/data/board/lane-group.repository.d.ts +19 -0
- package/dist/data/board/lane-group.repository.d.ts.map +1 -0
- package/dist/data/board/lane-group.repository.js +66 -0
- package/dist/data/board/lane-group.repository.js.map +1 -0
- package/dist/data/board/profile-defaults.d.ts +17 -0
- package/dist/data/board/profile-defaults.d.ts.map +1 -0
- package/dist/data/board/profile-defaults.js +107 -0
- package/dist/data/board/profile-defaults.js.map +1 -0
- package/dist/data/interfaces.d.ts +1 -0
- package/dist/data/interfaces.d.ts.map +1 -1
- package/dist/data/memory/bootstrap.d.ts +1 -8
- package/dist/data/memory/bootstrap.d.ts.map +1 -1
- package/dist/data/memory/bootstrap.js +27 -37
- package/dist/data/memory/bootstrap.js.map +1 -1
- package/dist/data/memory/consolidation.d.ts +9 -31
- package/dist/data/memory/consolidation.d.ts.map +1 -1
- package/dist/data/memory/consolidation.js +22 -32
- package/dist/data/memory/consolidation.js.map +1 -1
- package/dist/data/memory/db-maintenance.d.ts +54 -0
- package/dist/data/memory/db-maintenance.d.ts.map +1 -0
- package/dist/data/memory/db-maintenance.js +81 -0
- package/dist/data/memory/db-maintenance.js.map +1 -0
- package/dist/data/memory/episodes.d.ts +2 -1
- package/dist/data/memory/episodes.d.ts.map +1 -1
- package/dist/data/memory/episodes.js +5 -1
- package/dist/data/memory/episodes.js.map +1 -1
- package/dist/data/memory/index.d.ts +0 -4
- package/dist/data/memory/index.d.ts.map +1 -1
- package/dist/data/memory/index.js +0 -4
- package/dist/data/memory/index.js.map +1 -1
- package/dist/data/memory/key-knowledge.d.ts +51 -0
- package/dist/data/memory/key-knowledge.d.ts.map +1 -0
- package/dist/data/memory/key-knowledge.js +128 -0
- package/dist/data/memory/key-knowledge.js.map +1 -0
- package/dist/data/memory/migration-runner.d.ts +1 -1
- package/dist/data/memory/migration-runner.d.ts.map +1 -1
- package/dist/data/memory/migration-runner.js +407 -1
- package/dist/data/memory/migration-runner.js.map +1 -1
- package/dist/data/memory/narrative-lint.d.ts +2 -2
- package/dist/data/memory/narrative-lint.d.ts.map +1 -1
- package/dist/data/memory/narrative-lint.js +23 -13
- package/dist/data/memory/narrative-lint.js.map +1 -1
- package/dist/data/memory/narrative-resolutions.d.ts +9 -2
- package/dist/data/memory/narrative-resolutions.d.ts.map +1 -1
- package/dist/data/memory/narrative-resolutions.js +9 -8
- package/dist/data/memory/narrative-resolutions.js.map +1 -1
- package/dist/data/memory/narrative-sources.d.ts +1 -1
- package/dist/data/memory/narrative-sources.d.ts.map +1 -1
- package/dist/data/memory/narrative-sources.js +8 -3
- package/dist/data/memory/narrative-sources.js.map +1 -1
- package/dist/data/memory/narrative-store.d.ts +24 -0
- package/dist/data/memory/narrative-store.d.ts.map +1 -1
- package/dist/data/memory/narrative-store.js +73 -35
- package/dist/data/memory/narrative-store.js.map +1 -1
- package/dist/data/memory/narrative.d.ts.map +1 -1
- package/dist/data/memory/narrative.js +47 -29
- package/dist/data/memory/narrative.js.map +1 -1
- package/dist/data/memory/note-archival.d.ts +1 -1
- package/dist/data/memory/note-archival.d.ts.map +1 -1
- package/dist/data/memory/note-archival.js +7 -3
- package/dist/data/memory/note-archival.js.map +1 -1
- package/dist/data/memory/note-embeddings.d.ts +7 -0
- package/dist/data/memory/note-embeddings.d.ts.map +1 -1
- package/dist/data/memory/note-embeddings.js +6 -2
- package/dist/data/memory/note-embeddings.js.map +1 -1
- package/dist/data/memory/passive-notice.repository.d.ts +70 -0
- package/dist/data/memory/passive-notice.repository.d.ts.map +1 -0
- package/dist/data/memory/passive-notice.repository.js +85 -0
- package/dist/data/memory/passive-notice.repository.js.map +1 -0
- package/dist/data/memory/schema-ddl.d.ts +120 -1
- package/dist/data/memory/schema-ddl.d.ts.map +1 -1
- package/dist/data/memory/schema-ddl.js +171 -4
- package/dist/data/memory/schema-ddl.js.map +1 -1
- package/dist/data/memory/schema-guard.d.ts.map +1 -1
- package/dist/data/memory/schema-guard.js +5 -41
- package/dist/data/memory/schema-guard.js.map +1 -1
- package/dist/data/memory/schema.d.ts.map +1 -1
- package/dist/data/memory/schema.js +10 -34
- package/dist/data/memory/schema.js.map +1 -1
- package/dist/data/memory/semantic-notes.d.ts +13 -8
- package/dist/data/memory/semantic-notes.d.ts.map +1 -1
- package/dist/data/memory/semantic-notes.js +12 -17
- package/dist/data/memory/semantic-notes.js.map +1 -1
- package/dist/data/memory/thread-registry.d.ts +330 -15
- package/dist/data/memory/thread-registry.d.ts.map +1 -1
- package/dist/data/memory/thread-registry.js +523 -67
- package/dist/data/memory/thread-registry.js.map +1 -1
- package/dist/data/memory/utils.d.ts +6 -0
- package/dist/data/memory/utils.d.ts.map +1 -1
- package/dist/data/memory/utils.js +13 -0
- package/dist/data/memory/utils.js.map +1 -1
- package/dist/data/memory/worker-lifecycle.repository.d.ts +308 -0
- package/dist/data/memory/worker-lifecycle.repository.d.ts.map +1 -0
- package/dist/data/memory/worker-lifecycle.repository.js +428 -0
- package/dist/data/memory/worker-lifecycle.repository.js.map +1 -0
- package/dist/data/optional.d.ts +16 -0
- package/dist/data/optional.d.ts.map +1 -0
- package/dist/data/optional.js +47 -0
- package/dist/data/optional.js.map +1 -0
- package/dist/index.js +156 -24
- package/dist/index.js.map +1 -1
- package/dist/integrations/openai/speech.d.ts.map +1 -1
- package/dist/integrations/openai/speech.js +52 -19
- package/dist/integrations/openai/speech.js.map +1 -1
- package/dist/integrations/openai/video.d.ts +1 -1
- package/dist/integrations/openai/video.d.ts.map +1 -1
- package/dist/integrations/openai/video.js +13 -8
- package/dist/integrations/openai/video.js.map +1 -1
- package/dist/integrations/telegram/types.d.ts +11 -0
- package/dist/integrations/telegram/types.d.ts.map +1 -1
- package/dist/lib/http-retry.d.ts +91 -0
- package/dist/lib/http-retry.d.ts.map +1 -0
- package/dist/lib/http-retry.js +177 -0
- package/dist/lib/http-retry.js.map +1 -0
- package/dist/lib/mcp-http-port.d.ts +12 -0
- package/dist/lib/mcp-http-port.d.ts.map +1 -0
- package/dist/lib/mcp-http-port.js +19 -0
- package/dist/lib/mcp-http-port.js.map +1 -0
- package/dist/lib/paths.d.ts +29 -4
- package/dist/lib/paths.d.ts.map +1 -1
- package/dist/lib/paths.js +31 -4
- package/dist/lib/paths.js.map +1 -1
- package/dist/lib/types.d.ts +2 -0
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/usage-metering/pricing.js +1 -1
- package/dist/lib/usage-metering/pricing.js.map +1 -1
- package/dist/lib/usage-metering/sink.d.ts +4 -0
- package/dist/lib/usage-metering/sink.d.ts.map +1 -1
- package/dist/lib/usage-metering/sink.js +6 -4
- package/dist/lib/usage-metering/sink.js.map +1 -1
- package/dist/lib/utils.d.ts +31 -0
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +49 -0
- package/dist/lib/utils.js.map +1 -1
- package/dist/llm/prompts/narrative.d.ts.map +1 -1
- package/dist/llm/prompts/narrative.js +27 -86
- package/dist/llm/prompts/narrative.js.map +1 -1
- package/dist/log-parsing/log-events.d.ts +38 -0
- package/dist/log-parsing/log-events.d.ts.map +1 -0
- package/dist/log-parsing/log-events.js +2 -0
- package/dist/log-parsing/log-events.js.map +1 -0
- package/dist/log-parsing/parser-registry.d.ts +4 -0
- package/dist/log-parsing/parser-registry.d.ts.map +1 -0
- package/dist/log-parsing/parser-registry.js +18 -0
- package/dist/log-parsing/parser-registry.js.map +1 -0
- package/dist/log-parsing/parsers/claude.d.ts +6 -0
- package/dist/log-parsing/parsers/claude.d.ts.map +1 -0
- package/dist/log-parsing/parsers/claude.js +100 -0
- package/dist/log-parsing/parsers/claude.js.map +1 -0
- package/dist/log-parsing/parsers/codex.d.ts +6 -0
- package/dist/log-parsing/parsers/codex.d.ts.map +1 -0
- package/dist/log-parsing/parsers/codex.js +116 -0
- package/dist/log-parsing/parsers/codex.js.map +1 -0
- package/dist/log-parsing/parsers/copilot.d.ts +6 -0
- package/dist/log-parsing/parsers/copilot.d.ts.map +1 -0
- package/dist/log-parsing/parsers/copilot.js +65 -0
- package/dist/log-parsing/parsers/copilot.js.map +1 -0
- package/dist/log-parsing/parsers/json-lines.d.ts +9 -0
- package/dist/log-parsing/parsers/json-lines.d.ts.map +1 -0
- package/dist/log-parsing/parsers/json-lines.js +25 -0
- package/dist/log-parsing/parsers/json-lines.js.map +1 -0
- package/dist/log-parsing/render.d.ts +33 -0
- package/dist/log-parsing/render.d.ts.map +1 -0
- package/dist/log-parsing/render.js +113 -0
- package/dist/log-parsing/render.js.map +1 -0
- package/dist/log-parsing/text.d.ts +8 -0
- package/dist/log-parsing/text.d.ts.map +1 -0
- package/dist/log-parsing/text.js +20 -0
- package/dist/log-parsing/text.js.map +1 -0
- package/dist/server/http-server.d.ts +8 -1
- package/dist/server/http-server.d.ts.map +1 -1
- package/dist/server/http-server.js +41 -19
- package/dist/server/http-server.js.map +1 -1
- package/dist/server/port-holder.d.ts +94 -0
- package/dist/server/port-holder.d.ts.map +1 -0
- package/dist/server/port-holder.js +122 -0
- package/dist/server/port-holder.js.map +1 -0
- package/dist/services/agent-spawn.service.d.ts +50 -5
- package/dist/services/agent-spawn.service.d.ts.map +1 -1
- package/dist/services/agent-spawn.service.js +59 -66
- package/dist/services/agent-spawn.service.js.map +1 -1
- package/dist/services/background-runner.d.ts +0 -1
- package/dist/services/background-runner.d.ts.map +1 -1
- package/dist/services/background-runner.js +0 -58
- package/dist/services/background-runner.js.map +1 -1
- package/dist/services/board/board-signals.d.ts +45 -0
- package/dist/services/board/board-signals.d.ts.map +1 -0
- package/dist/services/board/board-signals.js +170 -0
- package/dist/services/board/board-signals.js.map +1 -0
- package/dist/services/board/card-briefing.d.ts +24 -0
- package/dist/services/board/card-briefing.d.ts.map +1 -0
- package/dist/services/board/card-briefing.js +132 -0
- package/dist/services/board/card-briefing.js.map +1 -0
- package/dist/services/board/card-diagnostics.d.ts +25 -0
- package/dist/services/board/card-diagnostics.d.ts.map +1 -0
- package/dist/services/board/card-diagnostics.js +50 -0
- package/dist/services/board/card-diagnostics.js.map +1 -0
- package/dist/services/board/live-root-thread.d.ts +8 -0
- package/dist/services/board/live-root-thread.d.ts.map +1 -0
- package/dist/services/board/live-root-thread.js +2 -0
- package/dist/services/board/live-root-thread.js.map +1 -0
- package/dist/services/board/orchestrator.service.d.ts +119 -0
- package/dist/services/board/orchestrator.service.d.ts.map +1 -0
- package/dist/services/board/orchestrator.service.js +387 -0
- package/dist/services/board/orchestrator.service.js.map +1 -0
- package/dist/services/board/release-worker.d.ts +43 -0
- package/dist/services/board/release-worker.d.ts.map +1 -0
- package/dist/services/board/release-worker.js +96 -0
- package/dist/services/board/release-worker.js.map +1 -0
- package/dist/services/board/report-capture.d.ts +94 -0
- package/dist/services/board/report-capture.d.ts.map +1 -0
- package/dist/services/board/report-capture.js +398 -0
- package/dist/services/board/report-capture.js.map +1 -0
- package/dist/services/board/worker-spawn.d.ts +89 -0
- package/dist/services/board/worker-spawn.d.ts.map +1 -0
- package/dist/services/board/worker-spawn.js +177 -0
- package/dist/services/board/worker-spawn.js.map +1 -0
- package/dist/services/board/worktree.d.ts +45 -0
- package/dist/services/board/worktree.d.ts.map +1 -0
- package/dist/services/board/worktree.js +183 -0
- package/dist/services/board/worktree.js.map +1 -0
- package/dist/services/broker-client.d.ts +84 -2
- package/dist/services/broker-client.d.ts.map +1 -1
- package/dist/services/broker-client.js +72 -6
- package/dist/services/broker-client.js.map +1 -1
- package/dist/services/claude-spawn.service.d.ts +5 -0
- package/dist/services/claude-spawn.service.d.ts.map +1 -1
- package/dist/services/claude-spawn.service.js +37 -21
- package/dist/services/claude-spawn.service.js.map +1 -1
- package/dist/services/codex-spawn.service.d.ts +8 -3
- package/dist/services/codex-spawn.service.d.ts.map +1 -1
- package/dist/services/codex-spawn.service.js +84 -67
- package/dist/services/codex-spawn.service.js.map +1 -1
- package/dist/services/consolidation.service.d.ts.map +1 -1
- package/dist/services/consolidation.service.js +5 -49
- package/dist/services/consolidation.service.js.map +1 -1
- package/dist/services/copilot-spawn.service.d.ts +1 -1
- package/dist/services/copilot-spawn.service.d.ts.map +1 -1
- package/dist/services/copilot-spawn.service.js +10 -5
- package/dist/services/copilot-spawn.service.js.map +1 -1
- package/dist/services/daily-session.d.ts +24 -11
- package/dist/services/daily-session.d.ts.map +1 -1
- package/dist/services/daily-session.js +113 -33
- package/dist/services/daily-session.js.map +1 -1
- package/dist/services/death-alert.service.d.ts +55 -0
- package/dist/services/death-alert.service.d.ts.map +1 -0
- package/dist/services/death-alert.service.js +64 -0
- package/dist/services/death-alert.service.js.map +1 -0
- package/dist/services/dispatcher/broker.d.ts +66 -0
- package/dist/services/dispatcher/broker.d.ts.map +1 -1
- package/dist/services/dispatcher/broker.js +60 -52
- package/dist/services/dispatcher/broker.js.map +1 -1
- package/dist/services/dispatcher/poller.d.ts.map +1 -1
- package/dist/services/dispatcher/poller.js +31 -24
- package/dist/services/dispatcher/poller.js.map +1 -1
- package/dist/services/http-retry.d.ts +1 -90
- package/dist/services/http-retry.d.ts.map +1 -1
- package/dist/services/http-retry.js +1 -176
- package/dist/services/http-retry.js.map +1 -1
- package/dist/services/intent.d.ts +15 -1
- package/dist/services/intent.d.ts.map +1 -1
- package/dist/services/intent.js +39 -27
- package/dist/services/intent.js.map +1 -1
- package/dist/services/keeper.service.d.ts +76 -3
- package/dist/services/keeper.service.d.ts.map +1 -1
- package/dist/services/keeper.service.js +112 -35
- package/dist/services/keeper.service.js.map +1 -1
- package/dist/services/mcp-config.service.d.ts.map +1 -1
- package/dist/services/mcp-config.service.js +14 -1
- package/dist/services/mcp-config.service.js.map +1 -1
- package/dist/services/memory-briefing.service.d.ts +1 -1
- package/dist/services/memory-briefing.service.d.ts.map +1 -1
- package/dist/services/memory-briefing.service.js +28 -73
- package/dist/services/memory-briefing.service.js.map +1 -1
- package/dist/services/passive-notice.service.d.ts +56 -0
- package/dist/services/passive-notice.service.d.ts.map +1 -0
- package/dist/services/passive-notice.service.js +92 -0
- package/dist/services/passive-notice.service.js.map +1 -0
- package/dist/services/predefined-prompts.d.ts +11 -0
- package/dist/services/predefined-prompts.d.ts.map +1 -0
- package/dist/services/predefined-prompts.js +25 -0
- package/dist/services/predefined-prompts.js.map +1 -0
- package/dist/services/process.service.d.ts +111 -27
- package/dist/services/process.service.d.ts.map +1 -1
- package/dist/services/process.service.js +245 -173
- package/dist/services/process.service.js.map +1 -1
- package/dist/services/spawn-common.d.ts +281 -5
- package/dist/services/spawn-common.d.ts.map +1 -1
- package/dist/services/spawn-common.js +884 -188
- package/dist/services/spawn-common.js.map +1 -1
- package/dist/services/spawn-exit-watcher.d.ts +45 -35
- package/dist/services/spawn-exit-watcher.d.ts.map +1 -1
- package/dist/services/spawn-exit-watcher.js +120 -100
- package/dist/services/spawn-exit-watcher.js.map +1 -1
- package/dist/services/telegram.d.ts +31 -8
- package/dist/services/telegram.d.ts.map +1 -1
- package/dist/services/telegram.js +58 -26
- package/dist/services/telegram.js.map +1 -1
- package/dist/services/thread-health.service.d.ts +8 -0
- package/dist/services/thread-health.service.d.ts.map +1 -1
- package/dist/services/thread-health.service.js +14 -10
- package/dist/services/thread-health.service.js.map +1 -1
- package/dist/services/thread-lifecycle.service.d.ts +17 -1
- package/dist/services/thread-lifecycle.service.d.ts.map +1 -1
- package/dist/services/thread-lifecycle.service.js +47 -6
- package/dist/services/thread-lifecycle.service.js.map +1 -1
- package/dist/services/thread-log-reader.d.ts +81 -0
- package/dist/services/thread-log-reader.d.ts.map +1 -0
- package/dist/services/thread-log-reader.js +141 -0
- package/dist/services/thread-log-reader.js.map +1 -0
- package/dist/services/thread-purge.service.d.ts +200 -0
- package/dist/services/thread-purge.service.d.ts.map +1 -0
- package/dist/services/thread-purge.service.js +644 -0
- package/dist/services/thread-purge.service.js.map +1 -0
- package/dist/services/topic.service.d.ts +44 -2
- package/dist/services/topic.service.d.ts.map +1 -1
- package/dist/services/topic.service.js +74 -13
- package/dist/services/topic.service.js.map +1 -1
- package/dist/services/usage/usage-inbox-notifier.d.ts +50 -0
- package/dist/services/usage/usage-inbox-notifier.d.ts.map +1 -0
- package/dist/services/usage/usage-inbox-notifier.js +118 -0
- package/dist/services/usage/usage-inbox-notifier.js.map +1 -0
- package/dist/services/usage/usage-poller.service.d.ts +41 -0
- package/dist/services/usage/usage-poller.service.d.ts.map +1 -0
- package/dist/services/usage/usage-poller.service.js +67 -0
- package/dist/services/usage/usage-poller.service.js.map +1 -0
- package/dist/services/usage/usage-snapshot-provider.d.ts +40 -0
- package/dist/services/usage/usage-snapshot-provider.d.ts.map +1 -0
- package/dist/services/usage/usage-snapshot-provider.js +89 -0
- package/dist/services/usage/usage-snapshot-provider.js.map +1 -0
- package/dist/services/usage/usage-types.d.ts +28 -0
- package/dist/services/usage/usage-types.d.ts.map +1 -0
- package/dist/services/usage/usage-types.js +14 -0
- package/dist/services/usage/usage-types.js.map +1 -0
- package/dist/services/worker-birth.d.ts +154 -0
- package/dist/services/worker-birth.d.ts.map +1 -0
- package/dist/services/worker-birth.js +274 -0
- package/dist/services/worker-birth.js.map +1 -0
- package/dist/services/worker-cleanup.service.d.ts +242 -19
- package/dist/services/worker-cleanup.service.d.ts.map +1 -1
- package/dist/services/worker-cleanup.service.js +893 -355
- package/dist/services/worker-cleanup.service.js.map +1 -1
- package/dist/services/worker-lifecycle-executor.d.ts +42 -0
- package/dist/services/worker-lifecycle-executor.d.ts.map +1 -0
- package/dist/services/worker-lifecycle-executor.js +63 -0
- package/dist/services/worker-lifecycle-executor.js.map +1 -0
- package/dist/services/worker-single-use.d.ts +92 -0
- package/dist/services/worker-single-use.d.ts.map +1 -0
- package/dist/services/worker-single-use.js +155 -0
- package/dist/services/worker-single-use.js.map +1 -0
- package/dist/sessions/mcp-registry.d.ts +33 -2
- package/dist/sessions/mcp-registry.d.ts.map +1 -1
- package/dist/sessions/mcp-registry.js +153 -30
- package/dist/sessions/mcp-registry.js.map +1 -1
- package/dist/test-bootstrap.d.ts +19 -12
- package/dist/test-bootstrap.d.ts.map +1 -1
- package/dist/test-bootstrap.js +69 -21
- package/dist/test-bootstrap.js.map +1 -1
- package/dist/test-tripwire.test-support.d.ts +75 -0
- package/dist/test-tripwire.test-support.d.ts.map +1 -0
- package/dist/test-tripwire.test-support.js +353 -0
- package/dist/test-tripwire.test-support.js.map +1 -0
- package/dist/tools/defs/memory-defs.d.ts.map +1 -1
- package/dist/tools/defs/memory-defs.js +12 -4
- package/dist/tools/defs/memory-defs.js.map +1 -1
- package/dist/tools/defs/session-defs.d.ts.map +1 -1
- package/dist/tools/defs/session-defs.js +26 -10
- package/dist/tools/defs/session-defs.js.map +1 -1
- package/dist/tools/defs/utility-defs.js +1 -1
- package/dist/tools/defs/utility-defs.js.map +1 -1
- package/dist/tools/delegate-tool.d.ts +81 -1
- package/dist/tools/delegate-tool.d.ts.map +1 -1
- package/dist/tools/delegate-tool.js +840 -219
- package/dist/tools/delegate-tool.js.map +1 -1
- package/dist/tools/memory-tools.d.ts.map +1 -1
- package/dist/tools/memory-tools.js +66 -9
- package/dist/tools/memory-tools.js.map +1 -1
- package/dist/tools/response-builders.d.ts.map +1 -1
- package/dist/tools/response-builders.js +12 -8
- package/dist/tools/response-builders.js.map +1 -1
- package/dist/tools/session-tools.d.ts.map +1 -1
- package/dist/tools/session-tools.js +3 -32
- package/dist/tools/session-tools.js.map +1 -1
- package/dist/tools/skill-tools.js +1 -1
- package/dist/tools/skill-tools.js.map +1 -1
- package/dist/tools/start-session-tool.d.ts.map +1 -1
- package/dist/tools/start-session-tool.js +66 -20
- package/dist/tools/start-session-tool.js.map +1 -1
- package/dist/tools/utility-tools.d.ts.map +1 -1
- package/dist/tools/utility-tools.js +38 -3
- package/dist/tools/utility-tools.js.map +1 -1
- package/dist/tools/wait/auto-forward.d.ts.map +1 -1
- package/dist/tools/wait/auto-forward.js +8 -3
- package/dist/tools/wait/auto-forward.js.map +1 -1
- package/dist/tools/wait/consolidation-strategy.d.ts +42 -0
- package/dist/tools/wait/consolidation-strategy.d.ts.map +1 -0
- package/dist/tools/wait/consolidation-strategy.js +50 -0
- package/dist/tools/wait/consolidation-strategy.js.map +1 -0
- package/dist/tools/wait/drive-handler.d.ts +5 -7
- package/dist/tools/wait/drive-handler.d.ts.map +1 -1
- package/dist/tools/wait/drive-handler.js +45 -59
- package/dist/tools/wait/drive-handler.js.map +1 -1
- package/dist/tools/wait/media-processor.d.ts.map +1 -1
- package/dist/tools/wait/media-processor.js +8 -4
- package/dist/tools/wait/media-processor.js.map +1 -1
- package/dist/tools/wait/message-delivery.d.ts +9 -6
- package/dist/tools/wait/message-delivery.d.ts.map +1 -1
- package/dist/tools/wait/message-delivery.js +77 -58
- package/dist/tools/wait/message-delivery.js.map +1 -1
- package/dist/tools/wait/message-processing.d.ts.map +1 -1
- package/dist/tools/wait/message-processing.js +2 -1
- package/dist/tools/wait/message-processing.js.map +1 -1
- package/dist/tools/wait/poll-loop.d.ts.map +1 -1
- package/dist/tools/wait/poll-loop.js +339 -239
- package/dist/tools/wait/poll-loop.js.map +1 -1
- package/package.json +4 -3
- package/templates/azure-devops-securevault.default.md +20 -6
- package/templates/board-quality-checklist.default.md +121 -0
- package/templates/buildless-vue-preview.default.md +47 -0
- package/templates/expert-code-review.default.md +12 -0
- package/templates/handoff.default.md +41 -18
- package/templates/increment-pr-pipeline.default.md +79 -0
- package/templates/swarm.default.md +1 -0
- package/templates/worker-autonomous.default.md +1 -0
- package/templates/worker-delegate.default.md +1 -0
- package/dist/dashboard/log-parser.d.ts +0 -65
- package/dist/dashboard/log-parser.d.ts.map +0 -1
- package/dist/dashboard/log-parser.js +0 -219
- package/dist/dashboard/log-parser.js.map +0 -1
- package/dist/data/memory/reflection-dedup.d.ts +0 -17
- package/dist/data/memory/reflection-dedup.d.ts.map +0 -1
- package/dist/data/memory/reflection-dedup.js +0 -55
- package/dist/data/memory/reflection-dedup.js.map +0 -1
- package/dist/data/memory/reflection-gates.d.ts +0 -40
- package/dist/data/memory/reflection-gates.d.ts.map +0 -1
- package/dist/data/memory/reflection-gates.js +0 -220
- package/dist/data/memory/reflection-gates.js.map +0 -1
- package/dist/data/memory/reflection-sources.d.ts +0 -13
- package/dist/data/memory/reflection-sources.d.ts.map +0 -1
- package/dist/data/memory/reflection-sources.js +0 -115
- package/dist/data/memory/reflection-sources.js.map +0 -1
- package/dist/data/memory/reflection.d.ts +0 -43
- package/dist/data/memory/reflection.d.ts.map +0 -1
- package/dist/data/memory/reflection.js +0 -329
- package/dist/data/memory/reflection.js.map +0 -1
- package/dist/llm/prompts/reflection.d.ts +0 -6
- package/dist/llm/prompts/reflection.d.ts.map +0 -1
- package/dist/llm/prompts/reflection.js +0 -77
- package/dist/llm/prompts/reflection.js.map +0 -1
- package/dist/services/memory-pruning.service.d.ts +0 -12
- package/dist/services/memory-pruning.service.d.ts.map +0 -1
- package/dist/services/memory-pruning.service.js +0 -179
- package/dist/services/memory-pruning.service.js.map +0 -1
- package/templates/daily-review.default.md +0 -26
- package/templates/fire-and-forget.default.md +0 -76
- package/templates/offload.default.md +0 -33
- package/templates/sensorium-repair.default.md +0 -114
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Card-worker spawn path (design §3.1). The ordered bracket a worker is born
|
|
3
|
+
* through — mint identity → topic for that id → pre-queue payload → claim →
|
|
4
|
+
* registerThread → launch window → spawn → commit — lives in `worker-birth.ts` and
|
|
5
|
+
* is shared with `start_thread`'s `mode=worker` arm; what remains here is what is
|
|
6
|
+
* genuinely board-specific: the worktree isolation around it and the card bind
|
|
7
|
+
* passed as the claim. Giving a started — or possibly started — worker up is NOT
|
|
8
|
+
* board-specific and no longer lives here: the bracket owns that rung, and the
|
|
9
|
+
* board only hands it the kill, liveness and worktree wiring it already had.
|
|
10
|
+
*
|
|
11
|
+
* `bindWorker` is the claim for the reason the shared bracket runs claims where it
|
|
12
|
+
* does: dispatch ownership must be DURABLE before registerThread makes the worker
|
|
13
|
+
* observable, so no orchestrator — not even a second one overlapping a self-update —
|
|
14
|
+
* can ever see a badged worker that no card owns. That ordering is what lets the
|
|
15
|
+
* orphan sweep identify an orphan by ownership alone, with no age heuristic.
|
|
16
|
+
*/
|
|
17
|
+
import { getAgentType } from "../../config/index.js";
|
|
18
|
+
import { log } from "../../lib/logger.js";
|
|
19
|
+
import { errorMessage } from "../../lib/utils.js";
|
|
20
|
+
import { BOARD_WORKER_BADGE, getThread } from "../../data/memory/thread-registry.js";
|
|
21
|
+
import { getProfile } from "../../data/board/profile-defaults.js";
|
|
22
|
+
import { Optional } from "../../data/optional.js";
|
|
23
|
+
import { dispatchSpawn } from "../agent-spawn.service.js";
|
|
24
|
+
import { deletePendingTaskMailboxAsync } from "../process.service.js";
|
|
25
|
+
import { birthWorker } from "../worker-birth.js";
|
|
26
|
+
import { renderCardBriefing } from "./card-briefing.js";
|
|
27
|
+
import { createCardWorktree, removeWorktreeIfLinked, worktreeEnabled } from "./worktree.js";
|
|
28
|
+
/**
|
|
29
|
+
* How a failed birth reads on a card. The shared bracket names the STEP that
|
|
30
|
+
* refused; the wording stays here, because this is the only place that knows the
|
|
31
|
+
* refused step was a card dispatch. `spawn` carries the launcher's own message
|
|
32
|
+
* through unprefixed — it already names what failed to start.
|
|
33
|
+
*/
|
|
34
|
+
const DISPATCH_FAILURE_PREFIX = {
|
|
35
|
+
mint: "Worker id allocation failed",
|
|
36
|
+
topic: "Topic creation failed",
|
|
37
|
+
payload: "Failed to pre-queue card payload",
|
|
38
|
+
claim: "Failed to bind card worker",
|
|
39
|
+
register: "Failed to register card worker",
|
|
40
|
+
window: "Failed to open the card worker launch window",
|
|
41
|
+
spawn: "",
|
|
42
|
+
commit: "Failed to commit the card worker launch",
|
|
43
|
+
};
|
|
44
|
+
function dispatchFailureMessage(stage, detail) {
|
|
45
|
+
const prefix = DISPATCH_FAILURE_PREFIX[stage];
|
|
46
|
+
return prefix ? `${prefix}: ${detail}` : detail;
|
|
47
|
+
}
|
|
48
|
+
/** Select an existing source without changing thread state. */
|
|
49
|
+
export function resolveMemorySource(profile, deps) {
|
|
50
|
+
const memory = profile.memory;
|
|
51
|
+
if (!memory || memory.mode === "Ephemeral")
|
|
52
|
+
return Optional.empty();
|
|
53
|
+
if (memory.mode === "Existing thread") {
|
|
54
|
+
const threadId = memory.threadId;
|
|
55
|
+
if (typeof threadId === "number" && deps.getThread(threadId))
|
|
56
|
+
return Optional.of(threadId);
|
|
57
|
+
deps.warn(`[board] correlation=${deps.correlationId} card ${deps.cardId}: memory thread ${String(threadId)} was not found — using ephemeral memory.`);
|
|
58
|
+
}
|
|
59
|
+
return Optional.empty();
|
|
60
|
+
}
|
|
61
|
+
/** Windows drive-letter or POSIX absolute path → usable as a working directory. */
|
|
62
|
+
const looksLikeLocalPath = (s) => /^([A-Za-z]:[\\/]|\/)/.test(s);
|
|
63
|
+
/** Resolve the persisted named profile at dispatch time, never from card type. */
|
|
64
|
+
export function resolveCardForDispatch(db, card) {
|
|
65
|
+
const namedProfile = getProfile(db, card.profileId);
|
|
66
|
+
const memory = card.profile.memory;
|
|
67
|
+
return {
|
|
68
|
+
...card,
|
|
69
|
+
profileId: namedProfile.id,
|
|
70
|
+
profile: memory?.mode === "Existing thread"
|
|
71
|
+
? { ...namedProfile.profile, memory }
|
|
72
|
+
: namedProfile.profile,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/** The provider a resolved card's worker runs on — every rate-limit read must agree with spawn. */
|
|
76
|
+
export function dispatchAgentType(resolvedCard) {
|
|
77
|
+
return resolvedCard.profile.agentType ?? getAgentType();
|
|
78
|
+
}
|
|
79
|
+
/** Spawn from the profile snapshot resolved by the dispatch guard. */
|
|
80
|
+
export async function spawnCardWorker(deps, resolvedCard, comments) {
|
|
81
|
+
const { db, telegram, chatId, threadLifecycle } = deps;
|
|
82
|
+
const spawn = deps.dispatchSpawn ?? dispatchSpawn;
|
|
83
|
+
const agentType = dispatchAgentType(resolvedCard);
|
|
84
|
+
const shortTitle = resolvedCard.title.length > 40 ? resolvedCard.title.slice(0, 37) + "…" : resolvedCard.title;
|
|
85
|
+
const name = `Card #${resolvedCard.cardId} ${shortTitle}`;
|
|
86
|
+
// 1. Working directory: explicit local repo path on the card wins, else the
|
|
87
|
+
// process working directory.
|
|
88
|
+
const baseDirectory = resolvedCard.profile.repository && looksLikeLocalPath(resolvedCard.profile.repository)
|
|
89
|
+
? resolvedCard.profile.repository
|
|
90
|
+
: process.cwd();
|
|
91
|
+
// 1b. Spawn isolation: unless the operator opted out, run the worker in a
|
|
92
|
+
// dedicated git worktree rooted at the repo so its branch/changes never
|
|
93
|
+
// touch the main checkout until merged. If isolation cannot be created,
|
|
94
|
+
// do not dispatch: falling back would let the worker mutate the main checkout.
|
|
95
|
+
let workingDirectory = baseDirectory;
|
|
96
|
+
let createdWorktree = Optional.empty();
|
|
97
|
+
if (worktreeEnabled(resolvedCard.profile)) {
|
|
98
|
+
try {
|
|
99
|
+
const worktreePath = Optional.fromNullable(await (deps.createCardWorktree ?? createCardWorktree)(baseDirectory, resolvedCard.cardId, resolvedCard.title));
|
|
100
|
+
if (worktreePath.has()) {
|
|
101
|
+
workingDirectory = worktreePath.get();
|
|
102
|
+
createdWorktree = Optional.of(workingDirectory);
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
return {
|
|
106
|
+
error: `Worktree isolation required but ${baseDirectory} is not a git work tree`,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
return { error: `Worktree creation failed: ${errorMessage(err)}` };
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
const cleanupWorktreeAfterFailure = async () => {
|
|
115
|
+
if (createdWorktree.has()) {
|
|
116
|
+
try {
|
|
117
|
+
const removal = await (deps.removeWorktreeIfLinked ?? removeWorktreeIfLinked)(createdWorktree);
|
|
118
|
+
if (removal === "remove-failed") {
|
|
119
|
+
await telegram.sendMessage(chatId, `Card worker dispatch failed: worktree ${createdWorktree.get()} could not be removed — clean up manually.`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
log.warn(`[board] correlation=${resolvedCard.correlationId} failed-dispatch worktree cleanup: ${errorMessage(err)}`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
// 2. The shared birth bracket. The board supplies the card bind as the claim, the
|
|
128
|
+
// briefing as the required payload, the card as the launch-window owner, the
|
|
129
|
+
// worktree removal as the pre-spawn cleanup, and the decommission wiring the
|
|
130
|
+
// give-up rung needs — the same wiring releaseWorkerForCard uses, because a
|
|
131
|
+
// launch given up IS a release and is torn down by the operator Stop's own path.
|
|
132
|
+
const birth = await birthWorker({
|
|
133
|
+
db,
|
|
134
|
+
telegram,
|
|
135
|
+
chatId,
|
|
136
|
+
threadLifecycle,
|
|
137
|
+
name,
|
|
138
|
+
topicName: `[Board] ${name}`,
|
|
139
|
+
aliases: [name],
|
|
140
|
+
agentType,
|
|
141
|
+
workingDirectory,
|
|
142
|
+
badge: BOARD_WORKER_BADGE,
|
|
143
|
+
// A card worker is stateless: its registry root is itself, and the memory it
|
|
144
|
+
// bootstraps from is whatever the profile selected — not the same thing.
|
|
145
|
+
registryRoot: (workerThreadId) => Optional.of(workerThreadId),
|
|
146
|
+
memorySourceThreadId: resolveMemorySource(resolvedCard.profile, {
|
|
147
|
+
getThread: (threadId) => getThread(db, threadId),
|
|
148
|
+
warn: (message) => log.warn(message),
|
|
149
|
+
correlationId: resolvedCard.correlationId,
|
|
150
|
+
cardId: resolvedCard.cardId,
|
|
151
|
+
}),
|
|
152
|
+
notifyThreadId: Optional.fromNullable(deps.notifyThreadId),
|
|
153
|
+
payload: Optional.of({
|
|
154
|
+
render: (workerThreadId) => renderCardBriefing(resolvedCard, comments, workerThreadId),
|
|
155
|
+
required: true,
|
|
156
|
+
}),
|
|
157
|
+
claim: Optional.of((workerThreadId) => deps.bindWorker(workerThreadId)),
|
|
158
|
+
launchCardId: Optional.of(resolvedCard.cardId),
|
|
159
|
+
modelOverride: Optional.fromNullable(resolvedCard.profile.model).map((model) => model.trim()),
|
|
160
|
+
spawn,
|
|
161
|
+
deleteMailbox: deps.deletePendingTaskMailboxAsync ?? deletePendingTaskMailboxAsync,
|
|
162
|
+
cleanup: cleanupWorktreeAfterFailure,
|
|
163
|
+
...(deps.decommission ? { decommission: deps.decommission } : {}),
|
|
164
|
+
...(deps.killWorker ? { killWorker: deps.killWorker } : {}),
|
|
165
|
+
...(deps.removeWorktreeIfLinked ? { removeWorktree: deps.removeWorktreeIfLinked } : {}),
|
|
166
|
+
logPrefix: `[board] correlation=${resolvedCard.correlationId}`,
|
|
167
|
+
});
|
|
168
|
+
if ("claimLost" in birth)
|
|
169
|
+
return { bindLost: true };
|
|
170
|
+
if ("launchLost" in birth)
|
|
171
|
+
return { launchLost: true };
|
|
172
|
+
if ("failed" in birth)
|
|
173
|
+
return { error: dispatchFailureMessage(birth.failed, birth.detail) };
|
|
174
|
+
log.info(`[board] correlation=${resolvedCard.correlationId} card ${resolvedCard.cardId} dispatched → worker thread ${birth.workerThreadId} (PID ${birth.pid}, agent ${agentType})`);
|
|
175
|
+
return { workerThreadId: birth.workerThreadId };
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=worker-spawn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-spawn.js","sourceRoot":"","sources":["../../../src/services/board/worker-spawn.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Board card-worker git-worktree isolation (DD 1.1 §11.3 item 8).
|
|
3
|
+
*
|
|
4
|
+
* When a card's execution profile leaves `worktree` unset or true, the
|
|
5
|
+
* card-worker runs inside a dedicated git worktree instead of the raw repository
|
|
6
|
+
* directory, so its branch and working changes never touch the operator's main
|
|
7
|
+
* checkout until merged. The worktree is auto-named `<cardId>-<slug(title)>`,
|
|
8
|
+
* rooted at the profile repository, and torn down with the worker
|
|
9
|
+
* (worker-cleanup.service.ts). This is a spawn-time isolation flag, not a
|
|
10
|
+
* prompt directive — the baseline briefing stays vendor-neutral.
|
|
11
|
+
*/
|
|
12
|
+
import { Optional } from "../../data/optional.js";
|
|
13
|
+
import type { ExecutionProfile } from "../../data/board/board-types.js";
|
|
14
|
+
/** The worktree flag is default-ON per the mockup toggle: only an explicit
|
|
15
|
+
* `false` opts out of isolation. */
|
|
16
|
+
export declare function worktreeEnabled(profile: ExecutionProfile): boolean;
|
|
17
|
+
/** Lowercase; every run of non-alphanumeric characters collapses to a single
|
|
18
|
+
* dash; leading/trailing dashes are trimmed; capped at MAX_SLUG_LEN (re-trimming
|
|
19
|
+
* a dash left at the cut boundary). */
|
|
20
|
+
export declare function slugify(title: string): string;
|
|
21
|
+
/** Immutable card identity used as the worktree directory name. */
|
|
22
|
+
export declare function buildWorktreeName(cardId: number): string;
|
|
23
|
+
/** Inverse of buildWorktreeName: the card a worktree directory belongs to. */
|
|
24
|
+
export declare function worktreeCardId(dir: string): Optional<number>;
|
|
25
|
+
/** Deterministic location of a card's isolated board worktree. */
|
|
26
|
+
export declare function buildCardWorktreePath(cardId: number): string;
|
|
27
|
+
/** True only when `dir` is a board-owned worktree path (under the board
|
|
28
|
+
* worktree root). The teardown gate: an operator's own, manually-created
|
|
29
|
+
* worktree used as a worker cwd must NEVER be force-removed. */
|
|
30
|
+
export declare function isBoardOwnedWorktreePath(dir: string): boolean;
|
|
31
|
+
export type WorktreeRemovalResult = "removed" | "preserved-dirty" | "absent" | "remove-failed";
|
|
32
|
+
/**
|
|
33
|
+
* Create (or reset) the card's isolated git worktree rooted at `repo` and return
|
|
34
|
+
* its path, or null when `repo` is not a git working tree. The branch is force-created at HEAD (`-B`) so a
|
|
35
|
+
* re-dispatch of the same card gets a clean isolated branch instead of colliding
|
|
36
|
+
* with a stale one left by a prior run.
|
|
37
|
+
*/
|
|
38
|
+
export declare function createCardWorktree(repo: string, cardId: number, title: string): Promise<string | null>;
|
|
39
|
+
/**
|
|
40
|
+
* Remove the git worktree a decommissioned worker ran in, given its working
|
|
41
|
+
* directory. A no-op unless `dir` is a *linked* worktree — never the main
|
|
42
|
+
* checkout — so it is safe to call for every worker on the shared teardown path.
|
|
43
|
+
*/
|
|
44
|
+
export declare function removeWorktreeIfLinked(dir: Optional<string>): Promise<WorktreeRemovalResult>;
|
|
45
|
+
//# sourceMappingURL=worktree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktree.d.ts","sourceRoot":"","sources":["../../../src/services/board/worktree.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AASH,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAsBxE;qCACqC;AACrC,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAElE;AAED;;wCAEwC;AACxC,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAO7C;AAED,mEAAmE;AACnE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAG5D;AAOD,kEAAkE;AAClE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;iEAEiE;AACjE,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAI7D;AAoBD,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,iBAAiB,GAAG,QAAQ,GAAG,eAAe,CAAC;AA0B/F;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAaxB;AAuBD;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,GACpB,OAAO,CAAC,qBAAqB,CAAC,CAYhC"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Board card-worker git-worktree isolation (DD 1.1 §11.3 item 8).
|
|
3
|
+
*
|
|
4
|
+
* When a card's execution profile leaves `worktree` unset or true, the
|
|
5
|
+
* card-worker runs inside a dedicated git worktree instead of the raw repository
|
|
6
|
+
* directory, so its branch and working changes never touch the operator's main
|
|
7
|
+
* checkout until merged. The worktree is auto-named `<cardId>-<slug(title)>`,
|
|
8
|
+
* rooted at the profile repository, and torn down with the worker
|
|
9
|
+
* (worker-cleanup.service.ts). This is a spawn-time isolation flag, not a
|
|
10
|
+
* prompt directive — the baseline briefing stays vendor-neutral.
|
|
11
|
+
*/
|
|
12
|
+
import { execFile } from "node:child_process";
|
|
13
|
+
import { existsSync } from "node:fs";
|
|
14
|
+
import { promisify } from "node:util";
|
|
15
|
+
import { basename, dirname, join, resolve, sep } from "node:path";
|
|
16
|
+
import { dataPath } from "../../lib/paths.js";
|
|
17
|
+
import { log } from "../../lib/logger.js";
|
|
18
|
+
import { errorMessage } from "../../lib/utils.js";
|
|
19
|
+
import { Optional } from "../../data/optional.js";
|
|
20
|
+
const GIT_TIMEOUT_MS = 30_000;
|
|
21
|
+
/** Promisified execFile so git I/O runs off the event loop — a synchronous
|
|
22
|
+
* execFileSync would block Node's single thread for the whole command (up to
|
|
23
|
+
* GIT_TIMEOUT_MS), stalling the MCP server's polling/delivery on every dispatch
|
|
24
|
+
* and teardown. */
|
|
25
|
+
const execFileAsync = promisify(execFile);
|
|
26
|
+
/** Cap the slug so a very long title can't push the worktree path past Windows'
|
|
27
|
+
* MAX_PATH (260) and silently disable isolation. */
|
|
28
|
+
const MAX_SLUG_LEN = 60;
|
|
29
|
+
/** Worktrees live under the data dir, not inside the operator's repo, so the
|
|
30
|
+
* main checkout is never polluted with nested worktree directories. Resolved
|
|
31
|
+
* per call, not at module load, so a `SENSORIUM_BASE_DIR` set by the host
|
|
32
|
+
* process is honoured however late this module is imported. */
|
|
33
|
+
function worktreesDir() {
|
|
34
|
+
return dataPath("board-worktrees");
|
|
35
|
+
}
|
|
36
|
+
/** The worktree flag is default-ON per the mockup toggle: only an explicit
|
|
37
|
+
* `false` opts out of isolation. */
|
|
38
|
+
export function worktreeEnabled(profile) {
|
|
39
|
+
return profile.worktree !== false;
|
|
40
|
+
}
|
|
41
|
+
/** Lowercase; every run of non-alphanumeric characters collapses to a single
|
|
42
|
+
* dash; leading/trailing dashes are trimmed; capped at MAX_SLUG_LEN (re-trimming
|
|
43
|
+
* a dash left at the cut boundary). */
|
|
44
|
+
export function slugify(title) {
|
|
45
|
+
return title
|
|
46
|
+
.toLowerCase()
|
|
47
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
48
|
+
.replace(/^-|-$/g, "")
|
|
49
|
+
.slice(0, MAX_SLUG_LEN)
|
|
50
|
+
.replace(/-$/, "");
|
|
51
|
+
}
|
|
52
|
+
/** Immutable card identity used as the worktree directory name. */
|
|
53
|
+
export function buildWorktreeName(cardId) {
|
|
54
|
+
return `card-${cardId}`;
|
|
55
|
+
}
|
|
56
|
+
/** Inverse of buildWorktreeName: the card a worktree directory belongs to. */
|
|
57
|
+
export function worktreeCardId(dir) {
|
|
58
|
+
const match = /^card-(\d+)$/.exec(basename(dir));
|
|
59
|
+
return match ? Optional.of(Number(match[1])) : Optional.empty();
|
|
60
|
+
}
|
|
61
|
+
function buildCardBranchName(cardId, title) {
|
|
62
|
+
const slug = slugify(title);
|
|
63
|
+
return slug ? `${cardId}-${slug}` : String(cardId);
|
|
64
|
+
}
|
|
65
|
+
/** Deterministic location of a card's isolated board worktree. */
|
|
66
|
+
export function buildCardWorktreePath(cardId) {
|
|
67
|
+
return join(worktreesDir(), buildWorktreeName(cardId));
|
|
68
|
+
}
|
|
69
|
+
/** True only when `dir` is a board-owned worktree path (under the board
|
|
70
|
+
* worktree root). The teardown gate: an operator's own, manually-created
|
|
71
|
+
* worktree used as a worker cwd must NEVER be force-removed. */
|
|
72
|
+
export function isBoardOwnedWorktreePath(dir) {
|
|
73
|
+
const root = resolve(worktreesDir());
|
|
74
|
+
const target = resolve(dir);
|
|
75
|
+
return target === root || target.startsWith(root + sep);
|
|
76
|
+
}
|
|
77
|
+
async function runGit(cwd, args) {
|
|
78
|
+
const { stdout } = await execFileAsync("git", ["-C", cwd, ...args], {
|
|
79
|
+
encoding: "utf-8",
|
|
80
|
+
timeout: GIT_TIMEOUT_MS,
|
|
81
|
+
windowsHide: true,
|
|
82
|
+
});
|
|
83
|
+
return stdout;
|
|
84
|
+
}
|
|
85
|
+
/** True when `dir` is inside a git working tree (a worktree can be rooted at it). */
|
|
86
|
+
async function isGitWorkTree(dir) {
|
|
87
|
+
try {
|
|
88
|
+
return (await runGit(dir, ["rev-parse", "--is-inside-work-tree"])).trim() === "true";
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/** Remove a registered clean worktree. A dirty worktree is deliberately retained
|
|
95
|
+
* so teardown can never discard a worker's uncommitted changes. */
|
|
96
|
+
async function removeWorktreeAt(repo, path) {
|
|
97
|
+
if (!existsSync(path))
|
|
98
|
+
return "absent";
|
|
99
|
+
try {
|
|
100
|
+
const status = await runGit(path, ["status", "--porcelain"]);
|
|
101
|
+
if (status.trim())
|
|
102
|
+
return "preserved-dirty";
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
// Failing closed protects data in a malformed or partially removed worktree.
|
|
106
|
+
log.warn(`[board] worktree status ${path} could not be inspected; preserving it: ${errorMessage(err)}`);
|
|
107
|
+
return "preserved-dirty";
|
|
108
|
+
}
|
|
109
|
+
try {
|
|
110
|
+
await runGit(repo, ["worktree", "remove", path]);
|
|
111
|
+
return "removed";
|
|
112
|
+
}
|
|
113
|
+
catch (err) {
|
|
114
|
+
if (!existsSync(path))
|
|
115
|
+
return "absent";
|
|
116
|
+
log.warn(`[board] worktree remove ${path} (repo ${repo}) failed: ${errorMessage(err)}`);
|
|
117
|
+
return "remove-failed";
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Create (or reset) the card's isolated git worktree rooted at `repo` and return
|
|
122
|
+
* its path, or null when `repo` is not a git working tree. The branch is force-created at HEAD (`-B`) so a
|
|
123
|
+
* re-dispatch of the same card gets a clean isolated branch instead of colliding
|
|
124
|
+
* with a stale one left by a prior run.
|
|
125
|
+
*/
|
|
126
|
+
export async function createCardWorktree(repo, cardId, title) {
|
|
127
|
+
if (!(await isGitWorkTree(repo)))
|
|
128
|
+
return null;
|
|
129
|
+
const name = buildCardBranchName(cardId, title);
|
|
130
|
+
const path = buildCardWorktreePath(cardId);
|
|
131
|
+
// A stale worktree at this path (prior run whose teardown was skipped) would
|
|
132
|
+
// make `worktree add` fail — clear it first, unless it contains worker changes.
|
|
133
|
+
if ((await removeWorktreeAt(repo, path)) === "preserved-dirty") {
|
|
134
|
+
throw new Error(`previous run left uncommitted changes in the worktree at ${path}; resolve them before re-dispatch`);
|
|
135
|
+
}
|
|
136
|
+
await runGit(repo, ["worktree", "add", "--force", "-B", name, path]);
|
|
137
|
+
return path;
|
|
138
|
+
}
|
|
139
|
+
/** The main checkout a linked worktree belongs to, or null when `dir` is the
|
|
140
|
+
* main checkout itself (git-dir === git-common-dir) or not a git dir at all. */
|
|
141
|
+
async function linkedWorktreeMainRepo(dir) {
|
|
142
|
+
try {
|
|
143
|
+
const out = await runGit(dir, [
|
|
144
|
+
"rev-parse",
|
|
145
|
+
"--path-format=absolute",
|
|
146
|
+
"--git-dir",
|
|
147
|
+
"--git-common-dir",
|
|
148
|
+
]);
|
|
149
|
+
const [gitDir, commonDir] = out
|
|
150
|
+
.trim()
|
|
151
|
+
.split(/\r?\n/)
|
|
152
|
+
.map((s) => s.trim());
|
|
153
|
+
if (!gitDir || !commonDir || gitDir === commonDir)
|
|
154
|
+
return null;
|
|
155
|
+
return dirname(commonDir);
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
return null;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Remove the git worktree a decommissioned worker ran in, given its working
|
|
163
|
+
* directory. A no-op unless `dir` is a *linked* worktree — never the main
|
|
164
|
+
* checkout — so it is safe to call for every worker on the shared teardown path.
|
|
165
|
+
*/
|
|
166
|
+
export async function removeWorktreeIfLinked(dir) {
|
|
167
|
+
if (!dir.has())
|
|
168
|
+
return "absent";
|
|
169
|
+
const path = dir.get();
|
|
170
|
+
if (!existsSync(path))
|
|
171
|
+
return "absent";
|
|
172
|
+
// Only ever touch board-owned worktrees. Teardown runs for EVERY worker, and a
|
|
173
|
+
// worker whose cwd is an operator's own manually-created worktree (outside
|
|
174
|
+
// the board worktree root) must never be force-removed — that would destroy
|
|
175
|
+
// their data.
|
|
176
|
+
if (!isBoardOwnedWorktreePath(path))
|
|
177
|
+
return "absent";
|
|
178
|
+
const mainRepo = await linkedWorktreeMainRepo(path);
|
|
179
|
+
if (!mainRepo)
|
|
180
|
+
return "absent";
|
|
181
|
+
return removeWorktreeAt(mainRepo, path);
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=worktree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktree.js","sourceRoot":"","sources":["../../../src/services/board/worktree.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,9 +10,11 @@
|
|
|
10
10
|
* Degradation contract (the audited-safe direction, same as the old breakers):
|
|
11
11
|
* every function returns `null` when the broker cannot answer (unreachable,
|
|
12
12
|
* auth-rejected, timeout) and the caller MUST treat null as "cannot confirm
|
|
13
|
-
* → assume alive / kill not performed". Communication
|
|
14
|
-
* MCP → supervisor
|
|
13
|
+
* → assume alive / kill not performed". Communication through this client is
|
|
14
|
+
* strictly one-way MCP → broker; the supervisor as a whole is not only called
|
|
15
|
+
* by MCP, because its watchdog and Telegram front-end roles separately call MCP.
|
|
15
16
|
*/
|
|
17
|
+
import { Optional } from "../data/optional.js";
|
|
16
18
|
/**
|
|
17
19
|
* How a failed broker call failed — the distinction the spawn contract pivots on:
|
|
18
20
|
* "no-connection" the TCP connection was never established (refused, host
|
|
@@ -25,6 +27,15 @@
|
|
|
25
27
|
* could create a duplicate and is forbidden.
|
|
26
28
|
*/
|
|
27
29
|
export type BrokerFetchFailure = "no-connection" | "uncertain";
|
|
30
|
+
/**
|
|
31
|
+
* The supervisor's HTTP port, from SUPERVISOR_HTTP_PORT — the ONLY source. The
|
|
32
|
+
* supervisor exports it to the MCP it launches whenever its endpoint is enabled
|
|
33
|
+
* (ProcessManager.cs), so an unset or invalid value means no broker is
|
|
34
|
+
* configured for this process. There is deliberately no default port: a
|
|
35
|
+
* default made a process started outside the supervisor (a test, a shell)
|
|
36
|
+
* reach whichever live supervisor happened to own it.
|
|
37
|
+
*/
|
|
38
|
+
export declare function supervisorHttpPort(): Optional<number>;
|
|
28
39
|
export interface BrokerAliveResult {
|
|
29
40
|
alive: boolean;
|
|
30
41
|
pidFound: boolean;
|
|
@@ -216,7 +227,78 @@ export declare function brokerGetKeeperState(threadId: number): Promise<BrokerKe
|
|
|
216
227
|
* write degrades to today's in-memory behavior, already logged at WARN by the
|
|
217
228
|
* unreachable path). */
|
|
218
229
|
export declare function brokerSaveKeeperState(state: BrokerKeeperState): Promise<void>;
|
|
230
|
+
/**
|
|
231
|
+
* One provider's latest usage reading, mirroring the supervisor's `UsageSnapshot`
|
|
232
|
+
* record. The camelCase field names ARE the frozen `/usage` JSON contract
|
|
233
|
+
* (spec §A.6) — do not reshape. `agentType` is a plain string (not the AgentType
|
|
234
|
+
* union) to keep the OCP seam open for future providers.
|
|
235
|
+
*/
|
|
236
|
+
export interface BrokerUsageSnapshot {
|
|
237
|
+
agentType: string;
|
|
238
|
+
ok: boolean;
|
|
239
|
+
utilization5h: number | null;
|
|
240
|
+
reset5hAt: string | null;
|
|
241
|
+
utilization7d: number | null;
|
|
242
|
+
reset7dAt: string | null;
|
|
243
|
+
overageUtilization: number | null;
|
|
244
|
+
representativeClaim: string | null;
|
|
245
|
+
probedAt: string;
|
|
246
|
+
error: string | null;
|
|
247
|
+
}
|
|
248
|
+
/** One proactive usage window from the additive rate-limit contract. */
|
|
249
|
+
export interface BrokerUsageWindow {
|
|
250
|
+
kind: string;
|
|
251
|
+
used_percent: number | null;
|
|
252
|
+
threshold_percent: number | null;
|
|
253
|
+
window_minutes: number | null;
|
|
254
|
+
resets_at: number | null;
|
|
255
|
+
}
|
|
256
|
+
export interface BrokerRateLimitUsage {
|
|
257
|
+
supported: boolean;
|
|
258
|
+
active: boolean | null;
|
|
259
|
+
scope: string | null;
|
|
260
|
+
resets_at: number | null;
|
|
261
|
+
raw_reason: string | null;
|
|
262
|
+
}
|
|
263
|
+
export interface BrokerCredits {
|
|
264
|
+
has_credits: boolean;
|
|
265
|
+
unlimited: boolean;
|
|
266
|
+
balance: string | null;
|
|
267
|
+
}
|
|
268
|
+
/** Provider-specific limit state supplied by the supervisor. */
|
|
269
|
+
export interface BrokerProviderUsage {
|
|
270
|
+
provider: string;
|
|
271
|
+
captured_at: string;
|
|
272
|
+
source: string;
|
|
273
|
+
rate_limited: BrokerRateLimitUsage | null;
|
|
274
|
+
windows: BrokerUsageWindow[] | null;
|
|
275
|
+
plan: string | null;
|
|
276
|
+
credits: BrokerCredits | null;
|
|
277
|
+
}
|
|
278
|
+
/** Additive universal usage contract emitted alongside legacy `sources`. */
|
|
279
|
+
export interface BrokerUsageContract {
|
|
280
|
+
contract_version: number;
|
|
281
|
+
providers: BrokerProviderUsage[];
|
|
282
|
+
}
|
|
283
|
+
/** Full `/usage` response, retaining legacy snapshots for existing consumers. */
|
|
284
|
+
export interface BrokerUsageResponse {
|
|
285
|
+
sources: BrokerUsageSnapshot[];
|
|
286
|
+
contract: Optional<BrokerUsageContract>;
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Pull the latest per-agentType usage snapshots from the supervisor (one-way IPC:
|
|
290
|
+
* MCP → supervisor only). Mirrors `brokerGetKeeperState` — base URL, bearer,
|
|
291
|
+
* timeout, and unreachable-cooldown all come from `brokerFetch`.
|
|
292
|
+
*
|
|
293
|
+
* Returns `null` on ANY failure (unreachable, non-OK status, or unparseable body):
|
|
294
|
+
* null means "cannot confirm", NEVER "usage is zero". Callers must treat null as
|
|
295
|
+
* "leave the last known state untouched" and never fabricate a zeroed snapshot.
|
|
296
|
+
* An inert monitor answers `{ "sources": [] }` (200) → an empty array, which is a
|
|
297
|
+
* confirmed "no sources", distinct from null.
|
|
298
|
+
*/
|
|
299
|
+
export declare function brokerGetUsage(): Promise<BrokerUsageResponse | null>;
|
|
219
300
|
/** Test hook: reset the unreachable-cooldown state. */
|
|
220
301
|
export declare function resetBrokerClientState(): void;
|
|
221
302
|
export declare function brokerSpawnTimeoutForTest(ms: number | null): void;
|
|
303
|
+
export declare function brokerTransportForTest(transport: Optional<typeof fetch>): void;
|
|
222
304
|
//# sourceMappingURL=broker-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broker-client.d.ts","sourceRoot":"","sources":["../../src/services/broker-client.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"broker-client.d.ts","sourceRoot":"","sources":["../../src/services/broker-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAwB/C;;;;;;;;;;GAUG;AACH,MAAM,MAAM,kBAAkB,GAAG,eAAe,GAAG,WAAW,CAAC;AAgC/D;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,IAAI,QAAQ,CAAC,MAAM,CAAC,CAKrD;AAgFD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;2EACuE;IACvE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EACX,WAAW,CAAC,EAAE,MAAM,EACpB,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAYnC;AAED,MAAM,WAAW,uBAAuB;IACtC,oFAAoF;IACpF,KAAK,EAAE,OAAO,CAAC;IACf;4DACwD;IACxD,KAAK,EAAE,OAAO,CAAC;IACf,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,+EAA+E;IAC/E,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAiBzC;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GACzF,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAyBlC;AAID,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB;yEACqE;IACrE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,gFAAgF;IAChF,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB;qEACiE;IACjE,eAAe,EAAE,OAAO,CAAC;IACzB;4DACwD;IACxD,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,MAAM,iBAAiB,GACzB,kBAAkB,GAClB;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GACjB;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,OAAO,CAAA;CAAE,GAChD;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1B;;;;;;GAMG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA8DnF;AAID,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,eAAe,EAAE,CAAA;CAAE,GAAG,IAAI,CAAC,CAkBlE;AAID;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,WAAW,CAAC,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,cAAc,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAAC,CAsB/D;AAID,MAAM,MAAM,oBAAoB,GAAG,UAAU,GAAG,aAAa,CAAC;AAE9D;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAU/F;AAID,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;yDACyD;AACzD,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAS9F;AAED;;yBAEyB;AACzB,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAMnF;AAID;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,OAAO,CAAC;IACZ,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,wEAAwE;AACxE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IAEb,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAE5B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IAEjC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAE9B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,OAAO,CAAC;IAEnB,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IAEvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAErB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAEzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IAEnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,gEAAgE;AAChE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IAEf,YAAY,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAE1C,OAAO,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC;IAEpC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAEpB,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;CAC/B;AAED,4EAA4E;AAC5E,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,mBAAmB,EAAE,CAAC;CAClC;AAED,iFAAiF;AACjF,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,QAAQ,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAC;CACzC;AAED;;;;;;;;;;GAUG;AAEH,wBAAsB,cAAc,IAAI,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAuB1E;AAED,uDAAuD;AACvD,wBAAgB,sBAAsB,IAAI,IAAI,CAK7C;AAKD,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAEjE;AAKD,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,QAAQ,CAAC,OAAO,KAAK,CAAC,GAAG,IAAI,CAE9E"}
|