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
|
@@ -46,35 +46,46 @@ export function associateSessionToken(mcpSessionId, spawnToken) {
|
|
|
46
46
|
sessionSpawnToken.set(mcpSessionId, spawnToken);
|
|
47
47
|
}
|
|
48
48
|
/**
|
|
49
|
-
* Resolve the stable ownership key for a transport session id.
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
49
|
+
* Resolve the stable, THREAD-SCOPED ownership key for a transport session id.
|
|
50
|
+
*
|
|
51
|
+
* The spawn token identifies the PROCESS, but this is NOT unique per thread:
|
|
52
|
+
* every Copilot CLI thread shares a single COPILOT_HOME, so all of them present
|
|
53
|
+
* the SAME per-process token across DIFFERENT threads. Keying ownership by the
|
|
54
|
+
* token alone would make superseding one thread's owner poison every other
|
|
55
|
+
* thread that merely shares that token (their next call sees the token in the
|
|
56
|
+
* superseded set and tears itself down). We therefore scope the key by threadId
|
|
57
|
+
* too: `tok:<token>#<threadId>` (or legacy `sid:<sessionId>#<threadId>` when no
|
|
58
|
+
* token is known). A reconnect of the same process on the same thread reuses the
|
|
59
|
+
* same token AND threadId → resolves to the SAME key; a supersede touches only
|
|
60
|
+
* that one (token, thread) pair and can never leak to a sibling thread.
|
|
53
61
|
*/
|
|
54
|
-
function ownerKey(mcpSessionId) {
|
|
62
|
+
function ownerKey(mcpSessionId, threadId) {
|
|
55
63
|
const token = sessionSpawnToken.get(mcpSessionId);
|
|
56
|
-
return token ? `tok:${token}` : `sid:${mcpSessionId}`;
|
|
64
|
+
return token ? `tok:${token}#${threadId}` : `sid:${mcpSessionId}#${threadId}`;
|
|
57
65
|
}
|
|
58
66
|
/** Check if a session has been superseded by a newer session for its thread. */
|
|
59
67
|
export function isSessionSuperseded(mcpSessionId, threadId) {
|
|
60
68
|
if (mcpSessionId === undefined)
|
|
61
69
|
return false;
|
|
62
|
-
|
|
70
|
+
// The owner key is thread-scoped, so we must know the threadId to build it.
|
|
71
|
+
// The caller passes it directly on tool calls; fall back to the session→thread
|
|
72
|
+
// registry for callers (e.g. poll loops) that only hold a session id.
|
|
73
|
+
const resolvedThreadId = threadId ?? sessionThreadRegistry.get(mcpSessionId);
|
|
74
|
+
if (resolvedThreadId === undefined)
|
|
75
|
+
return false;
|
|
76
|
+
const key = ownerKey(mcpSessionId, resolvedThreadId);
|
|
63
77
|
if (supersededSessions.has(key)) {
|
|
64
|
-
log.debug(`[session] superseded-check: ${key.slice(0, 12)}… is in the superseded set (thread ${
|
|
78
|
+
log.debug(`[session] superseded-check: ${key.slice(0, 12)}… is in the superseded set (thread ${resolvedThreadId}).`);
|
|
65
79
|
return true;
|
|
66
80
|
}
|
|
67
81
|
// A different identity owns this thread now. With token-based keys a reconnect
|
|
68
82
|
// resolves to the SAME key as the owner, so this only fires for a genuinely
|
|
69
83
|
// different process (or a legacy session-id whose transport changed) — the
|
|
70
84
|
// poll loop running under the stale identity must stop.
|
|
71
|
-
const
|
|
72
|
-
if (
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
log.debug(`[session] superseded-check: thread ${resolvedThreadId} owned by ${owner.slice(0, 12)}…, caller ${key.slice(0, 12)}… — superseded.`);
|
|
76
|
-
return true;
|
|
77
|
-
}
|
|
85
|
+
const owner = threadOwnerSession.get(resolvedThreadId);
|
|
86
|
+
if (owner !== undefined && owner !== key) {
|
|
87
|
+
log.debug(`[session] superseded-check: thread ${resolvedThreadId} owned by ${owner.slice(0, 12)}…, caller ${key.slice(0, 12)}… — superseded.`);
|
|
88
|
+
return true;
|
|
78
89
|
}
|
|
79
90
|
return false;
|
|
80
91
|
}
|
|
@@ -97,13 +108,29 @@ export function isSessionSuperseded(mcpSessionId, threadId) {
|
|
|
97
108
|
* - When token info is missing on either side (legacy/STDIO), fall back to the
|
|
98
109
|
* previous adoption behavior so those paths keep working.
|
|
99
110
|
*
|
|
100
|
-
*
|
|
101
|
-
* (
|
|
111
|
+
* The owner key is thread-scoped (`tok:<token>#<threadId>`), so a single process
|
|
112
|
+
* (shared token) legitimately owning MANY threads is fully supported: each
|
|
113
|
+
* thread carries its own key and its own ownership row. A forged `threadId` still
|
|
114
|
+
* cannot hijack another thread — it would build a NEW key (its own token, the
|
|
115
|
+
* target thread), collide with that thread's real token-bearing owner, and be
|
|
116
|
+
* rejected below as a zombie/duplicate — so no separate cross-thread guard is
|
|
117
|
+
* needed (and a token-only one would misfire on the shared-token reality).
|
|
102
118
|
*/
|
|
103
119
|
export function reconcileThreadOwnership(mcpSessionId, threadId) {
|
|
104
120
|
if (mcpSessionId === undefined)
|
|
105
121
|
return false;
|
|
106
|
-
|
|
122
|
+
// Defense in depth: a transport session may only act on the thread it was
|
|
123
|
+
// registered on (via start_session). This restores the security intent of the
|
|
124
|
+
// removed cross-thread guard without the shared-token misfire. A reconnect's
|
|
125
|
+
// new session id is not yet in the registry (reg===undefined → fail-open), and
|
|
126
|
+
// a normal call passes its own threadId (reg===threadId → transparent); only a
|
|
127
|
+
// forged/foreign threadId on a known session is refused.
|
|
128
|
+
const registeredThread = sessionThreadRegistry.get(mcpSessionId);
|
|
129
|
+
if (registeredThread !== undefined && registeredThread !== threadId) {
|
|
130
|
+
log.warn(`[session] Rejecting session ${mcpSessionId.slice(0, 8)}… acting on thread ${threadId} — registered on ${registeredThread} (cross-thread claim refused).`);
|
|
131
|
+
return true;
|
|
132
|
+
}
|
|
133
|
+
const key = ownerKey(mcpSessionId, threadId);
|
|
107
134
|
if (supersededSessions.has(key)) {
|
|
108
135
|
log.warn(`[session] Rejecting ${key.slice(0, 12)}… on thread ${threadId} — already superseded (zombie/evicted).`);
|
|
109
136
|
return true;
|
|
@@ -111,13 +138,6 @@ export function reconcileThreadOwnership(mcpSessionId, threadId) {
|
|
|
111
138
|
const owner = threadOwnerSession.get(threadId);
|
|
112
139
|
if (owner === key)
|
|
113
140
|
return false;
|
|
114
|
-
// Refuse cross-thread adoption: this identity already owns another thread.
|
|
115
|
-
for (const [otherThreadId, otherOwner] of threadOwnerSession) {
|
|
116
|
-
if (otherOwner === key && otherThreadId !== threadId) {
|
|
117
|
-
log.warn(`[session] ${key.slice(0, 12)}… tried to act on thread ${threadId} but owns ${otherThreadId} — refused.`);
|
|
118
|
-
return true;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
141
|
if (owner !== undefined) {
|
|
122
142
|
const bothTokens = key.startsWith("tok:") && owner.startsWith("tok:");
|
|
123
143
|
if (bothTokens) {
|
|
@@ -141,7 +161,7 @@ export function reconcileThreadOwnership(mcpSessionId, threadId) {
|
|
|
141
161
|
}
|
|
142
162
|
/** Mark a session as the sole owner for a thread. Old owners are superseded. */
|
|
143
163
|
export function setThreadOwnerSession(threadId, mcpSessionId) {
|
|
144
|
-
const key = ownerKey(mcpSessionId);
|
|
164
|
+
const key = ownerKey(mcpSessionId, threadId);
|
|
145
165
|
const previous = threadOwnerSession.get(threadId);
|
|
146
166
|
if (previous !== undefined && previous !== key) {
|
|
147
167
|
// start_session is the explicit ownership-transfer signal (e.g. the keeper
|
|
@@ -157,13 +177,114 @@ export function setThreadOwnerSession(threadId, mcpSessionId) {
|
|
|
157
177
|
supersededSessions.delete(key);
|
|
158
178
|
threadOwnerSession.set(threadId, key);
|
|
159
179
|
}
|
|
180
|
+
// ── Park registry: which OWNER is parked in wait_for_instructions right now ──
|
|
181
|
+
// A worker is PARKED when THIS process is holding its
|
|
182
|
+
// remote_copilot_wait_for_instructions call open. The poll loop knows that
|
|
183
|
+
// first-hand, so parking is OBSERVED, never inferred from artifacts — and it must
|
|
184
|
+
// not be: our own SSE keepalive is echoed into the agent's stream-json log every
|
|
185
|
+
// 30s, so a parked worker's log keeps growing and its mtime keeps advancing while
|
|
186
|
+
// it does nothing (measured: three threads all parked in wait grew 1056/1059/2080
|
|
187
|
+
// bytes over 90s). Log activity cannot tell WORKING from PARKED-WAITING; this can.
|
|
188
|
+
//
|
|
189
|
+
// The mark is keyed by OWNER KEY, not by thread, because the fact the TTL sweep
|
|
190
|
+
// needs is about the owner: "is the session that owns this thread parked?". A
|
|
191
|
+
// thread-keyed mark answered a different question and got it wrong — a superseded
|
|
192
|
+
// zombie's residual mark made its replacement read as parked while the
|
|
193
|
+
// replacement was actually WORKING (it consumed a queued task in the pre-loop
|
|
194
|
+
// path and never reached the mark), so the sweep could behead a live worker.
|
|
195
|
+
// ownerKey — not the raw transport session id — because a same-process transport
|
|
196
|
+
// reconnect opens a second wait under a NEW sid but the SAME token: keying by sid
|
|
197
|
+
// would split one identity in two and break the legitimate reconnect overlap the
|
|
198
|
+
// refcount exists for.
|
|
199
|
+
//
|
|
200
|
+
// REFCOUNTED per owner key, not a Set: a superseded zombie session's poll loop
|
|
201
|
+
// exits on its next 2s tick AFTER the replacement's loop has entered, and a
|
|
202
|
+
// reconnecting transport of the SAME owner overlaps the same way. With a Set the
|
|
203
|
+
// first release would erase the surviving call's mark and a parked worker would
|
|
204
|
+
// read as working.
|
|
205
|
+
//
|
|
206
|
+
// IN-MEMORY on purpose: the mark mirrors a live socket held by this process, so a
|
|
207
|
+
// restart must drop both together — and the worker's re-entry into wait rebuilds
|
|
208
|
+
// both within one poll re-call. Everything that DECIDES teardown stays durable
|
|
209
|
+
// (created_at, the grace deadline, the decommission arbitration), so losing a mark
|
|
210
|
+
// can only DELAY a parked worker's death, never kill a working one.
|
|
211
|
+
//
|
|
212
|
+
// NOT CLOSED, deliberately: the CROSS-PROCESS form — an old process sweeping while
|
|
213
|
+
// its own old wait is open and the replacement works in a NEW process — is not
|
|
214
|
+
// fixed by ownership scoping, because both the marks and threadOwnerSession are
|
|
215
|
+
// per-process. It is bounded instead by the maintenance handover: the old wait
|
|
216
|
+
// checks the maintenance flag every iteration un-throttled, its return unmarks
|
|
217
|
+
// through the `finally`, and the port handover is ACK-gated on that same
|
|
218
|
+
// observation — so the old process's marks are gone before the new one serves,
|
|
219
|
+
// unless the old wait was stuck in the (timeout-less) SSE keepalive across the
|
|
220
|
+
// WHOLE handover AND the dying process's sweep fired in its shutdown window AND
|
|
221
|
+
// the row was untracked there too. Stacked coincidences, bounded by process death.
|
|
222
|
+
const parkedOwners = new Map();
|
|
223
|
+
/** The park-mark identity for a wait call. A call with no transport session id
|
|
224
|
+
* (STDIO/legacy) has no owner key to resolve, so it parks under its own anonymous
|
|
225
|
+
* identity; such a thread also never has an owner row, which is exactly the case
|
|
226
|
+
* isThreadWaiting's any-mark fallback covers. */
|
|
227
|
+
function parkKey(threadId, mcpSessionId) {
|
|
228
|
+
return mcpSessionId === undefined ? `anon:#${threadId}` : ownerKey(mcpSessionId, threadId);
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Mark a thread as parked in wait_for_instructions (refcount +1) and return the
|
|
232
|
+
* key the mark was filed under.
|
|
233
|
+
*
|
|
234
|
+
* The caller MUST hand that returned key back to unmarkThreadWaiting rather than
|
|
235
|
+
* recomputing it: the key is derived from the session's spawn token, and a token
|
|
236
|
+
* state change mid-wait would recompute to a different key and leak the mark
|
|
237
|
+
* forever.
|
|
238
|
+
*/
|
|
239
|
+
export function markThreadWaiting(threadId, mcpSessionId) {
|
|
240
|
+
const key = parkKey(threadId, mcpSessionId);
|
|
241
|
+
const marks = parkedOwners.get(threadId) ?? new Map();
|
|
242
|
+
marks.set(key, (marks.get(key) ?? 0) + 1);
|
|
243
|
+
parkedOwners.set(threadId, marks);
|
|
244
|
+
return key;
|
|
245
|
+
}
|
|
246
|
+
/** Release the park mark taken under `key` (the value markThreadWaiting returned). */
|
|
247
|
+
export function unmarkThreadWaiting(threadId, key) {
|
|
248
|
+
const marks = parkedOwners.get(threadId);
|
|
249
|
+
if (marks === undefined)
|
|
250
|
+
return;
|
|
251
|
+
const remaining = (marks.get(key) ?? 0) - 1;
|
|
252
|
+
if (remaining > 0)
|
|
253
|
+
marks.set(key, remaining);
|
|
254
|
+
else
|
|
255
|
+
marks.delete(key);
|
|
256
|
+
if (marks.size === 0)
|
|
257
|
+
parkedOwners.delete(threadId);
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* True while the session that OWNS this thread is holding a
|
|
261
|
+
* wait_for_instructions call open — i.e. the worker is parked on us rather than
|
|
262
|
+
* working. Marks belonging to any other identity (a superseded zombie that has
|
|
263
|
+
* not yet noticed) are ignored: they say nothing about what the current owner is
|
|
264
|
+
* doing.
|
|
265
|
+
*
|
|
266
|
+
* When the thread has no owner row yet, fall back to counting ANY mark. That gap
|
|
267
|
+
* is transient by construction: the poll loop's pre-loop reconcileThreadOwnership
|
|
268
|
+
* claims ownership BEFORE the mark is taken, in the same call — so an unowned
|
|
269
|
+
* thread with a mark is a fresh process whose wait predates its own ownership
|
|
270
|
+
* row, and treating it as parked is the same answer ownership would give.
|
|
271
|
+
*/
|
|
272
|
+
export function isThreadWaiting(threadId) {
|
|
273
|
+
const marks = parkedOwners.get(threadId);
|
|
274
|
+
if (marks === undefined || marks.size === 0)
|
|
275
|
+
return false;
|
|
276
|
+
const owner = threadOwnerSession.get(threadId);
|
|
277
|
+
if (owner === undefined)
|
|
278
|
+
return true;
|
|
279
|
+
return (marks.get(owner) ?? 0) > 0;
|
|
280
|
+
}
|
|
160
281
|
export function registerMcpSession(threadId, mcpSessionId, closeTransport) {
|
|
161
282
|
const entries = threadSessionRegistry.get(threadId) ?? [];
|
|
162
283
|
entries.push({ mcpSessionId, closeTransport });
|
|
163
284
|
threadSessionRegistry.set(threadId, entries);
|
|
164
285
|
sessionThreadRegistry.set(mcpSessionId, threadId);
|
|
165
286
|
expectedSessionCloses.delete(mcpSessionId);
|
|
166
|
-
log.debug(`[session] Registered transport ${mcpSessionId.slice(0, 8)}… for thread ${threadId} (${ownerKey(mcpSessionId).slice(0, 12)}…).`);
|
|
287
|
+
log.debug(`[session] Registered transport ${mcpSessionId.slice(0, 8)}… for thread ${threadId} (${ownerKey(mcpSessionId, threadId).slice(0, 12)}…).`);
|
|
167
288
|
}
|
|
168
289
|
export function getThreadIdForMcpSession(mcpSessionId) {
|
|
169
290
|
return sessionThreadRegistry.get(mcpSessionId);
|
|
@@ -232,7 +353,7 @@ export function unregisterMcpSession(mcpSessionId) {
|
|
|
232
353
|
*/
|
|
233
354
|
export function purgeOtherSessions(threadId, keepMcpSessionId) {
|
|
234
355
|
const entries = threadSessionRegistry.get(threadId) ?? [];
|
|
235
|
-
const keepKey = keepMcpSessionId ? ownerKey(keepMcpSessionId) : undefined;
|
|
356
|
+
const keepKey = keepMcpSessionId ? ownerKey(keepMcpSessionId, threadId) : undefined;
|
|
236
357
|
let purged = 0;
|
|
237
358
|
const kept = [];
|
|
238
359
|
for (const entry of entries) {
|
|
@@ -240,8 +361,10 @@ export function purgeOtherSessions(threadId, keepMcpSessionId) {
|
|
|
240
361
|
kept.push(entry);
|
|
241
362
|
continue;
|
|
242
363
|
}
|
|
243
|
-
// Resolve the identity BEFORE unregister clears its token mapping.
|
|
244
|
-
|
|
364
|
+
// Resolve the identity BEFORE unregister clears its token mapping. Both keys
|
|
365
|
+
// are scoped to THIS thread, so the supersede below cannot leak to a sibling
|
|
366
|
+
// thread that shares the same spawn token.
|
|
367
|
+
const entryKey = ownerKey(entry.mcpSessionId, threadId);
|
|
245
368
|
// Supersede only DIFFERENT processes. A stale transport of the SAME process
|
|
246
369
|
// (a prior reconnect — same key as the keeper) is closed but never
|
|
247
370
|
// superseded, otherwise we would evict the live owner.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-registry.js","sourceRoot":"","sources":["../../src/sessions/mcp-registry.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mcp-registry.js","sourceRoot":"","sources":["../../src/sessions/mcp-registry.ts"],"names":[],"mappings":"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"}
|
package/dist/test-bootstrap.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* GLOBAL TEST ISOLATION GUARD — preloaded before every test file.
|
|
3
3
|
*
|
|
4
|
-
* Wired
|
|
5
|
-
* (and therefore before its first import of
|
|
6
|
-
* module that resolves a path from the data
|
|
4
|
+
* Wired (by scripts/run-tests.mjs, what `npm test` runs) as an `--import` hook
|
|
5
|
+
* that runs BEFORE the test module (and therefore before its first import of
|
|
6
|
+
* config / schema / scheduler / any module that resolves a path from the data
|
|
7
|
+
* dir):
|
|
7
8
|
*
|
|
8
9
|
* node --import tsx --import ./src/test-bootstrap.ts --test "src/**\/*.test.ts"
|
|
9
10
|
*
|
|
@@ -20,20 +21,26 @@
|
|
|
20
21
|
* min until the supervisor restarted it. The earlier mitigation only redirected
|
|
21
22
|
* LOGS (SENSORIUM_LOG_DIR); every other real path stayed exposed.
|
|
22
23
|
*
|
|
23
|
-
* This guard closes the whole hole
|
|
24
|
+
* This guard closes the whole hole four ways:
|
|
24
25
|
* 1. SENSORIUM_BASE_DIR → a fresh per-run temp dir (the durable follow-up):
|
|
25
26
|
* relocates memory.db, settings.json, schedules, heartbeats, pids,
|
|
26
27
|
* active-sessions.json, files — see src/lib/paths.ts.
|
|
27
|
-
* 2. HOME + USERPROFILE → the same temp dir
|
|
28
|
-
* that still reaches os.homedir()
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
28
|
+
* 2. HOME + USERPROFILE + APPDATA + LOCALAPPDATA → the same temp dir
|
|
29
|
+
* (belt-and-suspenders): any path that still reaches os.homedir() or the
|
|
30
|
+
* AppData roots directly also lands in the throwaway dir. os.homedir()
|
|
31
|
+
* reads USERPROFILE on Windows and HOME on POSIX, so both are set.
|
|
32
|
+
* 3. The environment is REBUILT from an allowlist (below). Nothing the shell
|
|
33
|
+
* running the suite carries — the live supervisor / MCP ports and secret,
|
|
34
|
+
* Telegram / OpenAI / Claude credentials, board and broker switches, a
|
|
35
|
+
* parent agent session's variables — reaches a test.
|
|
36
|
+
* 4. A HARD REFUSAL: if the data dir still resolves to the real one, THROW
|
|
33
37
|
* before a single test runs. The suite can never run against live state.
|
|
34
38
|
*
|
|
35
|
-
* Ports are
|
|
36
|
-
*
|
|
39
|
+
* Ports are NOT safe by construction: product code talks to the supervisor and
|
|
40
|
+
* the MCP over loopback, and a test can always reach a live server on this
|
|
41
|
+
* host. The tripwire (test-tripwire.test-support.ts) refuses every connection
|
|
42
|
+
* to a port this process is not listening on, every agent CLI / process killer,
|
|
43
|
+
* and every signal to a process this test did not spawn (inc75).
|
|
37
44
|
*/
|
|
38
45
|
export {};
|
|
39
46
|
//# sourceMappingURL=test-bootstrap.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-bootstrap.d.ts","sourceRoot":"","sources":["../src/test-bootstrap.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"test-bootstrap.d.ts","sourceRoot":"","sources":["../src/test-bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG"}
|
package/dist/test-bootstrap.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* GLOBAL TEST ISOLATION GUARD — preloaded before every test file.
|
|
3
3
|
*
|
|
4
|
-
* Wired
|
|
5
|
-
* (and therefore before its first import of
|
|
6
|
-
* module that resolves a path from the data
|
|
4
|
+
* Wired (by scripts/run-tests.mjs, what `npm test` runs) as an `--import` hook
|
|
5
|
+
* that runs BEFORE the test module (and therefore before its first import of
|
|
6
|
+
* config / schema / scheduler / any module that resolves a path from the data
|
|
7
|
+
* dir):
|
|
7
8
|
*
|
|
8
9
|
* node --import tsx --import ./src/test-bootstrap.ts --test "src/**\/*.test.ts"
|
|
9
10
|
*
|
|
@@ -20,27 +21,64 @@
|
|
|
20
21
|
* min until the supervisor restarted it. The earlier mitigation only redirected
|
|
21
22
|
* LOGS (SENSORIUM_LOG_DIR); every other real path stayed exposed.
|
|
22
23
|
*
|
|
23
|
-
* This guard closes the whole hole
|
|
24
|
+
* This guard closes the whole hole four ways:
|
|
24
25
|
* 1. SENSORIUM_BASE_DIR → a fresh per-run temp dir (the durable follow-up):
|
|
25
26
|
* relocates memory.db, settings.json, schedules, heartbeats, pids,
|
|
26
27
|
* active-sessions.json, files — see src/lib/paths.ts.
|
|
27
|
-
* 2. HOME + USERPROFILE → the same temp dir
|
|
28
|
-
* that still reaches os.homedir()
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
28
|
+
* 2. HOME + USERPROFILE + APPDATA + LOCALAPPDATA → the same temp dir
|
|
29
|
+
* (belt-and-suspenders): any path that still reaches os.homedir() or the
|
|
30
|
+
* AppData roots directly also lands in the throwaway dir. os.homedir()
|
|
31
|
+
* reads USERPROFILE on Windows and HOME on POSIX, so both are set.
|
|
32
|
+
* 3. The environment is REBUILT from an allowlist (below). Nothing the shell
|
|
33
|
+
* running the suite carries — the live supervisor / MCP ports and secret,
|
|
34
|
+
* Telegram / OpenAI / Claude credentials, board and broker switches, a
|
|
35
|
+
* parent agent session's variables — reaches a test.
|
|
36
|
+
* 4. A HARD REFUSAL: if the data dir still resolves to the real one, THROW
|
|
33
37
|
* before a single test runs. The suite can never run against live state.
|
|
34
38
|
*
|
|
35
|
-
* Ports are
|
|
36
|
-
*
|
|
39
|
+
* Ports are NOT safe by construction: product code talks to the supervisor and
|
|
40
|
+
* the MCP over loopback, and a test can always reach a live server on this
|
|
41
|
+
* host. The tripwire (test-tripwire.test-support.ts) refuses every connection
|
|
42
|
+
* to a port this process is not listening on, every agent CLI / process killer,
|
|
43
|
+
* and every signal to a process this test did not spawn (inc75).
|
|
37
44
|
*/
|
|
38
|
-
import { homedir, tmpdir } from "node:os";
|
|
39
|
-
import { mkdtempSync, rmSync } from "node:fs";
|
|
45
|
+
import { homedir, tmpdir, userInfo } from "node:os";
|
|
46
|
+
import { mkdtempSync, mkdirSync, rmSync } from "node:fs";
|
|
40
47
|
import { join } from "node:path";
|
|
41
|
-
|
|
42
|
-
//
|
|
43
|
-
|
|
48
|
+
import { installTestTripwire, TRIPWIRE_LEDGER_ENV } from "./test-tripwire.test-support.js";
|
|
49
|
+
// The REAL data dir, from the account database rather than the environment: a
|
|
50
|
+
// nested run (a test that runs a fixture file under its own runner) inherits
|
|
51
|
+
// the temp HOME this file set, so an env-derived "real" dir there would be a
|
|
52
|
+
// temp one.
|
|
53
|
+
const REAL_DATA_DIR = join(userInfo().homedir, ".remote-copilot-mcp");
|
|
54
|
+
// ── ENV ALLOWLIST ────────────────────────────────────────────────────────────
|
|
55
|
+
// Each variable kept is needed by the platform, never by product config:
|
|
56
|
+
// PATH git and `where` resolution
|
|
57
|
+
// SystemRoot, windir Windows: Node's crypto, DNS and child spawns need them
|
|
58
|
+
// TEMP, TMP os.tmpdir() — the temp home below lives there
|
|
59
|
+
// ComSpec the shell exec / shell:true launch
|
|
60
|
+
// PATHEXT .cmd / .exe resolution by `where` and the shell
|
|
61
|
+
// NODE_OPTIONS node flags the operator passes to every test child
|
|
62
|
+
// NODE_TEST_CONTEXT the runner's marker for its children (logger.ts, tripwire)
|
|
63
|
+
// TRIPWIRE_LEDGER_ENV the run's refusal ledger (scripts/run-tests.mjs)
|
|
64
|
+
// TZ a timezone a test run was started under on purpose
|
|
65
|
+
// Windows environment names are case-insensitive, so the match is too.
|
|
66
|
+
const ENV_ALLOWLIST = new Set([
|
|
67
|
+
"PATH",
|
|
68
|
+
"SystemRoot",
|
|
69
|
+
"windir",
|
|
70
|
+
"TEMP",
|
|
71
|
+
"TMP",
|
|
72
|
+
"ComSpec",
|
|
73
|
+
"PATHEXT",
|
|
74
|
+
"NODE_OPTIONS",
|
|
75
|
+
"NODE_TEST_CONTEXT",
|
|
76
|
+
"TZ",
|
|
77
|
+
TRIPWIRE_LEDGER_ENV,
|
|
78
|
+
].map((name) => name.toUpperCase()));
|
|
79
|
+
for (const name of Object.keys(process.env))
|
|
80
|
+
if (!ENV_ALLOWLIST.has(name.toUpperCase()))
|
|
81
|
+
delete process.env[name];
|
|
44
82
|
// One throwaway home per test child. Not cleaned between files (each child gets
|
|
45
83
|
// its own), but removed on this child's exit below.
|
|
46
84
|
const TEST_HOME = mkdtempSync(join(tmpdir(), "sensorium-test-home-"));
|
|
@@ -49,11 +87,21 @@ process.env.SENSORIUM_BASE_DIR = TEST_BASE_DIR;
|
|
|
49
87
|
process.env.SENSORIUM_LOG_DIR = join(TEST_BASE_DIR, "logs", "mcp");
|
|
50
88
|
process.env.USERPROFILE = TEST_HOME;
|
|
51
89
|
process.env.HOME = TEST_HOME;
|
|
90
|
+
process.env.APPDATA = join(TEST_HOME, "AppData", "Roaming");
|
|
91
|
+
process.env.LOCALAPPDATA = join(TEST_HOME, "AppData", "Local");
|
|
92
|
+
mkdirSync(process.env.APPDATA, { recursive: true });
|
|
93
|
+
mkdirSync(process.env.LOCALAPPDATA, { recursive: true });
|
|
94
|
+
// Published for tests that need to assert they are NOT pointed at live state.
|
|
95
|
+
// Once HOME/USERPROFILE are overridden above, `os.homedir()` inside a test
|
|
96
|
+
// returns the temp home, so a test cannot recompute the production data dir on
|
|
97
|
+
// its own — it has to be handed the real value from here.
|
|
98
|
+
process.env.SENSORIUM_TEST_REAL_DATA_DIR = REAL_DATA_DIR;
|
|
52
99
|
// config/index.ts calls process.exit(1) at import when these are unset — seed
|
|
53
|
-
// dummies so importing config in any test can never kill the runner.
|
|
54
|
-
//
|
|
55
|
-
process.env.TELEGRAM_TOKEN
|
|
56
|
-
process.env.TELEGRAM_CHAT_ID
|
|
100
|
+
// dummies so importing config in any test can never kill the runner. The
|
|
101
|
+
// allowlist above already dropped any real value.
|
|
102
|
+
process.env.TELEGRAM_TOKEN = "test-token";
|
|
103
|
+
process.env.TELEGRAM_CHAT_ID = "test-chat-id";
|
|
104
|
+
installTestTripwire();
|
|
57
105
|
// ── HARD REFUSAL ────────────────────────────────────────────────────────────
|
|
58
106
|
// If, after the overrides, the data dir STILL points at the live one, abort the
|
|
59
107
|
// entire process. This can only happen if the override mechanism itself failed
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-bootstrap.js","sourceRoot":"","sources":["../src/test-bootstrap.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"test-bootstrap.js","sourceRoot":"","sources":["../src/test-bootstrap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TEST TRIPWIRE — installed by test-bootstrap.ts in every test process.
|
|
3
|
+
*
|
|
4
|
+
* The rule, with NO exceptions: a test process connects only to its own
|
|
5
|
+
* exclusive listeners, launches no agent CLI or process killer, and signals
|
|
6
|
+
* only its own live children; every refusal is recorded and turns the run red.
|
|
7
|
+
*
|
|
8
|
+
* - network: fetch and net sockets may reach only an address and port (or a
|
|
9
|
+
* pipe) a server in THIS process holds alone at that moment — see Network
|
|
10
|
+
* below for what counts. The live supervisor (8848), the live MCP (3847)
|
|
11
|
+
* and every other host are refused — there is deliberately no in-process
|
|
12
|
+
* fake supervisor, so a test that needs a broker has to stand one up and
|
|
13
|
+
* say so;
|
|
14
|
+
* - child processes: agent CLIs (claude / copilot / codex) and process killers
|
|
15
|
+
* (taskkill / wmic / Stop-Process) are refused;
|
|
16
|
+
* - signals: process.kill(pid, sig) with a non-zero signal is refused unless
|
|
17
|
+
* `pid` is a child this process spawned that has not exited yet. A made-up
|
|
18
|
+
* test pid — or a finished child's, once the OS reuses it — can be a real
|
|
19
|
+
* process on this machine; the degraded native kill path would end it.
|
|
20
|
+
*
|
|
21
|
+
* No test is given leave to do any of these. A test that needs a supervisor
|
|
22
|
+
* that is down swaps the broker client's transport (brokerTransportForTest).
|
|
23
|
+
*
|
|
24
|
+
* Scope — the tripwire guards the code that runs where it is installed: every
|
|
25
|
+
* `node --test` file child (they inherit the --import flags) and worker threads
|
|
26
|
+
* started from a file or URL with the default execArgv. Three ways out are NOT
|
|
27
|
+
* covered by it:
|
|
28
|
+
*
|
|
29
|
+
* - a worker_threads Worker started with an explicit `execArgv` that drops the
|
|
30
|
+
* --import flags runs without the tripwire;
|
|
31
|
+
* - a worker_threads Worker started with `eval: true` runs without it even
|
|
32
|
+
* with the default execArgv: Node does not run the --import modules for an
|
|
33
|
+
* eval worker (probed: fetch is unpatched in a CommonJS eval worker, patched
|
|
34
|
+
* in a data:-URL ESM worker). The one in product code today,
|
|
35
|
+
* flight-recorder.service.ts, uses only worker_threads and fs on the path
|
|
36
|
+
* its test supplies (a temp dir) — no network, child process or kill — so
|
|
37
|
+
* it is not an escape now;
|
|
38
|
+
* - a grandchild started as spawn(process.execPath, ...) is a plain node that
|
|
39
|
+
* never loads test-bootstrap.ts, and launching node is not refused here.
|
|
40
|
+
*
|
|
41
|
+
* All three still inherit only the allowlisted environment (test-bootstrap.ts), so
|
|
42
|
+
* they find no live broker / MCP port to reach; nothing stops one that brings
|
|
43
|
+
* its own port.
|
|
44
|
+
*
|
|
45
|
+
* Product code catches the errors it gets from fetch / kill, so a throw alone
|
|
46
|
+
* would be swallowed into a degraded path and the test would pass. Every refusal
|
|
47
|
+
* is therefore also RECORDED, twice:
|
|
48
|
+
*
|
|
49
|
+
* - in the run's LEDGER, a file scripts/run-tests.mjs (what `npm test` runs)
|
|
50
|
+
* creates and reads back after the whole `node --test` run has exited. It
|
|
51
|
+
* is appended to synchronously at the moment of refusal and that script
|
|
52
|
+
* runs no test code, so no test attribution, concurrency or exit listener order
|
|
53
|
+
* inside a child can lose a refusal — including one raised after the last
|
|
54
|
+
* test ended (fire-and-forget work that outlived its test, the inc74
|
|
55
|
+
* failure mode) or from a test module's own exit hook.
|
|
56
|
+
* - per test, for the report: a root afterEach fails the test it ran after.
|
|
57
|
+
* Best effort only — node:test shares one afterEach hook instance across
|
|
58
|
+
* sibling tests and a concurrent sibling's run of it clears the first
|
|
59
|
+
* failure (TestHook.run resets `error`), and a sibling's afterEach can
|
|
60
|
+
* drain a refusal that was not its own.
|
|
61
|
+
*
|
|
62
|
+
* Why (inc75): a fire-and-forget exit path outlived its test, the port default
|
|
63
|
+
* in broker-client sent a real /proc/spawn to the live supervisor, and twelve
|
|
64
|
+
* real agents were started against the live MCP.
|
|
65
|
+
*/
|
|
66
|
+
/** The variable that carries the run's ledger path from scripts/run-tests.mjs,
|
|
67
|
+
* which spells the same name (it is plain Node and cannot import this file). */
|
|
68
|
+
export declare const TRIPWIRE_LEDGER_ENV = "SENSORIUM_TEST_TRIPWIRE_LEDGER";
|
|
69
|
+
/** The error every refused operation throws (or emits, for a socket). */
|
|
70
|
+
export declare class TripwireRefusal extends Error {
|
|
71
|
+
readonly code = "ERR_TEST_TRIPWIRE";
|
|
72
|
+
constructor(what: string);
|
|
73
|
+
}
|
|
74
|
+
export declare function installTestTripwire(): void;
|
|
75
|
+
//# sourceMappingURL=test-tripwire.test-support.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-tripwire.test-support.d.ts","sourceRoot":"","sources":["../src/test-tripwire.test-support.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgEG;AAWH;iFACiF;AACjF,eAAO,MAAM,mBAAmB,mCAAmC,CAAC;AAEpE,yEAAyE;AACzE,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,IAAI,uBAAuB;gBACxB,IAAI,EAAE,MAAM;CAIzB;AA8WD,wBAAgB,mBAAmB,IAAI,IAAI,CAQ1C"}
|