@opengsd/gsd-pi 1.2.0-dev.955e4da0 → 1.2.0-dev.a6376d75
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-style.d.ts +17 -0
- package/dist/cli-style.js +28 -0
- package/dist/cli.js +2 -19
- package/dist/headless-events.d.ts +4 -2
- package/dist/headless-events.js +14 -34
- package/dist/loader.js +6 -4
- package/dist/mcp-server.js +2 -1
- package/dist/models-resolver.d.ts +3 -13
- package/dist/models-resolver.js +3 -22
- 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 +123 -20
- package/dist/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/GSD-WORKFLOW.md +5 -4
- package/dist/resources/extensions/ask-user-questions.js +3 -2
- package/dist/resources/extensions/async-jobs/async-bash-tool.js +30 -64
- package/dist/resources/extensions/async-jobs/await-tool.js +80 -12
- package/dist/resources/extensions/async-jobs/index.js +65 -0
- package/dist/resources/extensions/async-jobs/job-manager.js +12 -1
- package/dist/resources/extensions/bg-shell/bg-shell-command.js +6 -6
- package/dist/resources/extensions/bg-shell/bg-shell-tool.js +10 -7
- package/dist/resources/extensions/bg-shell/overlay.js +9 -6
- package/dist/resources/extensions/bg-shell/process-manager.js +54 -25
- package/dist/resources/extensions/bg-shell/readiness-detector.js +11 -0
- package/dist/resources/extensions/bg-shell/utilities.js +3 -0
- package/dist/resources/extensions/browser-tools/engine/managed-gsd-browser.js +209 -88
- package/dist/resources/extensions/browser-tools/engine/selection.js +73 -5
- package/dist/resources/extensions/browser-tools/index.js +69 -12
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +456 -198
- package/dist/resources/extensions/claude-code-cli/turn-assembler.js +33 -1
- package/dist/resources/extensions/gsd/auto/closeout.js +215 -0
- package/dist/resources/extensions/gsd/auto/custom-verify-retry-store.js +17 -2
- package/dist/resources/extensions/gsd/auto/detect-stuck.js +33 -13
- package/dist/resources/extensions/gsd/auto/dispatch-history.js +120 -0
- package/dist/resources/extensions/gsd/auto/dispatch-key.js +37 -0
- 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 +7 -1
- package/dist/resources/extensions/gsd/auto/milestone-lease-reclaim.js +56 -0
- package/dist/resources/extensions/gsd/auto/orchestrator.js +174 -69
- package/dist/resources/extensions/gsd/auto/phase-helpers.js +146 -0
- package/dist/resources/extensions/gsd/auto/phases.js +17 -2329
- package/dist/resources/extensions/gsd/auto/pre-dispatch.js +534 -0
- package/dist/resources/extensions/gsd/auto/session.js +3 -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-direct-dispatch.js +11 -34
- package/dist/resources/extensions/gsd/auto-dispatch.js +50 -58
- package/dist/resources/extensions/gsd/auto-model-selection.js +36 -13
- package/dist/resources/extensions/gsd/auto-post-unit.js +35 -8
- package/dist/resources/extensions/gsd/auto-prompts.js +81 -19
- package/dist/resources/extensions/gsd/auto-start.js +41 -18
- package/dist/resources/extensions/gsd/auto-tool-tracking.js +18 -0
- package/dist/resources/extensions/gsd/auto-unit-closeout.js +45 -21
- package/dist/resources/extensions/gsd/auto-unit-tool-scope.js +12 -20
- package/dist/resources/extensions/gsd/auto-verification.js +23 -30
- package/dist/resources/extensions/gsd/auto-worktree.js +45 -92
- package/dist/resources/extensions/gsd/auto.js +56 -15
- package/dist/resources/extensions/gsd/blocked-models.js +28 -0
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +29 -8
- package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +60 -13
- package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +2 -2
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +19 -0
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +212 -48
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +303 -77
- package/dist/resources/extensions/gsd/branch-patterns.js +2 -0
- package/dist/resources/extensions/gsd/browser-daemon-auto-prep.js +83 -0
- package/dist/resources/extensions/gsd/browser-evidence.js +8 -2
- package/dist/resources/extensions/gsd/captures.js +4 -6
- package/dist/resources/extensions/gsd/closeout-wizard.js +92 -0
- package/dist/resources/extensions/gsd/commands/context.js +16 -2
- package/dist/resources/extensions/gsd/commands-handlers.js +46 -3
- package/dist/resources/extensions/gsd/commands-mcp-status.js +2 -2
- package/dist/resources/extensions/gsd/commands-workflow-templates.js +9 -2
- package/dist/resources/extensions/gsd/consent-question.js +353 -0
- package/dist/resources/extensions/gsd/consent-verdict.js +63 -0
- package/dist/resources/extensions/gsd/constants.js +0 -2
- package/dist/resources/extensions/gsd/crash-recovery.js +12 -15
- package/dist/resources/extensions/gsd/db/queries.js +56 -0
- package/dist/resources/extensions/gsd/db-writer.js +8 -17
- package/dist/resources/extensions/gsd/dispatch-guard.js +10 -35
- package/dist/resources/extensions/gsd/doctor-engine-checks.js +5 -5
- package/dist/resources/extensions/gsd/doctor-environment.js +258 -131
- package/dist/resources/extensions/gsd/doctor-format.js +9 -6
- package/dist/resources/extensions/gsd/doctor-git-checks.js +2 -18
- package/dist/resources/extensions/gsd/doctor-runtime-checks.js +13 -15
- package/dist/resources/extensions/gsd/engine-hook-contract.js +70 -0
- package/dist/resources/extensions/gsd/error-classifier.js +9 -0
- package/dist/resources/extensions/gsd/exec-sandbox.js +30 -10
- package/dist/resources/extensions/gsd/files.js +33 -19
- package/dist/resources/extensions/gsd/gsd-command-home.js +22 -12
- package/dist/resources/extensions/gsd/gsd-db.js +2 -1
- package/dist/resources/extensions/gsd/guidance.js +158 -0
- package/dist/resources/extensions/gsd/guided-flow.js +110 -6
- package/dist/resources/extensions/gsd/health-widget.js +87 -28
- package/dist/resources/extensions/gsd/markdown-renderer.js +10 -0
- package/dist/resources/extensions/gsd/mcp-bridge.js +10 -0
- package/dist/resources/extensions/gsd/mcp-filter.js +2 -19
- package/dist/resources/extensions/gsd/mcp-tool-name.js +5 -13
- package/dist/resources/extensions/gsd/memory-consolidation-scanner.js +1 -1
- package/dist/resources/extensions/gsd/migrate/safety.js +4 -1
- package/dist/resources/extensions/gsd/milestone-closeout.js +85 -24
- package/dist/resources/extensions/gsd/milestone-planning-persistence.js +2 -2
- package/dist/resources/extensions/gsd/milestone-reopen-events.js +3 -5
- package/dist/resources/extensions/gsd/milestone-settlement.js +2 -2
- package/dist/resources/extensions/gsd/notification-store.js +11 -4
- package/dist/resources/extensions/gsd/notifications.js +12 -7
- package/dist/resources/extensions/gsd/parallel-monitor-overlay.js +6 -4
- package/dist/resources/extensions/gsd/parsers-legacy.js +16 -4
- package/dist/resources/extensions/gsd/paths.js +27 -0
- package/dist/resources/extensions/gsd/pre-execution-checks.js +91 -3
- package/dist/resources/extensions/gsd/preferences-models.js +14 -48
- package/dist/resources/extensions/gsd/projection-flush.js +7 -0
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +4 -4
- package/dist/resources/extensions/gsd/prompts/execute-task.md +3 -2
- package/dist/resources/extensions/gsd/prompts/plan-milestone.md +1 -1
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +2 -2
- package/dist/resources/extensions/gsd/prompts/quick-task.md +1 -1
- package/dist/resources/extensions/gsd/prompts/reassess-roadmap.md +1 -1
- package/dist/resources/extensions/gsd/prompts/refine-slice.md +2 -2
- package/dist/resources/extensions/gsd/prompts/replan-slice.md +2 -2
- package/dist/resources/extensions/gsd/prompts/research-milestone.md +1 -1
- package/dist/resources/extensions/gsd/prompts/research-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/rewrite-docs.md +1 -1
- package/dist/resources/extensions/gsd/prompts/run-uat.md +9 -5
- package/dist/resources/extensions/gsd/prompts/system.md +5 -2
- package/dist/resources/extensions/gsd/prompts/triage-captures.md +1 -1
- package/dist/resources/extensions/gsd/prompts/validate-milestone.md +1 -1
- package/dist/resources/extensions/gsd/prompts/workflow-start.md +2 -1
- package/dist/resources/extensions/gsd/provider-error-guidance.js +1 -5
- package/dist/resources/extensions/gsd/provider-switch-observer.js +1 -1
- package/dist/resources/extensions/gsd/publication.js +87 -0
- package/dist/resources/extensions/gsd/reactive-graph.js +8 -1
- package/dist/resources/extensions/gsd/recovery-classification.js +37 -94
- package/dist/resources/extensions/gsd/roadmap-slices.js +25 -3
- package/dist/resources/extensions/gsd/safety/destructive-confirmation.js +108 -0
- package/dist/resources/extensions/gsd/session-lock.js +1 -1
- package/dist/resources/extensions/gsd/skill-activation.js +3 -6
- package/dist/resources/extensions/gsd/state.js +12 -22
- package/dist/resources/extensions/gsd/stop-notice.js +57 -0
- package/dist/resources/extensions/gsd/tool-contract.js +14 -3
- package/dist/resources/extensions/gsd/tool-presentation-plan.js +4 -4
- package/dist/resources/extensions/gsd/tool-surface-readiness.js +108 -0
- package/dist/resources/extensions/gsd/tools/complete-milestone.js +3 -2
- package/dist/resources/extensions/gsd/tools/complete-slice.js +22 -12
- package/dist/resources/extensions/gsd/tools/complete-task.js +65 -2
- package/dist/resources/extensions/gsd/tools/exec-tool.js +9 -7
- package/dist/resources/extensions/gsd/tools/plan-slice.js +14 -8
- package/dist/resources/extensions/gsd/tools/plan-task.js +2 -2
- package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +2 -2
- package/dist/resources/extensions/gsd/tools/reopen-milestone.js +2 -2
- package/dist/resources/extensions/gsd/tools/reopen-slice.js +2 -2
- package/dist/resources/extensions/gsd/tools/reopen-task.js +2 -2
- package/dist/resources/extensions/gsd/tools/replan-slice.js +2 -2
- package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +67 -2
- package/dist/resources/extensions/gsd/uat-policy.js +42 -16
- package/dist/resources/extensions/gsd/unit-closeout.js +138 -0
- package/dist/resources/extensions/gsd/unit-context-composer.js +74 -1
- package/dist/resources/extensions/gsd/unit-context-manifest.js +4 -27
- package/dist/resources/extensions/gsd/unit-registry.js +367 -0
- package/dist/resources/extensions/gsd/unit-tool-contracts.js +9 -182
- package/dist/resources/extensions/gsd/verdict-parser.js +1 -1
- package/dist/resources/extensions/gsd/verification-verdict.js +2 -1
- package/dist/resources/extensions/gsd/web-app-uat.js +45 -8
- package/dist/resources/extensions/gsd/workflow-event-ledger.js +91 -0
- package/dist/resources/extensions/gsd/workflow-event-vocabulary.js +46 -0
- package/dist/resources/extensions/gsd/workflow-events.js +6 -18
- 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/workflow-reconcile.js +21 -56
- package/dist/resources/extensions/gsd/workflow-tool-surface.js +1 -1
- package/dist/resources/extensions/gsd/worktree-git-recovery.js +15 -9
- package/dist/resources/extensions/gsd/worktree-lifecycle.js +3 -2
- package/dist/resources/extensions/gsd/worktree-manager.js +7 -1
- package/dist/resources/extensions/gsd/worktree-root.js +11 -0
- package/dist/resources/extensions/gsd/worktree-safety.js +28 -26
- package/dist/resources/extensions/gsd/worktree-session-state.js +4 -5
- 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/native-search.js +5 -3
- package/dist/resources/extensions/shared/browser-contract.js +59 -0
- package/dist/resources/extensions/shared/gsd-browser-cli.js +116 -6
- package/dist/resources/shared/gsd-browser-path-sync.js +214 -0
- package/dist/resources/shared/package-manager-detection.js +1 -1
- package/dist/resources/shared/package.json +3 -0
- package/dist/resources/skills/create-skill/SKILL.md +3 -0
- package/dist/resources/skills/create-skill/references/executable-code.md +1 -1
- package/dist/resources/skills/create-skill/references/skill-structure.md +1 -0
- package/dist/resources/skills/create-skill/workflows/add-reference.md +8 -3
- package/dist/resources/skills/create-skill/workflows/add-script.md +4 -2
- package/dist/resources/skills/create-skill/workflows/add-template.md +3 -1
- package/dist/resources/skills/create-skill/workflows/add-workflow.md +8 -3
- package/dist/resources/skills/create-skill/workflows/upgrade-to-router.md +10 -5
- package/dist/resources/skills/create-skill/workflows/verify-skill.md +9 -4
- package/dist/resources/skills/spike-wrap-up/SKILL.md +9 -9
- package/dist/runtime-checks.d.ts +10 -0
- package/dist/runtime-checks.js +27 -0
- package/dist/tsconfig.extensions.tsbuildinfo +1 -1
- package/dist/update-check.d.ts +2 -0
- package/dist/update-check.js +24 -1
- package/dist/update-cmd.js +20 -3
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +13 -13
- package/dist/web/standalone/.next/build-manifest.json +3 -3
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
- 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/update/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/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 +13 -13
- package/dist/web/standalone/.next/server/chunks/5124.js +1 -1
- package/dist/web/standalone/.next/server/chunks/8357.js +2 -2
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware-react-loadable-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/.next/static/chunks/{796.cf859a427a2cb2ac.js → 796.e0bdc932325d7e03.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/{webpack-fbea77b5f9953368.js → webpack-f0285ce91d4ec9ef.js} +1 -1
- package/dist/web/standalone/node_modules/node-pty/build/Makefile +1 -1
- package/dist/web/standalone/package.json +1 -1
- package/dist/worktree-cli.js +3 -6
- package/dist/worktree-status-banner.js +7 -15
- package/package.json +3 -3
- package/packages/cloud-mcp-gateway/package.json +2 -2
- package/packages/contracts/dist/rpc.d.ts +1 -0
- package/packages/contracts/dist/rpc.d.ts.map +1 -1
- package/packages/contracts/dist/rpc.js.map +1 -1
- package/packages/contracts/dist/workflow.d.ts +4 -0
- package/packages/contracts/dist/workflow.d.ts.map +1 -1
- package/packages/contracts/dist/workflow.js.map +1 -1
- 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 +6 -4
- 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/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/tool-execution.d.ts +13 -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 +55 -6
- 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 +2 -0
- 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 +34 -5
- package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.js.map +1 -1
- 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 +7 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-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 +8 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.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 +11 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts +1 -0
- 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 +12 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-auth.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-auth.js +4 -4
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-auth.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/rpc/rpc-mode.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js +3 -1
- 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 -50
- package/packages/mcp-server/dist/cli.js.map +1 -1
- package/packages/mcp-server/dist/moonshot-tool-schema.d.ts +29 -0
- package/packages/mcp-server/dist/moonshot-tool-schema.d.ts.map +1 -0
- package/packages/mcp-server/dist/moonshot-tool-schema.js +50 -0
- package/packages/mcp-server/dist/moonshot-tool-schema.js.map +1 -0
- 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 +452 -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/server.d.ts.map +1 -1
- package/packages/mcp-server/dist/server.js +4 -0
- package/packages/mcp-server/dist/server.js.map +1 -1
- 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 +26 -18
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +178 -82
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/package.json +5 -4
- package/packages/native/package.json +1 -1
- package/packages/pi-agent-core/dist/agent-loop.js +43 -2
- package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/packages/pi-agent-core/dist/harness/env/nodejs.d.ts +1 -0
- package/packages/pi-agent-core/dist/harness/env/nodejs.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/harness/env/nodejs.js +34 -3
- package/packages/pi-agent-core/dist/harness/env/nodejs.js.map +1 -1
- package/packages/pi-agent-core/dist/index.d.ts +1 -0
- package/packages/pi-agent-core/dist/index.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/index.js +3 -0
- package/packages/pi-agent-core/dist/index.js.map +1 -1
- package/packages/pi-agent-core/package.json +1 -1
- package/packages/pi-ai/README.md +1 -0
- package/packages/pi-ai/dist/image-models.generated.d.ts +2 -2
- package/packages/pi-ai/dist/image-models.generated.js +6 -6
- package/packages/pi-ai/dist/image-models.generated.js.map +1 -1
- package/packages/pi-ai/dist/index.d.ts +2 -0
- package/packages/pi-ai/dist/index.d.ts.map +1 -1
- package/packages/pi-ai/dist/index.js +2 -0
- package/packages/pi-ai/dist/index.js.map +1 -1
- package/packages/pi-ai/dist/models.generated.d.ts +35 -125
- package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
- package/packages/pi-ai/dist/models.generated.js +46 -120
- package/packages/pi-ai/dist/models.generated.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.js +12 -7
- package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
- package/packages/pi-ai/dist/providers/google-shared.d.ts +5 -0
- package/packages/pi-ai/dist/providers/google-shared.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/google-shared.js +12 -3
- package/packages/pi-ai/dist/providers/google-shared.js.map +1 -1
- package/packages/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/openai-completions.js +7 -3
- package/packages/pi-ai/dist/providers/openai-completions.js.map +1 -1
- package/packages/pi-ai/dist/utils/moonshot-tool-schema.d.ts +9 -0
- package/packages/pi-ai/dist/utils/moonshot-tool-schema.d.ts.map +1 -0
- package/packages/pi-ai/dist/utils/moonshot-tool-schema.js +34 -0
- package/packages/pi-ai/dist/utils/moonshot-tool-schema.js.map +1 -0
- package/packages/pi-ai/dist/utils/oauth/github-copilot.d.ts.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/github-copilot.js +6 -2
- package/packages/pi-ai/dist/utils/oauth/github-copilot.js.map +1 -1
- package/packages/pi-ai/package.json +3 -2
- package/packages/pi-coding-agent/dist/core/auth-storage.d.ts +2 -2
- package/packages/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/auth-storage.js +19 -13
- package/packages/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/provider-readiness.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/provider-readiness.js +13 -6
- package/packages/pi-coding-agent/dist/core/provider-readiness.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/core/tools/bash.d.ts +11 -0
- package/packages/pi-coding-agent/dist/core/tools/bash.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/bash.js +53 -11
- package/packages/pi-coding-agent/dist/core/tools/bash.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 +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/dist/utils/shell.d.ts +28 -2
- package/packages/pi-coding-agent/dist/utils/shell.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/utils/shell.js +56 -10
- package/packages/pi-coding-agent/dist/utils/shell.js.map +1 -1
- package/packages/pi-coding-agent/package.json +7 -7
- package/packages/pi-tui/dist/index.d.ts +1 -1
- package/packages/pi-tui/dist/index.d.ts.map +1 -1
- package/packages/pi-tui/dist/index.js +1 -1
- 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/tui.d.ts +8 -0
- package/packages/pi-tui/dist/tui.d.ts.map +1 -1
- package/packages/pi-tui/dist/tui.js +72 -18
- 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/GSD-WORKFLOW.md +5 -4
- package/src/resources/extensions/ask-user-questions.ts +7 -2
- package/src/resources/extensions/async-jobs/async-bash-cancel.test.ts +360 -0
- package/src/resources/extensions/async-jobs/async-bash-tool.ts +33 -56
- package/src/resources/extensions/async-jobs/await-tool.test.ts +139 -0
- package/src/resources/extensions/async-jobs/await-tool.ts +82 -12
- package/src/resources/extensions/async-jobs/index.ts +79 -0
- package/src/resources/extensions/async-jobs/job-manager.ts +21 -1
- package/src/resources/extensions/bg-shell/bg-shell-command.ts +6 -6
- package/src/resources/extensions/bg-shell/bg-shell-tool.ts +10 -6
- package/src/resources/extensions/bg-shell/overlay.ts +9 -5
- package/src/resources/extensions/bg-shell/process-manager.ts +50 -25
- package/src/resources/extensions/bg-shell/readiness-detector.ts +12 -0
- package/src/resources/extensions/bg-shell/tests/lifecycle-and-utilities.test.ts +48 -1
- package/src/resources/extensions/bg-shell/utilities.ts +3 -0
- package/src/resources/extensions/browser-tools/engine/managed-gsd-browser.ts +265 -98
- package/src/resources/extensions/browser-tools/engine/selection.ts +90 -4
- package/src/resources/extensions/browser-tools/index.ts +71 -13
- package/src/resources/extensions/browser-tools/tests/browser-engine-selection.test.mjs +83 -13
- package/src/resources/extensions/browser-tools/tests/gsd-browser-launch-config.test.mjs +40 -1
- package/src/resources/extensions/browser-tools/tests/managed-gsd-browser-tools.test.mjs +136 -0
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +537 -202
- 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/gsd/auto/closeout.ts +309 -0
- package/src/resources/extensions/gsd/auto/custom-verify-retry-store.ts +21 -3
- package/src/resources/extensions/gsd/auto/detect-stuck.ts +32 -9
- package/src/resources/extensions/gsd/auto/dispatch-history.ts +168 -0
- package/src/resources/extensions/gsd/auto/dispatch-key.ts +39 -0
- 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 +7 -1
- package/src/resources/extensions/gsd/auto/milestone-lease-reclaim.ts +74 -0
- package/src/resources/extensions/gsd/auto/orchestrator.ts +193 -71
- package/src/resources/extensions/gsd/auto/phase-helpers.ts +199 -0
- package/src/resources/extensions/gsd/auto/phases.ts +58 -3022
- package/src/resources/extensions/gsd/auto/pre-dispatch.ts +704 -0
- package/src/resources/extensions/gsd/auto/session.ts +3 -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-direct-dispatch.ts +18 -48
- package/src/resources/extensions/gsd/auto-dispatch.ts +48 -61
- package/src/resources/extensions/gsd/auto-model-selection.ts +41 -12
- package/src/resources/extensions/gsd/auto-post-unit.ts +40 -8
- package/src/resources/extensions/gsd/auto-prompts.ts +118 -35
- package/src/resources/extensions/gsd/auto-start.ts +42 -21
- package/src/resources/extensions/gsd/auto-tool-tracking.ts +19 -0
- package/src/resources/extensions/gsd/auto-unit-closeout.ts +83 -28
- package/src/resources/extensions/gsd/auto-unit-tool-scope.ts +14 -21
- package/src/resources/extensions/gsd/auto-verification.ts +26 -28
- package/src/resources/extensions/gsd/auto-worktree.ts +45 -95
- package/src/resources/extensions/gsd/auto.ts +72 -17
- package/src/resources/extensions/gsd/blocked-models.ts +49 -0
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +37 -10
- package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +79 -12
- package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +2 -2
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +24 -0
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +251 -47
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +352 -84
- package/src/resources/extensions/gsd/branch-patterns.ts +3 -0
- package/src/resources/extensions/gsd/browser-daemon-auto-prep.ts +108 -0
- package/src/resources/extensions/gsd/browser-evidence.ts +18 -2
- package/src/resources/extensions/gsd/captures.ts +4 -6
- package/src/resources/extensions/gsd/closeout-wizard.ts +102 -0
- package/src/resources/extensions/gsd/commands/context.ts +16 -2
- package/src/resources/extensions/gsd/commands-handlers.ts +46 -3
- package/src/resources/extensions/gsd/commands-mcp-status.ts +2 -2
- package/src/resources/extensions/gsd/commands-workflow-templates.ts +11 -4
- package/src/resources/extensions/gsd/consent-question.ts +431 -0
- package/src/resources/extensions/gsd/consent-verdict.ts +86 -0
- package/src/resources/extensions/gsd/constants.ts +0 -3
- package/src/resources/extensions/gsd/crash-recovery.ts +13 -11
- package/src/resources/extensions/gsd/db/queries.ts +66 -0
- package/src/resources/extensions/gsd/db-writer.ts +11 -19
- package/src/resources/extensions/gsd/dispatch-guard.ts +8 -31
- package/src/resources/extensions/gsd/doctor-engine-checks.ts +5 -4
- package/src/resources/extensions/gsd/doctor-environment.ts +269 -149
- package/src/resources/extensions/gsd/doctor-format.ts +12 -7
- package/src/resources/extensions/gsd/doctor-git-checks.ts +2 -19
- package/src/resources/extensions/gsd/doctor-runtime-checks.ts +13 -15
- package/src/resources/extensions/gsd/engine-hook-contract.ts +79 -0
- package/src/resources/extensions/gsd/error-classifier.ts +11 -0
- package/src/resources/extensions/gsd/exec-sandbox.ts +49 -9
- package/src/resources/extensions/gsd/files.ts +33 -12
- package/src/resources/extensions/gsd/gsd-command-home.ts +13 -3
- package/src/resources/extensions/gsd/gsd-db.ts +4 -3
- package/src/resources/extensions/gsd/guidance.ts +217 -0
- package/src/resources/extensions/gsd/guided-flow.ts +161 -26
- package/src/resources/extensions/gsd/health-widget.ts +91 -27
- package/src/resources/extensions/gsd/markdown-renderer.ts +11 -0
- package/src/resources/extensions/gsd/mcp-bridge.ts +39 -0
- package/src/resources/extensions/gsd/mcp-filter.ts +2 -23
- package/src/resources/extensions/gsd/mcp-tool-name.ts +6 -11
- package/src/resources/extensions/gsd/memory-consolidation-scanner.ts +1 -1
- package/src/resources/extensions/gsd/migrate/safety.ts +4 -1
- package/src/resources/extensions/gsd/milestone-closeout.ts +109 -24
- package/src/resources/extensions/gsd/milestone-planning-persistence.ts +2 -2
- package/src/resources/extensions/gsd/milestone-reopen-events.ts +3 -6
- package/src/resources/extensions/gsd/milestone-settlement.ts +2 -2
- package/src/resources/extensions/gsd/notification-store.ts +26 -3
- package/src/resources/extensions/gsd/notifications.ts +13 -6
- package/src/resources/extensions/gsd/parallel-monitor-overlay.ts +6 -4
- package/src/resources/extensions/gsd/parsers-legacy.ts +16 -4
- package/src/resources/extensions/gsd/paths.ts +33 -0
- package/src/resources/extensions/gsd/pre-execution-checks.ts +109 -3
- package/src/resources/extensions/gsd/preferences-models.ts +12 -47
- package/src/resources/extensions/gsd/projection-flush.ts +20 -0
- package/src/resources/extensions/gsd/prompts/complete-slice.md +4 -4
- package/src/resources/extensions/gsd/prompts/execute-task.md +3 -2
- package/src/resources/extensions/gsd/prompts/plan-milestone.md +1 -1
- package/src/resources/extensions/gsd/prompts/plan-slice.md +2 -2
- package/src/resources/extensions/gsd/prompts/quick-task.md +1 -1
- package/src/resources/extensions/gsd/prompts/reassess-roadmap.md +1 -1
- package/src/resources/extensions/gsd/prompts/refine-slice.md +2 -2
- package/src/resources/extensions/gsd/prompts/replan-slice.md +2 -2
- package/src/resources/extensions/gsd/prompts/research-milestone.md +1 -1
- package/src/resources/extensions/gsd/prompts/research-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/rewrite-docs.md +1 -1
- package/src/resources/extensions/gsd/prompts/run-uat.md +9 -5
- package/src/resources/extensions/gsd/prompts/system.md +5 -2
- package/src/resources/extensions/gsd/prompts/triage-captures.md +1 -1
- package/src/resources/extensions/gsd/prompts/validate-milestone.md +1 -1
- package/src/resources/extensions/gsd/prompts/workflow-start.md +2 -1
- package/src/resources/extensions/gsd/provider-error-guidance.ts +4 -9
- package/src/resources/extensions/gsd/provider-switch-observer.ts +1 -1
- package/src/resources/extensions/gsd/publication.ts +122 -0
- package/src/resources/extensions/gsd/reactive-graph.ts +11 -1
- package/src/resources/extensions/gsd/recovery-classification.ts +42 -96
- package/src/resources/extensions/gsd/roadmap-slices.ts +28 -3
- package/src/resources/extensions/gsd/safety/destructive-confirmation.ts +134 -0
- package/src/resources/extensions/gsd/session-lock.ts +1 -1
- package/src/resources/extensions/gsd/skill-activation.ts +3 -6
- package/src/resources/extensions/gsd/state.ts +16 -22
- package/src/resources/extensions/gsd/stop-notice.ts +75 -0
- 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-loop.test.ts +206 -22
- package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +97 -1
- package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +273 -37
- 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 +77 -1
- package/src/resources/extensions/gsd/tests/auto-phases-lifecycle.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/auto-remote-session-lock-cleanup.test.ts +65 -3
- 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/blocked-models.test.ts +19 -0
- package/src/resources/extensions/gsd/tests/browser-automation-contract-fixture.ts +39 -0
- package/src/resources/extensions/gsd/tests/browser-contract.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/browser-daemon-auto-prep.test.ts +144 -0
- package/src/resources/extensions/gsd/tests/checkout-branch-stash-guard.test.ts +66 -1
- package/src/resources/extensions/gsd/tests/clear-stale-autostart.test.ts +22 -0
- package/src/resources/extensions/gsd/tests/commands-verdict.test.ts +8 -7
- package/src/resources/extensions/gsd/tests/complete-slice-verification-gate.test.ts +42 -0
- package/src/resources/extensions/gsd/tests/complete-task.test.ts +141 -5
- package/src/resources/extensions/gsd/tests/consent-question.test.ts +351 -0
- package/src/resources/extensions/gsd/tests/custom-verify-retry-store.test.ts +67 -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 +12 -11
- package/src/resources/extensions/gsd/tests/derive-state-helpers.test.ts +36 -0
- package/src/resources/extensions/gsd/tests/destructive-confirmation.test.ts +303 -0
- package/src/resources/extensions/gsd/tests/discuss-routing-fixes.test.ts +12 -2
- package/src/resources/extensions/gsd/tests/dispatch-history.test.ts +328 -0
- package/src/resources/extensions/gsd/tests/dispatch-run-uat-browser-tools.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/dist-redirect.mjs +8 -0
- package/src/resources/extensions/gsd/tests/doctor-git-checks-terminal.test.ts +73 -0
- package/src/resources/extensions/gsd/tests/dynamic-bash-no-cap.test.ts +132 -0
- package/src/resources/extensions/gsd/tests/engine-hook-contract.test.ts +148 -0
- 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/exec-graceful-kill.test.ts +193 -0
- package/src/resources/extensions/gsd/tests/exec-tool.test.ts +29 -1
- package/src/resources/extensions/gsd/tests/extension-bootstrap-isolation.test.ts +35 -1
- package/src/resources/extensions/gsd/tests/gsd-command-home.test.ts +120 -0
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +27 -0
- package/src/resources/extensions/gsd/tests/guidance.test.ts +148 -0
- package/src/resources/extensions/gsd/tests/guided-dispatch-root.test.ts +18 -6
- package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +53 -11
- package/src/resources/extensions/gsd/tests/integration/auto-worktree.test.ts +88 -58
- package/src/resources/extensions/gsd/tests/integration/doctor-environment-async.test.ts +104 -0
- package/src/resources/extensions/gsd/tests/integration/gsd-integration-fixture.ts +80 -0
- package/src/resources/extensions/gsd/tests/integration/run-uat.test.ts +217 -0
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +47 -16
- package/src/resources/extensions/gsd/tests/mcp-project-config.test.ts +3 -1
- 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-closeout.test.ts +95 -4
- 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-unittype-mapping.test.ts +32 -1
- package/src/resources/extensions/gsd/tests/notification-store.test.ts +32 -0
- package/src/resources/extensions/gsd/tests/notifications.test.ts +64 -9
- package/src/resources/extensions/gsd/tests/oauth-api-model-routing.test.ts +167 -0
- package/src/resources/extensions/gsd/tests/parallel-research-dispatch.test.ts +18 -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 +143 -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 +242 -0
- package/src/resources/extensions/gsd/tests/plan-gate-failed-doctor-heal-hint.test.ts +3 -3
- package/src/resources/extensions/gsd/tests/post-exec-retry-bypass.test.ts +63 -2
- package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +193 -1
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +10 -2
- package/src/resources/extensions/gsd/tests/prompt-db.test.ts +124 -6
- package/src/resources/extensions/gsd/tests/provider-error-guidance.test.ts +3 -3
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +2 -4
- package/src/resources/extensions/gsd/tests/publication.test.ts +120 -0
- package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +157 -0
- package/src/resources/extensions/gsd/tests/remote-notification-from-desktop.test.ts +31 -81
- package/src/resources/extensions/gsd/tests/roadmap-slices.test.ts +68 -0
- package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +27 -2
- 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/stop-auto-race-null-unit.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/stop-notice.test.ts +70 -0
- package/src/resources/extensions/gsd/tests/teardown-chdir-failure-clears-registry.test.ts +17 -0
- package/src/resources/extensions/gsd/tests/token-tool-gating.test.ts +80 -2
- package/src/resources/extensions/gsd/tests/tool-invocation-error-loop-break.test.ts +8 -0
- package/src/resources/extensions/gsd/tests/tool-surface-readiness.test.ts +329 -0
- package/src/resources/extensions/gsd/tests/tool-unavailable-retry.test.ts +33 -0
- package/src/resources/extensions/gsd/tests/transport-gate-double-complete.test.ts +139 -0
- package/src/resources/extensions/gsd/tests/uat-policy.test.ts +112 -29
- package/src/resources/extensions/gsd/tests/unit-closeout.test.ts +209 -0
- package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +67 -2
- package/src/resources/extensions/gsd/tests/unit-registry.test.ts +163 -0
- package/src/resources/extensions/gsd/tests/uok-audit-unified.test.ts +8 -0
- package/src/resources/extensions/gsd/tests/uok-plan-v2-wiring.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/verification-verdict.test.ts +2 -0
- package/src/resources/extensions/gsd/tests/web-app-uat.test.ts +44 -1
- package/src/resources/extensions/gsd/tests/workflow-events.test.ts +19 -0
- package/src/resources/extensions/gsd/tests/workflow-mcp-readiness-cache.test.ts +119 -0
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +67 -4
- package/src/resources/extensions/gsd/tests/workflow-phase-contract-matrix.test.ts +332 -0
- package/src/resources/extensions/gsd/tests/workflow-reconcile.test.ts +20 -0
- package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +92 -0
- package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +275 -40
- package/src/resources/extensions/gsd/tests/worktree-health-dispatch.test.ts +1 -1
- 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.test.ts +18 -0
- package/src/resources/extensions/gsd/tests/write-gate-seam.test.ts +358 -0
- package/src/resources/extensions/gsd/tests/write-gate.test.ts +67 -1
- package/src/resources/extensions/gsd/tool-contract.ts +38 -3
- package/src/resources/extensions/gsd/tool-presentation-plan.ts +4 -4
- package/src/resources/extensions/gsd/tool-surface-readiness.ts +183 -0
- package/src/resources/extensions/gsd/tools/complete-milestone.ts +3 -2
- package/src/resources/extensions/gsd/tools/complete-slice.ts +22 -12
- package/src/resources/extensions/gsd/tools/complete-task.ts +90 -2
- package/src/resources/extensions/gsd/tools/exec-tool.ts +8 -7
- package/src/resources/extensions/gsd/tools/plan-slice.ts +14 -8
- package/src/resources/extensions/gsd/tools/plan-task.ts +2 -2
- package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +2 -2
- package/src/resources/extensions/gsd/tools/reopen-milestone.ts +2 -2
- package/src/resources/extensions/gsd/tools/reopen-slice.ts +2 -2
- package/src/resources/extensions/gsd/tools/reopen-task.ts +2 -2
- package/src/resources/extensions/gsd/tools/replan-slice.ts +2 -2
- package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +81 -2
- package/src/resources/extensions/gsd/uat-policy.ts +62 -16
- package/src/resources/extensions/gsd/unit-closeout.ts +201 -0
- package/src/resources/extensions/gsd/unit-context-composer.ts +111 -1
- package/src/resources/extensions/gsd/unit-context-manifest.ts +4 -28
- package/src/resources/extensions/gsd/unit-registry.ts +442 -0
- package/src/resources/extensions/gsd/unit-tool-contracts.ts +27 -192
- package/src/resources/extensions/gsd/verdict-parser.ts +1 -1
- package/src/resources/extensions/gsd/verification-verdict.ts +4 -2
- package/src/resources/extensions/gsd/web-app-uat.ts +51 -8
- package/src/resources/extensions/gsd/workflow-event-ledger.ts +131 -0
- package/src/resources/extensions/gsd/workflow-event-vocabulary.ts +59 -0
- package/src/resources/extensions/gsd/workflow-events.ts +12 -20
- 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/workflow-reconcile.ts +29 -62
- package/src/resources/extensions/gsd/workflow-tool-surface.ts +4 -1
- package/src/resources/extensions/gsd/worktree-git-recovery.ts +15 -9
- package/src/resources/extensions/gsd/worktree-lifecycle.ts +3 -8
- package/src/resources/extensions/gsd/worktree-manager.ts +6 -1
- package/src/resources/extensions/gsd/worktree-root.ts +12 -0
- package/src/resources/extensions/gsd/worktree-safety.ts +41 -39
- package/src/resources/extensions/gsd/worktree-session-state.ts +3 -5
- 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/native-search.ts +5 -3
- package/src/resources/extensions/shared/browser-contract.ts +66 -0
- package/src/resources/extensions/shared/gsd-browser-cli.ts +141 -6
- package/src/resources/shared/gsd-browser-path-sync.ts +273 -0
- package/src/resources/shared/package-manager-detection.ts +1 -1
- package/src/resources/shared/package.json +3 -0
- package/src/resources/skills/create-skill/SKILL.md +3 -0
- package/src/resources/skills/create-skill/references/executable-code.md +1 -1
- package/src/resources/skills/create-skill/references/skill-structure.md +1 -0
- package/src/resources/skills/create-skill/workflows/add-reference.md +8 -3
- package/src/resources/skills/create-skill/workflows/add-script.md +4 -2
- package/src/resources/skills/create-skill/workflows/add-template.md +3 -1
- package/src/resources/skills/create-skill/workflows/add-workflow.md +8 -3
- package/src/resources/skills/create-skill/workflows/upgrade-to-router.md +10 -5
- package/src/resources/skills/create-skill/workflows/verify-skill.md +9 -4
- package/src/resources/skills/spike-wrap-up/SKILL.md +9 -9
- package/dist/resources/extensions/gsd/user-input-boundary.js +0 -218
- package/dist/resources/skills/gsd-browser/SKILL.md +0 -41
- package/src/resources/extensions/gsd/tests/user-input-boundary.test.ts +0 -173
- package/src/resources/extensions/gsd/user-input-boundary.ts +0 -216
- package/src/resources/skills/gsd-browser/SKILL.md +0 -41
- /package/dist/web/standalone/.next/static/{C24pqUd-aru-l0Dp0gLZP → xyMkEaICFHJoa98VgJyzY}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{C24pqUd-aru-l0Dp0gLZP → xyMkEaICFHJoa98VgJyzY}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
// GSD Extension — Guidance module tests
|
|
2
|
+
// The catalog is the test surface: every typed finding must resolve to
|
|
3
|
+
// non-empty remediation, and load-bearing phrases must survive edits.
|
|
4
|
+
|
|
5
|
+
import { describe, test } from "node:test";
|
|
6
|
+
import assert from "node:assert/strict";
|
|
7
|
+
|
|
8
|
+
import {
|
|
9
|
+
formatGuidance,
|
|
10
|
+
recoveryRemediation,
|
|
11
|
+
needsAttentionBlockerGuidance,
|
|
12
|
+
needsRemediationBlockerGuidance,
|
|
13
|
+
uatSignoffBlockerGuidance,
|
|
14
|
+
worktreeCreationFailedGuidance,
|
|
15
|
+
crashResumeHint,
|
|
16
|
+
doctorFixHint,
|
|
17
|
+
type RecoveryGuidanceKey,
|
|
18
|
+
} from "../guidance.js";
|
|
19
|
+
import { classifyFailure, type RecoveryFailureKind } from "../recovery-classification.js";
|
|
20
|
+
import { isValidationBlockedState } from "../validation-block-guard.js";
|
|
21
|
+
import type { GSDState } from "../types.js";
|
|
22
|
+
|
|
23
|
+
const RECOVERY_KEYS: RecoveryGuidanceKey[] = [
|
|
24
|
+
"tool-schema",
|
|
25
|
+
"tool-contract",
|
|
26
|
+
"tool-unavailable",
|
|
27
|
+
"deterministic-policy",
|
|
28
|
+
"lifecycle-progression",
|
|
29
|
+
"stale-worker",
|
|
30
|
+
"worktree-invalid",
|
|
31
|
+
"verification-drift",
|
|
32
|
+
"reconciliation-drift",
|
|
33
|
+
"illegal-transition",
|
|
34
|
+
"runtime-unknown",
|
|
35
|
+
"provider-transient",
|
|
36
|
+
"provider-permanent",
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
describe("guidance catalog", () => {
|
|
40
|
+
test("every recovery guidance key resolves to non-empty remediation", () => {
|
|
41
|
+
for (const key of RECOVERY_KEYS) {
|
|
42
|
+
const remediation = recoveryRemediation(key);
|
|
43
|
+
assert.ok(remediation.length > 0, `empty remediation for ${key}`);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
test("classifyFailure carries catalog remediation for every failure kind", () => {
|
|
48
|
+
const kinds: RecoveryFailureKind[] = [
|
|
49
|
+
"tool-schema",
|
|
50
|
+
"tool-contract",
|
|
51
|
+
"deterministic-policy",
|
|
52
|
+
"lifecycle-progression",
|
|
53
|
+
"stale-worker",
|
|
54
|
+
"worktree-invalid",
|
|
55
|
+
"verification-drift",
|
|
56
|
+
"reconciliation-drift",
|
|
57
|
+
"runtime-unknown",
|
|
58
|
+
];
|
|
59
|
+
for (const kind of kinds) {
|
|
60
|
+
const result = classifyFailure({ error: new Error("boom"), failureKind: kind });
|
|
61
|
+
assert.equal(result.failureKind, kind);
|
|
62
|
+
assert.equal(result.exitReason, kind);
|
|
63
|
+
assert.ok(result.remediation.length > 0, `empty remediation for ${kind}`);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
test("escalation kinds with weak guidance now name a concrete command", () => {
|
|
68
|
+
for (const key of ["stale-worker", "worktree-invalid", "verification-drift", "reconciliation-drift"] as const) {
|
|
69
|
+
assert.match(recoveryRemediation(key), /\/gsd /, `no command in remediation for ${key}`);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
test("formatGuidance numbers steps under the summary", () => {
|
|
74
|
+
const text = formatGuidance({ summary: "It broke.", steps: ["Fix it.", "Retry."] });
|
|
75
|
+
assert.equal(text, "It broke.\n\n1. Fix it.\n2. Retry.");
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
test("formatGuidance with no steps is just the summary", () => {
|
|
79
|
+
assert.equal(formatGuidance({ summary: "All good.", steps: [] }), "All good.");
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
describe("milestone blocker guidance", () => {
|
|
84
|
+
test("needs-attention blocker keeps the phrase the validation-block guard matches", () => {
|
|
85
|
+
const state = { phase: "blocked", blockers: [needsAttentionBlockerGuidance("M005")] } as unknown as GSDState;
|
|
86
|
+
assert.ok(isValidationBlockedState(state));
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
test("needs-remediation blocker keeps the phrase the validation-block guard matches", () => {
|
|
90
|
+
const state = { phase: "blocked", blockers: [needsRemediationBlockerGuidance("M005")] } as unknown as GSDState;
|
|
91
|
+
assert.ok(isValidationBlockedState(state));
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
test("blockers carry the milestone id and concrete fix commands", () => {
|
|
95
|
+
const text = needsAttentionBlockerGuidance("M007");
|
|
96
|
+
assert.match(text, /M007/);
|
|
97
|
+
assert.match(text, /\/gsd status/);
|
|
98
|
+
assert.match(text, /\/gsd validate-milestone/);
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
test("UAT sign-off guidance explains direct dispatch target", () => {
|
|
102
|
+
const missing = uatSignoffBlockerGuidance("M007", "S02");
|
|
103
|
+
const failing = uatSignoffBlockerGuidance("M007", "S02", "FAIL");
|
|
104
|
+
|
|
105
|
+
for (const text of [missing, failing]) {
|
|
106
|
+
assert.match(text, /Manual UAT sign-off \(PASS\) is required before milestone closure/);
|
|
107
|
+
assert.match(text, /\/gsd dispatch uat/);
|
|
108
|
+
assert.match(text, /most recently completed slice/);
|
|
109
|
+
assert.match(text, /re-run UAT for S02/);
|
|
110
|
+
assert.match(text, /gsd_uat_result_save/);
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
test("worktree creation failure guidance does not claim bootstrap continues", () => {
|
|
115
|
+
const text = worktreeCreationFailedGuidance("M007", "boom");
|
|
116
|
+
|
|
117
|
+
assert.match(text, /Auto-worktree creation for M007 failed: boom\. Continuing in project root\./);
|
|
118
|
+
assert.match(text, /Worktree isolation is degraded for this session\./);
|
|
119
|
+
assert.doesNotMatch(text, /work continues in the project root/i);
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
describe("crash resume hints", () => {
|
|
124
|
+
test("bootstrap crash reports no work lost", () => {
|
|
125
|
+
assert.match(crashResumeHint("starting", "bootstrap") ?? "", /No work was lost/);
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
test("unit classes map to their resume hints", () => {
|
|
129
|
+
assert.match(crashResumeHint("research-milestone", "M001") ?? "", /may be incomplete/);
|
|
130
|
+
assert.match(crashResumeHint("execute-task", "T001") ?? "", /completed work is preserved/);
|
|
131
|
+
assert.match(crashResumeHint("complete-slice", "S001") ?? "", /interrupted/);
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
test("unknown unit types yield no hint", () => {
|
|
135
|
+
assert.equal(crashResumeHint("triage-captures", "X"), undefined);
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
describe("doctor fix hints", () => {
|
|
140
|
+
test("known codes resolve to a hint", () => {
|
|
141
|
+
assert.ok(doctorFixHint("stale_crash_lock"));
|
|
142
|
+
assert.ok(doctorFixHint("db_unavailable"));
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
test("codes without authored guidance resolve to undefined", () => {
|
|
146
|
+
assert.equal(doctorFixHint("delimiter_in_title"), undefined);
|
|
147
|
+
});
|
|
148
|
+
});
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
_dispatchWorkflowForTest,
|
|
12
12
|
resolveGuidedDispatchProjectRoot,
|
|
13
13
|
} from "../guided-flow.ts";
|
|
14
|
+
import { getRequiredWorkflowToolsForUnit } from "../unit-tool-contracts.ts";
|
|
14
15
|
|
|
15
16
|
test("guided dispatch falls back to cwd only when no project root is supplied", () => {
|
|
16
17
|
const cwd = process.cwd();
|
|
@@ -77,12 +78,8 @@ test("guided dispatch passes the explicit project root through model and compati
|
|
|
77
78
|
seen.modelRoot = projectRoot;
|
|
78
79
|
return { routing: null, appliedModel: null };
|
|
79
80
|
},
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
_requiredTools: string[],
|
|
83
|
-
options?: { projectRoot?: string },
|
|
84
|
-
) => {
|
|
85
|
-
seen.compatibilityRoot = options?.projectRoot ?? "";
|
|
81
|
+
getDispatchReadinessError: (input: { projectRoot?: string }) => {
|
|
82
|
+
seen.compatibilityRoot = input.projectRoot ?? "";
|
|
86
83
|
return null;
|
|
87
84
|
},
|
|
88
85
|
},
|
|
@@ -119,6 +116,7 @@ test("guided dispatch accepts workflow MCP tools absent from parent active tool
|
|
|
119
116
|
getProviderAuthMode: () => "externalCli",
|
|
120
117
|
},
|
|
121
118
|
ui: {
|
|
119
|
+
setStatus: () => {},
|
|
122
120
|
notify: (message: string) => {
|
|
123
121
|
notifications.push(message);
|
|
124
122
|
},
|
|
@@ -134,8 +132,22 @@ test("guided dispatch accepts workflow MCP tools absent from parent active tool
|
|
|
134
132
|
"write",
|
|
135
133
|
];
|
|
136
134
|
|
|
135
|
+
// The workflow MCP server registers its tools out of band, so the unit's
|
|
136
|
+
// required workflow tools show up in the registered tool snapshot
|
|
137
|
+
// (getAllTools) under the MCP server prefix without ever entering the parent
|
|
138
|
+
// session's active tool surface (getActiveTools). This is exactly the shape
|
|
139
|
+
// the readiness gate must accept. Derive the surface from the unit contract
|
|
140
|
+
// so this test stays correct if discuss-milestone's required tools change.
|
|
141
|
+
const registeredTools = [
|
|
142
|
+
...activeTools,
|
|
143
|
+
...getRequiredWorkflowToolsForUnit("discuss-milestone").map(
|
|
144
|
+
(tool) => `mcp__gsd-workflow__${tool}`,
|
|
145
|
+
),
|
|
146
|
+
];
|
|
147
|
+
|
|
137
148
|
const pi = {
|
|
138
149
|
getActiveTools: () => [...activeTools],
|
|
150
|
+
getAllTools: () => registeredTools.map((name) => ({ name })),
|
|
139
151
|
setActiveTools: (tools: string[]) => {
|
|
140
152
|
activeTools = [...tools];
|
|
141
153
|
},
|
package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts
CHANGED
|
@@ -35,6 +35,7 @@ import {
|
|
|
35
35
|
insertTask,
|
|
36
36
|
openDatabase,
|
|
37
37
|
} from "../../gsd-db.ts";
|
|
38
|
+
import { createGsdIntegrationProject } from "./gsd-integration-fixture.ts";
|
|
38
39
|
|
|
39
40
|
function run(cmd: string, cwd: string): string {
|
|
40
41
|
// Safe: all inputs are hardcoded test strings, not user input
|
|
@@ -42,17 +43,12 @@ function run(cmd: string, cwd: string): string {
|
|
|
42
43
|
}
|
|
43
44
|
|
|
44
45
|
function createTempRepo(): string {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
writeFileSync(join(dir, ".gsd", "STATE.md"), "# State\n");
|
|
52
|
-
run("git add .", dir);
|
|
53
|
-
run("git commit -m init", dir);
|
|
54
|
-
run("git branch -M main", dir);
|
|
55
|
-
return dir;
|
|
46
|
+
return createGsdIntegrationProject({
|
|
47
|
+
prefix: "wt-ms-merge-test-",
|
|
48
|
+
initialFiles: {
|
|
49
|
+
".gsd/STATE.md": "# State\n",
|
|
50
|
+
},
|
|
51
|
+
}).root;
|
|
56
52
|
}
|
|
57
53
|
|
|
58
54
|
function createTempRepoWithExternalGsd(): { repo: string; externalState: string } {
|
|
@@ -784,6 +780,52 @@ describe("auto-worktree-milestone-merge", { timeout: 300_000 }, () => {
|
|
|
784
780
|
);
|
|
785
781
|
});
|
|
786
782
|
|
|
783
|
+
test("#2156 (legacy): mergeMilestoneToMain removes external-state worktrees created under .gsd/worktrees/", () => {
|
|
784
|
+
const { repo, externalState } = freshRepoWithExternalGsd();
|
|
785
|
+
// Worktrees created by older versions live at .gsd/worktrees/<MID>; git
|
|
786
|
+
// resolves the symlink and registers them under external state. Canonical
|
|
787
|
+
// .gsd-worktrees/ creation never crosses the symlink, so this coverage
|
|
788
|
+
// creates the legacy worktree explicitly. createAutoWorktree chdirs into
|
|
789
|
+
// the new worktree and mergeMilestoneToMain reads process.cwd() as the
|
|
790
|
+
// worktree cwd, so mirror that here.
|
|
791
|
+
const wtPath = join(repo, ".gsd", "worktrees", "M216");
|
|
792
|
+
run(`git worktree add -b milestone/M216 "${wtPath}"`, repo);
|
|
793
|
+
process.chdir(wtPath);
|
|
794
|
+
|
|
795
|
+
addSliceToMilestone(repo, wtPath, "M216", "S01", "Legacy external cleanup", [
|
|
796
|
+
{ file: "legacy-external-cleanup.ts", content: "export const legacyExternalCleanup = true;\n", message: "add legacy external cleanup" },
|
|
797
|
+
]);
|
|
798
|
+
|
|
799
|
+
const realWtPath = realpathSync(wtPath);
|
|
800
|
+
assert.ok(
|
|
801
|
+
realWtPath.startsWith(externalState),
|
|
802
|
+
`legacy worktree should be registered under external .gsd state, got ${realWtPath}`,
|
|
803
|
+
);
|
|
804
|
+
|
|
805
|
+
// Recreate the exact divergence from #1852: local .gsd/ is replaced with a
|
|
806
|
+
// stale real directory, so the computed path no longer matches git's record.
|
|
807
|
+
unlinkSync(join(repo, ".gsd"));
|
|
808
|
+
mkdirSync(join(repo, ".gsd", "worktrees", "M216"), { recursive: true });
|
|
809
|
+
writeFileSync(join(repo, ".gsd", "STATE.md"), "# Local stale state\n");
|
|
810
|
+
writeFileSync(join(repo, ".gsd", "worktrees", "M216", "stale.txt"), "stale local artifact\n");
|
|
811
|
+
|
|
812
|
+
const roadmap = makeRoadmap("M216", "Legacy external cleanup", [
|
|
813
|
+
{ id: "S01", title: "Legacy external cleanup" },
|
|
814
|
+
]);
|
|
815
|
+
|
|
816
|
+
mergeMilestoneToMain(repo, "M216", roadmap);
|
|
817
|
+
|
|
818
|
+
assert.ok(
|
|
819
|
+
!run("git worktree list", repo).includes("M216"),
|
|
820
|
+
"merged legacy milestone worktree should be removed from git worktree list",
|
|
821
|
+
);
|
|
822
|
+
assert.ok(!existsSync(realWtPath), "real external worktree directory should be removed");
|
|
823
|
+
assert.ok(
|
|
824
|
+
!run("git branch", repo).includes("milestone/M216"),
|
|
825
|
+
"milestone branch should be deleted after merge cleanup",
|
|
826
|
+
);
|
|
827
|
+
});
|
|
828
|
+
|
|
787
829
|
test("#2912: MERGE_HEAD cleaned up after squash-merge conflict", () => {
|
|
788
830
|
const repo = freshRepo();
|
|
789
831
|
const wtPath = createAutoWorktree(repo, "M291");
|
|
@@ -11,6 +11,11 @@ import { mkdtempSync, mkdirSync, writeFileSync, rmSync, existsSync, realpathSync
|
|
|
11
11
|
import { join } from "node:path";
|
|
12
12
|
import { tmpdir } from "node:os";
|
|
13
13
|
import { execSync } from "node:child_process";
|
|
14
|
+
import {
|
|
15
|
+
commitAll,
|
|
16
|
+
createGsdIntegrationProject,
|
|
17
|
+
writeGsdMilestoneContext,
|
|
18
|
+
} from "./gsd-integration-fixture.ts";
|
|
14
19
|
|
|
15
20
|
import {
|
|
16
21
|
createAutoWorktree,
|
|
@@ -32,17 +37,12 @@ function run(command: string, cwd: string): string {
|
|
|
32
37
|
}
|
|
33
38
|
|
|
34
39
|
function createTempRepo(): string {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
run("git add .", dir);
|
|
42
|
-
run("git commit -m init", dir);
|
|
43
|
-
// Ensure branch is called main
|
|
44
|
-
run("git branch -M main", dir);
|
|
45
|
-
return dir;
|
|
40
|
+
return createGsdIntegrationProject("auto-wt-test-").root;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function commitMilestoneContext(repo: string, milestoneId: string): void {
|
|
44
|
+
writeGsdMilestoneContext(repo, milestoneId);
|
|
45
|
+
commitAll(repo, "add milestone");
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
describe("auto-worktree lifecycle", () => {
|
|
@@ -59,13 +59,7 @@ describe("auto-worktree lifecycle", () => {
|
|
|
59
59
|
|
|
60
60
|
test("create → detect → teardown", () => {
|
|
61
61
|
tempDir = createTempRepo();
|
|
62
|
-
|
|
63
|
-
// Create .gsd/milestones/M003 with a dummy file (simulates planning artifacts)
|
|
64
|
-
const msDir = join(tempDir, ".gsd", "milestones", "M003");
|
|
65
|
-
mkdirSync(msDir, { recursive: true });
|
|
66
|
-
writeFileSync(join(msDir, "CONTEXT.md"), "# M003 Context\n");
|
|
67
|
-
run("git add .", tempDir);
|
|
68
|
-
run("git commit -m \"add milestone\"", tempDir);
|
|
62
|
+
commitMilestoneContext(tempDir, "M003");
|
|
69
63
|
|
|
70
64
|
// ─── createAutoWorktree ──────────────────────────────────────────
|
|
71
65
|
const wtPath = createAutoWorktree(tempDir, "M003");
|
|
@@ -112,11 +106,7 @@ describe("auto-worktree lifecycle", () => {
|
|
|
112
106
|
|
|
113
107
|
test("re-entry: create again, exit without teardown, re-enter", () => {
|
|
114
108
|
tempDir = createTempRepo();
|
|
115
|
-
|
|
116
|
-
mkdirSync(msDir, { recursive: true });
|
|
117
|
-
writeFileSync(join(msDir, "CONTEXT.md"), "# M003 Context\n");
|
|
118
|
-
run("git add .", tempDir);
|
|
119
|
-
run("git commit -m \"add milestone\"", tempDir);
|
|
109
|
+
commitMilestoneContext(tempDir, "M003");
|
|
120
110
|
|
|
121
111
|
const wtPath2 = createAutoWorktree(tempDir, "M003");
|
|
122
112
|
assert.ok(existsSync(wtPath2), "worktree re-created");
|
|
@@ -144,6 +134,21 @@ describe("auto-worktree lifecycle", () => {
|
|
|
144
134
|
teardownAutoWorktree(tempDir, "M003");
|
|
145
135
|
});
|
|
146
136
|
|
|
137
|
+
test("isInAutoWorktree returns false when ambient cwd was deleted", (t) => {
|
|
138
|
+
const cwd = t.mock.method(process, "cwd", () => {
|
|
139
|
+
const err = new Error("process.cwd failed") as NodeJS.ErrnoException;
|
|
140
|
+
err.code = "ENOENT";
|
|
141
|
+
err.syscall = "uv_cwd";
|
|
142
|
+
throw err;
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
try {
|
|
146
|
+
assert.equal(isInAutoWorktree("/repo"), false);
|
|
147
|
+
} finally {
|
|
148
|
+
cwd.mock.restore();
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
|
|
147
152
|
test("symlink-resolved auto worktree is detected after module state reset", () => {
|
|
148
153
|
tempDir = createTempRepo();
|
|
149
154
|
const savedGsdHome = process.env.GSD_HOME;
|
|
@@ -192,13 +197,62 @@ describe("auto-worktree lifecycle", () => {
|
|
|
192
197
|
}
|
|
193
198
|
});
|
|
194
199
|
|
|
200
|
+
test("legacy symlink-resolved auto worktree is detected after module state reset", () => {
|
|
201
|
+
tempDir = createTempRepo();
|
|
202
|
+
const savedGsdHome = process.env.GSD_HOME;
|
|
203
|
+
const fakeHome = realpathSync(mkdtempSync(join(tmpdir(), "auto-wt-home-legacy-")));
|
|
204
|
+
const storage = join(fakeHome, ".gsd", "projects", "abc123def456");
|
|
205
|
+
mkdirSync(join(storage, "milestones", "M001"), { recursive: true });
|
|
206
|
+
writeFileSync(join(storage, "milestones", "M001", "CONTEXT.md"), "# M001\n");
|
|
207
|
+
symlinkSync(storage, join(tempDir, ".gsd"));
|
|
208
|
+
process.env.GSD_HOME = join(fakeHome, ".gsd");
|
|
209
|
+
|
|
210
|
+
try {
|
|
211
|
+
// Worktrees created by older versions live at .gsd/worktrees/<MID>;
|
|
212
|
+
// git resolves the symlink and registers them under external state.
|
|
213
|
+
// Detection must keep working for them — canonical .gsd-worktrees/
|
|
214
|
+
// creation never crosses the symlink, so create the legacy worktree
|
|
215
|
+
// explicitly.
|
|
216
|
+
const wtPath = join(tempDir, ".gsd", "worktrees", "M001");
|
|
217
|
+
run(`git worktree add -b milestone/M001 "${wtPath}"`, tempDir);
|
|
218
|
+
const realWtPath = realpathSync(wtPath);
|
|
219
|
+
assert.ok(realWtPath.startsWith(storage), "git registered the symlink-resolved worktree path");
|
|
220
|
+
|
|
221
|
+
_resetAutoWorktreeOriginalBaseForTests();
|
|
222
|
+
process.chdir(realWtPath);
|
|
223
|
+
|
|
224
|
+
assert.ok(isInAutoWorktree(tempDir), "structural detection works without module originalBase");
|
|
225
|
+
const resolved = getAutoWorktreePath(realWtPath, "M001");
|
|
226
|
+
assert.ok(resolved, "existing legacy worktree is found when basePath is the worktree path");
|
|
227
|
+
assert.equal(realpathSync(resolved!), realWtPath);
|
|
228
|
+
|
|
229
|
+
enterAutoWorktree(tempDir, "M001");
|
|
230
|
+
process.chdir(realWtPath);
|
|
231
|
+
assert.deepStrictEqual(
|
|
232
|
+
getActiveAutoWorktreeContext(),
|
|
233
|
+
{
|
|
234
|
+
originalBase: tempDir,
|
|
235
|
+
worktreeName: "M001",
|
|
236
|
+
branch: "milestone/M001",
|
|
237
|
+
},
|
|
238
|
+
"active context is detected from a symlink-resolved legacy worktree cwd",
|
|
239
|
+
);
|
|
240
|
+
} finally {
|
|
241
|
+
process.chdir(tempDir);
|
|
242
|
+
try {
|
|
243
|
+
teardownAutoWorktree(tempDir, "M001");
|
|
244
|
+
} catch {
|
|
245
|
+
// Best-effort cleanup for partially-created temp worktrees.
|
|
246
|
+
}
|
|
247
|
+
if (savedGsdHome === undefined) delete process.env.GSD_HOME;
|
|
248
|
+
else process.env.GSD_HOME = savedGsdHome;
|
|
249
|
+
rmSync(fakeHome, { recursive: true, force: true });
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
|
|
195
253
|
test("coexistence with manual worktree", async () => {
|
|
196
254
|
tempDir = createTempRepo();
|
|
197
|
-
|
|
198
|
-
mkdirSync(msDir, { recursive: true });
|
|
199
|
-
writeFileSync(join(msDir, "CONTEXT.md"), "# M003 Context\n");
|
|
200
|
-
run("git add .", tempDir);
|
|
201
|
-
run("git commit -m \"add milestone\"", tempDir);
|
|
255
|
+
commitMilestoneContext(tempDir, "M003");
|
|
202
256
|
|
|
203
257
|
// Import createWorktree directly for manual worktree
|
|
204
258
|
const { createWorktree } = await import("../../worktree-manager.ts");
|
|
@@ -221,11 +275,7 @@ describe("auto-worktree lifecycle", () => {
|
|
|
221
275
|
|
|
222
276
|
test("split-brain prevention: originalBase cleared after teardown", () => {
|
|
223
277
|
tempDir = createTempRepo();
|
|
224
|
-
|
|
225
|
-
mkdirSync(msDir, { recursive: true });
|
|
226
|
-
writeFileSync(join(msDir, "CONTEXT.md"), "# M003 Context\n");
|
|
227
|
-
run("git add .", tempDir);
|
|
228
|
-
run("git commit -m \"add milestone\"", tempDir);
|
|
278
|
+
commitMilestoneContext(tempDir, "M003");
|
|
229
279
|
|
|
230
280
|
createAutoWorktree(tempDir, "M003");
|
|
231
281
|
teardownAutoWorktree(tempDir, "M003");
|
|
@@ -235,11 +285,7 @@ describe("auto-worktree lifecycle", () => {
|
|
|
235
285
|
|
|
236
286
|
test("#1526: getMainBranch returns milestone/<MID> in auto-worktree", async () => {
|
|
237
287
|
tempDir = createTempRepo();
|
|
238
|
-
|
|
239
|
-
mkdirSync(msDir, { recursive: true });
|
|
240
|
-
writeFileSync(join(msDir, "CONTEXT.md"), "# M005 Context\n");
|
|
241
|
-
run("git add .", tempDir);
|
|
242
|
-
run("git commit -m \"add milestone\"", tempDir);
|
|
288
|
+
commitMilestoneContext(tempDir, "M005");
|
|
243
289
|
|
|
244
290
|
const { GitServiceImpl } = await import("../../git-service.ts");
|
|
245
291
|
|
|
@@ -259,11 +305,7 @@ describe("auto-worktree lifecycle", () => {
|
|
|
259
305
|
|
|
260
306
|
test("#1713: stale worktree directory without .git file", async () => {
|
|
261
307
|
tempDir = createTempRepo();
|
|
262
|
-
|
|
263
|
-
mkdirSync(msDir, { recursive: true });
|
|
264
|
-
writeFileSync(join(msDir, "CONTEXT.md"), "# M010 Context\n");
|
|
265
|
-
run("git add .", tempDir);
|
|
266
|
-
run("git commit -m \"add milestone\"", tempDir);
|
|
308
|
+
commitMilestoneContext(tempDir, "M010");
|
|
267
309
|
|
|
268
310
|
// Simulate a crash leaving a stale directory with no .git file.
|
|
269
311
|
const { worktreePath } = await import("../../worktree-manager.ts");
|
|
@@ -284,11 +326,7 @@ describe("auto-worktree lifecycle", () => {
|
|
|
284
326
|
|
|
285
327
|
test("#778: re-attach does not reconcile plan checkboxes into a worktree-local .gsd projection", async () => {
|
|
286
328
|
tempDir = createTempRepo();
|
|
287
|
-
|
|
288
|
-
mkdirSync(msDir, { recursive: true });
|
|
289
|
-
writeFileSync(join(msDir, "CONTEXT.md"), "# M003 Context\n");
|
|
290
|
-
run("git add .", tempDir);
|
|
291
|
-
run("git commit -m \"add milestone\"", tempDir);
|
|
329
|
+
commitMilestoneContext(tempDir, "M003");
|
|
292
330
|
|
|
293
331
|
const planRelPath = join(".gsd", "milestones", "M004", "slices", "S01", "S01-PLAN.md");
|
|
294
332
|
const planDir = join(tempDir, ".gsd", "milestones", "M004", "slices", "S01");
|
|
@@ -348,11 +386,7 @@ describe("auto-worktree lifecycle", () => {
|
|
|
348
386
|
|
|
349
387
|
test("#2791: mcp.json is not copied into worktree on creation after copyPlanningArtifacts removal", () => {
|
|
350
388
|
tempDir = createTempRepo();
|
|
351
|
-
|
|
352
|
-
mkdirSync(msDir, { recursive: true });
|
|
353
|
-
writeFileSync(join(msDir, "CONTEXT.md"), "# M003 Context\n");
|
|
354
|
-
run("git add .", tempDir);
|
|
355
|
-
run("git commit -m \"add milestone\"", tempDir);
|
|
389
|
+
commitMilestoneContext(tempDir, "M003");
|
|
356
390
|
|
|
357
391
|
// Create mcp.json in .gsd/ AFTER the commit (untracked, like real usage).
|
|
358
392
|
// Phase C removed copyPlanningArtifacts, so creation should not seed a
|
|
@@ -377,11 +411,7 @@ describe("auto-worktree lifecycle", () => {
|
|
|
377
411
|
|
|
378
412
|
test("#2791: mcp.json synced via syncGsdStateToWorktree (ROOT_STATE_FILES)", () => {
|
|
379
413
|
tempDir = createTempRepo();
|
|
380
|
-
|
|
381
|
-
mkdirSync(msDir, { recursive: true });
|
|
382
|
-
writeFileSync(join(msDir, "CONTEXT.md"), "# M003 Context\n");
|
|
383
|
-
run("git add .", tempDir);
|
|
384
|
-
run("git commit -m \"add milestone\"", tempDir);
|
|
414
|
+
commitMilestoneContext(tempDir, "M003");
|
|
385
415
|
|
|
386
416
|
// Create worktree first (no mcp.json yet)
|
|
387
417
|
const wtPath = createAutoWorktree(tempDir, "M003");
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
// Project/App: gsd-pi
|
|
2
|
+
// File Purpose: Verify the non-blocking runEnvironmentChecksAsync is behaviourally
|
|
3
|
+
// identical to the synchronous runEnvironmentChecks (the health-widget render
|
|
4
|
+
// path was moved onto the async variant for performance), and that the single-
|
|
5
|
+
// scan checkPortConflicts still detects a real in-use port.
|
|
6
|
+
|
|
7
|
+
import test, { type TestContext } from "node:test";
|
|
8
|
+
import assert from "node:assert/strict";
|
|
9
|
+
import { mkdtempSync, mkdirSync, writeFileSync, rmSync } from "node:fs";
|
|
10
|
+
import { join, dirname } from "node:path";
|
|
11
|
+
import { tmpdir } from "node:os";
|
|
12
|
+
import { createServer } from "node:net";
|
|
13
|
+
|
|
14
|
+
import {
|
|
15
|
+
runEnvironmentChecks,
|
|
16
|
+
runEnvironmentChecksAsync,
|
|
17
|
+
type EnvironmentCheckResult,
|
|
18
|
+
} from "../../doctor-environment.ts";
|
|
19
|
+
|
|
20
|
+
function makeProject(t: TestContext, files: Record<string, string>): string {
|
|
21
|
+
const dir = mkdtempSync(join(tmpdir(), "gsd-env-async-"));
|
|
22
|
+
t.after(() => {
|
|
23
|
+
try {
|
|
24
|
+
rmSync(dir, { recursive: true, force: true });
|
|
25
|
+
} catch {
|
|
26
|
+
/* ignore */
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
for (const [name, content] of Object.entries(files)) {
|
|
30
|
+
const filePath = join(dir, name);
|
|
31
|
+
mkdirSync(dirname(filePath), { recursive: true });
|
|
32
|
+
writeFileSync(filePath, content);
|
|
33
|
+
}
|
|
34
|
+
return dir;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Stable, order-independent signature of a check-result set for comparison.
|
|
38
|
+
function normalize(results: EnvironmentCheckResult[]): string[] {
|
|
39
|
+
return results.map((r) => `${r.name}|${r.status}|${r.message}|${r.detail ?? ""}`).sort();
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
test("runEnvironmentChecksAsync returns the same results as runEnvironmentChecks", async (t) => {
|
|
43
|
+
const dir = makeProject(t, {
|
|
44
|
+
"package.json": JSON.stringify({
|
|
45
|
+
name: "fixture",
|
|
46
|
+
engines: { node: ">=18" },
|
|
47
|
+
scripts: { dev: "vite --port 4321", build: "tsc" },
|
|
48
|
+
devDependencies: { typescript: "^5.0.0" },
|
|
49
|
+
}),
|
|
50
|
+
".env.example": "API_KEY=\n",
|
|
51
|
+
Dockerfile: "FROM node:20\n",
|
|
52
|
+
});
|
|
53
|
+
mkdirSync(join(dir, "node_modules"), { recursive: true });
|
|
54
|
+
|
|
55
|
+
const sync = runEnvironmentChecks(dir);
|
|
56
|
+
const asyncResults = await runEnvironmentChecksAsync(dir);
|
|
57
|
+
|
|
58
|
+
assert.deepEqual(
|
|
59
|
+
normalize(asyncResults),
|
|
60
|
+
normalize(sync),
|
|
61
|
+
"async checks must produce the identical result set as the sync checks",
|
|
62
|
+
);
|
|
63
|
+
// Sanity: the fixture is rich enough that the suite actually produced checks.
|
|
64
|
+
assert.ok(sync.length > 0, "expected the fixture to yield environment checks");
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
test("runEnvironmentChecksAsync matches sync on a bare directory (no package.json)", async (t) => {
|
|
68
|
+
const dir = makeProject(t, {});
|
|
69
|
+
const sync = runEnvironmentChecks(dir);
|
|
70
|
+
const asyncResults = await runEnvironmentChecksAsync(dir);
|
|
71
|
+
assert.deepEqual(normalize(asyncResults), normalize(sync));
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
test(
|
|
75
|
+
"single-scan port check detects a real in-use port, identically sync and async",
|
|
76
|
+
{ skip: process.platform === "win32" ? "lsof-based port check is macOS/Linux only" : false },
|
|
77
|
+
async (t) => {
|
|
78
|
+
// Bind a real listener, then reference its port from package.json scripts so
|
|
79
|
+
// collectPortsToCheck picks it up. The server stays up across both check runs.
|
|
80
|
+
const server = createServer();
|
|
81
|
+
const port = await new Promise<number>((resolve, reject) => {
|
|
82
|
+
server.once("error", reject);
|
|
83
|
+
server.listen(0, "127.0.0.1", () => {
|
|
84
|
+
const addr = server.address();
|
|
85
|
+
resolve(typeof addr === "object" && addr ? addr.port : 0);
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
t.after(() => new Promise<void>((resolve) => server.close(() => resolve())));
|
|
89
|
+
assert.ok(port >= 1024 && port <= 65535, "ephemeral port should be in the checked range");
|
|
90
|
+
|
|
91
|
+
const dir = makeProject(t, {
|
|
92
|
+
"package.json": JSON.stringify({ name: "fixture", scripts: { dev: `serve --port ${port}` } }),
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
const syncConflicts = runEnvironmentChecks(dir).filter((r) => r.name === "port_conflict");
|
|
96
|
+
const asyncConflicts = (await runEnvironmentChecksAsync(dir)).filter((r) => r.name === "port_conflict");
|
|
97
|
+
|
|
98
|
+
// Equivalence holds regardless of whether lsof is present on the runner.
|
|
99
|
+
assert.deepEqual(normalize(asyncConflicts), normalize(syncConflicts), "sync and async must agree on port conflicts");
|
|
100
|
+
// On macOS/Linux lsof is standard, so the listener must be reported and named.
|
|
101
|
+
assert.equal(syncConflicts.length, 1, "expected exactly one port conflict for the in-use port");
|
|
102
|
+
assert.match(syncConflicts[0]!.message, new RegExp(`\\b${port}\\b`), "conflict message must name the in-use port");
|
|
103
|
+
},
|
|
104
|
+
);
|