@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
|
@@ -33,14 +33,27 @@ import { pauseAuto } from "./auto.js";
|
|
|
33
33
|
import { resolveCanonicalMilestoneRoot } from "./worktree-manager.js";
|
|
34
34
|
import { getUnitWorkflowDispatchReadinessError } from "./tool-contract.js";
|
|
35
35
|
|
|
36
|
+
export function parseDirectDispatchPhase(raw: string): { phase: string; milestoneId?: string } {
|
|
37
|
+
const tokens = raw.trim().split(/\s+/).filter(Boolean);
|
|
38
|
+
if (tokens.length === 0) return { phase: "" };
|
|
39
|
+
const phase = tokens[0].toLowerCase();
|
|
40
|
+
const milestoneToken = tokens.find((token, index) => index > 0 && /^M\d/i.test(token));
|
|
41
|
+
return {
|
|
42
|
+
phase,
|
|
43
|
+
milestoneId: milestoneToken?.replace(/[.,;:!?]+$/, ""),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
|
|
36
47
|
export async function dispatchDirectPhase(
|
|
37
48
|
ctx: ExtensionCommandContext,
|
|
38
49
|
pi: ExtensionAPI,
|
|
39
50
|
phase: string,
|
|
40
51
|
base: string,
|
|
52
|
+
opts: { milestoneId?: string } = {},
|
|
41
53
|
): Promise<void> {
|
|
54
|
+
const parsed = parseDirectDispatchPhase(phase);
|
|
42
55
|
const state = await deriveState(base);
|
|
43
|
-
const mid = state.activeMilestone?.id;
|
|
56
|
+
const mid = opts.milestoneId ?? parsed.milestoneId ?? state.activeMilestone?.id;
|
|
44
57
|
const midTitle = state.activeMilestone?.title ?? "";
|
|
45
58
|
|
|
46
59
|
if (!mid) {
|
|
@@ -56,7 +69,7 @@ export async function dispatchDirectPhase(
|
|
|
56
69
|
// though the milestone's actual code lives in the worktree.
|
|
57
70
|
const dispatchBase = resolveCanonicalMilestoneRoot(base, mid);
|
|
58
71
|
|
|
59
|
-
const normalized = phase
|
|
72
|
+
const normalized = parsed.phase;
|
|
60
73
|
let unitType: string;
|
|
61
74
|
let unitId: string;
|
|
62
75
|
let prompt: string;
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* without modifying orchestration code.
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
|
-
import type { GSDState } from "./types.js";
|
|
15
|
+
import type { GSDState, TaskIO } from "./types.js";
|
|
16
16
|
import type { GSDPreferences } from "./preferences.js";
|
|
17
17
|
import type { MinimalModelRegistry } from "./context-budget.js";
|
|
18
18
|
import { loadFile, extractUatType, loadActiveOverrides } from "./files.js";
|
|
@@ -44,15 +44,15 @@ import {
|
|
|
44
44
|
resolveTaskFile,
|
|
45
45
|
relTaskFile,
|
|
46
46
|
relSliceFile,
|
|
47
|
+
relMilestoneFile,
|
|
47
48
|
buildMilestoneFileName,
|
|
48
|
-
buildSliceFileName,
|
|
49
49
|
buildTaskFileName,
|
|
50
50
|
gsdProjectionRoot,
|
|
51
51
|
} from "./paths.js";
|
|
52
52
|
import { validateArtifact } from "./schemas/validate.js";
|
|
53
53
|
import { existsSync, mkdirSync, readFileSync, writeFileSync, unlinkSync, readdirSync } from "node:fs";
|
|
54
54
|
import { logWarning, logError } from "./workflow-logger.js";
|
|
55
|
-
import { dirname, join } from "node:path";
|
|
55
|
+
import { dirname, join, sep } from "node:path";
|
|
56
56
|
import { hasImplementationArtifacts } from "./milestone-implementation-evidence.js";
|
|
57
57
|
import {
|
|
58
58
|
buildDiscussMilestonePrompt,
|
|
@@ -179,6 +179,26 @@ type ResearchProjectPromptBuilder = typeof buildResearchProjectPrompt;
|
|
|
179
179
|
let reassessmentChecker: ReassessmentChecker = checkNeedsReassessment;
|
|
180
180
|
let researchProjectPromptBuilder: ResearchProjectPromptBuilder = buildResearchProjectPrompt;
|
|
181
181
|
|
|
182
|
+
/**
|
|
183
|
+
* Optional override for the reactive graph derivation step inside the
|
|
184
|
+
* "executing → reactive-execute" rule. Production leaves this null so the rule
|
|
185
|
+
* uses the real loadSliceTaskIO + deriveTaskGraph; tests inject a throwing
|
|
186
|
+
* function to deterministically exercise the best-effort failure path
|
|
187
|
+
* (auto-dispatch.ts:1494). The catch is otherwise unreachable because every
|
|
188
|
+
* operation it wraps (loadSliceTaskIO, deriveTaskGraph, saveReactiveState) is
|
|
189
|
+
* internally defensive.
|
|
190
|
+
* @internal
|
|
191
|
+
*/
|
|
192
|
+
let _reactiveGraphDeriveFn: ((basePath: string, mid: string, sid: string) => Promise<TaskIO[]>) | null = null;
|
|
193
|
+
|
|
194
|
+
export function setReactiveGraphDeriveFnForTest(
|
|
195
|
+
fn: ((basePath: string, mid: string, sid: string) => Promise<TaskIO[]>) | null,
|
|
196
|
+
): () => void {
|
|
197
|
+
const previous = _reactiveGraphDeriveFn;
|
|
198
|
+
_reactiveGraphDeriveFn = fn;
|
|
199
|
+
return () => { _reactiveGraphDeriveFn = previous; };
|
|
200
|
+
}
|
|
201
|
+
|
|
182
202
|
function shouldBypassMilestoneDepthGateInAuto(prefs: GSDPreferences | undefined): boolean {
|
|
183
203
|
return isAutoActive() && prefs?.planning_depth !== "deep";
|
|
184
204
|
}
|
|
@@ -502,9 +522,8 @@ function backfillMissingAssessmentsFromSummaries(basePath: string, mid: string):
|
|
|
502
522
|
const summaryPath = resolveSliceFile(basePath, mid, sliceId, "SUMMARY");
|
|
503
523
|
if (!summaryPath || !existsSync(summaryPath)) continue;
|
|
504
524
|
|
|
505
|
-
const slicePath = resolveSlicePath(basePath, mid, sliceId);
|
|
506
525
|
const assessmentPath = resolveSliceFile(basePath, mid, sliceId, "ASSESSMENT")
|
|
507
|
-
?? (
|
|
526
|
+
?? join(basePath, relSliceFile(basePath, mid, sliceId, "ASSESSMENT"));
|
|
508
527
|
if (!assessmentPath) continue;
|
|
509
528
|
|
|
510
529
|
const assessmentRelPath = relSliceFile(basePath, mid, sliceId, "ASSESSMENT");
|
|
@@ -1421,7 +1440,9 @@ export const DISPATCH_RULES: DispatchRule[] = [
|
|
|
1421
1440
|
graphMetrics,
|
|
1422
1441
|
} = await import("./reactive-graph.js");
|
|
1423
1442
|
|
|
1424
|
-
const taskIO =
|
|
1443
|
+
const taskIO = _reactiveGraphDeriveFn
|
|
1444
|
+
? await _reactiveGraphDeriveFn(basePath, mid, sid)
|
|
1445
|
+
: await loadSliceTaskIO(basePath, mid, sid);
|
|
1425
1446
|
if (taskIO.length < 2) return null; // single task, no point
|
|
1426
1447
|
|
|
1427
1448
|
const graph = deriveTaskGraph(taskIO);
|
|
@@ -1510,8 +1531,25 @@ export const DISPATCH_RULES: DispatchRule[] = [
|
|
|
1510
1531
|
// missing, the planner created S##-PLAN.md with task entries but never
|
|
1511
1532
|
// wrote the tasks/ directory files. Dispatch plan-slice to regenerate
|
|
1512
1533
|
// them rather than hard-stopping — fixes the infinite-loop described in
|
|
1513
|
-
// issue #909.
|
|
1534
|
+
// issue #909. Flat-phase layout embeds tasks in the slice plan file, so
|
|
1535
|
+
// skip recovery when tasks are embedded (<tasks> block or task checkboxes in phases/ plan).
|
|
1514
1536
|
const taskPlanPath = resolveTaskFile(artifactBasePath, mid, sid, tid, "PLAN");
|
|
1537
|
+
const slicePlanPath = resolveSliceFile(artifactBasePath, mid, sid, "PLAN");
|
|
1538
|
+
const phasesRoot = join(gsdProjectionRoot(artifactBasePath), "phases");
|
|
1539
|
+
const slicePlanContent = slicePlanPath && existsSync(slicePlanPath)
|
|
1540
|
+
? readFileSync(slicePlanPath, "utf-8")
|
|
1541
|
+
: "";
|
|
1542
|
+
const isPhasesSlicePlan =
|
|
1543
|
+
slicePlanPath !== null &&
|
|
1544
|
+
(slicePlanPath === phasesRoot || slicePlanPath.startsWith(`${phasesRoot}${sep}`));
|
|
1545
|
+
const hasTaskCheckboxes = /^-\s+\[[ xX]\]\s+\*\*[\w.]+/m.test(slicePlanContent);
|
|
1546
|
+
const tasksEmbeddedInSlicePlan = Boolean(
|
|
1547
|
+
slicePlanPath &&
|
|
1548
|
+
existsSync(slicePlanPath) &&
|
|
1549
|
+
(slicePlanContent.includes("<tasks>") || (isPhasesSlicePlan && hasTaskCheckboxes)),
|
|
1550
|
+
);
|
|
1551
|
+
// tasksEmbeddedInSlicePlan is true when tasks live inside the slice plan
|
|
1552
|
+
// (flat-phase phases/ layout with task checkboxes or renderPlanFromDb <tasks> block).
|
|
1515
1553
|
const projectionTaskPlanPath = join(
|
|
1516
1554
|
gsdProjectionRoot(artifactBasePath),
|
|
1517
1555
|
"milestones",
|
|
@@ -1521,7 +1559,11 @@ export const DISPATCH_RULES: DispatchRule[] = [
|
|
|
1521
1559
|
"tasks",
|
|
1522
1560
|
buildTaskFileName(tid, "PLAN"),
|
|
1523
1561
|
);
|
|
1524
|
-
if (
|
|
1562
|
+
if (
|
|
1563
|
+
(!taskPlanPath || !existsSync(taskPlanPath)) &&
|
|
1564
|
+
!existsSync(projectionTaskPlanPath) &&
|
|
1565
|
+
!tasksEmbeddedInSlicePlan
|
|
1566
|
+
) {
|
|
1525
1567
|
if (isDebugEnabled()) {
|
|
1526
1568
|
const expectedTaskPlanPath = join(artifactBasePath, relTaskFile(artifactBasePath, mid, sid, tid, "PLAN"));
|
|
1527
1569
|
const originalProjectRoot = session?.originalBasePath || basePath;
|
|
@@ -1653,10 +1695,13 @@ export const DISPATCH_RULES: DispatchRule[] = [
|
|
|
1653
1695
|
};
|
|
1654
1696
|
}
|
|
1655
1697
|
if (!existsSync(mDir)) mkdirSync(mDir, { recursive: true });
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
)
|
|
1698
|
+
// Use relMilestoneFile for the layout-aware filename:
|
|
1699
|
+
// legacy → milestones/M001/M001-VALIDATION.md
|
|
1700
|
+
// flat-phase → phases/01-slug/01-VALIDATION.md
|
|
1701
|
+
// When the milestone dir is only in the project root (worktree has none),
|
|
1702
|
+
// write to the project root so the artifact lands in the canonical location.
|
|
1703
|
+
const writeBase = resolveMilestonePath(artifactBasePath, mid) != null ? artifactBasePath : projectRoot;
|
|
1704
|
+
const validationPath = join(writeBase, relMilestoneFile(writeBase, mid, "VALIDATION"));
|
|
1660
1705
|
const skipSource = trivialVariant
|
|
1661
1706
|
? "trivial-scope pipeline variant"
|
|
1662
1707
|
: "`skip_milestone_validation` preference";
|
|
@@ -17,6 +17,7 @@ import { unitPhaseLabel } from "./auto-dashboard.js";
|
|
|
17
17
|
import { getSessionModelOverride } from "./session-model-override.js";
|
|
18
18
|
import { logWarning } from "./workflow-logger.js";
|
|
19
19
|
import { resolveUokFlags } from "./uok/flags.js";
|
|
20
|
+
import { modelIdsForProfileResolution, resolveProfileAnchorProvider, resolveDisabledModelProvidersFromPreferences } from "./preferences.js";
|
|
20
21
|
import { applyModelPolicyFilter } from "./uok/model-policy.js";
|
|
21
22
|
import { isModelBlocked, isModelTemporarilyUnavailable } from "./blocked-models.js";
|
|
22
23
|
import { getRequiredWorkflowToolsForAutoUnit, isWorkflowMcpSurfaceTool } from "./workflow-mcp.js";
|
|
@@ -404,8 +405,11 @@ export function resolvePreferredModelConfig(
|
|
|
404
405
|
unitType: string,
|
|
405
406
|
autoModeStartModel: { provider: string; id: string; flatRateCtx?: FlatRateContext } | null,
|
|
406
407
|
isAutoMode = true,
|
|
408
|
+
basePath?: string,
|
|
409
|
+
availableModelIds?: string[],
|
|
410
|
+
preferredModelId?: string,
|
|
407
411
|
): PreferredModelConfig | undefined {
|
|
408
|
-
const explicitConfig = resolveModelWithFallbacksForUnit(unitType);
|
|
412
|
+
const explicitConfig = resolveModelWithFallbacksForUnit(unitType, basePath, availableModelIds, preferredModelId);
|
|
409
413
|
if (explicitConfig) {
|
|
410
414
|
return {
|
|
411
415
|
...explicitConfig,
|
|
@@ -475,8 +479,14 @@ export async function selectAndApplyModel(
|
|
|
475
479
|
// With no explicit level, fall back to the auto-start session level and raise
|
|
476
480
|
// the code-writing floor — preserving prior behavior exactly. Recomputed per
|
|
477
481
|
// dispatch so neither the floor nor a phase override leaks to other units.
|
|
482
|
+
const anchorProvider = resolveProfileAnchorProvider(ctx.model?.provider, autoModeStartModel?.provider);
|
|
483
|
+
const profileResolutionIds = modelIdsForProfileResolution(
|
|
484
|
+
ctx.modelRegistry,
|
|
485
|
+
anchorProvider,
|
|
486
|
+
resolveDisabledModelProvidersFromPreferences(),
|
|
487
|
+
);
|
|
478
488
|
const explicitThinkingLevel =
|
|
479
|
-
resolveThinkingLevelForUnit(unitType) as ReturnType<ExtensionAPI["getThinkingLevel"]> | undefined;
|
|
489
|
+
resolveThinkingLevelForUnit(unitType, basePath, profileResolutionIds) as ReturnType<ExtensionAPI["getThinkingLevel"]> | undefined;
|
|
480
490
|
const desiredThinkingLevel = explicitThinkingLevel
|
|
481
491
|
?? floorThinkingLevelForUnit(unitType, autoModeStartThinkingLevel);
|
|
482
492
|
if (explicitThinkingLevel) {
|
|
@@ -518,9 +528,19 @@ export async function selectAndApplyModel(
|
|
|
518
528
|
flatRateCtx: buildFlatRateContext(autoModeStartModel.provider, ctx, prefs),
|
|
519
529
|
};
|
|
520
530
|
}
|
|
531
|
+
const preferredModelId = autoModeStartModel
|
|
532
|
+
? `${autoModeStartModel.provider}/${autoModeStartModel.id}`
|
|
533
|
+
: ctx.model ? `${ctx.model.provider}/${ctx.model.id}` : undefined;
|
|
521
534
|
const modelConfig = effectiveSessionModelOverride
|
|
522
535
|
? undefined
|
|
523
|
-
: resolvePreferredModelConfig(
|
|
536
|
+
: resolvePreferredModelConfig(
|
|
537
|
+
unitType,
|
|
538
|
+
autoModeStartModel,
|
|
539
|
+
isAutoMode,
|
|
540
|
+
basePath,
|
|
541
|
+
profileResolutionIds,
|
|
542
|
+
preferredModelId,
|
|
543
|
+
);
|
|
524
544
|
let routing: { tier: string; modelDowngraded: boolean } | null = null;
|
|
525
545
|
let appliedModel: Model<Api> | null = null;
|
|
526
546
|
|
|
@@ -722,6 +742,7 @@ export async function selectAndApplyModel(
|
|
|
722
742
|
classification.tier,
|
|
723
743
|
availableModelIds,
|
|
724
744
|
routingConfig,
|
|
745
|
+
preferredModelId,
|
|
725
746
|
);
|
|
726
747
|
const hookResult = await pi.emitBeforeModelSelect({
|
|
727
748
|
unitType,
|
|
@@ -766,6 +787,7 @@ export async function selectAndApplyModel(
|
|
|
766
787
|
unitType,
|
|
767
788
|
classification.taskMetadata,
|
|
768
789
|
capabilityOverrides,
|
|
790
|
+
preferredModelId,
|
|
769
791
|
);
|
|
770
792
|
}
|
|
771
793
|
|
|
@@ -1068,16 +1090,16 @@ export function resolveModelId<T extends { id: string; provider: string }>(
|
|
|
1068
1090
|
*
|
|
1069
1091
|
* Order rationale:
|
|
1070
1092
|
* - openai-codex before github-copilot: ChatGPT-native for shared GPT IDs
|
|
1071
|
-
* - google-
|
|
1093
|
+
* - google-antigravity before google-gemini-cli: Antigravity replaced Gemini CLI for individuals
|
|
1072
1094
|
* - anthropic before github-copilot: first-party Claude API/OAuth over Copilot
|
|
1073
1095
|
* - github-copilot before openai/google: Copilot OAuth over platform API keys
|
|
1074
1096
|
*/
|
|
1075
1097
|
export const BARE_ID_SUBSCRIPTION_PROVIDER_PRECEDENCE = [
|
|
1076
1098
|
"openai-codex",
|
|
1099
|
+
"google-antigravity",
|
|
1077
1100
|
"google-gemini-cli",
|
|
1078
1101
|
"anthropic",
|
|
1079
1102
|
"github-copilot",
|
|
1080
|
-
"google-antigravity",
|
|
1081
1103
|
] as const;
|
|
1082
1104
|
|
|
1083
1105
|
/**
|
|
@@ -20,13 +20,16 @@ import { loadFile, parseSummary, resolveAllOverrides } from "./files.js";
|
|
|
20
20
|
import { loadPrompt } from "./prompt-loader.js";
|
|
21
21
|
import { isAwaitingUserInput } from "./consent-question.js";
|
|
22
22
|
import {
|
|
23
|
-
resolveMilestonePath,
|
|
24
23
|
resolveSliceFile,
|
|
25
24
|
resolveSlicePath,
|
|
25
|
+
relSlicePath,
|
|
26
26
|
resolveTaskFile,
|
|
27
27
|
resolveMilestoneFile,
|
|
28
28
|
resolveTasksDir,
|
|
29
|
-
|
|
29
|
+
resolveFile,
|
|
30
|
+
relMilestoneFile,
|
|
31
|
+
relSliceFile,
|
|
32
|
+
relTaskFile,
|
|
30
33
|
} from "./paths.js";
|
|
31
34
|
import { invalidateAllCaches } from "./cache.js";
|
|
32
35
|
import { rebuildState } from "./doctor.js";
|
|
@@ -233,7 +236,6 @@ function completeSliceReopenReplanHandoffDetected(
|
|
|
233
236
|
return (
|
|
234
237
|
agentEndMessagesIncludeSuccessfulToolResult(agentEndMessages, "gsd_task_reopen") ||
|
|
235
238
|
agentEndMessagesIncludeToolCall(agentEndMessages, "gsd_task_reopen") ||
|
|
236
|
-
agentEndMessagesMentionTool(agentEndMessages, "gsd_task_reopen") ||
|
|
237
239
|
unitActivityMentionsTool(s.basePath, unitType, unitId, "gsd_task_reopen") ||
|
|
238
240
|
unitActivityMentionsTool(s.canonicalProjectRoot, unitType, unitId, "gsd_task_reopen")
|
|
239
241
|
);
|
|
@@ -247,7 +249,6 @@ function completeSliceReplanSignalDetected(
|
|
|
247
249
|
return (
|
|
248
250
|
agentEndMessagesIncludeSuccessfulToolResult(agentEndMessages, "gsd_replan_slice") ||
|
|
249
251
|
agentEndMessagesIncludeToolCall(agentEndMessages, "gsd_replan_slice") ||
|
|
250
|
-
agentEndMessagesMentionTool(agentEndMessages, "gsd_replan_slice") ||
|
|
251
252
|
unitActivityMentionsTool(s.basePath, s.currentUnit.type, s.currentUnit.id, "gsd_replan_slice") ||
|
|
252
253
|
unitActivityMentionsTool(s.canonicalProjectRoot, s.currentUnit.type, s.currentUnit.id, "gsd_replan_slice")
|
|
253
254
|
);
|
|
@@ -441,6 +442,22 @@ function getPlannedKeyFiles(tasks: Array<
|
|
|
441
442
|
export const _parseReactiveBatchTaskIdsForTest = parseReactiveBatchTaskIds;
|
|
442
443
|
export const _getPlannedKeyFilesForTest = getPlannedKeyFiles;
|
|
443
444
|
|
|
445
|
+
function resolveTaskArtifactPath(
|
|
446
|
+
basePath: string,
|
|
447
|
+
mid: string,
|
|
448
|
+
sid: string,
|
|
449
|
+
tid: string,
|
|
450
|
+
suffix: string,
|
|
451
|
+
): string | null {
|
|
452
|
+
const legacy = resolveTaskFile(basePath, mid, sid, tid, suffix);
|
|
453
|
+
if (legacy) return legacy;
|
|
454
|
+
const slicePath = resolveSlicePath(basePath, mid, sid);
|
|
455
|
+
if (!slicePath) return null;
|
|
456
|
+
const taskDir = resolveTasksDir(basePath, mid, sid) ?? slicePath;
|
|
457
|
+
const file = resolveFile(taskDir, tid, suffix);
|
|
458
|
+
return file ? join(taskDir, file) : null;
|
|
459
|
+
}
|
|
460
|
+
|
|
444
461
|
function resolveVerificationFailureMarkerPath(
|
|
445
462
|
unitType: string,
|
|
446
463
|
unitId: string,
|
|
@@ -451,20 +468,17 @@ function resolveVerificationFailureMarkerPath(
|
|
|
451
468
|
case "complete-milestone": {
|
|
452
469
|
const existing = resolveMilestoneFile(basePath, mid, "VERIFICATION-FAILED");
|
|
453
470
|
if (existing) return existing;
|
|
454
|
-
|
|
455
|
-
return milestoneDir ? join(milestoneDir, `${mid}-VERIFICATION-FAILED.md`) : null;
|
|
471
|
+
return join(basePath, relMilestoneFile(basePath, mid, "VERIFICATION-FAILED"));
|
|
456
472
|
}
|
|
457
473
|
case "complete-slice": {
|
|
458
474
|
const existing = resolveSliceFile(basePath, mid, sid!, "VERIFICATION-FAILED");
|
|
459
475
|
if (existing) return existing;
|
|
460
|
-
|
|
461
|
-
return sliceDir ? join(sliceDir, `${sid}-VERIFICATION-FAILED.md`) : null;
|
|
476
|
+
return join(basePath, relSliceFile(basePath, mid, sid!, "VERIFICATION-FAILED"));
|
|
462
477
|
}
|
|
463
478
|
case "execute-task": {
|
|
464
|
-
const existing =
|
|
479
|
+
const existing = resolveTaskArtifactPath(basePath, mid, sid!, tid!, "VERIFICATION-FAILED");
|
|
465
480
|
if (existing) return existing;
|
|
466
|
-
|
|
467
|
-
return tasksDir ? join(tasksDir, buildTaskFileName(tid!, "VERIFICATION-FAILED")) : null;
|
|
481
|
+
return join(basePath, relTaskFile(basePath, mid, sid!, tid!, "VERIFICATION-FAILED"));
|
|
468
482
|
}
|
|
469
483
|
default:
|
|
470
484
|
return null;
|
|
@@ -483,7 +497,7 @@ async function buildTaskCommitContextForUnit(
|
|
|
483
497
|
const task = isDbAvailable() ? getTask(mid, sid, tid) : null;
|
|
484
498
|
let summary: ReturnType<typeof parseSummary> | null = null;
|
|
485
499
|
|
|
486
|
-
const summaryPath =
|
|
500
|
+
const summaryPath = resolveTaskArtifactPath(basePath, mid, sid, tid, "SUMMARY");
|
|
487
501
|
if (summaryPath) {
|
|
488
502
|
try {
|
|
489
503
|
const summaryContent = await loadFile(summaryPath);
|
|
@@ -696,7 +710,7 @@ export function detectRogueFileWrites(
|
|
|
696
710
|
if (unitType === "execute-task") {
|
|
697
711
|
if (!mid || !sid || !tid) return [];
|
|
698
712
|
|
|
699
|
-
const summaryPath =
|
|
713
|
+
const summaryPath = resolveTaskArtifactPath(basePath, mid, sid, tid, "SUMMARY");
|
|
700
714
|
if (!summaryPath || !existsSync(summaryPath)) return [];
|
|
701
715
|
|
|
702
716
|
const dbRow = getTask(mid, sid, tid);
|
|
@@ -762,7 +776,7 @@ export function detectRogueFileWrites(
|
|
|
762
776
|
} else if (unitType === "plan-task") {
|
|
763
777
|
if (!mid || !sid || !tid) return [];
|
|
764
778
|
|
|
765
|
-
const taskPlanPath =
|
|
779
|
+
const taskPlanPath = resolveTaskArtifactPath(basePath, mid, sid, tid, "PLAN");
|
|
766
780
|
if (!taskPlanPath || !existsSync(taskPlanPath)) return [];
|
|
767
781
|
|
|
768
782
|
const dbRow = getTask(mid, sid, tid);
|
|
@@ -2041,7 +2055,10 @@ export async function postUnitPreVerification(pctx: PostUnitContext, opts?: PreV
|
|
|
2041
2055
|
return "dispatched";
|
|
2042
2056
|
}
|
|
2043
2057
|
s.toolUnavailableRetries++;
|
|
2044
|
-
|
|
2058
|
+
// Exponential backoff starting at 10s (10s, 20s, 40s capped at 45s). MCP server
|
|
2059
|
+
// startup can take tens of seconds; a 1s/2s/3s linear delay re-dispatches before
|
|
2060
|
+
// the server finishes connecting, causing a stuck loop. See #817.
|
|
2061
|
+
const delayMs = Math.min(10_000 * Math.pow(2, s.toolUnavailableRetries - 1), 45_000);
|
|
2045
2062
|
debugLog("postUnit", { phase: "tool-unavailable-retry", unitType: s.currentUnit.type, unitId: s.currentUnit.id, error: s.lastToolInvocationError, attempt: s.toolUnavailableRetries, delayMs });
|
|
2046
2063
|
ctx.ui.notify(
|
|
2047
2064
|
`Tool unavailable for ${s.currentUnit.type}: ${s.lastToolInvocationError}. Waiting ${delayMs}ms for MCP server — retry ${s.toolUnavailableRetries}/${MAX_TOOL_UNAVAIL_RETRIES}.`,
|
|
@@ -2100,9 +2117,6 @@ export async function postUnitPreVerification(pctx: PostUnitContext, opts?: PreV
|
|
|
2100
2117
|
return "dispatched";
|
|
2101
2118
|
}
|
|
2102
2119
|
if (getUnitCostSpikeAction(unitCostUsd, rollingAvgUsd, resolveUnitCostSpikeMultiplier(prefs)) === "pause") {
|
|
2103
|
-
s.pendingVerificationRetry = null;
|
|
2104
|
-
s.verificationRetryCount.delete(retryKey);
|
|
2105
|
-
s.verificationRetryFailureHashes.delete(retryKey);
|
|
2106
2120
|
const advancedPastUnit = await hasArtifactCostGuardAdvancedPastUnit(
|
|
2107
2121
|
s,
|
|
2108
2122
|
ctx,
|
|
@@ -2111,6 +2125,9 @@ export async function postUnitPreVerification(pctx: PostUnitContext, opts?: PreV
|
|
|
2111
2125
|
prefs,
|
|
2112
2126
|
);
|
|
2113
2127
|
if (advancedPastUnit) {
|
|
2128
|
+
s.pendingVerificationRetry = null;
|
|
2129
|
+
s.verificationRetryCount.delete(retryKey);
|
|
2130
|
+
s.verificationRetryFailureHashes.delete(retryKey);
|
|
2114
2131
|
debugLog("postUnit", {
|
|
2115
2132
|
phase: "artifact-cost-spike-continue-after-advance",
|
|
2116
2133
|
unitType: s.currentUnit.type,
|
|
@@ -2131,14 +2148,21 @@ export async function postUnitPreVerification(pctx: PostUnitContext, opts?: PreV
|
|
|
2131
2148
|
unitCostUsd,
|
|
2132
2149
|
rollingAvgUsd,
|
|
2133
2150
|
);
|
|
2151
|
+
if (parallelBlocker) {
|
|
2152
|
+
s.pendingVerificationRetry = null;
|
|
2153
|
+
s.verificationRetryCount.delete(retryKey);
|
|
2154
|
+
s.verificationRetryFailureHashes.delete(retryKey);
|
|
2155
|
+
ctx.ui.notify(
|
|
2156
|
+
`Unit ${s.currentUnit.id} cost spike detected (${unitCostUsd.toFixed(2)} vs avg ${rollingAvgUsd.toFixed(2)}) — wrote parallel blocker and pausing auto-mode.`,
|
|
2157
|
+
"error",
|
|
2158
|
+
);
|
|
2159
|
+
await pauseAuto(ctx, pi);
|
|
2160
|
+
return "dispatched";
|
|
2161
|
+
}
|
|
2134
2162
|
ctx.ui.notify(
|
|
2135
|
-
|
|
2136
|
-
|
|
2137
|
-
: `Unit ${s.currentUnit.id} cost spike detected (${unitCostUsd.toFixed(2)} vs avg ${rollingAvgUsd.toFixed(2)}) — pausing auto-mode.`,
|
|
2138
|
-
"error",
|
|
2163
|
+
`Unit ${s.currentUnit.id} cost spike detected (${unitCostUsd.toFixed(2)} vs avg ${rollingAvgUsd.toFixed(2)}) during artifact verification retry; keeping verification failure as the authoritative blocker.`,
|
|
2164
|
+
"warning",
|
|
2139
2165
|
);
|
|
2140
|
-
await pauseAuto(ctx, pi);
|
|
2141
|
-
return "dispatched";
|
|
2142
2166
|
}
|
|
2143
2167
|
const attempt = (s.verificationRetryCount.get(retryKey) ?? 0) + 1;
|
|
2144
2168
|
const failureDetails = describeArtifactVerificationFailure(
|
|
@@ -2344,12 +2368,9 @@ export async function postUnitPostVerification(pctx: PostUnitContext): Promise<"
|
|
|
2344
2368
|
// 2. Delete SUMMARY.md for the task
|
|
2345
2369
|
if (mid && sid && tid) {
|
|
2346
2370
|
// Phase C: read+delete via canonical project root.
|
|
2347
|
-
const
|
|
2348
|
-
if (
|
|
2349
|
-
|
|
2350
|
-
if (existsSync(summaryFile)) {
|
|
2351
|
-
unlinkSync(summaryFile);
|
|
2352
|
-
}
|
|
2371
|
+
const summaryPath = resolveTaskArtifactPath(s.canonicalProjectRoot, mid, sid, tid, "SUMMARY");
|
|
2372
|
+
if (summaryPath && existsSync(summaryPath)) {
|
|
2373
|
+
unlinkSync(summaryPath);
|
|
2353
2374
|
}
|
|
2354
2375
|
}
|
|
2355
2376
|
|
|
@@ -2508,7 +2529,7 @@ export async function postUnitPostVerification(pctx: PostUnitContext): Promise<"
|
|
|
2508
2529
|
// Write evidence JSON to slice artifacts directory
|
|
2509
2530
|
const slicePath = resolveSlicePath(s.canonicalProjectRoot, mid, sid);
|
|
2510
2531
|
const evidenceFileName = `${sid}-PRE-EXEC-VERIFY.json`;
|
|
2511
|
-
let evidencePath = join(
|
|
2532
|
+
let evidencePath = join(relSlicePath(s.canonicalProjectRoot, mid, sid), evidenceFileName);
|
|
2512
2533
|
if (slicePath) {
|
|
2513
2534
|
writePreExecutionEvidence(result, slicePath, mid, sid);
|
|
2514
2535
|
evidencePath = relative(s.canonicalProjectRoot, join(slicePath, evidenceFileName)) || evidenceFileName;
|
|
@@ -1343,22 +1343,33 @@ export function extractSliceExecutionExcerpt(content: string | null, relPath: st
|
|
|
1343
1343
|
|
|
1344
1344
|
// ─── Prior Task Summaries ──────────────────────────────────────────────────
|
|
1345
1345
|
|
|
1346
|
+
/** Resolve where task SUMMARY files live (legacy tasks/ subdir or flat-phase phase dir). */
|
|
1347
|
+
function resolveTaskSummariesLocation(
|
|
1348
|
+
base: string, mid: string, sid: string,
|
|
1349
|
+
): { dir: string; relPrefix: string } | null {
|
|
1350
|
+
const slicePath = resolveSlicePath(base, mid, sid);
|
|
1351
|
+
if (!slicePath) return null;
|
|
1352
|
+
const tDir = resolveTasksDir(base, mid, sid);
|
|
1353
|
+
const sRel = relSlicePath(base, mid, sid);
|
|
1354
|
+
if (tDir) return { dir: tDir, relPrefix: `${sRel}/tasks` };
|
|
1355
|
+
return { dir: slicePath, relPrefix: sRel };
|
|
1356
|
+
}
|
|
1357
|
+
|
|
1346
1358
|
export async function getPriorTaskSummaryPaths(
|
|
1347
1359
|
mid: string, sid: string, currentTid: string, base: string,
|
|
1348
1360
|
): Promise<string[]> {
|
|
1349
|
-
const
|
|
1350
|
-
if (!
|
|
1361
|
+
const loc = resolveTaskSummariesLocation(base, mid, sid);
|
|
1362
|
+
if (!loc) return [];
|
|
1351
1363
|
|
|
1352
|
-
const summaryFiles = resolveTaskFiles(
|
|
1364
|
+
const summaryFiles = resolveTaskFiles(loc.dir, "SUMMARY");
|
|
1353
1365
|
const currentNum = parseInt(currentTid.replace(/^T/, ""), 10);
|
|
1354
|
-
const sRel = relSlicePath(base, mid, sid);
|
|
1355
1366
|
|
|
1356
1367
|
return summaryFiles
|
|
1357
1368
|
.filter(f => {
|
|
1358
1369
|
const num = parseInt(f.replace(/^T/, ""), 10);
|
|
1359
1370
|
return num < currentNum;
|
|
1360
1371
|
})
|
|
1361
|
-
.map(f => `${
|
|
1372
|
+
.map(f => `${loc.relPrefix}/${f}`);
|
|
1362
1373
|
}
|
|
1363
1374
|
|
|
1364
1375
|
/**
|
|
@@ -1380,11 +1391,10 @@ export async function getDependencyTaskSummaryPaths(
|
|
|
1380
1391
|
return getPriorTaskSummaryPaths(mid, sid, currentTid, base);
|
|
1381
1392
|
}
|
|
1382
1393
|
|
|
1383
|
-
const
|
|
1384
|
-
if (!
|
|
1394
|
+
const loc = resolveTaskSummariesLocation(base, mid, sid);
|
|
1395
|
+
if (!loc) return [];
|
|
1385
1396
|
|
|
1386
|
-
const summaryFiles = resolveTaskFiles(
|
|
1387
|
-
const sRel = relSlicePath(base, mid, sid);
|
|
1397
|
+
const summaryFiles = resolveTaskFiles(loc.dir, "SUMMARY");
|
|
1388
1398
|
const depSet = new Set(dependsOn.map((d) => d.toUpperCase()));
|
|
1389
1399
|
|
|
1390
1400
|
return summaryFiles
|
|
@@ -1393,7 +1403,7 @@ export async function getDependencyTaskSummaryPaths(
|
|
|
1393
1403
|
const tid = f.replace(/-SUMMARY\.md$/i, "").toUpperCase();
|
|
1394
1404
|
return depSet.has(tid);
|
|
1395
1405
|
})
|
|
1396
|
-
.map((f) => `${
|
|
1406
|
+
.map((f) => `${loc.relPrefix}/${f}`);
|
|
1397
1407
|
}
|
|
1398
1408
|
|
|
1399
1409
|
// ─── Adaptive Replanning Checks ────────────────────────────────────────────
|
|
@@ -1960,7 +1970,7 @@ export async function buildResearchMilestonePrompt(mid: string, midTitle: string
|
|
|
1960
1970
|
return loadPrompt("research-milestone", {
|
|
1961
1971
|
workingDirectory: base,
|
|
1962
1972
|
milestoneId: mid, milestoneTitle: midTitle,
|
|
1963
|
-
milestonePath: relMilestonePath(base, mid),
|
|
1973
|
+
milestonePath: relMilestonePath(base, mid, midTitle),
|
|
1964
1974
|
contextPath: relMilestoneFile(base, mid, "CONTEXT"),
|
|
1965
1975
|
outputPath: join(base, outputRelPath),
|
|
1966
1976
|
inlinedContext,
|
|
@@ -2117,7 +2127,7 @@ export async function buildPlanMilestonePrompt(mid: string, midTitle: string, ba
|
|
|
2117
2127
|
return loadPrompt("plan-milestone", {
|
|
2118
2128
|
workingDirectory: base,
|
|
2119
2129
|
milestoneId: mid, milestoneTitle: midTitle,
|
|
2120
|
-
milestonePath: relMilestonePath(base, mid),
|
|
2130
|
+
milestonePath: relMilestonePath(base, mid, midTitle),
|
|
2121
2131
|
contextPath: contextRel,
|
|
2122
2132
|
researchPath: researchRel,
|
|
2123
2133
|
researchOutputPath,
|
|
@@ -2886,17 +2896,16 @@ export async function buildCompleteSlicePrompt(
|
|
|
2886
2896
|
return body;
|
|
2887
2897
|
}
|
|
2888
2898
|
case "prior-task-summaries": {
|
|
2889
|
-
const
|
|
2890
|
-
if (!
|
|
2899
|
+
const loc = resolveTaskSummariesLocation(base, mid, sid);
|
|
2900
|
+
if (!loc) {
|
|
2891
2901
|
trackPromptContext(contextTelemetry, "prior-task-summaries", "skipped", null, "missing tasks dir");
|
|
2892
2902
|
return null;
|
|
2893
2903
|
}
|
|
2894
|
-
const summaryFiles = resolveTaskFiles(
|
|
2895
|
-
const sRel = relSlicePath(base, mid, sid);
|
|
2904
|
+
const summaryFiles = resolveTaskFiles(loc.dir, "SUMMARY").sort();
|
|
2896
2905
|
const blocks: string[] = [];
|
|
2897
2906
|
for (const file of summaryFiles) {
|
|
2898
|
-
const absPath = join(
|
|
2899
|
-
const relPath = `${
|
|
2907
|
+
const absPath = join(loc.dir, file);
|
|
2908
|
+
const relPath = `${loc.relPrefix}/${file}`;
|
|
2900
2909
|
const taskId = file.replace(/-SUMMARY\.md$/i, "");
|
|
2901
2910
|
blocks.push(await buildTaskSummaryExcerpt(absPath, relPath, taskId));
|
|
2902
2911
|
}
|
|
@@ -3178,9 +3187,11 @@ export async function buildCompleteMilestonePrompt(
|
|
|
3178
3187
|
);
|
|
3179
3188
|
emitPromptContextTelemetry("complete-milestone", contextTelemetry, inlinedContext);
|
|
3180
3189
|
|
|
3181
|
-
|
|
3190
|
+
// Use relMilestoneFile to get the layout-aware filename (NN-SUFFIX.md for flat-phase,
|
|
3191
|
+
// M001-SUFFIX.md for legacy) rather than manually appending the raw milestone id.
|
|
3192
|
+
const milestoneSummaryPath = join(base, relMilestoneFile(base, mid, "SUMMARY"));
|
|
3182
3193
|
|
|
3183
|
-
const learningsRelPath =
|
|
3194
|
+
const learningsRelPath = relMilestoneFile(base, mid, "LEARNINGS");
|
|
3184
3195
|
const learningsAbsPath = join(base, learningsRelPath);
|
|
3185
3196
|
const extractLearningsSteps = buildExtractionStepsBlock({
|
|
3186
3197
|
milestoneId: mid,
|
|
@@ -3417,8 +3428,9 @@ export async function buildValidateMilestonePrompt(
|
|
|
3417
3428
|
);
|
|
3418
3429
|
emitPromptContextTelemetry("validate-milestone", contextTelemetry, inlinedContext);
|
|
3419
3430
|
|
|
3420
|
-
|
|
3421
|
-
const
|
|
3431
|
+
// Use relMilestoneFile for layout-aware filenames (NN-SUFFIX.md flat-phase, M001-SUFFIX.md legacy).
|
|
3432
|
+
const validationOutputPath = join(base, relMilestoneFile(base, mid, "VALIDATION"));
|
|
3433
|
+
const roadmapOutputPath = relMilestoneFile(base, mid, "ROADMAP");
|
|
3422
3434
|
|
|
3423
3435
|
// Every milestone validation turn owns MV01–MV04 unconditionally: the
|
|
3424
3436
|
// registry is the source of truth for which gates the validator must
|
|
@@ -3467,16 +3479,15 @@ export async function buildReplanSlicePrompt(
|
|
|
3467
3479
|
|
|
3468
3480
|
// Find the blocker task summary — the completed task with blocker_discovered: true
|
|
3469
3481
|
let blockerTaskId = "";
|
|
3470
|
-
const
|
|
3471
|
-
if (
|
|
3472
|
-
const summaryFiles = resolveTaskFiles(
|
|
3482
|
+
const summaryLoc = resolveTaskSummariesLocation(base, mid, sid);
|
|
3483
|
+
if (summaryLoc) {
|
|
3484
|
+
const summaryFiles = resolveTaskFiles(summaryLoc.dir, "SUMMARY").sort();
|
|
3473
3485
|
for (const file of summaryFiles) {
|
|
3474
|
-
const absPath = join(
|
|
3486
|
+
const absPath = join(summaryLoc.dir, file);
|
|
3475
3487
|
const content = await loadFile(absPath);
|
|
3476
3488
|
if (!content) continue;
|
|
3477
3489
|
const summary = parseSummary(content);
|
|
3478
|
-
const
|
|
3479
|
-
const relPath = `${sRel}/tasks/${file}`;
|
|
3490
|
+
const relPath = `${summaryLoc.relPrefix}/${file}`;
|
|
3480
3491
|
if (summary.frontmatter.blocker_discovered) {
|
|
3481
3492
|
blockerTaskId = summary.frontmatter.id || file.replace(/-SUMMARY\.md$/i, "");
|
|
3482
3493
|
inlined.push(await buildTaskSummaryExcerpt(absPath, relPath, blockerTaskId, { blocker: true }));
|
|
@@ -3497,7 +3508,7 @@ export async function buildReplanSlicePrompt(
|
|
|
3497
3508
|
capPreamble(`## Inlined Context (preloaded — do not re-read these files)\n\n${inlined.join("\n\n---\n\n")}`),
|
|
3498
3509
|
);
|
|
3499
3510
|
|
|
3500
|
-
const replanPath = join(base,
|
|
3511
|
+
const replanPath = join(base, relSliceFile(base, mid, sid, "REPLAN"));
|
|
3501
3512
|
|
|
3502
3513
|
// Build capture context for replan prompt (captures that triggered this replan)
|
|
3503
3514
|
let captureContext = "(none)";
|
|
@@ -3891,7 +3902,11 @@ export async function buildReactiveExecutePrompt(
|
|
|
3891
3902
|
const taskPrompt = [
|
|
3892
3903
|
`## UNIT: Execute Task ${tid} ("${tTitle}")`,
|
|
3893
3904
|
"",
|
|
3894
|
-
"
|
|
3905
|
+
"## Working Directory",
|
|
3906
|
+
"",
|
|
3907
|
+
`Your working directory is \`${base}\`. All file reads, writes, and shell commands MUST operate relative to this directory. Do NOT \`cd\` to any other directory.`,
|
|
3908
|
+
`If any inlined plan names an absolute path outside \`${base}\`, treat it as stale — use the equivalent path under \`${base}\` before reading, writing, or executing.`,
|
|
3909
|
+
"",
|
|
3895
3910
|
"Implement from the inlined task plan below. Verify changes, then call `gsd_task_complete`.",
|
|
3896
3911
|
"Do not run git commands.",
|
|
3897
3912
|
"",
|