@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
|
@@ -7,11 +7,12 @@ import { isToolCallEventType } from "@gsd/pi-coding-agent";
|
|
|
7
7
|
import { ALWAYS_PRESERVED_SHIM_TOOL_NAMES } from "@gsd/pi-ai";
|
|
8
8
|
import { updateSnapshot } from "../ecosystem/gsd-extension-api.js";
|
|
9
9
|
import { buildMilestoneFileName, clearPathCache, milestonesDir, resolveMilestonePath, resolveSliceFile, resolveSlicePath } from "../paths.js";
|
|
10
|
-
import { canonicalToolName, clearDiscussionFlowState,
|
|
10
|
+
import { applyAskUserQuestionsGateResult, canonicalToolName, clearDiscussionFlowState, formatPendingAskUserQuestionsGateMessage, isApprovalGateVerifiedInSnapshot, isMilestoneDepthVerified, isMilestoneDepthVerifiedInSnapshot, isQueuePhaseActive, markApprovalGateVerified, markDepthVerified, refreshWriteGateStateFromDisk, resetWriteGateState, shouldBlockContextWrite, shouldBlockPlanningUnit, shouldBlockQueueExecution, shouldBlockWorktreeWrite, isGateQuestionId, setPendingGate, clearPendingGate, getPendingGate, shouldBlockPendingGate, shouldBlockPendingGateBash, extractDepthVerificationMilestoneId } from "./write-gate.js";
|
|
11
11
|
import { resolveManifest } from "../unit-context-manifest.js";
|
|
12
12
|
import { isBlockedStateFile, isBashWriteToStateFile, BLOCKED_WRITE_ERROR } from "../write-intercept.js";
|
|
13
13
|
import { loadFile, saveFile, formatContinue } from "../files.js";
|
|
14
|
-
import { clearAutoCompletionStopInProgress, clearToolInvocationError, getAutoRuntimeSnapshot, getSourceObservationStore, isAutoActive, isAutoCompletionStopInProgress, isAutoPaused, markToolEnd, markToolStart, recordToolInvocationError, } from "../auto-runtime-state.js";
|
|
14
|
+
import { clearAutoCompletionStopInProgress, clearToolInvocationError, getAutoRuntimeSnapshot, getSourceObservationStore, isAutoActive, isAutoCompletionStopInProgress, isAutoPaused, isInteractiveElicitationInFlight, markToolEnd, markToolStart, recordAutoToolSurfaceSnapshot, recordToolInvocationError, } from "../auto-runtime-state.js";
|
|
15
|
+
import { applyProviderPayloadPolicy } from "../provider-payload-policy.js";
|
|
15
16
|
import { checkToolCallLoop, resetToolCallLoopGuard } from "./tool-call-loop-guard.js";
|
|
16
17
|
import { maybePauseAutoForApprovalGate, resetPendingGatePauseGuard } from "./pending-gate-pause.js";
|
|
17
18
|
import { saveActivityLog } from "../activity-log.js";
|
|
@@ -19,19 +20,26 @@ import { recordToolCall as safetyRecordToolCall, recordToolResult as safetyRecor
|
|
|
19
20
|
import { parseUnitId } from "../unit-id.js";
|
|
20
21
|
import { classifyCommand } from "../safety/destructive-guard.js";
|
|
21
22
|
import { logWarning as safetyLogWarning } from "../workflow-logger.js";
|
|
23
|
+
import { isUnitCloseoutTool, runInteractiveUnitCloseout } from "../unit-closeout.js";
|
|
22
24
|
import { installNotifyInterceptor } from "./notify-interceptor.js";
|
|
23
25
|
import { initNotificationStore } from "../notification-store.js";
|
|
24
26
|
import { initNotificationWidget } from "../notification-widget.js";
|
|
27
|
+
import { notifyPreferenceDiagnostics } from "../preferences-diagnostics.js";
|
|
25
28
|
import { resolveWorktreeProjectRoot } from "../worktree-root.js";
|
|
26
29
|
import { extractSubagentAgentClasses } from "./subagent-input.js";
|
|
27
|
-
import { approvalGateIdForUnit, isExplicitApprovalResponse, shouldPauseForUserApprovalQuestion } from "../user-input-boundary.js";
|
|
30
|
+
import { approvalGateIdForUnit, isExplicitApprovalResponse, messageHasPendingAskUserQuestionsTool, shouldPauseForUserApprovalQuestion, } from "../user-input-boundary.js";
|
|
28
31
|
import { applyUnitSkillVisibility, unitHasSkillManifest } from "../skill-scope.js";
|
|
29
32
|
import { getGuidedUnitContext } from "../guided-unit-context.js";
|
|
30
33
|
import { registerPlanMilestoneSchemaRecovery } from "./plan-milestone-schema-recovery.js";
|
|
31
|
-
import { AUTO_UNIT_SCOPED_TOOLS, RUN_UAT_BROWSER_TOOL_NAMES, isWorkflowAliasTool } from "../auto-unit-tool-scope.js";
|
|
34
|
+
import { AUTO_UNIT_SCOPED_TOOLS, RUN_UAT_BROWSER_TOOL_NAMES, canonicalWorkflowToolName, isWorkflowAliasTool } from "../auto-unit-tool-scope.js";
|
|
35
|
+
import { hasBrowserContractPrefix } from "../../shared/browser-contract.js";
|
|
32
36
|
import { filterToolsForProvider } from "../model-router.js";
|
|
37
|
+
import { mcpToolMatchesBaseName } from "../mcp-tool-name.js";
|
|
33
38
|
import { RUN_UAT_READ_ONLY_TOOL_NAMES, RUN_UAT_WORKFLOW_TOOL_NAMES } from "../tool-presentation-plan.js";
|
|
34
|
-
import {
|
|
39
|
+
import { supportsSourceObservationsForUnit } from "../source-observations.js";
|
|
40
|
+
import { clearPendingAutoStart } from "../pending-auto-start.js";
|
|
41
|
+
import { resolveWorkflowToolBasePath } from "./dynamic-tools.js";
|
|
42
|
+
import { getRequiredWorkflowToolsForUnit } from "../unit-tool-contracts.js";
|
|
35
43
|
let approvalQuestionAbortInFlight = false;
|
|
36
44
|
async function loadWelcomeScreenModule() {
|
|
37
45
|
const candidates = [];
|
|
@@ -134,7 +142,7 @@ function withPreservedShimTools(toolNames) {
|
|
|
134
142
|
}
|
|
135
143
|
/** True for the browser automation tools (browser_navigate, browser_click, ...). */
|
|
136
144
|
function isBrowserTool(toolName) {
|
|
137
|
-
return canonicalToolName(toolName)
|
|
145
|
+
return hasBrowserContractPrefix(canonicalToolName(toolName));
|
|
138
146
|
}
|
|
139
147
|
/**
|
|
140
148
|
* True when any message in the request is driven by a GSD workflow command
|
|
@@ -165,15 +173,19 @@ function resolveScopedToolNames(activeToolNames, requestedToolNames) {
|
|
|
165
173
|
const resolved = new Set();
|
|
166
174
|
for (const requested of requestedToolNames) {
|
|
167
175
|
const scopedMatches = [];
|
|
176
|
+
const aliasFallbacks = [];
|
|
168
177
|
for (const activeName of activeToolNames) {
|
|
169
|
-
if (
|
|
170
|
-
continue;
|
|
171
|
-
const toolSeparator = activeName.indexOf("__", "mcp__".length);
|
|
172
|
-
if (toolSeparator < 0)
|
|
173
|
-
continue;
|
|
174
|
-
if (activeName.slice(toolSeparator + 2) === requested) {
|
|
178
|
+
if (mcpToolMatchesBaseName(activeName, requested)) {
|
|
175
179
|
scopedMatches.push(activeName);
|
|
176
180
|
}
|
|
181
|
+
else if (isWorkflowAliasTool(activeName) && canonicalWorkflowToolName(activeName) === requested) {
|
|
182
|
+
aliasFallbacks.push(activeName);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
// Only use alias as fallback when canonical is absent — not directly and not via MCP scoping.
|
|
186
|
+
// Prevents the alias from resurfacing alongside the canonical when both are in the active set.
|
|
187
|
+
if (!exact.has(requested) && scopedMatches.length === 0) {
|
|
188
|
+
scopedMatches.push(...aliasFallbacks);
|
|
177
189
|
}
|
|
178
190
|
if (requested.startsWith("browser_") && scopedMatches.length > 0) {
|
|
179
191
|
for (const match of scopedMatches)
|
|
@@ -192,7 +204,7 @@ export function buildMinimalGsdToolSet(activeToolNames) {
|
|
|
192
204
|
const minimal = resolveScopedToolNames(activeToolNames, MINIMAL_GSD_TOOL_NAMES);
|
|
193
205
|
return withPreservedShimTools([...new Set([...preserved, ...minimal])]);
|
|
194
206
|
}
|
|
195
|
-
export function buildMinimalAutoGsdToolSet(activeToolNames, unitType, registeredToolNames = activeToolNames) {
|
|
207
|
+
export function buildMinimalAutoGsdToolSet(activeToolNames, unitType, registeredToolNames = activeToolNames, warnOnUnresolvedRequiredTools = registeredToolNames !== activeToolNames) {
|
|
196
208
|
if (unitType === "run-uat") {
|
|
197
209
|
return buildRunUatGsdToolSet(activeToolNames, registeredToolNames);
|
|
198
210
|
}
|
|
@@ -204,7 +216,20 @@ export function buildMinimalAutoGsdToolSet(activeToolNames, unitType, registered
|
|
|
204
216
|
...availableBaseTools,
|
|
205
217
|
])];
|
|
206
218
|
const scoped = resolveScopedToolNames([...activeToolNames, ...registeredToolNames], [...MINIMAL_GSD_TOOL_NAMES, ...unitTools]);
|
|
207
|
-
|
|
219
|
+
const result = withPreservedShimTools([...new Set([...preserved, ...scoped])]);
|
|
220
|
+
warnIfRequiredWorkflowToolsUnresolved(unitType, result, warnOnUnresolvedRequiredTools);
|
|
221
|
+
return result;
|
|
222
|
+
}
|
|
223
|
+
function hasResolvedWorkflowTool(resolvedToolNames, requiredToolName) {
|
|
224
|
+
return resolvedToolNames.some((name) => name === requiredToolName || mcpToolMatchesBaseName(name, requiredToolName));
|
|
225
|
+
}
|
|
226
|
+
function warnIfRequiredWorkflowToolsUnresolved(unitType, scopedToolNames, shouldWarn) {
|
|
227
|
+
if (!unitType || !shouldWarn)
|
|
228
|
+
return;
|
|
229
|
+
const unresolved = getRequiredWorkflowToolsForUnit(unitType).filter((toolName) => !hasResolvedWorkflowTool(scopedToolNames, toolName));
|
|
230
|
+
if (unresolved.length === 0)
|
|
231
|
+
return;
|
|
232
|
+
safetyLogWarning("bootstrap", `buildMinimalAutoGsdToolSet(${unitType}): required workflow tool(s) not in active/registered surface after scoping: ${unresolved.join(", ")}. Tool registration may have partially failed, provider filtering may have removed a required tool, or workflow MCP may be disconnected.`);
|
|
208
233
|
}
|
|
209
234
|
export function buildRunUatGsdToolSet(activeToolNames, registeredToolNames = activeToolNames) {
|
|
210
235
|
const scoped = resolveScopedToolNames([...activeToolNames, ...registeredToolNames], [
|
|
@@ -214,7 +239,7 @@ export function buildRunUatGsdToolSet(activeToolNames, registeredToolNames = act
|
|
|
214
239
|
...RUN_UAT_BROWSER_TOOL_NAMES,
|
|
215
240
|
]);
|
|
216
241
|
const resolved = [...new Set(scoped)];
|
|
217
|
-
const unresolved = RUN_UAT_WORKFLOW_TOOL_NAMES.filter((tool) => !resolved.some((name) => name === tool || (name
|
|
242
|
+
const unresolved = RUN_UAT_WORKFLOW_TOOL_NAMES.filter((tool) => !resolved.some((name) => name === tool || mcpToolMatchesBaseName(name, tool)));
|
|
218
243
|
if (unresolved.length > 0) {
|
|
219
244
|
safetyLogWarning("bootstrap", `buildRunUatGsdToolSet: required run-uat workflow tool(s) not found in active/registered surface: ${unresolved.join(", ")}. Session may lack gsd-workflow MCP connection.`);
|
|
220
245
|
}
|
|
@@ -230,7 +255,7 @@ export function buildMinimalGsdWorkflowToolSet(activeToolNames, registeredToolNa
|
|
|
230
255
|
const scoped = resolveScopedToolNames([...activeToolNames, ...registeredToolNames], WORKFLOW_GSD_TOOL_NAMES);
|
|
231
256
|
return withPreservedShimTools([...new Set([...preserved, ...scoped])]);
|
|
232
257
|
}
|
|
233
|
-
export function buildRequestScopedGsdToolSet(activeToolNames, requestCustomMessages, registeredToolNames = activeToolNames, guidedUnitType) {
|
|
258
|
+
export function buildRequestScopedGsdToolSet(activeToolNames, requestCustomMessages, registeredToolNames = activeToolNames, guidedUnitType, warnOnUnresolvedRequiredTools = registeredToolNames !== activeToolNames) {
|
|
234
259
|
for (let index = (requestCustomMessages?.length ?? 0) - 1; index >= 0; index--) {
|
|
235
260
|
const currentCustomType = requestCustomMessages?.[index]?.customType;
|
|
236
261
|
if (currentCustomType === "gsd-run" ||
|
|
@@ -238,7 +263,7 @@ export function buildRequestScopedGsdToolSet(activeToolNames, requestCustomMessa
|
|
|
238
263
|
currentCustomType === "gsd-doctor-heal" ||
|
|
239
264
|
currentCustomType === "gsd-triage") {
|
|
240
265
|
if (guidedUnitType) {
|
|
241
|
-
return buildMinimalAutoGsdToolSet(activeToolNames, guidedUnitType, registeredToolNames);
|
|
266
|
+
return buildMinimalAutoGsdToolSet(activeToolNames, guidedUnitType, registeredToolNames, warnOnUnresolvedRequiredTools);
|
|
242
267
|
}
|
|
243
268
|
return buildMinimalGsdWorkflowToolSet(activeToolNames, registeredToolNames);
|
|
244
269
|
}
|
|
@@ -271,7 +296,18 @@ function applyMinimalGsdToolSurface(pi) {
|
|
|
271
296
|
return;
|
|
272
297
|
const dash = getAutoRuntimeSnapshot();
|
|
273
298
|
if (dash.active && dash.currentUnit) {
|
|
274
|
-
|
|
299
|
+
const currentToolNames = pi.getActiveTools();
|
|
300
|
+
const hasRegisteredSurface = typeof pi.getAllTools === "function";
|
|
301
|
+
const registeredToolNames = resolveRegisteredToolNames(pi, currentToolNames);
|
|
302
|
+
const scopedToolNames = buildMinimalAutoGsdToolSet(currentToolNames, dash.currentUnit.type, registeredToolNames, hasRegisteredSurface);
|
|
303
|
+
recordAutoToolSurfaceSnapshot({
|
|
304
|
+
source: "runtime-scope",
|
|
305
|
+
unitType: dash.currentUnit.type,
|
|
306
|
+
modelFacingToolNames: scopedToolNames,
|
|
307
|
+
registeredToolNames,
|
|
308
|
+
scopedToolNames,
|
|
309
|
+
});
|
|
310
|
+
pi.setActiveTools(scopedToolNames);
|
|
275
311
|
return;
|
|
276
312
|
}
|
|
277
313
|
if (!isGeneralGsdToolScopingRequested())
|
|
@@ -282,10 +318,18 @@ export function scopeGsdWorkflowToolsForDispatch(pi, unitType) {
|
|
|
282
318
|
if (isFullGsdToolSurfaceRequested())
|
|
283
319
|
return null;
|
|
284
320
|
const current = pi.getActiveTools();
|
|
321
|
+
const hasRegisteredSurface = typeof pi.getAllTools === "function";
|
|
285
322
|
const registeredToolNames = resolveRegisteredToolNames(pi, current);
|
|
286
323
|
const scoped = unitType
|
|
287
|
-
? buildMinimalAutoGsdToolSet(current, unitType, registeredToolNames)
|
|
324
|
+
? buildMinimalAutoGsdToolSet(current, unitType, registeredToolNames, hasRegisteredSurface)
|
|
288
325
|
: buildMinimalGsdWorkflowToolSet(current, registeredToolNames);
|
|
326
|
+
recordAutoToolSurfaceSnapshot({
|
|
327
|
+
source: "dispatch-scope",
|
|
328
|
+
unitType,
|
|
329
|
+
modelFacingToolNames: scoped,
|
|
330
|
+
registeredToolNames,
|
|
331
|
+
scopedToolNames: scoped,
|
|
332
|
+
});
|
|
289
333
|
const toolsChanged = !(scoped.length === current.length && scoped.every((name, index) => name === current[index]));
|
|
290
334
|
const canScopeSkills = unitHasSkillManifest(unitType) && pi.getVisibleSkills && pi.setVisibleSkills;
|
|
291
335
|
if (!toolsChanged && !canScopeSkills) {
|
|
@@ -420,8 +464,15 @@ function isShellExecutionTool(canonicalName) {
|
|
|
420
464
|
function activateDeferredApprovalGate(basePath) {
|
|
421
465
|
if (deferredApprovalGate?.basePath !== basePath)
|
|
422
466
|
return;
|
|
423
|
-
|
|
467
|
+
const gateId = deferredApprovalGate.gateId;
|
|
424
468
|
deferredApprovalGate = null;
|
|
469
|
+
const snapshot = refreshWriteGateStateFromDisk(basePath);
|
|
470
|
+
const milestoneId = extractDepthVerificationMilestoneId(gateId);
|
|
471
|
+
if (isApprovalGateVerifiedInSnapshot(snapshot, gateId))
|
|
472
|
+
return;
|
|
473
|
+
if (milestoneId && isMilestoneDepthVerifiedInSnapshot(snapshot, milestoneId))
|
|
474
|
+
return;
|
|
475
|
+
setPendingGate(gateId, basePath);
|
|
425
476
|
}
|
|
426
477
|
function extractGateQuestionId(input) {
|
|
427
478
|
const questions = input?.questions ?? [];
|
|
@@ -439,6 +490,25 @@ function isContextDraftSummarySave(toolName, input) {
|
|
|
439
490
|
return false;
|
|
440
491
|
return input.artifact_type === "CONTEXT-DRAFT";
|
|
441
492
|
}
|
|
493
|
+
/**
|
|
494
|
+
* External engines (claude-code-cli) deliver ask_user_questions results as
|
|
495
|
+
* relayed MCP tool results: the structured round payload arrives in
|
|
496
|
+
* `result.structuredContent`, not in pi-native `event.details`. Without this
|
|
497
|
+
* fallback, applyAskUserQuestionsGateResult sees no response for an answered
|
|
498
|
+
* gate question and lands in the "waiting" branch — leaving a re-armed gate
|
|
499
|
+
* permanently pending and the discuss→auto handoff blocked.
|
|
500
|
+
*/
|
|
501
|
+
function resolveAskUserQuestionsGateDetails(event) {
|
|
502
|
+
const hasRoundShape = (value) => !!value && typeof value === "object" &&
|
|
503
|
+
(value.cancelled !== undefined || value.response !== undefined);
|
|
504
|
+
const details = event.details;
|
|
505
|
+
if (hasRoundShape(details))
|
|
506
|
+
return details;
|
|
507
|
+
const structured = event.result?.structuredContent;
|
|
508
|
+
if (hasRoundShape(structured))
|
|
509
|
+
return structured;
|
|
510
|
+
return details ?? {};
|
|
511
|
+
}
|
|
442
512
|
function selectedAnswerLabel(selected) {
|
|
443
513
|
if (Array.isArray(selected))
|
|
444
514
|
return selected.map(String).join(", ");
|
|
@@ -540,6 +610,7 @@ function initSessionNotifications(ctx) {
|
|
|
540
610
|
initNotificationStore(resolveNotificationStoreBasePath(contextBasePath(ctx)));
|
|
541
611
|
installNotifyInterceptor(ctx);
|
|
542
612
|
initNotificationWidget(ctx);
|
|
613
|
+
notifyPreferenceDiagnostics(ctx, contextBasePath(ctx), { surface: "session-start" });
|
|
543
614
|
}
|
|
544
615
|
async function prepareWorkflowMcpForHookContext(ctx, basePath) {
|
|
545
616
|
// Skip MCP auto-prep when running inside an auto-worktree. The worktree
|
|
@@ -601,7 +672,7 @@ export function registerHooks(pi, ecosystemHandlers) {
|
|
|
601
672
|
catch { /* non-fatal */ }
|
|
602
673
|
}
|
|
603
674
|
});
|
|
604
|
-
pi.on("session_switch", async (
|
|
675
|
+
pi.on("session_switch", async (event, ctx) => {
|
|
605
676
|
const basePath = contextBasePath(ctx);
|
|
606
677
|
const preserveCloseoutSurface = isAutoCompletionStopInProgress();
|
|
607
678
|
initSessionNotifications(ctx);
|
|
@@ -610,6 +681,13 @@ export function registerHooks(pi, ecosystemHandlers) {
|
|
|
610
681
|
clearDeferredApprovalGate();
|
|
611
682
|
await resetAskUserQuestionsTurnCache();
|
|
612
683
|
clearDiscussionFlowState(basePath);
|
|
684
|
+
// /clear or /new destroys the conversation holding a discuss interview, so
|
|
685
|
+
// its pending discuss→auto handoff can never be answered — clear it. Resume
|
|
686
|
+
// restores the interview transcript, so the entry survives. Auto-mode's own
|
|
687
|
+
// newSession() calls are safe: the handoff consumes the entry on agent_end.
|
|
688
|
+
if (event.reason === "new") {
|
|
689
|
+
clearPendingAutoStart(basePath);
|
|
690
|
+
}
|
|
613
691
|
await syncServiceTierStatus(ctx);
|
|
614
692
|
await applyDisabledModelProviderPolicy(ctx);
|
|
615
693
|
await applyCompactionThresholdOverride(ctx);
|
|
@@ -803,6 +881,20 @@ export function registerHooks(pi, ecosystemHandlers) {
|
|
|
803
881
|
pi.on("message_update", async (event, ctx) => {
|
|
804
882
|
if (approvalQuestionAbortInFlight)
|
|
805
883
|
return;
|
|
884
|
+
// If the model asked via ask_user_questions, that in-flight elicitation IS
|
|
885
|
+
// the human boundary. Arming the pause/gate here (and emitting the "waiting
|
|
886
|
+
// for your approval - pausing" notice) would tear it down and trigger the
|
|
887
|
+
// foreground self-cancel/re-ask loop. The marker is set only by the
|
|
888
|
+
// claude-code-cli SDK elicitation handler and is ungated, so it is true in
|
|
889
|
+
// foreground; under the native-TUI provider it is always false and this path
|
|
890
|
+
// runs unchanged (#cc-elicitation-self-cancel).
|
|
891
|
+
if (isInteractiveElicitationInFlight())
|
|
892
|
+
return;
|
|
893
|
+
// Prose with "?" can stream before the MCP tool/elicitation starts. When the
|
|
894
|
+
// structured ask_user_questions call is already in the partial message, the
|
|
895
|
+
// tool IS the human boundary — do not arm the text-based approval pause.
|
|
896
|
+
if (messageHasPendingAskUserQuestionsTool(event.message))
|
|
897
|
+
return;
|
|
806
898
|
const dash = getAutoRuntimeSnapshot();
|
|
807
899
|
if (dash.active)
|
|
808
900
|
return;
|
|
@@ -1066,82 +1158,52 @@ export function registerHooks(pi, ecosystemHandlers) {
|
|
|
1066
1158
|
else if (isAutoActive()) {
|
|
1067
1159
|
clearToolInvocationError();
|
|
1068
1160
|
}
|
|
1161
|
+
// Interactive Closeout adapter (ADR-032): auto-mode owns closeout for its
|
|
1162
|
+
// own units; interactive completions get the durable git subset (commit +
|
|
1163
|
+
// Closeout Git Verdict) instead of silently bypassing git.isolation.
|
|
1164
|
+
if (!event.isError && !isAutoActive() && isUnitCloseoutTool(toolName)) {
|
|
1165
|
+
try {
|
|
1166
|
+
runInteractiveUnitCloseout({
|
|
1167
|
+
basePath: resolveWorkflowToolBasePath(ctx, event.input),
|
|
1168
|
+
canonicalToolName: toolName,
|
|
1169
|
+
input: event.input,
|
|
1170
|
+
});
|
|
1171
|
+
}
|
|
1172
|
+
catch (err) {
|
|
1173
|
+
safetyLogWarning("engine", `interactive unit closeout failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
1174
|
+
}
|
|
1175
|
+
}
|
|
1069
1176
|
if (toolName !== "ask_user_questions")
|
|
1070
1177
|
return;
|
|
1071
1178
|
const basePath = contextBasePath(ctx);
|
|
1072
1179
|
const milestoneId = await getDiscussionMilestoneIdFor(basePath);
|
|
1073
|
-
const details = event
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
if (
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
// the gate when the user replies with an approval keyword), but the
|
|
1088
|
-
// structured re-ask is more deterministic and gives the user a clear UI.
|
|
1089
|
-
resetToolCallLoopGuard();
|
|
1090
|
-
const interrupted = details?.interrupted === true;
|
|
1091
|
-
if (ctx) {
|
|
1092
|
-
await maybePauseAutoForApprovalGate(ctx, pi, true, interrupted
|
|
1093
|
-
? "Depth confirmation was interrupted — pausing auto-mode until you respond."
|
|
1094
|
-
: "Depth confirmation is waiting for your answer — pausing auto-mode.");
|
|
1095
|
-
}
|
|
1096
|
-
return {
|
|
1097
|
-
content: [{
|
|
1098
|
-
type: "text",
|
|
1099
|
-
text: [
|
|
1100
|
-
`Waiting for depth confirmation on gate "${currentPendingGate}".`,
|
|
1101
|
-
interrupted
|
|
1102
|
-
? "The confirmation question was interrupted before a response was recorded."
|
|
1103
|
-
: "No user response was received for the confirmation question.",
|
|
1104
|
-
"Do not infer approval from earlier or prior messages.",
|
|
1105
|
-
"Do not proceed, write files, save artifacts, or call other tools.",
|
|
1106
|
-
`Re-call ask_user_questions with the same gate question id ("${currentPendingGate}") and wait for the user's response.`,
|
|
1107
|
-
].join(" "),
|
|
1108
|
-
}],
|
|
1109
|
-
};
|
|
1110
|
-
}
|
|
1111
|
-
else {
|
|
1112
|
-
const pendingQuestion = questions.find((question) => question?.id === currentPendingGate);
|
|
1113
|
-
if (pendingQuestion) {
|
|
1114
|
-
const answer = details.response?.answers?.[currentPendingGate];
|
|
1115
|
-
if (isDepthConfirmationAnswer(answer?.selected, pendingQuestion.options)) {
|
|
1116
|
-
markApprovalGateVerified(currentPendingGate, basePath);
|
|
1117
|
-
const milestoneIdFromGate = extractDepthVerificationMilestoneId(currentPendingGate);
|
|
1118
|
-
if (milestoneIdFromGate)
|
|
1119
|
-
markDepthVerified(milestoneIdFromGate, basePath);
|
|
1120
|
-
clearPendingGate(basePath);
|
|
1121
|
-
clearDeferredApprovalGate(basePath);
|
|
1122
|
-
}
|
|
1123
|
-
}
|
|
1180
|
+
const details = resolveAskUserQuestionsGateDetails(event);
|
|
1181
|
+
const questions = event.input?.questions ?? details?.questions ?? [];
|
|
1182
|
+
const gateResult = applyAskUserQuestionsGateResult({
|
|
1183
|
+
basePath,
|
|
1184
|
+
questions,
|
|
1185
|
+
details,
|
|
1186
|
+
fallbackMilestoneId: milestoneId,
|
|
1187
|
+
});
|
|
1188
|
+
if (gateResult.status === "waiting") {
|
|
1189
|
+
resetToolCallLoopGuard();
|
|
1190
|
+
if (ctx) {
|
|
1191
|
+
await maybePauseAutoForApprovalGate(ctx, pi, true, gateResult.interrupted
|
|
1192
|
+
? "Depth confirmation was interrupted — pausing auto-mode until you respond."
|
|
1193
|
+
: "Depth confirmation is waiting for your answer — pausing auto-mode.");
|
|
1124
1194
|
}
|
|
1195
|
+
return {
|
|
1196
|
+
content: [{
|
|
1197
|
+
type: "text",
|
|
1198
|
+
text: formatPendingAskUserQuestionsGateMessage(gateResult.pendingGateId, gateResult.interrupted),
|
|
1199
|
+
}],
|
|
1200
|
+
};
|
|
1201
|
+
}
|
|
1202
|
+
if (gateResult.status === "verified") {
|
|
1203
|
+
clearDeferredApprovalGate(basePath);
|
|
1125
1204
|
}
|
|
1126
1205
|
if (details?.cancelled || !details?.response)
|
|
1127
1206
|
return;
|
|
1128
|
-
for (const question of questions) {
|
|
1129
|
-
if (typeof question.id === "string" && question.id.includes("depth_verification")) {
|
|
1130
|
-
// Only unlock the gate if the user selected the first option (confirmation).
|
|
1131
|
-
// Cross-references against the question's defined options to reject free-form "Other" text.
|
|
1132
|
-
const answer = details.response?.answers?.[question.id];
|
|
1133
|
-
const inferredMilestoneId = extractDepthVerificationMilestoneId(question.id) ?? milestoneId;
|
|
1134
|
-
if (isDepthConfirmationAnswer(answer?.selected, question.options)) {
|
|
1135
|
-
if (currentPendingGate && question.id !== currentPendingGate)
|
|
1136
|
-
break;
|
|
1137
|
-
markApprovalGateVerified(question.id, basePath);
|
|
1138
|
-
markDepthVerified(inferredMilestoneId, basePath);
|
|
1139
|
-
clearPendingGate(basePath);
|
|
1140
|
-
clearDeferredApprovalGate(basePath);
|
|
1141
|
-
}
|
|
1142
|
-
break;
|
|
1143
|
-
}
|
|
1144
|
-
}
|
|
1145
1207
|
if (!milestoneId)
|
|
1146
1208
|
return;
|
|
1147
1209
|
await saveDiscussionQuestionRound(basePath, milestoneId, questions, details);
|
|
@@ -1152,10 +1214,39 @@ export function registerHooks(pi, ecosystemHandlers) {
|
|
|
1152
1214
|
if (toolName === "ask_user_questions") {
|
|
1153
1215
|
const questionId = extractGateQuestionId(event.args);
|
|
1154
1216
|
if (typeof questionId === "string") {
|
|
1155
|
-
|
|
1217
|
+
// External engines (claude-code-cli) ingest the SDK turn's tool blocks
|
|
1218
|
+
// post-hoc, so this event can fire AFTER the workflow MCP child already
|
|
1219
|
+
// verified this gate and allowed the CONTEXT save. setPendingGate also
|
|
1220
|
+
// revokes verifiedDepthMilestones/verifiedApprovalGates, so an
|
|
1221
|
+
// unconditional re-arm here wipes the child's verification and leaves
|
|
1222
|
+
// the discuss→auto handoff permanently blocked. Skip the re-arm when
|
|
1223
|
+
// the snapshot already records this exact gate as verified — mirrors
|
|
1224
|
+
// activateDeferredApprovalGate's guard. Stale verified state cannot
|
|
1225
|
+
// leak into a later re-discussion: a successful handoff deletes the
|
|
1226
|
+
// snapshot via clearDiscussionFlowState.
|
|
1227
|
+
const snapshot = refreshWriteGateStateFromDisk(basePath);
|
|
1228
|
+
const gateMilestoneId = extractDepthVerificationMilestoneId(questionId);
|
|
1229
|
+
const alreadyVerified = isApprovalGateVerifiedInSnapshot(snapshot, questionId) ||
|
|
1230
|
+
isMilestoneDepthVerifiedInSnapshot(snapshot, gateMilestoneId);
|
|
1231
|
+
if (!alreadyVerified) {
|
|
1232
|
+
setPendingGate(questionId, basePath);
|
|
1233
|
+
}
|
|
1156
1234
|
clearDeferredApprovalGate(basePath);
|
|
1157
1235
|
}
|
|
1158
1236
|
}
|
|
1237
|
+
// Safety harness: record evidence here, not only in tool_call. External
|
|
1238
|
+
// engines (claude-code-cli) pre-execute tools, so the agent loop skips
|
|
1239
|
+
// beforeToolCall/tool_call for them — tool_execution_start is the only
|
|
1240
|
+
// event that fires for every tool call. recordToolCall dedupes by
|
|
1241
|
+
// toolCallId, so native tools (which hit both events) record once.
|
|
1242
|
+
safetyRecordToolCall(event.toolCallId, event.toolName, (event.args ?? {}));
|
|
1243
|
+
const execDash = getAutoRuntimeSnapshot();
|
|
1244
|
+
if (execDash.basePath && execDash.currentUnit?.type === "execute-task") {
|
|
1245
|
+
const { milestone: xMid, slice: xSid, task: xTid } = parseUnitId(execDash.currentUnit.id);
|
|
1246
|
+
if (xMid && xSid && xTid) {
|
|
1247
|
+
saveEvidenceToDisk(execDash.basePath, xMid, xSid, xTid);
|
|
1248
|
+
}
|
|
1249
|
+
}
|
|
1159
1250
|
if (!isAutoActive())
|
|
1160
1251
|
return;
|
|
1161
1252
|
markToolStart(event.toolCallId, event.toolName);
|
|
@@ -1196,61 +1287,10 @@ export function registerHooks(pi, ecosystemHandlers) {
|
|
|
1196
1287
|
const payload = event.payload;
|
|
1197
1288
|
if (!payload || typeof payload !== "object")
|
|
1198
1289
|
return;
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
const { createObservationMask, createResponsesInputObservationMask, truncateContextResultMessages, truncateResponsesInputResultItems, } = await import("../context-masker.js");
|
|
1204
|
-
const prefs = loadEffectiveGSDPreferences();
|
|
1205
|
-
const cmConfig = prefs?.preferences.context_management;
|
|
1206
|
-
// Observation masking: replace old tool results with placeholders.
|
|
1207
|
-
// Only active during auto-mode when context_management.observation_masking is enabled.
|
|
1208
|
-
if (isAutoActive() && cmConfig?.observation_masking !== false) {
|
|
1209
|
-
const keepTurns = cmConfig?.observation_mask_turns ?? 8;
|
|
1210
|
-
const messages = payload.messages;
|
|
1211
|
-
if (Array.isArray(messages)) {
|
|
1212
|
-
payload.messages = createObservationMask(keepTurns)(messages);
|
|
1213
|
-
}
|
|
1214
|
-
const input = payload.input;
|
|
1215
|
-
if (Array.isArray(input)) {
|
|
1216
|
-
payload.input = createResponsesInputObservationMask(keepTurns)(input);
|
|
1217
|
-
}
|
|
1218
|
-
}
|
|
1219
|
-
// Tool result truncation: cap individual tool result content length.
|
|
1220
|
-
// Applies in ALL modes (auto + interactive) to prevent context bloat.
|
|
1221
|
-
// In pi-ai format, toolResult messages have role: "toolResult" and content: TextContent[].
|
|
1222
|
-
// Creates new objects to avoid mutating shared conversation state.
|
|
1223
|
-
const maxChars = cmConfig?.tool_result_max_chars ?? 800;
|
|
1224
|
-
const msgs = payload.messages;
|
|
1225
|
-
if (Array.isArray(msgs)) {
|
|
1226
|
-
payload.messages = truncateContextResultMessages(msgs, maxChars);
|
|
1227
|
-
}
|
|
1228
|
-
const input = payload.input;
|
|
1229
|
-
if (Array.isArray(input)) {
|
|
1230
|
-
payload.input = truncateResponsesInputResultItems(input, maxChars);
|
|
1231
|
-
}
|
|
1232
|
-
}
|
|
1233
|
-
catch { /* non-fatal */ }
|
|
1234
|
-
try {
|
|
1235
|
-
if (isAutoActive()) {
|
|
1236
|
-
const sourceContextBlock = getSourceObservationStore().renderActiveBlock();
|
|
1237
|
-
if (sourceContextBlock) {
|
|
1238
|
-
const nextPayload = injectSourceContextBlockIntoPayload(payload, sourceContextBlock);
|
|
1239
|
-
Object.assign(payload, nextPayload);
|
|
1240
|
-
}
|
|
1241
|
-
}
|
|
1242
|
-
}
|
|
1243
|
-
catch { /* non-fatal */ }
|
|
1244
|
-
// ── Service Tier ────────────────────────────────────────────────────
|
|
1245
|
-
const modelId = event.model?.id;
|
|
1246
|
-
if (!modelId)
|
|
1247
|
-
return payload;
|
|
1248
|
-
const { getEffectiveServiceTier, supportsServiceTier } = await import("../service-tier.js");
|
|
1249
|
-
const tier = getEffectiveServiceTier();
|
|
1250
|
-
if (!tier || !supportsServiceTier(modelId))
|
|
1251
|
-
return payload;
|
|
1252
|
-
payload.service_tier = tier;
|
|
1253
|
-
return payload;
|
|
1290
|
+
return applyProviderPayloadPolicy({
|
|
1291
|
+
payload,
|
|
1292
|
+
modelId: event.model?.id,
|
|
1293
|
+
});
|
|
1254
1294
|
});
|
|
1255
1295
|
// Capability-aware model routing hook (ADR-004)
|
|
1256
1296
|
// Extensions can override model selection by returning { modelId: "..." }
|
|
@@ -1280,18 +1320,38 @@ export function registerHooks(pi, ecosystemHandlers) {
|
|
|
1280
1320
|
return surfaceReduced ? { toolNames: providerCompatible } : undefined;
|
|
1281
1321
|
}
|
|
1282
1322
|
const registeredToolNames = resolveRegisteredToolNames(pi, event.activeToolNames);
|
|
1323
|
+
const hasRegisteredSurface = typeof pi.getAllTools === "function";
|
|
1283
1324
|
const compatibleRegisteredToolNames = filterToolsForProvider(registeredToolNames, event.selectedModelApi, event.selectedModelProvider).compatible.filter((name) => !(dropAliases && isWorkflowAliasTool(name)));
|
|
1284
1325
|
const guidedUnit = getGuidedUnitContext();
|
|
1285
|
-
const
|
|
1326
|
+
const requestRegisteredToolNames = guidedUnit?.unitType === "run-uat"
|
|
1327
|
+
? compatibleRegisteredToolNames
|
|
1328
|
+
: registeredToolNames;
|
|
1329
|
+
const requestScoped = buildRequestScopedGsdToolSet(guidedUnit?.unitType === "run-uat" ? aliasFilteredCompatible : providerCompatible, event.requestCustomMessages, requestRegisteredToolNames, guidedUnit?.unitType, hasRegisteredSurface);
|
|
1286
1330
|
if (requestScoped) {
|
|
1331
|
+
recordAutoToolSurfaceSnapshot({
|
|
1332
|
+
source: "provider-adjustment",
|
|
1333
|
+
unitType: guidedUnit?.unitType,
|
|
1334
|
+
modelFacingToolNames: requestScoped,
|
|
1335
|
+
registeredToolNames: requestRegisteredToolNames,
|
|
1336
|
+
scopedToolNames: requestScoped,
|
|
1337
|
+
});
|
|
1287
1338
|
return { toolNames: requestScoped };
|
|
1288
1339
|
}
|
|
1289
1340
|
const dash = getAutoRuntimeSnapshot();
|
|
1290
1341
|
if (dash.active && dash.currentUnit) {
|
|
1342
|
+
const registeredForUnit = dash.currentUnit.type === "run-uat"
|
|
1343
|
+
? compatibleRegisteredToolNames
|
|
1344
|
+
: resolveRegisteredToolNames(pi, event.activeToolNames);
|
|
1345
|
+
const scopedToolNames = buildMinimalAutoGsdToolSet(dash.currentUnit.type === "run-uat" ? aliasFilteredCompatible : providerCompatible, dash.currentUnit.type, registeredForUnit, hasRegisteredSurface);
|
|
1346
|
+
recordAutoToolSurfaceSnapshot({
|
|
1347
|
+
source: "provider-adjustment",
|
|
1348
|
+
unitType: dash.currentUnit.type,
|
|
1349
|
+
modelFacingToolNames: scopedToolNames,
|
|
1350
|
+
registeredToolNames: registeredForUnit,
|
|
1351
|
+
scopedToolNames,
|
|
1352
|
+
});
|
|
1291
1353
|
return {
|
|
1292
|
-
toolNames:
|
|
1293
|
-
? compatibleRegisteredToolNames
|
|
1294
|
-
: resolveRegisteredToolNames(pi, event.activeToolNames)),
|
|
1354
|
+
toolNames: scopedToolNames,
|
|
1295
1355
|
};
|
|
1296
1356
|
}
|
|
1297
1357
|
if (isGeneralGsdToolScopingRequested()) {
|