@opengsd/gsd-pi 1.1.1-dev.b2556262 → 1.2.0-dev.0b870afa
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 +14 -34
- package/dist/help-text.js +5 -0
- package/dist/mcp-server.js +2 -1
- package/dist/models-resolver.d.ts +3 -13
- package/dist/models-resolver.js +3 -22
- package/dist/project-sessions.js +4 -2
- package/dist/resource-loader.js +2 -14
- package/dist/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/GSD-WORKFLOW.md +5 -4
- package/dist/resources/extensions/ask-user-questions.js +78 -23
- package/dist/resources/extensions/async-jobs/async-bash-tool.js +30 -64
- package/dist/resources/extensions/async-jobs/await-tool.js +80 -12
- package/dist/resources/extensions/async-jobs/index.js +65 -0
- package/dist/resources/extensions/async-jobs/job-manager.js +12 -1
- package/dist/resources/extensions/bg-shell/bg-shell-command.js +6 -6
- package/dist/resources/extensions/bg-shell/bg-shell-tool.js +10 -7
- package/dist/resources/extensions/bg-shell/overlay.js +9 -6
- package/dist/resources/extensions/bg-shell/process-manager.js +54 -25
- package/dist/resources/extensions/bg-shell/readiness-detector.js +11 -0
- package/dist/resources/extensions/bg-shell/utilities.js +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 +139 -243
- 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/contracts.js +8 -1
- package/dist/resources/extensions/gsd/auto/custom-verify-retry-store.js +17 -2
- package/dist/resources/extensions/gsd/auto/detect-stuck.js +33 -13
- package/dist/resources/extensions/gsd/auto/dispatch-history.js +105 -0
- package/dist/resources/extensions/gsd/auto/dispatch-key.js +37 -0
- package/dist/resources/extensions/gsd/auto/loop.js +77 -56
- package/dist/resources/extensions/gsd/auto/orchestrator.js +860 -96
- package/dist/resources/extensions/gsd/auto/phases.js +81 -8
- package/dist/resources/extensions/gsd/auto/run-unit.js +2 -1
- package/dist/resources/extensions/gsd/auto/session.js +6 -0
- package/dist/resources/extensions/gsd/auto-dashboard.js +16 -4
- package/dist/resources/extensions/gsd/auto-direct-dispatch.js +11 -34
- package/dist/resources/extensions/gsd/auto-dispatch.js +56 -63
- package/dist/resources/extensions/gsd/auto-model-selection.js +44 -13
- package/dist/resources/extensions/gsd/auto-post-unit.js +47 -17
- package/dist/resources/extensions/gsd/auto-prompts.js +271 -27
- package/dist/resources/extensions/gsd/auto-recovery.js +48 -49
- package/dist/resources/extensions/gsd/auto-runtime-state.js +17 -0
- package/dist/resources/extensions/gsd/auto-start.js +36 -49
- package/dist/resources/extensions/gsd/auto-timers.js +16 -2
- package/dist/resources/extensions/gsd/auto-tool-tracking.js +55 -0
- package/dist/resources/extensions/gsd/auto-unit-closeout.js +45 -21
- package/dist/resources/extensions/gsd/auto-unit-tool-scope.js +33 -37
- package/dist/resources/extensions/gsd/auto-verification.js +30 -37
- package/dist/resources/extensions/gsd/auto-worktree-repair.js +10 -2
- package/dist/resources/extensions/gsd/auto-worktree.js +67 -375
- package/dist/resources/extensions/gsd/auto.js +112 -486
- package/dist/resources/extensions/gsd/blocked-models.js +28 -0
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +29 -8
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +28 -37
- package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +43 -49
- package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +2 -2
- 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 +319 -161
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +365 -58
- package/dist/resources/extensions/gsd/branch-patterns.js +2 -0
- package/dist/resources/extensions/gsd/browser-daemon-auto-prep.js +83 -0
- package/dist/resources/extensions/gsd/browser-evidence.js +8 -2
- package/dist/resources/extensions/gsd/captures.js +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/closeout-wizard.js +92 -0
- 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/context.js +16 -2
- package/dist/resources/extensions/gsd/commands/handlers/auto.js +3 -0
- package/dist/resources/extensions/gsd/commands-handlers.js +66 -3
- 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/consent-question.js +353 -0
- package/dist/resources/extensions/gsd/consent-verdict.js +63 -0
- package/dist/resources/extensions/gsd/constants.js +0 -2
- package/dist/resources/extensions/gsd/crash-recovery.js +12 -15
- package/dist/resources/extensions/gsd/db/engine.js +755 -0
- package/dist/resources/extensions/gsd/db/queries.js +398 -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/debug-logger.js +10 -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/dispatch-guard.js +10 -35
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +9 -0
- package/dist/resources/extensions/gsd/doctor-engine-checks.js +5 -5
- 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 +6 -21
- package/dist/resources/extensions/gsd/doctor-proactive.js +7 -2
- 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/engine-hook-contract.js +70 -0
- package/dist/resources/extensions/gsd/error-classifier.js +10 -1
- package/dist/resources/extensions/gsd/exec-sandbox.js +30 -10
- package/dist/resources/extensions/gsd/files.js +33 -19
- 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-command-home.js +22 -12
- package/dist/resources/extensions/gsd/gsd-db.js +184 -2048
- package/dist/resources/extensions/gsd/guidance.js +158 -0
- package/dist/resources/extensions/gsd/guided-flow.js +91 -476
- package/dist/resources/extensions/gsd/guided-unit-completion.js +225 -0
- package/dist/resources/extensions/gsd/markdown-renderer.js +43 -33
- package/dist/resources/extensions/gsd/mcp-filter.js +10 -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 +97 -28
- 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-reopen-events.js +3 -5
- 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/native-git-bridge.js +45 -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/parsers-legacy.js +16 -4
- 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 +14 -48
- package/dist/resources/extensions/gsd/preferences.js +161 -29
- package/dist/resources/extensions/gsd/projection-flush.js +7 -0
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +4 -3
- package/dist/resources/extensions/gsd/prompts/discuss.md +6 -7
- package/dist/resources/extensions/gsd/prompts/execute-task.md +3 -1
- package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +5 -7
- package/dist/resources/extensions/gsd/prompts/guided-discuss-project.md +6 -6
- package/dist/resources/extensions/gsd/prompts/guided-discuss-requirements.md +1 -2
- package/dist/resources/extensions/gsd/prompts/guided-discuss-slice.md +5 -6
- package/dist/resources/extensions/gsd/prompts/plan-milestone.md +3 -1
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +4 -3
- package/dist/resources/extensions/gsd/prompts/quick-task.md +1 -1
- package/dist/resources/extensions/gsd/prompts/reassess-roadmap.md +1 -1
- package/dist/resources/extensions/gsd/prompts/refine-slice.md +3 -2
- package/dist/resources/extensions/gsd/prompts/replan-slice.md +2 -2
- package/dist/resources/extensions/gsd/prompts/research-milestone.md +3 -3
- package/dist/resources/extensions/gsd/prompts/research-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/rewrite-docs.md +1 -1
- package/dist/resources/extensions/gsd/prompts/run-uat.md +7 -5
- package/dist/resources/extensions/gsd/prompts/system.md +6 -3
- package/dist/resources/extensions/gsd/prompts/triage-captures.md +1 -1
- package/dist/resources/extensions/gsd/prompts/validate-milestone.md +6 -4
- 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/reactive-graph.js +8 -1
- package/dist/resources/extensions/gsd/recovery-classification.js +41 -87
- package/dist/resources/extensions/gsd/roadmap-slices.js +33 -5
- package/dist/resources/extensions/gsd/safety/destructive-confirmation.js +108 -0
- 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/schemas/parsers.js +6 -1
- package/dist/resources/extensions/gsd/session-lock.js +1 -1
- package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +3 -2
- package/dist/resources/extensions/gsd/state-reconciliation/drift/artifact-db.js +21 -1
- package/dist/resources/extensions/gsd/state-transition-matrix.js +38 -0
- package/dist/resources/extensions/gsd/state.js +19 -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 +66 -11
- package/dist/resources/extensions/gsd/tool-presentation-plan.js +17 -36
- 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-milestone.js +3 -2
- package/dist/resources/extensions/gsd/tools/complete-slice.js +46 -55
- package/dist/resources/extensions/gsd/tools/complete-task.js +3 -2
- package/dist/resources/extensions/gsd/tools/exec-tool.js +10 -8
- package/dist/resources/extensions/gsd/tools/plan-milestone.js +15 -143
- package/dist/resources/extensions/gsd/tools/plan-slice.js +14 -8
- package/dist/resources/extensions/gsd/tools/plan-task.js +2 -2
- package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +41 -2
- package/dist/resources/extensions/gsd/tools/reopen-milestone.js +13 -31
- package/dist/resources/extensions/gsd/tools/reopen-slice.js +16 -35
- package/dist/resources/extensions/gsd/tools/reopen-task.js +2 -2
- package/dist/resources/extensions/gsd/tools/replan-slice.js +2 -2
- package/dist/resources/extensions/gsd/tools/skip-slice.js +18 -36
- package/dist/resources/extensions/gsd/tools/validate-milestone.js +15 -78
- package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +236 -22
- package/dist/resources/extensions/gsd/uat-policy.js +57 -25
- 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 +114 -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/validation-block-guard.js +2 -0
- package/dist/resources/extensions/gsd/verdict-parser.js +1 -1
- package/dist/resources/extensions/gsd/verification-verdict.js +2 -1
- package/dist/resources/extensions/gsd/web-app-uat.js +117 -0
- package/dist/resources/extensions/gsd/workflow-event-ledger.js +91 -0
- package/dist/resources/extensions/gsd/workflow-event-vocabulary.js +46 -0
- package/dist/resources/extensions/gsd/workflow-events.js +6 -18
- package/dist/resources/extensions/gsd/workflow-mcp.js +15 -102
- package/dist/resources/extensions/gsd/workflow-reconcile.js +25 -59
- 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 +12 -3
- 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 +116 -6
- package/dist/resources/extensions/shared/interview-ui.js +2 -2
- package/dist/resources/shared/claude-runtime-floor.js +182 -0
- package/dist/resources/shared/gsd-browser-path-sync.js +214 -0
- package/dist/resources/shared/package-manager-detection.js +1 -1
- package/dist/resources/shared/package.json +3 -0
- package/dist/resources/skills/create-skill/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 -0
- package/dist/update-check.d.ts +2 -0
- package/dist/update-check.js +24 -1
- package/dist/update-cmd.js +40 -3
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +5 -5
- 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 +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/update/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/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 +5 -5
- package/dist/web/standalone/.next/server/chunks/5124.js +1 -0
- package/dist/web/standalone/.next/server/chunks/5942.js +2 -0
- package/dist/web/standalone/.next/server/chunks/8357.js +3 -3
- 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.e0bdc932325d7e03.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-f0285ce91d4ec9ef.js} +1 -1
- package/dist/web/standalone/node_modules/@gsd/native/package.json +1 -1
- package/dist/web/standalone/node_modules/node-pty/build/Makefile +1 -1
- package/dist/web/standalone/node_modules/postcss/lib/container.js +26 -18
- package/dist/web/standalone/node_modules/postcss/lib/css-syntax-error.js +47 -14
- 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 +54 -29
- package/dist/web/standalone/node_modules/postcss/lib/lazy-result.js +47 -37
- package/dist/web/standalone/node_modules/postcss/lib/map-generator.js +26 -9
- package/dist/web/standalone/node_modules/postcss/lib/no-work-result.js +57 -55
- package/dist/web/standalone/node_modules/postcss/lib/node.js +99 -31
- package/dist/web/standalone/node_modules/postcss/lib/parse.js +1 -1
- package/dist/web/standalone/node_modules/postcss/lib/parser.js +10 -9
- package/dist/web/standalone/node_modules/postcss/lib/postcss.js +12 -12
- package/dist/web/standalone/node_modules/postcss/lib/previous-map.js +30 -11
- 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 +69 -28
- package/dist/web/standalone/node_modules/postcss/lib/tokenize.js +6 -2
- 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 +17 -11
- package/packages/cloud-mcp-gateway/package.json +2 -2
- package/packages/contracts/dist/rpc.d.ts +1 -0
- package/packages/contracts/dist/rpc.d.ts.map +1 -1
- package/packages/contracts/dist/rpc.js.map +1 -1
- package/packages/contracts/dist/workflow.d.ts +4 -0
- package/packages/contracts/dist/workflow.d.ts.map +1 -1
- package/packages/contracts/dist/workflow.js.map +1 -1
- package/packages/contracts/package.json +1 -1
- package/packages/daemon/package.json +4 -4
- package/packages/gsd-agent-core/dist/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 +5 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js +8 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.js +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js +113 -40
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js +8 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.js +11 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-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/dist/modes/interactive/interactive-selectors-auth.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-auth.js +4 -4
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-auth.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js +3 -1
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/packages/gsd-agent-modes/package.json +7 -7
- package/packages/mcp-server/dist/cli.js +9 -1
- package/packages/mcp-server/dist/cli.js.map +1 -1
- package/packages/mcp-server/dist/moonshot-tool-schema.d.ts +29 -0
- package/packages/mcp-server/dist/moonshot-tool-schema.d.ts.map +1 -0
- package/packages/mcp-server/dist/moonshot-tool-schema.js +50 -0
- package/packages/mcp-server/dist/moonshot-tool-schema.js.map +1 -0
- package/packages/mcp-server/dist/server.d.ts +10 -0
- package/packages/mcp-server/dist/server.d.ts.map +1 -1
- package/packages/mcp-server/dist/server.js +12 -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 +147 -60
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/package.json +5 -4
- package/packages/native/package.json +1 -1
- package/packages/pi-agent-core/dist/harness/env/nodejs.d.ts +1 -0
- package/packages/pi-agent-core/dist/harness/env/nodejs.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/harness/env/nodejs.js +34 -3
- package/packages/pi-agent-core/dist/harness/env/nodejs.js.map +1 -1
- package/packages/pi-agent-core/dist/index.d.ts +1 -0
- package/packages/pi-agent-core/dist/index.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/index.js +3 -0
- package/packages/pi-agent-core/dist/index.js.map +1 -1
- package/packages/pi-agent-core/package.json +1 -1
- package/packages/pi-ai/README.md +1 -0
- package/packages/pi-ai/dist/index.d.ts +2 -0
- package/packages/pi-ai/dist/index.d.ts.map +1 -1
- package/packages/pi-ai/dist/index.js +2 -0
- package/packages/pi-ai/dist/index.js.map +1 -1
- package/packages/pi-ai/dist/models.generated.d.ts +183 -110
- package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
- package/packages/pi-ai/dist/models.generated.js +205 -158
- package/packages/pi-ai/dist/models.generated.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.js +12 -7
- package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
- package/packages/pi-ai/dist/providers/google-shared.d.ts +5 -0
- package/packages/pi-ai/dist/providers/google-shared.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/google-shared.js +12 -3
- package/packages/pi-ai/dist/providers/google-shared.js.map +1 -1
- package/packages/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/openai-completions.js +7 -3
- package/packages/pi-ai/dist/providers/openai-completions.js.map +1 -1
- package/packages/pi-ai/dist/utils/moonshot-tool-schema.d.ts +9 -0
- package/packages/pi-ai/dist/utils/moonshot-tool-schema.d.ts.map +1 -0
- package/packages/pi-ai/dist/utils/moonshot-tool-schema.js +34 -0
- package/packages/pi-ai/dist/utils/moonshot-tool-schema.js.map +1 -0
- package/packages/pi-ai/dist/utils/oauth/github-copilot.d.ts.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/github-copilot.js +6 -2
- package/packages/pi-ai/dist/utils/oauth/github-copilot.js.map +1 -1
- package/packages/pi-ai/package.json +3 -2
- package/packages/pi-coding-agent/dist/core/auth-storage.d.ts +2 -2
- package/packages/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/auth-storage.js +29 -15
- package/packages/pi-coding-agent/dist/core/auth-storage.js.map +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/dist/core/provider-readiness.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/provider-readiness.js +13 -6
- package/packages/pi-coding-agent/dist/core/provider-readiness.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/bash.d.ts +11 -0
- package/packages/pi-coding-agent/dist/core/tools/bash.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/bash.js +53 -11
- package/packages/pi-coding-agent/dist/core/tools/bash.js.map +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/index.js +1 -1
- package/packages/pi-coding-agent/dist/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/utils/shell.d.ts +28 -2
- package/packages/pi-coding-agent/dist/utils/shell.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/utils/shell.js +56 -10
- package/packages/pi-coding-agent/dist/utils/shell.js.map +1 -1
- package/packages/pi-coding-agent/package.json +7 -7
- package/packages/pi-tui/dist/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/scripts/install/deps.js +10 -0
- package/scripts/link-workspace-packages.cjs +7 -40
- package/src/resources/GSD-WORKFLOW.md +5 -4
- package/src/resources/extensions/ask-user-questions.ts +87 -24
- package/src/resources/extensions/async-jobs/async-bash-cancel.test.ts +360 -0
- package/src/resources/extensions/async-jobs/async-bash-tool.ts +33 -56
- package/src/resources/extensions/async-jobs/await-tool.test.ts +139 -0
- package/src/resources/extensions/async-jobs/await-tool.ts +82 -12
- package/src/resources/extensions/async-jobs/index.ts +79 -0
- package/src/resources/extensions/async-jobs/job-manager.ts +21 -1
- package/src/resources/extensions/bg-shell/bg-shell-command.ts +6 -6
- package/src/resources/extensions/bg-shell/bg-shell-tool.ts +10 -6
- package/src/resources/extensions/bg-shell/overlay.ts +9 -5
- package/src/resources/extensions/bg-shell/process-manager.ts +50 -25
- package/src/resources/extensions/bg-shell/readiness-detector.ts +12 -0
- package/src/resources/extensions/bg-shell/tests/lifecycle-and-utilities.test.ts +48 -1
- package/src/resources/extensions/bg-shell/utilities.ts +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/gsd-browser-launch-config.test.mjs +40 -1
- package/src/resources/extensions/browser-tools/tests/managed-gsd-browser-tools.test.mjs +136 -0
- package/src/resources/extensions/claude-code-cli/models.ts +9 -0
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +166 -293
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +270 -2
- 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 +40 -121
- package/src/resources/extensions/gsd/auto/custom-verify-retry-store.ts +21 -3
- package/src/resources/extensions/gsd/auto/detect-stuck.ts +32 -9
- package/src/resources/extensions/gsd/auto/dispatch-history.ts +152 -0
- package/src/resources/extensions/gsd/auto/dispatch-key.ts +39 -0
- package/src/resources/extensions/gsd/auto/loop-deps.ts +3 -1
- package/src/resources/extensions/gsd/auto/loop.ts +86 -61
- package/src/resources/extensions/gsd/auto/orchestrator.ts +1023 -98
- package/src/resources/extensions/gsd/auto/phases.ts +108 -28
- package/src/resources/extensions/gsd/auto/run-unit.ts +2 -1
- package/src/resources/extensions/gsd/auto/session.ts +7 -0
- package/src/resources/extensions/gsd/auto-dashboard.ts +18 -4
- package/src/resources/extensions/gsd/auto-direct-dispatch.ts +18 -48
- package/src/resources/extensions/gsd/auto-dispatch.ts +68 -68
- package/src/resources/extensions/gsd/auto-model-selection.ts +49 -12
- package/src/resources/extensions/gsd/auto-post-unit.ts +56 -16
- package/src/resources/extensions/gsd/auto-prompts.ts +338 -44
- package/src/resources/extensions/gsd/auto-recovery.ts +50 -50
- package/src/resources/extensions/gsd/auto-runtime-state.ts +30 -0
- package/src/resources/extensions/gsd/auto-start.ts +41 -49
- package/src/resources/extensions/gsd/auto-timers.ts +16 -2
- package/src/resources/extensions/gsd/auto-tool-tracking.ts +59 -0
- package/src/resources/extensions/gsd/auto-unit-closeout.ts +83 -28
- package/src/resources/extensions/gsd/auto-unit-tool-scope.ts +43 -38
- package/src/resources/extensions/gsd/auto-verification.ts +33 -36
- package/src/resources/extensions/gsd/auto-worktree-repair.ts +13 -2
- package/src/resources/extensions/gsd/auto-worktree.ts +83 -391
- package/src/resources/extensions/gsd/auto.ts +151 -524
- package/src/resources/extensions/gsd/blocked-models.ts +49 -0
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +37 -10
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +29 -37
- package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +43 -49
- package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +2 -2
- 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 +379 -177
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +452 -58
- package/src/resources/extensions/gsd/branch-patterns.ts +3 -0
- package/src/resources/extensions/gsd/browser-daemon-auto-prep.ts +108 -0
- package/src/resources/extensions/gsd/browser-evidence.ts +18 -2
- package/src/resources/extensions/gsd/captures.ts +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/closeout-wizard.ts +102 -0
- 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/context.ts +16 -2
- package/src/resources/extensions/gsd/commands/handlers/auto.ts +3 -0
- package/src/resources/extensions/gsd/commands-handlers.ts +64 -3
- 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/consent-question.ts +431 -0
- package/src/resources/extensions/gsd/consent-verdict.ts +86 -0
- package/src/resources/extensions/gsd/constants.ts +0 -3
- package/src/resources/extensions/gsd/crash-recovery.ts +13 -11
- package/src/resources/extensions/gsd/db/engine.ts +809 -0
- package/src/resources/extensions/gsd/db/queries.ts +490 -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/debug-logger.ts +11 -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/dispatch-guard.ts +8 -31
- package/src/resources/extensions/gsd/docs/preferences-reference.md +9 -0
- package/src/resources/extensions/gsd/doctor-engine-checks.ts +5 -4
- 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 +5 -22
- package/src/resources/extensions/gsd/doctor-proactive.ts +8 -2
- 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/engine-hook-contract.ts +79 -0
- package/src/resources/extensions/gsd/error-classifier.ts +12 -1
- package/src/resources/extensions/gsd/exec-sandbox.ts +49 -9
- package/src/resources/extensions/gsd/files.ts +33 -12
- 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-command-home.ts +13 -3
- package/src/resources/extensions/gsd/gsd-db.ts +188 -2375
- package/src/resources/extensions/gsd/guidance.ts +217 -0
- package/src/resources/extensions/gsd/guided-flow.ts +118 -589
- package/src/resources/extensions/gsd/guided-unit-completion.ts +275 -0
- package/src/resources/extensions/gsd/markdown-renderer.ts +51 -20
- package/src/resources/extensions/gsd/mcp-filter.ts +11 -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 +121 -28
- 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-reopen-events.ts +3 -6
- 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/native-git-bridge.ts +48 -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/parsers-legacy.ts +16 -4
- 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 +12 -47
- package/src/resources/extensions/gsd/preferences-types.ts +16 -0
- package/src/resources/extensions/gsd/preferences.ts +191 -28
- package/src/resources/extensions/gsd/projection-flush.ts +20 -0
- package/src/resources/extensions/gsd/prompts/complete-slice.md +4 -3
- package/src/resources/extensions/gsd/prompts/discuss.md +6 -7
- package/src/resources/extensions/gsd/prompts/execute-task.md +3 -1
- package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +5 -7
- package/src/resources/extensions/gsd/prompts/guided-discuss-project.md +6 -6
- package/src/resources/extensions/gsd/prompts/guided-discuss-requirements.md +1 -2
- package/src/resources/extensions/gsd/prompts/guided-discuss-slice.md +5 -6
- package/src/resources/extensions/gsd/prompts/plan-milestone.md +3 -1
- package/src/resources/extensions/gsd/prompts/plan-slice.md +4 -3
- package/src/resources/extensions/gsd/prompts/quick-task.md +1 -1
- package/src/resources/extensions/gsd/prompts/reassess-roadmap.md +1 -1
- package/src/resources/extensions/gsd/prompts/refine-slice.md +3 -2
- package/src/resources/extensions/gsd/prompts/replan-slice.md +2 -2
- package/src/resources/extensions/gsd/prompts/research-milestone.md +3 -3
- package/src/resources/extensions/gsd/prompts/research-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/rewrite-docs.md +1 -1
- package/src/resources/extensions/gsd/prompts/run-uat.md +7 -5
- package/src/resources/extensions/gsd/prompts/system.md +6 -3
- package/src/resources/extensions/gsd/prompts/triage-captures.md +1 -1
- package/src/resources/extensions/gsd/prompts/validate-milestone.md +6 -4
- 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/reactive-graph.ts +11 -1
- package/src/resources/extensions/gsd/recovery-classification.ts +47 -88
- package/src/resources/extensions/gsd/roadmap-slices.ts +36 -5
- package/src/resources/extensions/gsd/safety/destructive-confirmation.ts +134 -0
- 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/schemas/parsers.ts +6 -1
- package/src/resources/extensions/gsd/session-lock.ts +1 -1
- package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +6 -2
- package/src/resources/extensions/gsd/state-reconciliation/drift/artifact-db.ts +31 -10
- package/src/resources/extensions/gsd/state-transition-matrix.ts +42 -0
- package/src/resources/extensions/gsd/state.ts +24 -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/artifact-db-drift-memo.test.ts +66 -0
- 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-dispatch-baseline-harness.test.ts +53 -0
- 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-model-selection.test.ts +91 -0
- package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +894 -858
- package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +41 -11
- package/src/resources/extensions/gsd/tests/auto-post-unit-evidence-crossref-4909.test.ts +46 -0
- package/src/resources/extensions/gsd/tests/auto-remote-session-lock-cleanup.test.ts +65 -3
- 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/blocked-models.test.ts +19 -0
- package/src/resources/extensions/gsd/tests/browser-automation-contract-fixture.ts +39 -0
- package/src/resources/extensions/gsd/tests/browser-contract.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/browser-daemon-auto-prep.test.ts +144 -0
- package/src/resources/extensions/gsd/tests/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/complete-slice-verification-gate.test.ts +42 -0
- package/src/resources/extensions/gsd/tests/consent-question.test.ts +351 -0
- package/src/resources/extensions/gsd/tests/custom-verify-retry-store.test.ts +67 -0
- package/src/resources/extensions/gsd/tests/debug-logger.test.ts +15 -0
- package/src/resources/extensions/gsd/tests/deep-project-auto-loop.test.ts +10 -10
- package/src/resources/extensions/gsd/tests/destructive-confirmation.test.ts +303 -0
- package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +34 -3
- package/src/resources/extensions/gsd/tests/dispatch-history.test.ts +273 -0
- package/src/resources/extensions/gsd/tests/dispatch-run-uat-browser-tools.test.ts +89 -0
- package/src/resources/extensions/gsd/tests/doctor-git-checks-terminal.test.ts +73 -0
- package/src/resources/extensions/gsd/tests/doctor-scope-db-unavailable.test.ts +18 -0
- package/src/resources/extensions/gsd/tests/dynamic-bash-no-cap.test.ts +132 -0
- package/src/resources/extensions/gsd/tests/engine-hook-contract.test.ts +148 -0
- package/src/resources/extensions/gsd/tests/evidence-xref-gsd-exec.test.ts +157 -0
- package/src/resources/extensions/gsd/tests/exec-graceful-kill.test.ts +193 -0
- package/src/resources/extensions/gsd/tests/exec-tool.test.ts +29 -1
- package/src/resources/extensions/gsd/tests/execute-summary-save-empty-project.test.ts +64 -1
- 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/gsd-command-home.test.ts +120 -0
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +27 -0
- package/src/resources/extensions/gsd/tests/guidance.test.ts +148 -0
- package/src/resources/extensions/gsd/tests/guided-dispatch-root.test.ts +2 -6
- 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/integration/merge-strategy-regular.test.ts +157 -0
- package/src/resources/extensions/gsd/tests/integration/run-uat.test.ts +199 -0
- package/src/resources/extensions/gsd/tests/markdown-renderer-parse-cache.test.ts +75 -0
- package/src/resources/extensions/gsd/tests/mcp-project-config.test.ts +3 -1
- 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 +120 -4
- 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/model-unittype-mapping.test.ts +32 -1
- package/src/resources/extensions/gsd/tests/native-merge-regular.test.ts +139 -0
- package/src/resources/extensions/gsd/tests/notification-store.test.ts +32 -0
- package/src/resources/extensions/gsd/tests/oauth-api-model-routing.test.ts +167 -0
- package/src/resources/extensions/gsd/tests/orchestrator-legacy-parity.test.ts +127 -0
- package/src/resources/extensions/gsd/tests/parallel-research-dispatch.test.ts +18 -0
- package/src/resources/extensions/gsd/tests/parse-project-milestone-bridge.test.ts +77 -0
- package/src/resources/extensions/gsd/tests/parsers-legacy-importers.test.ts +138 -0
- package/src/resources/extensions/gsd/tests/phases-terminal-complete-idempotent.test.ts +242 -0
- package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +45 -0
- package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +6 -2
- package/src/resources/extensions/gsd/tests/planning-crossval.test.ts +45 -0
- package/src/resources/extensions/gsd/tests/post-exec-retry-bypass.test.ts +63 -2
- package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +193 -1
- package/src/resources/extensions/gsd/tests/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 +75 -2
- package/src/resources/extensions/gsd/tests/prompt-db.test.ts +124 -6
- package/src/resources/extensions/gsd/tests/provider-error-guidance.test.ts +3 -3
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +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/research-milestone-composer.test.ts +65 -0
- package/src/resources/extensions/gsd/tests/roadmap-parse-regression.test.ts +40 -0
- package/src/resources/extensions/gsd/tests/roadmap-slices.test.ts +68 -0
- package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +44 -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 +21 -6
- 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 +114 -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/tool-unavailable-retry.test.ts +33 -0
- package/src/resources/extensions/gsd/tests/transport-gate-double-complete.test.ts +139 -0
- package/src/resources/extensions/gsd/tests/uat-policy.test.ts +112 -6
- package/src/resources/extensions/gsd/tests/unit-closeout.test.ts +209 -0
- package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +114 -2
- package/src/resources/extensions/gsd/tests/unit-registry.test.ts +163 -0
- package/src/resources/extensions/gsd/tests/uok-audit-unified.test.ts +8 -0
- package/src/resources/extensions/gsd/tests/validate-milestone-stuck-guard.test.ts +39 -0
- package/src/resources/extensions/gsd/tests/verification-verdict.test.ts +2 -0
- package/src/resources/extensions/gsd/tests/web-app-uat.test.ts +193 -0
- package/src/resources/extensions/gsd/tests/workflow-events.test.ts +19 -0
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +128 -11
- package/src/resources/extensions/gsd/tests/workflow-reconcile.test.ts +20 -0
- package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +275 -40
- 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 +27 -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-planning-unit.test.ts +15 -3
- package/src/resources/extensions/gsd/tests/write-gate-seam.test.ts +358 -0
- package/src/resources/extensions/gsd/tests/write-gate.test.ts +188 -1
- package/src/resources/extensions/gsd/tool-contract.ts +124 -11
- package/src/resources/extensions/gsd/tool-presentation-plan.ts +18 -35
- 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-milestone.ts +3 -2
- package/src/resources/extensions/gsd/tools/complete-slice.ts +45 -70
- package/src/resources/extensions/gsd/tools/complete-task.ts +3 -2
- package/src/resources/extensions/gsd/tools/exec-tool.ts +9 -8
- package/src/resources/extensions/gsd/tools/plan-milestone.ts +19 -160
- package/src/resources/extensions/gsd/tools/plan-slice.ts +14 -8
- package/src/resources/extensions/gsd/tools/plan-task.ts +2 -2
- package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +45 -2
- package/src/resources/extensions/gsd/tools/reopen-milestone.ts +13 -40
- package/src/resources/extensions/gsd/tools/reopen-slice.ts +16 -44
- package/src/resources/extensions/gsd/tools/reopen-task.ts +2 -2
- package/src/resources/extensions/gsd/tools/replan-slice.ts +2 -2
- package/src/resources/extensions/gsd/tools/skip-slice.ts +18 -44
- package/src/resources/extensions/gsd/tools/validate-milestone.ts +25 -84
- package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +264 -23
- package/src/resources/extensions/gsd/uat-policy.ts +80 -25
- 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 +196 -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/validation-block-guard.ts +2 -0
- package/src/resources/extensions/gsd/verdict-parser.ts +1 -1
- package/src/resources/extensions/gsd/verification-verdict.ts +4 -2
- package/src/resources/extensions/gsd/web-app-uat.ts +144 -0
- package/src/resources/extensions/gsd/workflow-event-ledger.ts +131 -0
- package/src/resources/extensions/gsd/workflow-event-vocabulary.ts +59 -0
- package/src/resources/extensions/gsd/workflow-events.ts +12 -20
- package/src/resources/extensions/gsd/workflow-mcp.ts +22 -110
- package/src/resources/extensions/gsd/workflow-reconcile.ts +32 -65
- 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 +20 -25
- 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 +141 -6
- package/src/resources/extensions/shared/interview-ui.ts +15 -2
- package/src/resources/shared/claude-runtime-floor.ts +248 -0
- package/src/resources/shared/gsd-browser-path-sync.ts +273 -0
- package/src/resources/shared/package-manager-detection.ts +1 -1
- package/src/resources/shared/package.json +3 -0
- package/src/resources/skills/create-skill/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/resources/extensions/gsd/user-input-boundary.js +0 -157
- package/dist/web/standalone/.next/server/chunks/678.js +0 -2
- 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/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.d.ts +0 -21
- package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.d.ts.map +0 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.js +0 -213
- package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.js.map +0 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-density-prototype.d.ts +0 -28
- package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-density-prototype.d.ts.map +0 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-density-prototype.js +0 -249
- package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-density-prototype.js.map +0 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-design-prototype.d.ts +0 -19
- package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-design-prototype.d.ts.map +0 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-design-prototype.js +0 -797
- package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-design-prototype.js.map +0 -1
- package/scripts/ensure-workspace-builds.cjs +0 -129
- package/src/resources/extensions/gsd/tests/user-input-boundary.test.ts +0 -26
- package/src/resources/extensions/gsd/user-input-boundary.ts +0 -166
- /package/dist/web/standalone/.next/static/{tJOKQbQRO-9MiFDO8DIDS → T-LTxEw5wir5Lm5T3qEVd}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{tJOKQbQRO-9MiFDO8DIDS → T-LTxEw5wir5Lm5T3qEVd}/_ssgManifest.js +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** browser-tools — Pi Browser Automation Contract adapter. */
|
|
2
2
|
import { importExtensionModule } from "@gsd/pi-coding-agent";
|
|
3
3
|
import { closeManagedGsdBrowser, registerManagedGsdBrowserTools, warmUpManagedGsdBrowser } from "./engine/managed-gsd-browser.js";
|
|
4
|
-
import {
|
|
4
|
+
import { commitBrowserEngineResolution, resolveAmbientBrowserEngineResolution } from "./engine/selection.js";
|
|
5
5
|
import { setArtifactRootForCwd } from "./state.js";
|
|
6
6
|
import { detectWebApp } from "./web-app-detect.js";
|
|
7
7
|
let legacyRegistrationPromise = null;
|
|
@@ -130,12 +130,56 @@ function withBrowserArtifactCwdScope(pi) {
|
|
|
130
130
|
},
|
|
131
131
|
};
|
|
132
132
|
}
|
|
133
|
-
|
|
134
|
-
|
|
133
|
+
/** Daemon-connect budget when the probe-resolved managed engine is verified at session start. */
|
|
134
|
+
const PROBE_WARMUP_TIMEOUT_MS = 10_000;
|
|
135
|
+
async function registerBrowserTools(pi, ctx) {
|
|
136
|
+
const projectRoot = ctx.cwd || process.cwd();
|
|
137
|
+
const resolution = resolveAmbientBrowserEngineResolution(projectRoot);
|
|
138
|
+
let engine = resolution.engine;
|
|
135
139
|
if (engine === "off")
|
|
136
140
|
return;
|
|
141
|
+
// A probe-resolved managed engine is only a prediction that gsd-browser
|
|
142
|
+
// works — prove it by connecting the daemon before committing the session's
|
|
143
|
+
// tool registrations to it. Connect failure falls back to legacy Playwright
|
|
144
|
+
// (the failure mode that made ADR-024 freeze the old default) and commits
|
|
145
|
+
// the outcome so ambient readers see the engine actually in use. When eager
|
|
146
|
+
// warm-up is disabled the daemon-connect proof cannot run, so the probe
|
|
147
|
+
// default treats the managed engine as unprovable and falls back to legacy
|
|
148
|
+
// rather than registering it unverified. An explicit
|
|
149
|
+
// GSD_BROWSER_ENGINE=gsd-browser override skips the gate and is honored
|
|
150
|
+
// verbatim, matching prior behavior.
|
|
151
|
+
if (engine === "gsd-browser" && resolution.source === "probe" && !registeredEngine) {
|
|
152
|
+
if (isWarmUpDisabled()) {
|
|
153
|
+
engine = commitLegacyFallback(projectRoot, "warm-up disabled; managed engine unverifiable; using legacy Playwright");
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
const warmUp = await warmUpManagedGsdBrowser(ctx, AbortSignal.timeout(PROBE_WARMUP_TIMEOUT_MS));
|
|
157
|
+
if (!warmUp.ok) {
|
|
158
|
+
engine = commitLegacyFallback(projectRoot, `gsd-browser daemon connect failed (${warmUp.error}); using legacy Playwright`);
|
|
159
|
+
if (ctx.hasUI) {
|
|
160
|
+
ctx.ui.notify(`gsd-browser engine unavailable (${warmUp.error}); using Playwright browser tools for this session.`, "warning");
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
else if (warmUp.coverageWarning && ctx.hasUI) {
|
|
164
|
+
ctx.ui.notify(warmUp.coverageWarning, "warning");
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// Browser tool registrations are process-global and cannot be swapped once
|
|
169
|
+
// live. When an earlier session in this process already registered an engine
|
|
170
|
+
// and this project resolved a different one (per-project probe resolution can
|
|
171
|
+
// diverge across projects in a multi-session process), adopt the registered
|
|
172
|
+
// engine rather than throwing — a throw surfaces as "browser-tools failed to
|
|
173
|
+
// load" and leaves this session with no browser tools at all. Commit the
|
|
174
|
+
// adoption so ambient readers (UAT guidance, warm-up) describe the engine
|
|
175
|
+
// actually in use.
|
|
137
176
|
if (registeredEngine && registeredEngine !== engine) {
|
|
138
|
-
|
|
177
|
+
engine = registeredEngine;
|
|
178
|
+
commitBrowserEngineResolution(projectRoot, {
|
|
179
|
+
engine,
|
|
180
|
+
source: "probe",
|
|
181
|
+
reason: `browser tools already registered with ${engine} earlier in this process; adopting it`,
|
|
182
|
+
});
|
|
139
183
|
}
|
|
140
184
|
let registration;
|
|
141
185
|
if (engine === "legacy") {
|
|
@@ -165,27 +209,40 @@ async function registerBrowserTools(pi) {
|
|
|
165
209
|
throw error;
|
|
166
210
|
}
|
|
167
211
|
}
|
|
212
|
+
function commitLegacyFallback(projectRoot, reason) {
|
|
213
|
+
commitBrowserEngineResolution(projectRoot, { engine: "legacy", source: "probe", reason });
|
|
214
|
+
return "legacy";
|
|
215
|
+
}
|
|
168
216
|
function isWarmUpDisabled() {
|
|
169
217
|
const value = process.env.GSD_BROWSER_WARMUP?.trim().toLowerCase();
|
|
170
218
|
return value === "0" || value === "false" || value === "off";
|
|
171
219
|
}
|
|
172
220
|
/**
|
|
173
|
-
* Auto-initialize the managed gsd-browser engine
|
|
174
|
-
*
|
|
175
|
-
*
|
|
221
|
+
* Auto-initialize the managed gsd-browser engine when it was selected via the
|
|
222
|
+
* explicit GSD_BROWSER_ENGINE override, which registers without the
|
|
223
|
+
* daemon-connect gate. Best-effort and non-blocking: warm-up runs in the
|
|
224
|
+
* background and only surfaces a warning if it fails. Probe-resolved sessions
|
|
225
|
+
* already connected (or fell back) during registration, so they are excluded
|
|
226
|
+
* to avoid re-warming and double-notifying.
|
|
176
227
|
*/
|
|
177
228
|
function maybeWarmUpManagedEngine(pi, ctx) {
|
|
178
229
|
if (isWarmUpDisabled())
|
|
179
230
|
return;
|
|
180
|
-
if (resolveBrowserEngineMode() !== "gsd-browser")
|
|
181
|
-
return;
|
|
182
231
|
const projectRoot = ctx.cwd || process.cwd();
|
|
232
|
+
const resolution = resolveAmbientBrowserEngineResolution(projectRoot);
|
|
233
|
+
if (resolution.engine !== "gsd-browser" || resolution.source !== "env")
|
|
234
|
+
return;
|
|
183
235
|
if (!detectWebApp(projectRoot))
|
|
184
236
|
return;
|
|
185
237
|
void warmUpManagedGsdBrowser(ctx).then((result) => {
|
|
186
|
-
if (!
|
|
238
|
+
if (!ctx.hasUI)
|
|
239
|
+
return;
|
|
240
|
+
if (!result.ok) {
|
|
187
241
|
ctx.ui.notify(`gsd-browser auto-init failed: ${result.error}. Browser UAT tools will retry on first use; run /gsd doctor if this persists.`, "warning");
|
|
188
242
|
}
|
|
243
|
+
else if (result.coverageWarning) {
|
|
244
|
+
ctx.ui.notify(result.coverageWarning, "warning");
|
|
245
|
+
}
|
|
189
246
|
});
|
|
190
247
|
}
|
|
191
248
|
async function closeActiveBrowserEngines() {
|
|
@@ -198,14 +255,14 @@ async function closeActiveBrowserEngines() {
|
|
|
198
255
|
export default function (pi) {
|
|
199
256
|
pi.on("session_start", async (_event, ctx) => {
|
|
200
257
|
if (ctx.hasUI) {
|
|
201
|
-
void registerBrowserTools(pi)
|
|
258
|
+
void registerBrowserTools(pi, ctx)
|
|
202
259
|
.then(() => maybeWarmUpManagedEngine(pi, ctx))
|
|
203
260
|
.catch((error) => {
|
|
204
261
|
ctx.ui.notify(`browser-tools failed to load: ${error instanceof Error ? error.message : String(error)}`, "warning");
|
|
205
262
|
});
|
|
206
263
|
return;
|
|
207
264
|
}
|
|
208
|
-
await registerBrowserTools(pi);
|
|
265
|
+
await registerBrowserTools(pi, ctx);
|
|
209
266
|
maybeWarmUpManagedEngine(pi, ctx);
|
|
210
267
|
});
|
|
211
268
|
pi.on("session_shutdown", async () => {
|
|
@@ -37,6 +37,15 @@ export const CLAUDE_CODE_MODELS = [
|
|
|
37
37
|
contextWindow: 1_000_000,
|
|
38
38
|
maxTokens: 128_000,
|
|
39
39
|
},
|
|
40
|
+
{
|
|
41
|
+
id: "claude-fable-5",
|
|
42
|
+
name: "Claude Fable 5 (via Claude Code)",
|
|
43
|
+
reasoning: true,
|
|
44
|
+
input: ["text", "image"],
|
|
45
|
+
cost: ZERO_COST,
|
|
46
|
+
contextWindow: 1_000_000,
|
|
47
|
+
maxTokens: 128_000,
|
|
48
|
+
},
|
|
40
49
|
{
|
|
41
50
|
id: "claude-sonnet-4-6",
|
|
42
51
|
name: "Claude Sonnet 4.6 (via Claude Code)",
|
|
@@ -14,13 +14,20 @@ import { existsSync, readFileSync } from "node:fs";
|
|
|
14
14
|
import { homedir } from "node:os";
|
|
15
15
|
import { createRequire } from "node:module";
|
|
16
16
|
import { dirname, join } from "node:path";
|
|
17
|
-
import {
|
|
17
|
+
import { ZERO_USAGE, mapUsage } from "./partial-builder.js";
|
|
18
|
+
import { attachExternalResultsToToolBlocks, buildFinalAssistantContent, extractToolResultsFromSdkUserMessage, handleClaudeCodePartialStreamEvent, } from "./turn-assembler.js";
|
|
18
19
|
import { buildWorkflowMcpServers, getRequiredWorkflowToolsForAutoUnit, resolveWorkflowMcpProjectRoot, } from "../gsd/workflow-mcp.js";
|
|
20
|
+
import { resolveWorkflowQuestionToolSurface } from "../gsd/question-transport.js";
|
|
19
21
|
import { buildProjectGsdMcpServers, ensureProjectWorkflowMcpConfig } from "../gsd/mcp-project-config.js";
|
|
20
22
|
import { loadProjectGSDPreferences } from "../gsd/preferences.js";
|
|
21
|
-
import {
|
|
23
|
+
import { markToolStart, markToolEnd } from "../gsd/auto.js";
|
|
24
|
+
import { markInteractiveElicitationStart, markInteractiveElicitationEnd, } from "../gsd/auto-tool-tracking.js";
|
|
25
|
+
import { discoverBrowserMcpServerName, discoverMcpServers, discoverMcpServerNames, discoverUserMcpServerNames, discoverWorkflowMcpServerName, computeMcpDisallowedTools, } from "../gsd/mcp-filter.js";
|
|
22
26
|
import { RUN_UAT_CLAUDE_NATIVE_TOOL_NAMES, RUN_UAT_FORBIDDEN_TOOL_NAMES, RUN_UAT_WORKFLOW_TOOL_NAMES, resolveToolPresentationPlan } from "../gsd/tool-presentation-plan.js";
|
|
27
|
+
import { getToolSurfaceReadinessError } from "../gsd/tool-surface-readiness.js";
|
|
28
|
+
import { hasBrowserContractPrefix } from "../shared/browser-contract.js";
|
|
23
29
|
import { showInterviewRound } from "../shared/tui.js";
|
|
30
|
+
export { buildFinalAssistantContent, extractToolResultsFromSdkUserMessage, handleClaudeCodePartialStreamEvent, mergePendingToolCalls, } from "./turn-assembler.js";
|
|
24
31
|
export function serverToolUseToToolCallLike(block) {
|
|
25
32
|
const argumentsValue = block.input && typeof block.input === "object" && !Array.isArray(block.input)
|
|
26
33
|
? block.input
|
|
@@ -1078,7 +1085,26 @@ export function createClaudeCodeCanUseToolHandler(ui) {
|
|
|
1078
1085
|
// ---------------------------------------------------------------------------
|
|
1079
1086
|
// Elicitation handler
|
|
1080
1087
|
// ---------------------------------------------------------------------------
|
|
1081
|
-
/**
|
|
1088
|
+
/**
|
|
1089
|
+
* Create an SDK elicitation handler that routes requests through the extension UI dialogs, or undefined if no UI is available.
|
|
1090
|
+
*
|
|
1091
|
+
* For structured (AskUserQuestion) elicitations, the interview round's result
|
|
1092
|
+
* disambiguates two cases that must not be conflated: an `undefined` result
|
|
1093
|
+
* means the custom UI is unavailable, so we fall back to the simpler `select`
|
|
1094
|
+
* dialogs; an empty-answers result means the user dismissed the question, which
|
|
1095
|
+
* is treated as a clean cancel. Falling back to dialogs on dismissal would
|
|
1096
|
+
* re-ask the same questions (the duplicate-question bug).
|
|
1097
|
+
*/
|
|
1098
|
+
/**
|
|
1099
|
+
* Monotonic counter so concurrent/sequential elicitations resolved within the
|
|
1100
|
+
* same millisecond get distinct synthetic in-flight-tool ids (the `cc-elicit-*`
|
|
1101
|
+
* namespace never collides with real MCP toolCallIds).
|
|
1102
|
+
*/
|
|
1103
|
+
let _elicitationSeq = 0;
|
|
1104
|
+
function nextElicitationSeq() {
|
|
1105
|
+
_elicitationSeq = (_elicitationSeq + 1) % Number.MAX_SAFE_INTEGER;
|
|
1106
|
+
return _elicitationSeq;
|
|
1107
|
+
}
|
|
1082
1108
|
export function createClaudeCodeElicitationHandler(ui) {
|
|
1083
1109
|
if (!ui)
|
|
1084
1110
|
return undefined;
|
|
@@ -1091,18 +1117,64 @@ export function createClaudeCodeElicitationHandler(ui) {
|
|
|
1091
1117
|
const headlessAnswer = answerElicitationFromHeadlessAnswers(questions, loadHeadlessAnswers());
|
|
1092
1118
|
if (headlessAnswer)
|
|
1093
1119
|
return headlessAnswer;
|
|
1094
|
-
|
|
1095
|
-
|
|
1120
|
+
// The SDK elicitation blocks waiting for human input, but it is not an
|
|
1121
|
+
// MCP tool dispatch, so markToolStart/markToolEnd are never called for
|
|
1122
|
+
// it. Without this the soft/context/idle/hard watchdogs see zero
|
|
1123
|
+
// in-flight tools and re-dispatch (and ultimately abort) the agent
|
|
1124
|
+
// turn hosting this elicitation, tearing the question down (#2676 /
|
|
1125
|
+
// claude-code-cli self-cancel loop). Bracketing the human wait with
|
|
1126
|
+
// the s.active-gated interactive-tool guard makes it visible to
|
|
1127
|
+
// hasInteractiveToolInFlight()/getInFlightToolCount() so those
|
|
1128
|
+
// watchdogs exempt it. No-op outside auto-mode (wrapper self-gates).
|
|
1129
|
+
//
|
|
1130
|
+
// markInteractiveElicitationStart/End is a SEPARATE, ungated signal that
|
|
1131
|
+
// is observable in FOREGROUND (where the s.active-gated markToolStart is a
|
|
1132
|
+
// no-op). The foreground approval-gate pause path (register-hooks
|
|
1133
|
+
// message_update) consults isInteractiveElicitationInFlight() and bails so
|
|
1134
|
+
// it does not tear down the very elicitation that IS the human boundary
|
|
1135
|
+
// (#cc-elicitation-self-cancel). It clears in the finally on every exit.
|
|
1136
|
+
const elicId = "cc-elicit-" + (request.id ?? `${Date.now()}-${nextElicitationSeq()}`);
|
|
1137
|
+
markInteractiveElicitationStart();
|
|
1138
|
+
markToolStart(elicId, "ask_user_questions");
|
|
1139
|
+
try {
|
|
1140
|
+
const interviewResult = await showInterviewRound(questions, { signal, overlay: true }, { ui }).catch(() => undefined);
|
|
1141
|
+
if (interviewResult === undefined) {
|
|
1142
|
+
// `await` so the dialog human-wait stays inside try/finally and the
|
|
1143
|
+
// in-flight guard is held until the dialog resolves. Without it,
|
|
1144
|
+
// `finally` runs the moment the promise is created and the fallback
|
|
1145
|
+
// wait runs with zero in-flight tools — reintroducing the
|
|
1146
|
+
// self-cancel on this path (Bugbot #1c00624d).
|
|
1147
|
+
return await promptElicitationWithDialogs(request, questions, ui, signal);
|
|
1148
|
+
}
|
|
1149
|
+
if (Object.keys(interviewResult.answers).length === 0) {
|
|
1150
|
+
// A system/host teardown (compaction, session_switch, true
|
|
1151
|
+
// interrupt) that aborted the signal mid-wait sets `interrupted`.
|
|
1152
|
+
// Surface that as a non-affirmative `decline` so it is not
|
|
1153
|
+
// laundered into a clean user-declined `cancel` the model re-asks
|
|
1154
|
+
// against. A genuine user dismissal leaves `interrupted` falsy and
|
|
1155
|
+
// keeps the prior `cancel` semantics.
|
|
1156
|
+
return interviewResult.interrupted ? { action: "decline" } : { action: "cancel" };
|
|
1157
|
+
}
|
|
1096
1158
|
return {
|
|
1097
1159
|
action: "accept",
|
|
1098
1160
|
content: roundResultToElicitationContent(questions, interviewResult),
|
|
1099
1161
|
};
|
|
1100
1162
|
}
|
|
1101
|
-
|
|
1163
|
+
finally {
|
|
1164
|
+
markToolEnd(elicId);
|
|
1165
|
+
markInteractiveElicitationEnd();
|
|
1166
|
+
}
|
|
1102
1167
|
}
|
|
1103
1168
|
const textFields = parseTextInputElicitation(request);
|
|
1104
1169
|
if (textFields) {
|
|
1105
|
-
|
|
1170
|
+
const elicId = "cc-elicit-" + (request.id ?? `${Date.now()}-${nextElicitationSeq()}`);
|
|
1171
|
+
markToolStart(elicId, "secure_env_collect");
|
|
1172
|
+
try {
|
|
1173
|
+
return await promptTextInputElicitation(request, textFields, ui, signal);
|
|
1174
|
+
}
|
|
1175
|
+
finally {
|
|
1176
|
+
markToolEnd(elicId);
|
|
1177
|
+
}
|
|
1106
1178
|
}
|
|
1107
1179
|
return { action: "decline" };
|
|
1108
1180
|
};
|
|
@@ -1172,6 +1244,8 @@ function modelSupportsAdaptiveThinking(modelId) {
|
|
|
1172
1244
|
|| modelId.includes("opus-4.7")
|
|
1173
1245
|
|| modelId.includes("opus-4-8")
|
|
1174
1246
|
|| modelId.includes("opus-4.8")
|
|
1247
|
+
|| modelId.includes("fable-5")
|
|
1248
|
+
|| modelId.includes("fable.5")
|
|
1175
1249
|
|| modelId.includes("sonnet-4-6")
|
|
1176
1250
|
|| modelId.includes("sonnet-4.6")
|
|
1177
1251
|
|| modelId.includes("sonnet-4-7")
|
|
@@ -1193,7 +1267,9 @@ function mapThinkingLevelToAnthropicEffort(level, modelId) {
|
|
|
1193
1267
|
if (modelId.includes("opus-4-7")
|
|
1194
1268
|
|| modelId.includes("opus-4.7")
|
|
1195
1269
|
|| modelId.includes("opus-4-8")
|
|
1196
|
-
|| modelId.includes("opus-4.8")
|
|
1270
|
+
|| modelId.includes("opus-4.8")
|
|
1271
|
+
|| modelId.includes("fable-5")
|
|
1272
|
+
|| modelId.includes("fable.5"))
|
|
1197
1273
|
return "xhigh";
|
|
1198
1274
|
if (modelId.includes("opus-4-6") || modelId.includes("opus-4.6"))
|
|
1199
1275
|
return "max";
|
|
@@ -1215,7 +1291,7 @@ function browserMcpServerNameFromAllowedTools(allowedTools) {
|
|
|
1215
1291
|
const parsed = parseAllowedMcpToolName(toolName);
|
|
1216
1292
|
if (!parsed)
|
|
1217
1293
|
continue;
|
|
1218
|
-
if (parsed.server === "gsd-browser" || parsed.tool
|
|
1294
|
+
if (parsed.server === "gsd-browser" || hasBrowserContractPrefix(parsed.tool)) {
|
|
1219
1295
|
return parsed.server;
|
|
1220
1296
|
}
|
|
1221
1297
|
}
|
|
@@ -1229,7 +1305,7 @@ function workflowMcpServerNameFromAllowedTools(allowedTools) {
|
|
|
1229
1305
|
if (typeof toolName !== "string")
|
|
1230
1306
|
continue;
|
|
1231
1307
|
const parsed = parseAllowedMcpToolName(toolName);
|
|
1232
|
-
if (!parsed || parsed.server === browserServerName || parsed.tool
|
|
1308
|
+
if (!parsed || parsed.server === browserServerName || hasBrowserContractPrefix(parsed.tool))
|
|
1233
1309
|
continue;
|
|
1234
1310
|
return parsed.server;
|
|
1235
1311
|
}
|
|
@@ -1341,14 +1417,22 @@ export function buildSdkOptions(modelId, prompt, overrides, extraOptions = {}) {
|
|
|
1341
1417
|
const projectBrowserServerName = discoverBrowserMcpServerName(projectRoot);
|
|
1342
1418
|
const workflowServerName = projectWorkflowServerName ?? injectedWorkflowServerName;
|
|
1343
1419
|
const browserServerName = projectBrowserServerName ?? injectedBrowserServerName;
|
|
1344
|
-
//
|
|
1345
|
-
//
|
|
1346
|
-
//
|
|
1347
|
-
//
|
|
1420
|
+
// Non-strict (non-phase) sessions load ~/.claude/settings.json via settingSources
|
|
1421
|
+
// including "user". If the user declared the same server names there, injecting them
|
|
1422
|
+
// again via mcpServers causes duplicate registration and leaves MCP tools unavailable.
|
|
1423
|
+
// Strict (gsdPhase) sessions set settingSources=[] so user settings are not loaded.
|
|
1424
|
+
const userDiscovered = !gsdPhase ? discoverUserMcpServerNames() : [];
|
|
1425
|
+
const allDiscovered = discovered.length > 0 || userDiscovered.length > 0
|
|
1426
|
+
? [...discovered, ...userDiscovered]
|
|
1427
|
+
: discovered;
|
|
1428
|
+
// If a default GSD MCP server is already declared in project config or in the user's
|
|
1429
|
+
// ~/.claude/settings.json (when that file will be loaded), do not inject it again via
|
|
1430
|
+
// mcpServers. Passing the same server name from two sources causes a duplicate
|
|
1431
|
+
// registration conflict that prevents the MCP server from loading (tools become unavailable).
|
|
1348
1432
|
const workflowAlreadyInProject = projectWorkflowServerName !== undefined
|
|
1349
|
-
|| (injectedWorkflowServerName !== undefined &&
|
|
1433
|
+
|| (injectedWorkflowServerName !== undefined && allDiscovered.includes(injectedWorkflowServerName));
|
|
1350
1434
|
const browserAlreadyInProject = projectBrowserServerName !== undefined
|
|
1351
|
-
|| (injectedBrowserServerName !== undefined &&
|
|
1435
|
+
|| (injectedBrowserServerName !== undefined && allDiscovered.includes(injectedBrowserServerName));
|
|
1352
1436
|
const mcpServersToInject = { ...defaultMcpServers.servers };
|
|
1353
1437
|
if (workflowAlreadyInProject && injectedWorkflowServerName)
|
|
1354
1438
|
delete mcpServersToInject[injectedWorkflowServerName];
|
|
@@ -1405,10 +1489,17 @@ export function buildSdkOptions(modelId, prompt, overrides, extraOptions = {}) {
|
|
|
1405
1489
|
const sdkMcpServers = inlinePhaseMcpServers ?? filteredMcpServers;
|
|
1406
1490
|
const strictMcpConfig = !!inlinePhaseMcpServers;
|
|
1407
1491
|
// Strict phase configs inline the exact MCP servers GSD needs. Loading
|
|
1408
|
-
//
|
|
1492
|
+
// Claude Code settings at the same time can duplicate those servers and
|
|
1409
1493
|
// leave allowed mcp__... tools with no registered backing tool.
|
|
1410
|
-
const settingSources = strictMcpConfig ? [] : ["project", "local"];
|
|
1494
|
+
const settingSources = strictMcpConfig ? [] : ["user", "project", "local"];
|
|
1411
1495
|
const exactWorkflowMcpTools = resolveExactWorkflowMcpToolsForPhase(gsdPhase, workflowServerName, workflowExplicitlyBlocked);
|
|
1496
|
+
const questionToolSurface = resolveWorkflowQuestionToolSurface({
|
|
1497
|
+
workflowServerName,
|
|
1498
|
+
workflowExplicitlyBlocked,
|
|
1499
|
+
workflowMcpTools,
|
|
1500
|
+
exactWorkflowMcpTools,
|
|
1501
|
+
env: process.env,
|
|
1502
|
+
});
|
|
1412
1503
|
const runUatDisallowedTools = gsdPhase === "run-uat" && workflowServerName
|
|
1413
1504
|
? [
|
|
1414
1505
|
...RUN_UAT_FORBIDDEN_TOOL_NAMES.filter((toolName) => !toolName.startsWith("mcp__")),
|
|
@@ -1422,6 +1513,7 @@ export function buildSdkOptions(modelId, prompt, overrides, extraOptions = {}) {
|
|
|
1422
1513
|
const disallowedTools = [...new Set([
|
|
1423
1514
|
"ToolSearch",
|
|
1424
1515
|
...(workflowMcpTools.length > 0 || exactWorkflowMcpTools.length > 0 ? ["AskUserQuestion"] : []),
|
|
1516
|
+
...questionToolSurface.disallowedTools,
|
|
1425
1517
|
...runUatDisallowedTools,
|
|
1426
1518
|
...extraDisallowedTools,
|
|
1427
1519
|
])];
|
|
@@ -1478,234 +1570,14 @@ export function buildSdkOptions(modelId, prompt, overrides, extraOptions = {}) {
|
|
|
1478
1570
|
|| modelId.includes("opus-4-7")
|
|
1479
1571
|
|| modelId.includes("opus-4.7")
|
|
1480
1572
|
|| modelId.includes("opus-4-8")
|
|
1481
|
-
|| modelId.includes("opus-4.8")
|
|
1573
|
+
|| modelId.includes("opus-4.8")
|
|
1574
|
+
|| modelId.includes("fable-5")
|
|
1575
|
+
|| modelId.includes("fable.5")) ? ["context-1m-2025-08-07"] : [],
|
|
1482
1576
|
...(thinkingConfig ?? {}),
|
|
1483
1577
|
...(effort ? { effort } : {}),
|
|
1484
1578
|
...sdkExtraOptions,
|
|
1485
1579
|
};
|
|
1486
1580
|
}
|
|
1487
|
-
/** Normalise heterogeneous SDK tool-result content (string, array, or object) into a uniform `ExternalToolResultContentBlock[]`. */
|
|
1488
|
-
function normalizeToolResultContent(content) {
|
|
1489
|
-
if (typeof content === "string") {
|
|
1490
|
-
return [{ type: "text", text: content }];
|
|
1491
|
-
}
|
|
1492
|
-
if (!Array.isArray(content)) {
|
|
1493
|
-
if (content == null)
|
|
1494
|
-
return [{ type: "text", text: "" }];
|
|
1495
|
-
return [{ type: "text", text: JSON.stringify(content) }];
|
|
1496
|
-
}
|
|
1497
|
-
const blocks = [];
|
|
1498
|
-
for (const item of content) {
|
|
1499
|
-
if (typeof item === "string") {
|
|
1500
|
-
blocks.push({ type: "text", text: item });
|
|
1501
|
-
continue;
|
|
1502
|
-
}
|
|
1503
|
-
if (!item || typeof item !== "object") {
|
|
1504
|
-
blocks.push({ type: "text", text: String(item) });
|
|
1505
|
-
continue;
|
|
1506
|
-
}
|
|
1507
|
-
const block = item;
|
|
1508
|
-
if (block.type === "text") {
|
|
1509
|
-
blocks.push({ type: "text", text: typeof block.text === "string" ? block.text : "" });
|
|
1510
|
-
continue;
|
|
1511
|
-
}
|
|
1512
|
-
if (block.type === "image"
|
|
1513
|
-
&& typeof block.data === "string"
|
|
1514
|
-
&& typeof block.mimeType === "string") {
|
|
1515
|
-
blocks.push({ type: "image", data: block.data, mimeType: block.mimeType });
|
|
1516
|
-
continue;
|
|
1517
|
-
}
|
|
1518
|
-
blocks.push({ type: "text", text: JSON.stringify(block) });
|
|
1519
|
-
}
|
|
1520
|
-
return blocks.length > 0 ? blocks : [{ type: "text", text: "" }];
|
|
1521
|
-
}
|
|
1522
|
-
/**
|
|
1523
|
-
* Extract a `details` payload from an MCP tool-result block.
|
|
1524
|
-
*
|
|
1525
|
-
* MCP's `CallToolResult` carries structured data in `structuredContent` — the
|
|
1526
|
-
* protocol's supported channel for non-text payloads. Claude Code's synthetic
|
|
1527
|
-
* user message may surface that field in one of two shapes depending on SDK
|
|
1528
|
-
* version: as a sibling on the `mcp_tool_result` block itself, or as a
|
|
1529
|
-
* dedicated content sub-block with `type: "structuredContent"`. Snake-case
|
|
1530
|
-
* (`structured_content`) is accepted defensively in case a transport hop
|
|
1531
|
-
* rewrites casing. All other shapes fall back to an empty object so callers
|
|
1532
|
-
* can rely on `details` being present.
|
|
1533
|
-
*/
|
|
1534
|
-
function extractStructuredDetailsFromBlock(block) {
|
|
1535
|
-
const sibling = block.structuredContent ?? block.structured_content;
|
|
1536
|
-
if (sibling && typeof sibling === "object" && !Array.isArray(sibling)) {
|
|
1537
|
-
return sibling;
|
|
1538
|
-
}
|
|
1539
|
-
if (Array.isArray(block.content)) {
|
|
1540
|
-
for (const item of block.content) {
|
|
1541
|
-
if (!item || typeof item !== "object")
|
|
1542
|
-
continue;
|
|
1543
|
-
const sub = item;
|
|
1544
|
-
if (sub.type !== "structuredContent" && sub.type !== "structured_content")
|
|
1545
|
-
continue;
|
|
1546
|
-
const payload = sub.structuredContent ?? sub.structured_content ?? sub.data ?? sub.value;
|
|
1547
|
-
if (payload && typeof payload === "object" && !Array.isArray(payload)) {
|
|
1548
|
-
return payload;
|
|
1549
|
-
}
|
|
1550
|
-
}
|
|
1551
|
-
}
|
|
1552
|
-
// Return undefined (not {}) when no structured payload is present, matching
|
|
1553
|
-
// the pre-#4477 contract where `details` was nullable. An empty-object
|
|
1554
|
-
// sentinel is truthy and breaks downstream consumers that gate on
|
|
1555
|
-
// `if (details)`. `undefined` matches the type of the field these results
|
|
1556
|
-
// flow into (`Record<string, unknown> | undefined`).
|
|
1557
|
-
return undefined;
|
|
1558
|
-
}
|
|
1559
|
-
/**
|
|
1560
|
-
* True for items that are MCP `structuredContent` pseudo-blocks living inside
|
|
1561
|
-
* a tool-result `content[]` array. These blocks carry the structured payload
|
|
1562
|
-
* (extracted separately by `extractStructuredDetailsFromBlock`) and must NOT
|
|
1563
|
-
* leak into the visible content rendered to the user — otherwise the renderer
|
|
1564
|
-
* stringifies the JSON pseudo-block and shows it next to the actual tool
|
|
1565
|
-
* output. See PR #4477 review (post-fix-round).
|
|
1566
|
-
*/
|
|
1567
|
-
function isStructuredContentPseudoBlock(item) {
|
|
1568
|
-
if (!item || typeof item !== "object")
|
|
1569
|
-
return false;
|
|
1570
|
-
const type = item.type;
|
|
1571
|
-
return type === "structuredContent" || type === "structured_content";
|
|
1572
|
-
}
|
|
1573
|
-
/**
|
|
1574
|
-
* Strip `structuredContent` pseudo-blocks from a tool-result content array
|
|
1575
|
-
* before normalization. The structured payload is extracted via the sibling
|
|
1576
|
-
* `structuredContent` field (or a dedicated extractor pass on the raw block);
|
|
1577
|
-
* the visible content path must not include the pseudo-block itself.
|
|
1578
|
-
*/
|
|
1579
|
-
function stripStructuredContentPseudoBlocks(content) {
|
|
1580
|
-
if (!Array.isArray(content))
|
|
1581
|
-
return content;
|
|
1582
|
-
return content.filter((item) => !isStructuredContentPseudoBlock(item));
|
|
1583
|
-
}
|
|
1584
|
-
/** Extract tool result payloads from an SDK synthetic user message, keyed by tool-use ID. */
|
|
1585
|
-
export function extractToolResultsFromSdkUserMessage(message) {
|
|
1586
|
-
const extracted = [];
|
|
1587
|
-
const seen = new Set();
|
|
1588
|
-
const rawMessage = message.message;
|
|
1589
|
-
const content = Array.isArray(rawMessage?.content) ? rawMessage.content : [];
|
|
1590
|
-
for (const item of content) {
|
|
1591
|
-
if (!item || typeof item !== "object")
|
|
1592
|
-
continue;
|
|
1593
|
-
const block = item;
|
|
1594
|
-
const type = typeof block.type === "string" ? block.type : "";
|
|
1595
|
-
if (type !== "tool_result" && type !== "mcp_tool_result")
|
|
1596
|
-
continue;
|
|
1597
|
-
const toolUseId = typeof block.tool_use_id === "string" ? block.tool_use_id : "";
|
|
1598
|
-
if (!toolUseId || seen.has(toolUseId))
|
|
1599
|
-
continue;
|
|
1600
|
-
seen.add(toolUseId);
|
|
1601
|
-
extracted.push({
|
|
1602
|
-
toolUseId,
|
|
1603
|
-
result: {
|
|
1604
|
-
content: normalizeToolResultContent(stripStructuredContentPseudoBlocks(block.content)),
|
|
1605
|
-
details: extractStructuredDetailsFromBlock(block),
|
|
1606
|
-
isError: block.is_error === true,
|
|
1607
|
-
},
|
|
1608
|
-
});
|
|
1609
|
-
}
|
|
1610
|
-
if (extracted.length === 0) {
|
|
1611
|
-
const fallback = message.tool_use_result;
|
|
1612
|
-
if (fallback && typeof fallback === "object") {
|
|
1613
|
-
const toolResult = fallback;
|
|
1614
|
-
const toolUseId = typeof toolResult.tool_use_id === "string" ? toolResult.tool_use_id : "";
|
|
1615
|
-
if (toolUseId) {
|
|
1616
|
-
extracted.push({
|
|
1617
|
-
toolUseId,
|
|
1618
|
-
result: {
|
|
1619
|
-
content: normalizeToolResultContent(stripStructuredContentPseudoBlocks(toolResult.content)),
|
|
1620
|
-
details: extractStructuredDetailsFromBlock(toolResult),
|
|
1621
|
-
isError: toolResult.is_error === true,
|
|
1622
|
-
},
|
|
1623
|
-
});
|
|
1624
|
-
}
|
|
1625
|
-
}
|
|
1626
|
-
}
|
|
1627
|
-
return extracted;
|
|
1628
|
-
}
|
|
1629
|
-
/** Attach external tool results from the SDK synthetic user message to their corresponding tool-call blocks by ID. */
|
|
1630
|
-
function attachExternalResultsToToolBlocks(toolBlocks, toolResultsById) {
|
|
1631
|
-
for (const block of toolBlocks) {
|
|
1632
|
-
if (block.type !== "toolCall" && block.type !== "serverToolUse")
|
|
1633
|
-
continue;
|
|
1634
|
-
const externalResult = toolResultsById.get(block.id);
|
|
1635
|
-
if (!externalResult)
|
|
1636
|
-
continue;
|
|
1637
|
-
block.externalResult = externalResult;
|
|
1638
|
-
}
|
|
1639
|
-
}
|
|
1640
|
-
/**
|
|
1641
|
-
* Build the final assistant content that Agent Core consumes in
|
|
1642
|
-
* `externalToolExecution` mode. This preserves tool-call blocks, attaches any
|
|
1643
|
-
* SDK-produced external results by tool-call id, and then appends the final
|
|
1644
|
-
* text/thinking blocks for the completed turn.
|
|
1645
|
-
*/
|
|
1646
|
-
export function buildFinalAssistantContent(params) {
|
|
1647
|
-
const mergedToolBlocks = [...params.intermediateToolBlocks];
|
|
1648
|
-
if (params.pendingContent) {
|
|
1649
|
-
mergePendingToolCalls(mergedToolBlocks, params.pendingContent);
|
|
1650
|
-
}
|
|
1651
|
-
attachExternalResultsToToolBlocks(mergedToolBlocks, params.toolResultsById);
|
|
1652
|
-
const finalContent = [...mergedToolBlocks];
|
|
1653
|
-
if (params.pendingContent && params.pendingContent.length > 0) {
|
|
1654
|
-
for (const block of params.pendingContent) {
|
|
1655
|
-
if (block.type === "text" || block.type === "thinking") {
|
|
1656
|
-
finalContent.push(block);
|
|
1657
|
-
}
|
|
1658
|
-
}
|
|
1659
|
-
}
|
|
1660
|
-
else {
|
|
1661
|
-
if (params.lastThinkingContent) {
|
|
1662
|
-
finalContent.push({ type: "thinking", thinking: params.lastThinkingContent });
|
|
1663
|
-
}
|
|
1664
|
-
if (params.lastTextContent) {
|
|
1665
|
-
finalContent.push({ type: "text", text: params.lastTextContent });
|
|
1666
|
-
}
|
|
1667
|
-
}
|
|
1668
|
-
if (finalContent.length === 0 && params.fallbackResultText) {
|
|
1669
|
-
finalContent.push({ type: "text", text: params.fallbackResultText });
|
|
1670
|
-
}
|
|
1671
|
-
return finalContent;
|
|
1672
|
-
}
|
|
1673
|
-
/**
|
|
1674
|
-
* Merge tool-call blocks from the active partial-message builder into the
|
|
1675
|
-
* running list of intermediate tool calls, preserving order and de-duping
|
|
1676
|
-
* by tool-call id. Exposed for testing the F3 fix (final-turn tool calls
|
|
1677
|
-
* dropped when `result` arrives without a preceding synthetic `user`).
|
|
1678
|
-
*/
|
|
1679
|
-
export function mergePendingToolCalls(intermediate, pending) {
|
|
1680
|
-
const alreadyIncluded = new Set();
|
|
1681
|
-
for (const block of intermediate) {
|
|
1682
|
-
if (block.type === "toolCall")
|
|
1683
|
-
alreadyIncluded.add(block.id);
|
|
1684
|
-
}
|
|
1685
|
-
for (const block of pending) {
|
|
1686
|
-
if (block.type !== "toolCall")
|
|
1687
|
-
continue;
|
|
1688
|
-
if (alreadyIncluded.has(block.id))
|
|
1689
|
-
continue;
|
|
1690
|
-
alreadyIncluded.add(block.id);
|
|
1691
|
-
intermediate.push(block);
|
|
1692
|
-
}
|
|
1693
|
-
return intermediate;
|
|
1694
|
-
}
|
|
1695
|
-
export function handleClaudeCodePartialStreamEvent(builder, event, modelId) {
|
|
1696
|
-
if (event.type === "message_start") {
|
|
1697
|
-
// Claude Code can emit repeated SDK message_start events inside one
|
|
1698
|
-
// logical assistant response. Keep appending until a synthetic user
|
|
1699
|
-
// tool-result boundary explicitly clears the builder.
|
|
1700
|
-
return {
|
|
1701
|
-
builder: builder ?? new PartialMessageBuilder(event.message?.model ?? modelId),
|
|
1702
|
-
assistantEvent: null,
|
|
1703
|
-
};
|
|
1704
|
-
}
|
|
1705
|
-
if (!builder)
|
|
1706
|
-
return { builder, assistantEvent: null };
|
|
1707
|
-
return { builder, assistantEvent: builder.handleEvent(event) };
|
|
1708
|
-
}
|
|
1709
1581
|
// ---------------------------------------------------------------------------
|
|
1710
1582
|
// streamSimple implementation
|
|
1711
1583
|
// ---------------------------------------------------------------------------
|
|
@@ -1765,8 +1637,9 @@ async function pumpSdkMessages(model, context, options, stream) {
|
|
|
1765
1637
|
}
|
|
1766
1638
|
: {}),
|
|
1767
1639
|
});
|
|
1640
|
+
const workflowMcpServerName = workflowMcpServerNameFromAllowedTools(sdkOpts.allowedTools);
|
|
1768
1641
|
const prompt = buildPromptFromContext(context, {
|
|
1769
|
-
workflowMcpServerName
|
|
1642
|
+
workflowMcpServerName,
|
|
1770
1643
|
browserMcpServerName: browserMcpServerNameFromAllowedTools(sdkOpts.allowedTools),
|
|
1771
1644
|
});
|
|
1772
1645
|
const queryPrompt = buildSdkQueryPrompt(context, prompt);
|
|
@@ -1804,7 +1677,30 @@ async function pumpSdkMessages(model, context, options, stream) {
|
|
|
1804
1677
|
switch (msg.type) {
|
|
1805
1678
|
// -- Init --
|
|
1806
1679
|
case "system": {
|
|
1807
|
-
//
|
|
1680
|
+
// Tool Surface Readiness gate: the init message is the first (and
|
|
1681
|
+
// only) point where the session reports its live tool surface and
|
|
1682
|
+
// MCP server statuses. If the workflow server failed or has not
|
|
1683
|
+
// registered this Unit's required tools, abort before the first
|
|
1684
|
+
// model turn with a transient, recovery-classifiable error
|
|
1685
|
+
// (tool-unavailable → retry) instead of letting the model hit
|
|
1686
|
+
// "No such tool available" mid-Unit and improvise around it.
|
|
1687
|
+
const init = msg;
|
|
1688
|
+
if (init.subtype === "init") {
|
|
1689
|
+
const readinessError = getToolSurfaceReadinessError({
|
|
1690
|
+
unitType: gsdPhase,
|
|
1691
|
+
workflowServerName: workflowMcpServerName,
|
|
1692
|
+
observation: { tools: init.tools ?? [], mcpServers: init.mcp_servers ?? [] },
|
|
1693
|
+
});
|
|
1694
|
+
if (readinessError) {
|
|
1695
|
+
controller.abort();
|
|
1696
|
+
stream.push({
|
|
1697
|
+
type: "error",
|
|
1698
|
+
reason: "error",
|
|
1699
|
+
error: makeErrorMessage(modelId, readinessError),
|
|
1700
|
+
});
|
|
1701
|
+
return;
|
|
1702
|
+
}
|
|
1703
|
+
}
|
|
1808
1704
|
break;
|
|
1809
1705
|
}
|
|
1810
1706
|
// -- Streaming partial messages --
|