@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
|
@@ -25,7 +25,7 @@ import { clearActivityLogState } from "./activity-log.js";
|
|
|
25
25
|
import { synthesizeCrashRecovery, getDeepDiagnostic, readActiveMilestoneId, } from "./session-forensics.js";
|
|
26
26
|
import { writeLock, clearLock, clearStaleWorkerLock, readCrashLock, isLockProcessAlive, formatCrashInfo, emitCrashRecoveredUnitEnd, emitOpenUnitEndForUnit, } from "./crash-recovery.js";
|
|
27
27
|
import { acquireSessionLock, getSessionLockStatus, releaseSessionLock, updateSessionLock, } from "./session-lock.js";
|
|
28
|
-
import { resolveAutoSupervisorConfig, loadEffectiveGSDPreferences, getIsolationMode, } from "./preferences.js";
|
|
28
|
+
import { resolveAutoSupervisorConfig, loadEffectiveGSDPreferences, getIsolationMode, resolveEffectiveUnitIsolationMode, } from "./preferences.js";
|
|
29
29
|
import { playNotificationBell, sendDesktopNotification } from "./notifications.js";
|
|
30
30
|
import { getBudgetAlertLevel, getNewBudgetAlertLevel, getBudgetEnforcementAction, resolveCompactionThresholdPercent, shouldRerootStepSessionForContext, } from "./auto-budget.js";
|
|
31
31
|
import { markToolStart as _markToolStart, markToolEnd as _markToolEnd, getOldestInFlightToolAgeMs as _getOldestInFlightToolAgeMs, clearInFlightTools, isToolInvocationError, isQueuedUserMessageSkip, isDeterministicPolicyError, } from "./auto-tool-tracking.js";
|
|
@@ -54,6 +54,7 @@ import { getPriorSliceCompletionBlocker } from "./dispatch-guard.js";
|
|
|
54
54
|
import { createAutoWorktree, teardownAutoWorktree, isInAutoWorktree, getAutoWorktreePath, mergeMilestoneToMain, autoWorktreeBranch, checkResourcesStale, escapeStaleWorktree, } from "./auto-worktree.js";
|
|
55
55
|
import { pruneQueueOrder } from "./queue-order.js";
|
|
56
56
|
import { startCommandPolling as _startCommandPolling, isRemoteConfigured } from "../remote-questions/manager.js";
|
|
57
|
+
import { createMilestoneMergeTransaction } from "./milestone-merge-transaction.js";
|
|
57
58
|
import { debugLog, isDebugEnabled, writeDebugSummary } from "./debug-logger.js";
|
|
58
59
|
import { reconcileMergeState, verifyExpectedArtifact, } from "./auto-recovery.js";
|
|
59
60
|
import { classifyMilestoneSummaryContent } from "./milestone-summary-classifier.js";
|
|
@@ -67,6 +68,7 @@ import { MILESTONE_ID_RE } from "./milestone-ids.js";
|
|
|
67
68
|
import { updateProgressWidget as _updateProgressWidget, setCompletionProgressWidget, setAutoOutcomeWidget, setAutoActiveStatus, updateSliceProgressCache, clearSliceProgressCache, unitVerb, } from "./auto-dashboard.js";
|
|
68
69
|
import { registerSigtermHandler as _registerSigtermHandler, deregisterSigtermHandler as _deregisterSigtermHandler, } from "./auto-supervisor.js";
|
|
69
70
|
import { isDbAvailable, getMilestone, getMilestoneSlices, } from "./gsd-db.js";
|
|
71
|
+
import { closeWorkflowDatabase } from "./db-workspace.js";
|
|
70
72
|
import { markLatestActiveForWorkerCanceled } from "./db/unit-dispatches.js";
|
|
71
73
|
import { writeUnitRuntimeRecord } from "./unit-runtime.js";
|
|
72
74
|
import { countPendingCaptures } from "./captures.js";
|
|
@@ -109,12 +111,13 @@ void initTokenCounter().catch((err) => {
|
|
|
109
111
|
logWarning("engine", `token counter warm-up failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
110
112
|
});
|
|
111
113
|
export { STUB_RECOVERY_THRESHOLD, NEW_SESSION_TIMEOUT_MS, } from "./auto/session.js";
|
|
112
|
-
import { autoSession as s } from "./auto-runtime-state.js";
|
|
114
|
+
import { autoSession as s, getAutoRuntimeSnapshot } from "./auto-runtime-state.js";
|
|
113
115
|
import { gsdHome } from "./gsd-home.js";
|
|
114
116
|
import { createWorkspace, scopeMilestone } from "./workspace.js";
|
|
115
117
|
import { registerAutoWorker, markWorkerStopping, } from "./db/auto-workers.js";
|
|
116
118
|
import { releaseMilestoneLease } from "./db/milestone-leases.js";
|
|
117
119
|
import { normalizeRealPath } from "./paths.js";
|
|
120
|
+
import { formatStopNoticePrefix, isBlockedStopReason, stopNoticeDisplayReason, } from "./stop-notice.js";
|
|
118
121
|
// ── ENCAPSULATION INVARIANT ─────────────────────────────────────────────────
|
|
119
122
|
// ALL mutable auto-mode state lives in the AutoSession class (auto/session.ts).
|
|
120
123
|
// This file must NOT declare module-level `let` or `var` variables for state.
|
|
@@ -135,17 +138,7 @@ export function formatAutoStopNotification(prefix, totals, unitCount) {
|
|
|
135
138
|
`Session: ${formatCost(totals.cost)} · ${formatTokenCount(totals.tokens.total)} tokens · ${unitCount} units`,
|
|
136
139
|
].join("\n");
|
|
137
140
|
}
|
|
138
|
-
|
|
139
|
-
return /^Blocked:\s*/i.test(reason ?? "");
|
|
140
|
-
}
|
|
141
|
-
function formatAutoStopDisplayReason(reason) {
|
|
142
|
-
return (reason ?? "").replace(/^Blocked:\s*/i, "").trim();
|
|
143
|
-
}
|
|
144
|
-
export function formatAutoStopNotificationPrefix(reason) {
|
|
145
|
-
const displayReason = formatAutoStopDisplayReason(reason);
|
|
146
|
-
const prefix = isBlockedStopReason(reason) ? "Auto-mode blocked" : "Auto-mode stopped";
|
|
147
|
-
return displayReason ? `${prefix} — ${displayReason}` : prefix;
|
|
148
|
-
}
|
|
141
|
+
export { formatStopNoticePrefix as formatAutoStopNotificationPrefix } from "./stop-notice.js";
|
|
149
142
|
function clearSessionModelOverrideForCommandSession(ctx) {
|
|
150
143
|
const sessionId = s.cmdCtx?.sessionManager?.getSessionId?.() ??
|
|
151
144
|
ctx?.sessionManager?.getSessionId?.();
|
|
@@ -344,14 +337,11 @@ export function startAutoDetached(ctx, pi, base, verboseMode, options) {
|
|
|
344
337
|
export function shouldUseWorktreeIsolation(basePath) {
|
|
345
338
|
return getIsolationMode(basePath) === "worktree";
|
|
346
339
|
}
|
|
347
|
-
function
|
|
348
|
-
return configuredMode
|
|
349
|
-
}
|
|
350
|
-
export function _resolveEffectiveUnitIsolationModeForTest(configuredMode, isolationDegraded) {
|
|
351
|
-
return resolveEffectiveUnitIsolationMode(configuredMode, isolationDegraded);
|
|
340
|
+
export function _resolveEffectiveUnitIsolationModeForTest(configuredMode, isolationDegraded, strandedRecoveryIsolationMode = null) {
|
|
341
|
+
return resolveEffectiveUnitIsolationMode(configuredMode, isolationDegraded, strandedRecoveryIsolationMode);
|
|
352
342
|
}
|
|
353
343
|
function getEffectiveUnitIsolationMode(basePath) {
|
|
354
|
-
return resolveEffectiveUnitIsolationMode(getIsolationMode(basePath), s.isolationDegraded);
|
|
344
|
+
return resolveEffectiveUnitIsolationMode(getIsolationMode(basePath), s.isolationDegraded, s.strandedRecoveryIsolationMode);
|
|
355
345
|
}
|
|
356
346
|
/** Crash recovery prompt — set by startAuto, consumed by the main loop */
|
|
357
347
|
/** Pending verification retry — set when gate fails with retries remaining, consumed by autoLoop */
|
|
@@ -463,6 +453,7 @@ function stopAutoCommandPolling() {
|
|
|
463
453
|
}
|
|
464
454
|
export function getAutoDashboardData() {
|
|
465
455
|
const ledger = getLedger();
|
|
456
|
+
const runtimeSnapshot = getAutoRuntimeSnapshot();
|
|
466
457
|
const totals = ledger ? getProjectTotals(ledger.units) : null;
|
|
467
458
|
const sessionId = s.cmdCtx?.sessionManager?.getSessionId?.() ?? null;
|
|
468
459
|
const rtkSavings = sessionId && s.basePath
|
|
@@ -495,6 +486,7 @@ export function getAutoDashboardData() {
|
|
|
495
486
|
pendingCaptureCount,
|
|
496
487
|
rtkSavings,
|
|
497
488
|
rtkEnabled,
|
|
489
|
+
toolSurface: runtimeSnapshot.toolSurface,
|
|
498
490
|
};
|
|
499
491
|
}
|
|
500
492
|
// ─── Public API ───────────────────────────────────────────────────────────────
|
|
@@ -989,8 +981,8 @@ export async function stopAuto(ctx, pi, reason, options = {}) {
|
|
|
989
981
|
if (!s.active && !s.paused)
|
|
990
982
|
return;
|
|
991
983
|
const loadedPreferences = loadEffectiveGSDPreferences(s.basePath || undefined)?.preferences;
|
|
992
|
-
const stopNotificationPrefix =
|
|
993
|
-
const displayReason =
|
|
984
|
+
const stopNotificationPrefix = formatStopNoticePrefix(reason);
|
|
985
|
+
const displayReason = stopNoticeDisplayReason(reason);
|
|
994
986
|
const isHeadlessStop = process.env.GSD_HEADLESS === "1";
|
|
995
987
|
const completionStopRequested = Boolean(options.completionWidget);
|
|
996
988
|
const preserveCloseoutTranscript = !isHeadlessStop && (options.preserveCloseoutTranscript ?? completionStopRequested);
|
|
@@ -1003,12 +995,13 @@ export async function stopAuto(ctx, pi, reason, options = {}) {
|
|
|
1003
995
|
// worktree was active, and whether the current milestone was merged before
|
|
1004
996
|
// stopAuto. The unmerged-work warning is only meaningful for real worktrees.
|
|
1005
997
|
try {
|
|
1006
|
-
const { emitAutoExit, normalizeAutoExitReason } = await import("./worktree-telemetry.js");
|
|
998
|
+
const { autoExitReasonForTerminalOutcome, emitAutoExit, normalizeAutoExitReason, } = await import("./worktree-telemetry.js");
|
|
1007
999
|
// Normalize the free-form reason to a closed set so the telemetry
|
|
1008
1000
|
// aggregator buckets stably. Raw detail is preserved in the phases.ts
|
|
1009
1001
|
// notification and the notify'd error string.
|
|
1010
1002
|
const rawReason = reason ?? "stop";
|
|
1011
|
-
const normalizedReason =
|
|
1003
|
+
const normalizedReason = autoExitReasonForTerminalOutcome(options.terminalOutcome)
|
|
1004
|
+
?? normalizeAutoExitReason(rawReason);
|
|
1012
1005
|
const telemetryBase = s.originalBasePath || s.basePath;
|
|
1013
1006
|
emitAutoExit(telemetryBase, {
|
|
1014
1007
|
reason: normalizedReason,
|
|
@@ -1184,8 +1177,7 @@ export async function stopAuto(ctx, pi, reason, options = {}) {
|
|
|
1184
1177
|
// ── Step 6: DB cleanup ──
|
|
1185
1178
|
if (isDbAvailable()) {
|
|
1186
1179
|
try {
|
|
1187
|
-
|
|
1188
|
-
closeDatabase();
|
|
1180
|
+
closeWorkflowDatabase();
|
|
1189
1181
|
}
|
|
1190
1182
|
catch (e) {
|
|
1191
1183
|
debugLog("db-close-failed", {
|
|
@@ -1622,7 +1614,7 @@ export function buildWorktreeLifecycleDeps() {
|
|
|
1622
1614
|
// C4 (#5627) — GitServiceImpl constructor → gitServiceFactory
|
|
1623
1615
|
//
|
|
1624
1616
|
// Final WorktreeLifecycleDeps shape: 3 fields (gitServiceFactory,
|
|
1625
|
-
// worktreeProjection, mergeMilestoneToMain). Down from 18 at slice-7
|
|
1617
|
+
// worktreeProjection, mergeMilestoneToMain transaction runner). Down from 18 at slice-7
|
|
1626
1618
|
// closure.
|
|
1627
1619
|
return {
|
|
1628
1620
|
gitServiceFactory: (basePath) => {
|
|
@@ -1630,7 +1622,7 @@ export function buildWorktreeLifecycleDeps() {
|
|
|
1630
1622
|
return new GitServiceImpl(basePath, gitConfig);
|
|
1631
1623
|
},
|
|
1632
1624
|
worktreeProjection: new WorktreeStateProjection(),
|
|
1633
|
-
mergeMilestoneToMain,
|
|
1625
|
+
mergeMilestoneToMain: createMilestoneMergeTransaction(mergeMilestoneToMain),
|
|
1634
1626
|
};
|
|
1635
1627
|
}
|
|
1636
1628
|
function buildLifecycle() {
|
|
@@ -15,7 +15,8 @@ import { resumeAutoAfterProviderDelay } from "./provider-error-resume.js";
|
|
|
15
15
|
import { classifyError, createRetryState, resetRetryState, isTransient, } from "../error-classifier.js";
|
|
16
16
|
import { blockModel, isModelBlocked } from "../blocked-models.js";
|
|
17
17
|
import { getProjectGSDPreferencesPath } from "../preferences.js";
|
|
18
|
-
import {
|
|
18
|
+
import { resolveProviderErrorGuidance } from "../provider-error-guidance.js";
|
|
19
|
+
import { formatGuidance } from "../guidance.js";
|
|
19
20
|
const retryState = createRetryState();
|
|
20
21
|
const MAX_NETWORK_RETRIES = 2;
|
|
21
22
|
function isObjectRecord(value) {
|
|
@@ -486,7 +487,7 @@ export async function handleAgentEnd(pi, event, ctx) {
|
|
|
486
487
|
preferencesPath: dash.basePath ? getProjectGSDPreferencesPath(dash.basePath) : undefined,
|
|
487
488
|
hasConfiguredFallbacks: (modelConfig?.fallbacks.length ?? 0) > 0,
|
|
488
489
|
});
|
|
489
|
-
const guidanceText =
|
|
490
|
+
const guidanceText = formatGuidance(guidance);
|
|
490
491
|
await pauseForProviderModelRejection(ctx, pi, {
|
|
491
492
|
errorDetail,
|
|
492
493
|
rawErrorMsg,
|
|
@@ -10,6 +10,7 @@ import { logError } from "../workflow-logger.js";
|
|
|
10
10
|
import { getErrorMessage } from "../error-utils.js";
|
|
11
11
|
import { incrementLegacyTelemetry } from "../legacy-telemetry.js";
|
|
12
12
|
import { prepareSaveGateResultArguments } from "../tools/save-gate-result-args.js";
|
|
13
|
+
import { aliasesForWorkflowTool } from "../workflow-tool-surface.js";
|
|
13
14
|
async function loadWorkflowExecutors() {
|
|
14
15
|
return importWorkflowExecutorsModule();
|
|
15
16
|
}
|
|
@@ -41,6 +42,13 @@ function registerAlias(pi, toolDef, aliasName, canonicalName) {
|
|
|
41
42
|
execute,
|
|
42
43
|
});
|
|
43
44
|
}
|
|
45
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- toolDef shape matches ToolDefinition but varies by schema
|
|
46
|
+
function registerWorkflowTool(pi, toolDef) {
|
|
47
|
+
pi.registerTool(toolDef);
|
|
48
|
+
for (const alias of aliasesForWorkflowTool(toolDef.name)) {
|
|
49
|
+
registerAlias(pi, toolDef, alias, toolDef.name);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
44
52
|
function requirementRootWriteGuard(operation, basePath) {
|
|
45
53
|
const guard = shouldBlockRootArtifactSaveInSnapshot(loadWriteGateSnapshot(basePath), "REQUIREMENTS");
|
|
46
54
|
if (!guard.block)
|
|
@@ -155,8 +163,7 @@ export function registerDbTools(pi) {
|
|
|
155
163
|
return new Text(text, 0, 0);
|
|
156
164
|
},
|
|
157
165
|
};
|
|
158
|
-
pi
|
|
159
|
-
registerAlias(pi, decisionSaveTool, "gsd_save_decision", "gsd_decision_save");
|
|
166
|
+
registerWorkflowTool(pi, decisionSaveTool);
|
|
160
167
|
// ─── gsd_requirement_update (formerly gsd_update_requirement) ───────────
|
|
161
168
|
const requirementUpdateExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
|
|
162
169
|
const basePath = resolveCtxCwd(_ctx);
|
|
@@ -241,8 +248,7 @@ export function registerDbTools(pi) {
|
|
|
241
248
|
return new Text(text, 0, 0);
|
|
242
249
|
},
|
|
243
250
|
};
|
|
244
|
-
pi
|
|
245
|
-
registerAlias(pi, requirementUpdateTool, "gsd_update_requirement", "gsd_requirement_update");
|
|
251
|
+
registerWorkflowTool(pi, requirementUpdateTool);
|
|
246
252
|
// ─── gsd_requirement_save ─────────────────────────────────────────────
|
|
247
253
|
const requirementSaveExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
|
|
248
254
|
const basePath = resolveCtxCwd(_ctx);
|
|
@@ -340,8 +346,7 @@ export function registerDbTools(pi) {
|
|
|
340
346
|
return new Text(text, 0, 0);
|
|
341
347
|
},
|
|
342
348
|
};
|
|
343
|
-
pi
|
|
344
|
-
registerAlias(pi, requirementSaveTool, "gsd_save_requirement", "gsd_requirement_save");
|
|
349
|
+
registerWorkflowTool(pi, requirementSaveTool);
|
|
345
350
|
// ─── gsd_summary_save (formerly gsd_save_summary) ──────────────────────
|
|
346
351
|
const summarySaveExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
|
|
347
352
|
try {
|
|
@@ -397,8 +402,7 @@ export function registerDbTools(pi) {
|
|
|
397
402
|
return new Text(text, 0, 0);
|
|
398
403
|
},
|
|
399
404
|
};
|
|
400
|
-
pi
|
|
401
|
-
registerAlias(pi, summarySaveTool, "gsd_save_summary", "gsd_summary_save");
|
|
405
|
+
registerWorkflowTool(pi, summarySaveTool);
|
|
402
406
|
// ─── gsd_uat_result_save ─────────────────────────────────────────────────
|
|
403
407
|
const uatResultSaveExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
|
|
404
408
|
const { executeUatResultSave } = await loadWorkflowExecutors();
|
|
@@ -480,7 +484,7 @@ export function registerDbTools(pi) {
|
|
|
480
484
|
return new Text(theme.fg("success", `UAT ${d?.sliceId ?? ""}: ${d?.verdict ?? "saved"}`), 0, 0);
|
|
481
485
|
},
|
|
482
486
|
};
|
|
483
|
-
pi
|
|
487
|
+
registerWorkflowTool(pi, uatResultSaveTool);
|
|
484
488
|
// ─── gsd_milestone_generate_id (formerly gsd_generate_milestone_id) ────
|
|
485
489
|
const milestoneGenerateIdExecute = async (_toolCallId, _params, _signal, _onUpdate, _ctx) => {
|
|
486
490
|
try {
|
|
@@ -566,8 +570,7 @@ export function registerDbTools(pi) {
|
|
|
566
570
|
return new Text(text, 0, 0);
|
|
567
571
|
},
|
|
568
572
|
};
|
|
569
|
-
pi
|
|
570
|
-
registerAlias(pi, milestoneGenerateIdTool, "gsd_generate_milestone_id", "gsd_milestone_generate_id");
|
|
573
|
+
registerWorkflowTool(pi, milestoneGenerateIdTool);
|
|
571
574
|
// ─── gsd_plan_milestone (gsd_milestone_plan alias) ─────────────────────
|
|
572
575
|
const planMilestoneExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
|
|
573
576
|
const { executePlanMilestone } = await loadWorkflowExecutors();
|
|
@@ -633,8 +636,7 @@ export function registerDbTools(pi) {
|
|
|
633
636
|
}),
|
|
634
637
|
execute: planMilestoneExecute,
|
|
635
638
|
};
|
|
636
|
-
pi
|
|
637
|
-
registerAlias(pi, planMilestoneTool, "gsd_milestone_plan", "gsd_plan_milestone");
|
|
639
|
+
registerWorkflowTool(pi, planMilestoneTool);
|
|
638
640
|
// ─── gsd_plan_slice (gsd_slice_plan alias) ─────────────────────────────
|
|
639
641
|
const planSliceExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
|
|
640
642
|
const { executePlanSlice } = await loadWorkflowExecutors();
|
|
@@ -678,8 +680,7 @@ export function registerDbTools(pi) {
|
|
|
678
680
|
}),
|
|
679
681
|
execute: planSliceExecute,
|
|
680
682
|
};
|
|
681
|
-
pi
|
|
682
|
-
registerAlias(pi, planSliceTool, "gsd_slice_plan", "gsd_plan_slice");
|
|
683
|
+
registerWorkflowTool(pi, planSliceTool);
|
|
683
684
|
// ─── gsd_plan_task (gsd_task_plan alias) ───────────────────────────────
|
|
684
685
|
const planTaskExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
|
|
685
686
|
const basePath = resolveCtxCwd(_ctx);
|
|
@@ -748,8 +749,7 @@ export function registerDbTools(pi) {
|
|
|
748
749
|
}),
|
|
749
750
|
execute: planTaskExecute,
|
|
750
751
|
};
|
|
751
|
-
pi
|
|
752
|
-
registerAlias(pi, planTaskTool, "gsd_task_plan", "gsd_plan_task");
|
|
752
|
+
registerWorkflowTool(pi, planTaskTool);
|
|
753
753
|
// ─── gsd_task_complete (gsd_complete_task alias) ────────────────────────
|
|
754
754
|
const taskCompleteExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
|
|
755
755
|
const { executeTaskComplete } = await loadWorkflowExecutors();
|
|
@@ -809,8 +809,7 @@ export function registerDbTools(pi) {
|
|
|
809
809
|
}),
|
|
810
810
|
execute: taskCompleteExecute,
|
|
811
811
|
};
|
|
812
|
-
pi
|
|
813
|
-
registerAlias(pi, taskCompleteTool, "gsd_complete_task", "gsd_task_complete");
|
|
812
|
+
registerWorkflowTool(pi, taskCompleteTool);
|
|
814
813
|
// ─── gsd_slice_complete (gsd_complete_slice alias) ─────────────────────
|
|
815
814
|
const sliceCompleteExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
|
|
816
815
|
const { executeSliceComplete } = await loadWorkflowExecutors();
|
|
@@ -875,8 +874,7 @@ export function registerDbTools(pi) {
|
|
|
875
874
|
}),
|
|
876
875
|
execute: sliceCompleteExecute,
|
|
877
876
|
};
|
|
878
|
-
pi
|
|
879
|
-
registerAlias(pi, sliceCompleteTool, "gsd_complete_slice", "gsd_slice_complete");
|
|
877
|
+
registerWorkflowTool(pi, sliceCompleteTool);
|
|
880
878
|
// ─── gsd_skip_slice (#3477 / #3487) ───────────────────────────────────
|
|
881
879
|
const skipSliceExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
|
|
882
880
|
const basePath = resolveCtxCwd(_ctx);
|
|
@@ -941,7 +939,7 @@ export function registerDbTools(pi) {
|
|
|
941
939
|
};
|
|
942
940
|
}
|
|
943
941
|
};
|
|
944
|
-
pi
|
|
942
|
+
registerWorkflowTool(pi, {
|
|
945
943
|
name: "gsd_skip_slice",
|
|
946
944
|
label: "Skip Slice",
|
|
947
945
|
description: "Mark a slice as skipped so auto-mode advances past it without executing. " +
|
|
@@ -1000,8 +998,7 @@ export function registerDbTools(pi) {
|
|
|
1000
998
|
}),
|
|
1001
999
|
execute: milestoneCompleteExecute,
|
|
1002
1000
|
};
|
|
1003
|
-
pi
|
|
1004
|
-
registerAlias(pi, milestoneCompleteTool, "gsd_milestone_complete", "gsd_complete_milestone");
|
|
1001
|
+
registerWorkflowTool(pi, milestoneCompleteTool);
|
|
1005
1002
|
// ─── gsd_validate_milestone (gsd_milestone_validate alias) ─────────────
|
|
1006
1003
|
const milestoneValidateExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
|
|
1007
1004
|
const { executeValidateMilestone } = await loadWorkflowExecutors();
|
|
@@ -1035,8 +1032,7 @@ export function registerDbTools(pi) {
|
|
|
1035
1032
|
}),
|
|
1036
1033
|
execute: milestoneValidateExecute,
|
|
1037
1034
|
};
|
|
1038
|
-
pi
|
|
1039
|
-
registerAlias(pi, milestoneValidateTool, "gsd_milestone_validate", "gsd_validate_milestone");
|
|
1035
|
+
registerWorkflowTool(pi, milestoneValidateTool);
|
|
1040
1036
|
// ─── gsd_replan_slice (gsd_slice_replan alias) ─────────────────────────
|
|
1041
1037
|
const replanSliceExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
|
|
1042
1038
|
const { executeReplanSlice } = await loadWorkflowExecutors();
|
|
@@ -1078,8 +1074,7 @@ export function registerDbTools(pi) {
|
|
|
1078
1074
|
}),
|
|
1079
1075
|
execute: replanSliceExecute,
|
|
1080
1076
|
};
|
|
1081
|
-
pi
|
|
1082
|
-
registerAlias(pi, replanSliceTool, "gsd_slice_replan", "gsd_replan_slice");
|
|
1077
|
+
registerWorkflowTool(pi, replanSliceTool);
|
|
1083
1078
|
// ─── gsd_reassess_roadmap (gsd_roadmap_reassess alias) ─────────────────
|
|
1084
1079
|
const reassessRoadmapExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
|
|
1085
1080
|
const { executeReassessRoadmap } = await loadWorkflowExecutors();
|
|
@@ -1126,8 +1121,7 @@ export function registerDbTools(pi) {
|
|
|
1126
1121
|
}),
|
|
1127
1122
|
execute: reassessRoadmapExecute,
|
|
1128
1123
|
};
|
|
1129
|
-
pi
|
|
1130
|
-
registerAlias(pi, reassessRoadmapTool, "gsd_roadmap_reassess", "gsd_reassess_roadmap");
|
|
1124
|
+
registerWorkflowTool(pi, reassessRoadmapTool);
|
|
1131
1125
|
// ─── gsd_task_reopen (gsd_reopen_task alias) ───────────────────────────
|
|
1132
1126
|
// Single-writer v3, Stream 3: reversibility tools for closed units.
|
|
1133
1127
|
const reopenTaskExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
|
|
@@ -1190,8 +1184,7 @@ export function registerDbTools(pi) {
|
|
|
1190
1184
|
}),
|
|
1191
1185
|
execute: reopenTaskExecute,
|
|
1192
1186
|
};
|
|
1193
|
-
pi
|
|
1194
|
-
registerAlias(pi, reopenTaskTool, "gsd_reopen_task", "gsd_task_reopen");
|
|
1187
|
+
registerWorkflowTool(pi, reopenTaskTool);
|
|
1195
1188
|
// ─── gsd_slice_reopen (gsd_reopen_slice alias) ─────────────────────────
|
|
1196
1189
|
const reopenSliceExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
|
|
1197
1190
|
const basePath = resolveCtxCwd(_ctx);
|
|
@@ -1253,8 +1246,7 @@ export function registerDbTools(pi) {
|
|
|
1253
1246
|
}),
|
|
1254
1247
|
execute: reopenSliceExecute,
|
|
1255
1248
|
};
|
|
1256
|
-
pi
|
|
1257
|
-
registerAlias(pi, reopenSliceTool, "gsd_reopen_slice", "gsd_slice_reopen");
|
|
1249
|
+
registerWorkflowTool(pi, reopenSliceTool);
|
|
1258
1250
|
// ─── gsd_milestone_reopen (gsd_reopen_milestone alias) ─────────────────
|
|
1259
1251
|
const reopenMilestoneExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
|
|
1260
1252
|
const basePath = resolveCtxCwd(_ctx);
|
|
@@ -1314,8 +1306,7 @@ export function registerDbTools(pi) {
|
|
|
1314
1306
|
}),
|
|
1315
1307
|
execute: reopenMilestoneExecute,
|
|
1316
1308
|
};
|
|
1317
|
-
pi
|
|
1318
|
-
registerAlias(pi, reopenMilestoneTool, "gsd_reopen_milestone", "gsd_milestone_reopen");
|
|
1309
|
+
registerWorkflowTool(pi, reopenMilestoneTool);
|
|
1319
1310
|
// ─── gsd_save_gate_result ──────────────────────────────────────────────
|
|
1320
1311
|
const saveGateResultExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
|
|
1321
1312
|
const { executeSaveGateResult } = await loadWorkflowExecutors();
|
|
@@ -1378,5 +1369,5 @@ export function registerDbTools(pi) {
|
|
|
1378
1369
|
return new Text(theme.fg(color, `${d.gateId}: ${d.verdict}`), 0, 0);
|
|
1379
1370
|
},
|
|
1380
1371
|
};
|
|
1381
|
-
pi
|
|
1372
|
+
registerWorkflowTool(pi, saveGateResultTool);
|
|
1382
1373
|
}
|
|
@@ -2,13 +2,14 @@
|
|
|
2
2
|
// File Purpose: Registers workspace-aware dynamic filesystem and shell tools.
|
|
3
3
|
import { existsSync, readdirSync } from "node:fs";
|
|
4
4
|
import { homedir } from "node:os";
|
|
5
|
-
import {
|
|
5
|
+
import { join } from "node:path";
|
|
6
6
|
import { createBashTool, createEditTool, createReadTool, createWriteTool } from "@gsd/pi-coding-agent";
|
|
7
7
|
import { DEFAULT_BASH_TIMEOUT_SECS } from "../constants.js";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
8
|
+
import { logWarning } from "../workflow-logger.js";
|
|
9
|
+
import { openWorkflowDatabase } from "../db-workspace.js";
|
|
10
10
|
import { getAutoWorktreePath } from "../auto-worktree.js";
|
|
11
11
|
import { resolveWorktreeProjectRoot } from "../worktree-root.js";
|
|
12
|
+
import { worktreesDirs } from "../worktree-placement.js";
|
|
12
13
|
export function safeWorkspaceCwd() {
|
|
13
14
|
try {
|
|
14
15
|
return process.cwd();
|
|
@@ -42,60 +43,36 @@ export function resolveWorkflowToolBasePath(ctx, scope) {
|
|
|
42
43
|
return worktree;
|
|
43
44
|
}
|
|
44
45
|
else {
|
|
45
|
-
const
|
|
46
|
-
|
|
46
|
+
const live = [];
|
|
47
|
+
for (const worktreesDir of worktreesDirs(projectRoot)) {
|
|
48
|
+
if (!existsSync(worktreesDir))
|
|
49
|
+
continue;
|
|
47
50
|
try {
|
|
48
|
-
|
|
51
|
+
live.push(...readdirSync(worktreesDir)
|
|
49
52
|
.map((name) => join(worktreesDir, name))
|
|
50
|
-
.filter((p) => existsSync(join(p, ".git")));
|
|
51
|
-
if (live.length === 1)
|
|
52
|
-
return live[0];
|
|
53
|
+
.filter((p) => existsSync(join(p, ".git"))));
|
|
53
54
|
}
|
|
54
55
|
catch (err) {
|
|
55
56
|
logWarning("bootstrap", `resolveWorkflowToolBasePath: failed to scan worktrees: ${err instanceof Error ? err.message : String(err)}`);
|
|
56
57
|
}
|
|
57
58
|
}
|
|
59
|
+
if (live.length === 1)
|
|
60
|
+
return live[0];
|
|
58
61
|
}
|
|
59
62
|
return cwd;
|
|
60
63
|
}
|
|
61
|
-
|
|
62
|
-
* Resolve the correct DB path for the current working directory.
|
|
63
|
-
* If `basePath` is inside a `.gsd/worktrees/<MID>/` directory, returns
|
|
64
|
-
* the project root's `.gsd/gsd.db` (shared WAL — R012). Otherwise
|
|
65
|
-
* returns `<basePath>/.gsd/gsd.db`.
|
|
66
|
-
*/
|
|
67
|
-
export function resolveProjectRootDbPath(basePath) {
|
|
68
|
-
return resolveGsdPathContract(basePath).projectDb;
|
|
69
|
-
}
|
|
64
|
+
export { resolveProjectRootDbPath } from "../db-workspace.js";
|
|
70
65
|
export async function ensureDbOpen(basePath = safeWorkspaceCwd()) {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
const gsdDir = contract.projectGsd;
|
|
76
|
-
const projectRoot = dirname(dirname(dbPath));
|
|
77
|
-
// Open existing DB file (may be at project root for worktrees)
|
|
78
|
-
if (existsSync(dbPath)) {
|
|
79
|
-
const opened = db.openDatabase(dbPath);
|
|
80
|
-
if (opened)
|
|
81
|
-
setLogBasePath(projectRoot);
|
|
82
|
-
return opened;
|
|
83
|
-
}
|
|
84
|
-
// No DB file — create an empty authoritative DB. Markdown migration is
|
|
85
|
-
// explicit-only; runtime startup must not import projections into state.
|
|
86
|
-
if (existsSync(gsdDir)) {
|
|
87
|
-
const opened = db.openDatabase(dbPath);
|
|
88
|
-
if (opened)
|
|
89
|
-
setLogBasePath(projectRoot);
|
|
90
|
-
return opened;
|
|
91
|
-
}
|
|
66
|
+
const result = openWorkflowDatabase(basePath);
|
|
67
|
+
if (result.ok)
|
|
68
|
+
return true;
|
|
69
|
+
if (result.reason === "missing-gsd-dir") {
|
|
92
70
|
logWarning("bootstrap", "ensureDbOpen failed — no .gsd directory found");
|
|
93
|
-
return false;
|
|
94
71
|
}
|
|
95
|
-
|
|
96
|
-
logWarning("bootstrap", `ensureDbOpen failed: ${
|
|
97
|
-
return false;
|
|
72
|
+
else {
|
|
73
|
+
logWarning("bootstrap", `ensureDbOpen failed: ${result.error?.message ?? "open failed"}`);
|
|
98
74
|
}
|
|
75
|
+
return false;
|
|
99
76
|
}
|
|
100
77
|
export function registerDynamicTools(pi) {
|
|
101
78
|
const fallbackRoot = safeWorkspaceCwd();
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
// gsd-pi — Read-only query tools exposing DB state to the LLM via the WAL connection
|
|
4
4
|
import { Type } from "@sinclair/typebox";
|
|
5
5
|
import { ensureDbOpen, resolveCtxCwd } from "./dynamic-tools.js";
|
|
6
|
+
import { checkpointWorkflowDatabase } from "../db-workspace.js";
|
|
6
7
|
export function registerQueryTools(pi) {
|
|
7
8
|
pi.registerTool({
|
|
8
9
|
name: "gsd_milestone_status",
|
|
@@ -50,8 +51,7 @@ export function registerQueryTools(pi) {
|
|
|
50
51
|
details: { operation: "checkpoint_db", error: "db_unavailable" },
|
|
51
52
|
};
|
|
52
53
|
}
|
|
53
|
-
|
|
54
|
-
checkpointDatabase();
|
|
54
|
+
checkpointWorkflowDatabase();
|
|
55
55
|
return {
|
|
56
56
|
content: [{ type: "text", text: "WAL checkpoint complete. gsd.db is now up to date and safe to stage with git add." }],
|
|
57
57
|
details: { operation: "checkpoint_db", status: "ok" },
|
|
@@ -13,6 +13,7 @@ import { registerHooks } from "./register-hooks.js";
|
|
|
13
13
|
import { registerShortcuts } from "./register-shortcuts.js";
|
|
14
14
|
import { writeCrashLog } from "./crash-log.js";
|
|
15
15
|
import { logWarning } from "../workflow-logger.js";
|
|
16
|
+
import { UNIT_TOOL_CONTRACTS } from "../unit-tool-contracts.js";
|
|
16
17
|
// Static import so cmux event listeners are registered synchronously during
|
|
17
18
|
// extension bootstrap. Prior implementation used `void import().then()` which
|
|
18
19
|
// queued listener registration as a microtask — any CMUX_CHANNELS emit fired
|
|
@@ -30,6 +31,9 @@ const EPIPE_STORM_THRESHOLD = 100;
|
|
|
30
31
|
const EPIPE_STORM_WINDOW_MS = 10_000;
|
|
31
32
|
let epipeCount = 0;
|
|
32
33
|
let epipeWindowStart = 0;
|
|
34
|
+
export const CRITICAL_GSD_WORKFLOW_TOOL_NAMES = [...new Set(Object.values(UNIT_TOOL_CONTRACTS)
|
|
35
|
+
.flatMap((contract) => contract.requiredWorkflowTools)
|
|
36
|
+
.filter((toolName) => toolName.startsWith("gsd_")))].sort();
|
|
33
37
|
/** Write to stderr without ever re-throwing — stderr can EPIPE too, which would
|
|
34
38
|
* re-enter this handler and re-loop. */
|
|
35
39
|
function safeStderr(msg) {
|
|
@@ -121,6 +125,20 @@ export function installEpipeGuard() {
|
|
|
121
125
|
process.on("unhandledRejection", _gsdRejectionGuard);
|
|
122
126
|
}
|
|
123
127
|
}
|
|
128
|
+
function assertCriticalGsdWorkflowToolsRegistered(pi) {
|
|
129
|
+
if (typeof pi.getAllTools !== "function")
|
|
130
|
+
return;
|
|
131
|
+
const registered = new Set(pi.getAllTools().map((tool) => tool.name));
|
|
132
|
+
const missing = CRITICAL_GSD_WORKFLOW_TOOL_NAMES.filter((toolName) => !registered.has(toolName));
|
|
133
|
+
if (missing.length === 0)
|
|
134
|
+
return;
|
|
135
|
+
const message = [
|
|
136
|
+
`Critical GSD workflow tool registration failed; missing required tool(s): ${missing.join(", ")}.`,
|
|
137
|
+
"Check earlier bootstrap warnings for the registration slot that failed.",
|
|
138
|
+
].join(" ");
|
|
139
|
+
logWarning("bootstrap", message);
|
|
140
|
+
throw new Error(message);
|
|
141
|
+
}
|
|
124
142
|
export function registerGsdExtension(pi) {
|
|
125
143
|
// Note: registerGSDCommand is called by index.ts before this function,
|
|
126
144
|
// so we intentionally skip it here to avoid double-registration.
|
|
@@ -186,4 +204,5 @@ export function registerGsdExtension(pi) {
|
|
|
186
204
|
logWarning("bootstrap", `Failed to register ${name}: ${err instanceof Error ? err.message : String(err)}`);
|
|
187
205
|
}
|
|
188
206
|
}
|
|
207
|
+
assertCriticalGsdWorkflowToolsRegistered(pi);
|
|
189
208
|
}
|