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,357 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Card-builder draft store. ❌ FROZEN SEAM.
|
|
3
|
+
*
|
|
4
|
+
* P0 is the placeholder builder SHELL: the WHAT fields (title / description /
|
|
5
|
+
* acceptance) plus lane / priority, submitted via the create endpoint.
|
|
6
|
+
* The schema-driven HOW builder + compiled preview arrive in P1 — this surface
|
|
7
|
+
* stays stable so the UI is not rewired then. It is extended ADDITIVELY here
|
|
8
|
+
* with { policySchema, presets } (the How-step field schema + presets, sourced
|
|
9
|
+
* from the editable schema/policy.js via the data seam) and { preview,
|
|
10
|
+
* setPreviewProfile, stopPreview } (a DEBOUNCED live compiled-policy preview
|
|
11
|
+
* bound to POST /api/board/cards/preview) and { profileSave, saveProfile } (the
|
|
12
|
+
* "Save as profile" action that persists the current How draft via POST
|
|
13
|
+
* /api/board/profiles, with { saving, savedName, error } feedback); the original
|
|
14
|
+
* returns ({ draft, lanes, profiles, submitting, error, load, reset, submit })
|
|
15
|
+
* are unchanged.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import { onUnmounted, reactive, ref, watch } from "../vendor/vue.esm-browser.js";
|
|
19
|
+
import { api } from "../api/api.js";
|
|
20
|
+
|
|
21
|
+
const AUTONOMY_VALUES = ["Autonomous", "Checkpoints", "Collaborative"];
|
|
22
|
+
const MEMORY_MODES = ["Ephemeral"];
|
|
23
|
+
/** Coalesce keystrokes/toggles into one preview compile (real endpoint call). */
|
|
24
|
+
const PREVIEW_DEBOUNCE_MS = 300;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Map the phases control to the backend phase shape: exactly
|
|
28
|
+
* {name, review, provider, model}, stripping the view's transient `auto`/`_id`
|
|
29
|
+
* keys. Drops any half-added row whose name is still blank, and the synthetic
|
|
30
|
+
* `auto` "Review" row the widget inserts for display only (its parent phase
|
|
31
|
+
* already carries review:true — persisting the row would double-encode it).
|
|
32
|
+
*/
|
|
33
|
+
function phasesFromHow(phases) {
|
|
34
|
+
return phases
|
|
35
|
+
.filter((phase) => !phase.auto && typeof phase.name === "string" && phase.name.trim())
|
|
36
|
+
.map((phase) => ({
|
|
37
|
+
name: phase.name.trim(),
|
|
38
|
+
review: phase.review,
|
|
39
|
+
provider: phase.provider,
|
|
40
|
+
model: phase.model,
|
|
41
|
+
}));
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Kebab-case a profile name into its stable id: lowercase, every run of
|
|
46
|
+
* non-alphanumerics collapsed to a single dash, leading/trailing dashes trimmed.
|
|
47
|
+
*/
|
|
48
|
+
export function slugifyProfileName(name) {
|
|
49
|
+
return name
|
|
50
|
+
.toLowerCase()
|
|
51
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
52
|
+
.replace(/^-+|-+$/g, "");
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Map the How controls that the current board backend persists into a profile.
|
|
57
|
+
*
|
|
58
|
+
* `fields` is the resolved policy schema (policySchema.value). A control whose
|
|
59
|
+
* schema field is HIDDEN by its showWhen — decided by the SAME evaluateField the
|
|
60
|
+
* view renders with — is skipped, so a hidden field never persists (e.g. the
|
|
61
|
+
* model alias once the provider isn't Claude, whose showWhen then fails). The
|
|
62
|
+
* skip is generic: each control is keyed on the field.key it shares with its How
|
|
63
|
+
* key, never on the provider string. An empty `fields` imposes no constraints,
|
|
64
|
+
* so every mapped control persists (back-compat, and preview before the schema
|
|
65
|
+
* has loaded).
|
|
66
|
+
*/
|
|
67
|
+
export function profileFromHow(how, fields = []) {
|
|
68
|
+
const hidden = new Set(
|
|
69
|
+
fields.filter((field) => !evaluateField(field, how).visible).map((field) => field.key),
|
|
70
|
+
);
|
|
71
|
+
const shown = (key) => !hidden.has(key);
|
|
72
|
+
const profile = {};
|
|
73
|
+
if (shown("skills") && Array.isArray(how.skills)) profile.skills = how.skills;
|
|
74
|
+
const provider = typeof how.provider === "string" ? how.provider.toLowerCase() : "";
|
|
75
|
+
if (shown("provider") && provider) profile.agentType = provider;
|
|
76
|
+
if (shown("model") && typeof how.model === "string" && how.model.trim())
|
|
77
|
+
profile.model = how.model.trim();
|
|
78
|
+
if (shown("worktree") && typeof how.worktree === "boolean") profile.worktree = how.worktree;
|
|
79
|
+
if (shown("workdir") && typeof how.workdir === "string" && how.workdir.trim())
|
|
80
|
+
profile.repository = how.workdir.trim();
|
|
81
|
+
if (shown("openPr") && typeof how.openPr === "boolean") profile.openPr = how.openPr;
|
|
82
|
+
if (how.openPr === true) {
|
|
83
|
+
if (shown("prDraft") && typeof how.prDraft === "boolean") profile.prDraft = how.prDraft;
|
|
84
|
+
if (shown("prProvider") && typeof how.prProvider === "string")
|
|
85
|
+
profile.prProvider = how.prProvider;
|
|
86
|
+
}
|
|
87
|
+
if (
|
|
88
|
+
shown("autonomy") &&
|
|
89
|
+
typeof how.autonomy === "string" &&
|
|
90
|
+
AUTONOMY_VALUES.includes(how.autonomy)
|
|
91
|
+
)
|
|
92
|
+
profile.autonomy = how.autonomy;
|
|
93
|
+
if (shown("verifyDone") && typeof how.verifyDone === "boolean")
|
|
94
|
+
profile.verifyDone = how.verifyDone;
|
|
95
|
+
if (shown("memory") && how.memory && MEMORY_MODES.includes(how.memory.mode))
|
|
96
|
+
profile.memory = { mode: how.memory.mode };
|
|
97
|
+
if (shown("phases") && Array.isArray(how.phases)) {
|
|
98
|
+
const phases = phasesFromHow(how.phases);
|
|
99
|
+
if (phases.length) profile.phases = phases;
|
|
100
|
+
}
|
|
101
|
+
return profile;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Normalize a constraint (a single condition or an AND-array of conditions) to a
|
|
106
|
+
* plain array. A missing constraint yields an empty list, which every predicate
|
|
107
|
+
* below treats as vacuously satisfied.
|
|
108
|
+
*/
|
|
109
|
+
function conditionList(constraint) {
|
|
110
|
+
if (!constraint) return [];
|
|
111
|
+
return Array.isArray(constraint) ? constraint : [constraint];
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Does one condition hold against the current How values? `{ key, in: [...] }`
|
|
116
|
+
* matches when the field's value is one of the listed values; otherwise
|
|
117
|
+
* `{ key, equals }` matches on strict equality.
|
|
118
|
+
*/
|
|
119
|
+
function conditionHolds(condition, how) {
|
|
120
|
+
const value = how[condition.key];
|
|
121
|
+
if (Array.isArray(condition.in)) return condition.in.some((option) => option === value);
|
|
122
|
+
return value === condition.equals;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/** Human phrase for one condition, used to explain why a field is disabled. */
|
|
126
|
+
function conditionPhrase(condition) {
|
|
127
|
+
if (Array.isArray(condition.in)) return `${condition.key} in ${condition.in.join(", ")}`;
|
|
128
|
+
return `${condition.key} = ${condition.equals}`;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Pure, data-driven field-dependency evaluator. Given a schema field and the
|
|
133
|
+
* current How values it decides whether the field is visible / enabled and, when
|
|
134
|
+
* disabled, a short English reason. Constraints are declared on the field as
|
|
135
|
+
* data — the engine never special-cases a field key:
|
|
136
|
+
* showWhen — all conditions must hold, else the field is HIDDEN
|
|
137
|
+
* (a legacy `visibleIf` is honored as showWhen, unchanged).
|
|
138
|
+
* requires — all conditions must hold, else the field is visible but DISABLED.
|
|
139
|
+
* conflicts — if all conditions hold, the field is visible but DISABLED.
|
|
140
|
+
* A constraint is a single condition or an AND-array; a condition is
|
|
141
|
+
* `{ key, equals }` or `{ key, in: [...] }`.
|
|
142
|
+
* @returns {{ visible: boolean, disabled: boolean, reason: string }}
|
|
143
|
+
*/
|
|
144
|
+
export function evaluateField(field, how) {
|
|
145
|
+
const showWhen = field.showWhen || field.visibleIf;
|
|
146
|
+
const visible = conditionList(showWhen).every((condition) => conditionHolds(condition, how));
|
|
147
|
+
|
|
148
|
+
const unmet = conditionList(field.requires).filter((c) => !conditionHolds(c, how));
|
|
149
|
+
if (unmet.length)
|
|
150
|
+
return {
|
|
151
|
+
visible,
|
|
152
|
+
disabled: true,
|
|
153
|
+
reason: `Requires ${unmet.map(conditionPhrase).join(" and ")}`,
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
const conflicts = conditionList(field.conflicts);
|
|
157
|
+
if (conflicts.length && conflicts.every((c) => conditionHolds(c, how)))
|
|
158
|
+
return {
|
|
159
|
+
visible,
|
|
160
|
+
disabled: true,
|
|
161
|
+
reason: `Conflicts with ${conflicts.map(conditionPhrase).join(" and ")}`,
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
return { visible, disabled: false, reason: "" };
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
export function useBuilder(dependencies = {}) {
|
|
168
|
+
const apiClient = dependencies.api || api;
|
|
169
|
+
const timers = dependencies.timers || globalThis;
|
|
170
|
+
const previewDebounceMs = dependencies.previewDebounceMs || PREVIEW_DEBOUNCE_MS;
|
|
171
|
+
|
|
172
|
+
const draft = reactive({
|
|
173
|
+
title: "",
|
|
174
|
+
description: "",
|
|
175
|
+
acceptance: "",
|
|
176
|
+
laneGroupId: null,
|
|
177
|
+
priority: 0,
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
const lanes = ref([]);
|
|
181
|
+
const profiles = ref({});
|
|
182
|
+
const submitting = ref(false);
|
|
183
|
+
const error = ref(null);
|
|
184
|
+
// How-step schema + presets (additive; from schema/policy.js via the seam).
|
|
185
|
+
const policySchema = ref([]);
|
|
186
|
+
const presets = ref([]);
|
|
187
|
+
// "Save as profile" state: savedName is the last persisted name (empty until a
|
|
188
|
+
// save succeeds), error is the last failure message (empty on success). Both
|
|
189
|
+
// are empty strings, never null, and drive the builder's save-button feedback.
|
|
190
|
+
const profileSave = reactive({ saving: false, savedName: "", error: "" });
|
|
191
|
+
|
|
192
|
+
// Live compiled-policy preview: { text, loading, error } recomputed DEBOUNCED
|
|
193
|
+
// whenever the draft (WHAT fields) or the profile (HOW fields, fed by the view
|
|
194
|
+
// via setPreviewProfile) changes. text is the REAL server-rendered briefing.
|
|
195
|
+
const preview = reactive({ text: "", loading: false, error: null });
|
|
196
|
+
let previewProfile = {};
|
|
197
|
+
let previewTimer = null;
|
|
198
|
+
// Bumped every time a compile actually fires; a late response whose generation
|
|
199
|
+
// is stale (a newer draft superseded it) must not overwrite the newer preview.
|
|
200
|
+
let previewGen = 0;
|
|
201
|
+
|
|
202
|
+
function buildPreviewDraft() {
|
|
203
|
+
return {
|
|
204
|
+
title: draft.title,
|
|
205
|
+
description: draft.description,
|
|
206
|
+
acceptance: draft.acceptance,
|
|
207
|
+
priority: Number(draft.priority) || 0,
|
|
208
|
+
...(draft.laneGroupId != null ? { laneGroupId: Number(draft.laneGroupId) } : {}),
|
|
209
|
+
profile: previewProfile,
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
async function runPreview() {
|
|
214
|
+
const gen = ++previewGen;
|
|
215
|
+
preview.loading = true;
|
|
216
|
+
try {
|
|
217
|
+
const text = await apiClient.previewBriefing(buildPreviewDraft());
|
|
218
|
+
if (gen !== previewGen) return; // a newer draft already superseded this compile
|
|
219
|
+
preview.text = text;
|
|
220
|
+
preview.error = null;
|
|
221
|
+
} catch (e) {
|
|
222
|
+
if (gen !== previewGen) return;
|
|
223
|
+
preview.error = (e && e.message) || String(e);
|
|
224
|
+
} finally {
|
|
225
|
+
if (gen === previewGen) preview.loading = false;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
function schedulePreview() {
|
|
230
|
+
if (previewTimer) timers.clearTimeout(previewTimer);
|
|
231
|
+
previewTimer = timers.setTimeout(runPreview, previewDebounceMs);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// Any WHAT-field edit reschedules the debounced compile; the view pushes HOW
|
|
235
|
+
// edits through setPreviewProfile (below), which also reschedules.
|
|
236
|
+
const stopPreviewWatch = watch(draft, schedulePreview, { deep: true });
|
|
237
|
+
|
|
238
|
+
/** View seam: feed the current HOW-derived ExecutionProfile into the preview. */
|
|
239
|
+
function setPreviewProfile(profile) {
|
|
240
|
+
previewProfile = profile;
|
|
241
|
+
schedulePreview();
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/** Cancel the pending compile and invalidate any in-flight response. */
|
|
245
|
+
function stopPreview() {
|
|
246
|
+
previewGen += 1;
|
|
247
|
+
if (previewTimer) timers.clearTimeout(previewTimer);
|
|
248
|
+
previewTimer = null;
|
|
249
|
+
stopPreviewWatch();
|
|
250
|
+
}
|
|
251
|
+
onUnmounted(stopPreview);
|
|
252
|
+
|
|
253
|
+
async function load() {
|
|
254
|
+
try {
|
|
255
|
+
const [l, p] = await Promise.all([apiClient.listLaneGroups(), apiClient.getProfiles()]);
|
|
256
|
+
lanes.value = l;
|
|
257
|
+
profiles.value = Object.fromEntries(p.map((profile) => [profile.id, profile.profile]));
|
|
258
|
+
if (draft.laneGroupId == null && l.length) draft.laneGroupId = l[0].groupId;
|
|
259
|
+
} catch (e) {
|
|
260
|
+
error.value = (e && e.message) || String(e);
|
|
261
|
+
}
|
|
262
|
+
// Additive, non-fatal: the schema-driven How controls. In production the real
|
|
263
|
+
// API loading remains non-fatal — degrade to a
|
|
264
|
+
// schema-less builder rather than failing the whole load.
|
|
265
|
+
try {
|
|
266
|
+
const [schema, ps] = await Promise.all([apiClient.getPolicySchema(), apiClient.getPresets()]);
|
|
267
|
+
policySchema.value = schema;
|
|
268
|
+
presets.value = ps;
|
|
269
|
+
} catch {
|
|
270
|
+
/* schema/presets unavailable — builder still renders the WHAT step */
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
function reset() {
|
|
275
|
+
Object.assign(draft, {
|
|
276
|
+
title: "",
|
|
277
|
+
description: "",
|
|
278
|
+
acceptance: "",
|
|
279
|
+
priority: 0,
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/** @returns {Promise<import('../api/contract.js').BoardCard|null>} */
|
|
284
|
+
/** @returns {Promise<import('../api/contract.js').BoardCard|null>} */
|
|
285
|
+
async function submit(how = {}, recurDelayMin = null) {
|
|
286
|
+
error.value = null;
|
|
287
|
+
if (!draft.title.trim()) {
|
|
288
|
+
error.value = "Title is required";
|
|
289
|
+
return null;
|
|
290
|
+
}
|
|
291
|
+
submitting.value = true;
|
|
292
|
+
try {
|
|
293
|
+
return await apiClient.createCard({
|
|
294
|
+
title: draft.title.trim(),
|
|
295
|
+
description: draft.description,
|
|
296
|
+
acceptance: draft.acceptance,
|
|
297
|
+
...(draft.laneGroupId != null ? { laneGroupId: Number(draft.laneGroupId) } : {}),
|
|
298
|
+
priority: Number(draft.priority) || 0,
|
|
299
|
+
profile: profileFromHow(how, policySchema.value),
|
|
300
|
+
...(recurDelayMin != null ? { recurDelayMin } : {}),
|
|
301
|
+
correlationId: crypto.randomUUID(),
|
|
302
|
+
});
|
|
303
|
+
} catch (e) {
|
|
304
|
+
error.value = (e && e.message) || String(e);
|
|
305
|
+
return null;
|
|
306
|
+
} finally {
|
|
307
|
+
submitting.value = false;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
/**
|
|
312
|
+
* Persist the current How draft as a named execution profile. Slugifies the
|
|
313
|
+
* name into the id, builds the profile the same way submit() does, and merges
|
|
314
|
+
* the saved profile back into profiles.value so it is immediately available.
|
|
315
|
+
* A blank name is a no-op; a failure (e.g. a duplicate name) surfaces on
|
|
316
|
+
* profileSave.error and leaves savedName untouched.
|
|
317
|
+
* @returns {Promise<void>}
|
|
318
|
+
*/
|
|
319
|
+
async function saveProfile(name, how = {}) {
|
|
320
|
+
const trimmed = (name || "").trim();
|
|
321
|
+
if (!trimmed) return;
|
|
322
|
+
profileSave.saving = true;
|
|
323
|
+
profileSave.error = "";
|
|
324
|
+
profileSave.savedName = "";
|
|
325
|
+
try {
|
|
326
|
+
const saved = await apiClient.saveProfile({
|
|
327
|
+
id: slugifyProfileName(trimmed),
|
|
328
|
+
name: trimmed,
|
|
329
|
+
profile: profileFromHow(how, policySchema.value),
|
|
330
|
+
});
|
|
331
|
+
profiles.value = { ...profiles.value, [saved.id]: saved.profile };
|
|
332
|
+
profileSave.savedName = saved.name;
|
|
333
|
+
} catch (e) {
|
|
334
|
+
profileSave.error = (e && e.message) || String(e);
|
|
335
|
+
} finally {
|
|
336
|
+
profileSave.saving = false;
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
return {
|
|
341
|
+
draft,
|
|
342
|
+
lanes,
|
|
343
|
+
profiles,
|
|
344
|
+
policySchema,
|
|
345
|
+
presets,
|
|
346
|
+
submitting,
|
|
347
|
+
error,
|
|
348
|
+
load,
|
|
349
|
+
reset,
|
|
350
|
+
submit,
|
|
351
|
+
preview,
|
|
352
|
+
setPreviewProfile,
|
|
353
|
+
stopPreview,
|
|
354
|
+
profileSave,
|
|
355
|
+
saveProfile,
|
|
356
|
+
};
|
|
357
|
+
}
|