@opengsd/gsd-pi 1.2.0-dev.844675c9 → 1.2.0-dev.84c56d87
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-style.d.ts +17 -0
- package/dist/cli-style.js +28 -0
- package/dist/cli-web-branch.d.ts +2 -0
- package/dist/cli-web-branch.js +9 -2
- package/dist/cli.js +1 -1
- package/dist/headless-events.d.ts +4 -2
- package/dist/headless-events.js +7 -29
- package/dist/help-text.js +5 -0
- package/dist/models-resolver.d.ts +3 -13
- package/dist/models-resolver.js +3 -22
- package/dist/resource-loader.js +2 -14
- package/dist/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/extensions/ask-user-questions.js +78 -23
- package/dist/resources/extensions/bg-shell/utilities.js +5 -2
- 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/models.js +9 -0
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +122 -234
- package/dist/resources/extensions/claude-code-cli/turn-assembler.js +224 -0
- package/dist/resources/extensions/github-sync/templates.js +3 -3
- package/dist/resources/extensions/gsd/artifact-projection.js +14 -0
- package/dist/resources/extensions/gsd/auto/loop.js +74 -56
- package/dist/resources/extensions/gsd/auto/orchestrator.js +142 -15
- package/dist/resources/extensions/gsd/auto/phases.js +34 -4
- package/dist/resources/extensions/gsd/auto/run-unit.js +2 -1
- package/dist/resources/extensions/gsd/auto/session.js +3 -0
- package/dist/resources/extensions/gsd/auto-dashboard.js +16 -4
- package/dist/resources/extensions/gsd/auto-dispatch.js +6 -5
- package/dist/resources/extensions/gsd/auto-model-selection.js +8 -0
- package/dist/resources/extensions/gsd/auto-post-unit.js +23 -11
- package/dist/resources/extensions/gsd/auto-prompts.js +84 -8
- package/dist/resources/extensions/gsd/auto-recovery.js +48 -49
- package/dist/resources/extensions/gsd/auto-runtime-state.js +14 -0
- package/dist/resources/extensions/gsd/auto-start.js +24 -37
- package/dist/resources/extensions/gsd/auto-timers.js +16 -2
- package/dist/resources/extensions/gsd/auto-tool-tracking.js +50 -0
- package/dist/resources/extensions/gsd/auto-unit-tool-scope.js +11 -45
- package/dist/resources/extensions/gsd/auto-verification.js +7 -7
- package/dist/resources/extensions/gsd/auto-worktree-repair.js +10 -2
- package/dist/resources/extensions/gsd/auto-worktree.js +53 -368
- package/dist/resources/extensions/gsd/auto.js +19 -27
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +3 -2
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +28 -37
- package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +20 -43
- package/dist/resources/extensions/gsd/bootstrap/query-tools.js +2 -2
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +19 -0
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +209 -149
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +93 -8
- package/dist/resources/extensions/gsd/branch-patterns.js +2 -0
- package/dist/resources/extensions/gsd/browser-evidence.js +8 -2
- package/dist/resources/extensions/gsd/captures.js +5 -15
- package/dist/resources/extensions/gsd/closeout-consistency-gate.js +21 -4
- package/dist/resources/extensions/gsd/closeout-recovery.js +3 -2
- package/dist/resources/extensions/gsd/codebase-generator.js +8 -4
- package/dist/resources/extensions/gsd/commands/catalog.js +6 -62
- package/dist/resources/extensions/gsd/commands/handlers/auto.js +3 -0
- package/dist/resources/extensions/gsd/commands-handlers.js +20 -0
- package/dist/resources/extensions/gsd/commands-inspect.js +4 -8
- package/dist/resources/extensions/gsd/commands-maintenance.js +61 -41
- package/dist/resources/extensions/gsd/commands-ship.js +2 -2
- package/dist/resources/extensions/gsd/commands-verdict.js +12 -2
- package/dist/resources/extensions/gsd/crash-recovery.js +4 -12
- package/dist/resources/extensions/gsd/db/engine.js +755 -0
- package/dist/resources/extensions/gsd/db/queries.js +372 -0
- package/dist/resources/extensions/gsd/db/sql-constants.js +11 -0
- package/dist/resources/extensions/gsd/db/writers/cascades.js +194 -0
- package/dist/resources/extensions/gsd/db/writers/import-restore.js +182 -0
- package/dist/resources/extensions/gsd/db/writers/memory.js +149 -0
- package/dist/resources/extensions/gsd/db/writers/reconcile.js +458 -0
- package/dist/resources/extensions/gsd/db/writers/status.js +70 -0
- package/dist/resources/extensions/gsd/db-workspace.js +103 -0
- package/dist/resources/extensions/gsd/delegation-policy.js +2 -10
- package/dist/resources/extensions/gsd/discussion-handoff.js +218 -0
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +9 -0
- package/dist/resources/extensions/gsd/doctor-environment.js +5 -11
- package/dist/resources/extensions/gsd/doctor-format.js +9 -6
- package/dist/resources/extensions/gsd/doctor-git-checks.js +4 -3
- package/dist/resources/extensions/gsd/doctor-runtime-checks.js +21 -16
- package/dist/resources/extensions/gsd/doctor.js +16 -9
- package/dist/resources/extensions/gsd/error-classifier.js +10 -1
- package/dist/resources/extensions/gsd/git-conflict-state.js +16 -1
- package/dist/resources/extensions/gsd/git-service.js +1 -0
- package/dist/resources/extensions/gsd/gitignore.js +3 -0
- package/dist/resources/extensions/gsd/gsd-db.js +183 -2048
- package/dist/resources/extensions/gsd/guidance.js +98 -0
- package/dist/resources/extensions/gsd/guided-flow.js +83 -471
- package/dist/resources/extensions/gsd/guided-unit-completion.js +225 -0
- package/dist/resources/extensions/gsd/markdown-renderer.js +2 -1
- package/dist/resources/extensions/gsd/mcp-filter.js +4 -20
- package/dist/resources/extensions/gsd/mcp-tool-name.js +18 -0
- package/dist/resources/extensions/gsd/md-importer.js +4 -3
- package/dist/resources/extensions/gsd/memory-consolidation-scanner.js +1 -1
- package/dist/resources/extensions/gsd/migrate/safety.js +22 -11
- package/dist/resources/extensions/gsd/migration-auto-check.js +27 -5
- package/dist/resources/extensions/gsd/milestone-closeout-proof.js +72 -0
- package/dist/resources/extensions/gsd/milestone-closeout.js +12 -4
- package/dist/resources/extensions/gsd/milestone-merge-transaction.js +10 -0
- package/dist/resources/extensions/gsd/milestone-planning-persistence.js +156 -0
- package/dist/resources/extensions/gsd/milestone-readiness.js +77 -0
- package/dist/resources/extensions/gsd/milestone-settlement.js +50 -0
- package/dist/resources/extensions/gsd/milestone-validation-evidence.js +73 -0
- package/dist/resources/extensions/gsd/milestone-validation-verdict.js +57 -0
- package/dist/resources/extensions/gsd/model-cost-table.js +1 -0
- package/dist/resources/extensions/gsd/model-router.js +3 -0
- package/dist/resources/extensions/gsd/notification-store.js +11 -4
- package/dist/resources/extensions/gsd/parallel-eligibility.js +3 -6
- package/dist/resources/extensions/gsd/parallel-merge.js +14 -11
- package/dist/resources/extensions/gsd/parallel-monitor-overlay.js +11 -7
- package/dist/resources/extensions/gsd/parallel-orchestrator.js +3 -2
- package/dist/resources/extensions/gsd/paths.js +37 -24
- package/dist/resources/extensions/gsd/pre-execution-checks.js +91 -3
- package/dist/resources/extensions/gsd/preferences-diagnostics.js +67 -0
- package/dist/resources/extensions/gsd/preferences-models.js +12 -46
- package/dist/resources/extensions/gsd/preferences.js +161 -29
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +1 -0
- package/dist/resources/extensions/gsd/prompts/execute-task.md +2 -0
- package/dist/resources/extensions/gsd/prompts/guided-discuss-project.md +3 -1
- package/dist/resources/extensions/gsd/prompts/plan-milestone.md +2 -0
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +2 -1
- package/dist/resources/extensions/gsd/prompts/refine-slice.md +2 -1
- package/dist/resources/extensions/gsd/prompts/replan-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/system.md +1 -1
- package/dist/resources/extensions/gsd/provider-error-guidance.js +1 -5
- package/dist/resources/extensions/gsd/provider-payload-policy.js +83 -0
- 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/pull-request-process.js +13 -0
- package/dist/resources/extensions/gsd/quality-gate-closure.js +109 -0
- package/dist/resources/extensions/gsd/question-transport.js +86 -0
- package/dist/resources/extensions/gsd/recovery-classification.js +41 -87
- package/dist/resources/extensions/gsd/roadmap-slices.js +8 -2
- package/dist/resources/extensions/gsd/safety/evidence-collector.js +37 -4
- package/dist/resources/extensions/gsd/safety/evidence-cross-ref.js +7 -2
- package/dist/resources/extensions/gsd/safety/file-change-validator.js +10 -0
- package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +3 -2
- package/dist/resources/extensions/gsd/state-transition-matrix.js +38 -0
- package/dist/resources/extensions/gsd/state.js +14 -25
- package/dist/resources/extensions/gsd/status-guards.js +56 -8
- package/dist/resources/extensions/gsd/stop-notice.js +57 -0
- package/dist/resources/extensions/gsd/templates/plan.md +7 -0
- package/dist/resources/extensions/gsd/templates/project.md +1 -0
- package/dist/resources/extensions/gsd/templates/roadmap.md +1 -1
- package/dist/resources/extensions/gsd/templates/uat.md +5 -1
- package/dist/resources/extensions/gsd/tool-contract.js +52 -8
- package/dist/resources/extensions/gsd/tool-presentation-plan.js +15 -34
- package/dist/resources/extensions/gsd/tool-surface-readiness.js +56 -0
- package/dist/resources/extensions/gsd/tool-surface-snapshot.js +17 -0
- package/dist/resources/extensions/gsd/tools/complete-slice.js +24 -43
- package/dist/resources/extensions/gsd/tools/exec-tool.js +5 -8
- package/dist/resources/extensions/gsd/tools/plan-milestone.js +15 -143
- package/dist/resources/extensions/gsd/tools/plan-slice.js +12 -6
- package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +39 -0
- package/dist/resources/extensions/gsd/tools/reopen-milestone.js +11 -29
- package/dist/resources/extensions/gsd/tools/reopen-slice.js +14 -33
- package/dist/resources/extensions/gsd/tools/skip-slice.js +18 -36
- package/dist/resources/extensions/gsd/tools/validate-milestone.js +15 -78
- package/dist/resources/extensions/gsd/uat-policy.js +17 -10
- package/dist/resources/extensions/gsd/uat-run.js +9 -14
- package/dist/resources/extensions/gsd/undo.js +8 -7
- package/dist/resources/extensions/gsd/unit-closeout.js +138 -0
- package/dist/resources/extensions/gsd/unit-context-composer.js +49 -21
- package/dist/resources/extensions/gsd/unit-context-manifest.js +4 -27
- package/dist/resources/extensions/gsd/unit-registry.js +337 -0
- package/dist/resources/extensions/gsd/unit-runtime.js +3 -2
- package/dist/resources/extensions/gsd/unit-tool-contracts.js +9 -181
- package/dist/resources/extensions/gsd/user-input-boundary.js +23 -0
- package/dist/resources/extensions/gsd/validation-block-guard.js +2 -0
- package/dist/resources/extensions/gsd/web-app-uat.js +117 -0
- package/dist/resources/extensions/gsd/workflow-mcp.js +15 -102
- package/dist/resources/extensions/gsd/workflow-reconcile.js +4 -3
- package/dist/resources/extensions/gsd/workflow-tool-surface.js +46 -0
- package/dist/resources/extensions/gsd/workspace-git-guard.js +2 -0
- package/dist/resources/extensions/gsd/worktree-git-recovery.js +293 -0
- package/dist/resources/extensions/gsd/worktree-lifecycle.js +9 -1
- package/dist/resources/extensions/gsd/worktree-manager.js +45 -28
- package/dist/resources/extensions/gsd/worktree-placement.js +59 -0
- package/dist/resources/extensions/gsd/worktree-reentry.js +12 -8
- package/dist/resources/extensions/gsd/worktree-root.js +28 -6
- package/dist/resources/extensions/gsd/worktree-safety.js +8 -5
- package/dist/resources/extensions/gsd/worktree-session-state.js +12 -11
- package/dist/resources/extensions/gsd/worktree-state-projection.js +33 -4
- package/dist/resources/extensions/gsd/worktree-telemetry.js +12 -0
- 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 +72 -4
- package/dist/resources/extensions/shared/interview-ui.js +2 -2
- package/dist/resources/shared/claude-runtime-floor.js +182 -0
- package/dist/resources/skills/create-skill/references/executable-code.md +1 -1
- 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/gsd-browser/SKILL.md +1 -1
- package/dist/resources/skills/spike-wrap-up/SKILL.md +9 -9
- package/dist/tsconfig.extensions.tsbuildinfo +1 -1
- package/dist/update-cmd.js +20 -0
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +6 -6
- 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 +8 -8
- package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/mcp-connections/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +6 -6
- package/dist/web/standalone/.next/server/chunks/5124.js +1 -1
- package/dist/web/standalone/.next/server/chunks/{5047.js → 5942.js} +2 -2
- package/dist/web/standalone/.next/server/chunks/8357.js +1 -1
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/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/2659.b7b129ee6a769448.js +1 -0
- package/dist/web/standalone/.next/static/chunks/2772.bfa657f49f955239.js +1 -0
- package/dist/web/standalone/.next/static/chunks/{3616.4113d484a994e411.js → 3616.3c60753b8ffcbd2e.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/4283.e4873b058df143a1.js +2 -0
- package/dist/web/standalone/.next/static/chunks/5826.a46ecdd1cfe8dabc.js +1 -0
- package/dist/web/standalone/.next/static/chunks/796.cf859a427a2cb2ac.js +10 -0
- package/dist/web/standalone/.next/static/chunks/8785.2e5a118797fb2dd2.js +1 -0
- package/dist/web/standalone/.next/static/chunks/{webpack-dda80a1ef5587410.js → webpack-fbea77b5f9953368.js} +1 -1
- package/dist/web/standalone/node_modules/node-pty/build/Makefile +1 -1
- package/dist/web/standalone/node_modules/postcss/lib/container.js +18 -26
- package/dist/web/standalone/node_modules/postcss/lib/css-syntax-error.js +14 -47
- package/dist/web/standalone/node_modules/postcss/lib/declaration.js +4 -4
- package/dist/web/standalone/node_modules/postcss/lib/fromJSON.js +3 -3
- package/dist/web/standalone/node_modules/postcss/lib/input.js +29 -54
- package/dist/web/standalone/node_modules/postcss/lib/lazy-result.js +37 -47
- package/dist/web/standalone/node_modules/postcss/lib/map-generator.js +9 -26
- package/dist/web/standalone/node_modules/postcss/lib/no-work-result.js +55 -57
- package/dist/web/standalone/node_modules/postcss/lib/node.js +31 -99
- package/dist/web/standalone/node_modules/postcss/lib/parse.js +1 -1
- package/dist/web/standalone/node_modules/postcss/lib/parser.js +9 -10
- package/dist/web/standalone/node_modules/postcss/lib/postcss.js +12 -12
- package/dist/web/standalone/node_modules/postcss/lib/previous-map.js +11 -30
- package/dist/web/standalone/node_modules/postcss/lib/processor.js +7 -7
- package/dist/web/standalone/node_modules/postcss/lib/result.js +5 -5
- package/dist/web/standalone/node_modules/postcss/lib/rule.js +6 -6
- package/dist/web/standalone/node_modules/postcss/lib/stringifier.js +28 -69
- package/dist/web/standalone/node_modules/postcss/lib/tokenize.js +2 -6
- package/dist/web/standalone/node_modules/postcss/package.json +48 -48
- package/dist/web/standalone/package.json +1 -1
- package/dist/web-mode.d.ts +2 -0
- package/dist/web-mode.js +20 -8
- package/dist/worktree-cli.js +3 -6
- package/dist/worktree-status-banner.js +7 -11
- package/package.json +2 -1
- package/packages/cloud-mcp-gateway/package.json +2 -2
- 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/session/agent-session-extensions.d.ts +2 -0
- package/packages/gsd-agent-core/dist/session/agent-session-extensions.d.ts.map +1 -1
- package/packages/gsd-agent-core/dist/session/agent-session-extensions.js +14 -0
- package/packages/gsd-agent-core/dist/session/agent-session-extensions.js.map +1 -1
- package/packages/gsd-agent-core/package.json +5 -5
- 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 +3 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.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 +106 -40
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.js +6 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.js.map +1 -1
- package/packages/gsd-agent-modes/package.json +7 -7
- package/packages/mcp-server/dist/cli.js +6 -3
- package/packages/mcp-server/dist/cli.js.map +1 -1
- package/packages/mcp-server/dist/server.d.ts +10 -0
- package/packages/mcp-server/dist/server.d.ts.map +1 -1
- package/packages/mcp-server/dist/server.js +8 -0
- package/packages/mcp-server/dist/server.js.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.d.ts +49 -0
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +48 -22
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/package.json +3 -3
- package/packages/native/package.json +1 -1
- package/packages/pi-agent-core/package.json +1 -1
- 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/models.generated.d.ts +455 -546
- package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
- package/packages/pi-ai/dist/models.generated.js +481 -599
- package/packages/pi-ai/dist/models.generated.js.map +1 -1
- package/packages/pi-ai/package.json +1 -1
- package/packages/pi-coding-agent/dist/core/capability-patches.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/capability-patches.js +3 -1
- package/packages/pi-coding-agent/dist/core/capability-patches.js.map +1 -1
- package/packages/pi-coding-agent/package.json +7 -7
- package/packages/pi-tui/dist/components/input.js +1 -1
- package/packages/pi-tui/dist/components/input.js.map +1 -1
- package/packages/pi-tui/dist/keys.d.ts.map +1 -1
- package/packages/pi-tui/dist/keys.js +39 -30
- package/packages/pi-tui/dist/keys.js.map +1 -1
- package/packages/pi-tui/dist/stdin-buffer.d.ts.map +1 -1
- package/packages/pi-tui/dist/stdin-buffer.js +22 -0
- package/packages/pi-tui/dist/stdin-buffer.js.map +1 -1
- package/packages/pi-tui/dist/tui.d.ts.map +1 -1
- package/packages/pi-tui/dist/tui.js +9 -0
- package/packages/pi-tui/dist/tui.js.map +1 -1
- package/packages/pi-tui/package.json +2 -2
- package/packages/rpc-client/package.json +2 -2
- package/pkg/package.json +1 -1
- package/src/resources/extensions/ask-user-questions.ts +87 -24
- package/src/resources/extensions/bg-shell/utilities.ts +5 -2
- 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/managed-gsd-browser-tools.test.mjs +136 -0
- package/src/resources/extensions/claude-code-cli/models.ts +9 -0
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +148 -285
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +268 -0
- package/src/resources/extensions/claude-code-cli/turn-assembler.ts +287 -0
- package/src/resources/extensions/github-sync/templates.ts +3 -3
- package/src/resources/extensions/github-sync/tests/templates.test.ts +2 -2
- package/src/resources/extensions/gsd/artifact-projection.ts +31 -0
- package/src/resources/extensions/gsd/auto/contracts.ts +32 -2
- package/src/resources/extensions/gsd/auto/loop-deps.ts +3 -1
- package/src/resources/extensions/gsd/auto/loop.ts +83 -61
- package/src/resources/extensions/gsd/auto/orchestrator.ts +164 -17
- package/src/resources/extensions/gsd/auto/phases.ts +45 -4
- package/src/resources/extensions/gsd/auto/run-unit.ts +2 -1
- package/src/resources/extensions/gsd/auto/session.ts +4 -0
- package/src/resources/extensions/gsd/auto-dashboard.ts +18 -4
- package/src/resources/extensions/gsd/auto-dispatch.ts +20 -7
- package/src/resources/extensions/gsd/auto-model-selection.ts +8 -0
- package/src/resources/extensions/gsd/auto-post-unit.ts +29 -10
- package/src/resources/extensions/gsd/auto-prompts.ts +110 -9
- package/src/resources/extensions/gsd/auto-recovery.ts +50 -50
- package/src/resources/extensions/gsd/auto-runtime-state.ts +26 -0
- package/src/resources/extensions/gsd/auto-start.ts +29 -35
- package/src/resources/extensions/gsd/auto-timers.ts +16 -2
- package/src/resources/extensions/gsd/auto-tool-tracking.ts +54 -0
- package/src/resources/extensions/gsd/auto-unit-tool-scope.ts +19 -47
- package/src/resources/extensions/gsd/auto-verification.ts +7 -8
- package/src/resources/extensions/gsd/auto-worktree-repair.ts +13 -2
- package/src/resources/extensions/gsd/auto-worktree.ts +68 -384
- package/src/resources/extensions/gsd/auto.ts +35 -32
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +3 -5
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +29 -37
- package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +20 -43
- package/src/resources/extensions/gsd/bootstrap/query-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 -161
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +136 -6
- package/src/resources/extensions/gsd/branch-patterns.ts +3 -0
- package/src/resources/extensions/gsd/browser-evidence.ts +18 -2
- package/src/resources/extensions/gsd/captures.ts +5 -16
- package/src/resources/extensions/gsd/closeout-consistency-gate.ts +27 -5
- package/src/resources/extensions/gsd/closeout-recovery.ts +2 -1
- package/src/resources/extensions/gsd/codebase-generator.ts +9 -5
- package/src/resources/extensions/gsd/commands/catalog.ts +6 -68
- package/src/resources/extensions/gsd/commands/handlers/auto.ts +3 -0
- package/src/resources/extensions/gsd/commands-handlers.ts +18 -0
- package/src/resources/extensions/gsd/commands-inspect.ts +7 -8
- package/src/resources/extensions/gsd/commands-maintenance.ts +74 -40
- package/src/resources/extensions/gsd/commands-ship.ts +2 -2
- package/src/resources/extensions/gsd/commands-verdict.ts +19 -2
- package/src/resources/extensions/gsd/crash-recovery.ts +3 -9
- package/src/resources/extensions/gsd/db/engine.ts +809 -0
- package/src/resources/extensions/gsd/db/queries.ts +453 -0
- package/src/resources/extensions/gsd/db/sql-constants.ts +12 -0
- package/src/resources/extensions/gsd/db/writers/cascades.ts +237 -0
- package/src/resources/extensions/gsd/db/writers/import-restore.ts +310 -0
- package/src/resources/extensions/gsd/db/writers/memory.ts +220 -0
- package/src/resources/extensions/gsd/db/writers/reconcile.ts +500 -0
- package/src/resources/extensions/gsd/db/writers/status.ts +88 -0
- package/src/resources/extensions/gsd/db-workspace.ts +170 -0
- package/src/resources/extensions/gsd/delegation-policy.ts +3 -11
- package/src/resources/extensions/gsd/discussion-handoff.ts +276 -0
- package/src/resources/extensions/gsd/docs/preferences-reference.md +9 -0
- package/src/resources/extensions/gsd/doctor-environment.ts +5 -13
- package/src/resources/extensions/gsd/doctor-format.ts +12 -7
- package/src/resources/extensions/gsd/doctor-git-checks.ts +3 -3
- package/src/resources/extensions/gsd/doctor-runtime-checks.ts +22 -17
- package/src/resources/extensions/gsd/doctor.ts +15 -5
- package/src/resources/extensions/gsd/error-classifier.ts +12 -1
- package/src/resources/extensions/gsd/git-conflict-state.ts +17 -1
- package/src/resources/extensions/gsd/git-service.ts +1 -0
- package/src/resources/extensions/gsd/gitignore.ts +3 -0
- package/src/resources/extensions/gsd/gsd-db.ts +185 -2373
- package/src/resources/extensions/gsd/guidance.ts +139 -0
- package/src/resources/extensions/gsd/guided-flow.ts +95 -561
- package/src/resources/extensions/gsd/guided-unit-completion.ts +275 -0
- package/src/resources/extensions/gsd/markdown-renderer.ts +2 -1
- package/src/resources/extensions/gsd/mcp-filter.ts +4 -24
- package/src/resources/extensions/gsd/mcp-tool-name.ts +30 -0
- package/src/resources/extensions/gsd/md-importer.ts +3 -3
- package/src/resources/extensions/gsd/memory-consolidation-scanner.ts +1 -1
- package/src/resources/extensions/gsd/migrate/safety.ts +20 -9
- package/src/resources/extensions/gsd/migration-auto-check.ts +30 -5
- package/src/resources/extensions/gsd/milestone-closeout-proof.ts +131 -0
- package/src/resources/extensions/gsd/milestone-closeout.ts +12 -4
- package/src/resources/extensions/gsd/milestone-merge-transaction.ts +47 -0
- package/src/resources/extensions/gsd/milestone-planning-persistence.ts +224 -0
- package/src/resources/extensions/gsd/milestone-readiness.ts +125 -0
- package/src/resources/extensions/gsd/milestone-settlement.ts +81 -0
- package/src/resources/extensions/gsd/milestone-validation-evidence.ts +95 -0
- package/src/resources/extensions/gsd/milestone-validation-verdict.ts +80 -0
- package/src/resources/extensions/gsd/model-cost-table.ts +1 -0
- package/src/resources/extensions/gsd/model-router.ts +3 -0
- package/src/resources/extensions/gsd/notification-store.ts +26 -3
- package/src/resources/extensions/gsd/parallel-eligibility.ts +4 -5
- package/src/resources/extensions/gsd/parallel-merge.ts +12 -9
- package/src/resources/extensions/gsd/parallel-monitor-overlay.ts +10 -7
- package/src/resources/extensions/gsd/parallel-orchestrator.ts +6 -2
- package/src/resources/extensions/gsd/paths.ts +42 -22
- package/src/resources/extensions/gsd/pre-execution-checks.ts +109 -3
- package/src/resources/extensions/gsd/preferences-diagnostics.ts +98 -0
- package/src/resources/extensions/gsd/preferences-models.ts +10 -46
- package/src/resources/extensions/gsd/preferences-types.ts +16 -0
- package/src/resources/extensions/gsd/preferences.ts +191 -28
- package/src/resources/extensions/gsd/prompts/complete-slice.md +1 -0
- package/src/resources/extensions/gsd/prompts/execute-task.md +2 -0
- package/src/resources/extensions/gsd/prompts/guided-discuss-project.md +3 -1
- package/src/resources/extensions/gsd/prompts/plan-milestone.md +2 -0
- package/src/resources/extensions/gsd/prompts/plan-slice.md +2 -1
- package/src/resources/extensions/gsd/prompts/refine-slice.md +2 -1
- package/src/resources/extensions/gsd/prompts/replan-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/system.md +1 -1
- package/src/resources/extensions/gsd/provider-error-guidance.ts +4 -9
- package/src/resources/extensions/gsd/provider-payload-policy.ts +140 -0
- 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/pull-request-process.ts +41 -0
- package/src/resources/extensions/gsd/quality-gate-closure.ts +140 -0
- package/src/resources/extensions/gsd/question-transport.ts +138 -0
- package/src/resources/extensions/gsd/recovery-classification.ts +47 -88
- package/src/resources/extensions/gsd/roadmap-slices.ts +8 -2
- package/src/resources/extensions/gsd/safety/evidence-collector.ts +36 -4
- package/src/resources/extensions/gsd/safety/evidence-cross-ref.ts +7 -2
- package/src/resources/extensions/gsd/safety/file-change-validator.ts +14 -0
- package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +6 -2
- package/src/resources/extensions/gsd/state-transition-matrix.ts +42 -0
- package/src/resources/extensions/gsd/state.ts +19 -26
- package/src/resources/extensions/gsd/status-guards.ts +59 -8
- package/src/resources/extensions/gsd/stop-notice.ts +75 -0
- package/src/resources/extensions/gsd/templates/plan.md +7 -0
- package/src/resources/extensions/gsd/templates/project.md +1 -0
- package/src/resources/extensions/gsd/templates/roadmap.md +1 -1
- package/src/resources/extensions/gsd/templates/uat.md +5 -1
- package/src/resources/extensions/gsd/tests/ask-user-questions-render.test.ts +92 -0
- package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +29 -1
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +444 -5
- package/src/resources/extensions/gsd/tests/auto-milestone-target.test.ts +23 -0
- package/src/resources/extensions/gsd/tests/auto-model-selection-tool-poisoning.test.ts +18 -0
- package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +133 -4
- package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +3 -1
- package/src/resources/extensions/gsd/tests/auto-post-unit-evidence-crossref-4909.test.ts +46 -0
- package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +34 -0
- package/src/resources/extensions/gsd/tests/auto-worktree-registry.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/auto-worktree-repair.test.ts +4 -2
- 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/canonical-milestone-root.test.ts +20 -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 +44 -0
- package/src/resources/extensions/gsd/tests/codebase-generator.test.ts +22 -0
- package/src/resources/extensions/gsd/tests/commands-dispatcher-workspace-git.test.ts +11 -0
- package/src/resources/extensions/gsd/tests/commands-verdict.test.ts +46 -8
- package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +34 -3
- package/src/resources/extensions/gsd/tests/dispatch-run-uat-browser-tools.test.ts +89 -0
- package/src/resources/extensions/gsd/tests/doctor-scope-db-unavailable.test.ts +18 -0
- package/src/resources/extensions/gsd/tests/evidence-xref-gsd-exec.test.ts +157 -0
- package/src/resources/extensions/gsd/tests/execute-task-rendering.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/extension-bootstrap-isolation.test.ts +35 -1
- package/src/resources/extensions/gsd/tests/file-change-validator.test.ts +33 -1
- package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-no-blockers.md +1 -5
- package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-with-blockers.md +1 -5
- package/src/resources/extensions/gsd/tests/gate-state-canonicalization.test.ts +48 -1
- package/src/resources/extensions/gsd/tests/guidance.test.ts +125 -0
- package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +58 -15
- package/src/resources/extensions/gsd/tests/integration/auto-worktree.test.ts +74 -59
- package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +3 -2
- package/src/resources/extensions/gsd/tests/integration/gsd-integration-fixture.ts +80 -0
- package/src/resources/extensions/gsd/tests/mcp-tool-name.test.ts +34 -0
- package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +143 -1
- package/src/resources/extensions/gsd/tests/milestone-closeout-proof.test.ts +99 -0
- package/src/resources/extensions/gsd/tests/milestone-closeout.test.ts +25 -0
- package/src/resources/extensions/gsd/tests/milestone-merge-transaction.test.ts +46 -0
- package/src/resources/extensions/gsd/tests/milestone-readiness.test.ts +65 -0
- package/src/resources/extensions/gsd/tests/milestone-validation-evidence.test.ts +41 -0
- package/src/resources/extensions/gsd/tests/milestone-validation-verdict.test.ts +55 -0
- package/src/resources/extensions/gsd/tests/notification-store.test.ts +32 -0
- package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +45 -0
- package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +2 -0
- package/src/resources/extensions/gsd/tests/planning-crossval.test.ts +45 -0
- package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +193 -1
- package/src/resources/extensions/gsd/tests/preferences-diagnostics.test.ts +67 -0
- package/src/resources/extensions/gsd/tests/preferences.test.ts +183 -0
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +46 -0
- package/src/resources/extensions/gsd/tests/provider-error-guidance.test.ts +3 -3
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +9 -0
- package/src/resources/extensions/gsd/tests/provider-payload-policy.test.ts +165 -0
- package/src/resources/extensions/gsd/tests/publication.test.ts +120 -0
- package/src/resources/extensions/gsd/tests/pull-request-process.test.ts +47 -0
- package/src/resources/extensions/gsd/tests/recovery-classification-illegal-transition.test.ts +30 -0
- package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +342 -1
- package/src/resources/extensions/gsd/tests/roadmap-parse-regression.test.ts +40 -0
- package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +26 -1
- package/src/resources/extensions/gsd/tests/safety-harness-false-positives.test.ts +38 -0
- package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +80 -0
- package/src/resources/extensions/gsd/tests/session-switch-clears-pending-autostart.test.ts +108 -0
- package/src/resources/extensions/gsd/tests/single-writer-invariant.test.ts +144 -7
- package/src/resources/extensions/gsd/tests/stale-queued-milestone.test.ts +27 -0
- package/src/resources/extensions/gsd/tests/start-auto-detached.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/state-transition-matrix.test.ts +36 -0
- package/src/resources/extensions/gsd/tests/status-guards.test.ts +38 -0
- package/src/resources/extensions/gsd/tests/stop-notice.test.ts +70 -0
- package/src/resources/extensions/gsd/tests/token-tool-gating.test.ts +35 -0
- package/src/resources/extensions/gsd/tests/tool-availability-audit.test.ts +35 -0
- package/src/resources/extensions/gsd/tests/tool-invocation-error-loop-break.test.ts +8 -0
- package/src/resources/extensions/gsd/tests/tool-naming.test.ts +35 -42
- package/src/resources/extensions/gsd/tests/tool-surface-readiness.test.ts +155 -0
- package/src/resources/extensions/gsd/tests/uat-policy.test.ts +24 -6
- package/src/resources/extensions/gsd/tests/unit-closeout.test.ts +209 -0
- package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +70 -2
- package/src/resources/extensions/gsd/tests/unit-registry.test.ts +163 -0
- package/src/resources/extensions/gsd/tests/user-input-boundary.test.ts +86 -1
- package/src/resources/extensions/gsd/tests/validate-milestone-stuck-guard.test.ts +39 -0
- package/src/resources/extensions/gsd/tests/web-app-uat.test.ts +193 -0
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +128 -11
- package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/workspace-git-preflight.test.ts +15 -0
- package/src/resources/extensions/gsd/tests/worktree-lifecycle.test.ts +41 -4
- package/src/resources/extensions/gsd/tests/worktree-manager.test.ts +43 -1
- package/src/resources/extensions/gsd/tests/worktree-placement.test.ts +113 -0
- package/src/resources/extensions/gsd/tests/worktree-projection-writers.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/worktree-reentry.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/worktree-safety.test.ts +3 -1
- package/src/resources/extensions/gsd/tests/worktree-symlink-removal.test.ts +12 -6
- package/src/resources/extensions/gsd/tests/worktree-teardown-safety.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/worktree-telemetry.test.ts +22 -0
- package/src/resources/extensions/gsd/tests/write-gate.test.ts +121 -0
- package/src/resources/extensions/gsd/tool-contract.ts +86 -8
- package/src/resources/extensions/gsd/tool-presentation-plan.ts +16 -33
- package/src/resources/extensions/gsd/tool-surface-readiness.ts +76 -0
- package/src/resources/extensions/gsd/tool-surface-snapshot.ts +47 -0
- package/src/resources/extensions/gsd/tools/complete-slice.ts +23 -58
- package/src/resources/extensions/gsd/tools/exec-tool.ts +5 -8
- package/src/resources/extensions/gsd/tools/plan-milestone.ts +19 -160
- package/src/resources/extensions/gsd/tools/plan-slice.ts +12 -6
- package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +43 -0
- package/src/resources/extensions/gsd/tools/reopen-milestone.ts +11 -38
- package/src/resources/extensions/gsd/tools/reopen-slice.ts +14 -42
- package/src/resources/extensions/gsd/tools/skip-slice.ts +18 -44
- package/src/resources/extensions/gsd/tools/validate-milestone.ts +25 -84
- package/src/resources/extensions/gsd/uat-policy.ts +20 -10
- package/src/resources/extensions/gsd/uat-run.ts +10 -14
- package/src/resources/extensions/gsd/undo.ts +9 -8
- package/src/resources/extensions/gsd/unit-closeout.ts +201 -0
- package/src/resources/extensions/gsd/unit-context-composer.ts +97 -21
- package/src/resources/extensions/gsd/unit-context-manifest.ts +4 -28
- package/src/resources/extensions/gsd/unit-registry.ts +412 -0
- package/src/resources/extensions/gsd/unit-runtime.ts +3 -2
- package/src/resources/extensions/gsd/unit-tool-contracts.ts +27 -191
- package/src/resources/extensions/gsd/user-input-boundary.ts +18 -0
- package/src/resources/extensions/gsd/validation-block-guard.ts +2 -0
- package/src/resources/extensions/gsd/web-app-uat.ts +144 -0
- package/src/resources/extensions/gsd/workflow-mcp.ts +22 -110
- package/src/resources/extensions/gsd/workflow-reconcile.ts +3 -3
- package/src/resources/extensions/gsd/workflow-tool-surface.ts +76 -0
- package/src/resources/extensions/gsd/workspace-git-guard.ts +1 -0
- package/src/resources/extensions/gsd/worktree-git-recovery.ts +314 -0
- package/src/resources/extensions/gsd/worktree-lifecycle.ts +17 -17
- package/src/resources/extensions/gsd/worktree-manager.ts +47 -28
- package/src/resources/extensions/gsd/worktree-placement.ts +63 -0
- package/src/resources/extensions/gsd/worktree-reentry.ts +10 -7
- package/src/resources/extensions/gsd/worktree-root.ts +29 -6
- package/src/resources/extensions/gsd/worktree-safety.ts +8 -5
- package/src/resources/extensions/gsd/worktree-session-state.ts +11 -11
- package/src/resources/extensions/gsd/worktree-state-projection.ts +55 -7
- package/src/resources/extensions/gsd/worktree-telemetry.ts +16 -0
- 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 +88 -4
- package/src/resources/extensions/shared/interview-ui.ts +15 -2
- package/src/resources/shared/claude-runtime-floor.ts +248 -0
- package/src/resources/skills/create-skill/references/executable-code.md +1 -1
- 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/gsd-browser/SKILL.md +1 -1
- package/src/resources/skills/spike-wrap-up/SKILL.md +9 -9
- package/dist/web/standalone/.next/static/chunks/2659.feb6499ca863ebfc.js +0 -1
- package/dist/web/standalone/.next/static/chunks/2772.151789db0edea835.js +0 -1
- package/dist/web/standalone/.next/static/chunks/4283.10a065467b5340d8.js +0 -2
- package/dist/web/standalone/.next/static/chunks/5826.960dc4634cc9b0d3.js +0 -1
- package/dist/web/standalone/.next/static/chunks/796.46f811c0fac23aab.js +0 -10
- package/dist/web/standalone/.next/static/chunks/8785.d32f7a61f55c1600.js +0 -1
- /package/dist/web/standalone/.next/static/{Qbr81pQ-pbQXP4bq2VXLv → AOpDeK_gJHU8OZjRo31gQ}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{Qbr81pQ-pbQXP4bq2VXLv → AOpDeK_gJHU8OZjRo31gQ}/_ssgManifest.js +0 -0
|
@@ -27,13 +27,43 @@ export interface AutoStatus {
|
|
|
27
27
|
transitionCount: number;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
+
export type AutoTerminalOutcome =
|
|
31
|
+
| {
|
|
32
|
+
code: "all-complete";
|
|
33
|
+
displayReason: string;
|
|
34
|
+
allMilestonesComplete: true;
|
|
35
|
+
}
|
|
36
|
+
| {
|
|
37
|
+
code: "no-remaining-units";
|
|
38
|
+
displayReason: string;
|
|
39
|
+
allMilestonesComplete: false;
|
|
40
|
+
}
|
|
41
|
+
| {
|
|
42
|
+
code: "settlement-blocked";
|
|
43
|
+
displayReason: string;
|
|
44
|
+
nextAction: string;
|
|
45
|
+
milestoneId: string;
|
|
46
|
+
allMilestonesComplete: false;
|
|
47
|
+
};
|
|
48
|
+
|
|
30
49
|
export type AutoAdvanceResult =
|
|
31
50
|
| { kind: "started" }
|
|
32
51
|
| { kind: "resumed" }
|
|
33
52
|
| { kind: "advanced"; unit: UnitRef; stateSnapshot: GSDState }
|
|
34
53
|
| { kind: "skipped"; reason: string; stateSnapshot?: GSDState }
|
|
35
|
-
| {
|
|
36
|
-
|
|
54
|
+
| {
|
|
55
|
+
kind: "blocked";
|
|
56
|
+
reason: string;
|
|
57
|
+
action: "pause" | "stop";
|
|
58
|
+
stateSnapshot?: GSDState;
|
|
59
|
+
terminalOutcome?: AutoTerminalOutcome;
|
|
60
|
+
}
|
|
61
|
+
| {
|
|
62
|
+
kind: "stopped";
|
|
63
|
+
reason: string;
|
|
64
|
+
stateSnapshot?: GSDState;
|
|
65
|
+
terminalOutcome?: AutoTerminalOutcome;
|
|
66
|
+
}
|
|
37
67
|
| { kind: "paused"; reason: string }
|
|
38
68
|
| { kind: "error"; reason: string };
|
|
39
69
|
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
import type { ExtensionAPI, ExtensionContext } from "@gsd/pi-coding-agent";
|
|
8
8
|
|
|
9
9
|
import type { AutoSession } from "./session.js";
|
|
10
|
+
import type { AutoTerminalOutcome } from "./contracts.js";
|
|
10
11
|
import type { ErrorContext } from "./types.js";
|
|
11
12
|
import type { GSDPreferences } from "../preferences.js";
|
|
12
13
|
import type { GSDState } from "../types.js";
|
|
@@ -33,6 +34,7 @@ export interface StopAutoOptions {
|
|
|
33
34
|
milestoneTitle?: string | null;
|
|
34
35
|
allMilestonesComplete?: boolean;
|
|
35
36
|
};
|
|
37
|
+
terminalOutcome?: AutoTerminalOutcome;
|
|
36
38
|
/**
|
|
37
39
|
* Foreground closeout-boundary stops already have the useful final surface in
|
|
38
40
|
* the transcript. Preserve it instead of installing a replacement widget.
|
|
@@ -141,7 +143,7 @@ export interface LoopDeps {
|
|
|
141
143
|
basePath: string,
|
|
142
144
|
mid: string,
|
|
143
145
|
) => void;
|
|
144
|
-
getIsolationMode: (basePath?: string) =>
|
|
146
|
+
getIsolationMode: (basePath?: string) => "none" | "worktree" | "branch";
|
|
145
147
|
getCurrentBranch: (basePath: string) => string;
|
|
146
148
|
autoWorktreeBranch: (milestoneId: string) => string;
|
|
147
149
|
resolveMilestoneFile: (
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* auto/loop.ts — Main auto-mode execution loop.
|
|
5
5
|
*
|
|
6
|
-
* Iterates:
|
|
6
|
+
* Iterates: orchestration.advance → guards → runUnit → finalize → repeat.
|
|
7
7
|
* Exits when s.active becomes false or a terminal condition is reached.
|
|
8
8
|
*
|
|
9
9
|
* Imports from: auto/types, auto/resolve, auto/phases
|
|
@@ -15,6 +15,7 @@ import { randomUUID } from "node:crypto";
|
|
|
15
15
|
import { mkdirSync, writeFileSync } from "node:fs";
|
|
16
16
|
import { join } from "node:path";
|
|
17
17
|
import type { AutoSession } from "./session.js";
|
|
18
|
+
import type { AutoTerminalOutcome } from "./contracts.js";
|
|
18
19
|
import type { LoopDeps, StopAutoOptions } from "./loop-deps.js";
|
|
19
20
|
import type { GSDState } from "../types.js";
|
|
20
21
|
import {
|
|
@@ -24,13 +25,7 @@ import {
|
|
|
24
25
|
type IterationData,
|
|
25
26
|
} from "./types.js";
|
|
26
27
|
import { _clearCurrentResolve } from "./resolve.js";
|
|
27
|
-
import {
|
|
28
|
-
runPreDispatch,
|
|
29
|
-
runDispatch,
|
|
30
|
-
runGuards,
|
|
31
|
-
runFinalize,
|
|
32
|
-
STUCK_WINDOW_SIZE,
|
|
33
|
-
} from "./phases.js";
|
|
28
|
+
import { runGuards, runFinalize, STUCK_WINDOW_SIZE } from "./phases.js";
|
|
34
29
|
import { debugLog } from "../debug-logger.js";
|
|
35
30
|
import { isInfrastructureError, isTransientCooldownError, getCooldownRetryAfterMs, COOLDOWN_FALLBACK_WAIT_MS, MAX_COOLDOWN_RETRIES } from "./infra-errors.js";
|
|
36
31
|
import { ModelPolicyDispatchBlockedError } from "../auto-model-selection.js";
|
|
@@ -146,6 +141,25 @@ function resolveCompletionStopFromState(
|
|
|
146
141
|
};
|
|
147
142
|
}
|
|
148
143
|
|
|
144
|
+
function resolveCompletionStopFromOutcome(
|
|
145
|
+
outcome: AutoTerminalOutcome | undefined,
|
|
146
|
+
stateSnapshot: GSDState | undefined,
|
|
147
|
+
): { reason: string; options: StopAutoOptions } | null {
|
|
148
|
+
if (outcome?.code !== "all-complete") return null;
|
|
149
|
+
const completedMilestone = stateSnapshot?.lastCompletedMilestone ?? stateSnapshot?.activeMilestone;
|
|
150
|
+
return {
|
|
151
|
+
reason: outcome.displayReason,
|
|
152
|
+
options: {
|
|
153
|
+
completionWidget: {
|
|
154
|
+
milestoneId: completedMilestone?.id ?? null,
|
|
155
|
+
milestoneTitle: completedMilestone?.title ?? null,
|
|
156
|
+
allMilestonesComplete: true,
|
|
157
|
+
},
|
|
158
|
+
terminalOutcome: outcome,
|
|
159
|
+
},
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
|
|
149
163
|
// ── Stuck detection persistence (#3704) ──────────────────────────────────
|
|
150
164
|
// Phase C migration: stuck-state.json deleted in favor of DB-backed
|
|
151
165
|
// equivalents. recentUnits is rebuilt from unit_dispatches (Phase B
|
|
@@ -158,6 +172,8 @@ function resolveCompletionStopFromState(
|
|
|
158
172
|
// tolerates — same behavior as a fresh session.
|
|
159
173
|
const STUCK_RECOVERY_ATTEMPTS_KEY = "stuck_recovery_attempts";
|
|
160
174
|
const MAX_CONSECUTIVE_ALREADY_ACTIVE_SKIPS = 3;
|
|
175
|
+
const ORCHESTRATION_MISSING_REASON =
|
|
176
|
+
"Auto Orchestration Module is not wired; cannot dispatch built-in GSD Unit.";
|
|
161
177
|
|
|
162
178
|
function stableStuckStateScopeId(s: AutoSession): string {
|
|
163
179
|
return normalizeRealPath(s.scope?.workspace.projectRoot ?? (s.originalBasePath || s.basePath));
|
|
@@ -353,9 +369,9 @@ function closeOutCrashedUnit(s: AutoSession, iterData: IterationData, err: unkno
|
|
|
353
369
|
}
|
|
354
370
|
|
|
355
371
|
/**
|
|
356
|
-
* Main auto-mode execution loop. Iterates:
|
|
357
|
-
* runUnit → finalize → repeat. Exits when s.active becomes false or a
|
|
358
|
-
*
|
|
372
|
+
* Main auto-mode execution loop. Iterates: orchestration.advance → guards →
|
|
373
|
+
* runUnit → finalize → repeat. Exits when s.active becomes false or a terminal
|
|
374
|
+
* condition is reached.
|
|
359
375
|
*
|
|
360
376
|
* This is the linear replacement for the recursive
|
|
361
377
|
* dispatchNextUnit → resolveAgentEnd → dispatchNextUnit chain.
|
|
@@ -572,10 +588,9 @@ export async function autoLoop(
|
|
|
572
588
|
let iterData: IterationData;
|
|
573
589
|
|
|
574
590
|
// ── Custom engine path ──────────────────────────────────────────────
|
|
575
|
-
// When activeEngineId is a non-dev value,
|
|
576
|
-
//
|
|
577
|
-
//
|
|
578
|
-
// After unit execution, verifies then reconciles via the engine layer.
|
|
591
|
+
// When activeEngineId is a non-dev value, the custom engine drives its own
|
|
592
|
+
// state via GRAPH.yaml. It shares guards and Unit execution with the dev
|
|
593
|
+
// path, then verifies and reconciles via the engine layer.
|
|
579
594
|
//
|
|
580
595
|
// GSD_ENGINE_BYPASS=1 skips the engine layer entirely — falls through
|
|
581
596
|
// to the dev path below.
|
|
@@ -656,7 +671,7 @@ export async function autoLoop(
|
|
|
656
671
|
observedUnitType = iterData.unitType;
|
|
657
672
|
observedUnitId = iterData.unitId;
|
|
658
673
|
|
|
659
|
-
// ── Progress widget (mirrors dev path
|
|
674
|
+
// ── Progress widget (mirrors the dev path) ──
|
|
660
675
|
deps.updateProgressWidget(ctx, iterData.unitType, iterData.unitId, iterData.state);
|
|
661
676
|
|
|
662
677
|
// ── Guards (shared with dev path) ──
|
|
@@ -876,14 +891,22 @@ export async function autoLoop(
|
|
|
876
891
|
|
|
877
892
|
if (orchestrationResult.kind === "blocked") {
|
|
878
893
|
s.pendingOrchestrationDispatch = null;
|
|
894
|
+
const blockMessage = orchestrationResult.terminalOutcome?.code === "settlement-blocked"
|
|
895
|
+
? [
|
|
896
|
+
orchestrationResult.terminalOutcome.displayReason,
|
|
897
|
+
`Next: ${orchestrationResult.terminalOutcome.nextAction}`,
|
|
898
|
+
].join("\n")
|
|
899
|
+
: orchestrationResult.reason;
|
|
879
900
|
if (orchestrationResult.action === "pause") {
|
|
880
901
|
await deps.pauseAuto(ctx, pi, {
|
|
881
|
-
message:
|
|
902
|
+
message: blockMessage,
|
|
882
903
|
category: "unknown",
|
|
904
|
+
}, {
|
|
905
|
+
expectedCurrentUnit: null,
|
|
883
906
|
});
|
|
884
907
|
finishTurn("paused", "manual-attention", "orchestration-blocked");
|
|
885
908
|
} else {
|
|
886
|
-
await deps.stopAuto(ctx, pi,
|
|
909
|
+
await deps.stopAuto(ctx, pi, blockMessage);
|
|
887
910
|
finishTurn("stopped", "manual-attention", "orchestration-blocked");
|
|
888
911
|
}
|
|
889
912
|
finishIncompleteIteration({
|
|
@@ -894,8 +917,20 @@ export async function autoLoop(
|
|
|
894
917
|
break;
|
|
895
918
|
}
|
|
896
919
|
|
|
920
|
+
if (orchestrationResult.kind === "skipped") {
|
|
921
|
+
s.pendingOrchestrationDispatch = null;
|
|
922
|
+
emitIterationEnd({ skipped: true });
|
|
923
|
+
completeIteration();
|
|
924
|
+
finishTurn("skipped");
|
|
925
|
+
continue;
|
|
926
|
+
}
|
|
927
|
+
|
|
897
928
|
if (orchestrationResult.kind === "paused") {
|
|
898
929
|
s.pendingOrchestrationDispatch = null;
|
|
930
|
+
finishIncompleteIteration({
|
|
931
|
+
status: "paused",
|
|
932
|
+
reason: orchestrationResult.reason,
|
|
933
|
+
});
|
|
899
934
|
finishTurn("skipped");
|
|
900
935
|
continue;
|
|
901
936
|
}
|
|
@@ -917,7 +952,11 @@ export async function autoLoop(
|
|
|
917
952
|
|
|
918
953
|
if (orchestrationResult.kind === "stopped") {
|
|
919
954
|
s.pendingOrchestrationDispatch = null;
|
|
920
|
-
|
|
955
|
+
let completionStop = resolveCompletionStopFromOutcome(
|
|
956
|
+
orchestrationResult.terminalOutcome,
|
|
957
|
+
orchestrationResult.stateSnapshot,
|
|
958
|
+
);
|
|
959
|
+
completionStop ??= resolveCompletionStopFromState(orchestrationResult.stateSnapshot);
|
|
921
960
|
if (completionStop) {
|
|
922
961
|
await deps.stopAuto(ctx, pi, completionStop.reason, completionStop.options);
|
|
923
962
|
} else {
|
|
@@ -998,54 +1037,37 @@ export async function autoLoop(
|
|
|
998
1037
|
});
|
|
999
1038
|
observedUnitType = iterData.unitType;
|
|
1000
1039
|
observedUnitId = iterData.unitId;
|
|
1001
|
-
|
|
1002
|
-
const
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1040
|
+
|
|
1041
|
+
const guardMilestoneId = iterData.mid ?? s.currentMilestoneId ?? "workflow";
|
|
1042
|
+
const guardsResult = await runGuards(ic, guardMilestoneId);
|
|
1043
|
+
phaseReporter.report("guard", guardsResult.action, {
|
|
1044
|
+
unitType: iterData.unitType,
|
|
1045
|
+
unitId: iterData.unitId,
|
|
1046
|
+
});
|
|
1047
|
+
if (guardsResult.action === "break") {
|
|
1048
|
+
finishTurn("stopped", "manual-attention", "guard-break");
|
|
1006
1049
|
finishIncompleteIteration({
|
|
1007
1050
|
status: "stopped",
|
|
1008
|
-
reason: "
|
|
1051
|
+
reason: "guard-break",
|
|
1052
|
+
unitType: iterData.unitType,
|
|
1053
|
+
unitId: iterData.unitId,
|
|
1009
1054
|
failureClass: "manual-attention",
|
|
1010
1055
|
});
|
|
1011
1056
|
break;
|
|
1012
1057
|
}
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
}
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
if (guardsResult.action === "break") {
|
|
1027
|
-
finishTurn("stopped", "manual-attention", "guard-break");
|
|
1028
|
-
break;
|
|
1029
|
-
}
|
|
1030
|
-
const dispatchResult = await runDispatch(ic, preData, loopState);
|
|
1031
|
-
phaseReporter.report("dispatch", dispatchResult.action);
|
|
1032
|
-
if (dispatchResult.action === "break") {
|
|
1033
|
-
finishTurn("stopped", "manual-attention", "dispatch-break");
|
|
1034
|
-
break;
|
|
1035
|
-
}
|
|
1036
|
-
if (dispatchResult.action === "continue") {
|
|
1037
|
-
emitIterationEnd({ skipped: true });
|
|
1038
|
-
completeIteration();
|
|
1039
|
-
finishTurn("skipped");
|
|
1040
|
-
continue;
|
|
1041
|
-
}
|
|
1042
|
-
if (dispatchResult.action === "retry") {
|
|
1043
|
-
finishTurn("retry", "execution", dispatchResult.reason);
|
|
1044
|
-
continue;
|
|
1045
|
-
}
|
|
1046
|
-
iterData = dispatchResult.data;
|
|
1047
|
-
observedUnitType = iterData.unitType;
|
|
1048
|
-
observedUnitId = iterData.unitId;
|
|
1058
|
+
} else {
|
|
1059
|
+
s.pendingOrchestrationDispatch = null;
|
|
1060
|
+
await deps.pauseAuto(ctx, pi, {
|
|
1061
|
+
message: ORCHESTRATION_MISSING_REASON,
|
|
1062
|
+
category: "unknown",
|
|
1063
|
+
});
|
|
1064
|
+
finishTurn("paused", "manual-attention", "orchestration-missing");
|
|
1065
|
+
finishIncompleteIteration({
|
|
1066
|
+
status: "paused",
|
|
1067
|
+
reason: ORCHESTRATION_MISSING_REASON,
|
|
1068
|
+
failureClass: "manual-attention",
|
|
1069
|
+
});
|
|
1070
|
+
break;
|
|
1049
1071
|
}
|
|
1050
1072
|
} else {
|
|
1051
1073
|
iterData = await buildSidecarIterationData({
|
|
@@ -12,13 +12,16 @@
|
|
|
12
12
|
|
|
13
13
|
import type { ExtensionAPI, ExtensionContext } from "@gsd/pi-coding-agent";
|
|
14
14
|
|
|
15
|
-
import type { AutoAdvanceResult, AutoOrchestrationModule, AutoSessionContext, AutoStatus } from "./contracts.js";
|
|
15
|
+
import type { AutoAdvanceResult, AutoOrchestrationModule, AutoSessionContext, AutoStatus, AutoTerminalOutcome } from "./contracts.js";
|
|
16
16
|
import type { AutoSession, PendingOrchestrationDispatch } from "./session.js";
|
|
17
|
-
import type { GSDState } from "../types.js";
|
|
17
|
+
import type { GSDState, Phase } from "../types.js";
|
|
18
18
|
import type { MinimalModelRegistry } from "../context-budget.js";
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
type BlockedAdvanceResult = Extract<AutoAdvanceResult, { kind: "blocked" }>;
|
|
21
|
+
|
|
22
|
+
import { debugCount, debugLog, debugTime } from "../debug-logger.js";
|
|
21
23
|
import { reconcileBeforeDispatch } from "../state-reconciliation.js";
|
|
24
|
+
import { isLegalEdge, IllegalPhaseTransitionError } from "../state-transition-matrix.js";
|
|
22
25
|
import { resolveDispatch } from "../auto-dispatch.js";
|
|
23
26
|
import { classifyFailure } from "../recovery-classification.js";
|
|
24
27
|
import { verifyExpectedArtifact, refreshRecoveryDbForArtifact } from "../auto-recovery.js";
|
|
@@ -35,14 +38,21 @@ import { checkResourcesStale, autoWorktreeBranch, mergeMilestoneToMain } from ".
|
|
|
35
38
|
import { getSessionLockStatus } from "../session-lock.js";
|
|
36
39
|
import { resolveUokFlags } from "../uok/flags.js";
|
|
37
40
|
import { emitJournalEvent as _emitJournalEvent } from "../journal.js";
|
|
38
|
-
import { loadEffectiveGSDPreferences, getIsolationMode } from "../preferences.js";
|
|
39
|
-
import {
|
|
41
|
+
import { loadEffectiveGSDPreferences, getIsolationMode, resolveEffectiveUnitIsolationMode } from "../preferences.js";
|
|
42
|
+
import {
|
|
43
|
+
detectWorktreeName,
|
|
44
|
+
getMainBranch,
|
|
45
|
+
resolveProjectRoot,
|
|
46
|
+
resolveWorktreeProjectRoot,
|
|
47
|
+
} from "../worktree.js";
|
|
48
|
+
import { getPriorSliceCompletionBlocker } from "../dispatch-guard.js";
|
|
40
49
|
import { GitServiceImpl } from "../git-service.js";
|
|
41
50
|
import { WorktreeStateProjection } from "../worktree-state-projection.js";
|
|
42
51
|
import { WorktreeLifecycle } from "../worktree-lifecycle.js";
|
|
52
|
+
import { createMilestoneMergeTransaction } from "../milestone-merge-transaction.js";
|
|
43
53
|
import { createWorkspace, scopeMilestone } from "../workspace.js";
|
|
44
54
|
import { supportsStructuredQuestions } from "../workflow-mcp.js";
|
|
45
|
-
import { getToolBaselineSnapshot } from "../auto-model-selection.js";
|
|
55
|
+
import { getRegisteredToolSnapshot, getToolBaselineSnapshot } from "../auto-model-selection.js";
|
|
46
56
|
import { deriveState } from "../state.js";
|
|
47
57
|
import { parseUnitId } from "../unit-id.js";
|
|
48
58
|
import { isClosedStatus } from "../status-guards.js";
|
|
@@ -50,12 +60,13 @@ import {
|
|
|
50
60
|
isDbAvailable,
|
|
51
61
|
getSlice,
|
|
52
62
|
getTask,
|
|
53
|
-
refreshOpenDatabaseFromDisk,
|
|
54
63
|
} from "../gsd-db.js";
|
|
64
|
+
import { refreshWorkflowDatabaseFromDisk } from "../db-workspace.js";
|
|
55
65
|
import { getErrorMessage } from "../error-utils.js";
|
|
56
66
|
import { logWarning } from "../workflow-logger.js";
|
|
57
67
|
import { existsSync, readFileSync } from "node:fs";
|
|
58
68
|
import { join } from "node:path";
|
|
69
|
+
import { evaluateAllCompleteSettlement } from "../milestone-settlement.js";
|
|
59
70
|
|
|
60
71
|
function now(): number {
|
|
61
72
|
return Date.now();
|
|
@@ -71,11 +82,19 @@ function now(): number {
|
|
|
71
82
|
*/
|
|
72
83
|
export const STUCK_WINDOW_SIZE = 6;
|
|
73
84
|
|
|
74
|
-
function
|
|
85
|
+
function noRemainingUnitsOutcome(stateSnapshot: GSDState): AutoTerminalOutcome {
|
|
75
86
|
if (stateSnapshot.phase === "complete") {
|
|
76
|
-
return
|
|
87
|
+
return {
|
|
88
|
+
code: "all-complete",
|
|
89
|
+
displayReason: "All milestones complete",
|
|
90
|
+
allMilestonesComplete: true,
|
|
91
|
+
};
|
|
77
92
|
}
|
|
78
|
-
return
|
|
93
|
+
return {
|
|
94
|
+
code: "no-remaining-units",
|
|
95
|
+
displayReason: "No remaining units",
|
|
96
|
+
allMilestonesComplete: false,
|
|
97
|
+
};
|
|
79
98
|
}
|
|
80
99
|
|
|
81
100
|
/**
|
|
@@ -118,7 +137,7 @@ export interface DispatchDecisionInput {
|
|
|
118
137
|
|
|
119
138
|
function getAlreadyClosedDispatchReason(unitType: string, unitId: string): string | null {
|
|
120
139
|
if (!isDbAvailable()) return null;
|
|
121
|
-
|
|
140
|
+
refreshWorkflowDatabaseFromDisk();
|
|
122
141
|
const { milestone, slice, task } = parseUnitId(unitId);
|
|
123
142
|
if (unitType === "execute-task" && milestone && slice && task) {
|
|
124
143
|
const row = getTask(milestone, slice, task);
|
|
@@ -201,6 +220,7 @@ export async function decideOrchestratorDispatch(
|
|
|
201
220
|
// active set may be narrowed by the prior unit before selectAndApplyModel
|
|
202
221
|
// restores it, causing false transport-preflight failures (#477 follow-up).
|
|
203
222
|
const activeTools = getToolBaselineSnapshot(pi);
|
|
223
|
+
const registeredTools = getRegisteredToolSnapshot(pi);
|
|
204
224
|
// Mirrors runDispatch: deep-planning keeps approval gates in plain chat
|
|
205
225
|
// because structured questions can be cancelled outside the chat turn on
|
|
206
226
|
// some transports.
|
|
@@ -248,6 +268,7 @@ export async function decideOrchestratorDispatch(
|
|
|
248
268
|
sessionProvider,
|
|
249
269
|
modelRegistry,
|
|
250
270
|
activeTools,
|
|
271
|
+
registeredTools,
|
|
251
272
|
sessionAuthMode: authMode,
|
|
252
273
|
sessionBaseUrl: ctx.model?.baseUrl,
|
|
253
274
|
});
|
|
@@ -310,6 +331,10 @@ export class AutoOrchestrator implements AutoOrchestrationModule {
|
|
|
310
331
|
private lastAdvanceKey: string | null = null;
|
|
311
332
|
private lastFinalizedUnitKey: string | null = null;
|
|
312
333
|
private dispatchKeyWindow: string[] = [];
|
|
334
|
+
// ADR-030 Phase Transition Invariant: the prior advance's reconciled Phase,
|
|
335
|
+
// the "from" endpoint of the edge check. In-memory; reset on start/resume/stop
|
|
336
|
+
// so the first advance of a session has no edge to assert.
|
|
337
|
+
private lastDerivedPhase: Phase | null = null;
|
|
313
338
|
// #442: the unit key we last attempted graduated stuck-recovery for. Bounds
|
|
314
339
|
// recovery to one attempt per stuck episode per run (reset on start/resume/
|
|
315
340
|
// stop), mirroring the legacy Level-1-then-Level-2 escalation in phases.ts.
|
|
@@ -532,6 +557,55 @@ export class AutoOrchestrator implements AutoOrchestrationModule {
|
|
|
532
557
|
return decideOrchestratorDispatch(this.ctx, this.pi, this.dispatchBasePath, this.s, input);
|
|
533
558
|
}
|
|
534
559
|
|
|
560
|
+
private evaluateNoRemainingUnitsSettlement(stateSnapshot: GSDState): BlockedAdvanceResult | null {
|
|
561
|
+
const settlement = evaluateAllCompleteSettlement({
|
|
562
|
+
milestoneId: this.s.currentMilestoneId ?? stateSnapshot.activeMilestone?.id,
|
|
563
|
+
statePhase: stateSnapshot.phase,
|
|
564
|
+
basePath: this.s.basePath || this.getLiveDispatchBasePath(),
|
|
565
|
+
originalBasePath: this.s.originalBasePath || this.runtimeBasePath,
|
|
566
|
+
milestoneMerged: this.s.milestoneMergedInPhases,
|
|
567
|
+
});
|
|
568
|
+
this.s.milestoneSettlement = settlement;
|
|
569
|
+
if (settlement.ok) return null;
|
|
570
|
+
return {
|
|
571
|
+
kind: "blocked",
|
|
572
|
+
reason: settlement.message,
|
|
573
|
+
action: settlement.action,
|
|
574
|
+
stateSnapshot,
|
|
575
|
+
terminalOutcome: {
|
|
576
|
+
code: "settlement-blocked",
|
|
577
|
+
displayReason: settlement.message,
|
|
578
|
+
nextAction: settlement.nextAction,
|
|
579
|
+
milestoneId: settlement.milestoneId,
|
|
580
|
+
allMilestonesComplete: false,
|
|
581
|
+
},
|
|
582
|
+
};
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
private clearPendingDispatch(): void {
|
|
586
|
+
this.s.pendingOrchestrationDispatch = null;
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
private findPriorSliceCompletionBlocker(unitType: string, unitId: string): string | null {
|
|
590
|
+
const guardBasePath = resolveWorktreeProjectRoot(
|
|
591
|
+
this.getLiveDispatchBasePath(),
|
|
592
|
+
this.s.originalBasePath,
|
|
593
|
+
);
|
|
594
|
+
let mainBranch = "main";
|
|
595
|
+
try {
|
|
596
|
+
mainBranch = getMainBranch(guardBasePath);
|
|
597
|
+
} catch (err) {
|
|
598
|
+
// Preserve legacy dispatch behavior: fall back to main when branch
|
|
599
|
+
// discovery fails, then let the guard make the progression decision.
|
|
600
|
+
logWarning(
|
|
601
|
+
"engine",
|
|
602
|
+
`branch discovery failed, falling back to main: ${getErrorMessage(err)}`,
|
|
603
|
+
{ file: "orchestrator.ts" },
|
|
604
|
+
);
|
|
605
|
+
}
|
|
606
|
+
return getPriorSliceCompletionBlocker(guardBasePath, mainBranch, unitType, unitId);
|
|
607
|
+
}
|
|
608
|
+
|
|
535
609
|
// ── ToolContractAdapter (folded) ─────────────────────────────────────────
|
|
536
610
|
|
|
537
611
|
private compileUnitToolContract(unitType: string): { ok: true; reason: string } | { ok: false; reason: string } {
|
|
@@ -543,8 +617,11 @@ export class AutoOrchestrator implements AutoOrchestrationModule {
|
|
|
543
617
|
// ── WorktreeAdapter (folded) ─────────────────────────────────────────────
|
|
544
618
|
|
|
545
619
|
private getEffectiveUnitIsolationMode(basePath: string): ReturnType<typeof getIsolationMode> {
|
|
546
|
-
|
|
547
|
-
|
|
620
|
+
return resolveEffectiveUnitIsolationMode(
|
|
621
|
+
getIsolationMode(basePath),
|
|
622
|
+
this.s.isolationDegraded,
|
|
623
|
+
this.s.strandedRecoveryIsolationMode,
|
|
624
|
+
);
|
|
548
625
|
}
|
|
549
626
|
|
|
550
627
|
private buildLifecycle(): WorktreeLifecycle {
|
|
@@ -554,7 +631,7 @@ export class AutoOrchestrator implements AutoOrchestrationModule {
|
|
|
554
631
|
return new GitServiceImpl(basePath, gitConfig);
|
|
555
632
|
},
|
|
556
633
|
worktreeProjection: new WorktreeStateProjection(),
|
|
557
|
-
mergeMilestoneToMain,
|
|
634
|
+
mergeMilestoneToMain: createMilestoneMergeTransaction(mergeMilestoneToMain),
|
|
558
635
|
});
|
|
559
636
|
}
|
|
560
637
|
|
|
@@ -655,6 +732,21 @@ export class AutoOrchestrator implements AutoOrchestrationModule {
|
|
|
655
732
|
return { action: recovery.action, reason: recovery.reason };
|
|
656
733
|
}
|
|
657
734
|
|
|
735
|
+
/**
|
|
736
|
+
* ADR-030 Phase Transition Invariant (advisory mode). The matrix is an
|
|
737
|
+
* assertion, not a decision-maker — deriveState already chose the phase; we
|
|
738
|
+
* only observe illegal *derived* edges that survived reconciliation. The
|
|
739
|
+
* matrix is still a sparse hardening spec, so this is telemetry-only (no
|
|
740
|
+
* block) until it is expanded into a validated legal-edge graph. To enforce:
|
|
741
|
+
* `throw violation;` instead of logging — recovery-classification maps
|
|
742
|
+
* IllegalPhaseTransitionError to kind "illegal-transition" (escalate).
|
|
743
|
+
*/
|
|
744
|
+
private observePhaseTransition(from: Phase, to: Phase): void {
|
|
745
|
+
if (isLegalEdge(from, to)) return;
|
|
746
|
+
const violation = new IllegalPhaseTransitionError(from, to);
|
|
747
|
+
debugLog("phase-transition-advisory", { from, to, message: violation.message });
|
|
748
|
+
}
|
|
749
|
+
|
|
658
750
|
// ── Lifecycle verbs ──────────────────────────────────────────────────────
|
|
659
751
|
|
|
660
752
|
/**
|
|
@@ -718,6 +810,7 @@ export class AutoOrchestrator implements AutoOrchestrationModule {
|
|
|
718
810
|
this.lastFinalizedUnitKey = null;
|
|
719
811
|
this.dispatchKeyWindow = [];
|
|
720
812
|
this.lastStuckRecoveryKey = null;
|
|
813
|
+
this.lastDerivedPhase = null;
|
|
721
814
|
this.status.phase = "running";
|
|
722
815
|
this.bumpTransition();
|
|
723
816
|
this.journalTransition({ name: "start" });
|
|
@@ -807,12 +900,31 @@ export class AutoOrchestrator implements AutoOrchestrationModule {
|
|
|
807
900
|
return blocked;
|
|
808
901
|
}
|
|
809
902
|
|
|
903
|
+
const reconciledPhase = reconciliation.stateSnapshot.phase;
|
|
904
|
+
if (this.lastDerivedPhase !== null) {
|
|
905
|
+
this.observePhaseTransition(this.lastDerivedPhase, reconciledPhase);
|
|
906
|
+
}
|
|
907
|
+
this.lastDerivedPhase = reconciledPhase;
|
|
908
|
+
|
|
810
909
|
const decision = await this.decideNextUnit({ stateSnapshot: reconciliation.stateSnapshot });
|
|
811
910
|
if (!decision) {
|
|
911
|
+
const settlementBlock = this.evaluateNoRemainingUnitsSettlement(reconciliation.stateSnapshot);
|
|
912
|
+
if (settlementBlock) {
|
|
913
|
+
this.status.phase = "paused";
|
|
914
|
+
this.status.activeUnit = undefined;
|
|
915
|
+
this.lastAdvanceKey = null;
|
|
916
|
+
this.dispatchKeyWindow = [];
|
|
917
|
+
this.bumpTransition();
|
|
918
|
+
this.journalTransition({ name: "advance-blocked", reason: settlementBlock.reason });
|
|
919
|
+
this.postAdvanceRecord(settlementBlock);
|
|
920
|
+
return settlementBlock;
|
|
921
|
+
}
|
|
922
|
+
const terminalOutcome = noRemainingUnitsOutcome(reconciliation.stateSnapshot);
|
|
812
923
|
const stopped: AutoAdvanceResult = {
|
|
813
924
|
kind: "stopped",
|
|
814
|
-
reason:
|
|
925
|
+
reason: terminalOutcome.displayReason,
|
|
815
926
|
stateSnapshot: reconciliation.stateSnapshot,
|
|
927
|
+
terminalOutcome,
|
|
816
928
|
};
|
|
817
929
|
this.status.phase = "stopped";
|
|
818
930
|
this.status.activeUnit = undefined;
|
|
@@ -848,6 +960,25 @@ export class AutoOrchestrator implements AutoOrchestrationModule {
|
|
|
848
960
|
return blocked;
|
|
849
961
|
}
|
|
850
962
|
|
|
963
|
+
const priorSliceBlocker = this.findPriorSliceCompletionBlocker(decision.unitType, decision.unitId);
|
|
964
|
+
if (priorSliceBlocker) {
|
|
965
|
+
this.clearPendingDispatch();
|
|
966
|
+
const blocked: AutoAdvanceResult = {
|
|
967
|
+
kind: "blocked",
|
|
968
|
+
reason: priorSliceBlocker,
|
|
969
|
+
action: "stop",
|
|
970
|
+
stateSnapshot: reconciliation.stateSnapshot,
|
|
971
|
+
};
|
|
972
|
+
this.journalTransition({
|
|
973
|
+
name: "advance-blocked",
|
|
974
|
+
reason: blocked.reason,
|
|
975
|
+
unitType: decision.unitType,
|
|
976
|
+
unitId: decision.unitId,
|
|
977
|
+
});
|
|
978
|
+
this.postAdvanceRecord(blocked);
|
|
979
|
+
return blocked;
|
|
980
|
+
}
|
|
981
|
+
|
|
851
982
|
const nextKey = `${decision.unitType}:${decision.unitId}`;
|
|
852
983
|
|
|
853
984
|
// Record every dispatch decision in the ring buffer before pre-flight
|
|
@@ -865,8 +996,10 @@ export class AutoOrchestrator implements AutoOrchestrationModule {
|
|
|
865
996
|
// actually completed on disk with a stale DB. Verify + recover before
|
|
866
997
|
// hard-stopping (legacy graduated stuck-recovery parity).
|
|
867
998
|
if (this.tryStuckArtifactRecovery(decision.unitType, decision.unitId)) {
|
|
999
|
+
this.clearPendingDispatch();
|
|
868
1000
|
return this.stuckRecovered(decision, reconciliation.stateSnapshot);
|
|
869
1001
|
}
|
|
1002
|
+
this.clearPendingDispatch();
|
|
870
1003
|
const blocked: AutoAdvanceResult = {
|
|
871
1004
|
kind: "blocked",
|
|
872
1005
|
reason: `state did not advance after finalized ${decision.unitType} ${decision.unitId}`,
|
|
@@ -890,6 +1023,7 @@ export class AutoOrchestrator implements AutoOrchestrationModule {
|
|
|
890
1023
|
// checks coexist: idempotency for the common immediate-repeat case,
|
|
891
1024
|
// stuck-loop for the saturated-window case.
|
|
892
1025
|
if (this.lastAdvanceKey === nextKey && matchingCount < STUCK_WINDOW_SIZE) {
|
|
1026
|
+
this.clearPendingDispatch();
|
|
893
1027
|
const blocked: AutoAdvanceResult = { kind: "blocked", reason: "idempotent advance: unit already active", action: "pause" };
|
|
894
1028
|
this.journalTransition({
|
|
895
1029
|
name: "advance-blocked",
|
|
@@ -910,8 +1044,10 @@ export class AutoOrchestrator implements AutoOrchestrationModule {
|
|
|
910
1044
|
// complete on disk (stale DB) and recover if so — legacy graduated
|
|
911
1045
|
// stuck-recovery parity. Otherwise hard-stop with a diagnosable reason.
|
|
912
1046
|
if (this.tryStuckArtifactRecovery(decision.unitType, decision.unitId)) {
|
|
1047
|
+
this.clearPendingDispatch();
|
|
913
1048
|
return this.stuckRecovered(decision, reconciliation.stateSnapshot);
|
|
914
1049
|
}
|
|
1050
|
+
this.clearPendingDispatch();
|
|
915
1051
|
const blocked: AutoAdvanceResult = {
|
|
916
1052
|
kind: "blocked",
|
|
917
1053
|
reason: `stuck-loop: ${nextKey} picked ${matchingCount} times`,
|
|
@@ -929,6 +1065,7 @@ export class AutoOrchestrator implements AutoOrchestrationModule {
|
|
|
929
1065
|
|
|
930
1066
|
const contract = this.compileUnitToolContract(decision.unitType);
|
|
931
1067
|
if (!contract.ok) {
|
|
1068
|
+
this.clearPendingDispatch();
|
|
932
1069
|
const blocked: AutoAdvanceResult = {
|
|
933
1070
|
kind: "blocked",
|
|
934
1071
|
reason: contract.reason,
|
|
@@ -947,6 +1084,7 @@ export class AutoOrchestrator implements AutoOrchestrationModule {
|
|
|
947
1084
|
|
|
948
1085
|
const worktree = await this.prepareWorktreeForUnit(decision.unitType, decision.unitId);
|
|
949
1086
|
if (!worktree.ok) {
|
|
1087
|
+
this.clearPendingDispatch();
|
|
950
1088
|
const blocked: AutoAdvanceResult = {
|
|
951
1089
|
kind: "blocked",
|
|
952
1090
|
reason: worktree.reason,
|
|
@@ -1035,8 +1173,12 @@ export class AutoOrchestrator implements AutoOrchestrationModule {
|
|
|
1035
1173
|
public async resume(): Promise<AutoAdvanceResult> {
|
|
1036
1174
|
this.lastAdvanceKey = null;
|
|
1037
1175
|
this.lastFinalizedUnitKey = null;
|
|
1038
|
-
|
|
1176
|
+
// Preserve dispatchKeyWindow across resume so stuck-loop detection
|
|
1177
|
+
// accumulates across pause/resume cycles rather than resetting each time.
|
|
1039
1178
|
this.lastStuckRecoveryKey = null;
|
|
1179
|
+
// ADR-030: drop the prior "from" — the first advance after resume has no
|
|
1180
|
+
// edge to assert (avoids a false illegal-edge across the pause boundary).
|
|
1181
|
+
this.lastDerivedPhase = null;
|
|
1040
1182
|
this.status.phase = "running";
|
|
1041
1183
|
this.bumpTransition();
|
|
1042
1184
|
this.journalTransition({ name: "resume" });
|
|
@@ -1053,7 +1195,12 @@ export class AutoOrchestrator implements AutoOrchestrationModule {
|
|
|
1053
1195
|
this.status.activeUnit = undefined;
|
|
1054
1196
|
this.lastAdvanceKey = null;
|
|
1055
1197
|
this.lastFinalizedUnitKey = null;
|
|
1056
|
-
this.
|
|
1198
|
+
this.lastDerivedPhase = null;
|
|
1199
|
+
// Preserve dispatchKeyWindow on pause so stuck-loop detection accumulates
|
|
1200
|
+
// across pause/resume cycles. Only clear on a hard stop.
|
|
1201
|
+
if (reason !== "pause") {
|
|
1202
|
+
this.dispatchKeyWindow = [];
|
|
1203
|
+
}
|
|
1057
1204
|
this.lastStuckRecoveryKey = null;
|
|
1058
1205
|
this.bumpTransition();
|
|
1059
1206
|
this.journalTransition({ name: "stop", reason });
|