@opengsd/gsd-pi 1.2.0-dev.0b870afa → 1.2.0-dev.23d85b63
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/dist/cli-model-override.d.ts +15 -0
- package/dist/cli-model-override.js +21 -0
- package/dist/cli.js +14 -19
- package/dist/headless-events.d.ts +16 -1
- package/dist/headless-events.js +19 -2
- package/dist/headless.js +8 -1
- package/dist/loader.js +6 -4
- package/dist/onboarding.js +9 -4
- package/dist/provider-migrations.d.ts +23 -0
- package/dist/provider-migrations.js +41 -0
- package/dist/register-agent-bundles.d.ts +11 -2
- package/dist/register-agent-bundles.js +18 -4
- package/dist/resource-loader.d.ts +10 -5
- package/dist/resource-loader.js +121 -6
- package/dist/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/extensions/ask-user-questions.js +3 -2
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +447 -215
- package/dist/resources/extensions/claude-code-cli/turn-assembler.js +33 -1
- package/dist/resources/extensions/google-cli/stream-adapter.js +16 -1
- package/dist/resources/extensions/gsd/auto/closeout.js +215 -0
- package/dist/resources/extensions/gsd/auto/dispatch-history.js +21 -6
- package/dist/resources/extensions/gsd/auto/dispatch.js +365 -0
- package/dist/resources/extensions/gsd/auto/finalize.js +347 -0
- package/dist/resources/extensions/gsd/auto/loop.js +4 -1
- package/dist/resources/extensions/gsd/auto/milestone-lease-reclaim.js +56 -0
- package/dist/resources/extensions/gsd/auto/orchestrator.js +119 -18
- package/dist/resources/extensions/gsd/auto/phase-helpers.js +146 -0
- package/dist/resources/extensions/gsd/auto/phases.js +17 -2372
- package/dist/resources/extensions/gsd/auto/pre-dispatch.js +542 -0
- package/dist/resources/extensions/gsd/auto/unit-phase.js +694 -0
- package/dist/resources/extensions/gsd/auto/workflow-unit-dispatch.js +1 -1
- package/dist/resources/extensions/gsd/auto/worktree-safety-phase.js +125 -0
- package/dist/resources/extensions/gsd/auto-closeout-messaging.js +90 -0
- package/dist/resources/extensions/gsd/auto-dashboard.js +255 -431
- package/dist/resources/extensions/gsd/auto-direct-dispatch.js +15 -3
- package/dist/resources/extensions/gsd/auto-dispatch.js +19 -1
- package/dist/resources/extensions/gsd/auto-model-selection.js +9 -6
- package/dist/resources/extensions/gsd/auto-post-unit.js +12 -8
- package/dist/resources/extensions/gsd/auto-prompts.js +5 -1
- package/dist/resources/extensions/gsd/auto-recovery.js +52 -6
- package/dist/resources/extensions/gsd/auto-start.js +28 -7
- package/dist/resources/extensions/gsd/auto-worktree.js +48 -3
- package/dist/resources/extensions/gsd/auto.js +83 -19
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +4 -2
- package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +37 -7
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +3 -1
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +32 -3
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +56 -16
- package/dist/resources/extensions/gsd/closeout-wizard.js +8 -3
- package/dist/resources/extensions/gsd/commands/handlers/core.js +22 -8
- package/dist/resources/extensions/gsd/commands/handlers/ops.js +2 -2
- package/dist/resources/extensions/gsd/commands-mcp-status.js +2 -2
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +8 -0
- package/dist/resources/extensions/gsd/commands-workflow-templates.js +9 -2
- package/dist/resources/extensions/gsd/config-overlay.js +11 -8
- package/dist/resources/extensions/gsd/db/engine.js +24 -6
- package/dist/resources/extensions/gsd/db/queries.js +30 -0
- package/dist/resources/extensions/gsd/db/writers/reconcile.js +19 -1
- package/dist/resources/extensions/gsd/db-migration-backup.js +51 -8
- package/dist/resources/extensions/gsd/db-transaction.js +27 -23
- package/dist/resources/extensions/gsd/db-writer.js +8 -17
- package/dist/resources/extensions/gsd/doctor-environment.js +256 -125
- package/dist/resources/extensions/gsd/doctor-git-checks.js +5 -1
- package/dist/resources/extensions/gsd/doctor-providers.js +1 -1
- package/dist/resources/extensions/gsd/doctor-runtime-checks.js +11 -9
- package/dist/resources/extensions/gsd/gsd-db.js +15 -20
- package/dist/resources/extensions/gsd/guided-flow.js +88 -2
- package/dist/resources/extensions/gsd/health-widget.js +87 -28
- package/dist/resources/extensions/gsd/mcp-bridge.js +10 -0
- package/dist/resources/extensions/gsd/memory-relations.js +1 -1
- package/dist/resources/extensions/gsd/milestone-settlement.js +2 -2
- package/dist/resources/extensions/gsd/notifications.js +12 -7
- package/dist/resources/extensions/gsd/preferences-models.js +17 -9
- package/dist/resources/extensions/gsd/preferences.js +91 -5
- package/dist/resources/extensions/gsd/prompts/complete-milestone.md +8 -2
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +6 -2
- package/dist/resources/extensions/gsd/prompts/execute-task.md +7 -2
- package/dist/resources/extensions/gsd/prompts/quick-task.md +1 -1
- package/dist/resources/extensions/gsd/prompts/reactive-execute.md +2 -2
- package/dist/resources/extensions/gsd/prompts/run-uat.md +7 -1
- package/dist/resources/extensions/gsd/prompts/triage-captures.md +1 -1
- package/dist/resources/extensions/gsd/prompts/workflow-start.md +2 -1
- package/dist/resources/extensions/gsd/provider-error-guidance.js +24 -0
- package/dist/resources/extensions/gsd/session-lock.js +4 -3
- package/dist/resources/extensions/gsd/skill-activation.js +3 -6
- package/dist/resources/extensions/gsd/state-reconciliation/drift/artifact-db.js +13 -6
- package/dist/resources/extensions/gsd/state.js +6 -2
- package/dist/resources/extensions/gsd/tool-surface-readiness.js +83 -31
- package/dist/resources/extensions/gsd/tools/complete-task.js +62 -0
- package/dist/resources/extensions/gsd/tools/exec-tool.js +2 -109
- package/dist/resources/extensions/gsd/tui/render-kit.js +38 -13
- package/dist/resources/extensions/gsd/unit-context-composer.js +1 -1
- package/dist/resources/extensions/gsd/unit-registry.js +34 -4
- package/dist/resources/extensions/gsd/workflow-logger.js +4 -0
- package/dist/resources/extensions/gsd/workflow-mcp-auto-prep.js +2 -0
- package/dist/resources/extensions/gsd/workflow-mcp-readiness-cache.js +105 -0
- package/dist/resources/extensions/gsd/worktree-manager.js +101 -2
- package/dist/resources/extensions/gsd/worktree-safety.js +28 -26
- package/dist/resources/extensions/gsd/worktree-shell-guard.js +113 -0
- package/dist/resources/extensions/gsd/worktree.js +8 -1
- package/dist/resources/extensions/mcp-client/manager.js +6 -1
- package/dist/resources/extensions/search-the-web/index.js +41 -9
- package/dist/resources/extensions/search-the-web/native-search.js +18 -4
- package/dist/resources/extensions/shared/gsd-browser-cli.js +40 -2
- package/dist/resources/extensions/subagent/index.js +20 -15
- package/dist/resources/extensions/subagent/worktree-cwd.js +31 -0
- package/dist/resources/skills/create-skill/SKILL.md +3 -0
- package/dist/resources/skills/create-skill/references/skill-structure.md +1 -0
- package/dist/runtime-checks.d.ts +10 -0
- package/dist/runtime-checks.js +27 -0
- package/dist/tsconfig.extensions.tsbuildinfo +1 -1
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +10 -10
- package/dist/web/standalone/.next/build-manifest.json +2 -2
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/mcp-connections/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +10 -10
- package/dist/web/standalone/.next/server/chunks/{5942.js → 1128.js} +1 -1
- package/dist/web/standalone/.next/server/chunks/8357.js +1 -1
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/.next/server/pages/500.html +1 -1
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/web/standalone/node_modules/node-pty/build/Makefile +1 -1
- package/package.json +4 -4
- package/packages/cloud-mcp-gateway/package.json +2 -2
- package/packages/contracts/package.json +1 -1
- package/packages/daemon/package.json +4 -4
- package/packages/gsd-agent-core/dist/sdk.d.ts.map +1 -1
- package/packages/gsd-agent-core/dist/sdk.js +12 -6
- package/packages/gsd-agent-core/dist/sdk.js.map +1 -1
- package/packages/gsd-agent-core/package.json +5 -5
- package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts +5 -5
- package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js +12 -24
- package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.js +5 -5
- package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.d.ts +3 -3
- package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.js +20 -11
- package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-turn-connect.d.ts +4 -3
- package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-turn-connect.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-turn-connect.js +5 -54
- package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-turn-connect.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.d.ts +2 -4
- package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.js +2 -4
- package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.d.ts +2 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.js +4 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.d.ts +9 -12
- package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.js +100 -166
- package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-progress-state.d.ts +2 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-progress-state.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-progress-state.js +4 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-progress-state.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-status-widget.d.ts +23 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-status-widget.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-status-widget.js +178 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-status-widget.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.d.ts +8 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.js +21 -9
- package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.d.ts +2 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.js +10 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.d.ts +2 -3
- package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.js +2 -3
- package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts +11 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js +85 -19
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.d.ts +71 -3
- package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.js +257 -37
- package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.d.ts +3 -3
- package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.js +19 -19
- package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts +3 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js +26 -10
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.js +12 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js +5 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-autocomplete.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-autocomplete.js +3 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.js +3 -5
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-dialogs.js +2 -2
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-dialogs.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.d.ts +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.js +25 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-key-handlers.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-key-handlers.js +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-key-handlers.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-init.d.ts +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-init.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-init.js +20 -49
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-init.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts +4 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts +10 -2
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js +48 -6
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-settings.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-settings.js +4 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-settings.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-ui-messaging.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-ui-messaging.js +0 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-ui-messaging.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js +3 -0
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/packages/gsd-agent-modes/package.json +7 -7
- package/packages/mcp-server/README.md +12 -3
- package/packages/mcp-server/dist/cli-runner.d.ts +40 -0
- package/packages/mcp-server/dist/cli-runner.d.ts.map +1 -0
- package/packages/mcp-server/dist/cli-runner.js +137 -0
- package/packages/mcp-server/dist/cli-runner.js.map +1 -0
- package/packages/mcp-server/dist/cli.js +2 -58
- package/packages/mcp-server/dist/cli.js.map +1 -1
- package/packages/mcp-server/dist/pid-registry.d.ts +46 -0
- package/packages/mcp-server/dist/pid-registry.d.ts.map +1 -0
- package/packages/mcp-server/dist/pid-registry.js +459 -0
- package/packages/mcp-server/dist/pid-registry.js.map +1 -0
- package/packages/mcp-server/dist/probe-mode.d.ts +4 -0
- package/packages/mcp-server/dist/probe-mode.d.ts.map +1 -0
- package/packages/mcp-server/dist/probe-mode.js +10 -0
- package/packages/mcp-server/dist/probe-mode.js.map +1 -0
- package/packages/mcp-server/dist/stdio-watchdog.d.ts +8 -0
- package/packages/mcp-server/dist/stdio-watchdog.d.ts.map +1 -0
- package/packages/mcp-server/dist/stdio-watchdog.js +40 -0
- package/packages/mcp-server/dist/stdio-watchdog.js.map +1 -0
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +62 -43
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/package.json +5 -5
- package/packages/native/package.json +1 -1
- package/packages/pi-agent-core/dist/agent-loop.js +52 -2
- package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/packages/pi-agent-core/package.json +1 -1
- package/packages/pi-ai/package.json +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-upstream-types.d.ts +28 -2
- package/packages/pi-coding-agent/dist/core/extensions/extension-upstream-types.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-upstream-types.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +5 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.js +3 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +3 -0
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.js +11 -0
- package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/theme/theme.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/theme/theme.js +45 -17
- package/packages/pi-coding-agent/dist/theme/theme.js.map +1 -1
- package/packages/pi-coding-agent/package.json +8 -8
- package/packages/pi-tui/README.md +15 -0
- package/packages/pi-tui/dist/autocomplete.d.ts.map +1 -1
- package/packages/pi-tui/dist/autocomplete.js +6 -1
- package/packages/pi-tui/dist/autocomplete.js.map +1 -1
- package/packages/pi-tui/dist/components/input.js +1 -1
- package/packages/pi-tui/dist/components/input.js.map +1 -1
- package/packages/pi-tui/dist/components/loader.d.ts.map +1 -1
- package/packages/pi-tui/dist/components/loader.js +1 -0
- package/packages/pi-tui/dist/components/loader.js.map +1 -1
- package/packages/pi-tui/dist/components/select-list.d.ts.map +1 -1
- package/packages/pi-tui/dist/components/select-list.js +8 -2
- package/packages/pi-tui/dist/components/select-list.js.map +1 -1
- package/packages/pi-tui/dist/index.d.ts +2 -2
- package/packages/pi-tui/dist/index.d.ts.map +1 -1
- package/packages/pi-tui/dist/index.js +2 -2
- package/packages/pi-tui/dist/index.js.map +1 -1
- package/packages/pi-tui/dist/terminal-image.d.ts +33 -0
- package/packages/pi-tui/dist/terminal-image.d.ts.map +1 -1
- package/packages/pi-tui/dist/terminal-image.js +54 -2
- package/packages/pi-tui/dist/terminal-image.js.map +1 -1
- package/packages/pi-tui/dist/terminal.d.ts +12 -0
- package/packages/pi-tui/dist/terminal.d.ts.map +1 -1
- package/packages/pi-tui/dist/terminal.js +70 -25
- package/packages/pi-tui/dist/terminal.js.map +1 -1
- package/packages/pi-tui/dist/tui.d.ts +15 -0
- package/packages/pi-tui/dist/tui.d.ts.map +1 -1
- package/packages/pi-tui/dist/tui.js +106 -21
- package/packages/pi-tui/dist/tui.js.map +1 -1
- package/packages/pi-tui/dist/utils.d.ts.map +1 -1
- package/packages/pi-tui/dist/utils.js +110 -36
- package/packages/pi-tui/dist/utils.js.map +1 -1
- package/packages/pi-tui/package.json +2 -2
- package/packages/rpc-client/package.json +2 -2
- package/pkg/dist/theme/theme.d.ts.map +1 -1
- package/pkg/dist/theme/theme.js +45 -17
- package/pkg/dist/theme/theme.js.map +1 -1
- package/pkg/package.json +1 -1
- package/src/resources/extensions/ask-user-questions.ts +7 -2
- package/src/resources/extensions/browser-tools/tests/gsd-browser-launch-config.test.mjs +80 -0
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +531 -226
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +672 -7
- package/src/resources/extensions/claude-code-cli/turn-assembler.ts +38 -1
- package/src/resources/extensions/google-cli/stream-adapter.ts +22 -1
- package/src/resources/extensions/gsd/auto/closeout.ts +309 -0
- package/src/resources/extensions/gsd/auto/dispatch-history.ts +22 -6
- package/src/resources/extensions/gsd/auto/dispatch.ts +449 -0
- package/src/resources/extensions/gsd/auto/finalize.ts +445 -0
- package/src/resources/extensions/gsd/auto/loop.ts +4 -1
- package/src/resources/extensions/gsd/auto/milestone-lease-reclaim.ts +74 -0
- package/src/resources/extensions/gsd/auto/orchestrator.ts +140 -18
- package/src/resources/extensions/gsd/auto/phase-helpers.ts +199 -0
- package/src/resources/extensions/gsd/auto/phases.ts +58 -3061
- package/src/resources/extensions/gsd/auto/pre-dispatch.ts +716 -0
- package/src/resources/extensions/gsd/auto/unit-phase.ts +910 -0
- package/src/resources/extensions/gsd/auto/workflow-unit-dispatch.ts +1 -1
- package/src/resources/extensions/gsd/auto/worktree-safety-phase.ts +149 -0
- package/src/resources/extensions/gsd/auto-closeout-messaging.ts +90 -0
- package/src/resources/extensions/gsd/auto-dashboard.ts +310 -454
- package/src/resources/extensions/gsd/auto-direct-dispatch.ts +15 -2
- package/src/resources/extensions/gsd/auto-dispatch.ts +24 -2
- package/src/resources/extensions/gsd/auto-model-selection.ts +20 -5
- package/src/resources/extensions/gsd/auto-post-unit.ts +16 -9
- package/src/resources/extensions/gsd/auto-prompts.ts +5 -1
- package/src/resources/extensions/gsd/auto-recovery.ts +62 -8
- package/src/resources/extensions/gsd/auto-start.ts +44 -7
- package/src/resources/extensions/gsd/auto-worktree.ts +51 -3
- package/src/resources/extensions/gsd/auto.ts +118 -18
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +6 -2
- package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +56 -6
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +2 -1
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +36 -3
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +69 -16
- package/src/resources/extensions/gsd/closeout-wizard.ts +11 -2
- package/src/resources/extensions/gsd/commands/handlers/core.ts +27 -8
- package/src/resources/extensions/gsd/commands/handlers/ops.ts +5 -2
- package/src/resources/extensions/gsd/commands-mcp-status.ts +2 -2
- package/src/resources/extensions/gsd/commands-prefs-wizard.ts +7 -0
- package/src/resources/extensions/gsd/commands-workflow-templates.ts +11 -4
- package/src/resources/extensions/gsd/config-overlay.ts +22 -9
- package/src/resources/extensions/gsd/db/engine.ts +26 -6
- package/src/resources/extensions/gsd/db/queries.ts +29 -0
- package/src/resources/extensions/gsd/db/writers/reconcile.ts +24 -1
- package/src/resources/extensions/gsd/db-migration-backup.ts +56 -7
- package/src/resources/extensions/gsd/db-transaction.ts +37 -20
- package/src/resources/extensions/gsd/db-writer.ts +11 -19
- package/src/resources/extensions/gsd/doctor-environment.ts +267 -142
- package/src/resources/extensions/gsd/doctor-git-checks.ts +4 -1
- package/src/resources/extensions/gsd/doctor-providers.ts +1 -1
- package/src/resources/extensions/gsd/doctor-runtime-checks.ts +10 -10
- package/src/resources/extensions/gsd/gsd-db.ts +15 -19
- package/src/resources/extensions/gsd/guided-flow.ts +128 -2
- package/src/resources/extensions/gsd/health-widget.ts +91 -27
- package/src/resources/extensions/gsd/mcp-bridge.ts +39 -0
- package/src/resources/extensions/gsd/memory-relations.ts +1 -1
- package/src/resources/extensions/gsd/milestone-settlement.ts +2 -2
- package/src/resources/extensions/gsd/notifications.ts +13 -6
- package/src/resources/extensions/gsd/preferences-models.ts +26 -8
- package/src/resources/extensions/gsd/preferences.ts +111 -5
- package/src/resources/extensions/gsd/prompts/complete-milestone.md +8 -2
- package/src/resources/extensions/gsd/prompts/complete-slice.md +6 -2
- package/src/resources/extensions/gsd/prompts/execute-task.md +7 -2
- package/src/resources/extensions/gsd/prompts/quick-task.md +1 -1
- package/src/resources/extensions/gsd/prompts/reactive-execute.md +2 -2
- package/src/resources/extensions/gsd/prompts/run-uat.md +7 -1
- package/src/resources/extensions/gsd/prompts/triage-captures.md +1 -1
- package/src/resources/extensions/gsd/prompts/workflow-start.md +2 -1
- package/src/resources/extensions/gsd/provider-error-guidance.ts +32 -0
- package/src/resources/extensions/gsd/session-lock.ts +8 -7
- package/src/resources/extensions/gsd/skill-activation.ts +3 -6
- package/src/resources/extensions/gsd/state-reconciliation/drift/artifact-db.ts +23 -10
- package/src/resources/extensions/gsd/state.ts +7 -1
- package/src/resources/extensions/gsd/tests/auto-abort-pause-regression.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-blocked-remediation-message.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-closeout-messaging.test.ts +71 -0
- package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +68 -116
- package/src/resources/extensions/gsd/tests/auto-direct-dispatch-parse.test.ts +33 -0
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +206 -22
- package/src/resources/extensions/gsd/tests/auto-model-selection-tool-poisoning.test.ts +7 -2
- package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +16 -1
- package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +89 -22
- package/src/resources/extensions/gsd/tests/auto-pause-double-entry-guard.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +97 -4
- package/src/resources/extensions/gsd/tests/auto-phases-lifecycle.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/auto-start-orphan-bootstrap.test.ts +236 -0
- package/src/resources/extensions/gsd/tests/auto-unit-closeout.test.ts +169 -1
- package/src/resources/extensions/gsd/tests/auto-verification.test.ts +36 -0
- package/src/resources/extensions/gsd/tests/blocker-placeholder-logs.test.ts +218 -0
- package/src/resources/extensions/gsd/tests/complete-milestone-prompt-rendering.test.ts +6 -2
- package/src/resources/extensions/gsd/tests/complete-task.test.ts +141 -5
- package/src/resources/extensions/gsd/tests/core-overlay-fallback.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/db-engine-logs.test.ts +207 -0
- package/src/resources/extensions/gsd/tests/db-migration-backup.test.ts +68 -19
- package/src/resources/extensions/gsd/tests/db-transaction.test.ts +59 -0
- package/src/resources/extensions/gsd/tests/db-writer.test.ts +15 -4
- package/src/resources/extensions/gsd/tests/deep-project-auto-loop.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/derive-state-helpers.test.ts +62 -0
- package/src/resources/extensions/gsd/tests/discuss-routing-fixes.test.ts +12 -2
- package/src/resources/extensions/gsd/tests/dispatch-db-degradation-logs.test.ts +98 -0
- package/src/resources/extensions/gsd/tests/dispatch-history.test.ts +55 -0
- package/src/resources/extensions/gsd/tests/dispatch-logs.test.ts +103 -0
- package/src/resources/extensions/gsd/tests/dispatch-reactive-logs.test.ts +98 -0
- package/src/resources/extensions/gsd/tests/dist-redirect.mjs +8 -0
- package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +6 -4
- package/src/resources/extensions/gsd/tests/engine-interfaces-contract.test.ts +117 -91
- package/src/resources/extensions/gsd/tests/ensure-db-open.test.ts +113 -0
- package/src/resources/extensions/gsd/tests/flat-rate-routing-guard.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/gsd-command-home.test.ts +40 -7
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +19 -0
- package/src/resources/extensions/gsd/tests/guided-dispatch-root.test.ts +16 -0
- package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +75 -0
- package/src/resources/extensions/gsd/tests/integration/auto-worktree.test.ts +15 -0
- package/src/resources/extensions/gsd/tests/integration/doctor-environment-async.test.ts +104 -0
- package/src/resources/extensions/gsd/tests/integration/run-uat.test.ts +18 -0
- package/src/resources/extensions/gsd/tests/interactive-routing-bypass.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +47 -16
- package/src/resources/extensions/gsd/tests/loop.test.ts +60 -0
- package/src/resources/extensions/gsd/tests/mcp-readiness-preflight.test.ts +205 -0
- package/src/resources/extensions/gsd/tests/mcp-status.test.ts +6 -5
- package/src/resources/extensions/gsd/tests/milestone-merge-stash-restore.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/milestone-report-path.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/milestone-settlement.test.ts +92 -0
- package/src/resources/extensions/gsd/tests/milestone-transition-state-rebuild.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/model-router.test.ts +139 -0
- package/src/resources/extensions/gsd/tests/notifications.test.ts +64 -9
- package/src/resources/extensions/gsd/tests/oauth-api-model-routing.test.ts +13 -1
- package/src/resources/extensions/gsd/tests/orchestrator-legacy-parity.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/orchestrator-logs.test.ts +335 -0
- package/src/resources/extensions/gsd/tests/parallel-skill-prompt-integration.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/parsers-legacy-importers.test.ts +5 -0
- package/src/resources/extensions/gsd/tests/phases-merge-error-stops-auto.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/phases-terminal-complete-idempotent.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/plan-gate-failed-doctor-heal-hint.test.ts +3 -3
- package/src/resources/extensions/gsd/tests/prefs-missing-models-crash.test.ts +35 -4
- package/src/resources/extensions/gsd/tests/progress-strip-test-helpers.ts +79 -0
- package/src/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +2 -0
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +11 -2
- package/src/resources/extensions/gsd/tests/provider-error-guidance.test.ts +15 -0
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +2 -4
- package/src/resources/extensions/gsd/tests/reconcile-logs.test.ts +244 -0
- package/src/resources/extensions/gsd/tests/recovery-finalize-logs.test.ts +119 -0
- package/src/resources/extensions/gsd/tests/recovery-verify-logs.test.ts +428 -0
- package/src/resources/extensions/gsd/tests/register-extension-guard.test.ts +25 -0
- package/src/resources/extensions/gsd/tests/remote-notification-from-desktop.test.ts +31 -81
- package/src/resources/extensions/gsd/tests/resume-missing-worktree-warning.test.ts +5 -5
- package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +7 -1
- package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +68 -0
- package/src/resources/extensions/gsd/tests/show-config-command.test.ts +3 -0
- package/src/resources/extensions/gsd/tests/single-writer-invariant.test.ts +170 -48
- package/src/resources/extensions/gsd/tests/skill-activation.test.ts +20 -17
- package/src/resources/extensions/gsd/tests/start-auto-detached.test.ts +7 -3
- package/src/resources/extensions/gsd/tests/state-reconciliation-drift.test.ts +17 -1
- package/src/resources/extensions/gsd/tests/stop-auto-race-null-unit.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/teardown-chdir-failure-clears-registry.test.ts +17 -0
- package/src/resources/extensions/gsd/tests/thinking-level-resolution.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/token-tool-gating.test.ts +4 -2
- package/src/resources/extensions/gsd/tests/tool-surface-readiness.test.ts +184 -10
- package/src/resources/extensions/gsd/tests/tui-header-lifecycle.test.ts +40 -86
- package/src/resources/extensions/gsd/tests/tui-render-kit.test.ts +44 -6
- package/src/resources/extensions/gsd/tests/uok-audit.test.ts +194 -0
- package/src/resources/extensions/gsd/tests/uok-plan-v2-wiring.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/workflow-mcp-readiness-cache.test.ts +119 -0
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +65 -2
- package/src/resources/extensions/gsd/tests/workflow-phase-contract-matrix.test.ts +332 -0
- package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +92 -0
- package/src/resources/extensions/gsd/tests/worktree-health-dispatch.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/worktree-manager.test.ts +36 -0
- package/src/resources/extensions/gsd/tests/worktree-project-root-degrade.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/worktree-safety-phase.test.ts +100 -0
- package/src/resources/extensions/gsd/tests/worktree-safety.test.ts +72 -0
- package/src/resources/extensions/gsd/tests/worktree-teardown-safety.test.ts +22 -0
- package/src/resources/extensions/gsd/tests/worktree-write-gate.test.ts +75 -3
- package/src/resources/extensions/gsd/tests/worktree.test.ts +18 -0
- package/src/resources/extensions/gsd/tool-surface-readiness.ts +126 -19
- package/src/resources/extensions/gsd/tools/complete-task.ts +87 -0
- package/src/resources/extensions/gsd/tools/exec-tool.ts +2 -118
- package/src/resources/extensions/gsd/tui/render-kit.ts +56 -13
- package/src/resources/extensions/gsd/unit-context-composer.ts +1 -1
- package/src/resources/extensions/gsd/unit-registry.ts +34 -4
- package/src/resources/extensions/gsd/workflow-logger.ts +5 -0
- package/src/resources/extensions/gsd/workflow-mcp-auto-prep.ts +2 -0
- package/src/resources/extensions/gsd/workflow-mcp-readiness-cache.ts +150 -0
- package/src/resources/extensions/gsd/worktree-manager.ts +97 -2
- package/src/resources/extensions/gsd/worktree-safety.ts +41 -39
- package/src/resources/extensions/gsd/worktree-shell-guard.ts +123 -0
- package/src/resources/extensions/gsd/worktree.ts +7 -1
- package/src/resources/extensions/mcp-client/manager.ts +7 -1
- package/src/resources/extensions/search-the-web/index.ts +45 -9
- package/src/resources/extensions/search-the-web/native-search.ts +16 -4
- package/src/resources/extensions/shared/gsd-browser-cli.ts +41 -2
- package/src/resources/extensions/subagent/index.ts +20 -15
- package/src/resources/extensions/subagent/tests/worktree-cwd.test.ts +57 -0
- package/src/resources/extensions/subagent/worktree-cwd.ts +35 -0
- package/src/resources/skills/create-skill/SKILL.md +3 -0
- package/src/resources/skills/create-skill/references/skill-structure.md +1 -0
- package/dist/resources/skills/gsd-browser/SKILL.md +0 -41
- package/src/resources/skills/gsd-browser/SKILL.md +0 -41
- /package/dist/web/standalone/.next/static/{T-LTxEw5wir5Lm5T3qEVd → Wn9u2NYq0cyUigB_3Z0_N}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{T-LTxEw5wir5Lm5T3qEVd → Wn9u2NYq0cyUigB_3Z0_N}/_ssgManifest.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pid-registry.js","sourceRoot":"","sources":["../src/pid-registry.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * MCP server PID registry — tracks running instances per project so new\n * launches can kill stale ones. Mirrors web-mode's web-instances.json pattern.\n */\n\nimport { execFileSync } from 'node:child_process';\nimport { readFileSync, writeFileSync, mkdirSync, renameSync } from 'node:fs';\nimport { homedir } from 'node:os';\nimport { dirname, join, resolve } from 'node:path';\n\nexport interface McpInstanceEntry {\n pid: number;\n projectDir: string;\n startedAt: string;\n}\n\nexport type McpInstanceRegistry = Record<string, McpInstanceEntry>;\n\nexport interface RegisterMcpInstanceOptions {\n kill?: (pid: number, signal?: NodeJS.Signals | 0) => void;\n getProcessCommand?: (pid: number) => string | null;\n getProcessCwd?: (pid: number) => string | null;\n getProcessStartTime?: (pid: number) => number | null;\n waitForExit?: () => void;\n}\n\nexport interface McpProcessSnapshot {\n pid: number;\n ppid: number;\n command: string;\n}\n\nexport interface SweepProjectOrphanMcpServersOptions {\n kill?: (pid: number, signal?: NodeJS.Signals | 0) => void;\n getProcessCwd?: (pid: number) => string | null;\n listProcesses?: () => McpProcessSnapshot[];\n isOrphaned?: (proc: McpProcessSnapshot) => boolean;\n waitForExit?: () => void;\n}\n\nexport interface SweepProjectOrphanMcpServersResult {\n matched: number[];\n terminated: number[];\n forceKilled: number[];\n skipped: number[];\n}\n\nconst REGISTRY_PATH = join(\n process.env.GSD_HOME || join(homedir(), '.gsd'),\n 'mcp-instances.json',\n);\n\n// A live PID is only treated as \"our\" stale server if its OS start time is no\n// later than the moment we recorded the registry entry (plus a small skew for\n// clock granularity / start-vs-register delay). A PID that started materially\n// later has been recycled by a different process and must not be signalled.\nconst STALE_PID_START_SKEW_MS = 60_000;\n\nexport function readMcpRegistry(registryPath = REGISTRY_PATH): McpInstanceRegistry {\n let raw: string;\n try {\n raw = readFileSync(registryPath, 'utf8');\n } catch (err) {\n // A missing file is the normal first-run case — start with an empty\n // registry silently. Any other read error is worth surfacing.\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') {\n process.stderr.write(\n `[gsd-mcp-server] failed to read MCP registry ${registryPath}: ${err instanceof Error ? err.message : String(err)}\\n`,\n );\n }\n return {};\n }\n\n try {\n const parsed = JSON.parse(raw) as unknown;\n if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {\n return parsed as McpInstanceRegistry;\n }\n throw new Error('registry is not a JSON object');\n } catch (err) {\n // The file exists but is unparseable. Returning {} here means the next\n // registerMcpInstance would overwrite the file and silently drop every\n // other project's entry. The corrupt bytes can't be recovered, but we\n // preserve them for forensics and warn loudly instead of dropping them\n // without a trace.\n const backup = `${registryPath}.corrupt-${Date.now()}`;\n try {\n renameSync(registryPath, backup);\n process.stderr.write(\n `[gsd-mcp-server] MCP registry ${registryPath} was corrupt (${err instanceof Error ? err.message : String(err)}); preserved as ${backup}\\n`,\n );\n } catch {\n process.stderr.write(\n `[gsd-mcp-server] MCP registry ${registryPath} was corrupt (${err instanceof Error ? err.message : String(err)}) and could not be preserved\\n`,\n );\n }\n return {};\n }\n}\n\nfunction writeMcpRegistry(registry: McpInstanceRegistry, registryPath = REGISTRY_PATH): void {\n mkdirSync(dirname(registryPath), { recursive: true });\n writeFileSync(registryPath, JSON.stringify(registry, null, 2), 'utf8');\n}\n\nfunction defaultGetProcessCommand(pid: number): string | null {\n try {\n if (process.platform === 'win32') {\n // `ps` does not exist on Windows; query the process command line via CIM\n // so stale same-project cleanup is not silently disabled there.\n const out = execFileSync(\n 'powershell.exe',\n [\n '-NoProfile',\n '-NonInteractive',\n '-Command',\n `(Get-CimInstance Win32_Process -Filter \"ProcessId=${pid}\").CommandLine`,\n ],\n { encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] },\n ).trim();\n return out || null;\n }\n const command = execFileSync('ps', ['-p', String(pid), '-o', 'command='], {\n encoding: 'utf8',\n stdio: ['ignore', 'pipe', 'ignore'],\n env: { ...process.env, LC_ALL: 'C' },\n }).trim();\n return command || null;\n } catch {\n return null;\n }\n}\n\nfunction defaultGetProcessStartTime(pid: number): number | null {\n try {\n if (process.platform === 'win32') {\n const out = execFileSync(\n 'powershell.exe',\n [\n '-NoProfile',\n '-NonInteractive',\n '-Command',\n `$p = Get-CimInstance Win32_Process -Filter \"ProcessId=${pid}\"; if ($p) { [int64](($p.CreationDate.ToUniversalTime() - [datetime]'1970-01-01T00:00:00Z').TotalMilliseconds) }`,\n ],\n { encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] },\n ).trim();\n const ms = Number(out);\n return Number.isFinite(ms) && ms > 0 ? ms : null;\n }\n // `lstart` is supported by both Linux (procps) and macOS (BSD) ps. Force\n // the C locale so the timestamp is parseable regardless of the user's LANG.\n const lstart = execFileSync('ps', ['-p', String(pid), '-o', 'lstart='], {\n encoding: 'utf8',\n stdio: ['ignore', 'pipe', 'ignore'],\n env: { ...process.env, LC_ALL: 'C' },\n }).trim();\n if (!lstart) return null;\n const ms = new Date(lstart).getTime();\n return Number.isFinite(ms) ? ms : null;\n } catch {\n return null;\n }\n}\n\nfunction normalizeProcessCwd(value: string): string {\n return value.startsWith('\\\\\\\\?\\\\') ? value.slice(4) : value;\n}\n\nfunction defaultGetProcessCwd(pid: number): string | null {\n if (process.platform === 'win32') {\n try {\n const out = execFileSync(\n 'powershell.exe',\n [\n '-NoProfile',\n '-NonInteractive',\n '-Command',\n `$pid=${pid};$t=@'\nusing System;using System.Runtime.InteropServices;using System.Text;\npublic static class GsdProcCwd{\n [DllImport(\"kernel32.dll\")] public static extern IntPtr OpenProcess(int a,bool b,int p);\n [DllImport(\"kernel32.dll\")] public static extern bool CloseHandle(IntPtr h);\n [DllImport(\"kernel32.dll\")] public static extern bool ReadProcessMemory(IntPtr h,IntPtr a,byte[] b,int l,out int r);\n [DllImport(\"ntdll.dll\")] public static extern int NtQueryInformationProcess(IntPtr h,int c,byte[] i,int l,out int o);\n public static string G(int pid){\n IntPtr h=OpenProcess(0x1010,false,pid);if(h==IntPtr.Zero)return null;\n try{bool x=IntPtr.Size==8;int n=IntPtr.Size*6;byte[] pbi=new byte[n];int o;\n if(NtQueryInformationProcess(h,0,pbi,n,out o)!=0)return null;\n IntPtr peb=x?(IntPtr)BitConverter.ToInt64(pbi,IntPtr.Size):(IntPtr)BitConverter.ToInt32(pbi,4);\n byte[] ptr=new byte[IntPtr.Size];int rd;\n if(!ReadProcessMemory(h,IntPtr.Add(peb,x?0x20:0x10),ptr,ptr.Length,out rd))return null;\n IntPtr pp=x?(IntPtr)BitConverter.ToInt64(ptr,0):(IntPtr)BitConverter.ToInt32(ptr,0);\n byte[] us=new byte[16];\n if(!ReadProcessMemory(h,IntPtr.Add(pp,x?0x38:0x24),us,us.Length,out rd))return null;\n int len=BitConverter.ToUInt16(us,0);if(len<=0||len>32766)return null;\n IntPtr buf=x?(IntPtr)BitConverter.ToInt64(us,8):(IntPtr)BitConverter.ToInt32(us,4);\n byte[] ch=new byte[len];\n if(!ReadProcessMemory(h,buf,ch,ch.Length,out rd))return null;\n return Encoding.Unicode.GetString(ch,0,len);}finally{CloseHandle(h);}}\n}\n'@;Add-Type -TypeDefinition $t -ErrorAction Stop;[GsdProcCwd]::G($pid)`,\n ],\n { encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] },\n ).trim();\n if (!out) return null;\n return normalizeProcessCwd(out);\n } catch {\n return null;\n }\n }\n\n try {\n const out = execFileSync('lsof', ['-a', '-p', String(pid), '-d', 'cwd', '-Fn'], {\n encoding: 'utf8',\n stdio: ['ignore', 'pipe', 'ignore'],\n env: { ...process.env, LC_ALL: 'C' },\n });\n const cwd = out.split('\\n').find((line) => line.startsWith('n'))?.slice(1).trim();\n if (cwd) return cwd;\n } catch {\n }\n\n try {\n const out = execFileSync('pwdx', [String(pid)], {\n encoding: 'utf8',\n stdio: ['ignore', 'pipe', 'ignore'],\n env: { ...process.env, LC_ALL: 'C' },\n }).trim();\n const match = /^\\d+:\\s+(.+)$/.exec(out);\n return match?.[1]?.trim() || null;\n } catch {\n return null;\n }\n}\n\nfunction isSafePid(pid: unknown): pid is number {\n return typeof pid === 'number' && Number.isSafeInteger(pid) && pid > 1;\n}\n\nfunction isMcpServerCommand(command: string | null): boolean {\n if (!command) return false;\n const normalized = command.replace(/\\\\/g, '/');\n return (\n command.includes('gsd-mcp-server') ||\n command.includes('@opengsd/mcp-server') ||\n normalized.includes('/packages/mcp-server/')\n );\n}\n\nfunction defaultListProcesses(): McpProcessSnapshot[] {\n if (process.platform === 'win32') {\n try {\n const out = execFileSync(\n 'powershell.exe',\n [\n '-NoProfile',\n '-NonInteractive',\n '-Command',\n 'Get-CimInstance Win32_Process | Select-Object ProcessId,ParentProcessId,CommandLine | ConvertTo-Json -Compress',\n ],\n { encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] },\n ).trim();\n if (!out) return [];\n const parsed = JSON.parse(out) as unknown;\n const rows = Array.isArray(parsed) ? parsed : [parsed];\n return rows.flatMap((row) => {\n if (!row || typeof row !== 'object') return [];\n const record = row as Record<string, unknown>;\n const pid = Number(record.ProcessId);\n const ppid = Number(record.ParentProcessId);\n const command = typeof record.CommandLine === 'string' ? record.CommandLine : '';\n if (!Number.isSafeInteger(pid) || !Number.isSafeInteger(ppid)) return [];\n return [{ pid, ppid, command }];\n });\n } catch {\n return [];\n }\n }\n\n try {\n const out = execFileSync('ps', ['-axo', 'pid=,ppid=,command='], {\n encoding: 'utf8',\n stdio: ['ignore', 'pipe', 'ignore'],\n env: { ...process.env, LC_ALL: 'C' },\n });\n return out.split('\\n').flatMap((line) => {\n const match = /^\\s*(\\d+)\\s+(\\d+)\\s+(.+)$/.exec(line);\n if (!match) return [];\n return [{\n pid: Number(match[1]),\n ppid: Number(match[2]),\n command: match[3],\n }];\n });\n } catch {\n return [];\n }\n}\n\nfunction defaultWaitForExit(): void {\n const shared = new Int32Array(new SharedArrayBuffer(4));\n Atomics.wait(shared, 0, 0, 250);\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction normalizeCommandPath(value: string): string {\n return value.replace(/\\\\/g, '/');\n}\n\nfunction resolveComparableProjectPath(projectDir: string): string {\n if (\n /^[A-Za-z]:[\\\\/]/.test(projectDir) ||\n projectDir.startsWith('\\\\\\\\') ||\n projectDir.startsWith('/')\n ) {\n // Already an absolute path (Windows drive-letter, UNC, or POSIX). Do NOT\n // call path.resolve(), which would prepend the current drive letter on\n // Windows and turn a POSIX path like /workspace/project into\n // C:/workspace/project, breaking command-path matching when the process\n // command still contains the raw POSIX prefix.\n return normalizeCommandPath(projectDir);\n }\n return normalizeCommandPath(resolve(projectDir));\n}\n\nfunction projectRegistryKeys(projectDir: string): string[] {\n return [...new Set([\n resolveComparableProjectPath(projectDir),\n resolve(projectDir),\n projectDir,\n ])];\n}\n\nfunction commandContainsProjectPath(command: string, projectDir: string): boolean {\n const normalizedProject = resolveComparableProjectPath(projectDir);\n const normalizedCommand = normalizeCommandPath(command);\n const pattern = new RegExp(`(^|[\\\\s\"'])${escapeRegExp(normalizedProject)}(?=$|[/\\\\s\"'])`);\n return pattern.test(normalizedCommand);\n}\n\nfunction isSameProjectMcpProcess(command: string, cwd: string | null, projectDir: string): boolean {\n if (!isMcpServerCommand(command)) return false;\n if (cwd && resolveComparableProjectPath(normalizeProcessCwd(cwd)) === resolveComparableProjectPath(projectDir)) return true;\n return commandContainsProjectPath(command, projectDir);\n}\n\nfunction isPidAlive(\n pid: number,\n sendSignal: (pid: number, signal?: NodeJS.Signals | 0) => void,\n): boolean {\n try {\n sendSignal(pid, 0);\n return true;\n } catch (error) {\n return !(\n error instanceof Error &&\n 'code' in error &&\n (error as NodeJS.ErrnoException).code === 'ESRCH'\n );\n }\n}\n\nfunction isOrphanedMcpProcess(\n proc: McpProcessSnapshot,\n sendSignal: (pid: number, signal?: NodeJS.Signals | 0) => void,\n): boolean {\n if (process.platform === 'win32') {\n // Windows does not reparent orphans to PID 1; the PPID usually still\n // points at the dead parent, so treat a missing parent as orphaned.\n if (!isSafePid(proc.ppid)) return false;\n return !isPidAlive(proc.ppid, sendSignal);\n }\n return proc.ppid === 1;\n}\n\nexport function sweepProjectOrphanMcpServers(\n projectDir: string,\n options: SweepProjectOrphanMcpServersOptions = {},\n): SweepProjectOrphanMcpServersResult {\n const sendSignal = options.kill ?? ((targetPid, signal) => process.kill(targetPid, signal));\n const getProcessCwd = options.getProcessCwd ?? defaultGetProcessCwd;\n const listProcesses = options.listProcesses ?? defaultListProcesses;\n const isOrphaned = options.isOrphaned ?? ((proc: McpProcessSnapshot) => isOrphanedMcpProcess(proc, sendSignal));\n const waitForExit = options.waitForExit ?? defaultWaitForExit;\n\n const result: SweepProjectOrphanMcpServersResult = {\n matched: [],\n terminated: [],\n forceKilled: [],\n skipped: [],\n };\n\n for (const proc of listProcesses()) {\n if (!isSafePid(proc.pid) || proc.pid === process.pid) continue;\n if (!isOrphaned(proc)) continue;\n if (!isMcpServerCommand(proc.command)) continue;\n const cwd = commandContainsProjectPath(proc.command, projectDir) ? null : getProcessCwd(proc.pid);\n if (!isSameProjectMcpProcess(proc.command, cwd, projectDir)) continue;\n result.matched.push(proc.pid);\n\n if (!isPidAlive(proc.pid, sendSignal)) {\n result.skipped.push(proc.pid);\n continue;\n }\n\n try {\n sendSignal(proc.pid, 'SIGTERM');\n result.terminated.push(proc.pid);\n } catch {\n result.skipped.push(proc.pid);\n }\n }\n\n if (result.terminated.length > 0) waitForExit();\n\n for (const pid of result.terminated) {\n if (!isPidAlive(pid, sendSignal)) continue;\n try {\n sendSignal(pid, 'SIGKILL');\n result.forceKilled.push(pid);\n } catch {\n result.skipped.push(pid);\n }\n }\n\n return result;\n}\n\nfunction killPid(\n pid: unknown,\n projectDir: string,\n startedAt: string | undefined,\n options: RegisterMcpInstanceOptions = {},\n): 'killed' | 'force-killed' | 'already-dead' | 'invalid' | 'unverified' | { error: string } {\n if (!isSafePid(pid)) return 'invalid';\n\n const sendSignal = options.kill ?? ((targetPid, signal) => process.kill(targetPid, signal));\n const getProcessCommand = options.getProcessCommand ?? defaultGetProcessCommand;\n const getProcessCwd = options.getProcessCwd ?? defaultGetProcessCwd;\n const getProcessStartTime = options.getProcessStartTime ?? defaultGetProcessStartTime;\n const waitForExit = options.waitForExit ?? defaultWaitForExit;\n\n try {\n sendSignal(pid, 0);\n } catch (error) {\n const isAlreadyDead =\n error instanceof Error && 'code' in error && (error as NodeJS.ErrnoException).code === 'ESRCH';\n if (isAlreadyDead) return 'already-dead';\n return { error: error instanceof Error ? error.message : String(error) };\n }\n\n const command = getProcessCommand(pid);\n if (!command || !isMcpServerCommand(command)) return 'unverified';\n\n const cwd = getProcessCwd(pid);\n const recordedMs = startedAt ? Date.parse(startedAt) : NaN;\n const actualStartMs = getProcessStartTime(pid);\n\n // Guard against PID reuse: a recycled PID can belong to a *different* live\n // MCP server (even for another project). If we can determine when the live\n // process actually started and it began materially after we recorded this\n // entry, the original server is gone and this PID is not ours — refuse to\n // signal it.\n if (\n Number.isFinite(recordedMs) &&\n actualStartMs !== null &&\n actualStartMs > recordedMs + STALE_PID_START_SKEW_MS\n ) {\n return 'unverified';\n }\n\n // Confirm the live MCP server is the one we registered for this project via\n // the process cwd or an embedded project path. Start time alone is not enough\n // to authorize a signal when cwd is unavailable — another project's global\n // install can share the same command line and a coincidentally aligned start.\n const sameProject = isSameProjectMcpProcess(command, cwd, projectDir);\n if (!sameProject) return 'unverified';\n\n try {\n sendSignal(pid, 'SIGTERM');\n waitForExit();\n if (!isPidAlive(pid, sendSignal)) return 'killed';\n sendSignal(pid, 'SIGKILL');\n return 'force-killed';\n } catch (error) {\n const isAlreadyDead =\n error instanceof Error && 'code' in error && (error as NodeJS.ErrnoException).code === 'ESRCH';\n if (isAlreadyDead) return 'already-dead';\n return { error: error instanceof Error ? error.message : String(error) };\n }\n}\n\n/**\n * Kill any existing MCP server for this project, then register our PID.\n */\nexport function registerMcpInstance(\n projectDir: string,\n registryPath = REGISTRY_PATH,\n options: RegisterMcpInstanceOptions = {},\n): boolean {\n const registry = readMcpRegistry(registryPath);\n const keys = projectRegistryKeys(projectDir);\n const key = keys[0];\n const existingKey = keys.find((candidate) => candidate in registry);\n\n const existing = existingKey ? registry[existingKey] : undefined;\n if (existing && existing.pid !== process.pid) {\n const result = killPid(existing.pid, key, existing.startedAt, options);\n const label = result === 'killed'\n ? `killed stale pid=${existing.pid}`\n : result === 'force-killed'\n ? `force-killed stale pid=${existing.pid}`\n : result === 'already-dead'\n ? `stale pid=${existing.pid} already dead`\n : result === 'invalid'\n ? `ignored invalid stale pid=${String(existing.pid)}`\n : result === 'unverified'\n ? `ignored unverified stale pid=${existing.pid}`\n : `failed to kill pid=${existing.pid}: ${result.error}`;\n process.stderr.write(`[gsd-mcp-server] ${label} for ${key}\\n`);\n if (result === 'unverified') return false;\n }\n if (existingKey && existingKey !== key) delete registry[existingKey];\n\n registry[key] = {\n pid: process.pid,\n projectDir: key,\n startedAt: new Date().toISOString(),\n };\n writeMcpRegistry(registry, registryPath);\n return true;\n}\n\n/**\n * Remove our PID from the registry on shutdown.\n */\nexport function unregisterMcpInstance(projectDir: string, registryPath = REGISTRY_PATH): void {\n const keys = projectRegistryKeys(projectDir);\n const registry = readMcpRegistry(registryPath);\n let changed = false;\n for (const key of keys) {\n if (registry[key]?.pid === process.pid) {\n delete registry[key];\n changed = true;\n }\n }\n if (changed) {\n writeMcpRegistry(registry, registryPath);\n }\n}\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** When set, stdio MCP is a short-lived tools/list probe — skip PID registry side effects. */
|
|
2
|
+
export declare const GSD_MCP_PROBE_ENV = "GSD_MCP_PROBE";
|
|
3
|
+
export declare function isMcpProbeSession(env?: NodeJS.ProcessEnv): boolean;
|
|
4
|
+
//# sourceMappingURL=probe-mode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"probe-mode.d.ts","sourceRoot":"","sources":["../src/probe-mode.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,eAAO,MAAM,iBAAiB,kBAAkB,CAAC;AAEjD,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAK/E"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** When set, stdio MCP is a short-lived tools/list probe — skip PID registry side effects. */
|
|
2
|
+
export const GSD_MCP_PROBE_ENV = 'GSD_MCP_PROBE';
|
|
3
|
+
export function isMcpProbeSession(env = process.env) {
|
|
4
|
+
const value = env[GSD_MCP_PROBE_ENV];
|
|
5
|
+
if (!value)
|
|
6
|
+
return false;
|
|
7
|
+
const normalized = value.trim().toLowerCase();
|
|
8
|
+
return normalized === '1' || normalized === 'true' || normalized === 'yes';
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=probe-mode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"probe-mode.js","sourceRoot":"","sources":["../src/probe-mode.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,MAAM,CAAC,MAAM,iBAAiB,GAAG,eAAe,CAAC;AAEjD,MAAM,UAAU,iBAAiB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACpE,MAAM,KAAK,GAAG,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACrC,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,OAAO,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,KAAK,CAAC;AAC7E,CAAC","sourcesContent":["/** When set, stdio MCP is a short-lived tools/list probe — skip PID registry side effects. */\nexport const GSD_MCP_PROBE_ENV = 'GSD_MCP_PROBE';\n\nexport function isMcpProbeSession(env: NodeJS.ProcessEnv = process.env): boolean {\n const value = env[GSD_MCP_PROBE_ENV];\n if (!value) return false;\n const normalized = value.trim().toLowerCase();\n return normalized === '1' || normalized === 'true' || normalized === 'yes';\n}\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type Readable } from 'node:stream';
|
|
2
|
+
export interface ActivityTrackingInput {
|
|
3
|
+
input: Readable;
|
|
4
|
+
lastActivityAt(): number;
|
|
5
|
+
close(): void;
|
|
6
|
+
}
|
|
7
|
+
export declare function createActivityTrackingInput(source: Readable, now?: () => number): ActivityTrackingInput;
|
|
8
|
+
//# sourceMappingURL=stdio-watchdog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdio-watchdog.d.ts","sourceRoot":"","sources":["../src/stdio-watchdog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEzD,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,QAAQ,CAAC;IAChB,cAAc,IAAI,MAAM,CAAC;IACzB,KAAK,IAAI,IAAI,CAAC;CACf;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,QAAQ,EAChB,GAAG,GAAE,MAAM,MAAyB,GACnC,qBAAqB,CA0CvB"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { PassThrough } from 'node:stream';
|
|
2
|
+
export function createActivityTrackingInput(source, now = () => Date.now()) {
|
|
3
|
+
const input = new PassThrough();
|
|
4
|
+
let lastActivity = now();
|
|
5
|
+
function onDrain() {
|
|
6
|
+
source.resume();
|
|
7
|
+
}
|
|
8
|
+
function onData(chunk) {
|
|
9
|
+
lastActivity = now();
|
|
10
|
+
if (!input.write(chunk)) {
|
|
11
|
+
source.pause();
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function onEnd() {
|
|
15
|
+
input.end();
|
|
16
|
+
}
|
|
17
|
+
function onError(error) {
|
|
18
|
+
input.destroy(error);
|
|
19
|
+
}
|
|
20
|
+
input.on('drain', onDrain);
|
|
21
|
+
source.on('data', onData);
|
|
22
|
+
source.on('end', onEnd);
|
|
23
|
+
source.on('error', onError);
|
|
24
|
+
return {
|
|
25
|
+
input,
|
|
26
|
+
lastActivityAt() {
|
|
27
|
+
return lastActivity;
|
|
28
|
+
},
|
|
29
|
+
close() {
|
|
30
|
+
input.off('drain', onDrain);
|
|
31
|
+
source.off('data', onData);
|
|
32
|
+
source.off('end', onEnd);
|
|
33
|
+
source.off('error', onError);
|
|
34
|
+
if (source.isPaused())
|
|
35
|
+
source.resume();
|
|
36
|
+
input.destroy();
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=stdio-watchdog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdio-watchdog.js","sourceRoot":"","sources":["../src/stdio-watchdog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAiB,MAAM,aAAa,CAAC;AAQzD,MAAM,UAAU,2BAA2B,CACzC,MAAgB,EAChB,MAAoB,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;IAEpC,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC;IAChC,IAAI,YAAY,GAAG,GAAG,EAAE,CAAC;IAEzB,SAAS,OAAO;QACd,MAAM,CAAC,MAAM,EAAE,CAAC;IAClB,CAAC;IAED,SAAS,MAAM,CAAC,KAAsB;QACpC,YAAY,GAAG,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;IAED,SAAS,KAAK;QACZ,KAAK,CAAC,GAAG,EAAE,CAAC;IACd,CAAC;IAED,SAAS,OAAO,CAAC,KAAY;QAC3B,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC3B,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1B,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACxB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAE5B,OAAO;QACL,KAAK;QACL,cAAc;YACZ,OAAO,YAAY,CAAC;QACtB,CAAC;QACD,KAAK;YACH,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC5B,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC3B,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7B,IAAI,MAAM,CAAC,QAAQ,EAAE;gBAAE,MAAM,CAAC,MAAM,EAAE,CAAC;YACvC,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,CAAC;KACF,CAAC;AACJ,CAAC","sourcesContent":["import { PassThrough, type Readable } from 'node:stream';\n\nexport interface ActivityTrackingInput {\n input: Readable;\n lastActivityAt(): number;\n close(): void;\n}\n\nexport function createActivityTrackingInput(\n source: Readable,\n now: () => number = () => Date.now(),\n): ActivityTrackingInput {\n const input = new PassThrough();\n let lastActivity = now();\n\n function onDrain(): void {\n source.resume();\n }\n\n function onData(chunk: Buffer | string): void {\n lastActivity = now();\n if (!input.write(chunk)) {\n source.pause();\n }\n }\n\n function onEnd(): void {\n input.end();\n }\n\n function onError(error: Error): void {\n input.destroy(error);\n }\n\n input.on('drain', onDrain);\n source.on('data', onData);\n source.on('end', onEnd);\n source.on('error', onError);\n\n return {\n input,\n lastActivityAt() {\n return lastActivity;\n },\n close() {\n input.off('drain', onDrain);\n source.off('data', onData);\n source.off('end', onEnd);\n source.off('error', onError);\n if (source.isPaused()) source.resume();\n input.destroy();\n },\n };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-tools.d.ts","sourceRoot":"","sources":["../src/workflow-tools.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"workflow-tools.d.ts","sourceRoot":"","sources":["../src/workflow-tools.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAuXxB,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CA+BnG;AA+GD,wBAAgB,yBAAyB,CAAC,CAAC,SAAS;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,EACzE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,CAAC,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAE5B;AA6JD,4CAA4C;AAC5C,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAKrE;AAED,4CAA4C;AAC5C,wBAAgB,4BAA4B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAE3E;AA6FD;;;;;;GAMG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAG7D;AAgCD,UAAU,aAAa;IACrB,IAAI,CACF,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,GAC3D,OAAO,CAAC;CACZ;AAED,eAAO,MAAM,mBAAmB,mBAA+B,CAAC;AAChE,eAAO,MAAM,6BAA6B,mBAAyC,CAAC;AACpF,eAAO,MAAM,yBAAyB,mBAAqC,CAAC;AA60B5E,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAsB,CAAC;AAwT/D,MAAM,WAAW,4BAA4B;IAC3C;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,aAAa,EACzB,OAAO,GAAE,4BAAiC,GACzC,IAAI,CAqyBN"}
|
|
@@ -10,6 +10,9 @@ import { pathToFileURL } from "node:url";
|
|
|
10
10
|
import { z } from "zod";
|
|
11
11
|
import { WORKFLOW_TOOL_NAMES as CONTRACT_WORKFLOW_TOOL_NAMES, CANONICAL_WORKFLOW_TOOL_NAMES as CONTRACT_CANONICAL_WORKFLOW_TOOL_NAMES, WORKFLOW_TOOL_ALIAS_NAMES as CONTRACT_WORKFLOW_TOOL_ALIAS_NAMES, } from "@opengsd/contracts";
|
|
12
12
|
import { logAliasUsage } from "./alias-telemetry.js";
|
|
13
|
+
async function importBridgeModule() {
|
|
14
|
+
return importLocalModule("../../../src/resources/extensions/gsd/mcp-bridge.js");
|
|
15
|
+
}
|
|
13
16
|
let workflowToolExecutorsPromise = null;
|
|
14
17
|
let workflowExecutionQueue = Promise.resolve();
|
|
15
18
|
let workflowWriteGatePromise = null;
|
|
@@ -283,7 +286,7 @@ function getWriteGateModuleCandidates() {
|
|
|
283
286
|
warnCustomWorkflowModule("GSD_WORKFLOW_WRITE_GATE_MODULE", explicitModule);
|
|
284
287
|
candidates.push(explicitModule.startsWith("file:") ? explicitModule : toFileUrl(explicitModule));
|
|
285
288
|
}
|
|
286
|
-
candidates.push(...buildBridgeImportCandidates("../../../src/resources/extensions/gsd/
|
|
289
|
+
candidates.push(...buildBridgeImportCandidates("../../../src/resources/extensions/gsd/mcp-bridge.js")
|
|
287
290
|
.map((p) => new URL(p, import.meta.url).href));
|
|
288
291
|
return [...new Set(candidates)];
|
|
289
292
|
}
|
|
@@ -333,10 +336,27 @@ async function importLocalModule(relativePath) {
|
|
|
333
336
|
}
|
|
334
337
|
throw lastErr;
|
|
335
338
|
}
|
|
339
|
+
async function importWorkflowRuntimeModule(relativePath) {
|
|
340
|
+
const rawCandidates = import.meta.url.includes("/src/") || import.meta.url.includes("\\src\\")
|
|
341
|
+
? _buildImportCandidates(relativePath)
|
|
342
|
+
: buildBridgeImportCandidates(relativePath);
|
|
343
|
+
const candidates = rawCandidates
|
|
344
|
+
.map((p) => new URL(p, import.meta.url).href);
|
|
345
|
+
let lastErr;
|
|
346
|
+
for (const candidate of candidates) {
|
|
347
|
+
try {
|
|
348
|
+
return await import(candidate);
|
|
349
|
+
}
|
|
350
|
+
catch (err) {
|
|
351
|
+
lastErr = err;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
throw lastErr;
|
|
355
|
+
}
|
|
336
356
|
async function loadProjectPreferences(projectDir) {
|
|
337
|
-
const
|
|
357
|
+
const bridge = await importBridgeModule();
|
|
338
358
|
try {
|
|
339
|
-
return loadEffectiveGSDPreferences(projectDir).preferences;
|
|
359
|
+
return bridge.loadEffectiveGSDPreferences(projectDir).preferences;
|
|
340
360
|
}
|
|
341
361
|
catch {
|
|
342
362
|
return null;
|
|
@@ -523,8 +543,8 @@ async function runSerializedWorkflowOperation(fn) {
|
|
|
523
543
|
}
|
|
524
544
|
async function runSerializedWorkflowDbOperation(projectDir, fn) {
|
|
525
545
|
return runSerializedWorkflowOperation(async () => {
|
|
526
|
-
const
|
|
527
|
-
const dbAvailable = await ensureDbOpen(projectDir);
|
|
546
|
+
const bridge = await importBridgeModule();
|
|
547
|
+
const dbAvailable = await bridge.ensureDbOpen(projectDir);
|
|
528
548
|
if (!dbAvailable) {
|
|
529
549
|
throw new Error("GSD database is not available");
|
|
530
550
|
}
|
|
@@ -620,23 +640,22 @@ async function inferSaveGateResultScope(projectDir, prepared) {
|
|
|
620
640
|
return out;
|
|
621
641
|
if (!gateId)
|
|
622
642
|
return out;
|
|
623
|
-
const
|
|
624
|
-
if (!(await ensureDbOpen(projectDir)))
|
|
643
|
+
const bridge = await importBridgeModule();
|
|
644
|
+
if (!(await bridge.ensureDbOpen(projectDir)))
|
|
625
645
|
return out;
|
|
626
|
-
|
|
627
|
-
if (!db.getMilestoneSlices || !db.getPendingGates || !db.getGateResults)
|
|
646
|
+
if (!bridge.getMilestoneSlices || !bridge.getPendingGates || !bridge.getGateResults)
|
|
628
647
|
return out;
|
|
629
648
|
const milestoneFilter = stringValue(out.milestoneId);
|
|
630
649
|
const sliceFilter = stringValue(out.sliceId);
|
|
631
650
|
const milestones = milestoneFilter
|
|
632
651
|
? [{ id: milestoneFilter }]
|
|
633
|
-
: (
|
|
652
|
+
: (bridge.getAllMilestones?.() ?? []).filter((milestone) => stringValue(milestone.id));
|
|
634
653
|
const candidates = [];
|
|
635
654
|
for (const milestone of milestones) {
|
|
636
655
|
const milestoneId = stringValue(milestone.id);
|
|
637
656
|
if (!milestoneId)
|
|
638
657
|
continue;
|
|
639
|
-
const slices =
|
|
658
|
+
const slices = bridge.getMilestoneSlices(milestoneId)
|
|
640
659
|
.filter((slice) => {
|
|
641
660
|
const sliceId = stringValue(slice.id);
|
|
642
661
|
return sliceId && (!sliceFilter || sliceId === sliceFilter);
|
|
@@ -646,8 +665,8 @@ async function inferSaveGateResultScope(projectDir, prepared) {
|
|
|
646
665
|
if (!sliceId)
|
|
647
666
|
continue;
|
|
648
667
|
const rows = [
|
|
649
|
-
...
|
|
650
|
-
...
|
|
668
|
+
...bridge.getPendingGates(milestoneId, sliceId),
|
|
669
|
+
...bridge.getGateResults(milestoneId, sliceId),
|
|
651
670
|
];
|
|
652
671
|
for (const row of rows) {
|
|
653
672
|
if (stringValue(row.gate_id)?.toUpperCase() !== gateId)
|
|
@@ -682,8 +701,8 @@ async function handleSaveGateResult(projectDir, args) {
|
|
|
682
701
|
}
|
|
683
702
|
async function ensureMilestoneDbRow(milestoneId) {
|
|
684
703
|
try {
|
|
685
|
-
const
|
|
686
|
-
insertMilestone({ id: milestoneId, status: "queued" });
|
|
704
|
+
const bridge = await importBridgeModule();
|
|
705
|
+
bridge.insertMilestone({ id: milestoneId, status: "queued" });
|
|
687
706
|
}
|
|
688
707
|
catch {
|
|
689
708
|
// Ignore pre-existing rows or transient DB availability issues.
|
|
@@ -691,8 +710,8 @@ async function ensureMilestoneDbRow(milestoneId) {
|
|
|
691
710
|
}
|
|
692
711
|
async function findDatabaseMilestoneIds() {
|
|
693
712
|
try {
|
|
694
|
-
const
|
|
695
|
-
return (getAllMilestones?.() ?? [])
|
|
713
|
+
const bridge = await importBridgeModule();
|
|
714
|
+
return (bridge.getAllMilestones?.() ?? [])
|
|
696
715
|
.map((milestone) => {
|
|
697
716
|
const id = milestone?.id;
|
|
698
717
|
return typeof id === "string" ? id : null;
|
|
@@ -712,7 +731,8 @@ async function findDatabaseMilestoneIds() {
|
|
|
712
731
|
* from an earlier call to this same tool.
|
|
713
732
|
*/
|
|
714
733
|
async function generateOrReuseMilestoneId(projectDir) {
|
|
715
|
-
const
|
|
734
|
+
const bridge = await importBridgeModule();
|
|
735
|
+
const { claimReservedId, findMilestoneIds, getReservedMilestoneIds, nextMilestoneId, milestoneIdSort, } = bridge;
|
|
716
736
|
const reserved = claimReservedId();
|
|
717
737
|
if (reserved) {
|
|
718
738
|
await ensureMilestoneDbRow(reserved);
|
|
@@ -726,7 +746,7 @@ async function generateOrReuseMilestoneId(projectDir) {
|
|
|
726
746
|
]),
|
|
727
747
|
];
|
|
728
748
|
// Attempt ghost-ID reuse before falling back to max+1.
|
|
729
|
-
const { isReusableGhostMilestone } =
|
|
749
|
+
const { isReusableGhostMilestone } = bridge;
|
|
730
750
|
const sorted = [...allIds].sort(milestoneIdSort);
|
|
731
751
|
for (const candidate of sorted) {
|
|
732
752
|
if (isReusableGhostMilestone(projectDir, candidate)) {
|
|
@@ -734,7 +754,7 @@ async function generateOrReuseMilestoneId(projectDir) {
|
|
|
734
754
|
return candidate;
|
|
735
755
|
}
|
|
736
756
|
}
|
|
737
|
-
const prefsMod = await
|
|
757
|
+
const prefsMod = await importBridgeModule().catch(() => null);
|
|
738
758
|
// Graceful degradation: a corrupt preferences file should not crash
|
|
739
759
|
// milestone-id generation. Fall back to non-unique IDs if anything
|
|
740
760
|
// throws here — matches the pre-fix behavior for missing prefs.
|
|
@@ -1405,8 +1425,8 @@ export function registerWorkflowTools(realServer, options = {}) {
|
|
|
1405
1425
|
const { projectDir, ...params } = parsed;
|
|
1406
1426
|
await enforceWorkflowWriteGate("gsd_decision_save", projectDir);
|
|
1407
1427
|
const result = await runSerializedWorkflowDbOperation(projectDir, async () => {
|
|
1408
|
-
const
|
|
1409
|
-
return saveDecisionToDb(params, projectDir);
|
|
1428
|
+
const bridge = await importBridgeModule();
|
|
1429
|
+
return bridge.saveDecisionToDb(params, projectDir);
|
|
1410
1430
|
});
|
|
1411
1431
|
return { content: [{ type: "text", text: `Saved decision ${result.id}` }] };
|
|
1412
1432
|
});
|
|
@@ -1416,8 +1436,8 @@ export function registerWorkflowTools(realServer, options = {}) {
|
|
|
1416
1436
|
const { projectDir, ...params } = parsed;
|
|
1417
1437
|
await enforceWorkflowWriteGate("gsd_decision_save", projectDir);
|
|
1418
1438
|
const result = await runSerializedWorkflowDbOperation(projectDir, async () => {
|
|
1419
|
-
const
|
|
1420
|
-
return saveDecisionToDb(params, projectDir);
|
|
1439
|
+
const bridge = await importBridgeModule();
|
|
1440
|
+
return bridge.saveDecisionToDb(params, projectDir);
|
|
1421
1441
|
});
|
|
1422
1442
|
return { content: [{ type: "text", text: `Saved decision ${result.id}` }] };
|
|
1423
1443
|
});
|
|
@@ -1426,8 +1446,8 @@ export function registerWorkflowTools(realServer, options = {}) {
|
|
|
1426
1446
|
const { projectDir, id, ...updates } = parsed;
|
|
1427
1447
|
await enforceWorkflowWriteGate("gsd_requirement_update", projectDir);
|
|
1428
1448
|
await runSerializedWorkflowDbOperation(projectDir, async () => {
|
|
1429
|
-
const
|
|
1430
|
-
return updateRequirementInDb(id, updates, projectDir);
|
|
1449
|
+
const bridge = await importBridgeModule();
|
|
1450
|
+
return bridge.updateRequirementInDb(id, updates, projectDir);
|
|
1431
1451
|
});
|
|
1432
1452
|
return { content: [{ type: "text", text: `Updated requirement ${id}` }] };
|
|
1433
1453
|
});
|
|
@@ -1437,8 +1457,8 @@ export function registerWorkflowTools(realServer, options = {}) {
|
|
|
1437
1457
|
const { projectDir, id, ...updates } = parsed;
|
|
1438
1458
|
await enforceWorkflowWriteGate("gsd_requirement_update", projectDir);
|
|
1439
1459
|
await runSerializedWorkflowDbOperation(projectDir, async () => {
|
|
1440
|
-
const
|
|
1441
|
-
return updateRequirementInDb(id, updates, projectDir);
|
|
1460
|
+
const bridge = await importBridgeModule();
|
|
1461
|
+
return bridge.updateRequirementInDb(id, updates, projectDir);
|
|
1442
1462
|
});
|
|
1443
1463
|
return { content: [{ type: "text", text: `Updated requirement ${id}` }] };
|
|
1444
1464
|
});
|
|
@@ -1447,8 +1467,8 @@ export function registerWorkflowTools(realServer, options = {}) {
|
|
|
1447
1467
|
const { projectDir, ...params } = parsed;
|
|
1448
1468
|
await enforceWorkflowWriteGate("gsd_requirement_save", projectDir);
|
|
1449
1469
|
const result = await runSerializedWorkflowDbOperation(projectDir, async () => {
|
|
1450
|
-
const
|
|
1451
|
-
return saveRequirementToDb(params, projectDir);
|
|
1470
|
+
const bridge = await importBridgeModule();
|
|
1471
|
+
return bridge.saveRequirementToDb(params, projectDir);
|
|
1452
1472
|
});
|
|
1453
1473
|
return { content: [{ type: "text", text: `Saved requirement ${result.id}` }] };
|
|
1454
1474
|
});
|
|
@@ -1458,8 +1478,8 @@ export function registerWorkflowTools(realServer, options = {}) {
|
|
|
1458
1478
|
const { projectDir, ...params } = parsed;
|
|
1459
1479
|
await enforceWorkflowWriteGate("gsd_requirement_save", projectDir);
|
|
1460
1480
|
const result = await runSerializedWorkflowDbOperation(projectDir, async () => {
|
|
1461
|
-
const
|
|
1462
|
-
return saveRequirementToDb(params, projectDir);
|
|
1481
|
+
const bridge = await importBridgeModule();
|
|
1482
|
+
return bridge.saveRequirementToDb(params, projectDir);
|
|
1463
1483
|
});
|
|
1464
1484
|
return { content: [{ type: "text", text: `Saved requirement ${result.id}` }] };
|
|
1465
1485
|
});
|
|
@@ -1560,14 +1580,13 @@ export function registerWorkflowTools(realServer, options = {}) {
|
|
|
1560
1580
|
await enforceWorkflowWriteGate("gsd_skip_slice", projectDir, milestoneId);
|
|
1561
1581
|
await runSerializedWorkflowDbOperation(projectDir, async () => {
|
|
1562
1582
|
const { handleSkipSlice } = await importLocalModule("../../../src/resources/extensions/gsd/tools/skip-slice.js");
|
|
1563
|
-
const
|
|
1564
|
-
const { rebuildState } = await importLocalModule("../../../src/resources/extensions/gsd/doctor.js");
|
|
1583
|
+
const bridge = await importBridgeModule();
|
|
1565
1584
|
const result = handleSkipSlice({ milestoneId, sliceId, reason });
|
|
1566
1585
|
if (result.error) {
|
|
1567
1586
|
throw new Error(result.error);
|
|
1568
1587
|
}
|
|
1569
|
-
invalidateStateCache();
|
|
1570
|
-
await rebuildState(projectDir);
|
|
1588
|
+
bridge.invalidateStateCache();
|
|
1589
|
+
await bridge.rebuildState(projectDir);
|
|
1571
1590
|
});
|
|
1572
1591
|
return {
|
|
1573
1592
|
content: [{ type: "text", text: `Skipped slice ${sliceId} (${milestoneId}). Reason: ${reason ?? "User-directed skip"}.` }],
|
|
@@ -1695,8 +1714,8 @@ export function registerWorkflowTools(realServer, options = {}) {
|
|
|
1695
1714
|
server.tool("gsd_checkpoint_db", "Flush the SQLite WAL into gsd.db so git add stages the current GSD database state.", checkpointDbParams, async (args) => {
|
|
1696
1715
|
const { projectDir } = parseWorkflowArgs(checkpointDbSchema, args);
|
|
1697
1716
|
await runSerializedWorkflowDbOperation(projectDir, async () => {
|
|
1698
|
-
const
|
|
1699
|
-
checkpointDatabase();
|
|
1717
|
+
const bridge = await importBridgeModule();
|
|
1718
|
+
bridge.checkpointDatabase();
|
|
1700
1719
|
});
|
|
1701
1720
|
return {
|
|
1702
1721
|
content: [{
|
|
@@ -1708,8 +1727,8 @@ export function registerWorkflowTools(realServer, options = {}) {
|
|
|
1708
1727
|
});
|
|
1709
1728
|
server.tool("gsd_journal_query", "Query the structured event journal for auto-mode iterations.", journalQueryParams, async (args) => {
|
|
1710
1729
|
const { projectDir, limit, ...filters } = parseWorkflowArgs(journalQuerySchema, args);
|
|
1711
|
-
const
|
|
1712
|
-
const entries = queryJournal(projectDir, filters).slice(0, limit ?? 100);
|
|
1730
|
+
const bridge = await importBridgeModule();
|
|
1731
|
+
const entries = bridge.queryJournal(projectDir, filters).slice(0, limit ?? 100);
|
|
1713
1732
|
if (entries.length === 0) {
|
|
1714
1733
|
return { content: [{ type: "text", text: "No matching journal entries found." }] };
|
|
1715
1734
|
}
|
|
@@ -1788,7 +1807,7 @@ export function registerWorkflowTools(realServer, options = {}) {
|
|
|
1788
1807
|
const { projectDir, ...params } = parseWorkflowArgs(captureThoughtSchema, args);
|
|
1789
1808
|
await enforceWorkflowWriteGate("gsd_capture_thought", projectDir);
|
|
1790
1809
|
return runSerializedWorkflowDbOperation(projectDir, async () => {
|
|
1791
|
-
const { executeMemoryCapture } = await
|
|
1810
|
+
const { executeMemoryCapture } = await importWorkflowRuntimeModule("../../../src/resources/extensions/gsd/tools/memory-tools.js");
|
|
1792
1811
|
return executeMemoryCapture(params);
|
|
1793
1812
|
});
|
|
1794
1813
|
});
|
|
@@ -1817,7 +1836,7 @@ export function registerWorkflowTools(realServer, options = {}) {
|
|
|
1817
1836
|
server.tool("gsd_memory_query", "Search the GSD memory store by keyword. Returns ranked memories with id, category, content, confidence, scope, and tags. Mirrors the in-process memory_query tool for external MCP clients.", memoryQueryParams, async (args) => {
|
|
1818
1837
|
const { projectDir, ...params } = parseWorkflowArgs(memoryQuerySchema, args);
|
|
1819
1838
|
return runSerializedWorkflowDbOperation(projectDir, async () => {
|
|
1820
|
-
const { executeMemoryQuery } = await
|
|
1839
|
+
const { executeMemoryQuery } = await importWorkflowRuntimeModule("../../../src/resources/extensions/gsd/tools/memory-tools.js");
|
|
1821
1840
|
return executeMemoryQuery(params);
|
|
1822
1841
|
});
|
|
1823
1842
|
});
|
|
@@ -1838,7 +1857,7 @@ export function registerWorkflowTools(realServer, options = {}) {
|
|
|
1838
1857
|
server.tool("gsd_memory_graph", "Inspect the relationship graph between memories. mode=query walks edges from a given memoryId. mode=build is a placeholder reserved for future graph rebuilds. Distinct from gsd_graph (project knowledge graph) — see ADR-013.", memoryGraphParams, async (args) => {
|
|
1839
1858
|
const { projectDir, ...params } = parseWorkflowArgs(memoryGraphSchema, args);
|
|
1840
1859
|
return runSerializedWorkflowDbOperation(projectDir, async () => {
|
|
1841
|
-
const { executeGsdGraph } = await
|
|
1860
|
+
const { executeGsdGraph } = await importWorkflowRuntimeModule("../../../src/resources/extensions/gsd/tools/memory-tools.js");
|
|
1842
1861
|
return executeGsdGraph(params);
|
|
1843
1862
|
});
|
|
1844
1863
|
});
|