@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
|
@@ -11,9 +11,21 @@ import { loadEffectiveGSDPreferences } from "./preferences.js";
|
|
|
11
11
|
import { pauseAuto } from "./auto.js";
|
|
12
12
|
import { resolveCanonicalMilestoneRoot } from "./worktree-manager.js";
|
|
13
13
|
import { getUnitWorkflowDispatchReadinessError } from "./tool-contract.js";
|
|
14
|
-
export
|
|
14
|
+
export function parseDirectDispatchPhase(raw) {
|
|
15
|
+
const tokens = raw.trim().split(/\s+/).filter(Boolean);
|
|
16
|
+
if (tokens.length === 0)
|
|
17
|
+
return { phase: "" };
|
|
18
|
+
const phase = tokens[0].toLowerCase();
|
|
19
|
+
const milestoneToken = tokens.find((token, index) => index > 0 && /^M\d/i.test(token));
|
|
20
|
+
return {
|
|
21
|
+
phase,
|
|
22
|
+
milestoneId: milestoneToken?.replace(/[.,;:!?]+$/, ""),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export async function dispatchDirectPhase(ctx, pi, phase, base, opts = {}) {
|
|
26
|
+
const parsed = parseDirectDispatchPhase(phase);
|
|
15
27
|
const state = await deriveState(base);
|
|
16
|
-
const mid = state.activeMilestone?.id;
|
|
28
|
+
const mid = opts.milestoneId ?? parsed.milestoneId ?? state.activeMilestone?.id;
|
|
17
29
|
const midTitle = state.activeMilestone?.title ?? "";
|
|
18
30
|
if (!mid) {
|
|
19
31
|
ctx.ui.notify("Cannot dispatch: no active milestone.", "warning");
|
|
@@ -25,7 +37,7 @@ export async function dispatchDirectPhase(ctx, pi, phase, base) {
|
|
|
25
37
|
// build prompts and create a session anchored to the project root even
|
|
26
38
|
// though the milestone's actual code lives in the worktree.
|
|
27
39
|
const dispatchBase = resolveCanonicalMilestoneRoot(base, mid);
|
|
28
|
-
const normalized = phase
|
|
40
|
+
const normalized = parsed.phase;
|
|
29
41
|
let unitType;
|
|
30
42
|
let unitId;
|
|
31
43
|
let prompt;
|
|
@@ -5,11 +5,11 @@ import { getUatBrowserToolSupportError } from "./uat-policy.js";
|
|
|
5
5
|
import { isDbAvailable, getMilestoneSlices, getMilestoneSliceSummaries, getClosedSliceIds, getPendingGatesForTurn, markPendingGatesOmittedForTurn, getMilestone, insertArtifact, insertAssessment, setSliceSketchFlag, transaction, getAssessment, } from "./gsd-db.js";
|
|
6
6
|
import { isClosedStatus } from "./status-guards.js";
|
|
7
7
|
import { extractVerdict, isAcceptableUatVerdict } from "./verdict-parser.js";
|
|
8
|
-
import { gsdRoot, resolveGsdPathContract, resolveMilestoneFile, resolveMilestonePath, resolveSliceFile,
|
|
8
|
+
import { gsdRoot, resolveGsdPathContract, resolveMilestoneFile, resolveMilestonePath, resolveSliceFile, resolveTaskFile, relTaskFile, relSliceFile, relMilestoneFile, buildTaskFileName, gsdProjectionRoot, } from "./paths.js";
|
|
9
9
|
import { validateArtifact } from "./schemas/validate.js";
|
|
10
10
|
import { existsSync, mkdirSync, readFileSync, writeFileSync, unlinkSync, readdirSync } from "node:fs";
|
|
11
11
|
import { logWarning, logError } from "./workflow-logger.js";
|
|
12
|
-
import { dirname, join } from "node:path";
|
|
12
|
+
import { dirname, join, sep } from "node:path";
|
|
13
13
|
import { hasImplementationArtifacts } from "./milestone-implementation-evidence.js";
|
|
14
14
|
import { buildDiscussMilestonePrompt, buildDiscussProjectPrompt, buildDiscussRequirementsPrompt, buildResearchDecisionPrompt, buildResearchProjectPrompt, buildResearchMilestonePrompt, buildPlanMilestonePrompt, buildResearchSlicePrompt, buildPlanSlicePrompt, buildRefineSlicePrompt, buildExecuteTaskPrompt, buildCompleteSlicePrompt, buildCompleteMilestonePrompt, buildValidateMilestonePrompt, buildReplanSlicePrompt, buildRunUatPrompt, buildReassessRoadmapPrompt, buildRewriteDocsPrompt, buildReactiveExecutePrompt, buildGateEvaluatePrompt, buildParallelResearchSlicesPrompt, checkNeedsReassessment, checkNeedsRunUat, } from "./auto-prompts.js";
|
|
15
15
|
import { resolveModelWithFallbacksForUnit, resolveThinkingLevelForUnit } from "./preferences-models.js";
|
|
@@ -48,6 +48,22 @@ function resolveExistingExpectedArtifact(unitType, unitId, basePath) {
|
|
|
48
48
|
}
|
|
49
49
|
let reassessmentChecker = checkNeedsReassessment;
|
|
50
50
|
let researchProjectPromptBuilder = buildResearchProjectPrompt;
|
|
51
|
+
/**
|
|
52
|
+
* Optional override for the reactive graph derivation step inside the
|
|
53
|
+
* "executing → reactive-execute" rule. Production leaves this null so the rule
|
|
54
|
+
* uses the real loadSliceTaskIO + deriveTaskGraph; tests inject a throwing
|
|
55
|
+
* function to deterministically exercise the best-effort failure path
|
|
56
|
+
* (auto-dispatch.ts:1494). The catch is otherwise unreachable because every
|
|
57
|
+
* operation it wraps (loadSliceTaskIO, deriveTaskGraph, saveReactiveState) is
|
|
58
|
+
* internally defensive.
|
|
59
|
+
* @internal
|
|
60
|
+
*/
|
|
61
|
+
let _reactiveGraphDeriveFn = null;
|
|
62
|
+
export function setReactiveGraphDeriveFnForTest(fn) {
|
|
63
|
+
const previous = _reactiveGraphDeriveFn;
|
|
64
|
+
_reactiveGraphDeriveFn = fn;
|
|
65
|
+
return () => { _reactiveGraphDeriveFn = previous; };
|
|
66
|
+
}
|
|
51
67
|
function shouldBypassMilestoneDepthGateInAuto(prefs) {
|
|
52
68
|
return isAutoActive() && prefs?.planning_depth !== "deep";
|
|
53
69
|
}
|
|
@@ -303,9 +319,8 @@ function backfillMissingAssessmentsFromSummaries(basePath, mid) {
|
|
|
303
319
|
const summaryPath = resolveSliceFile(basePath, mid, sliceId, "SUMMARY");
|
|
304
320
|
if (!summaryPath || !existsSync(summaryPath))
|
|
305
321
|
continue;
|
|
306
|
-
const slicePath = resolveSlicePath(basePath, mid, sliceId);
|
|
307
322
|
const assessmentPath = resolveSliceFile(basePath, mid, sliceId, "ASSESSMENT")
|
|
308
|
-
?? (
|
|
323
|
+
?? join(basePath, relSliceFile(basePath, mid, sliceId, "ASSESSMENT"));
|
|
309
324
|
if (!assessmentPath)
|
|
310
325
|
continue;
|
|
311
326
|
const assessmentRelPath = relSliceFile(basePath, mid, sliceId, "ASSESSMENT");
|
|
@@ -1155,7 +1170,9 @@ export const DISPATCH_RULES = [
|
|
|
1155
1170
|
return null;
|
|
1156
1171
|
try {
|
|
1157
1172
|
const { loadSliceTaskIO, deriveTaskGraph, isGraphAmbiguous, getReadyTasks, chooseNonConflictingSubset, graphMetrics, } = await import("./reactive-graph.js");
|
|
1158
|
-
const taskIO =
|
|
1173
|
+
const taskIO = _reactiveGraphDeriveFn
|
|
1174
|
+
? await _reactiveGraphDeriveFn(basePath, mid, sid)
|
|
1175
|
+
: await loadSliceTaskIO(basePath, mid, sid);
|
|
1159
1176
|
if (taskIO.length < 2)
|
|
1160
1177
|
return null; // single task, no point
|
|
1161
1178
|
const graph = deriveTaskGraph(taskIO);
|
|
@@ -1225,10 +1242,26 @@ export const DISPATCH_RULES = [
|
|
|
1225
1242
|
// missing, the planner created S##-PLAN.md with task entries but never
|
|
1226
1243
|
// wrote the tasks/ directory files. Dispatch plan-slice to regenerate
|
|
1227
1244
|
// them rather than hard-stopping — fixes the infinite-loop described in
|
|
1228
|
-
// issue #909.
|
|
1245
|
+
// issue #909. Flat-phase layout embeds tasks in the slice plan file, so
|
|
1246
|
+
// skip recovery when tasks are embedded (<tasks> block or task checkboxes in phases/ plan).
|
|
1229
1247
|
const taskPlanPath = resolveTaskFile(artifactBasePath, mid, sid, tid, "PLAN");
|
|
1248
|
+
const slicePlanPath = resolveSliceFile(artifactBasePath, mid, sid, "PLAN");
|
|
1249
|
+
const phasesRoot = join(gsdProjectionRoot(artifactBasePath), "phases");
|
|
1250
|
+
const slicePlanContent = slicePlanPath && existsSync(slicePlanPath)
|
|
1251
|
+
? readFileSync(slicePlanPath, "utf-8")
|
|
1252
|
+
: "";
|
|
1253
|
+
const isPhasesSlicePlan = slicePlanPath !== null &&
|
|
1254
|
+
(slicePlanPath === phasesRoot || slicePlanPath.startsWith(`${phasesRoot}${sep}`));
|
|
1255
|
+
const hasTaskCheckboxes = /^-\s+\[[ xX]\]\s+\*\*[\w.]+/m.test(slicePlanContent);
|
|
1256
|
+
const tasksEmbeddedInSlicePlan = Boolean(slicePlanPath &&
|
|
1257
|
+
existsSync(slicePlanPath) &&
|
|
1258
|
+
(slicePlanContent.includes("<tasks>") || (isPhasesSlicePlan && hasTaskCheckboxes)));
|
|
1259
|
+
// tasksEmbeddedInSlicePlan is true when tasks live inside the slice plan
|
|
1260
|
+
// (flat-phase phases/ layout with task checkboxes or renderPlanFromDb <tasks> block).
|
|
1230
1261
|
const projectionTaskPlanPath = join(gsdProjectionRoot(artifactBasePath), "milestones", mid, "slices", sid, "tasks", buildTaskFileName(tid, "PLAN"));
|
|
1231
|
-
if ((!taskPlanPath || !existsSync(taskPlanPath)) &&
|
|
1262
|
+
if ((!taskPlanPath || !existsSync(taskPlanPath)) &&
|
|
1263
|
+
!existsSync(projectionTaskPlanPath) &&
|
|
1264
|
+
!tasksEmbeddedInSlicePlan) {
|
|
1232
1265
|
if (isDebugEnabled()) {
|
|
1233
1266
|
const expectedTaskPlanPath = join(artifactBasePath, relTaskFile(artifactBasePath, mid, sid, tid, "PLAN"));
|
|
1234
1267
|
const originalProjectRoot = session?.originalBasePath || basePath;
|
|
@@ -1334,7 +1367,13 @@ export const DISPATCH_RULES = [
|
|
|
1334
1367
|
}
|
|
1335
1368
|
if (!existsSync(mDir))
|
|
1336
1369
|
mkdirSync(mDir, { recursive: true });
|
|
1337
|
-
|
|
1370
|
+
// Use relMilestoneFile for the layout-aware filename:
|
|
1371
|
+
// legacy → milestones/M001/M001-VALIDATION.md
|
|
1372
|
+
// flat-phase → phases/01-slug/01-VALIDATION.md
|
|
1373
|
+
// When the milestone dir is only in the project root (worktree has none),
|
|
1374
|
+
// write to the project root so the artifact lands in the canonical location.
|
|
1375
|
+
const writeBase = resolveMilestonePath(artifactBasePath, mid) != null ? artifactBasePath : projectRoot;
|
|
1376
|
+
const validationPath = join(writeBase, relMilestoneFile(writeBase, mid, "VALIDATION"));
|
|
1338
1377
|
const skipSource = trivialVariant
|
|
1339
1378
|
? "trivial-scope pipeline variant"
|
|
1340
1379
|
: "`skip_milestone_validation` preference";
|
|
@@ -12,6 +12,7 @@ import { unitPhaseLabel } from "./auto-dashboard.js";
|
|
|
12
12
|
import { getSessionModelOverride } from "./session-model-override.js";
|
|
13
13
|
import { logWarning } from "./workflow-logger.js";
|
|
14
14
|
import { resolveUokFlags } from "./uok/flags.js";
|
|
15
|
+
import { modelIdsForProfileResolution, resolveProfileAnchorProvider, resolveDisabledModelProvidersFromPreferences } from "./preferences.js";
|
|
15
16
|
import { applyModelPolicyFilter } from "./uok/model-policy.js";
|
|
16
17
|
import { isModelBlocked, isModelTemporarilyUnavailable } from "./blocked-models.js";
|
|
17
18
|
import { getRequiredWorkflowToolsForAutoUnit, isWorkflowMcpSurfaceTool } from "./workflow-mcp.js";
|
|
@@ -324,8 +325,8 @@ export function floorThinkingLevelForUnit(unitType, level) {
|
|
|
324
325
|
}
|
|
325
326
|
return EXECUTE_TASK_MIN_THINKING_LEVEL;
|
|
326
327
|
}
|
|
327
|
-
export function resolvePreferredModelConfig(unitType, autoModeStartModel, isAutoMode = true) {
|
|
328
|
-
const explicitConfig = resolveModelWithFallbacksForUnit(unitType);
|
|
328
|
+
export function resolvePreferredModelConfig(unitType, autoModeStartModel, isAutoMode = true, basePath, availableModelIds, preferredModelId) {
|
|
329
|
+
const explicitConfig = resolveModelWithFallbacksForUnit(unitType, basePath, availableModelIds, preferredModelId);
|
|
329
330
|
if (explicitConfig) {
|
|
330
331
|
return {
|
|
331
332
|
...explicitConfig,
|
|
@@ -380,7 +381,9 @@ autoModeStartThinkingLevel) {
|
|
|
380
381
|
// With no explicit level, fall back to the auto-start session level and raise
|
|
381
382
|
// the code-writing floor — preserving prior behavior exactly. Recomputed per
|
|
382
383
|
// dispatch so neither the floor nor a phase override leaks to other units.
|
|
383
|
-
const
|
|
384
|
+
const anchorProvider = resolveProfileAnchorProvider(ctx.model?.provider, autoModeStartModel?.provider);
|
|
385
|
+
const profileResolutionIds = modelIdsForProfileResolution(ctx.modelRegistry, anchorProvider, resolveDisabledModelProvidersFromPreferences());
|
|
386
|
+
const explicitThinkingLevel = resolveThinkingLevelForUnit(unitType, basePath, profileResolutionIds);
|
|
384
387
|
const desiredThinkingLevel = explicitThinkingLevel
|
|
385
388
|
?? floorThinkingLevelForUnit(unitType, autoModeStartThinkingLevel);
|
|
386
389
|
if (explicitThinkingLevel) {
|
|
@@ -413,9 +416,12 @@ autoModeStartThinkingLevel) {
|
|
|
413
416
|
flatRateCtx: buildFlatRateContext(autoModeStartModel.provider, ctx, prefs),
|
|
414
417
|
};
|
|
415
418
|
}
|
|
419
|
+
const preferredModelId = autoModeStartModel
|
|
420
|
+
? `${autoModeStartModel.provider}/${autoModeStartModel.id}`
|
|
421
|
+
: ctx.model ? `${ctx.model.provider}/${ctx.model.id}` : undefined;
|
|
416
422
|
const modelConfig = effectiveSessionModelOverride
|
|
417
423
|
? undefined
|
|
418
|
-
: resolvePreferredModelConfig(unitType, autoModeStartModel, isAutoMode);
|
|
424
|
+
: resolvePreferredModelConfig(unitType, autoModeStartModel, isAutoMode, basePath, profileResolutionIds, preferredModelId);
|
|
419
425
|
let routing = null;
|
|
420
426
|
let appliedModel = null;
|
|
421
427
|
// ── Restore active-tool baseline before policy evaluation (#4959, #4681, #4850) ──
|
|
@@ -575,7 +581,7 @@ autoModeStartThinkingLevel) {
|
|
|
575
581
|
// Hook can override model selection entirely by returning { modelId }
|
|
576
582
|
let hookOverride;
|
|
577
583
|
if (routingConfig.hooks !== false) {
|
|
578
|
-
const eligible = getEligibleModels(classification.tier, availableModelIds, routingConfig);
|
|
584
|
+
const eligible = getEligibleModels(classification.tier, availableModelIds, routingConfig, preferredModelId);
|
|
579
585
|
const hookResult = await pi.emitBeforeModelSelect({
|
|
580
586
|
unitType,
|
|
581
587
|
unitId,
|
|
@@ -611,7 +617,7 @@ autoModeStartThinkingLevel) {
|
|
|
611
617
|
};
|
|
612
618
|
}
|
|
613
619
|
else {
|
|
614
|
-
routingResult = resolveModelForComplexity(classification, modelConfig, routingConfig, availableModelIds, unitType, classification.taskMetadata, capabilityOverrides);
|
|
620
|
+
routingResult = resolveModelForComplexity(classification, modelConfig, routingConfig, availableModelIds, unitType, classification.taskMetadata, capabilityOverrides, preferredModelId);
|
|
615
621
|
}
|
|
616
622
|
if (routingResult.wasDowngraded) {
|
|
617
623
|
effectiveModelConfig = {
|
|
@@ -860,16 +866,16 @@ export function resolveModelId(modelId, availableModels, currentProvider) {
|
|
|
860
866
|
*
|
|
861
867
|
* Order rationale:
|
|
862
868
|
* - openai-codex before github-copilot: ChatGPT-native for shared GPT IDs
|
|
863
|
-
* - google-
|
|
869
|
+
* - google-antigravity before google-gemini-cli: Antigravity replaced Gemini CLI for individuals
|
|
864
870
|
* - anthropic before github-copilot: first-party Claude API/OAuth over Copilot
|
|
865
871
|
* - github-copilot before openai/google: Copilot OAuth over platform API keys
|
|
866
872
|
*/
|
|
867
873
|
export const BARE_ID_SUBSCRIPTION_PROVIDER_PRECEDENCE = [
|
|
868
874
|
"openai-codex",
|
|
875
|
+
"google-antigravity",
|
|
869
876
|
"google-gemini-cli",
|
|
870
877
|
"anthropic",
|
|
871
878
|
"github-copilot",
|
|
872
|
-
"google-antigravity",
|
|
873
879
|
];
|
|
874
880
|
/**
|
|
875
881
|
* Flat-rate providers charge the same per request regardless of model.
|
|
@@ -17,7 +17,7 @@ import { logWarning, logError } from "./workflow-logger.js";
|
|
|
17
17
|
import { loadFile, parseSummary, resolveAllOverrides } from "./files.js";
|
|
18
18
|
import { loadPrompt } from "./prompt-loader.js";
|
|
19
19
|
import { isAwaitingUserInput } from "./consent-question.js";
|
|
20
|
-
import {
|
|
20
|
+
import { resolveSliceFile, resolveSlicePath, relSlicePath, resolveTaskFile, resolveMilestoneFile, resolveTasksDir, resolveFile, relMilestoneFile, relSliceFile, relTaskFile, } from "./paths.js";
|
|
21
21
|
import { invalidateAllCaches } from "./cache.js";
|
|
22
22
|
import { rebuildState } from "./doctor.js";
|
|
23
23
|
import { parseUnitId } from "./unit-id.js";
|
|
@@ -187,7 +187,6 @@ function completeSliceReopenReplanHandoffDetected(s, agentEndMessages) {
|
|
|
187
187
|
const unitId = s.currentUnit.id;
|
|
188
188
|
return (agentEndMessagesIncludeSuccessfulToolResult(agentEndMessages, "gsd_task_reopen") ||
|
|
189
189
|
agentEndMessagesIncludeToolCall(agentEndMessages, "gsd_task_reopen") ||
|
|
190
|
-
agentEndMessagesMentionTool(agentEndMessages, "gsd_task_reopen") ||
|
|
191
190
|
unitActivityMentionsTool(s.basePath, unitType, unitId, "gsd_task_reopen") ||
|
|
192
191
|
unitActivityMentionsTool(s.canonicalProjectRoot, unitType, unitId, "gsd_task_reopen"));
|
|
193
192
|
}
|
|
@@ -196,7 +195,6 @@ function completeSliceReplanSignalDetected(s, agentEndMessages) {
|
|
|
196
195
|
return false;
|
|
197
196
|
return (agentEndMessagesIncludeSuccessfulToolResult(agentEndMessages, "gsd_replan_slice") ||
|
|
198
197
|
agentEndMessagesIncludeToolCall(agentEndMessages, "gsd_replan_slice") ||
|
|
199
|
-
agentEndMessagesMentionTool(agentEndMessages, "gsd_replan_slice") ||
|
|
200
198
|
unitActivityMentionsTool(s.basePath, s.currentUnit.type, s.currentUnit.id, "gsd_replan_slice") ||
|
|
201
199
|
unitActivityMentionsTool(s.canonicalProjectRoot, s.currentUnit.type, s.currentUnit.id, "gsd_replan_slice"));
|
|
202
200
|
}
|
|
@@ -359,6 +357,17 @@ function getPlannedKeyFiles(tasks) {
|
|
|
359
357
|
}
|
|
360
358
|
export const _parseReactiveBatchTaskIdsForTest = parseReactiveBatchTaskIds;
|
|
361
359
|
export const _getPlannedKeyFilesForTest = getPlannedKeyFiles;
|
|
360
|
+
function resolveTaskArtifactPath(basePath, mid, sid, tid, suffix) {
|
|
361
|
+
const legacy = resolveTaskFile(basePath, mid, sid, tid, suffix);
|
|
362
|
+
if (legacy)
|
|
363
|
+
return legacy;
|
|
364
|
+
const slicePath = resolveSlicePath(basePath, mid, sid);
|
|
365
|
+
if (!slicePath)
|
|
366
|
+
return null;
|
|
367
|
+
const taskDir = resolveTasksDir(basePath, mid, sid) ?? slicePath;
|
|
368
|
+
const file = resolveFile(taskDir, tid, suffix);
|
|
369
|
+
return file ? join(taskDir, file) : null;
|
|
370
|
+
}
|
|
362
371
|
function resolveVerificationFailureMarkerPath(unitType, unitId, basePath) {
|
|
363
372
|
const { milestone: mid, slice: sid, task: tid } = parseUnitId(unitId);
|
|
364
373
|
switch (unitType) {
|
|
@@ -366,22 +375,19 @@ function resolveVerificationFailureMarkerPath(unitType, unitId, basePath) {
|
|
|
366
375
|
const existing = resolveMilestoneFile(basePath, mid, "VERIFICATION-FAILED");
|
|
367
376
|
if (existing)
|
|
368
377
|
return existing;
|
|
369
|
-
|
|
370
|
-
return milestoneDir ? join(milestoneDir, `${mid}-VERIFICATION-FAILED.md`) : null;
|
|
378
|
+
return join(basePath, relMilestoneFile(basePath, mid, "VERIFICATION-FAILED"));
|
|
371
379
|
}
|
|
372
380
|
case "complete-slice": {
|
|
373
381
|
const existing = resolveSliceFile(basePath, mid, sid, "VERIFICATION-FAILED");
|
|
374
382
|
if (existing)
|
|
375
383
|
return existing;
|
|
376
|
-
|
|
377
|
-
return sliceDir ? join(sliceDir, `${sid}-VERIFICATION-FAILED.md`) : null;
|
|
384
|
+
return join(basePath, relSliceFile(basePath, mid, sid, "VERIFICATION-FAILED"));
|
|
378
385
|
}
|
|
379
386
|
case "execute-task": {
|
|
380
|
-
const existing =
|
|
387
|
+
const existing = resolveTaskArtifactPath(basePath, mid, sid, tid, "VERIFICATION-FAILED");
|
|
381
388
|
if (existing)
|
|
382
389
|
return existing;
|
|
383
|
-
|
|
384
|
-
return tasksDir ? join(tasksDir, buildTaskFileName(tid, "VERIFICATION-FAILED")) : null;
|
|
390
|
+
return join(basePath, relTaskFile(basePath, mid, sid, tid, "VERIFICATION-FAILED"));
|
|
385
391
|
}
|
|
386
392
|
default:
|
|
387
393
|
return null;
|
|
@@ -395,7 +401,7 @@ async function buildTaskCommitContextForUnit(basePath, unitId) {
|
|
|
395
401
|
const slice = isDbAvailable() ? getSlice(mid, sid) : null;
|
|
396
402
|
const task = isDbAvailable() ? getTask(mid, sid, tid) : null;
|
|
397
403
|
let summary = null;
|
|
398
|
-
const summaryPath =
|
|
404
|
+
const summaryPath = resolveTaskArtifactPath(basePath, mid, sid, tid, "SUMMARY");
|
|
399
405
|
if (summaryPath) {
|
|
400
406
|
try {
|
|
401
407
|
const summaryContent = await loadFile(summaryPath);
|
|
@@ -563,7 +569,7 @@ export function detectRogueFileWrites(unitType, unitId, basePath) {
|
|
|
563
569
|
if (unitType === "execute-task") {
|
|
564
570
|
if (!mid || !sid || !tid)
|
|
565
571
|
return [];
|
|
566
|
-
const summaryPath =
|
|
572
|
+
const summaryPath = resolveTaskArtifactPath(basePath, mid, sid, tid, "SUMMARY");
|
|
567
573
|
if (!summaryPath || !existsSync(summaryPath))
|
|
568
574
|
return [];
|
|
569
575
|
const dbRow = getTask(mid, sid, tid);
|
|
@@ -629,7 +635,7 @@ export function detectRogueFileWrites(unitType, unitId, basePath) {
|
|
|
629
635
|
else if (unitType === "plan-task") {
|
|
630
636
|
if (!mid || !sid || !tid)
|
|
631
637
|
return [];
|
|
632
|
-
const taskPlanPath =
|
|
638
|
+
const taskPlanPath = resolveTaskArtifactPath(basePath, mid, sid, tid, "PLAN");
|
|
633
639
|
if (!taskPlanPath || !existsSync(taskPlanPath))
|
|
634
640
|
return [];
|
|
635
641
|
const dbRow = getTask(mid, sid, tid);
|
|
@@ -1717,7 +1723,10 @@ export async function postUnitPreVerification(pctx, opts) {
|
|
|
1717
1723
|
return "dispatched";
|
|
1718
1724
|
}
|
|
1719
1725
|
s.toolUnavailableRetries++;
|
|
1720
|
-
|
|
1726
|
+
// Exponential backoff starting at 10s (10s, 20s, 40s capped at 45s). MCP server
|
|
1727
|
+
// startup can take tens of seconds; a 1s/2s/3s linear delay re-dispatches before
|
|
1728
|
+
// the server finishes connecting, causing a stuck loop. See #817.
|
|
1729
|
+
const delayMs = Math.min(10_000 * Math.pow(2, s.toolUnavailableRetries - 1), 45_000);
|
|
1721
1730
|
debugLog("postUnit", { phase: "tool-unavailable-retry", unitType: s.currentUnit.type, unitId: s.currentUnit.id, error: s.lastToolInvocationError, attempt: s.toolUnavailableRetries, delayMs });
|
|
1722
1731
|
ctx.ui.notify(`Tool unavailable for ${s.currentUnit.type}: ${s.lastToolInvocationError}. Waiting ${delayMs}ms for MCP server — retry ${s.toolUnavailableRetries}/${MAX_TOOL_UNAVAIL_RETRIES}.`, "warning");
|
|
1723
1732
|
s.lastToolInvocationError = null;
|
|
@@ -1766,11 +1775,11 @@ export async function postUnitPreVerification(pctx, opts) {
|
|
|
1766
1775
|
return "dispatched";
|
|
1767
1776
|
}
|
|
1768
1777
|
if (getUnitCostSpikeAction(unitCostUsd, rollingAvgUsd, resolveUnitCostSpikeMultiplier(prefs)) === "pause") {
|
|
1769
|
-
s.pendingVerificationRetry = null;
|
|
1770
|
-
s.verificationRetryCount.delete(retryKey);
|
|
1771
|
-
s.verificationRetryFailureHashes.delete(retryKey);
|
|
1772
1778
|
const advancedPastUnit = await hasArtifactCostGuardAdvancedPastUnit(s, ctx, s.currentUnit.type, s.currentUnit.id, prefs);
|
|
1773
1779
|
if (advancedPastUnit) {
|
|
1780
|
+
s.pendingVerificationRetry = null;
|
|
1781
|
+
s.verificationRetryCount.delete(retryKey);
|
|
1782
|
+
s.verificationRetryFailureHashes.delete(retryKey);
|
|
1774
1783
|
debugLog("postUnit", {
|
|
1775
1784
|
phase: "artifact-cost-spike-continue-after-advance",
|
|
1776
1785
|
unitType: s.currentUnit.type,
|
|
@@ -1782,11 +1791,15 @@ export async function postUnitPreVerification(pctx, opts) {
|
|
|
1782
1791
|
return "continue";
|
|
1783
1792
|
}
|
|
1784
1793
|
const parallelBlocker = maybeWriteParallelResearchCostSpikeBlocker(s.currentUnit.type, s.currentUnit.id, verificationBasePath, unitCostUsd, rollingAvgUsd);
|
|
1785
|
-
|
|
1786
|
-
|
|
1787
|
-
|
|
1788
|
-
|
|
1789
|
-
|
|
1794
|
+
if (parallelBlocker) {
|
|
1795
|
+
s.pendingVerificationRetry = null;
|
|
1796
|
+
s.verificationRetryCount.delete(retryKey);
|
|
1797
|
+
s.verificationRetryFailureHashes.delete(retryKey);
|
|
1798
|
+
ctx.ui.notify(`Unit ${s.currentUnit.id} cost spike detected (${unitCostUsd.toFixed(2)} vs avg ${rollingAvgUsd.toFixed(2)}) — wrote parallel blocker and pausing auto-mode.`, "error");
|
|
1799
|
+
await pauseAuto(ctx, pi);
|
|
1800
|
+
return "dispatched";
|
|
1801
|
+
}
|
|
1802
|
+
ctx.ui.notify(`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.`, "warning");
|
|
1790
1803
|
}
|
|
1791
1804
|
const attempt = (s.verificationRetryCount.get(retryKey) ?? 0) + 1;
|
|
1792
1805
|
const failureDetails = describeArtifactVerificationFailure(s.currentUnit.type, s.currentUnit.id, verificationBasePath, s.lastUnitAgentEndMessages);
|
|
@@ -1948,12 +1961,9 @@ export async function postUnitPostVerification(pctx) {
|
|
|
1948
1961
|
// 2. Delete SUMMARY.md for the task
|
|
1949
1962
|
if (mid && sid && tid) {
|
|
1950
1963
|
// Phase C: read+delete via canonical project root.
|
|
1951
|
-
const
|
|
1952
|
-
if (
|
|
1953
|
-
|
|
1954
|
-
if (existsSync(summaryFile)) {
|
|
1955
|
-
unlinkSync(summaryFile);
|
|
1956
|
-
}
|
|
1964
|
+
const summaryPath = resolveTaskArtifactPath(s.canonicalProjectRoot, mid, sid, tid, "SUMMARY");
|
|
1965
|
+
if (summaryPath && existsSync(summaryPath)) {
|
|
1966
|
+
unlinkSync(summaryPath);
|
|
1957
1967
|
}
|
|
1958
1968
|
}
|
|
1959
1969
|
// 3. Delete the retry_on artifact (e.g. NEEDS-REWORK.md)
|
|
@@ -2085,7 +2095,7 @@ export async function postUnitPostVerification(pctx) {
|
|
|
2085
2095
|
// Write evidence JSON to slice artifacts directory
|
|
2086
2096
|
const slicePath = resolveSlicePath(s.canonicalProjectRoot, mid, sid);
|
|
2087
2097
|
const evidenceFileName = `${sid}-PRE-EXEC-VERIFY.json`;
|
|
2088
|
-
let evidencePath = join(
|
|
2098
|
+
let evidencePath = join(relSlicePath(s.canonicalProjectRoot, mid, sid), evidenceFileName);
|
|
2089
2099
|
if (slicePath) {
|
|
2090
2100
|
writePreExecutionEvidence(result, slicePath, mid, sid);
|
|
2091
2101
|
evidencePath = relative(s.canonicalProjectRoot, join(slicePath, evidenceFileName)) || evidenceFileName;
|
|
@@ -1167,19 +1167,29 @@ export function extractSliceExecutionExcerpt(content, relPath) {
|
|
|
1167
1167
|
return parts.join("\n");
|
|
1168
1168
|
}
|
|
1169
1169
|
// ─── Prior Task Summaries ──────────────────────────────────────────────────
|
|
1170
|
-
|
|
1170
|
+
/** Resolve where task SUMMARY files live (legacy tasks/ subdir or flat-phase phase dir). */
|
|
1171
|
+
function resolveTaskSummariesLocation(base, mid, sid) {
|
|
1172
|
+
const slicePath = resolveSlicePath(base, mid, sid);
|
|
1173
|
+
if (!slicePath)
|
|
1174
|
+
return null;
|
|
1171
1175
|
const tDir = resolveTasksDir(base, mid, sid);
|
|
1172
|
-
|
|
1176
|
+
const sRel = relSlicePath(base, mid, sid);
|
|
1177
|
+
if (tDir)
|
|
1178
|
+
return { dir: tDir, relPrefix: `${sRel}/tasks` };
|
|
1179
|
+
return { dir: slicePath, relPrefix: sRel };
|
|
1180
|
+
}
|
|
1181
|
+
export async function getPriorTaskSummaryPaths(mid, sid, currentTid, base) {
|
|
1182
|
+
const loc = resolveTaskSummariesLocation(base, mid, sid);
|
|
1183
|
+
if (!loc)
|
|
1173
1184
|
return [];
|
|
1174
|
-
const summaryFiles = resolveTaskFiles(
|
|
1185
|
+
const summaryFiles = resolveTaskFiles(loc.dir, "SUMMARY");
|
|
1175
1186
|
const currentNum = parseInt(currentTid.replace(/^T/, ""), 10);
|
|
1176
|
-
const sRel = relSlicePath(base, mid, sid);
|
|
1177
1187
|
return summaryFiles
|
|
1178
1188
|
.filter(f => {
|
|
1179
1189
|
const num = parseInt(f.replace(/^T/, ""), 10);
|
|
1180
1190
|
return num < currentNum;
|
|
1181
1191
|
})
|
|
1182
|
-
.map(f => `${
|
|
1192
|
+
.map(f => `${loc.relPrefix}/${f}`);
|
|
1183
1193
|
}
|
|
1184
1194
|
/**
|
|
1185
1195
|
* Get carry-forward summary paths scoped to a task's derived dependencies.
|
|
@@ -1196,11 +1206,10 @@ export async function getDependencyTaskSummaryPaths(mid, sid, currentTid, depend
|
|
|
1196
1206
|
if (dependsOn.length === 0) {
|
|
1197
1207
|
return getPriorTaskSummaryPaths(mid, sid, currentTid, base);
|
|
1198
1208
|
}
|
|
1199
|
-
const
|
|
1200
|
-
if (!
|
|
1209
|
+
const loc = resolveTaskSummariesLocation(base, mid, sid);
|
|
1210
|
+
if (!loc)
|
|
1201
1211
|
return [];
|
|
1202
|
-
const summaryFiles = resolveTaskFiles(
|
|
1203
|
-
const sRel = relSlicePath(base, mid, sid);
|
|
1212
|
+
const summaryFiles = resolveTaskFiles(loc.dir, "SUMMARY");
|
|
1204
1213
|
const depSet = new Set(dependsOn.map((d) => d.toUpperCase()));
|
|
1205
1214
|
return summaryFiles
|
|
1206
1215
|
.filter((f) => {
|
|
@@ -1208,7 +1217,7 @@ export async function getDependencyTaskSummaryPaths(mid, sid, currentTid, depend
|
|
|
1208
1217
|
const tid = f.replace(/-SUMMARY\.md$/i, "").toUpperCase();
|
|
1209
1218
|
return depSet.has(tid);
|
|
1210
1219
|
})
|
|
1211
|
-
.map((f) => `${
|
|
1220
|
+
.map((f) => `${loc.relPrefix}/${f}`);
|
|
1212
1221
|
}
|
|
1213
1222
|
// ─── Adaptive Replanning Checks ────────────────────────────────────────────
|
|
1214
1223
|
/**
|
|
@@ -1696,7 +1705,7 @@ export async function buildResearchMilestonePrompt(mid, midTitle, base) {
|
|
|
1696
1705
|
return loadPrompt("research-milestone", {
|
|
1697
1706
|
workingDirectory: base,
|
|
1698
1707
|
milestoneId: mid, milestoneTitle: midTitle,
|
|
1699
|
-
milestonePath: relMilestonePath(base, mid),
|
|
1708
|
+
milestonePath: relMilestonePath(base, mid, midTitle),
|
|
1700
1709
|
contextPath: relMilestoneFile(base, mid, "CONTEXT"),
|
|
1701
1710
|
outputPath: join(base, outputRelPath),
|
|
1702
1711
|
inlinedContext,
|
|
@@ -1844,7 +1853,7 @@ export async function buildPlanMilestonePrompt(mid, midTitle, base, level) {
|
|
|
1844
1853
|
return loadPrompt("plan-milestone", {
|
|
1845
1854
|
workingDirectory: base,
|
|
1846
1855
|
milestoneId: mid, milestoneTitle: midTitle,
|
|
1847
|
-
milestonePath: relMilestonePath(base, mid),
|
|
1856
|
+
milestonePath: relMilestonePath(base, mid, midTitle),
|
|
1848
1857
|
contextPath: contextRel,
|
|
1849
1858
|
researchPath: researchRel,
|
|
1850
1859
|
researchOutputPath,
|
|
@@ -2474,17 +2483,16 @@ export async function buildCompleteSlicePrompt(mid, midTitle, sid, sTitle, base,
|
|
|
2474
2483
|
return body;
|
|
2475
2484
|
}
|
|
2476
2485
|
case "prior-task-summaries": {
|
|
2477
|
-
const
|
|
2478
|
-
if (!
|
|
2486
|
+
const loc = resolveTaskSummariesLocation(base, mid, sid);
|
|
2487
|
+
if (!loc) {
|
|
2479
2488
|
trackPromptContext(contextTelemetry, "prior-task-summaries", "skipped", null, "missing tasks dir");
|
|
2480
2489
|
return null;
|
|
2481
2490
|
}
|
|
2482
|
-
const summaryFiles = resolveTaskFiles(
|
|
2483
|
-
const sRel = relSlicePath(base, mid, sid);
|
|
2491
|
+
const summaryFiles = resolveTaskFiles(loc.dir, "SUMMARY").sort();
|
|
2484
2492
|
const blocks = [];
|
|
2485
2493
|
for (const file of summaryFiles) {
|
|
2486
|
-
const absPath = join(
|
|
2487
|
-
const relPath = `${
|
|
2494
|
+
const absPath = join(loc.dir, file);
|
|
2495
|
+
const relPath = `${loc.relPrefix}/${file}`;
|
|
2488
2496
|
const taskId = file.replace(/-SUMMARY\.md$/i, "");
|
|
2489
2497
|
blocks.push(await buildTaskSummaryExcerpt(absPath, relPath, taskId));
|
|
2490
2498
|
}
|
|
@@ -2734,8 +2742,10 @@ export async function buildCompleteMilestonePrompt(mid, midTitle, base, level) {
|
|
|
2734
2742
|
trackPromptContext(contextTelemetry, "cap", cappedInlinedContext.length < rawInlinedContext.length ? "skipped" : "inline", null, cappedInlinedContext.length < rawInlinedContext.length ? `dropped ${rawInlinedContext.length - cappedInlinedContext.length} chars` : "within budget");
|
|
2735
2743
|
const inlinedContext = prependContextModeToBlock("complete-milestone", base, cappedInlinedContext);
|
|
2736
2744
|
emitPromptContextTelemetry("complete-milestone", contextTelemetry, inlinedContext);
|
|
2737
|
-
|
|
2738
|
-
|
|
2745
|
+
// Use relMilestoneFile to get the layout-aware filename (NN-SUFFIX.md for flat-phase,
|
|
2746
|
+
// M001-SUFFIX.md for legacy) rather than manually appending the raw milestone id.
|
|
2747
|
+
const milestoneSummaryPath = join(base, relMilestoneFile(base, mid, "SUMMARY"));
|
|
2748
|
+
const learningsRelPath = relMilestoneFile(base, mid, "LEARNINGS");
|
|
2739
2749
|
const learningsAbsPath = join(base, learningsRelPath);
|
|
2740
2750
|
const extractLearningsSteps = buildExtractionStepsBlock({
|
|
2741
2751
|
milestoneId: mid,
|
|
@@ -2965,8 +2975,9 @@ export async function buildValidateMilestonePrompt(mid, midTitle, base, level) {
|
|
|
2965
2975
|
trackPromptContext(contextTelemetry, "cap", cappedInlinedContext.length < rawInlinedContext.length ? "skipped" : "inline", null, cappedInlinedContext.length < rawInlinedContext.length ? `dropped ${rawInlinedContext.length - cappedInlinedContext.length} chars` : "within budget");
|
|
2966
2976
|
const inlinedContext = prependContextModeToBlock("validate-milestone", base, cappedInlinedContext);
|
|
2967
2977
|
emitPromptContextTelemetry("validate-milestone", contextTelemetry, inlinedContext);
|
|
2968
|
-
|
|
2969
|
-
const
|
|
2978
|
+
// Use relMilestoneFile for layout-aware filenames (NN-SUFFIX.md flat-phase, M001-SUFFIX.md legacy).
|
|
2979
|
+
const validationOutputPath = join(base, relMilestoneFile(base, mid, "VALIDATION"));
|
|
2980
|
+
const roadmapOutputPath = relMilestoneFile(base, mid, "ROADMAP");
|
|
2970
2981
|
// Every milestone validation turn owns MV01–MV04 unconditionally: the
|
|
2971
2982
|
// registry is the source of truth for which gates the validator must
|
|
2972
2983
|
// address, and the block below is what the template renders so the
|
|
@@ -3009,17 +3020,16 @@ export async function buildReplanSlicePrompt(mid, midTitle, sid, sTitle, base) {
|
|
|
3009
3020
|
inlined.push(await inlineFile(slicePlanPath, slicePlanRel, "Current Slice Plan"));
|
|
3010
3021
|
// Find the blocker task summary — the completed task with blocker_discovered: true
|
|
3011
3022
|
let blockerTaskId = "";
|
|
3012
|
-
const
|
|
3013
|
-
if (
|
|
3014
|
-
const summaryFiles = resolveTaskFiles(
|
|
3023
|
+
const summaryLoc = resolveTaskSummariesLocation(base, mid, sid);
|
|
3024
|
+
if (summaryLoc) {
|
|
3025
|
+
const summaryFiles = resolveTaskFiles(summaryLoc.dir, "SUMMARY").sort();
|
|
3015
3026
|
for (const file of summaryFiles) {
|
|
3016
|
-
const absPath = join(
|
|
3027
|
+
const absPath = join(summaryLoc.dir, file);
|
|
3017
3028
|
const content = await loadFile(absPath);
|
|
3018
3029
|
if (!content)
|
|
3019
3030
|
continue;
|
|
3020
3031
|
const summary = parseSummary(content);
|
|
3021
|
-
const
|
|
3022
|
-
const relPath = `${sRel}/tasks/${file}`;
|
|
3032
|
+
const relPath = `${summaryLoc.relPrefix}/${file}`;
|
|
3023
3033
|
if (summary.frontmatter.blocker_discovered) {
|
|
3024
3034
|
blockerTaskId = summary.frontmatter.id || file.replace(/-SUMMARY\.md$/i, "");
|
|
3025
3035
|
inlined.push(await buildTaskSummaryExcerpt(absPath, relPath, blockerTaskId, { blocker: true }));
|
|
@@ -3035,7 +3045,7 @@ export async function buildReplanSlicePrompt(mid, midTitle, sid, sTitle, base) {
|
|
|
3035
3045
|
if (replanOverridesInline)
|
|
3036
3046
|
inlined.unshift(replanOverridesInline);
|
|
3037
3047
|
const inlinedContext = prependContextModeToBlock("replan-slice", base, capPreamble(`## Inlined Context (preloaded — do not re-read these files)\n\n${inlined.join("\n\n---\n\n")}`));
|
|
3038
|
-
const replanPath = join(base,
|
|
3048
|
+
const replanPath = join(base, relSliceFile(base, mid, sid, "REPLAN"));
|
|
3039
3049
|
// Build capture context for replan prompt (captures that triggered this replan)
|
|
3040
3050
|
let captureContext = "(none)";
|
|
3041
3051
|
try {
|
|
@@ -3372,7 +3382,11 @@ opts) {
|
|
|
3372
3382
|
const taskPrompt = [
|
|
3373
3383
|
`## UNIT: Execute Task ${tid} ("${tTitle}")`,
|
|
3374
3384
|
"",
|
|
3375
|
-
"
|
|
3385
|
+
"## Working Directory",
|
|
3386
|
+
"",
|
|
3387
|
+
`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.`,
|
|
3388
|
+
`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.`,
|
|
3389
|
+
"",
|
|
3376
3390
|
"Implement from the inlined task plan below. Verify changes, then call `gsd_task_complete`.",
|
|
3377
3391
|
"Do not run git commands.",
|
|
3378
3392
|
"",
|