@opengsd/gsd-pi 1.2.0-dev.fbdca60b → 1.3.0-dev.65546769
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/README.md +13 -7
- package/dist/cli.js +28 -1
- package/dist/headless-context.js +0 -1
- package/dist/headless-events.d.ts +16 -1
- package/dist/headless-events.js +19 -2
- package/dist/headless.js +8 -1
- package/dist/help-text.js +29 -0
- package/dist/hermes-integration-install.d.ts +17 -0
- package/dist/hermes-integration-install.js +199 -0
- package/dist/jiti-workspace-aliases.d.ts +11 -2
- package/dist/jiti-workspace-aliases.js +19 -3
- package/dist/onboarding.js +9 -4
- package/dist/provider-migrations.d.ts +23 -0
- package/dist/provider-migrations.js +41 -0
- package/dist/read-cli.d.ts +23 -0
- package/dist/read-cli.js +90 -0
- package/dist/resource-loader.d.ts +3 -3
- package/dist/resource-loader.js +4 -13
- package/dist/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/GSD-WORKFLOW.md +22 -22
- package/dist/resources/extensions/claude-code-cli/index.js +7 -1
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +73 -20
- package/dist/resources/extensions/google-cli/stream-adapter.js +16 -1
- package/dist/resources/extensions/gsd/auto/dispatch-history.js +6 -1
- package/dist/resources/extensions/gsd/auto/loop.js +67 -2
- package/dist/resources/extensions/gsd/auto/orchestrator.js +50 -10
- package/dist/resources/extensions/gsd/auto/pre-dispatch.js +8 -0
- package/dist/resources/extensions/gsd/auto/workflow-kernel.js +15 -1
- package/dist/resources/extensions/gsd/auto-artifact-paths.js +81 -19
- package/dist/resources/extensions/gsd/auto-closeout-messaging.js +90 -0
- package/dist/resources/extensions/gsd/auto-dashboard.js +255 -431
- package/dist/resources/extensions/gsd/auto-direct-dispatch.js +15 -3
- package/dist/resources/extensions/gsd/auto-dispatch.js +47 -8
- package/dist/resources/extensions/gsd/auto-model-selection.js +14 -8
- package/dist/resources/extensions/gsd/auto-post-unit.js +39 -29
- package/dist/resources/extensions/gsd/auto-prompts.js +44 -30
- package/dist/resources/extensions/gsd/auto-recovery.js +118 -40
- package/dist/resources/extensions/gsd/auto-runtime-state.js +13 -0
- package/dist/resources/extensions/gsd/auto-start.js +58 -31
- package/dist/resources/extensions/gsd/auto-verification.js +5 -2
- package/dist/resources/extensions/gsd/auto-worktree.js +149 -91
- package/dist/resources/extensions/gsd/auto.js +97 -31
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +42 -54
- package/dist/resources/extensions/gsd/bootstrap/fallback-continuation.js +25 -0
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +24 -2
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +108 -9
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +164 -44
- package/dist/resources/extensions/gsd/bootstrap/tool-search-shim.js +22 -3
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +113 -27
- package/dist/resources/extensions/gsd/closeout-consistency-gate.js +92 -4
- package/dist/resources/extensions/gsd/closeout-wizard.js +8 -3
- package/dist/resources/extensions/gsd/codebase-generator.js +5 -8
- package/dist/resources/extensions/gsd/commands/catalog.js +6 -0
- package/dist/resources/extensions/gsd/commands/dispatcher.js +3 -0
- package/dist/resources/extensions/gsd/commands/gsd-core-aliases-handler.js +39 -0
- package/dist/resources/extensions/gsd/commands/gsd-core-aliases.js +44 -0
- package/dist/resources/extensions/gsd/commands/handlers/core.js +52 -8
- package/dist/resources/extensions/gsd/commands/handlers/ops.js +227 -3
- package/dist/resources/extensions/gsd/commands-cmux.js +3 -1
- package/dist/resources/extensions/gsd/commands-gsd-core.js +868 -0
- package/dist/resources/extensions/gsd/commands-handlers.js +67 -1
- package/dist/resources/extensions/gsd/commands-maintenance.js +79 -2
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +14 -1
- package/dist/resources/extensions/gsd/commands-verdict.js +17 -11
- package/dist/resources/extensions/gsd/compat/compat-marker.js +172 -0
- package/dist/resources/extensions/gsd/compat/index.js +3 -0
- package/dist/resources/extensions/gsd/compat/planning-compat.js +142 -0
- package/dist/resources/extensions/gsd/config-overlay.js +11 -8
- package/dist/resources/extensions/gsd/consent-question.js +12 -0
- package/dist/resources/extensions/gsd/consent-verdict.js +10 -0
- package/dist/resources/extensions/gsd/dashboard-overlay.js +39 -3
- package/dist/resources/extensions/gsd/db/engine.js +27 -0
- package/dist/resources/extensions/gsd/db/queries.js +54 -0
- package/dist/resources/extensions/gsd/db/unit-dispatches.js +22 -1
- package/dist/resources/extensions/gsd/db/writers/reconcile.js +19 -1
- package/dist/resources/extensions/gsd/db-workspace.js +13 -1
- package/dist/resources/extensions/gsd/discussion-handoff.js +9 -5
- package/dist/resources/extensions/gsd/doctor-git-checks.js +30 -4
- package/dist/resources/extensions/gsd/doctor-providers.js +1 -1
- package/dist/resources/extensions/gsd/doctor-runtime-checks.js +13 -24
- package/dist/resources/extensions/gsd/doctor.js +28 -7
- package/dist/resources/extensions/gsd/error-classifier.js +13 -1
- package/dist/resources/extensions/gsd/escalation.js +11 -4
- package/dist/resources/extensions/gsd/export-html.js +10 -3
- package/dist/resources/extensions/gsd/export.js +73 -0
- package/dist/resources/extensions/gsd/file-lock.js +1 -1
- package/dist/resources/extensions/gsd/flat-phase-migration.js +176 -0
- package/dist/resources/extensions/gsd/forensics.js +2 -1
- package/dist/resources/extensions/gsd/git-service.js +7 -4
- package/dist/resources/extensions/gsd/gitignore.js +6 -2
- package/dist/resources/extensions/gsd/guidance.js +7 -7
- package/dist/resources/extensions/gsd/guided-flow.js +11 -6
- package/dist/resources/extensions/gsd/layout-policy.js +75 -0
- package/dist/resources/extensions/gsd/markdown-renderer.js +391 -116
- package/dist/resources/extensions/gsd/mcp-filter.js +44 -10
- package/dist/resources/extensions/gsd/md-importer.js +153 -51
- package/dist/resources/extensions/gsd/metrics.js +19 -11
- package/dist/resources/extensions/gsd/migrate/layout-detect.js +32 -0
- package/dist/resources/extensions/gsd/migrate/planning-writer.js +203 -0
- package/dist/resources/extensions/gsd/migrate-external.js +51 -6
- package/dist/resources/extensions/gsd/migration-auto-check.js +5 -14
- package/dist/resources/extensions/gsd/milestone-actions.js +5 -3
- package/dist/resources/extensions/gsd/milestone-closeout.js +12 -2
- package/dist/resources/extensions/gsd/milestone-ids.js +50 -19
- package/dist/resources/extensions/gsd/milestone-planning-persistence.js +8 -0
- package/dist/resources/extensions/gsd/milestone-validation-verdict.js +7 -4
- package/dist/resources/extensions/gsd/model-router.js +79 -20
- package/dist/resources/extensions/gsd/notification-store.js +22 -29
- package/dist/resources/extensions/gsd/notifications.js +36 -7
- package/dist/resources/extensions/gsd/observability-validator.js +12 -4
- package/dist/resources/extensions/gsd/parallel-monitor-overlay.js +133 -35
- package/dist/resources/extensions/gsd/parsers-legacy.js +40 -14
- package/dist/resources/extensions/gsd/paths.js +356 -44
- package/dist/resources/extensions/gsd/planning-depth.js +2 -1
- package/dist/resources/extensions/gsd/post-execution-checks.js +26 -3
- package/dist/resources/extensions/gsd/preferences-models.js +34 -14
- package/dist/resources/extensions/gsd/preferences.js +148 -13
- package/dist/resources/extensions/gsd/prompts/ai-integration-phase.md +28 -0
- package/dist/resources/extensions/gsd/prompts/audit-fix.md +39 -0
- package/dist/resources/extensions/gsd/prompts/audit-milestone.md +26 -0
- package/dist/resources/extensions/gsd/prompts/audit-uat.md +24 -0
- package/dist/resources/extensions/gsd/prompts/autonomous.md +31 -0
- package/dist/resources/extensions/gsd/prompts/code-review.md +37 -0
- package/dist/resources/extensions/gsd/prompts/complete-milestone.md +8 -2
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +24 -15
- package/dist/resources/extensions/gsd/prompts/discuss-phase.md +31 -0
- package/dist/resources/extensions/gsd/prompts/docs-update.md +13 -0
- package/dist/resources/extensions/gsd/prompts/execute-phase.md +33 -0
- package/dist/resources/extensions/gsd/prompts/execute-task.md +5 -1
- package/dist/resources/extensions/gsd/prompts/explore.md +58 -0
- package/dist/resources/extensions/gsd/prompts/graphify.md +27 -0
- package/dist/resources/extensions/gsd/prompts/health.md +37 -0
- package/dist/resources/extensions/gsd/prompts/import.md +30 -0
- package/dist/resources/extensions/gsd/prompts/inbox.md +27 -0
- package/dist/resources/extensions/gsd/prompts/ingest-docs.md +30 -0
- package/dist/resources/extensions/gsd/prompts/manager.md +21 -0
- package/dist/resources/extensions/gsd/prompts/map-codebase.md +42 -0
- package/dist/resources/extensions/gsd/prompts/milestone-summary.md +27 -0
- package/dist/resources/extensions/gsd/prompts/mvp-phase.md +23 -0
- package/dist/resources/extensions/gsd/prompts/pause-work.md +24 -0
- package/dist/resources/extensions/gsd/prompts/phase.md +22 -0
- package/dist/resources/extensions/gsd/prompts/plan-phase.md +34 -0
- package/dist/resources/extensions/gsd/prompts/plan-review-convergence.md +34 -0
- package/dist/resources/extensions/gsd/prompts/profile-user.md +28 -0
- package/dist/resources/extensions/gsd/prompts/progress.md +30 -0
- package/dist/resources/extensions/gsd/prompts/quick-task.md +1 -1
- package/dist/resources/extensions/gsd/prompts/reactive-execute.md +2 -2
- package/dist/resources/extensions/gsd/prompts/resume-work.md +20 -0
- package/dist/resources/extensions/gsd/prompts/review-backlog.md +21 -0
- package/dist/resources/extensions/gsd/prompts/review.md +27 -0
- package/dist/resources/extensions/gsd/prompts/run-uat.md +5 -1
- package/dist/resources/extensions/gsd/prompts/secure-phase.md +24 -0
- package/dist/resources/extensions/gsd/prompts/settings.md +24 -0
- package/dist/resources/extensions/gsd/prompts/sketch.md +59 -0
- package/dist/resources/extensions/gsd/prompts/spec-phase.md +29 -0
- package/dist/resources/extensions/gsd/prompts/spike.md +59 -0
- package/dist/resources/extensions/gsd/prompts/stats.md +43 -0
- package/dist/resources/extensions/gsd/prompts/surface.md +25 -0
- package/dist/resources/extensions/gsd/prompts/thread.md +24 -0
- package/dist/resources/extensions/gsd/prompts/triage-captures.md +1 -1
- package/dist/resources/extensions/gsd/prompts/ui-phase.md +29 -0
- package/dist/resources/extensions/gsd/prompts/ui-review.md +29 -0
- package/dist/resources/extensions/gsd/prompts/ultraplan-phase.md +24 -0
- package/dist/resources/extensions/gsd/prompts/validate-phase.md +26 -0
- package/dist/resources/extensions/gsd/prompts/verify-work.md +24 -0
- package/dist/resources/extensions/gsd/prompts/workspace.md +22 -0
- package/dist/resources/extensions/gsd/prompts/workstreams.md +24 -0
- package/dist/resources/extensions/gsd/provider-error-guidance.js +24 -0
- package/dist/resources/extensions/gsd/queue-order.js +3 -2
- package/dist/resources/extensions/gsd/recovery-classification.js +8 -0
- package/dist/resources/extensions/gsd/roadmap-slices.js +1 -1
- package/dist/resources/extensions/gsd/safety/content-validator.js +2 -1
- package/dist/resources/extensions/gsd/safety/evidence-cross-ref.js +43 -1
- package/dist/resources/extensions/gsd/service-tier.js +2 -1
- package/dist/resources/extensions/gsd/session-lock.js +11 -9
- package/dist/resources/extensions/gsd/skills/gsd-headless/SKILL.md +3 -0
- package/dist/resources/extensions/gsd/skills/gsd-headless/references/commands.md +51 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/artifact-db.js +51 -10
- package/dist/resources/extensions/gsd/state-reconciliation/drift/completion.js +24 -3
- package/dist/resources/extensions/gsd/state-reconciliation/drift/external-markdown-edit.js +82 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/external-planning-edit.js +142 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/project-md.js +19 -6
- package/dist/resources/extensions/gsd/state-reconciliation/drift/roadmap.js +2 -2
- package/dist/resources/extensions/gsd/state-reconciliation/drift/stale-render.js +95 -19
- package/dist/resources/extensions/gsd/state-reconciliation/index.js +36 -3
- package/dist/resources/extensions/gsd/state-reconciliation/registry.js +12 -0
- package/dist/resources/extensions/gsd/state.js +48 -17
- package/dist/resources/extensions/gsd/sync-lock.js +11 -18
- package/dist/resources/extensions/gsd/tool-surface-readiness.js +205 -16
- package/dist/resources/extensions/gsd/tools/complete-milestone.js +4 -2
- package/dist/resources/extensions/gsd/tools/complete-slice.js +12 -2
- package/dist/resources/extensions/gsd/tools/complete-task.js +15 -1
- package/dist/resources/extensions/gsd/tools/exec-tool.js +2 -109
- package/dist/resources/extensions/gsd/tools/plan-slice.js +1 -3
- package/dist/resources/extensions/gsd/tools/plan-task.js +16 -1
- package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +9 -3
- package/dist/resources/extensions/gsd/tools/validate-milestone.js +8 -3
- package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +44 -5
- package/dist/resources/extensions/gsd/triage-resolution.js +14 -7
- package/dist/resources/extensions/gsd/tui/render-kit.js +38 -13
- package/dist/resources/extensions/gsd/undo.js +8 -9
- package/dist/resources/extensions/gsd/unit-registry.js +27 -3
- package/dist/resources/extensions/gsd/unmerged-milestone-guard.js +58 -2
- package/dist/resources/extensions/gsd/validation-block-guard.js +45 -0
- package/dist/resources/extensions/gsd/visualizer-data.js +35 -0
- package/dist/resources/extensions/gsd/visualizer-views.js +21 -2
- package/dist/resources/extensions/gsd/workflow-logger.js +4 -0
- package/dist/resources/extensions/gsd/workflow-mcp.js +9 -1
- package/dist/resources/extensions/gsd/workflow-projections.js +25 -4
- package/dist/resources/extensions/gsd/worktree-command.js +6 -6
- package/dist/resources/extensions/gsd/worktree-health.js +6 -3
- package/dist/resources/extensions/gsd/worktree-manager.js +109 -16
- package/dist/resources/extensions/gsd/worktree-safety.js +20 -11
- package/dist/resources/extensions/gsd/worktree-shell-guard.js +113 -0
- package/dist/resources/extensions/mcp-client/manager.js +3 -3
- package/dist/resources/extensions/search-the-web/index.js +41 -9
- package/dist/resources/extensions/search-the-web/native-search.js +18 -4
- package/dist/resources/extensions/shared/gsd-browser-cli.js +40 -2
- package/dist/resources/extensions/subagent/index.js +20 -15
- package/dist/resources/extensions/subagent/worktree-cwd.js +31 -0
- package/dist/tsconfig.extensions.tsbuildinfo +1 -1
- package/dist/update-check.js +15 -4
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +8 -8
- 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 +3 -3
- 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/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 +8 -8
- package/dist/web/standalone/.next/server/chunks/1128.js +1 -1
- package/dist/web/standalone/.next/server/chunks/5124.js +1 -1
- package/dist/web/standalone/.next/server/chunks/8357.js +1 -1
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/dist/web/standalone/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/.next/server/pages/500.html +1 -1
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/web/standalone/.next/static/chunks/{4283.e4873b058df143a1.js → 4283.8e446784528ed9dc.js} +2 -2
- package/dist/web/standalone/.next/static/chunks/8785.481aa5869991b760.js +1 -0
- package/dist/web/standalone/.next/static/chunks/{webpack-f0285ce91d4ec9ef.js → webpack-f46ea08200a0227e.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 +2 -2
- package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
- package/dist/web-mode.d.ts +3 -1
- package/dist/web-mode.js +7 -5
- package/integrations/hermes/README.md +48 -0
- package/integrations/hermes/docs/setup.md +272 -0
- package/integrations/hermes/docs/upstream-hermes-pr.md +40 -0
- package/integrations/hermes/open_gsd_hermes/__init__.py +105 -0
- package/integrations/hermes/open_gsd_hermes/binding.py +107 -0
- package/integrations/hermes/open_gsd_hermes/commands.py +186 -0
- package/integrations/hermes/open_gsd_hermes/config.py +59 -0
- package/integrations/hermes/open_gsd_hermes/credentials.py +51 -0
- package/integrations/hermes/open_gsd_hermes/cron.py +85 -0
- package/integrations/hermes/open_gsd_hermes/formatting.py +13 -0
- package/integrations/hermes/open_gsd_hermes/gsd_client.py +269 -0
- package/integrations/hermes/open_gsd_hermes/inject.py +31 -0
- package/integrations/hermes/open_gsd_hermes/memory.py +66 -0
- package/integrations/hermes/open_gsd_hermes/notifications.py +71 -0
- package/integrations/hermes/open_gsd_hermes/snapshot.py +42 -0
- package/integrations/hermes/open_gsd_hermes/supervisor.py +180 -0
- package/integrations/hermes/open_gsd_hermes/types.py +100 -0
- package/integrations/hermes/plugin.yaml +38 -0
- package/integrations/hermes/pyproject.toml +32 -0
- package/integrations/hermes/scripts/preflight.sh +92 -0
- package/integrations/hermes/tests/fixtures/minimal-project/.gsd/STATE.md +17 -0
- package/integrations/hermes/tests/golden/memory_prefetch.txt +5 -0
- package/integrations/hermes/tests/golden/snapshot.txt +8 -0
- package/integrations/hermes/tests/test_binding.py +103 -0
- package/integrations/hermes/tests/test_config.py +36 -0
- package/integrations/hermes/tests/test_cron.py +34 -0
- package/integrations/hermes/tests/test_gsd_client_cache.py +120 -0
- package/integrations/hermes/tests/test_memory.py +59 -0
- package/integrations/hermes/tests/test_read_cli_contract.py +50 -0
- package/integrations/hermes/tests/test_register.py +56 -0
- package/integrations/hermes/tests/test_snapshot.py +53 -0
- package/integrations/hermes/tests/test_supervisor_fsm.py +581 -0
- package/package.json +8 -7
- package/packages/cloud-mcp-gateway/dist/runtime-registry.d.ts +8 -0
- package/packages/cloud-mcp-gateway/dist/runtime-registry.d.ts.map +1 -1
- package/packages/cloud-mcp-gateway/dist/runtime-registry.js +19 -2
- package/packages/cloud-mcp-gateway/dist/runtime-registry.js.map +1 -1
- package/packages/cloud-mcp-gateway/dist/runtime-registry.test.js +71 -2
- package/packages/cloud-mcp-gateway/dist/runtime-registry.test.js.map +1 -1
- package/packages/cloud-mcp-gateway/package.json +2 -2
- package/packages/contracts/package.json +1 -1
- package/packages/daemon/package.json +4 -4
- package/packages/gsd-agent-core/dist/sdk.d.ts.map +1 -1
- package/packages/gsd-agent-core/dist/sdk.js +6 -2
- package/packages/gsd-agent-core/dist/sdk.js.map +1 -1
- package/packages/gsd-agent-core/package.json +5 -5
- package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts +5 -5
- package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js +12 -24
- package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.js +5 -5
- package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.d.ts +3 -3
- package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.js +20 -11
- package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-turn-connect.d.ts +4 -3
- package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-turn-connect.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-turn-connect.js +5 -54
- package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-turn-connect.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.d.ts +2 -4
- package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.js +2 -4
- package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.d.ts +2 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.js +4 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.d.ts +9 -12
- package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.js +100 -166
- package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-progress-state.d.ts +2 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-progress-state.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-progress-state.js +4 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-progress-state.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-status-widget.d.ts +23 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-status-widget.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-status-widget.js +178 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-status-widget.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.d.ts +8 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.js +21 -9
- package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.d.ts +2 -3
- package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.js +2 -3
- package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts +3 -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 +37 -15
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.d.ts +69 -3
- package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.js +223 -32
- package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.d.ts +3 -3
- package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.js +19 -19
- package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts +3 -0
- 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 +26 -10
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.js +12 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-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 +5 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-autocomplete.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-autocomplete.js +3 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-autocomplete.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 +3 -5
- 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-dialogs.js +2 -2
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-dialogs.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.d.ts +1 -0
- 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 +25 -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-key-handlers.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-key-handlers.js +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-key-handlers.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-init.d.ts +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-init.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-init.js +20 -49
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-init.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts +4 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts +9 -2
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js +31 -6
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-ui-messaging.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-ui-messaging.js +0 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-ui-messaging.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 -0
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/packages/gsd-agent-modes/package.json +7 -7
- package/packages/mcp-server/README.md +10 -0
- package/packages/mcp-server/dist/cli-errors.d.ts +11 -0
- package/packages/mcp-server/dist/cli-errors.d.ts.map +1 -1
- package/packages/mcp-server/dist/cli-errors.js +12 -0
- package/packages/mcp-server/dist/cli-errors.js.map +1 -1
- package/packages/mcp-server/dist/cli-runner.d.ts.map +1 -1
- package/packages/mcp-server/dist/cli-runner.js +33 -0
- package/packages/mcp-server/dist/cli-runner.js.map +1 -1
- package/packages/mcp-server/dist/cli.d.ts +1 -0
- package/packages/mcp-server/dist/cli.d.ts.map +1 -1
- package/packages/mcp-server/dist/cli.js +1 -0
- package/packages/mcp-server/dist/cli.js.map +1 -1
- package/packages/mcp-server/dist/server.d.ts +29 -0
- package/packages/mcp-server/dist/server.d.ts.map +1 -1
- package/packages/mcp-server/dist/server.js +82 -3
- package/packages/mcp-server/dist/server.js.map +1 -1
- package/packages/mcp-server/package.json +21 -5
- package/packages/native/package.json +1 -1
- package/packages/pi-agent-core/dist/agent-loop.js +9 -0
- package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/packages/pi-agent-core/package.json +1 -1
- package/packages/pi-ai/package.json +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-upstream-types.d.ts +28 -2
- package/packages/pi-coding-agent/dist/core/extensions/extension-upstream-types.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-upstream-types.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +5 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.js +3 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.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.map +1 -1
- package/packages/pi-coding-agent/package.json +8 -8
- package/packages/pi-tui/dist/autocomplete.d.ts.map +1 -1
- package/packages/pi-tui/dist/autocomplete.js +6 -1
- package/packages/pi-tui/dist/autocomplete.js.map +1 -1
- 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/components/loader.d.ts.map +1 -1
- package/packages/pi-tui/dist/components/loader.js +1 -0
- package/packages/pi-tui/dist/components/loader.js.map +1 -1
- package/packages/pi-tui/dist/components/select-list.d.ts.map +1 -1
- package/packages/pi-tui/dist/components/select-list.js +8 -2
- package/packages/pi-tui/dist/components/select-list.js.map +1 -1
- package/packages/pi-tui/package.json +2 -2
- package/packages/rpc-client/package.json +2 -2
- package/pkg/package.json +1 -1
- package/src/resources/GSD-WORKFLOW.md +22 -22
- package/src/resources/extensions/browser-tools/tests/gsd-browser-launch-config.test.mjs +80 -0
- package/src/resources/extensions/claude-code-cli/index.ts +8 -1
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +83 -20
- package/src/resources/extensions/claude-code-cli/tests/index.test.ts +47 -0
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +182 -10
- package/src/resources/extensions/google-cli/stream-adapter.ts +22 -1
- package/src/resources/extensions/gsd/auto/dispatch-history.ts +19 -1
- package/src/resources/extensions/gsd/auto/loop.ts +69 -2
- package/src/resources/extensions/gsd/auto/orchestrator.ts +63 -10
- package/src/resources/extensions/gsd/auto/pre-dispatch.ts +13 -1
- package/src/resources/extensions/gsd/auto/workflow-kernel.ts +25 -3
- package/src/resources/extensions/gsd/auto-artifact-paths.ts +83 -20
- package/src/resources/extensions/gsd/auto-closeout-messaging.ts +90 -0
- package/src/resources/extensions/gsd/auto-dashboard.ts +310 -454
- package/src/resources/extensions/gsd/auto-direct-dispatch.ts +15 -2
- package/src/resources/extensions/gsd/auto-dispatch.ts +57 -12
- package/src/resources/extensions/gsd/auto-model-selection.ts +27 -5
- package/src/resources/extensions/gsd/auto-post-unit.ts +52 -31
- package/src/resources/extensions/gsd/auto-prompts.ts +45 -30
- package/src/resources/extensions/gsd/auto-recovery.ts +126 -37
- package/src/resources/extensions/gsd/auto-runtime-state.ts +13 -0
- package/src/resources/extensions/gsd/auto-start.ts +82 -36
- package/src/resources/extensions/gsd/auto-verification.ts +5 -7
- package/src/resources/extensions/gsd/auto-worktree.ts +83 -15
- package/src/resources/extensions/gsd/auto.ts +133 -32
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +45 -61
- package/src/resources/extensions/gsd/bootstrap/fallback-continuation.ts +31 -0
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +23 -2
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +123 -9
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +185 -46
- package/src/resources/extensions/gsd/bootstrap/tool-search-shim.ts +21 -3
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +138 -29
- package/src/resources/extensions/gsd/closeout-consistency-gate.ts +107 -3
- package/src/resources/extensions/gsd/closeout-wizard.ts +11 -2
- package/src/resources/extensions/gsd/codebase-generator.ts +6 -9
- package/src/resources/extensions/gsd/commands/catalog.ts +6 -0
- package/src/resources/extensions/gsd/commands/dispatcher.ts +3 -0
- package/src/resources/extensions/gsd/commands/gsd-core-aliases-handler.ts +48 -0
- package/src/resources/extensions/gsd/commands/gsd-core-aliases.ts +63 -0
- package/src/resources/extensions/gsd/commands/handlers/core.ts +58 -8
- package/src/resources/extensions/gsd/commands/handlers/ops.ts +230 -3
- package/src/resources/extensions/gsd/commands-cmux.ts +3 -0
- package/src/resources/extensions/gsd/commands-gsd-core.ts +1142 -0
- package/src/resources/extensions/gsd/commands-handlers.ts +76 -1
- package/src/resources/extensions/gsd/commands-maintenance.ts +98 -2
- package/src/resources/extensions/gsd/commands-prefs-wizard.ts +13 -0
- package/src/resources/extensions/gsd/commands-verdict.ts +16 -15
- package/src/resources/extensions/gsd/compat/compat-marker.ts +210 -0
- package/src/resources/extensions/gsd/compat/index.ts +12 -0
- package/src/resources/extensions/gsd/compat/planning-compat.ts +168 -0
- package/src/resources/extensions/gsd/config-overlay.ts +24 -9
- package/src/resources/extensions/gsd/consent-question.ts +11 -1
- package/src/resources/extensions/gsd/consent-verdict.ts +30 -1
- package/src/resources/extensions/gsd/dashboard-overlay.ts +41 -4
- package/src/resources/extensions/gsd/db/engine.ts +26 -0
- package/src/resources/extensions/gsd/db/queries.ts +78 -0
- package/src/resources/extensions/gsd/db/unit-dispatches.ts +24 -0
- package/src/resources/extensions/gsd/db/writers/reconcile.ts +24 -1
- package/src/resources/extensions/gsd/db-workspace.ts +15 -0
- package/src/resources/extensions/gsd/discussion-handoff.ts +9 -5
- package/src/resources/extensions/gsd/doctor-git-checks.ts +28 -3
- package/src/resources/extensions/gsd/doctor-providers.ts +1 -1
- package/src/resources/extensions/gsd/doctor-runtime-checks.ts +12 -25
- package/src/resources/extensions/gsd/doctor-types.ts +1 -0
- package/src/resources/extensions/gsd/doctor.ts +30 -7
- package/src/resources/extensions/gsd/error-classifier.ts +14 -1
- package/src/resources/extensions/gsd/escalation.ts +9 -4
- package/src/resources/extensions/gsd/export-html.ts +11 -4
- package/src/resources/extensions/gsd/export.ts +88 -1
- package/src/resources/extensions/gsd/file-lock.ts +1 -1
- package/src/resources/extensions/gsd/flat-phase-migration.ts +205 -0
- package/src/resources/extensions/gsd/forensics.ts +2 -1
- package/src/resources/extensions/gsd/git-constants.ts +1 -1
- package/src/resources/extensions/gsd/git-service.ts +7 -2
- package/src/resources/extensions/gsd/gitignore.ts +7 -3
- package/src/resources/extensions/gsd/guidance.ts +7 -7
- package/src/resources/extensions/gsd/guided-flow.ts +11 -6
- package/src/resources/extensions/gsd/layout-policy.ts +85 -0
- package/src/resources/extensions/gsd/markdown-renderer.ts +404 -104
- package/src/resources/extensions/gsd/mcp-filter.ts +59 -10
- package/src/resources/extensions/gsd/md-importer.ts +215 -65
- package/src/resources/extensions/gsd/metrics.ts +23 -10
- package/src/resources/extensions/gsd/migrate/layout-detect.ts +38 -0
- package/src/resources/extensions/gsd/migrate/planning-writer.ts +259 -0
- package/src/resources/extensions/gsd/migrate-external.ts +49 -6
- package/src/resources/extensions/gsd/migration-auto-check.ts +4 -13
- package/src/resources/extensions/gsd/milestone-actions.ts +5 -2
- package/src/resources/extensions/gsd/milestone-closeout.ts +13 -2
- package/src/resources/extensions/gsd/milestone-ids.ts +49 -19
- package/src/resources/extensions/gsd/milestone-planning-persistence.ts +8 -0
- package/src/resources/extensions/gsd/milestone-validation-verdict.ts +7 -9
- package/src/resources/extensions/gsd/model-router.ts +98 -18
- package/src/resources/extensions/gsd/notification-store.ts +17 -28
- package/src/resources/extensions/gsd/notifications.ts +37 -6
- package/src/resources/extensions/gsd/observability-validator.ts +12 -4
- package/src/resources/extensions/gsd/parallel-monitor-overlay.ts +151 -31
- package/src/resources/extensions/gsd/parsers-legacy.ts +42 -15
- package/src/resources/extensions/gsd/paths.ts +348 -39
- package/src/resources/extensions/gsd/planning-depth.ts +2 -1
- package/src/resources/extensions/gsd/post-execution-checks.ts +43 -3
- package/src/resources/extensions/gsd/preferences-models.ts +47 -13
- package/src/resources/extensions/gsd/preferences.ts +188 -14
- package/src/resources/extensions/gsd/prompts/ai-integration-phase.md +28 -0
- package/src/resources/extensions/gsd/prompts/audit-fix.md +39 -0
- package/src/resources/extensions/gsd/prompts/audit-milestone.md +26 -0
- package/src/resources/extensions/gsd/prompts/audit-uat.md +24 -0
- package/src/resources/extensions/gsd/prompts/autonomous.md +31 -0
- package/src/resources/extensions/gsd/prompts/code-review.md +37 -0
- package/src/resources/extensions/gsd/prompts/complete-milestone.md +8 -2
- package/src/resources/extensions/gsd/prompts/complete-slice.md +24 -15
- package/src/resources/extensions/gsd/prompts/discuss-phase.md +31 -0
- package/src/resources/extensions/gsd/prompts/docs-update.md +13 -0
- package/src/resources/extensions/gsd/prompts/execute-phase.md +33 -0
- package/src/resources/extensions/gsd/prompts/execute-task.md +5 -1
- package/src/resources/extensions/gsd/prompts/explore.md +58 -0
- package/src/resources/extensions/gsd/prompts/graphify.md +27 -0
- package/src/resources/extensions/gsd/prompts/health.md +37 -0
- package/src/resources/extensions/gsd/prompts/import.md +30 -0
- package/src/resources/extensions/gsd/prompts/inbox.md +27 -0
- package/src/resources/extensions/gsd/prompts/ingest-docs.md +30 -0
- package/src/resources/extensions/gsd/prompts/manager.md +21 -0
- package/src/resources/extensions/gsd/prompts/map-codebase.md +42 -0
- package/src/resources/extensions/gsd/prompts/milestone-summary.md +27 -0
- package/src/resources/extensions/gsd/prompts/mvp-phase.md +23 -0
- package/src/resources/extensions/gsd/prompts/pause-work.md +24 -0
- package/src/resources/extensions/gsd/prompts/phase.md +22 -0
- package/src/resources/extensions/gsd/prompts/plan-phase.md +34 -0
- package/src/resources/extensions/gsd/prompts/plan-review-convergence.md +34 -0
- package/src/resources/extensions/gsd/prompts/profile-user.md +28 -0
- package/src/resources/extensions/gsd/prompts/progress.md +30 -0
- package/src/resources/extensions/gsd/prompts/quick-task.md +1 -1
- package/src/resources/extensions/gsd/prompts/reactive-execute.md +2 -2
- package/src/resources/extensions/gsd/prompts/resume-work.md +20 -0
- package/src/resources/extensions/gsd/prompts/review-backlog.md +21 -0
- package/src/resources/extensions/gsd/prompts/review.md +27 -0
- package/src/resources/extensions/gsd/prompts/run-uat.md +5 -1
- package/src/resources/extensions/gsd/prompts/secure-phase.md +24 -0
- package/src/resources/extensions/gsd/prompts/settings.md +24 -0
- package/src/resources/extensions/gsd/prompts/sketch.md +59 -0
- package/src/resources/extensions/gsd/prompts/spec-phase.md +29 -0
- package/src/resources/extensions/gsd/prompts/spike.md +59 -0
- package/src/resources/extensions/gsd/prompts/stats.md +43 -0
- package/src/resources/extensions/gsd/prompts/surface.md +25 -0
- package/src/resources/extensions/gsd/prompts/thread.md +24 -0
- package/src/resources/extensions/gsd/prompts/triage-captures.md +1 -1
- package/src/resources/extensions/gsd/prompts/ui-phase.md +29 -0
- package/src/resources/extensions/gsd/prompts/ui-review.md +29 -0
- package/src/resources/extensions/gsd/prompts/ultraplan-phase.md +24 -0
- package/src/resources/extensions/gsd/prompts/validate-phase.md +26 -0
- package/src/resources/extensions/gsd/prompts/verify-work.md +24 -0
- package/src/resources/extensions/gsd/prompts/workspace.md +22 -0
- package/src/resources/extensions/gsd/prompts/workstreams.md +24 -0
- package/src/resources/extensions/gsd/provider-error-guidance.ts +32 -0
- package/src/resources/extensions/gsd/queue-order.ts +3 -2
- package/src/resources/extensions/gsd/recovery-classification.ts +7 -0
- package/src/resources/extensions/gsd/roadmap-slices.ts +1 -1
- package/src/resources/extensions/gsd/safety/content-validator.ts +2 -1
- package/src/resources/extensions/gsd/safety/evidence-cross-ref.ts +45 -1
- package/src/resources/extensions/gsd/service-tier.ts +2 -0
- package/src/resources/extensions/gsd/session-lock.ts +15 -13
- package/src/resources/extensions/gsd/skills/gsd-headless/SKILL.md +3 -0
- package/src/resources/extensions/gsd/skills/gsd-headless/references/commands.md +51 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/artifact-db.ts +58 -14
- package/src/resources/extensions/gsd/state-reconciliation/drift/completion.ts +22 -2
- package/src/resources/extensions/gsd/state-reconciliation/drift/external-markdown-edit.ts +105 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/external-planning-edit.ts +180 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/project-md.ts +19 -6
- package/src/resources/extensions/gsd/state-reconciliation/drift/roadmap.ts +2 -2
- package/src/resources/extensions/gsd/state-reconciliation/drift/stale-render.ts +98 -26
- package/src/resources/extensions/gsd/state-reconciliation/index.ts +36 -3
- package/src/resources/extensions/gsd/state-reconciliation/registry.ts +12 -0
- package/src/resources/extensions/gsd/state-reconciliation/types.ts +19 -0
- package/src/resources/extensions/gsd/state.ts +57 -15
- package/src/resources/extensions/gsd/sync-lock.ts +11 -20
- package/src/resources/extensions/gsd/tests/__fixtures__/flat-phase/.gsd/phases/01-foundation/01-01-PLAN.md +13 -0
- package/src/resources/extensions/gsd/tests/__fixtures__/flat-phase/.gsd/phases/01-foundation/01-ROADMAP.md +8 -0
- package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/m001-basic/.gsd/milestones/M001/M001-ROADMAP.md +13 -0
- package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/m001-basic/.gsd/milestones/M001/slices/S01/S01-PLAN.md +5 -0
- package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/PROJECT.md +1 -0
- package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/ROADMAP.md +5 -0
- package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/STATE.md +10 -0
- package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/phases/01-foundation/01-01-PLAN.md +13 -0
- package/src/resources/extensions/gsd/tests/auto-artifact-paths.test.ts +322 -1
- package/src/resources/extensions/gsd/tests/auto-closeout-messaging.test.ts +71 -0
- package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +68 -116
- package/src/resources/extensions/gsd/tests/auto-direct-dispatch-parse.test.ts +33 -0
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +104 -0
- package/src/resources/extensions/gsd/tests/auto-migrating-recovery.test.ts +32 -1
- package/src/resources/extensions/gsd/tests/auto-model-selection-tool-poisoning.test.ts +7 -2
- package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +10 -0
- package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +28 -22
- package/src/resources/extensions/gsd/tests/auto-paused-session-validation.test.ts +11 -2
- package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +19 -2
- package/src/resources/extensions/gsd/tests/auto-verification.test.ts +36 -0
- package/src/resources/extensions/gsd/tests/auto-worktree-auto-resolve.test.ts +17 -0
- package/src/resources/extensions/gsd/tests/blocker-placeholder-logs.test.ts +218 -0
- package/src/resources/extensions/gsd/tests/codebase-generator.test.ts +15 -11
- package/src/resources/extensions/gsd/tests/commands-dispatcher-unmerged-milestone.test.ts +89 -0
- package/src/resources/extensions/gsd/tests/commands-dispatcher-validation-block.test.ts +37 -1
- package/src/resources/extensions/gsd/tests/commands-eval-review.test.ts +31 -30
- package/src/resources/extensions/gsd/tests/commands-gsd-core.test.ts +862 -0
- package/src/resources/extensions/gsd/tests/commands-verdict.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/compat-health-line.test.ts +102 -0
- package/src/resources/extensions/gsd/tests/compat-marker-invalidation.test.ts +51 -0
- package/src/resources/extensions/gsd/tests/compat-marker.test.ts +105 -0
- package/src/resources/extensions/gsd/tests/complete-milestone-prompt-rendering.test.ts +6 -2
- package/src/resources/extensions/gsd/tests/complete-slice-reopen-handoff.test.ts +82 -0
- package/src/resources/extensions/gsd/tests/complete-slice.test.ts +7 -7
- package/src/resources/extensions/gsd/tests/complete-task.test.ts +7 -7
- package/src/resources/extensions/gsd/tests/consent-question.test.ts +45 -0
- package/src/resources/extensions/gsd/tests/core-overlay-fallback.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/dashboard-overlay.test.ts +37 -0
- package/src/resources/extensions/gsd/tests/db-authority-regression.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/db-engine-logs.test.ts +207 -0
- package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +63 -1
- package/src/resources/extensions/gsd/tests/derive-state-helpers.test.ts +49 -5
- package/src/resources/extensions/gsd/tests/discuss-cold-start-db-open.test.ts +10 -27
- package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +20 -1
- package/src/resources/extensions/gsd/tests/dispatch-db-degradation-logs.test.ts +98 -0
- package/src/resources/extensions/gsd/tests/dispatch-history.test.ts +102 -0
- package/src/resources/extensions/gsd/tests/dispatch-logs.test.ts +103 -0
- package/src/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +38 -49
- package/src/resources/extensions/gsd/tests/dispatch-reactive-logs.test.ts +98 -0
- package/src/resources/extensions/gsd/tests/dist-redirect.mjs +7 -0
- package/src/resources/extensions/gsd/tests/doctor-git-checks-autoresolve.test.ts +149 -0
- package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +6 -4
- package/src/resources/extensions/gsd/tests/ensure-preconditions-guard-4996.test.ts +17 -10
- package/src/resources/extensions/gsd/tests/evidence-cross-ref.test.ts +95 -0
- package/src/resources/extensions/gsd/tests/export-html-enhancements.test.ts +25 -0
- package/src/resources/extensions/gsd/tests/export-memory.test.ts +179 -0
- package/src/resources/extensions/gsd/tests/extension-bootstrap-isolation.test.ts +53 -0
- package/src/resources/extensions/gsd/tests/external-markdown-edit.test.ts +137 -0
- package/src/resources/extensions/gsd/tests/external-planning-edit.test.ts +199 -0
- package/src/resources/extensions/gsd/tests/fallback-continuation.test.ts +36 -0
- package/src/resources/extensions/gsd/tests/file-lock.test.ts +43 -0
- package/src/resources/extensions/gsd/tests/flat-phase-migration.test.ts +114 -0
- package/src/resources/extensions/gsd/tests/flat-phase-renderer.test.ts +83 -0
- package/src/resources/extensions/gsd/tests/flat-phase-round-trip.test.ts +72 -0
- package/src/resources/extensions/gsd/tests/flat-phase-validation-integration.test.ts +120 -0
- package/src/resources/extensions/gsd/tests/flat-phase-validation-path.test.ts +74 -0
- package/src/resources/extensions/gsd/tests/flat-rate-routing-guard.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/gsd-command-home.test.ts +40 -7
- package/src/resources/extensions/gsd/tests/gsd-core-parity-routing.test.ts +183 -0
- package/src/resources/extensions/gsd/tests/guidance.test.ts +25 -0
- package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +19 -11
- package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +75 -0
- package/src/resources/extensions/gsd/tests/integration/commands-eval-review.integration.test.ts +6 -2
- package/src/resources/extensions/gsd/tests/integration/gitignore-tracked-gsd.test.ts +55 -0
- package/src/resources/extensions/gsd/tests/integration/idle-recovery.test.ts +4 -3
- package/src/resources/extensions/gsd/tests/integration/integration-proof.test.ts +11 -7
- package/src/resources/extensions/gsd/tests/interactive-routing-bypass.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/knowledge-cold-start.test.ts +372 -0
- package/src/resources/extensions/gsd/tests/layout-policy.test.ts +59 -0
- package/src/resources/extensions/gsd/tests/loop.test.ts +60 -0
- package/src/resources/extensions/gsd/tests/markdown-renderer-parse-cache.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/markdown-renderer.test.ts +214 -82
- package/src/resources/extensions/gsd/tests/mcp-filter.test.ts +74 -1
- package/src/resources/extensions/gsd/tests/metrics-ledger-cap.test.ts +239 -0
- package/src/resources/extensions/gsd/tests/milestone-closeout.test.ts +7 -2
- package/src/resources/extensions/gsd/tests/milestone-settlement.test.ts +6 -1
- package/src/resources/extensions/gsd/tests/model-router.test.ts +343 -7
- package/src/resources/extensions/gsd/tests/notification-store.test.ts +23 -0
- package/src/resources/extensions/gsd/tests/notifications.test.ts +33 -0
- package/src/resources/extensions/gsd/tests/oauth-api-model-routing.test.ts +13 -1
- package/src/resources/extensions/gsd/tests/observability-validator-boundary.test.ts +194 -0
- package/src/resources/extensions/gsd/tests/orchestrator-legacy-parity.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/orchestrator-logs.test.ts +339 -0
- package/src/resources/extensions/gsd/tests/orphaned-worktree-audit.test.ts +52 -1
- package/src/resources/extensions/gsd/tests/parallel-monitor-overlay.test.ts +91 -0
- package/src/resources/extensions/gsd/tests/plan-milestone-boundary-map-preservation.test.ts +7 -2
- package/src/resources/extensions/gsd/tests/plan-milestone-sketch-render.test.ts +7 -2
- package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +9 -6
- package/src/resources/extensions/gsd/tests/plan-slice.test.ts +58 -23
- package/src/resources/extensions/gsd/tests/plan-task.test.ts +4 -4
- package/src/resources/extensions/gsd/tests/planning-crossval.test.ts +19 -0
- package/src/resources/extensions/gsd/tests/planning-layout-detect.test.ts +84 -0
- package/src/resources/extensions/gsd/tests/planning-marker.test.ts +107 -0
- package/src/resources/extensions/gsd/tests/planning-projection-hook.test.ts +123 -0
- package/src/resources/extensions/gsd/tests/planning-round-trip-property.test.ts +164 -0
- package/src/resources/extensions/gsd/tests/planning-writer.test.ts +82 -0
- package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +48 -1
- package/src/resources/extensions/gsd/tests/preferences.test.ts +47 -1
- package/src/resources/extensions/gsd/tests/prefs-missing-models-crash.test.ts +35 -4
- package/src/resources/extensions/gsd/tests/progress-strip-test-helpers.ts +79 -0
- package/src/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +2 -0
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +16 -0
- package/src/resources/extensions/gsd/tests/provider-error-guidance.test.ts +15 -0
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +107 -0
- package/src/resources/extensions/gsd/tests/ready-phrase-no-files-4573.test.ts +22 -13
- package/src/resources/extensions/gsd/tests/reassess-handler.test.ts +9 -8
- package/src/resources/extensions/gsd/tests/reconcile-logs.test.ts +244 -0
- package/src/resources/extensions/gsd/tests/recovery-finalize-logs.test.ts +119 -0
- package/src/resources/extensions/gsd/tests/recovery-verify-logs.test.ts +428 -0
- package/src/resources/extensions/gsd/tests/register-extension-guard.test.ts +25 -0
- package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +79 -4
- package/src/resources/extensions/gsd/tests/replan-handler.test.ts +4 -4
- package/src/resources/extensions/gsd/tests/resume-missing-worktree-warning.test.ts +5 -5
- package/src/resources/extensions/gsd/tests/round-trip-property.test.ts +137 -0
- package/src/resources/extensions/gsd/tests/session-lock-transient-read.test.ts +28 -2
- package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +68 -0
- package/src/resources/extensions/gsd/tests/show-config-command.test.ts +3 -0
- package/src/resources/extensions/gsd/tests/single-writer-invariant.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/stale-dirlistcache-4648.test.ts +7 -1
- package/src/resources/extensions/gsd/tests/state-reconciliation-drift.test.ts +155 -58
- package/src/resources/extensions/gsd/tests/stop-backtrack.test.ts +6 -2
- package/src/resources/extensions/gsd/tests/stuck-state-via-db.test.ts +85 -0
- package/src/resources/extensions/gsd/tests/sync-lock.test.ts +23 -0
- package/src/resources/extensions/gsd/tests/system-context-message-routing.test.ts +29 -1
- package/src/resources/extensions/gsd/tests/terminal-tool-surface-classification.test.ts +80 -0
- package/src/resources/extensions/gsd/tests/thinking-level-resolution.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/tool-schema-model-fallback.test.ts +64 -0
- package/src/resources/extensions/gsd/tests/tool-search-shim.test.ts +71 -0
- package/src/resources/extensions/gsd/tests/tool-surface-readiness.test.ts +26 -7
- package/src/resources/extensions/gsd/tests/tool-unavailable-retry.test.ts +23 -0
- package/src/resources/extensions/gsd/tests/tui-header-lifecycle.test.ts +40 -86
- package/src/resources/extensions/gsd/tests/tui-render-kit.test.ts +44 -6
- package/src/resources/extensions/gsd/tests/undo.test.ts +39 -37
- package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +22 -0
- package/src/resources/extensions/gsd/tests/unmerged-milestone-guard.test.ts +62 -0
- package/src/resources/extensions/gsd/tests/uok-audit.test.ts +194 -0
- package/src/resources/extensions/gsd/tests/uok-gitops-turn-action.test.ts +72 -1
- package/src/resources/extensions/gsd/tests/validate-milestone-write-order.test.ts +9 -1
- package/src/resources/extensions/gsd/tests/validation-block-guard.test.ts +51 -0
- package/src/resources/extensions/gsd/tests/validation-gate-patterns.test.ts +34 -6
- package/src/resources/extensions/gsd/tests/verify-artifact-tightened.test.ts +90 -0
- package/src/resources/extensions/gsd/tests/visualizer-data.test.ts +87 -0
- package/src/resources/extensions/gsd/tests/visualizer-views.test.ts +27 -0
- package/src/resources/extensions/gsd/tests/workflow-kernel.test.ts +51 -0
- package/src/resources/extensions/gsd/tests/workflow-mcp-preflight.test.ts +133 -0
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +34 -8
- package/src/resources/extensions/gsd/tests/workflow-projections.test.ts +3 -4
- package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +64 -8
- package/src/resources/extensions/gsd/tests/worktree-health.test.ts +43 -3
- package/src/resources/extensions/gsd/tests/worktree-manager.test.ts +62 -0
- package/src/resources/extensions/gsd/tests/worktree-safety.test.ts +39 -18
- package/src/resources/extensions/gsd/tests/worktree-write-gate.test.ts +75 -3
- package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +4 -1
- package/src/resources/extensions/gsd/tests/write-gate.test.ts +103 -0
- package/src/resources/extensions/gsd/tool-surface-readiness.ts +226 -16
- package/src/resources/extensions/gsd/tools/complete-milestone.ts +4 -7
- package/src/resources/extensions/gsd/tools/complete-slice.ts +12 -9
- package/src/resources/extensions/gsd/tools/complete-task.ts +15 -1
- package/src/resources/extensions/gsd/tools/exec-tool.ts +2 -118
- package/src/resources/extensions/gsd/tools/plan-slice.ts +1 -3
- package/src/resources/extensions/gsd/tools/plan-task.ts +17 -1
- package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +9 -10
- package/src/resources/extensions/gsd/tools/validate-milestone.ts +8 -13
- package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +43 -4
- package/src/resources/extensions/gsd/triage-resolution.ts +14 -7
- package/src/resources/extensions/gsd/tui/render-kit.ts +56 -13
- package/src/resources/extensions/gsd/undo.ts +8 -9
- package/src/resources/extensions/gsd/unit-registry.ts +27 -3
- package/src/resources/extensions/gsd/unmerged-milestone-guard.ts +60 -1
- package/src/resources/extensions/gsd/validation-block-guard.ts +46 -0
- package/src/resources/extensions/gsd/visualizer-data.ts +55 -0
- package/src/resources/extensions/gsd/visualizer-views.ts +27 -2
- package/src/resources/extensions/gsd/workflow-logger.ts +5 -0
- package/src/resources/extensions/gsd/workflow-mcp.ts +12 -1
- package/src/resources/extensions/gsd/workflow-projections.ts +24 -4
- package/src/resources/extensions/gsd/worktree-command.ts +6 -6
- package/src/resources/extensions/gsd/worktree-health.ts +6 -3
- package/src/resources/extensions/gsd/worktree-manager.ts +122 -16
- package/src/resources/extensions/gsd/worktree-safety.ts +31 -11
- package/src/resources/extensions/gsd/worktree-shell-guard.ts +123 -0
- package/src/resources/extensions/mcp-client/manager.ts +3 -3
- package/src/resources/extensions/search-the-web/index.ts +45 -9
- package/src/resources/extensions/search-the-web/native-search.ts +16 -4
- package/src/resources/extensions/shared/gsd-browser-cli.ts +41 -2
- package/src/resources/extensions/subagent/index.ts +20 -15
- package/src/resources/extensions/subagent/tests/worktree-cwd.test.ts +57 -0
- package/src/resources/extensions/subagent/worktree-cwd.ts +35 -0
- package/dist/web/standalone/.next/static/chunks/8785.2e5a118797fb2dd2.js +0 -1
- /package/dist/web/standalone/.next/static/{2T9IOdiiM3o3gZ4UbPi8E → BTKtGFF1Y-hvVJEGhBRo9}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{2T9IOdiiM3o3gZ4UbPi8E → BTKtGFF1Y-hvVJEGhBRo9}/_ssgManifest.js +0 -0
|
@@ -20,7 +20,7 @@ import {
|
|
|
20
20
|
unlinkSync,
|
|
21
21
|
lstatSync as lstatSyncFn,
|
|
22
22
|
} from "node:fs";
|
|
23
|
-
import { dirname, isAbsolute, join, relative, resolve } from "node:path";
|
|
23
|
+
import { basename, dirname, isAbsolute, join, relative, resolve } from "node:path";
|
|
24
24
|
import { GSDError, GSD_IO_ERROR, GSD_GIT_ERROR } from "./errors.js";
|
|
25
25
|
import {
|
|
26
26
|
reconcileWorktreeDb,
|
|
@@ -36,7 +36,13 @@ import {
|
|
|
36
36
|
} from "./db-workspace.js";
|
|
37
37
|
import { atomicWriteSync } from "./atomic-write.js";
|
|
38
38
|
import { execFileSync } from "node:child_process";
|
|
39
|
-
import {
|
|
39
|
+
import {
|
|
40
|
+
canonicalPhaseDirName,
|
|
41
|
+
gsdRoot,
|
|
42
|
+
milestonesDir,
|
|
43
|
+
resolveGsdPathContract,
|
|
44
|
+
resolveMilestonePath,
|
|
45
|
+
} from "./paths.js";
|
|
40
46
|
import {
|
|
41
47
|
createWorktree,
|
|
42
48
|
removeWorktree,
|
|
@@ -242,6 +248,17 @@ function stripGsdDisplayPrefix(value: string | undefined | null, id: string): st
|
|
|
242
248
|
/** Active workspace registry — replaces the legacy `originalBase` singleton. */
|
|
243
249
|
let activeWorkspace: GsdWorkspace | null = null;
|
|
244
250
|
|
|
251
|
+
/**
|
|
252
|
+
* Optional override for the shelter restore copy step (milestone merge #2505).
|
|
253
|
+
* Production leaves this null so restoreShelter uses the real cpSync; tests
|
|
254
|
+
* inject a throwing function to deterministically exercise the best-effort
|
|
255
|
+
* failure path (auto-worktree.ts:1809) and the shelter-retention guarantee,
|
|
256
|
+
* which is otherwise unreachable because shelter and restore run synchronously
|
|
257
|
+
* in one mergeMilestoneToMain call (the filesystem cannot change between them).
|
|
258
|
+
* @internal
|
|
259
|
+
*/
|
|
260
|
+
let _restoreEntryFn: ((src: string, dest: string) => void) | null = null;
|
|
261
|
+
|
|
245
262
|
function setActiveWorkspace(ws: GsdWorkspace | null): void {
|
|
246
263
|
activeWorkspace = ws;
|
|
247
264
|
}
|
|
@@ -406,10 +423,25 @@ export const SAFE_AUTO_RESOLVE_PATTERNS: RegExp[] = [
|
|
|
406
423
|
/\/__pycache__\//,
|
|
407
424
|
/\.DS_Store$/,
|
|
408
425
|
/\.map$/,
|
|
426
|
+
// Regenerable dependency lockfiles. These are fully derivable from their
|
|
427
|
+
// manifests by the package manager, so accepting the merge side during
|
|
428
|
+
// auto-resolve clears the conflict markers without losing meaningful edits —
|
|
429
|
+
// and stops auto-mode from hard-pausing on a lockfile conflict (issue #828).
|
|
430
|
+
/(?:^|\/)pnpm-lock\.yaml$/,
|
|
431
|
+
/(?:^|\/)package-lock\.json$/,
|
|
432
|
+
/(?:^|\/)npm-shrinkwrap\.json$/,
|
|
433
|
+
/(?:^|\/)yarn\.lock$/,
|
|
434
|
+
/(?:^|\/)bun\.lockb?$/,
|
|
435
|
+
/(?:^|\/)Cargo\.lock$/,
|
|
436
|
+
/(?:^|\/)composer\.lock$/,
|
|
437
|
+
/(?:^|\/)Gemfile\.lock$/,
|
|
438
|
+
/(?:^|\/)Pipfile\.lock$/,
|
|
439
|
+
/(?:^|\/)poetry\.lock$/,
|
|
409
440
|
];
|
|
410
441
|
|
|
411
442
|
/** Returns true if the file path is safe to auto-resolve during merge.
|
|
412
|
-
* Covers `.gsd/` state files
|
|
443
|
+
* Covers `.gsd/` state files, common build artifacts, and regenerable
|
|
444
|
+
* dependency lockfiles. */
|
|
413
445
|
export const isSafeToAutoResolve = (filePath: string): boolean =>
|
|
414
446
|
filePath.startsWith(".gsd/") ||
|
|
415
447
|
SAFE_AUTO_RESOLVE_PATTERNS.some((re) => re.test(filePath));
|
|
@@ -683,9 +715,11 @@ export function syncGsdStateToWorktree(
|
|
|
683
715
|
}
|
|
684
716
|
}
|
|
685
717
|
|
|
686
|
-
// Sync
|
|
687
|
-
|
|
688
|
-
const
|
|
718
|
+
// Sync milestone/phase trees: copy entire directories that are missing.
|
|
719
|
+
// Support both flat-phase (phases/) and legacy (milestones/) layouts.
|
|
720
|
+
for (const layoutSegment of ["phases", "milestones"] as const) {
|
|
721
|
+
const mainMilestonesDir = join(mainGsd, layoutSegment);
|
|
722
|
+
const wtMilestonesDir = join(wtGsd, layoutSegment);
|
|
689
723
|
if (existsSync(mainMilestonesDir)) {
|
|
690
724
|
try {
|
|
691
725
|
mkdirSync(wtMilestonesDir, { recursive: true });
|
|
@@ -775,6 +809,7 @@ export function syncGsdStateToWorktree(
|
|
|
775
809
|
logWarning("worktree", `milestone directory sync failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
776
810
|
}
|
|
777
811
|
}
|
|
812
|
+
}
|
|
778
813
|
|
|
779
814
|
return { synced };
|
|
780
815
|
}
|
|
@@ -1394,6 +1429,22 @@ export function _resetAutoWorktreeOriginalBaseForTests(): void {
|
|
|
1394
1429
|
setActiveWorkspace(null);
|
|
1395
1430
|
}
|
|
1396
1431
|
|
|
1432
|
+
/**
|
|
1433
|
+
* Inject an override for the shelter restore copy step, returning a function
|
|
1434
|
+
* that restores the default (real cpSync) behavior. Used by tests to
|
|
1435
|
+
* deterministically exercise the best-effort restore-failure path
|
|
1436
|
+
* (auto-worktree.ts:1809) and the #2505 shelter-retention guarantee — which is
|
|
1437
|
+
* otherwise unreachable because shelter + restore run synchronously in one
|
|
1438
|
+
* mergeMilestoneToMain call. No production caller.
|
|
1439
|
+
* @internal
|
|
1440
|
+
*/
|
|
1441
|
+
export function _setRestoreEntryFnForTests(
|
|
1442
|
+
fn: ((src: string, dest: string) => void) | null,
|
|
1443
|
+
): () => void {
|
|
1444
|
+
_restoreEntryFn = fn;
|
|
1445
|
+
return () => { _restoreEntryFn = null; };
|
|
1446
|
+
}
|
|
1447
|
+
|
|
1397
1448
|
export function getActiveAutoWorktreeContext(): {
|
|
1398
1449
|
originalBase: string;
|
|
1399
1450
|
worktreeName: string;
|
|
@@ -1772,10 +1823,19 @@ export function mergeMilestoneToMain(
|
|
|
1772
1823
|
// MUST run BEFORE the pre-merge stash (step 7a) so `--include-untracked`
|
|
1773
1824
|
// does not sweep queued CONTEXT files into the stash. If stash pop later
|
|
1774
1825
|
// fails, files trapped inside the stash are permanently lost (#2505).
|
|
1775
|
-
const
|
|
1826
|
+
const planningDir = milestonesDir(originalBasePath_);
|
|
1776
1827
|
const shelterDir = join(gsdRoot(originalBasePath_), ".milestone-shelter");
|
|
1777
1828
|
const shelteredDirs: string[] = [];
|
|
1778
1829
|
let shelterRestored = false;
|
|
1830
|
+
const mergeDirNames = new Set<string>([milestoneId]);
|
|
1831
|
+
const resolvedMergeDir = resolveMilestonePath(originalBasePath_, milestoneId);
|
|
1832
|
+
if (resolvedMergeDir) {
|
|
1833
|
+
mergeDirNames.add(basename(resolvedMergeDir));
|
|
1834
|
+
} else {
|
|
1835
|
+
mergeDirNames.add(
|
|
1836
|
+
canonicalPhaseDirName(milestoneId, getMilestone(milestoneId)?.title),
|
|
1837
|
+
);
|
|
1838
|
+
}
|
|
1779
1839
|
|
|
1780
1840
|
// Helper: restore sheltered milestone directories (#2505).
|
|
1781
1841
|
// Called on both success and error paths to ensure queued CONTEXT files
|
|
@@ -1802,8 +1862,16 @@ export function mergeMilestoneToMain(
|
|
|
1802
1862
|
continue;
|
|
1803
1863
|
}
|
|
1804
1864
|
try {
|
|
1805
|
-
mkdirSync(
|
|
1806
|
-
|
|
1865
|
+
mkdirSync(planningDir, { recursive: true });
|
|
1866
|
+
// Test seam: when _restoreEntryFn is injected, route the copy through it
|
|
1867
|
+
// so the best-effort failure path (and shelter-retention guarantee) can
|
|
1868
|
+
// be exercised deterministically. Production leaves it null → real cpSync.
|
|
1869
|
+
const dest = join(planningDir, dirName);
|
|
1870
|
+
if (_restoreEntryFn) {
|
|
1871
|
+
_restoreEntryFn(src, dest);
|
|
1872
|
+
} else {
|
|
1873
|
+
cpSync(src, dest, { recursive: true, force: true });
|
|
1874
|
+
}
|
|
1807
1875
|
} catch (err) { /* best-effort */
|
|
1808
1876
|
restoreFailed = true;
|
|
1809
1877
|
logError("worktree", `shelter restore failed (${dirName}): ${err instanceof Error ? err.message : String(err)}`);
|
|
@@ -1824,13 +1892,13 @@ export function mergeMilestoneToMain(
|
|
|
1824
1892
|
};
|
|
1825
1893
|
|
|
1826
1894
|
try {
|
|
1827
|
-
if (existsSync(
|
|
1828
|
-
const entries = readdirSync(
|
|
1895
|
+
if (existsSync(planningDir)) {
|
|
1896
|
+
const entries = readdirSync(planningDir, { withFileTypes: true });
|
|
1829
1897
|
for (const entry of entries) {
|
|
1830
1898
|
if (!entry.isDirectory()) continue;
|
|
1831
1899
|
// Only shelter directories that do NOT belong to the milestone being merged
|
|
1832
|
-
if (entry.name
|
|
1833
|
-
const srcDir = join(
|
|
1900
|
+
if (mergeDirNames.has(entry.name)) continue;
|
|
1901
|
+
const srcDir = join(planningDir, entry.name);
|
|
1834
1902
|
const dstDir = join(shelterDir, entry.name);
|
|
1835
1903
|
try {
|
|
1836
1904
|
mkdirSync(shelterDir, { recursive: true });
|
|
@@ -1854,8 +1922,8 @@ export function mergeMilestoneToMain(
|
|
|
1854
1922
|
// branch. Passing NO pathspec lets git skip gitignored paths silently;
|
|
1855
1923
|
// adding an explicit pathspec trips a `git add`-style fatal on ignored
|
|
1856
1924
|
// entries (e.g. a gitignored `.gsd` symlink under ADR-002) (#4573).
|
|
1857
|
-
// Queued CONTEXT files under `.gsd/
|
|
1858
|
-
// in step 7 above, so they won't be swept into the stash.
|
|
1925
|
+
// Queued CONTEXT files under `.gsd/phases/*` (or legacy milestones/*)
|
|
1926
|
+
// are already sheltered in step 7 above, so they won't be swept into the stash.
|
|
1859
1927
|
// On Windows, SQLite holds mandatory file locks on the gsd.db WAL/SHM
|
|
1860
1928
|
// sidecars while the connection is open. `git stash --include-untracked`
|
|
1861
1929
|
// walks those files and fails with EBUSY (#4704). Close the DB before
|
|
@@ -41,6 +41,7 @@ import {
|
|
|
41
41
|
import { extractSection, getManifestStatus, splitFrontmatter, parseFrontmatterMap } from "./files.js";
|
|
42
42
|
export { inlinePriorMilestoneSummary } from "./files.js";
|
|
43
43
|
import { collectSecretsFromManifest } from "../get-secrets-from-user.js";
|
|
44
|
+
|
|
44
45
|
import {
|
|
45
46
|
gsdRoot,
|
|
46
47
|
resolveMilestoneFile,
|
|
@@ -51,7 +52,10 @@ import {
|
|
|
51
52
|
resolveTasksDir,
|
|
52
53
|
resolveTaskFile,
|
|
53
54
|
milestonesDir,
|
|
55
|
+
legacyMilestonesDir,
|
|
56
|
+
isLegacyMilestonesLayout,
|
|
54
57
|
buildTaskFileName,
|
|
58
|
+
canonicalPhaseDirName,
|
|
55
59
|
} from "./paths.js";
|
|
56
60
|
import { invalidateAllCaches } from "./cache.js";
|
|
57
61
|
import { clearActivityLogState } from "./activity-log.js";
|
|
@@ -80,6 +84,8 @@ import type { SessionLockStatus } from "./session-lock.js";
|
|
|
80
84
|
import {
|
|
81
85
|
resolveAutoSupervisorConfig,
|
|
82
86
|
loadEffectiveGSDPreferences,
|
|
87
|
+
loadEffectiveGSDPreferencesWithRegistry,
|
|
88
|
+
resolveProfileAnchorProvider,
|
|
83
89
|
getIsolationMode,
|
|
84
90
|
resolveEffectiveUnitIsolationMode,
|
|
85
91
|
} from "./preferences.js";
|
|
@@ -851,7 +857,7 @@ export function _warnIfWorktreeMissingForTest(
|
|
|
851
857
|
if (worktreePath && !existsSync(worktreePath)) {
|
|
852
858
|
logWarning(
|
|
853
859
|
"session",
|
|
854
|
-
`Worktree was expected at ${worktreePath} but is missing.
|
|
860
|
+
`Worktree was expected at ${worktreePath} but is missing. Resuming from project root; /gsd next will recreate the worktree when isolation is enabled.`,
|
|
855
861
|
{ file: "auto.ts", milestoneId },
|
|
856
862
|
);
|
|
857
863
|
return true;
|
|
@@ -859,18 +865,33 @@ export function _warnIfWorktreeMissingForTest(
|
|
|
859
865
|
return false;
|
|
860
866
|
}
|
|
861
867
|
|
|
862
|
-
export function anchorProcessCwdForAutoResume(
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
);
|
|
872
|
-
|
|
868
|
+
export function anchorProcessCwdForAutoResume(
|
|
869
|
+
basePath: string,
|
|
870
|
+
fallbackPaths: string[] = [],
|
|
871
|
+
): boolean {
|
|
872
|
+
const candidates = [basePath, ...fallbackPaths].filter(
|
|
873
|
+
(candidate, index, all) =>
|
|
874
|
+
Boolean(candidate) && all.indexOf(candidate) === index,
|
|
875
|
+
);
|
|
876
|
+
for (const candidate of candidates) {
|
|
877
|
+
if (!existsSync(candidate)) continue;
|
|
878
|
+
try {
|
|
879
|
+
process.chdir(candidate);
|
|
880
|
+
return true;
|
|
881
|
+
} catch (err) {
|
|
882
|
+
logWarning(
|
|
883
|
+
"session",
|
|
884
|
+
`resume cwd anchor failed for ${candidate}: ${err instanceof Error ? err.message : String(err)}`,
|
|
885
|
+
{ file: "auto.ts", basePath: candidate },
|
|
886
|
+
);
|
|
887
|
+
}
|
|
873
888
|
}
|
|
889
|
+
logWarning(
|
|
890
|
+
"session",
|
|
891
|
+
`resume cwd anchor failed: no usable directory among ${candidates.join(", ")}`,
|
|
892
|
+
{ file: "auto.ts" },
|
|
893
|
+
);
|
|
894
|
+
return false;
|
|
874
895
|
}
|
|
875
896
|
|
|
876
897
|
export function isAutoPaused(): boolean {
|
|
@@ -1178,6 +1199,52 @@ function shouldPreserveCoordinationForPause(errorContext?: ErrorContext): boolea
|
|
|
1178
1199
|
return errorContext?.category === "provider" && errorContext.isTransient === true;
|
|
1179
1200
|
}
|
|
1180
1201
|
|
|
1202
|
+
function resolvePauseLifecyclePresentation(errorContext?: ErrorContext): {
|
|
1203
|
+
status: "paused" | "blocked";
|
|
1204
|
+
title: string;
|
|
1205
|
+
detail: string;
|
|
1206
|
+
nextAction: string;
|
|
1207
|
+
commands: string[];
|
|
1208
|
+
notifyLevel: "info" | "warning";
|
|
1209
|
+
notifyPrefix: string;
|
|
1210
|
+
} {
|
|
1211
|
+
const resumeCmd = s.stepMode ? "/gsd next" : "/gsd auto";
|
|
1212
|
+
const modeLabel = s.stepMode ? "Step" : "Auto";
|
|
1213
|
+
const defaultPresentation = {
|
|
1214
|
+
status: "paused" as const,
|
|
1215
|
+
title: `${modeLabel}-mode paused`,
|
|
1216
|
+
detail: errorContext?.message ?? "Paused by user request.",
|
|
1217
|
+
nextAction: `Type to steer, or run ${resumeCmd} to resume.`,
|
|
1218
|
+
commands: [resumeCmd, "/gsd status for overview", "/gsd notifications for history"],
|
|
1219
|
+
notifyLevel: "info" as const,
|
|
1220
|
+
notifyPrefix: `${modeLabel}-mode paused`,
|
|
1221
|
+
};
|
|
1222
|
+
|
|
1223
|
+
const message = errorContext?.message ?? "";
|
|
1224
|
+
if (
|
|
1225
|
+
message.includes("completed closeout dispatch history") ||
|
|
1226
|
+
message.includes("completed complete-milestone dispatch history")
|
|
1227
|
+
) {
|
|
1228
|
+
const milestoneMatch = message.match(/Milestone (M\d+[A-Z0-9-]*)/);
|
|
1229
|
+
const milestoneId = milestoneMatch?.[1] ?? "this milestone";
|
|
1230
|
+
return {
|
|
1231
|
+
status: "blocked",
|
|
1232
|
+
title: `${modeLabel}-mode blocked`,
|
|
1233
|
+
detail: message,
|
|
1234
|
+
nextAction: `Run \`/gsd dispatch complete-milestone ${milestoneId}\` to finish closeout, then ${resumeCmd}.`,
|
|
1235
|
+
commands: [
|
|
1236
|
+
`/gsd dispatch complete-milestone ${milestoneId}`,
|
|
1237
|
+
`/gsd status ${milestoneId}`,
|
|
1238
|
+
resumeCmd,
|
|
1239
|
+
],
|
|
1240
|
+
notifyLevel: "warning",
|
|
1241
|
+
notifyPrefix: `${modeLabel}-mode blocked`,
|
|
1242
|
+
};
|
|
1243
|
+
}
|
|
1244
|
+
|
|
1245
|
+
return defaultPresentation;
|
|
1246
|
+
}
|
|
1247
|
+
|
|
1181
1248
|
function setLifecycleOutcome(
|
|
1182
1249
|
ctx: ExtensionContext | undefined,
|
|
1183
1250
|
input: {
|
|
@@ -1229,11 +1296,15 @@ function setTerminalCloseoutOutcome(
|
|
|
1229
1296
|
invalidate(): void {},
|
|
1230
1297
|
}));
|
|
1231
1298
|
ctx.ui.setStatus?.("gsd-step", undefined);
|
|
1299
|
+
ctx.ui?.setGsdProgress?.(undefined);
|
|
1232
1300
|
ctx.ui.setWidget?.("gsd-progress", undefined);
|
|
1301
|
+
const detail = input.allMilestonesComplete && input.milestoneTitle
|
|
1302
|
+
? `${input.milestoneTitle}. All milestones complete`
|
|
1303
|
+
: `${titleLine}${input.reason ?? "Milestone closeout finished."}`;
|
|
1233
1304
|
setLifecycleOutcome(ctx, {
|
|
1234
1305
|
status: "complete",
|
|
1235
1306
|
title,
|
|
1236
|
-
detail
|
|
1307
|
+
detail,
|
|
1237
1308
|
nextAction,
|
|
1238
1309
|
commands: TERMINAL_CLOSEOUT_COMMANDS,
|
|
1239
1310
|
unitLabel: input.milestoneId ? `complete-milestone ${input.milestoneId}` : null,
|
|
@@ -2050,6 +2121,12 @@ export async function pauseAuto(
|
|
|
2050
2121
|
});
|
|
2051
2122
|
return;
|
|
2052
2123
|
}
|
|
2124
|
+
|
|
2125
|
+
anchorProcessCwdForAutoResume(s.basePath || s.originalBasePath || "", [
|
|
2126
|
+
s.originalBasePath,
|
|
2127
|
+
lockBase(),
|
|
2128
|
+
].filter((path): path is string => Boolean(path)));
|
|
2129
|
+
|
|
2053
2130
|
s.active = false;
|
|
2054
2131
|
s.paused = true;
|
|
2055
2132
|
clearUnitTimeout();
|
|
@@ -2165,22 +2242,22 @@ export async function pauseAuto(
|
|
|
2165
2242
|
s.pendingVerificationRetry = null;
|
|
2166
2243
|
ctx?.ui.setStatus("gsd-auto", "paused");
|
|
2167
2244
|
ctx?.ui.setWidget("gsd-progress", undefined);
|
|
2168
|
-
const
|
|
2245
|
+
const lifecycle = resolvePauseLifecyclePresentation(_errorContext);
|
|
2169
2246
|
setLifecycleOutcome(ctx, {
|
|
2170
|
-
status:
|
|
2171
|
-
title:
|
|
2172
|
-
detail:
|
|
2173
|
-
nextAction:
|
|
2174
|
-
commands:
|
|
2247
|
+
status: lifecycle.status,
|
|
2248
|
+
title: lifecycle.title,
|
|
2249
|
+
detail: lifecycle.detail,
|
|
2250
|
+
nextAction: lifecycle.nextAction,
|
|
2251
|
+
commands: lifecycle.commands,
|
|
2175
2252
|
unitLabel: pausedUnitLabel,
|
|
2176
2253
|
});
|
|
2177
2254
|
if (ctx) initHealthWidget(ctx);
|
|
2178
2255
|
const pauseMessage = _errorContext?.message
|
|
2179
|
-
? `${
|
|
2180
|
-
: `${
|
|
2256
|
+
? `${lifecycle.notifyPrefix}: ${_errorContext.message}`
|
|
2257
|
+
: `${lifecycle.notifyPrefix} (Escape). Type to interact, or ${lifecycle.commands[0] ?? (s.stepMode ? "/gsd next" : "/gsd auto")} to resume.`;
|
|
2181
2258
|
ctx?.ui.notify(
|
|
2182
2259
|
pauseMessage,
|
|
2183
|
-
|
|
2260
|
+
lifecycle.notifyLevel,
|
|
2184
2261
|
);
|
|
2185
2262
|
}
|
|
2186
2263
|
|
|
@@ -2250,7 +2327,7 @@ function ensureOrchestrationModule(ctx: ExtensionContext, pi: ExtensionAPI, base
|
|
|
2250
2327
|
* Build the LoopDeps object from auto.ts private scope.
|
|
2251
2328
|
* This bundles all private functions that autoLoop needs without exporting them.
|
|
2252
2329
|
*/
|
|
2253
|
-
function buildLoopDeps(pi: ExtensionAPI): LoopDeps {
|
|
2330
|
+
function buildLoopDeps(pi: ExtensionAPI, ctx: ExtensionContext): LoopDeps {
|
|
2254
2331
|
// Initialize the unified rule registry with converted dispatch rules.
|
|
2255
2332
|
// Must happen before LoopDeps is assembled so facade functions
|
|
2256
2333
|
// (resolveDispatch, runPreDispatchHooks, etc.) delegate to the registry.
|
|
@@ -2276,7 +2353,13 @@ function buildLoopDeps(pi: ExtensionAPI): LoopDeps {
|
|
|
2276
2353
|
invalidateAllCaches,
|
|
2277
2354
|
deriveState,
|
|
2278
2355
|
rebuildState,
|
|
2279
|
-
loadEffectiveGSDPreferences
|
|
2356
|
+
loadEffectiveGSDPreferences: () =>
|
|
2357
|
+
loadEffectiveGSDPreferencesWithRegistry(
|
|
2358
|
+
ctx.modelRegistry,
|
|
2359
|
+
s.basePath || undefined,
|
|
2360
|
+
resolveProfileAnchorProvider(ctx.model?.provider, s.autoModeStartModel?.provider),
|
|
2361
|
+
s.autoModeStartModel ? `${s.autoModeStartModel.provider}/${s.autoModeStartModel.id}` : undefined,
|
|
2362
|
+
),
|
|
2280
2363
|
|
|
2281
2364
|
// Pre-dispatch health gate
|
|
2282
2365
|
preDispatchHealthGate,
|
|
@@ -2435,7 +2518,7 @@ export async function startAuto(
|
|
|
2435
2518
|
// resume paths (#4416). The matching call in auto-start.ts covers the
|
|
2436
2519
|
// bootstrap-only path; this call ensures the resume path is also protected.
|
|
2437
2520
|
if (recoverFailedMigration(base)) {
|
|
2438
|
-
ctx.ui.notify("Recovered unfinished
|
|
2521
|
+
ctx.ui.notify("Recovered unfinished external state migration.", "info");
|
|
2439
2522
|
}
|
|
2440
2523
|
|
|
2441
2524
|
const unmergedStartMessage = await getUnmergedMilestoneBlockMessageForBase(base, "auto");
|
|
@@ -2555,7 +2638,7 @@ export async function startAuto(
|
|
|
2555
2638
|
if (persistedWorktreePath && !existsSync(persistedWorktreePath)) {
|
|
2556
2639
|
logWarning(
|
|
2557
2640
|
"session",
|
|
2558
|
-
`Worktree was expected at ${persistedWorktreePath} but is missing.
|
|
2641
|
+
`Worktree was expected at ${persistedWorktreePath} but is missing. Resuming from project root; /gsd next will recreate the worktree when isolation is enabled.`,
|
|
2559
2642
|
{ file: "auto.ts", milestoneId: meta.milestoneId ?? "" },
|
|
2560
2643
|
);
|
|
2561
2644
|
}
|
|
@@ -2650,13 +2733,16 @@ export async function startAuto(
|
|
|
2650
2733
|
if (resumeWorktreePath && !existsSync(resumeWorktreePath)) {
|
|
2651
2734
|
logWarning(
|
|
2652
2735
|
"session",
|
|
2653
|
-
`Worktree was expected at ${resumeWorktreePath} but is missing.
|
|
2736
|
+
`Worktree was expected at ${resumeWorktreePath} but is missing. Resuming from project root; /gsd next will recreate the worktree when isolation is enabled.`,
|
|
2654
2737
|
{ file: "auto.ts", milestoneId: s.currentMilestoneId ?? "" },
|
|
2655
2738
|
);
|
|
2656
2739
|
}
|
|
2657
2740
|
// ADR-016 phase 2 / B3 (#5621): paused-resume worktree-path adoption.
|
|
2658
2741
|
buildLifecycle().resumeFromPausedSession(base, resumeWorktreePath);
|
|
2659
|
-
anchorProcessCwdForAutoResume(s.basePath || base
|
|
2742
|
+
anchorProcessCwdForAutoResume(s.basePath || base, [
|
|
2743
|
+
base,
|
|
2744
|
+
s.originalBasePath || base,
|
|
2745
|
+
]);
|
|
2660
2746
|
// Rebuild scope now that s.basePath reflects the actual worktree (or project root).
|
|
2661
2747
|
rebuildScope(s.basePath, s.currentMilestoneId);
|
|
2662
2748
|
// Ensure the workflow-logger audit log is pinned to the project root
|
|
@@ -2702,7 +2788,7 @@ export async function startAuto(
|
|
|
2702
2788
|
rebuildScope(s.basePath, s.currentMilestoneId);
|
|
2703
2789
|
}
|
|
2704
2790
|
|
|
2705
|
-
const loopDeps = buildLoopDeps(pi);
|
|
2791
|
+
const loopDeps = buildLoopDeps(pi, ctx);
|
|
2706
2792
|
ensureOrchestrationModule(ctx, pi, s.basePath || base);
|
|
2707
2793
|
registerSigtermHandler(lockBase());
|
|
2708
2794
|
|
|
@@ -2822,7 +2908,7 @@ export async function startAuto(
|
|
|
2822
2908
|
// Build scope after bootstrap has populated s.basePath / s.originalBasePath /
|
|
2823
2909
|
// s.currentMilestoneId (including worktree setup inside bootstrapAutoSession).
|
|
2824
2910
|
rebuildScope(s.basePath, s.currentMilestoneId);
|
|
2825
|
-
const loopDeps = buildLoopDeps(pi);
|
|
2911
|
+
const loopDeps = buildLoopDeps(pi, ctx);
|
|
2826
2912
|
ensureOrchestrationModule(ctx, pi, s.basePath || base);
|
|
2827
2913
|
captureProjectRootEnv(s.originalBasePath || s.basePath);
|
|
2828
2914
|
registerAutoWorkerForSession(s);
|
|
@@ -2916,11 +3002,26 @@ export function ensurePreconditions(
|
|
|
2916
3002
|
return;
|
|
2917
3003
|
}
|
|
2918
3004
|
}
|
|
2919
|
-
|
|
2920
|
-
|
|
3005
|
+
// Layout-aware: if the legacy milestones/ dir exists, place the new milestone dir
|
|
3006
|
+
// there (preserves the existing project layout). Otherwise use flat-phase phases/.
|
|
3007
|
+
const legacyBase = legacyMilestonesDir(base);
|
|
3008
|
+
const isLegacyLayout = isLegacyMilestonesLayout(base);
|
|
3009
|
+
const targetBase = isLegacyLayout ? legacyBase : milestonesDir(base);
|
|
3010
|
+
// Flat-phase: look up the milestone title to build the canonical NN-slug dir name
|
|
3011
|
+
// (e.g. "01-foundation") that resolveMilestonePath will later find by prefix.
|
|
3012
|
+
// Legacy layout keeps the raw milestone id (e.g. "M001").
|
|
3013
|
+
const dirName = isLegacyLayout
|
|
3014
|
+
? mid
|
|
3015
|
+
: canonicalPhaseDirName(mid, getMilestone(mid)?.title);
|
|
3016
|
+
const newDir = join(targetBase, dirName);
|
|
3017
|
+
// Legacy projects use a slices/ subdir; flat-phase uses top-level plan files (no slices/).
|
|
3018
|
+
mkdirSync(isLegacyLayout ? join(newDir, "slices") : newDir, { recursive: true });
|
|
2921
3019
|
}
|
|
2922
3020
|
|
|
2923
3021
|
if (sid !== undefined) {
|
|
3022
|
+
const isLegacyLayout = isLegacyMilestonesLayout(base);
|
|
3023
|
+
// Flat-phase: tasks are checkboxes in NN-MM-PLAN.md — no slices/ subdir needed.
|
|
3024
|
+
if (!isLegacyLayout) return;
|
|
2924
3025
|
|
|
2925
3026
|
const mDirResolved = resolveMilestonePath(base, mid);
|
|
2926
3027
|
if (mDirResolved) {
|
|
@@ -33,6 +33,7 @@ import { shouldIgnoreAgentEndForActiveUnit } from "../auto/unit-runner-events.js
|
|
|
33
33
|
import { resolveModelId } from "../auto-model-selection.js";
|
|
34
34
|
import { resolveProjectRoot } from "../worktree.js";
|
|
35
35
|
import { clearDiscussionFlowState } from "./write-gate.js";
|
|
36
|
+
import { scheduleFallbackContinuation } from "./fallback-continuation.js";
|
|
36
37
|
import { clearGuidedUnitContext } from "../guided-unit-context.js";
|
|
37
38
|
import { resumeAutoAfterProviderDelay } from "./provider-error-resume.js";
|
|
38
39
|
import {
|
|
@@ -154,10 +155,7 @@ async function tryProviderModelFallback(params: ProviderModelFallbackParams): Pr
|
|
|
154
155
|
setCurrentUnitModelForRecovery(candidate);
|
|
155
156
|
setCurrentDispatchedModelId({ provider: candidate.provider, id: candidate.id });
|
|
156
157
|
switchedNotify(`${candidate.provider}/${candidate.id}`);
|
|
157
|
-
pi
|
|
158
|
-
{ customType: "gsd-auto-timeout-recovery", content: "Continue execution.", display: false },
|
|
159
|
-
{ triggerTurn: true },
|
|
160
|
-
);
|
|
158
|
+
scheduleFallbackContinuation(pi);
|
|
161
159
|
return true;
|
|
162
160
|
}
|
|
163
161
|
}
|
|
@@ -181,10 +179,7 @@ async function tryProviderModelFallback(params: ProviderModelFallbackParams): Pr
|
|
|
181
179
|
setCurrentUnitModelForRecovery(startModel);
|
|
182
180
|
setCurrentDispatchedModelId({ provider: startModel.provider, id: startModel.id });
|
|
183
181
|
switchedNotify(`${startModel.provider}/${startModel.id}`);
|
|
184
|
-
pi
|
|
185
|
-
{ customType: "gsd-auto-timeout-recovery", content: "Continue execution.", display: false },
|
|
186
|
-
{ triggerTurn: true },
|
|
187
|
-
);
|
|
182
|
+
scheduleFallbackContinuation(pi);
|
|
188
183
|
return true;
|
|
189
184
|
}
|
|
190
185
|
}
|
|
@@ -664,7 +659,28 @@ export async function handleAgentEnd(
|
|
|
664
659
|
return;
|
|
665
660
|
}
|
|
666
661
|
|
|
662
|
+
// ── Tool-schema overload: the active model repeatedly emitted tool-call
|
|
663
|
+
// arguments that fail schema validation (e.g. a model whose tool-call
|
|
664
|
+
// grammar can't satisfy GSD's schemas). Before hard-pausing, try the
|
|
665
|
+
// unit's configured fallbacks and the auto-mode start model — the model
|
|
666
|
+
// the user actually selected. This lets auto-mode recover by switching
|
|
667
|
+
// back to a schema-capable model instead of aborting outright (#813).
|
|
668
|
+
// Do not persistently block the model: schema-overload is request-shape
|
|
669
|
+
// specific, mirroring the model-error path above.
|
|
667
670
|
if (cls.kind === "tool-schema") {
|
|
671
|
+
const dash = getAutoDashboardData();
|
|
672
|
+
const switched = await tryProviderModelFallback({
|
|
673
|
+
ctx,
|
|
674
|
+
pi,
|
|
675
|
+
rejectedProvider: ctx.model?.provider,
|
|
676
|
+
rejectedId: ctx.model?.id,
|
|
677
|
+
basePath: dash.basePath,
|
|
678
|
+
unitType: dash.currentUnit?.type,
|
|
679
|
+
switchedNotify: (label) =>
|
|
680
|
+
ctx.ui.notify(`Switched to ${label} after repeated tool schema validation failures.`, "warning"),
|
|
681
|
+
});
|
|
682
|
+
if (switched) return;
|
|
683
|
+
|
|
668
684
|
await pauseAutoForProviderError(ctx.ui, errorDetail, () => pauseAuto(ctx, pi, {
|
|
669
685
|
message: `Tool schema error${errorDetail}`,
|
|
670
686
|
category: "tool-schema",
|
|
@@ -677,11 +693,15 @@ export async function handleAgentEnd(
|
|
|
677
693
|
return;
|
|
678
694
|
}
|
|
679
695
|
|
|
680
|
-
// Cap rate-limit backoff for CLI-style providers (openai-codex, google-gemini-cli)
|
|
696
|
+
// Cap rate-limit backoff for CLI-style providers (openai-codex, google-gemini-cli, google-antigravity)
|
|
681
697
|
// which use per-user quotas with shorter windows (#2922).
|
|
682
698
|
if (cls.kind === "rate-limit") {
|
|
683
699
|
const currentProvider = ctx.model?.provider;
|
|
684
|
-
if (
|
|
700
|
+
if (
|
|
701
|
+
currentProvider === "openai-codex"
|
|
702
|
+
|| currentProvider === "google-gemini-cli"
|
|
703
|
+
|| currentProvider === "google-antigravity"
|
|
704
|
+
) {
|
|
685
705
|
cls.retryAfterMs = Math.min(cls.retryAfterMs, 30_000);
|
|
686
706
|
}
|
|
687
707
|
const dash = getAutoDashboardData();
|
|
@@ -728,58 +748,22 @@ export async function handleAgentEnd(
|
|
|
728
748
|
// --- Transient errors: try model fallback first, then pause ---
|
|
729
749
|
// Rate limits are often per-model, so switching models can bypass them.
|
|
730
750
|
if (cls.kind === "rate-limit" || cls.kind === "network" || cls.kind === "server" || cls.kind === "connection" || cls.kind === "stream") {
|
|
731
|
-
// Try model fallback
|
|
732
751
|
const dash = getAutoDashboardData();
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
if (ok) {
|
|
749
|
-
setCurrentUnitModelForRecovery(modelToSet);
|
|
750
|
-
setCurrentDispatchedModelId({ provider: modelToSet.provider, id: modelToSet.id });
|
|
751
|
-
ctx.ui.notify(`Model error${errorDetail}. Switched to fallback: ${nextModelId} and resuming.`, "warning");
|
|
752
|
-
pi.sendMessage({ customType: "gsd-auto-timeout-recovery", content: "Continue execution.", display: false }, { triggerTurn: true });
|
|
753
|
-
return;
|
|
754
|
-
}
|
|
755
|
-
}
|
|
756
|
-
}
|
|
757
|
-
}
|
|
758
|
-
}
|
|
759
|
-
|
|
760
|
-
// Try restoring session model
|
|
761
|
-
const sessionModel = getAutoModeStartModel();
|
|
762
|
-
if (sessionModel) {
|
|
763
|
-
const dash = getAutoDashboardData();
|
|
764
|
-
const sessionModelUnavailable = dash.basePath
|
|
765
|
-
? isModelBlocked(dash.basePath, sessionModel.provider, sessionModel.id) ||
|
|
766
|
-
isModelTemporarilyUnavailable(dash.basePath, sessionModel.provider, sessionModel.id)
|
|
767
|
-
: false;
|
|
768
|
-
if (!sessionModelUnavailable && (ctx.model?.id !== sessionModel.id || ctx.model?.provider !== sessionModel.provider)) {
|
|
769
|
-
const startModel = ctx.modelRegistry.getAvailable().find((m) => m.provider === sessionModel.provider && m.id === sessionModel.id);
|
|
770
|
-
if (startModel) {
|
|
771
|
-
const ok = await pi.setModel(startModel, { persist: false });
|
|
772
|
-
if (ok) {
|
|
773
|
-
setCurrentUnitModelForRecovery(startModel);
|
|
774
|
-
setCurrentDispatchedModelId({ provider: startModel.provider, id: startModel.id });
|
|
775
|
-
retryState.networkRetryCount = 0;
|
|
776
|
-
retryState.currentRetryModelId = undefined;
|
|
777
|
-
ctx.ui.notify(`Model error${errorDetail}. Restored session model: ${sessionModel.provider}/${sessionModel.id} and resuming.`, "warning");
|
|
778
|
-
pi.sendMessage({ customType: "gsd-auto-timeout-recovery", content: "Continue execution.", display: false }, { triggerTurn: true });
|
|
779
|
-
return;
|
|
780
|
-
}
|
|
781
|
-
}
|
|
782
|
-
}
|
|
752
|
+
const switched = await tryProviderModelFallback({
|
|
753
|
+
ctx,
|
|
754
|
+
pi,
|
|
755
|
+
rejectedProvider: ctx.model?.provider,
|
|
756
|
+
rejectedId: ctx.model?.id,
|
|
757
|
+
basePath: dash.basePath,
|
|
758
|
+
unitType: dash.currentUnit?.type,
|
|
759
|
+
switchedNotify: (label) => {
|
|
760
|
+
retryState.networkRetryCount = 0;
|
|
761
|
+
retryState.currentRetryModelId = undefined;
|
|
762
|
+
ctx.ui.notify(`Model error${errorDetail}. Switched to fallback: ${label} and resuming.`, "warning");
|
|
763
|
+
},
|
|
764
|
+
});
|
|
765
|
+
if (switched) {
|
|
766
|
+
return;
|
|
783
767
|
}
|
|
784
768
|
}
|
|
785
769
|
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// gsd-pi + src/resources/extensions/gsd/bootstrap/fallback-continuation.ts - Dispatches the post-fallback-switch continuation on a fresh turn.
|
|
2
|
+
// Copyright (c) 2026 Jeremy McSpadden <jeremy@fluxlabs.net>
|
|
3
|
+
|
|
4
|
+
import type { ExtensionAPI } from "@gsd/pi-coding-agent";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Dispatch the post-fallback continuation on a *fresh* turn after the current
|
|
8
|
+
* run settles.
|
|
9
|
+
*
|
|
10
|
+
* #804: At `agent_end` time the agent's run is still tearing down — its
|
|
11
|
+
* `isStreaming` flag stays `true` until `finishRun()` clears it in the `finally`
|
|
12
|
+
* block that fires *after* the awaited `agent_end` listeners return (see
|
|
13
|
+
* pi-agent-core/src/agent.ts processEvents comment). A synchronous
|
|
14
|
+
* `sendMessage({ triggerTurn: true, deliverAs: "steer" })` from inside that
|
|
15
|
+
* listener is therefore routed down the `isStreaming` branch and queued as a
|
|
16
|
+
* steering message against the turn that just errored out — which is never
|
|
17
|
+
* consumed, so the fallback model is selected but no new turn ever starts (the
|
|
18
|
+
* reported symptom: "switched but work stays stopped").
|
|
19
|
+
*
|
|
20
|
+
* Deferring to a macrotask lets `finishRun()` flip `isStreaming` to `false`
|
|
21
|
+
* first; the plain `triggerTurn` (no `deliverAs`) then dispatches a fresh turn
|
|
22
|
+
* on the freshly-selected fallback model, mirroring the network-retry path.
|
|
23
|
+
*/
|
|
24
|
+
export function scheduleFallbackContinuation(pi: ExtensionAPI): void {
|
|
25
|
+
setTimeout(() => {
|
|
26
|
+
pi.sendMessage(
|
|
27
|
+
{ customType: "gsd-auto-timeout-recovery", content: "Continue execution.", display: false },
|
|
28
|
+
{ triggerTurn: true },
|
|
29
|
+
);
|
|
30
|
+
}, 0);
|
|
31
|
+
}
|