@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
|
@@ -2,7 +2,7 @@ import test from "node:test";
|
|
|
2
2
|
import assert from "node:assert/strict";
|
|
3
3
|
|
|
4
4
|
import { _buildAbortedPauseContext, isUserInitiatedAbortMessage } from "../bootstrap/agent-end-recovery.js";
|
|
5
|
-
import { _buildCancelledUnitStopReason, _isPauseOriginCancelledResult } from "../auto/
|
|
5
|
+
import { _buildCancelledUnitStopReason, _isPauseOriginCancelledResult } from "../auto/phase-helpers.js";
|
|
6
6
|
|
|
7
7
|
test("aborted agent_end maps errorMessage into structured aborted pause context", () => {
|
|
8
8
|
const withMessage = _buildAbortedPauseContext({ errorMessage: "provider aborted request" });
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import test from "node:test";
|
|
2
2
|
import assert from "node:assert/strict";
|
|
3
3
|
|
|
4
|
-
import { runPreDispatch } from "../auto/
|
|
4
|
+
import { runPreDispatch } from "../auto/pre-dispatch.ts";
|
|
5
5
|
|
|
6
6
|
test("blocked remediation warning uses /gsd dispatch reassess and hides internal tool name", async () => {
|
|
7
7
|
const notifications: Array<{ message: string; level?: string }> = [];
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
import test, { mock } from "node:test";
|
|
5
5
|
import assert from "node:assert/strict";
|
|
6
|
+
import { execSync } from "node:child_process";
|
|
6
7
|
import { mkdirSync, mkdtempSync, realpathSync, rmSync, writeFileSync } from "node:fs";
|
|
7
8
|
import { tmpdir } from "node:os";
|
|
8
9
|
import { join } from "node:path";
|
|
@@ -24,7 +25,9 @@ import { runUnit, shouldDeferUnitFailsafeTimeout } from "../auto/run-unit.js";
|
|
|
24
25
|
import { scheduleAutoWakeup, _resetAutoWakeupsForTest } from "../auto/schedule-wakeup.js";
|
|
25
26
|
import { writeUnitRuntimeRecord, readUnitRuntimeRecord } from "../unit-runtime.js";
|
|
26
27
|
import { autoLoop as rawAutoLoop } from "../auto/loop.js";
|
|
27
|
-
import { runPreDispatch
|
|
28
|
+
import { runPreDispatch } from "../auto/pre-dispatch.js";
|
|
29
|
+
import { runDispatch } from "../auto/dispatch.js";
|
|
30
|
+
import { runUnitPhase, resetSessionTimeoutState } from "../auto/unit-phase.js";
|
|
28
31
|
import { detectStuck } from "../auto/detect-stuck.js";
|
|
29
32
|
import type { UnitResult, AgentEndEvent, LoopState } from "../auto/types.js";
|
|
30
33
|
import type { LoopDeps } from "../auto/loop-deps.js";
|
|
@@ -531,7 +534,7 @@ test("runUnit failsafe defers cancellation while timeout recovery is making fres
|
|
|
531
534
|
const ctx = makeMockCtx();
|
|
532
535
|
const pi = makeMockPi();
|
|
533
536
|
const s = makeMockSession();
|
|
534
|
-
s.basePath =
|
|
537
|
+
s.basePath = makeLoopTestBase("gsd-rununit-recovery-");
|
|
535
538
|
s.currentUnit = { type: "task", id: "T01", startedAt: 1234 };
|
|
536
539
|
|
|
537
540
|
const resultPromise = runUnit(ctx, pi, s, "task", "T01", "prompt");
|
|
@@ -1366,12 +1369,19 @@ function makeMockDeps(
|
|
|
1366
1369
|
* runUnit mock (dispatch counters, milestone state, etc.).
|
|
1367
1370
|
*/
|
|
1368
1371
|
function makeLoopSession(overrides?: Partial<Record<string, unknown>>) {
|
|
1372
|
+
const basePath = mkdtempSync(join(tmpdir(), "gsd-auto-loop-"));
|
|
1373
|
+
// Plan 001 enforces worktree safety for all isolation modes. Loop-mechanics
|
|
1374
|
+
// tests run with getIsolationMode: () => "none", so the project root itself
|
|
1375
|
+
// must be a valid git working tree for source-writing Units to dispatch.
|
|
1376
|
+
execSync("git init --initial-branch=main", { cwd: basePath, stdio: "ignore" });
|
|
1377
|
+
execSync("git config user.email test@test.com", { cwd: basePath, stdio: "ignore" });
|
|
1378
|
+
execSync("git config user.name Test", { cwd: basePath, stdio: "ignore" });
|
|
1369
1379
|
return {
|
|
1370
1380
|
active: true,
|
|
1371
1381
|
verbose: false,
|
|
1372
1382
|
stepMode: false,
|
|
1373
1383
|
paused: false,
|
|
1374
|
-
basePath
|
|
1384
|
+
basePath,
|
|
1375
1385
|
originalBasePath: "",
|
|
1376
1386
|
currentMilestoneId: "M001",
|
|
1377
1387
|
currentUnit: null,
|
|
@@ -1419,6 +1429,15 @@ function makeLoopSession(overrides?: Partial<Record<string, unknown>>) {
|
|
|
1419
1429
|
} as any;
|
|
1420
1430
|
}
|
|
1421
1431
|
|
|
1432
|
+
/** Create a temp project root suitable for loop-mechanics tests. */
|
|
1433
|
+
function makeLoopTestBase(prefix: string): string {
|
|
1434
|
+
const base = mkdtempSync(join(tmpdir(), prefix));
|
|
1435
|
+
execSync("git init --initial-branch=main", { cwd: base, stdio: "ignore" });
|
|
1436
|
+
execSync("git config user.email test@test.com", { cwd: base, stdio: "ignore" });
|
|
1437
|
+
execSync("git config user.name Test", { cwd: base, stdio: "ignore" });
|
|
1438
|
+
return base;
|
|
1439
|
+
}
|
|
1440
|
+
|
|
1422
1441
|
test("autoLoop exits when s.active is set to false", async (t) => {
|
|
1423
1442
|
_resetPendingResolve();
|
|
1424
1443
|
|
|
@@ -1506,7 +1525,7 @@ test("autoLoop preserves stuck recovery counter when dispatch recovery continues
|
|
|
1506
1525
|
|
|
1507
1526
|
const ctx = makeMockCtx();
|
|
1508
1527
|
const pi = makeMockPi();
|
|
1509
|
-
const basePath = realpathSync(
|
|
1528
|
+
const basePath = realpathSync(makeLoopTestBase("gsd-stuck-counter-reset-"));
|
|
1510
1529
|
mkdirSync(join(basePath, ".gsd"), { recursive: true });
|
|
1511
1530
|
mkdirSync(join(basePath, ".gsd", "milestones", "M001", "slices", "S01", "tasks"), { recursive: true });
|
|
1512
1531
|
writeFileSync(
|
|
@@ -1581,7 +1600,7 @@ test("autoLoop skips provider dispatch when execute-task is already complete in
|
|
|
1581
1600
|
ctx.ui.setStatus = () => {};
|
|
1582
1601
|
ctx.ui.setWidget = () => {};
|
|
1583
1602
|
const pi = makeMockPi();
|
|
1584
|
-
const basePath = realpathSync(
|
|
1603
|
+
const basePath = realpathSync(makeLoopTestBase("gsd-already-complete-dispatch-"));
|
|
1585
1604
|
mkdirSync(join(basePath, ".gsd"), { recursive: true });
|
|
1586
1605
|
|
|
1587
1606
|
try {
|
|
@@ -3992,7 +4011,7 @@ test("resolveAgentEndCancelled with errorContext passes it through to resolved p
|
|
|
3992
4011
|
test("runUnitPhase pauses transient aborted cancellations instead of hard-stopping", async (t) => {
|
|
3993
4012
|
_resetPendingResolve();
|
|
3994
4013
|
|
|
3995
|
-
const basePath =
|
|
4014
|
+
const basePath = makeLoopTestBase("gsd-aborted-cancel-");
|
|
3996
4015
|
t.after(() => {
|
|
3997
4016
|
rmSync(basePath, { recursive: true, force: true });
|
|
3998
4017
|
});
|
|
@@ -4064,10 +4083,157 @@ test("runUnitPhase pauses transient aborted cancellations instead of hard-stoppi
|
|
|
4064
4083
|
assert.equal(deps.callLog.includes("stopAuto"), false);
|
|
4065
4084
|
});
|
|
4066
4085
|
|
|
4086
|
+
test("resetSessionTimeoutState gives a new auto session a fresh session-creation timeout budget", async (t) => {
|
|
4087
|
+
_resetPendingResolve();
|
|
4088
|
+
|
|
4089
|
+
// runUnitPhase schedules an auto-resume setTimeout on transient session
|
|
4090
|
+
// timeouts. Capture and clear those timers so the test process can exit
|
|
4091
|
+
// promptly while still exercising the real production path.
|
|
4092
|
+
const originalSetTimeout = globalThis.setTimeout;
|
|
4093
|
+
const timerHandles: ReturnType<typeof originalSetTimeout>[] = [];
|
|
4094
|
+
globalThis.setTimeout = ((callback: any, delay?: number, ...args: any[]) => {
|
|
4095
|
+
const handle = originalSetTimeout(callback, delay ?? 0, ...args);
|
|
4096
|
+
timerHandles.push(handle);
|
|
4097
|
+
return handle;
|
|
4098
|
+
}) as any;
|
|
4099
|
+
|
|
4100
|
+
const basePath = makeLoopTestBase("gsd-session-timeout-reset-");
|
|
4101
|
+
execSync("git init", { cwd: basePath });
|
|
4102
|
+
execSync('git -c user.email=test@test.com -c user.name=Test commit --allow-empty -m init', { cwd: basePath });
|
|
4103
|
+
|
|
4104
|
+
t.after(() => {
|
|
4105
|
+
for (const handle of timerHandles) clearTimeout(handle);
|
|
4106
|
+
globalThis.setTimeout = originalSetTimeout;
|
|
4107
|
+
rmSync(basePath, { recursive: true, force: true });
|
|
4108
|
+
});
|
|
4109
|
+
|
|
4110
|
+
const ctx = {
|
|
4111
|
+
...makeMockCtx(),
|
|
4112
|
+
ui: {
|
|
4113
|
+
notify: () => {},
|
|
4114
|
+
setStatus: () => {},
|
|
4115
|
+
setWorkingMessage: () => {},
|
|
4116
|
+
},
|
|
4117
|
+
sessionManager: {
|
|
4118
|
+
getEntries: () => [],
|
|
4119
|
+
},
|
|
4120
|
+
modelRegistry: {
|
|
4121
|
+
getProviderAuthMode: () => undefined,
|
|
4122
|
+
isProviderRequestReady: () => true,
|
|
4123
|
+
},
|
|
4124
|
+
} as any;
|
|
4125
|
+
const notifications: Array<{ message: string; level?: string }> = [];
|
|
4126
|
+
ctx.ui.notify = (message: string, level?: string) => {
|
|
4127
|
+
notifications.push({ message, level });
|
|
4128
|
+
};
|
|
4129
|
+
const pi = makeMockPi();
|
|
4130
|
+
const s = makeLoopSession({
|
|
4131
|
+
basePath,
|
|
4132
|
+
canonicalProjectRoot: basePath,
|
|
4133
|
+
originalBasePath: basePath,
|
|
4134
|
+
});
|
|
4135
|
+
const deps = makeMockDeps();
|
|
4136
|
+
|
|
4137
|
+
async function runTimeoutUnit(iteration: number): Promise<string | undefined> {
|
|
4138
|
+
notifications.length = 0;
|
|
4139
|
+
const callsBefore = pi.calls.length;
|
|
4140
|
+
let seq = 0;
|
|
4141
|
+
const phasePromise = runUnitPhase(
|
|
4142
|
+
{ ctx, pi, s, deps, prefs: undefined, iteration, flowId: `flow-${iteration}`, nextSeq: () => ++seq },
|
|
4143
|
+
{
|
|
4144
|
+
unitType: "plan-slice",
|
|
4145
|
+
unitId: "M001/S01",
|
|
4146
|
+
prompt: "plan the slice",
|
|
4147
|
+
finalPrompt: "plan the slice",
|
|
4148
|
+
pauseAfterUatDispatch: false,
|
|
4149
|
+
state: {
|
|
4150
|
+
phase: "planning",
|
|
4151
|
+
activeMilestone: { id: "M001", title: "Milestone" },
|
|
4152
|
+
activeSlice: { id: "S01", title: "Slice" },
|
|
4153
|
+
activeTask: null,
|
|
4154
|
+
registry: [{ id: "M001", title: "Milestone", status: "active" }],
|
|
4155
|
+
recentDecisions: [],
|
|
4156
|
+
blockers: [],
|
|
4157
|
+
nextAction: "",
|
|
4158
|
+
progress: { milestones: { done: 0, total: 1 } },
|
|
4159
|
+
requirements: { active: 0, validated: 0, deferred: 0, outOfScope: 0, blocked: 0, total: 0 },
|
|
4160
|
+
} as any,
|
|
4161
|
+
mid: "M001",
|
|
4162
|
+
midTitle: "Milestone",
|
|
4163
|
+
isRetry: false,
|
|
4164
|
+
previousTier: undefined,
|
|
4165
|
+
},
|
|
4166
|
+
makeLoopState(),
|
|
4167
|
+
);
|
|
4168
|
+
|
|
4169
|
+
// Wait until runUnit has dispatched the prompt, then resolve the unit
|
|
4170
|
+
// as a session-creation timeout. This avoids the 120s real timeout and
|
|
4171
|
+
// the mock-timer interaction that runUnitPhase's pre-flight setup makes
|
|
4172
|
+
// fragile.
|
|
4173
|
+
await new Promise<void>((resolve) => {
|
|
4174
|
+
const check = () => {
|
|
4175
|
+
if (pi.calls.length > callsBefore) return resolve();
|
|
4176
|
+
setTimeout(check, 5);
|
|
4177
|
+
};
|
|
4178
|
+
check();
|
|
4179
|
+
});
|
|
4180
|
+
resolveAgentEndCancelled({
|
|
4181
|
+
message: "Session creation timed out",
|
|
4182
|
+
category: "timeout",
|
|
4183
|
+
isTransient: true,
|
|
4184
|
+
});
|
|
4185
|
+
|
|
4186
|
+
const result = await phasePromise;
|
|
4187
|
+
return (result as any).reason;
|
|
4188
|
+
}
|
|
4189
|
+
|
|
4190
|
+
// Start from a known state in case a previous test left the counter raised.
|
|
4191
|
+
resetSessionTimeoutState();
|
|
4192
|
+
|
|
4193
|
+
// Exhaust the per-process timeout budget in the first "session".
|
|
4194
|
+
for (let i = 1; i <= 4; i++) {
|
|
4195
|
+
const reason = await runTimeoutUnit(i);
|
|
4196
|
+
assert.equal(reason, "session-timeout");
|
|
4197
|
+
}
|
|
4198
|
+
const lastBudgetNotification = notifications.find((n) =>
|
|
4199
|
+
n.message.includes("Session creation timed out")
|
|
4200
|
+
);
|
|
4201
|
+
assert.ok(lastBudgetNotification, "expected a session-creation timeout notification");
|
|
4202
|
+
assert.match(
|
|
4203
|
+
lastBudgetNotification.message,
|
|
4204
|
+
/Pausing for manual review/,
|
|
4205
|
+
"fourth consecutive timeout should exhaust the auto-resume budget",
|
|
4206
|
+
);
|
|
4207
|
+
|
|
4208
|
+
// Simulate a new auto-mode session starting. autoLoop() must reset the
|
|
4209
|
+
// module-level counter so the next timeout is treated as the first in the
|
|
4210
|
+
// new session rather than inheriting the exhausted budget.
|
|
4211
|
+
const freshSession = makeLoopSession({
|
|
4212
|
+
basePath,
|
|
4213
|
+
canonicalProjectRoot: basePath,
|
|
4214
|
+
originalBasePath: basePath,
|
|
4215
|
+
active: false,
|
|
4216
|
+
});
|
|
4217
|
+
freshSession.orchestration = createLoopTestOrchestration(ctx, pi, freshSession, deps);
|
|
4218
|
+
await rawAutoLoop(ctx, pi, freshSession, deps);
|
|
4219
|
+
|
|
4220
|
+
const reasonAfterReset = await runTimeoutUnit(5);
|
|
4221
|
+
assert.equal(reasonAfterReset, "session-timeout");
|
|
4222
|
+
const notificationAfterReset = notifications.find((n) =>
|
|
4223
|
+
n.message.includes("Auto-resuming")
|
|
4224
|
+
);
|
|
4225
|
+
assert.ok(notificationAfterReset, "expected an auto-resume notification after reset");
|
|
4226
|
+
assert.match(
|
|
4227
|
+
notificationAfterReset.message,
|
|
4228
|
+
/Auto-resuming/,
|
|
4229
|
+
"after autoLoop entry the timeout budget should be fresh so the first timeout auto-resumes",
|
|
4230
|
+
);
|
|
4231
|
+
});
|
|
4232
|
+
|
|
4067
4233
|
test("runUnitPhase treats setup-race cancellations as pause-induced when session is already paused", async (t) => {
|
|
4068
4234
|
_resetPendingResolve();
|
|
4069
4235
|
|
|
4070
|
-
const basePath =
|
|
4236
|
+
const basePath = makeLoopTestBase("gsd-paused-setup-race-");
|
|
4071
4237
|
t.after(() => {
|
|
4072
4238
|
rmSync(basePath, { recursive: true, force: true });
|
|
4073
4239
|
});
|
|
@@ -4142,7 +4308,7 @@ test("runUnitPhase treats setup-race cancellations as pause-induced when session
|
|
|
4142
4308
|
test("runUnitPhase remembers aborted milestone closeout for same-unit resume", async (t) => {
|
|
4143
4309
|
_resetPendingResolve();
|
|
4144
4310
|
|
|
4145
|
-
const basePath =
|
|
4311
|
+
const basePath = makeLoopTestBase("gsd-aborted-closeout-");
|
|
4146
4312
|
t.after(() => {
|
|
4147
4313
|
rmSync(basePath, { recursive: true, force: true });
|
|
4148
4314
|
});
|
|
@@ -4222,7 +4388,7 @@ test("runUnitPhase remembers aborted milestone closeout for same-unit resume", a
|
|
|
4222
4388
|
test("runUnitPhase schedules default auto-resume for transient provider cancellations", async (t) => {
|
|
4223
4389
|
_resetPendingResolve();
|
|
4224
4390
|
|
|
4225
|
-
const basePath =
|
|
4391
|
+
const basePath = makeLoopTestBase("gsd-provider-resume-");
|
|
4226
4392
|
t.after(() => {
|
|
4227
4393
|
_resetPendingResolve();
|
|
4228
4394
|
rmSync(basePath, { recursive: true, force: true });
|
|
@@ -4319,7 +4485,7 @@ test("runUnitPhase schedules default auto-resume for transient provider cancella
|
|
|
4319
4485
|
test("runUnitPhase pauses ghost completions before closeout and finalize side effects", async (t) => {
|
|
4320
4486
|
_resetPendingResolve();
|
|
4321
4487
|
|
|
4322
|
-
const basePath =
|
|
4488
|
+
const basePath = makeLoopTestBase("gsd-ghost-completion-");
|
|
4323
4489
|
t.after(() => {
|
|
4324
4490
|
_resetPendingResolve();
|
|
4325
4491
|
rmSync(basePath, { recursive: true, force: true });
|
|
@@ -4421,7 +4587,7 @@ test("runUnitPhase pauses ghost completions before closeout and finalize side ef
|
|
|
4421
4587
|
test("runUnitPhase records failed routing outcome when expected artifact is missing", async (t) => {
|
|
4422
4588
|
_resetPendingResolve();
|
|
4423
4589
|
|
|
4424
|
-
const basePath =
|
|
4590
|
+
const basePath = makeLoopTestBase("gsd-routing-artifact-missing-");
|
|
4425
4591
|
t.after(() => {
|
|
4426
4592
|
_resetPendingResolve();
|
|
4427
4593
|
rmSync(basePath, { recursive: true, force: true });
|
|
@@ -4504,7 +4670,7 @@ test("runUnitPhase records failed routing outcome when expected artifact is miss
|
|
|
4504
4670
|
test("runUnitPhase execute-task retry prompt instructs gsd_task_complete instead of manual summary writes", async (t) => {
|
|
4505
4671
|
_resetPendingResolve();
|
|
4506
4672
|
|
|
4507
|
-
const basePath =
|
|
4673
|
+
const basePath = makeLoopTestBase("gsd-execute-task-retry-prompt-");
|
|
4508
4674
|
t.after(() => {
|
|
4509
4675
|
_resetPendingResolve();
|
|
4510
4676
|
rmSync(basePath, { recursive: true, force: true });
|
|
@@ -4585,7 +4751,7 @@ test("runUnitPhase execute-task retry prompt instructs gsd_task_complete instead
|
|
|
4585
4751
|
test("runUnitPhase non-execute-task retry prompt keeps generic required-file guidance", async (t) => {
|
|
4586
4752
|
_resetPendingResolve();
|
|
4587
4753
|
|
|
4588
|
-
const basePath =
|
|
4754
|
+
const basePath = makeLoopTestBase("gsd-non-execute-retry-prompt-");
|
|
4589
4755
|
t.after(() => {
|
|
4590
4756
|
_resetPendingResolve();
|
|
4591
4757
|
rmSync(basePath, { recursive: true, force: true });
|
|
@@ -4933,7 +5099,7 @@ test("autoLoop rejects execute-task with 0 tool calls as hallucinated (#1833)",
|
|
|
4933
5099
|
test("runUnitPhase retries 0-tool units with ordinary network-related assistant text", async (t) => {
|
|
4934
5100
|
_resetPendingResolve();
|
|
4935
5101
|
|
|
4936
|
-
const basePath =
|
|
5102
|
+
const basePath = makeLoopTestBase("gsd-zero-tool-network-text-");
|
|
4937
5103
|
t.after(() => {
|
|
4938
5104
|
rmSync(basePath, { recursive: true, force: true });
|
|
4939
5105
|
});
|
|
@@ -5028,7 +5194,7 @@ test("runUnitPhase retries 0-tool units with ordinary network-related assistant
|
|
|
5028
5194
|
test("runUnitPhase pauses auto-mode when zero-tool-call retry is exhausted", async (t) => {
|
|
5029
5195
|
_resetPendingResolve();
|
|
5030
5196
|
|
|
5031
|
-
const basePath =
|
|
5197
|
+
const basePath = makeLoopTestBase("gsd-zero-tool-exhausted-");
|
|
5032
5198
|
t.after(() => {
|
|
5033
5199
|
rmSync(basePath, { recursive: true, force: true });
|
|
5034
5200
|
});
|
|
@@ -5313,7 +5479,7 @@ test("autoLoop rejects complete-slice with 0 tool calls as context-exhausted (#2
|
|
|
5313
5479
|
test("autoLoop pauses on zero-tool-call rate-limit assistant messages instead of immediate retry", async (t) => {
|
|
5314
5480
|
_resetPendingResolve();
|
|
5315
5481
|
|
|
5316
|
-
const basePath =
|
|
5482
|
+
const basePath = makeLoopTestBase("gsd-zero-tool-rate-limit-");
|
|
5317
5483
|
t.after(() => {
|
|
5318
5484
|
_resetPendingResolve();
|
|
5319
5485
|
rmSync(basePath, { recursive: true, force: true });
|
|
@@ -5529,6 +5695,15 @@ test("dispatch Worktree Safety honors degraded branch fallback instead of demand
|
|
|
5529
5695
|
// branch in the project root. The safety gate must validate against that
|
|
5530
5696
|
// effective branch mode, not the configured worktree mode.
|
|
5531
5697
|
const projectRoot = mkdtempSync(join(tmpdir(), "gsd-wt-safety-degraded-"));
|
|
5698
|
+
execSync("git init --initial-branch=main", { cwd: projectRoot, stdio: "ignore" });
|
|
5699
|
+
execSync("git config user.email test@test.com", { cwd: projectRoot, stdio: "ignore" });
|
|
5700
|
+
execSync("git config user.name Test", { cwd: projectRoot, stdio: "ignore" });
|
|
5701
|
+
// The lifecycle fallback checks out the milestone branch in the project
|
|
5702
|
+
// root, so the safety gate's branch verification expects that branch here
|
|
5703
|
+
// too. expectedBranch comes from deps.autoWorktreeBranch (mocked to
|
|
5704
|
+
// "auto/M001"), so the fixture repo must be on that same branch.
|
|
5705
|
+
execSync("git commit --allow-empty -m init", { cwd: projectRoot, stdio: "ignore" });
|
|
5706
|
+
execSync("git checkout -b auto/M001", { cwd: projectRoot, stdio: "ignore" });
|
|
5532
5707
|
t.after(() => rmSync(projectRoot, { recursive: true, force: true }));
|
|
5533
5708
|
|
|
5534
5709
|
const s = makeLoopSession({
|
|
@@ -5591,6 +5766,15 @@ test("dispatch Worktree Safety honors stranded branch recovery instead of demand
|
|
|
5591
5766
|
// NOT degraded — the adoption is intentional. The safety gate must validate
|
|
5592
5767
|
// against the effective branch mode, not the configured worktree mode.
|
|
5593
5768
|
const projectRoot = mkdtempSync(join(tmpdir(), "gsd-wt-safety-stranded-"));
|
|
5769
|
+
execSync("git init --initial-branch=main", { cwd: projectRoot, stdio: "ignore" });
|
|
5770
|
+
execSync("git config user.email test@test.com", { cwd: projectRoot, stdio: "ignore" });
|
|
5771
|
+
execSync("git config user.name Test", { cwd: projectRoot, stdio: "ignore" });
|
|
5772
|
+
// Stranded recovery adopts the milestone branch in the project root, so the
|
|
5773
|
+
// safety gate's branch verification expects that branch here too.
|
|
5774
|
+
// expectedBranch comes from deps.autoWorktreeBranch (mocked to "auto/M001"),
|
|
5775
|
+
// so the fixture repo must be on that same branch.
|
|
5776
|
+
execSync("git commit --allow-empty -m init", { cwd: projectRoot, stdio: "ignore" });
|
|
5777
|
+
execSync("git checkout -b auto/M001", { cwd: projectRoot, stdio: "ignore" });
|
|
5594
5778
|
t.after(() => rmSync(projectRoot, { recursive: true, force: true }));
|
|
5595
5779
|
|
|
5596
5780
|
const s = makeLoopSession({
|
|
@@ -5648,7 +5832,7 @@ test("runDispatch runs stuck detection while artifact verification retry is pend
|
|
|
5648
5832
|
const notifications: string[] = [];
|
|
5649
5833
|
ctx.ui.notify = (msg: string) => { notifications.push(msg); };
|
|
5650
5834
|
|
|
5651
|
-
const basePath =
|
|
5835
|
+
const basePath = makeLoopTestBase("gsd-5719-retry-stuck-");
|
|
5652
5836
|
t.after(() => rmSync(basePath, { recursive: true, force: true }));
|
|
5653
5837
|
|
|
5654
5838
|
const s = makeLoopSession({
|
|
@@ -5716,7 +5900,7 @@ test("runDispatch falls back to main when dispatch guard cannot read main branch
|
|
|
5716
5900
|
|
|
5717
5901
|
const ctx = makeMockCtx();
|
|
5718
5902
|
const pi = makeMockPi();
|
|
5719
|
-
const basePath =
|
|
5903
|
+
const basePath = makeLoopTestBase("gsd-5530-main-branch-fallback-");
|
|
5720
5904
|
t.after(() => rmSync(basePath, { recursive: true, force: true }));
|
|
5721
5905
|
|
|
5722
5906
|
let guardBranch: string | null = null;
|
|
@@ -6243,7 +6427,7 @@ test("pre-dispatch replace resolves final unit before dispatch health and stuck
|
|
|
6243
6427
|
);
|
|
6244
6428
|
});
|
|
6245
6429
|
|
|
6246
|
-
test("autoLoop warns but proceeds for greenfield project (no project files) (#1833)", async () => {
|
|
6430
|
+
test("autoLoop warns but proceeds for greenfield project (no project files) (#1833)", async (t) => {
|
|
6247
6431
|
_resetPendingResolve();
|
|
6248
6432
|
|
|
6249
6433
|
const ctx = makeMockCtx();
|
|
@@ -6252,7 +6436,9 @@ test("autoLoop warns but proceeds for greenfield project (no project files) (#18
|
|
|
6252
6436
|
const pi = makeMockPi();
|
|
6253
6437
|
|
|
6254
6438
|
const notifications: string[] = [];
|
|
6255
|
-
const
|
|
6439
|
+
const basePath = makeLoopTestBase("gsd-greenfield-");
|
|
6440
|
+
t.after(() => rmSync(basePath, { recursive: true, force: true }));
|
|
6441
|
+
const s = makeLoopSession({ basePath });
|
|
6256
6442
|
|
|
6257
6443
|
ctx.ui.notify = (msg: string) => {
|
|
6258
6444
|
notifications.push(msg);
|
|
@@ -6275,8 +6461,6 @@ test("autoLoop warns but proceeds for greenfield project (no project files) (#18
|
|
|
6275
6461
|
blockers: [],
|
|
6276
6462
|
} as any;
|
|
6277
6463
|
},
|
|
6278
|
-
// Has .git but no package.json or src/
|
|
6279
|
-
existsSync: (p: string) => p.endsWith(".git"),
|
|
6280
6464
|
});
|
|
6281
6465
|
|
|
6282
6466
|
await autoLoop(ctx, pi, s, deps);
|
|
@@ -8,6 +8,7 @@ import { fileURLToPath } from "node:url";
|
|
|
8
8
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
9
9
|
|
|
10
10
|
import { ModelPolicyDispatchBlockedError, resolvePreferredModelConfig, resolveModelId, selectAndApplyModel, floorThinkingLevelForUnit } from "../auto-model-selection.js";
|
|
11
|
+
import { blockModelUntil, clearTemporaryModelBlocksForTest } from "../blocked-models.ts";
|
|
11
12
|
|
|
12
13
|
function makeTempDir(prefix: string): string {
|
|
13
14
|
return mkdtempSync(join(tmpdir(), prefix));
|
|
@@ -223,6 +224,74 @@ test("selectAndApplyModel honors explicit phase models without downgrading (#361
|
|
|
223
224
|
}
|
|
224
225
|
});
|
|
225
226
|
|
|
227
|
+
test("selectAndApplyModel skips a rate-limited primary until its reset time", async () => {
|
|
228
|
+
const originalCwd = process.cwd();
|
|
229
|
+
const originalGsdHome = process.env.GSD_HOME;
|
|
230
|
+
const tempProject = makeTempDir("gsd-rate-limit-fallback-project-");
|
|
231
|
+
const tempGsdHome = makeTempDir("gsd-rate-limit-fallback-home-");
|
|
232
|
+
const setModelCalls: string[] = [];
|
|
233
|
+
|
|
234
|
+
try {
|
|
235
|
+
clearTemporaryModelBlocksForTest();
|
|
236
|
+
mkdirSync(join(tempProject, ".gsd"), { recursive: true });
|
|
237
|
+
writeFileSync(
|
|
238
|
+
join(tempProject, ".gsd", "PREFERENCES.md"),
|
|
239
|
+
[
|
|
240
|
+
"---",
|
|
241
|
+
"models:",
|
|
242
|
+
" execution:",
|
|
243
|
+
" model: gpt-5.5",
|
|
244
|
+
" provider: openai-codex",
|
|
245
|
+
" fallbacks:",
|
|
246
|
+
" - anthropic/claude-sonnet-4-6",
|
|
247
|
+
"---",
|
|
248
|
+
].join("\n"),
|
|
249
|
+
"utf-8",
|
|
250
|
+
);
|
|
251
|
+
process.env.GSD_HOME = tempGsdHome;
|
|
252
|
+
process.chdir(tempProject);
|
|
253
|
+
|
|
254
|
+
const availableModels = [
|
|
255
|
+
{ id: "gpt-5.5", provider: "openai-codex", api: "responses" },
|
|
256
|
+
{ id: "claude-sonnet-4-6", provider: "anthropic", api: "anthropic-messages" },
|
|
257
|
+
];
|
|
258
|
+
const ctx = {
|
|
259
|
+
modelRegistry: { getAvailable: () => availableModels },
|
|
260
|
+
sessionManager: { getSessionId: () => "test-session" },
|
|
261
|
+
ui: { notify: () => {} },
|
|
262
|
+
model: { provider: "openai-codex", id: "gpt-5.5", api: "responses" },
|
|
263
|
+
} as any;
|
|
264
|
+
const pi = {
|
|
265
|
+
setModel: async (model: { provider: string; id: string }) => {
|
|
266
|
+
setModelCalls.push(`${model.provider}/${model.id}`);
|
|
267
|
+
return true;
|
|
268
|
+
},
|
|
269
|
+
emitBeforeModelSelect: async () => undefined,
|
|
270
|
+
getActiveTools: () => [],
|
|
271
|
+
emitAdjustToolSet: async () => undefined,
|
|
272
|
+
setActiveTools: () => {},
|
|
273
|
+
} as any;
|
|
274
|
+
|
|
275
|
+
blockModelUntil(tempProject, "openai-codex", "gpt-5.5", Date.now() + 60_000, "session limit");
|
|
276
|
+
await selectAndApplyModel(ctx, pi, "execute-task", "M001/S01/T01", tempProject, undefined, false, { provider: "openai-codex", id: "gpt-5.5" }, undefined, true);
|
|
277
|
+
|
|
278
|
+
blockModelUntil(tempProject, "openai-codex", "gpt-5.5", Date.now() - 1, "expired");
|
|
279
|
+
await selectAndApplyModel(ctx, pi, "execute-task", "M001/S01/T02", tempProject, undefined, false, { provider: "openai-codex", id: "gpt-5.5" }, undefined, true);
|
|
280
|
+
|
|
281
|
+
assert.deepEqual(setModelCalls, [
|
|
282
|
+
"anthropic/claude-sonnet-4-6",
|
|
283
|
+
"openai-codex/gpt-5.5",
|
|
284
|
+
]);
|
|
285
|
+
} finally {
|
|
286
|
+
clearTemporaryModelBlocksForTest();
|
|
287
|
+
process.chdir(originalCwd);
|
|
288
|
+
if (originalGsdHome === undefined) delete process.env.GSD_HOME;
|
|
289
|
+
else process.env.GSD_HOME = originalGsdHome;
|
|
290
|
+
rmSync(tempProject, { recursive: true, force: true });
|
|
291
|
+
rmSync(tempGsdHome, { recursive: true, force: true });
|
|
292
|
+
}
|
|
293
|
+
});
|
|
294
|
+
|
|
226
295
|
test("selectAndApplyModel lets explicit unit models bypass stale cross-provider lock (#116)", async () => {
|
|
227
296
|
const originalCwd = process.cwd();
|
|
228
297
|
const originalGsdHome = process.env.GSD_HOME;
|
|
@@ -803,7 +872,12 @@ test("selectAndApplyModel clamps explicit no-model thinking via ctx.model when r
|
|
|
803
872
|
|
|
804
873
|
await selectAndApplyModel(
|
|
805
874
|
{
|
|
806
|
-
|
|
875
|
+
// Empty registry results force the clamp source to fall back to ctx.model.
|
|
876
|
+
modelRegistry: {
|
|
877
|
+
getAvailable: () => [],
|
|
878
|
+
getAll: () => [],
|
|
879
|
+
isProviderRequestReady: () => true,
|
|
880
|
+
},
|
|
807
881
|
sessionManager: { getSessionId: () => "test-session" },
|
|
808
882
|
ui: { notify: () => {} },
|
|
809
883
|
model: ctxModel,
|
|
@@ -857,3 +931,25 @@ test("resolveModelId: claude-code wins when session is claude-code regardless of
|
|
|
857
931
|
assert.ok(result, "should resolve a model");
|
|
858
932
|
assert.equal(result.provider, "claude-code", "claude-code must win when it is the session provider");
|
|
859
933
|
});
|
|
934
|
+
|
|
935
|
+
test("resolveModelId: openai-codex wins over openai for bare GPT IDs when both are available", () => {
|
|
936
|
+
const availableModels = [
|
|
937
|
+
{ id: "gpt-5.5", provider: "openai" },
|
|
938
|
+
{ id: "gpt-5.5", provider: "openai-codex" },
|
|
939
|
+
];
|
|
940
|
+
|
|
941
|
+
const result = resolveModelId("gpt-5.5", availableModels, undefined);
|
|
942
|
+
assert.ok(result, "should resolve a model");
|
|
943
|
+
assert.equal(result.provider, "openai-codex", "ChatGPT OAuth must win over platform API for bare IDs");
|
|
944
|
+
});
|
|
945
|
+
|
|
946
|
+
test("resolveModelId: github-copilot wins over openai when both offer the same GPT model", () => {
|
|
947
|
+
const availableModels = [
|
|
948
|
+
{ id: "gpt-5.5", provider: "openai" },
|
|
949
|
+
{ id: "gpt-5.5", provider: "github-copilot" },
|
|
950
|
+
];
|
|
951
|
+
|
|
952
|
+
const result = resolveModelId("gpt-5.5", availableModels, undefined);
|
|
953
|
+
assert.ok(result);
|
|
954
|
+
assert.equal(result.provider, "github-copilot");
|
|
955
|
+
});
|