@opengsd/gsd-pi 1.3.0 → 1.4.0
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 +10 -10
- package/dist/cli.js +32 -4
- package/dist/headless-answers.js +1 -1
- package/dist/headless-context.js +0 -1
- package/dist/headless-ui.d.ts +1 -1
- package/dist/headless-ui.js +1 -1
- package/dist/headless.js +1 -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/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/models.js +9 -0
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +84 -22
- package/dist/resources/extensions/google-cli/stream-adapter.js +82 -15
- package/dist/resources/extensions/gsd/artifact-verification.js +427 -0
- 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 +28 -10
- package/dist/resources/extensions/gsd/auto/session.js +11 -0
- package/dist/resources/extensions/gsd/auto/verification-retry-policy.js +1 -1
- package/dist/resources/extensions/gsd/auto/workflow-kernel.js +15 -1
- package/dist/resources/extensions/gsd/auto-artifact-paths.js +108 -19
- package/dist/resources/extensions/gsd/auto-budget.js +5 -1
- package/dist/resources/extensions/gsd/auto-dispatch.js +62 -27
- package/dist/resources/extensions/gsd/auto-model-selection.js +8 -5
- package/dist/resources/extensions/gsd/auto-post-unit.js +28 -22
- package/dist/resources/extensions/gsd/auto-prompts.js +68 -43
- package/dist/resources/extensions/gsd/auto-recovery.js +14 -483
- package/dist/resources/extensions/gsd/auto-runtime-state.js +17 -5
- package/dist/resources/extensions/gsd/auto-start.js +56 -30
- package/dist/resources/extensions/gsd/auto-timeout-recovery.js +3 -3
- package/dist/resources/extensions/gsd/auto-verification.js +10 -4
- package/dist/resources/extensions/gsd/auto-worktree.js +117 -91
- package/dist/resources/extensions/gsd/auto.js +40 -15
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +141 -65
- package/dist/resources/extensions/gsd/bootstrap/core-session-tools.js +39 -0
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +11 -5
- package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +2 -0
- package/dist/resources/extensions/gsd/bootstrap/fallback-continuation.js +25 -0
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +23 -1
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +117 -27
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +190 -43
- package/dist/resources/extensions/gsd/bootstrap/tool-call-loop-guard.js +96 -10
- package/dist/resources/extensions/gsd/bootstrap/tool-search-shim.js +22 -3
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +73 -16
- package/dist/resources/extensions/gsd/closeout-consistency-gate.js +95 -5
- 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/auto.js +1 -1
- package/dist/resources/extensions/gsd/commands/handlers/core.js +30 -0
- package/dist/resources/extensions/gsd/commands/handlers/ops.js +225 -1
- package/dist/resources/extensions/gsd/commands-cmux.js +3 -1
- package/dist/resources/extensions/gsd/commands-context.js +19 -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 +23 -12
- package/dist/resources/extensions/gsd/commands-usage.js +1 -1
- package/dist/resources/extensions/gsd/commands-verdict.js +17 -11
- package/dist/resources/extensions/gsd/commands-worktree.js +12 -10
- 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 +2 -2
- 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 +71 -6
- package/dist/resources/extensions/gsd/db/engine.js +31 -1
- package/dist/resources/extensions/gsd/db/queries.js +114 -0
- package/dist/resources/extensions/gsd/db/unit-dispatches.js +22 -1
- package/dist/resources/extensions/gsd/db-memory-fts-schema.js +34 -0
- package/dist/resources/extensions/gsd/db-workspace.js +68 -4
- package/dist/resources/extensions/gsd/delegation-policy.js +1 -1
- package/dist/resources/extensions/gsd/discussion-handoff.js +9 -5
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +2 -2
- package/dist/resources/extensions/gsd/doctor-engine-checks.js +192 -4
- package/dist/resources/extensions/gsd/doctor-git-checks.js +25 -3
- package/dist/resources/extensions/gsd/doctor-providers.js +92 -8
- package/dist/resources/extensions/gsd/doctor-runtime-checks.js +5 -15
- 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/exec-sandbox.js +53 -11
- 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 +221 -0
- package/dist/resources/extensions/gsd/forensics.js +4 -33
- package/dist/resources/extensions/gsd/git-service.js +68 -8
- package/dist/resources/extensions/gsd/gitignore.js +10 -3
- package/dist/resources/extensions/gsd/guidance.js +7 -7
- package/dist/resources/extensions/gsd/guided-flow-queue.js +66 -5
- package/dist/resources/extensions/gsd/guided-flow.js +11 -6
- package/dist/resources/extensions/gsd/health-widget.js +55 -29
- package/dist/resources/extensions/gsd/json-persistence.js +20 -0
- package/dist/resources/extensions/gsd/knowledge-backfill.js +18 -11
- package/dist/resources/extensions/gsd/layout-policy.js +77 -0
- package/dist/resources/extensions/gsd/markdown-renderer.js +396 -122
- 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/memory-backfill.js +28 -21
- package/dist/resources/extensions/gsd/memory-consolidation-scanner.js +44 -21
- package/dist/resources/extensions/gsd/metrics.js +22 -14
- 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 +62 -8
- package/dist/resources/extensions/gsd/migration-auto-check.js +27 -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 +79 -18
- package/dist/resources/extensions/gsd/milestone-implementation-evidence.js +26 -20
- 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/orphan-stash-audit.js +92 -16
- 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 +23 -11
- package/dist/resources/extensions/gsd/preferences.js +62 -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 +39 -0
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +21 -16
- 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/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-milestone.md +2 -2
- 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/plan-slice.md +3 -3
- 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/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/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/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/queue-order.js +3 -2
- package/dist/resources/extensions/gsd/quick.js +45 -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/root-write-leak-guard.js +7 -1
- package/dist/resources/extensions/gsd/safety/content-validator.js +2 -1
- package/dist/resources/extensions/gsd/safety/destructive-guard.js +8 -1
- package/dist/resources/extensions/gsd/safety/evidence-collector.js +16 -1
- package/dist/resources/extensions/gsd/safety/evidence-cross-ref.js +43 -1
- package/dist/resources/extensions/gsd/safety/file-change-validator.js +5 -2
- package/dist/resources/extensions/gsd/service-tier.js +2 -1
- package/dist/resources/extensions/gsd/session-forensics.js +11 -1
- package/dist/resources/extensions/gsd/session-lock.js +7 -6
- 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/derive/cache.js +28 -0
- package/dist/resources/extensions/gsd/state/derive/db-open.js +39 -0
- package/dist/resources/extensions/gsd/state/derive/from-db.js +452 -0
- package/dist/resources/extensions/gsd/state/derive/index.js +75 -0
- package/dist/resources/extensions/gsd/state/derive/interrupted-work.js +21 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/artifact-db.js +38 -4
- 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 +138 -19
- package/dist/resources/extensions/gsd/state-reconciliation/index.js +84 -26
- package/dist/resources/extensions/gsd/state-reconciliation/registry.js +34 -18
- package/dist/resources/extensions/gsd/state.js +13 -581
- 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 +8 -4
- package/dist/resources/extensions/gsd/tools/complete-slice.js +14 -4
- package/dist/resources/extensions/gsd/tools/complete-task.js +58 -15
- package/dist/resources/extensions/gsd/tools/exec-tool.js +7 -2
- package/dist/resources/extensions/gsd/tools/plan-slice.js +60 -47
- package/dist/resources/extensions/gsd/tools/plan-task.js +40 -2
- 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/undo.js +51 -15
- package/dist/resources/extensions/gsd/unit-context-composer.js +23 -7
- package/dist/resources/extensions/gsd/unit-registry.js +63 -9
- package/dist/resources/extensions/gsd/unmerged-milestone-guard.js +91 -5
- package/dist/resources/extensions/gsd/validation-block-guard.js +54 -4
- package/dist/resources/extensions/gsd/verification-gate.js +7 -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-manifest.js +126 -13
- package/dist/resources/extensions/gsd/workflow-mcp.js +9 -1
- package/dist/resources/extensions/gsd/workflow-projections.js +44 -18
- package/dist/resources/extensions/gsd/workspace-git-preflight.js +30 -1
- 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 +59 -17
- package/dist/resources/extensions/gsd/worktree-safety.js +20 -11
- package/dist/resources/extensions/mcp-client/manager.js +3 -3
- 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 +11 -11
- package/dist/web/standalone/.next/build-manifest.json +3 -3
- package/dist/web/standalone/.next/react-loadable-manifest.json +9 -9
- package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- 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/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +2 -2
- 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/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +11 -11
- 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/static/chunks/{2659.b7b129ee6a769448.js → 2659.58e950899a9bb82f.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/2772.a7c1fcc69a4685ef.js +1 -0
- package/dist/web/standalone/.next/static/chunks/{3616.3c60753b8ffcbd2e.js → 3616.61a2af74bb8833c8.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/{4283.e4873b058df143a1.js → 4283.d0d9e0a955e441cb.js} +2 -2
- package/dist/web/standalone/.next/static/chunks/{5826.a46ecdd1cfe8dabc.js → 5826.5421d66c72b9f34e.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/8785.e29b3134cab1d153.js +1 -0
- package/dist/web/standalone/.next/static/chunks/8937.640dc9c2aaa1dfad.js +10 -0
- package/dist/web/standalone/.next/static/chunks/app/{page-a48b7c48333b31c8.js → page-bc4c723c6a19c6f0.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/webpack-9c401904f87ded16.js +1 -0
- 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 +7 -6
- 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/dist/workflow.d.ts +1 -0
- package/packages/contracts/dist/workflow.d.ts.map +1 -1
- package/packages/contracts/dist/workflow.js +2 -0
- package/packages/contracts/dist/workflow.js.map +1 -1
- package/packages/contracts/package.json +1 -1
- package/packages/daemon/package.json +4 -4
- package/packages/gsd-agent-core/dist/agent-session.d.ts +1 -0
- package/packages/gsd-agent-core/dist/agent-session.d.ts.map +1 -1
- package/packages/gsd-agent-core/dist/agent-session.js +3 -0
- package/packages/gsd-agent-core/dist/agent-session.js.map +1 -1
- package/packages/gsd-agent-core/dist/extension-ui-snapshot.d.ts +41 -0
- package/packages/gsd-agent-core/dist/extension-ui-snapshot.d.ts.map +1 -0
- package/packages/gsd-agent-core/dist/extension-ui-snapshot.js +62 -0
- package/packages/gsd-agent-core/dist/extension-ui-snapshot.js.map +1 -0
- package/packages/gsd-agent-core/dist/index.d.ts +2 -0
- package/packages/gsd-agent-core/dist/index.d.ts.map +1 -1
- package/packages/gsd-agent-core/dist/index.js +2 -0
- package/packages/gsd-agent-core/dist/index.js.map +1 -1
- package/packages/gsd-agent-core/dist/session/agent-session-events.js +1 -1
- package/packages/gsd-agent-core/dist/session/agent-session-events.js.map +1 -1
- package/packages/gsd-agent-core/dist/session/agent-session-host.d.ts +1 -0
- package/packages/gsd-agent-core/dist/session/agent-session-host.d.ts.map +1 -1
- package/packages/gsd-agent-core/dist/session/agent-session-host.js.map +1 -1
- package/packages/gsd-agent-core/dist/session/agent-session-prompt.d.ts +5 -0
- package/packages/gsd-agent-core/dist/session/agent-session-prompt.d.ts.map +1 -1
- package/packages/gsd-agent-core/dist/session/agent-session-prompt.js +60 -3
- package/packages/gsd-agent-core/dist/session/agent-session-prompt.js.map +1 -1
- package/packages/gsd-agent-core/dist/transcript-store.d.ts +58 -0
- package/packages/gsd-agent-core/dist/transcript-store.d.ts.map +1 -0
- package/packages/gsd-agent-core/dist/transcript-store.js +132 -0
- package/packages/gsd-agent-core/dist/transcript-store.js.map +1 -0
- package/packages/gsd-agent-core/package.json +5 -5
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts +2 -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 +25 -11
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller-latency.d.ts +4 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller-latency.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller-latency.js +7 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller-latency.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts +3 -24
- 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 -829
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-handoff-filter.d.ts +58 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-handoff-filter.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-handoff-filter.js +312 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-handoff-filter.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-pinned-zone.d.ts +31 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-pinned-zone.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-pinned-zone.js +130 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-pinned-zone.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-segment-walker.d.ts +15 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-segment-walker.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-segment-walker.js +258 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-segment-walker.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-tool-rollup.d.ts +13 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-tool-rollup.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-tool-rollup.js +118 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-tool-rollup.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts +9 -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 +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-ui-state.d.ts +54 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-ui-state.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-ui-state.js +20 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-ui-state.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts +4 -1
- 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 +9 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/streaming-render-state.d.ts +56 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/streaming-render-state.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/streaming-render-state.js +44 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/streaming-render-state.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/tui-transcript-tracker.d.ts +5 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/tui-transcript-tracker.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/tui-transcript-tracker.js +77 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/tui-transcript-tracker.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.d.ts +2 -0
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.js +23 -5
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.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 +18 -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 +11 -1
- 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 +30 -1
- package/packages/mcp-server/dist/server.d.ts.map +1 -1
- package/packages/mcp-server/dist/server.js +85 -6
- package/packages/mcp-server/dist/server.js.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.d.ts +13 -1
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +35 -21
- package/packages/mcp-server/dist/workflow-tools.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 +3 -2
- 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/dist/models.generated.d.ts +46 -0
- package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
- package/packages/pi-ai/dist/models.generated.js +38 -0
- package/packages/pi-ai/dist/models.generated.js.map +1 -1
- package/packages/pi-ai/package.json +1 -1
- package/packages/pi-coding-agent/README.md +3 -2
- package/packages/pi-coding-agent/dist/core/session-manager-context.d.ts +9 -0
- package/packages/pi-coding-agent/dist/core/session-manager-context.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/session-manager-context.js +94 -0
- package/packages/pi-coding-agent/dist/core/session-manager-context.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/session-manager-list.d.ts +8 -0
- package/packages/pi-coding-agent/dist/core/session-manager-list.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/session-manager-list.js +244 -0
- package/packages/pi-coding-agent/dist/core/session-manager-list.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/session-manager-migration.d.ts +12 -0
- package/packages/pi-coding-agent/dist/core/session-manager-migration.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/session-manager-migration.js +84 -0
- package/packages/pi-coding-agent/dist/core/session-manager-migration.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/session-manager-types.d.ts +135 -0
- package/packages/pi-coding-agent/dist/core/session-manager-types.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/session-manager-types.js +2 -0
- package/packages/pi-coding-agent/dist/core/session-manager-types.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/session-manager.d.ts +6 -154
- package/packages/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager.js +22 -459
- package/packages/pi-coding-agent/dist/core/session-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/theme/theme-schema.d.ts +75 -75
- package/packages/pi-coding-agent/dist/theme/theme-schema.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/theme/theme-schema.js +1 -1
- package/packages/pi-coding-agent/dist/theme/theme-schema.js.map +1 -1
- package/packages/pi-coding-agent/dist/theme/theme.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/theme/theme.js +11 -7
- package/packages/pi-coding-agent/dist/theme/theme.js.map +1 -1
- package/packages/pi-coding-agent/package.json +7 -7
- package/packages/pi-tui/package.json +2 -2
- package/packages/rpc-client/package.json +2 -2
- package/pkg/dist/theme/theme-schema.d.ts +75 -75
- package/pkg/dist/theme/theme-schema.d.ts.map +1 -1
- package/pkg/dist/theme/theme-schema.js +1 -1
- package/pkg/dist/theme/theme-schema.js.map +1 -1
- package/pkg/dist/theme/theme.d.ts.map +1 -1
- package/pkg/dist/theme/theme.js +11 -7
- package/pkg/dist/theme/theme.js.map +1 -1
- package/pkg/package.json +1 -1
- package/src/resources/GSD-WORKFLOW.md +22 -22
- package/src/resources/extensions/claude-code-cli/index.ts +8 -1
- package/src/resources/extensions/claude-code-cli/models.ts +9 -0
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +103 -22
- package/src/resources/extensions/claude-code-cli/tests/index.test.ts +61 -0
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +262 -10
- package/src/resources/extensions/google-cli/stream-adapter.ts +106 -19
- package/src/resources/extensions/gsd/artifact-verification.ts +464 -0
- package/src/resources/extensions/gsd/auto/dispatch-history.ts +19 -1
- package/src/resources/extensions/gsd/auto/loop-deps.ts +1 -0
- package/src/resources/extensions/gsd/auto/loop.ts +69 -2
- package/src/resources/extensions/gsd/auto/orchestrator.ts +38 -13
- package/src/resources/extensions/gsd/auto/session.ts +14 -0
- package/src/resources/extensions/gsd/auto/verification-retry-policy.ts +3 -1
- package/src/resources/extensions/gsd/auto/workflow-kernel.ts +25 -3
- package/src/resources/extensions/gsd/auto-artifact-paths.ts +129 -20
- package/src/resources/extensions/gsd/auto-budget.ts +12 -1
- package/src/resources/extensions/gsd/auto-dispatch.ts +68 -34
- package/src/resources/extensions/gsd/auto-model-selection.ts +8 -1
- package/src/resources/extensions/gsd/auto-post-unit.ts +37 -23
- package/src/resources/extensions/gsd/auto-prompts.ts +81 -44
- package/src/resources/extensions/gsd/auto-recovery.ts +21 -484
- package/src/resources/extensions/gsd/auto-runtime-state.ts +17 -5
- package/src/resources/extensions/gsd/auto-start.ts +63 -34
- package/src/resources/extensions/gsd/auto-timeout-recovery.ts +3 -2
- package/src/resources/extensions/gsd/auto-verification.ts +10 -8
- package/src/resources/extensions/gsd/auto-worktree.ts +48 -15
- package/src/resources/extensions/gsd/auto.ts +46 -11
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +164 -71
- package/src/resources/extensions/gsd/bootstrap/core-session-tools.ts +44 -0
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +11 -5
- package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +2 -0
- package/src/resources/extensions/gsd/bootstrap/fallback-continuation.ts +31 -0
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +23 -1
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +139 -27
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +219 -46
- package/src/resources/extensions/gsd/bootstrap/tests/write-gate-basepath.test.ts +49 -1
- package/src/resources/extensions/gsd/bootstrap/tool-call-loop-guard.ts +104 -10
- package/src/resources/extensions/gsd/bootstrap/tool-search-shim.ts +21 -3
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +86 -18
- package/src/resources/extensions/gsd/closeout-consistency-gate.ts +109 -4
- 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/auto.ts +1 -1
- package/src/resources/extensions/gsd/commands/handlers/core.ts +31 -0
- package/src/resources/extensions/gsd/commands/handlers/ops.ts +225 -1
- package/src/resources/extensions/gsd/commands-cmux.ts +3 -0
- package/src/resources/extensions/gsd/commands-context.ts +18 -1
- 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 +21 -10
- package/src/resources/extensions/gsd/commands-usage.ts +1 -1
- package/src/resources/extensions/gsd/commands-verdict.ts +16 -15
- package/src/resources/extensions/gsd/commands-worktree.ts +12 -10
- 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 +3 -1
- 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 +73 -7
- package/src/resources/extensions/gsd/db/engine.ts +34 -1
- package/src/resources/extensions/gsd/db/queries.ts +157 -0
- package/src/resources/extensions/gsd/db/unit-dispatches.ts +24 -0
- package/src/resources/extensions/gsd/db-memory-fts-schema.ts +45 -0
- package/src/resources/extensions/gsd/db-workspace.ts +76 -3
- package/src/resources/extensions/gsd/delegation-policy.ts +1 -1
- package/src/resources/extensions/gsd/discussion-handoff.ts +9 -5
- package/src/resources/extensions/gsd/docs/preferences-reference.md +2 -2
- package/src/resources/extensions/gsd/doctor-engine-checks.ts +233 -5
- package/src/resources/extensions/gsd/doctor-git-checks.ts +24 -2
- package/src/resources/extensions/gsd/doctor-providers.ts +103 -9
- package/src/resources/extensions/gsd/doctor-runtime-checks.ts +5 -15
- package/src/resources/extensions/gsd/doctor-types.ts +4 -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/exec-sandbox.ts +56 -11
- 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 +249 -0
- package/src/resources/extensions/gsd/forensics.ts +4 -34
- package/src/resources/extensions/gsd/git-constants.ts +1 -1
- package/src/resources/extensions/gsd/git-service.ts +76 -7
- package/src/resources/extensions/gsd/gitignore.ts +11 -4
- package/src/resources/extensions/gsd/guidance.ts +7 -7
- package/src/resources/extensions/gsd/guided-flow-queue.ts +89 -4
- package/src/resources/extensions/gsd/guided-flow.ts +11 -6
- package/src/resources/extensions/gsd/health-widget.ts +69 -32
- package/src/resources/extensions/gsd/json-persistence.ts +20 -0
- package/src/resources/extensions/gsd/knowledge-backfill.ts +16 -10
- package/src/resources/extensions/gsd/layout-policy.ts +86 -0
- package/src/resources/extensions/gsd/markdown-renderer.ts +409 -112
- 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/memory-backfill.ts +26 -20
- package/src/resources/extensions/gsd/memory-consolidation-scanner.ts +51 -19
- package/src/resources/extensions/gsd/metrics.ts +26 -13
- 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 +57 -8
- package/src/resources/extensions/gsd/migration-auto-check.ts +27 -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 +78 -19
- package/src/resources/extensions/gsd/milestone-implementation-evidence.ts +35 -21
- 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/orphan-stash-audit.ts +108 -20
- 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 +25 -9
- package/src/resources/extensions/gsd/preferences.ts +80 -12
- 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 +39 -0
- package/src/resources/extensions/gsd/prompts/complete-slice.md +21 -16
- 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/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-milestone.md +2 -2
- 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/plan-slice.md +3 -3
- 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/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/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/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/queue-order.ts +3 -2
- package/src/resources/extensions/gsd/quick.ts +43 -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/root-write-leak-guard.ts +13 -1
- package/src/resources/extensions/gsd/safety/content-validator.ts +2 -1
- package/src/resources/extensions/gsd/safety/destructive-guard.ts +9 -1
- package/src/resources/extensions/gsd/safety/evidence-collector.ts +16 -1
- package/src/resources/extensions/gsd/safety/evidence-cross-ref.ts +45 -1
- package/src/resources/extensions/gsd/safety/file-change-validator.ts +8 -2
- package/src/resources/extensions/gsd/service-tier.ts +2 -0
- package/src/resources/extensions/gsd/session-forensics.ts +11 -1
- package/src/resources/extensions/gsd/session-lock.ts +7 -6
- 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/derive/cache.ts +46 -0
- package/src/resources/extensions/gsd/state/derive/db-open.ts +45 -0
- package/src/resources/extensions/gsd/state/derive/from-db.ts +561 -0
- package/src/resources/extensions/gsd/state/derive/index.ts +104 -0
- package/src/resources/extensions/gsd/state/derive/interrupted-work.ts +31 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/artifact-db.ts +35 -4
- 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 +176 -30
- package/src/resources/extensions/gsd/state-reconciliation/index.ts +86 -27
- package/src/resources/extensions/gsd/state-reconciliation/registry.ts +45 -18
- package/src/resources/extensions/gsd/state-reconciliation/types.ts +19 -0
- package/src/resources/extensions/gsd/state.ts +37 -695
- 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/artifact-retry-cap.test.ts +4 -3
- package/src/resources/extensions/gsd/tests/auto-artifact-paths.test.ts +420 -2
- package/src/resources/extensions/gsd/tests/auto-budget-alerts.test.ts +14 -5
- 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-orchestrator.test.ts +15 -12
- package/src/resources/extensions/gsd/tests/auto-pause-double-entry-guard.test.ts +36 -0
- 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 +182 -4
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +146 -1
- package/src/resources/extensions/gsd/tests/auto-retry-mcp-churn-fixes.test.ts +30 -0
- package/src/resources/extensions/gsd/tests/auto-worktree-auto-resolve.test.ts +17 -0
- package/src/resources/extensions/gsd/tests/codebase-generator.test.ts +15 -11
- package/src/resources/extensions/gsd/tests/commands-context.test.ts +26 -0
- 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 +863 -0
- package/src/resources/extensions/gsd/tests/commands-verdict.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/commands-worktree-clean.test.ts +80 -0
- 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.test.ts +28 -0
- package/src/resources/extensions/gsd/tests/complete-slice-reopen-handoff.test.ts +151 -0
- package/src/resources/extensions/gsd/tests/complete-slice.test.ts +18 -7
- package/src/resources/extensions/gsd/tests/complete-task-rollback-evidence.test.ts +48 -8
- package/src/resources/extensions/gsd/tests/complete-task.test.ts +82 -7
- package/src/resources/extensions/gsd/tests/consent-question.test.ts +45 -0
- package/src/resources/extensions/gsd/tests/dashboard-overlay.test.ts +90 -0
- package/src/resources/extensions/gsd/tests/db-authority-regression.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/db-memory-fts-schema.test.ts +58 -3
- package/src/resources/extensions/gsd/tests/decisions-projection-from-memories.test.ts +51 -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/destructive-guard.test.ts +44 -0
- 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-history.test.ts +102 -0
- package/src/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +175 -43
- package/src/resources/extensions/gsd/tests/dispatch-rule-coverage.test.ts +26 -1
- package/src/resources/extensions/gsd/tests/dist-redirect.mjs +7 -0
- package/src/resources/extensions/gsd/tests/doctor-forensics-db-open-regression.test.ts +70 -2
- package/src/resources/extensions/gsd/tests/doctor-git-checks-autoresolve.test.ts +149 -0
- package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +107 -0
- package/src/resources/extensions/gsd/tests/doctor-scope-db-unavailable.test.ts +239 -2
- 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/exec-graceful-kill.test.ts +38 -0
- package/src/resources/extensions/gsd/tests/exec-sandbox.test.ts +16 -0
- package/src/resources/extensions/gsd/tests/exec-tool.test.ts +45 -1
- 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-change-validator.test.ts +40 -0
- package/src/resources/extensions/gsd/tests/file-lock.test.ts +43 -0
- package/src/resources/extensions/gsd/tests/flat-phase-migration.test.ts +149 -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/forensics-error-filter.test.ts +88 -0
- package/src/resources/extensions/gsd/tests/gitignore-bg-shell-runtime.test.ts +4 -0
- 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/guided-discuss-milestone-prompt-rendering.test.ts +42 -0
- package/src/resources/extensions/gsd/tests/health-widget.test.ts +268 -3
- package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +19 -11
- package/src/resources/extensions/gsd/tests/integration/commands-eval-review.integration.test.ts +6 -2
- package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +130 -3
- 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/integration/queue-active-milestone-context-budget.test.ts +93 -0
- package/src/resources/extensions/gsd/tests/integration/quick-branch-lifecycle.test.ts +56 -9
- package/src/resources/extensions/gsd/tests/json-persistence-atomic.test.ts +47 -0
- package/src/resources/extensions/gsd/tests/knowledge-backfill-projection.test.ts +35 -0
- package/src/resources/extensions/gsd/tests/knowledge-cold-start.test.ts +386 -0
- package/src/resources/extensions/gsd/tests/layout-policy.test.ts +59 -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/memory-consolidation-scanner.test.ts +78 -0
- package/src/resources/extensions/gsd/tests/memory-store.test.ts +48 -0
- package/src/resources/extensions/gsd/tests/merge-closeout-consistency-gate.test.ts +31 -1
- package/src/resources/extensions/gsd/tests/metrics-ledger-cap.test.ts +239 -0
- package/src/resources/extensions/gsd/tests/metrics-prune-cache-invalidation.test.ts +6 -0
- package/src/resources/extensions/gsd/tests/metrics.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/migrate-external-worktree.test.ts +57 -0
- package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +70 -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 +204 -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/observability-validator-boundary.test.ts +194 -0
- package/src/resources/extensions/gsd/tests/orchestrator-logs.test.ts +47 -1
- package/src/resources/extensions/gsd/tests/orphan-stash-audit.test.ts +91 -7
- 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/parallel-research-dispatch.test.ts +26 -0
- package/src/resources/extensions/gsd/tests/parsers-legacy-importers.test.ts +4 -1
- package/src/resources/extensions/gsd/tests/pipeline-variant-dispatch.test.ts +1 -1
- 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-prompt.test.ts +10 -0
- package/src/resources/extensions/gsd/tests/plan-slice.test.ts +161 -27
- package/src/resources/extensions/gsd/tests/plan-task.test.ts +48 -5
- 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/post-mutation-hook.test.ts +4 -2
- package/src/resources/extensions/gsd/tests/preferences.test.ts +47 -1
- package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +54 -1
- package/src/resources/extensions/gsd/tests/progressive-planning.test.ts +50 -14
- package/src/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +58 -0
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +23 -6
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +301 -0
- package/src/resources/extensions/gsd/tests/read-uat-gate-verdict.test.ts +185 -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/register-hooks-depth-verification.test.ts +166 -4
- package/src/resources/extensions/gsd/tests/register-hooks-loop-guard-auto.test.ts +103 -0
- package/src/resources/extensions/gsd/tests/replan-handler.test.ts +4 -4
- package/src/resources/extensions/gsd/tests/root-write-leak-guard.test.ts +20 -1
- package/src/resources/extensions/gsd/tests/round-trip-property.test.ts +137 -0
- package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +15 -3
- package/src/resources/extensions/gsd/tests/session-lock-transient-read.test.ts +28 -2
- 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/stalled-tool-recovery.test.ts +56 -0
- package/src/resources/extensions/gsd/tests/state-reconciliation-drift.test.ts +329 -57
- 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/tool-call-loop-guard.test.ts +208 -0
- package/src/resources/extensions/gsd/tests/tool-param-optionality.test.ts +32 -3
- 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/undo.test.ts +113 -37
- package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +212 -11
- package/src/resources/extensions/gsd/tests/unmerged-milestone-guard.test.ts +87 -0
- package/src/resources/extensions/gsd/tests/uok-gitops-turn-action.test.ts +110 -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 +130 -0
- package/src/resources/extensions/gsd/tests/validation-gate-patterns.test.ts +34 -6
- package/src/resources/extensions/gsd/tests/verification-retry-policy.test.ts +69 -4
- package/src/resources/extensions/gsd/tests/verify-artifact-tightened.test.ts +156 -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-manifest.test.ts +96 -15
- package/src/resources/extensions/gsd/tests/workflow-mcp-preflight.test.ts +134 -0
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +42 -12
- package/src/resources/extensions/gsd/tests/workflow-projections.test.ts +3 -4
- package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +70 -13
- package/src/resources/extensions/gsd/tests/workspace-git-preflight.test.ts +151 -2
- package/src/resources/extensions/gsd/tests/worktree-health.test.ts +43 -3
- package/src/resources/extensions/gsd/tests/worktree-manager.test.ts +65 -0
- package/src/resources/extensions/gsd/tests/worktree-safety.test.ts +39 -18
- 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 +7 -9
- package/src/resources/extensions/gsd/tools/complete-slice.ts +14 -11
- package/src/resources/extensions/gsd/tools/complete-task.ts +68 -16
- package/src/resources/extensions/gsd/tools/exec-tool.ts +7 -3
- package/src/resources/extensions/gsd/tools/plan-slice.ts +61 -50
- package/src/resources/extensions/gsd/tools/plan-task.ts +43 -2
- 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/undo.ts +55 -15
- package/src/resources/extensions/gsd/unit-context-composer.ts +33 -7
- package/src/resources/extensions/gsd/unit-registry.ts +63 -9
- package/src/resources/extensions/gsd/unmerged-milestone-guard.ts +101 -6
- package/src/resources/extensions/gsd/validation-block-guard.ts +59 -7
- package/src/resources/extensions/gsd/verification-gate.ts +8 -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-manifest.ts +141 -7
- package/src/resources/extensions/gsd/workflow-mcp.ts +12 -1
- package/src/resources/extensions/gsd/workflow-projections.ts +44 -18
- package/src/resources/extensions/gsd/workspace-git-preflight.ts +31 -0
- 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 +72 -16
- package/src/resources/extensions/gsd/worktree-safety.ts +31 -11
- package/src/resources/extensions/mcp-client/manager.ts +3 -3
- package/dist/web/standalone/.next/static/chunks/2772.bfa657f49f955239.js +0 -1
- package/dist/web/standalone/.next/static/chunks/796.e0bdc932325d7e03.js +0 -10
- package/dist/web/standalone/.next/static/chunks/8785.2e5a118797fb2dd2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/webpack-f0285ce91d4ec9ef.js +0 -1
- /package/dist/web/standalone/.next/static/{Mh74c-rhxHjKHKoRwd2ij → zQLcXm0Za8lexoXtgDpMG}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{Mh74c-rhxHjKHKoRwd2ij → zQLcXm0Za8lexoXtgDpMG}/_ssgManifest.js +0 -0
|
@@ -78,6 +78,8 @@ export class AutoSession {
|
|
|
78
78
|
currentUnitRouting = null;
|
|
79
79
|
currentMilestoneId = null;
|
|
80
80
|
sourceObservations = new SourceObservationStore();
|
|
81
|
+
/** Live tool-surface snapshot for dashboard / runtime telemetry while auto is active. */
|
|
82
|
+
toolSurfaceSnapshot = null;
|
|
81
83
|
// ── Model state ──────────────────────────────────────────────────────────
|
|
82
84
|
autoModeStartModel = null;
|
|
83
85
|
/** Explicit /gsd model pin captured at bootstrap (session-scoped policy override). */
|
|
@@ -122,6 +124,13 @@ export class AutoSession {
|
|
|
122
124
|
* the issues after MAX_PRE_EXEC_RETRIES re-attempts.
|
|
123
125
|
*/
|
|
124
126
|
preExecRetryCount = new Map();
|
|
127
|
+
/**
|
|
128
|
+
* Tracks how many times each slice unit has been re-dispatched to plan-slice
|
|
129
|
+
* because task plan files were missing. Keyed by unitId (e.g. "M001/S01").
|
|
130
|
+
* Separate from preExecRetryCount so pre-exec gate failures do not block or
|
|
131
|
+
* conflate with missing-task-plan recovery.
|
|
132
|
+
*/
|
|
133
|
+
missingTaskPlanRetryCount = new Map();
|
|
125
134
|
// ── Tool invocation errors (#2883) ──────────────────────────────────
|
|
126
135
|
/** Set when a GSD tool execution ends with isError due to malformed/truncated
|
|
127
136
|
* JSON arguments. Checked by postUnitPreVerification to break retry loops. */
|
|
@@ -270,6 +279,7 @@ export class AutoSession {
|
|
|
270
279
|
this.unitRecoveryCount.clear();
|
|
271
280
|
// Unit
|
|
272
281
|
this.clearCurrentUnit();
|
|
282
|
+
this.toolSurfaceSnapshot = null;
|
|
273
283
|
this.currentTraceId = null;
|
|
274
284
|
this.currentTurnId = null;
|
|
275
285
|
this.currentUnitRouting = null;
|
|
@@ -307,6 +317,7 @@ export class AutoSession {
|
|
|
307
317
|
this.consecutiveCompleteBootstraps = 0;
|
|
308
318
|
this.lastPreExecFailure = null;
|
|
309
319
|
this.preExecRetryCount.clear();
|
|
320
|
+
this.missingTaskPlanRetryCount.clear();
|
|
310
321
|
this.lastToolInvocationError = null;
|
|
311
322
|
this.toolUnavailableRetries = 0;
|
|
312
323
|
this.lastUnitAgentEndMessages = null;
|
|
@@ -25,7 +25,7 @@ export function decideVerificationRetry(input) {
|
|
|
25
25
|
return { action: "pause", reason: "missing-retry-context" };
|
|
26
26
|
}
|
|
27
27
|
const key = verificationRetryKey(unitType, retryInfo.unitId);
|
|
28
|
-
const failureHash = hashVerificationFailureContext(retryInfo.failureContext);
|
|
28
|
+
const failureHash = hashVerificationFailureContext(retryInfo.signature ?? retryInfo.failureContext);
|
|
29
29
|
if (input.previousFailureHash === failureHash) {
|
|
30
30
|
return {
|
|
31
31
|
action: "pause",
|
|
@@ -76,6 +76,15 @@ const COMPLETE_AND_BREAK_REASONS = [
|
|
|
76
76
|
function isCompleteAndBreakReason(reason) {
|
|
77
77
|
return COMPLETE_AND_BREAK_REASONS.includes(reason);
|
|
78
78
|
}
|
|
79
|
+
/** Strip per-attempt counter suffixes so detect-stuck Rule 1 can match repeats. */
|
|
80
|
+
const FAILURE_DETAIL_ATTEMPT_SUFFIX_RE = /\s*\(attempt\s+\d+(?:\/\d+)?\)\.?$/i;
|
|
81
|
+
function failureDetailForLedger(detail) {
|
|
82
|
+
const trimmed = detail?.trim();
|
|
83
|
+
if (!trimmed)
|
|
84
|
+
return undefined;
|
|
85
|
+
const normalized = trimmed.replace(FAILURE_DETAIL_ATTEMPT_SUFFIX_RE, "").trim();
|
|
86
|
+
return normalized || undefined;
|
|
87
|
+
}
|
|
79
88
|
export function decideFinalizeResult(input) {
|
|
80
89
|
if (input.action === "break") {
|
|
81
90
|
const reason = input.reason ?? "unknown";
|
|
@@ -90,9 +99,14 @@ export function decideFinalizeResult(input) {
|
|
|
90
99
|
};
|
|
91
100
|
}
|
|
92
101
|
if (input.action === "continue") {
|
|
102
|
+
// Carry the specific verification failure (e.g. "roadmap has zero slices",
|
|
103
|
+
// "15-SUMMARY.md was not found on disk") into the ledger summary so the
|
|
104
|
+
// stuck-loop kill message is actionable. The `finalize-retry` prefix is
|
|
105
|
+
// preserved so legacy ledger filters and dashboards still match (#852).
|
|
106
|
+
const detail = failureDetailForLedger(input.failureDetail);
|
|
93
107
|
return {
|
|
94
108
|
action: "retry",
|
|
95
|
-
ledgerErrorSummary: "finalize-retry",
|
|
109
|
+
ledgerErrorSummary: detail ? `finalize-retry: ${detail}` : "finalize-retry",
|
|
96
110
|
};
|
|
97
111
|
}
|
|
98
112
|
return { action: "complete" };
|
|
@@ -5,27 +5,93 @@
|
|
|
5
5
|
// resolveExpectedArtifactPath and diagnoseExpectedArtifact moved here from
|
|
6
6
|
// auto-recovery.ts (Phase 5 dead-code cleanup). The artifact verification
|
|
7
7
|
// function was removed entirely — callers now query WorkflowEngine directly.
|
|
8
|
-
import { gsdRoot,
|
|
8
|
+
import { gsdRoot, resolveDir, resolveFile, resolveMilestonePath, resolveMilestoneFile, resolveSliceFile, relMilestoneFile, relSliceFile, buildTaskFileName, resolveSlicePath, resolveTasksDir, dirIsMetaOnlyLegacyMilestone, } from "./paths.js";
|
|
9
|
+
import { milestoneIdToPhaseNum } from "./layout-policy.js";
|
|
9
10
|
import { parseUnitId } from "./unit-id.js";
|
|
10
|
-
import { join } from "node:path";
|
|
11
|
+
import { dirname, join, relative } from "node:path";
|
|
12
|
+
import { existsSync } from "node:fs";
|
|
11
13
|
function resolveMilestoneArtifactPath(base, mid, suffix) {
|
|
12
14
|
const existing = resolveProjectedMilestoneFile(base, mid, suffix) ?? resolveProjectMilestoneFile(base, mid, suffix);
|
|
13
15
|
if (existing)
|
|
14
16
|
return existing;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
+
// Try projected (worktree) path, then project-root path. Both can return
|
|
18
|
+
// either a legacy (milestones/<MID>/) or flat-phase (phases/NN-slug/) dir.
|
|
19
|
+
const dir = resolveProjectedMilestonePath(base, mid) ?? resolveProjectMilestonePath(base, mid) ?? resolveMilestonePath(base, mid);
|
|
20
|
+
if (dir) {
|
|
21
|
+
// The filename depends on the LAYOUT of the resolved directory, not on
|
|
22
|
+
// which resolver found it. A flat-phase dir (phases/NN-slug/) uses the
|
|
23
|
+
// phase-number prefix (15-CONTEXT.md); a legacy dir (milestones/<MID>/)
|
|
24
|
+
// uses the milestone-id prefix (M015-CONTEXT.md). Building the wrong
|
|
25
|
+
// filename for the resolved dir produces existsSync-false paths that trap
|
|
26
|
+
// the unit in a finalize-retry loop (#852).
|
|
27
|
+
//
|
|
28
|
+
// Layout is determined structurally from the resolved directory's parent
|
|
29
|
+
// segment name, NOT by comparing against a root-anchored legacyMilestonesDir
|
|
30
|
+
// base path. On a canonical worktree (<project>/.gsd-worktrees/M001/),
|
|
31
|
+
// legacyMilestonesDir uses gsdProjectionRoot (the worktree .gsd) while
|
|
32
|
+
// resolveProjectMilestonePath uses gsdRoot (the project .gsd) — two
|
|
33
|
+
// different roots. A dir returned by resolveProjectMilestonePath would
|
|
34
|
+
// fail the startsWith check against the worktree root and incorrectly
|
|
35
|
+
// produce a flat-phase filename for a legacy directory (#bugbot c5ee8eba).
|
|
36
|
+
const parentDir = dirname(dir);
|
|
37
|
+
const isLegacy = parentDir.endsWith("/milestones") || parentDir.endsWith("\\milestones");
|
|
38
|
+
const phaseNum = milestoneIdToPhaseNum(mid);
|
|
39
|
+
const filename = isLegacy
|
|
40
|
+
? `${mid}-${suffix}.md`
|
|
41
|
+
: `${String(phaseNum).padStart(2, "0")}-${suffix}.md`;
|
|
42
|
+
return join(dir, filename);
|
|
43
|
+
}
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Build the layout-aware filename for a milestone artifact suffix.
|
|
48
|
+
* Exported so other callers (e.g. verification diagnostics) use the same
|
|
49
|
+
* naming policy: flat-phase dirs use the phase-number prefix (15-CONTEXT.md),
|
|
50
|
+
* legacy dirs use the milestone-id prefix (M015-CONTEXT.md).
|
|
51
|
+
*
|
|
52
|
+
* Layout is determined structurally: dirs whose immediate parent is named
|
|
53
|
+
* "milestones" are legacy; all others are flat-phase. This avoids the
|
|
54
|
+
* root-path ambiguity between gsdProjectionRoot (worktree .gsd) and gsdRoot
|
|
55
|
+
* (project .gsd) that caused wrong filenames on canonical worktrees.
|
|
56
|
+
*/
|
|
57
|
+
export function buildMilestoneArtifactFilename(mid, suffix, dir) {
|
|
58
|
+
const parentDir = dirname(dir);
|
|
59
|
+
const isLegacy = parentDir.endsWith("/milestones") || parentDir.endsWith("\\milestones");
|
|
60
|
+
const phaseNum = milestoneIdToPhaseNum(mid);
|
|
61
|
+
return isLegacy
|
|
62
|
+
? `${mid}-${suffix}.md`
|
|
63
|
+
: `${String(phaseNum).padStart(2, "0")}-${suffix}.md`;
|
|
17
64
|
}
|
|
18
65
|
function resolveSliceArtifactPath(base, mid, sid, suffix) {
|
|
19
66
|
const existing = resolveProjectedSliceFile(base, mid, sid, suffix) ?? resolveProjectSliceFile(base, mid, sid, suffix);
|
|
20
67
|
if (existing)
|
|
21
68
|
return existing;
|
|
22
|
-
|
|
23
|
-
|
|
69
|
+
// Flat-phase: plan files live at phases/NN-slug/NN-MM-SUFFIX.md — resolveSliceFile handles both layouts.
|
|
70
|
+
const flatPhase = resolveSliceFile(base, mid, sid, suffix);
|
|
71
|
+
if (flatPhase)
|
|
72
|
+
return flatPhase;
|
|
73
|
+
// File doesn't exist yet — use relSliceFile for the layout-aware canonical path.
|
|
74
|
+
// buildSliceFileName(sid) only has sliceId → MM-SUFFIX.md, wrong for both layouts.
|
|
75
|
+
return join(base, relSliceFile(base, mid, sid, suffix));
|
|
24
76
|
}
|
|
25
77
|
function resolveProjectMilestonePath(base, mid) {
|
|
26
78
|
const milestonesDir = join(gsdRoot(base), "milestones");
|
|
27
79
|
const dir = resolveDir(milestonesDir, mid);
|
|
28
|
-
|
|
80
|
+
if (!dir)
|
|
81
|
+
return null;
|
|
82
|
+
// git-service.ts creates milestones/<MID>/ for integration-branch metadata
|
|
83
|
+
// (<MID>-META.json) even in flat-phase projects. A dir that holds ONLY
|
|
84
|
+
// *-META.json files must not be treated as a real legacy milestone dir —
|
|
85
|
+
// otherwise this early-return resolves CONTEXT/ROADMAP/SUMMARY to the legacy
|
|
86
|
+
// path (milestones/<MID>/<MID>-<SUFFIX>.md) before the flat-phase fallback
|
|
87
|
+
// can run, trapping the unit in a finalize-retry loop (#852 follow-up).
|
|
88
|
+
//
|
|
89
|
+
// We use dirIsMetaOnlyLegacyMilestone rather than !dirIsContentBearingLegacyMilestone
|
|
90
|
+
// so that an EMPTY dir (a new milestone before any content is written) is NOT
|
|
91
|
+
// blocked — it is a valid legacy target that write-paths should resolve to.
|
|
92
|
+
if (dirIsMetaOnlyLegacyMilestone(join(milestonesDir, dir)))
|
|
93
|
+
return null;
|
|
94
|
+
return join(milestonesDir, dir);
|
|
29
95
|
}
|
|
30
96
|
function resolveProjectMilestoneFile(base, mid, suffix) {
|
|
31
97
|
const dir = resolveProjectMilestonePath(base, mid);
|
|
@@ -50,16 +116,10 @@ function resolveProjectSliceFile(base, mid, sid, suffix) {
|
|
|
50
116
|
return file ? join(dir, file) : null;
|
|
51
117
|
}
|
|
52
118
|
function resolveProjectedMilestonePath(base, mid) {
|
|
53
|
-
|
|
54
|
-
const dir = resolveDir(milestonesDir, mid);
|
|
55
|
-
return dir ? join(milestonesDir, dir) : null;
|
|
119
|
+
return resolveMilestonePath(base, mid);
|
|
56
120
|
}
|
|
57
121
|
function resolveProjectedMilestoneFile(base, mid, suffix) {
|
|
58
|
-
|
|
59
|
-
if (!dir)
|
|
60
|
-
return null;
|
|
61
|
-
const file = resolveFile(dir, mid, suffix);
|
|
62
|
-
return file ? join(dir, file) : null;
|
|
122
|
+
return resolveMilestoneFile(base, mid, suffix);
|
|
63
123
|
}
|
|
64
124
|
function resolveProjectedSlicePath(base, mid, sid) {
|
|
65
125
|
const milestoneDir = resolveProjectedMilestonePath(base, mid);
|
|
@@ -128,10 +188,13 @@ export function resolveExpectedArtifactPath(unitType, unitId, base) {
|
|
|
128
188
|
return resolveSliceArtifactPath(base, mid, sid, "ASSESSMENT");
|
|
129
189
|
}
|
|
130
190
|
case "execute-task": {
|
|
131
|
-
const
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
191
|
+
const slicePath = resolveProjectedSlicePath(base, mid, sid)
|
|
192
|
+
?? resolveProjectSlicePath(base, mid, sid)
|
|
193
|
+
?? resolveSlicePath(base, mid, sid);
|
|
194
|
+
if (!slicePath || !tid)
|
|
195
|
+
return null;
|
|
196
|
+
const tasksDir = resolveTasksDir(base, mid, sid) ?? slicePath;
|
|
197
|
+
return join(tasksDir, buildTaskFileName(tid, "SUMMARY"));
|
|
135
198
|
}
|
|
136
199
|
case "complete-slice": {
|
|
137
200
|
return resolveSliceArtifactPath(base, mid, sid, "SUMMARY");
|
|
@@ -219,3 +282,29 @@ export function diagnoseExpectedArtifact(unitType, unitId, base) {
|
|
|
219
282
|
return null;
|
|
220
283
|
}
|
|
221
284
|
}
|
|
285
|
+
/**
|
|
286
|
+
* Resolve slice RESEARCH with worktree projection first, then canonical
|
|
287
|
+
* project-root path. Shared by dispatch rules, execute-task prompts, and
|
|
288
|
+
* artifact verification.
|
|
289
|
+
*/
|
|
290
|
+
export function resolveSliceResearchLocation(basePath, mid, sid) {
|
|
291
|
+
const projectedFile = resolveSliceFile(basePath, mid, sid, "RESEARCH");
|
|
292
|
+
if (projectedFile) {
|
|
293
|
+
return {
|
|
294
|
+
absolutePath: projectedFile,
|
|
295
|
+
relativePath: relSliceFile(basePath, mid, sid, "RESEARCH"),
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
const canonicalPath = resolveExpectedArtifactPath("research-slice", `${mid}/${sid}`, basePath);
|
|
299
|
+
if (canonicalPath && existsSync(canonicalPath)) {
|
|
300
|
+
return {
|
|
301
|
+
absolutePath: canonicalPath,
|
|
302
|
+
relativePath: relative(basePath, canonicalPath),
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
return { absolutePath: null, relativePath: null };
|
|
306
|
+
}
|
|
307
|
+
/** Returns the absolute RESEARCH path when it exists, otherwise null. */
|
|
308
|
+
export function resolveExistingSliceResearchPath(basePath, mid, sid) {
|
|
309
|
+
return resolveSliceResearchLocation(basePath, mid, sid).absolutePath;
|
|
310
|
+
}
|
|
@@ -68,6 +68,10 @@ export function resolveCompactionThresholdPercent(raw) {
|
|
|
68
68
|
const value = typeof raw === "number" && Number.isFinite(raw) && raw >= 0.5 && raw <= 0.95 ? raw : 0.6;
|
|
69
69
|
return value <= 1 ? value * 100 : value;
|
|
70
70
|
}
|
|
71
|
-
export
|
|
71
|
+
export const HARD_CONTEXT_REROOT_THRESHOLD_PERCENT = 90;
|
|
72
|
+
export function shouldWarnStepSessionForContext(contextPercent, compactionThresholdPercent) {
|
|
72
73
|
return getContextPauseAction(contextPercent, resolveCompactionThresholdPercent(compactionThresholdPercent)) === "pause";
|
|
73
74
|
}
|
|
75
|
+
export function shouldRerootStepSessionForContext(contextPercent) {
|
|
76
|
+
return getContextPauseAction(contextPercent, HARD_CONTEXT_REROOT_THRESHOLD_PERCENT) === "pause";
|
|
77
|
+
}
|
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
// File Purpose: Declarative auto-mode dispatch rules and dispatch resolver.
|
|
3
3
|
import { loadFile, extractUatType, loadActiveOverrides } from "./files.js";
|
|
4
4
|
import { getUatBrowserToolSupportError } from "./uat-policy.js";
|
|
5
|
-
import { isDbAvailable, getMilestoneSlices, getMilestoneSliceSummaries, getClosedSliceIds, getPendingGatesForTurn, markPendingGatesOmittedForTurn, getMilestone, insertArtifact, insertAssessment, setSliceSketchFlag, transaction, getAssessment, } from "./gsd-db.js";
|
|
5
|
+
import { isDbAvailable, getMilestoneSlices, getMilestoneSliceSummaries, getClosedSliceIds, getPendingGatesForTurn, markPendingGatesOmittedForTurn, getMilestone, insertArtifact, insertAssessment, setSliceSketchFlag, transaction, getAssessment, getSliceRunUatAssessment, } 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";
|
|
@@ -40,7 +40,7 @@ import { detectWorktreeName } from "./worktree.js";
|
|
|
40
40
|
import { probeGitConflictState } from "./git-conflict-state.js";
|
|
41
41
|
import { runTurnGitAction } from "./git-service.js";
|
|
42
42
|
import { parseUnitId } from "./unit-id.js";
|
|
43
|
-
import { resolveExpectedArtifactPath } from "./auto-artifact-paths.js";
|
|
43
|
+
import { resolveExpectedArtifactPath, resolveExistingSliceResearchPath } from "./auto-artifact-paths.js";
|
|
44
44
|
import { formatCloseoutProofBlock, proveMilestoneCloseout, } from "./milestone-closeout-proof.js";
|
|
45
45
|
function resolveExistingExpectedArtifact(unitType, unitId, basePath) {
|
|
46
46
|
const artifactPath = resolveExpectedArtifactPath(unitType, unitId, basePath);
|
|
@@ -155,6 +155,18 @@ export async function readUatGateVerdict(basePath, mid, sliceId) {
|
|
|
155
155
|
return { verdict: legacyUatVerdict, uatType };
|
|
156
156
|
}
|
|
157
157
|
}
|
|
158
|
+
// ADR-017 DB fallback: when the ASSESSMENT markdown is missing or orphaned
|
|
159
|
+
// from its canonical path (e.g. after a milestone artifact-layout migration
|
|
160
|
+
// moves slice artifacts from `phases/…` to `milestones/…`), consult the
|
|
161
|
+
// authoritative assessments table by (mid, slice) identity instead of path.
|
|
162
|
+
// `gsd_uat_result_save` always writes this row, so it is the source of truth.
|
|
163
|
+
const runUatAssessment = getSliceRunUatAssessment(mid, sliceId);
|
|
164
|
+
if (runUatAssessment?.status) {
|
|
165
|
+
return {
|
|
166
|
+
verdict: runUatAssessment.status,
|
|
167
|
+
uatType: uatType ?? extractUatType(runUatAssessment.fullContent),
|
|
168
|
+
};
|
|
169
|
+
}
|
|
158
170
|
return null;
|
|
159
171
|
}
|
|
160
172
|
/**
|
|
@@ -319,9 +331,8 @@ function backfillMissingAssessmentsFromSummaries(basePath, mid) {
|
|
|
319
331
|
const summaryPath = resolveSliceFile(basePath, mid, sliceId, "SUMMARY");
|
|
320
332
|
if (!summaryPath || !existsSync(summaryPath))
|
|
321
333
|
continue;
|
|
322
|
-
const slicePath = resolveSlicePath(basePath, mid, sliceId);
|
|
323
334
|
const assessmentPath = resolveSliceFile(basePath, mid, sliceId, "ASSESSMENT")
|
|
324
|
-
?? (
|
|
335
|
+
?? join(basePath, relSliceFile(basePath, mid, sliceId, "ASSESSMENT"));
|
|
325
336
|
if (!assessmentPath)
|
|
326
337
|
continue;
|
|
327
338
|
const assessmentRelPath = relSliceFile(basePath, mid, sliceId, "ASSESSMENT");
|
|
@@ -920,18 +931,15 @@ export const DISPATCH_RULES = [
|
|
|
920
931
|
const dbSlices = getMilestoneSliceSummaries(mid);
|
|
921
932
|
if (dbSlices.length === 0)
|
|
922
933
|
return null;
|
|
923
|
-
// Find slices that need research (no RESEARCH file, dependencies done)
|
|
924
|
-
|
|
925
|
-
|
|
934
|
+
// Find slices that need research (no RESEARCH file, dependencies done).
|
|
935
|
+
// Milestone research informs slice research; it does not satisfy the
|
|
936
|
+
// per-slice RESEARCH artifact contract.
|
|
926
937
|
const researchReadySlices = [];
|
|
927
938
|
for (const slice of dbSlices) {
|
|
928
939
|
if (slice.done)
|
|
929
940
|
continue;
|
|
930
|
-
// Skip S01 when milestone research exists
|
|
931
|
-
if (milestoneResearchFile && slice.id === "S01")
|
|
932
|
-
continue;
|
|
933
941
|
// Skip if already has research
|
|
934
|
-
if (
|
|
942
|
+
if (resolveExistingSliceResearchPath(basePath, mid, slice.id))
|
|
935
943
|
continue;
|
|
936
944
|
// Skip if dependencies aren't done (check for SUMMARY files)
|
|
937
945
|
const depsComplete = slice.depends.every((depId) => !!resolveExistingExpectedArtifact("complete-slice", `${mid}/${depId}`, basePath));
|
|
@@ -958,7 +966,7 @@ export const DISPATCH_RULES = [
|
|
|
958
966
|
},
|
|
959
967
|
},
|
|
960
968
|
{
|
|
961
|
-
name: "planning (no research
|
|
969
|
+
name: "planning (no research) → research-slice",
|
|
962
970
|
match: async ({ state, mid, midTitle, basePath, prefs }) => {
|
|
963
971
|
if (state.phase !== "planning")
|
|
964
972
|
return null;
|
|
@@ -972,16 +980,8 @@ export const DISPATCH_RULES = [
|
|
|
972
980
|
return missingSliceStop(mid, state.phase);
|
|
973
981
|
const sid = state.activeSlice.id;
|
|
974
982
|
const sTitle = state.activeSlice.title;
|
|
975
|
-
|
|
976
|
-
resolveSliceFile(basePath, mid, sid, "RESEARCH");
|
|
977
|
-
if (researchFile)
|
|
983
|
+
if (resolveExistingSliceResearchPath(basePath, mid, sid))
|
|
978
984
|
return null; // has research, fall through
|
|
979
|
-
// Skip slice research for S01 when milestone research already exists —
|
|
980
|
-
// the milestone research already covers the same ground for the first slice.
|
|
981
|
-
const milestoneResearchFile = resolveExistingExpectedArtifact("research-milestone", mid, basePath) ??
|
|
982
|
-
resolveMilestoneFile(basePath, mid, "RESEARCH");
|
|
983
|
-
if (milestoneResearchFile && sid === "S01")
|
|
984
|
-
return null; // fall through to plan-slice
|
|
985
985
|
return {
|
|
986
986
|
action: "dispatch",
|
|
987
987
|
unitType: "research-slice",
|
|
@@ -1238,15 +1238,43 @@ export const DISPATCH_RULES = [
|
|
|
1238
1238
|
const sid = state.activeSlice.id;
|
|
1239
1239
|
const sTitle = state.activeSlice.title;
|
|
1240
1240
|
const tid = state.activeTask.id;
|
|
1241
|
+
const unitId = `${mid}/${sid}`;
|
|
1241
1242
|
const artifactBasePath = resolveArtifactBasePath(basePath, mid, session);
|
|
1242
1243
|
// Guard: if the slice plan exists but the individual task plan files are
|
|
1243
1244
|
// missing, the planner created S##-PLAN.md with task entries but never
|
|
1244
1245
|
// wrote the tasks/ directory files. Dispatch plan-slice to regenerate
|
|
1245
1246
|
// them rather than hard-stopping — fixes the infinite-loop described in
|
|
1246
|
-
// issue #909.
|
|
1247
|
+
// issue #909. Flat-phase layout embeds tasks in the slice plan file, so
|
|
1248
|
+
// skip recovery when tasks are embedded (<tasks> block or task checkboxes in phases/ plan).
|
|
1247
1249
|
const taskPlanPath = resolveTaskFile(artifactBasePath, mid, sid, tid, "PLAN");
|
|
1250
|
+
const slicePlanPath = resolveSliceFile(artifactBasePath, mid, sid, "PLAN");
|
|
1251
|
+
const phasesRoot = join(gsdProjectionRoot(artifactBasePath), "phases");
|
|
1252
|
+
const slicePlanContent = slicePlanPath && existsSync(slicePlanPath)
|
|
1253
|
+
? readFileSync(slicePlanPath, "utf-8")
|
|
1254
|
+
: "";
|
|
1255
|
+
const isPhasesSlicePlan = slicePlanPath !== null &&
|
|
1256
|
+
(slicePlanPath === phasesRoot || slicePlanPath.startsWith(`${phasesRoot}${sep}`));
|
|
1257
|
+
const hasTaskCheckboxes = /^-\s+\[[ xX]\]\s+\*\*[\w.]+/m.test(slicePlanContent);
|
|
1258
|
+
const tasksEmbeddedInSlicePlan = Boolean(slicePlanPath &&
|
|
1259
|
+
existsSync(slicePlanPath) &&
|
|
1260
|
+
(slicePlanContent.includes("<tasks>") || (isPhasesSlicePlan && hasTaskCheckboxes)));
|
|
1261
|
+
// tasksEmbeddedInSlicePlan is true when tasks live inside the slice plan
|
|
1262
|
+
// (flat-phase phases/ layout with task checkboxes or renderPlanFromDb <tasks> block).
|
|
1248
1263
|
const projectionTaskPlanPath = join(gsdProjectionRoot(artifactBasePath), "milestones", mid, "slices", sid, "tasks", buildTaskFileName(tid, "PLAN"));
|
|
1249
|
-
if ((!taskPlanPath || !existsSync(taskPlanPath)) &&
|
|
1264
|
+
if ((!taskPlanPath || !existsSync(taskPlanPath)) &&
|
|
1265
|
+
!existsSync(projectionTaskPlanPath) &&
|
|
1266
|
+
!tasksEmbeddedInSlicePlan) {
|
|
1267
|
+
const MAX_MISSING_TASK_PLAN_RETRIES = 2;
|
|
1268
|
+
const retryCount = session?.missingTaskPlanRetryCount?.get(unitId) ?? 0;
|
|
1269
|
+
if (retryCount >= MAX_MISSING_TASK_PLAN_RETRIES) {
|
|
1270
|
+
session?.missingTaskPlanRetryCount?.delete(unitId);
|
|
1271
|
+
return {
|
|
1272
|
+
action: "stop",
|
|
1273
|
+
reason: `Missing task-plan recovery failed ${retryCount} times for ${unitId} - manual intervention required. Task plan ${tid} is still missing after regenerating the slice plan. Fix the task-plan files manually, then run /gsd auto to resume.`,
|
|
1274
|
+
level: "error",
|
|
1275
|
+
};
|
|
1276
|
+
}
|
|
1277
|
+
session?.missingTaskPlanRetryCount?.set(unitId, retryCount + 1);
|
|
1250
1278
|
if (isDebugEnabled()) {
|
|
1251
1279
|
const expectedTaskPlanPath = join(artifactBasePath, relTaskFile(artifactBasePath, mid, sid, tid, "PLAN"));
|
|
1252
1280
|
const originalProjectRoot = session?.originalBasePath || basePath;
|
|
@@ -1270,10 +1298,11 @@ export const DISPATCH_RULES = [
|
|
|
1270
1298
|
return {
|
|
1271
1299
|
action: "dispatch",
|
|
1272
1300
|
unitType: "plan-slice",
|
|
1273
|
-
unitId
|
|
1301
|
+
unitId,
|
|
1274
1302
|
prompt: await buildPlanSlicePrompt(mid, midTitle, sid, sTitle, basePath, undefined, { sessionContextWindow, modelRegistry, sessionProvider }),
|
|
1275
1303
|
};
|
|
1276
1304
|
}
|
|
1305
|
+
session?.missingTaskPlanRetryCount?.delete(unitId);
|
|
1277
1306
|
return null;
|
|
1278
1307
|
},
|
|
1279
1308
|
},
|
|
@@ -1352,7 +1381,13 @@ export const DISPATCH_RULES = [
|
|
|
1352
1381
|
}
|
|
1353
1382
|
if (!existsSync(mDir))
|
|
1354
1383
|
mkdirSync(mDir, { recursive: true });
|
|
1355
|
-
|
|
1384
|
+
// Use relMilestoneFile for the layout-aware filename:
|
|
1385
|
+
// legacy → milestones/M001/M001-VALIDATION.md
|
|
1386
|
+
// flat-phase → phases/01-slug/01-VALIDATION.md
|
|
1387
|
+
// When the milestone dir is only in the project root (worktree has none),
|
|
1388
|
+
// write to the project root so the artifact lands in the canonical location.
|
|
1389
|
+
const writeBase = resolveMilestonePath(artifactBasePath, mid) != null ? artifactBasePath : projectRoot;
|
|
1390
|
+
const validationPath = join(writeBase, relMilestoneFile(writeBase, mid, "VALIDATION"));
|
|
1356
1391
|
const skipSource = trivialVariant
|
|
1357
1392
|
? "trivial-scope pipeline variant"
|
|
1358
1393
|
: "`skip_milestone_validation` preference";
|
|
@@ -325,8 +325,8 @@ export function floorThinkingLevelForUnit(unitType, level) {
|
|
|
325
325
|
}
|
|
326
326
|
return EXECUTE_TASK_MIN_THINKING_LEVEL;
|
|
327
327
|
}
|
|
328
|
-
export function resolvePreferredModelConfig(unitType, autoModeStartModel, isAutoMode = true, basePath, availableModelIds) {
|
|
329
|
-
const explicitConfig = resolveModelWithFallbacksForUnit(unitType, basePath, availableModelIds);
|
|
328
|
+
export function resolvePreferredModelConfig(unitType, autoModeStartModel, isAutoMode = true, basePath, availableModelIds, preferredModelId) {
|
|
329
|
+
const explicitConfig = resolveModelWithFallbacksForUnit(unitType, basePath, availableModelIds, preferredModelId);
|
|
330
330
|
if (explicitConfig) {
|
|
331
331
|
return {
|
|
332
332
|
...explicitConfig,
|
|
@@ -416,9 +416,12 @@ autoModeStartThinkingLevel) {
|
|
|
416
416
|
flatRateCtx: buildFlatRateContext(autoModeStartModel.provider, ctx, prefs),
|
|
417
417
|
};
|
|
418
418
|
}
|
|
419
|
+
const preferredModelId = autoModeStartModel
|
|
420
|
+
? `${autoModeStartModel.provider}/${autoModeStartModel.id}`
|
|
421
|
+
: ctx.model ? `${ctx.model.provider}/${ctx.model.id}` : undefined;
|
|
419
422
|
const modelConfig = effectiveSessionModelOverride
|
|
420
423
|
? undefined
|
|
421
|
-
: resolvePreferredModelConfig(unitType, autoModeStartModel, isAutoMode, basePath, profileResolutionIds);
|
|
424
|
+
: resolvePreferredModelConfig(unitType, autoModeStartModel, isAutoMode, basePath, profileResolutionIds, preferredModelId);
|
|
422
425
|
let routing = null;
|
|
423
426
|
let appliedModel = null;
|
|
424
427
|
// ── Restore active-tool baseline before policy evaluation (#4959, #4681, #4850) ──
|
|
@@ -578,7 +581,7 @@ autoModeStartThinkingLevel) {
|
|
|
578
581
|
// Hook can override model selection entirely by returning { modelId }
|
|
579
582
|
let hookOverride;
|
|
580
583
|
if (routingConfig.hooks !== false) {
|
|
581
|
-
const eligible = getEligibleModels(classification.tier, availableModelIds, routingConfig);
|
|
584
|
+
const eligible = getEligibleModels(classification.tier, availableModelIds, routingConfig, preferredModelId);
|
|
582
585
|
const hookResult = await pi.emitBeforeModelSelect({
|
|
583
586
|
unitType,
|
|
584
587
|
unitId,
|
|
@@ -614,7 +617,7 @@ autoModeStartThinkingLevel) {
|
|
|
614
617
|
};
|
|
615
618
|
}
|
|
616
619
|
else {
|
|
617
|
-
routingResult = resolveModelForComplexity(classification, modelConfig, routingConfig, availableModelIds, unitType, classification.taskMetadata, capabilityOverrides);
|
|
620
|
+
routingResult = resolveModelForComplexity(classification, modelConfig, routingConfig, availableModelIds, unitType, classification.taskMetadata, capabilityOverrides, preferredModelId);
|
|
618
621
|
}
|
|
619
622
|
if (routingResult.wasDowngraded) {
|
|
620
623
|
effectiveModelConfig = {
|
|
@@ -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;
|
|
@@ -1825,7 +1834,7 @@ export async function postUnitPreVerification(pctx, opts) {
|
|
|
1825
1834
|
saveCustomVerifyRetryCounts(s, { logFailure: err => debugLog("postUnit", { phase: "save-verify-retries-failed", error: err instanceof Error ? err.message : String(err) }) });
|
|
1826
1835
|
s.pendingVerificationRetry = {
|
|
1827
1836
|
unitId: s.currentUnit.id,
|
|
1828
|
-
failureContext:
|
|
1837
|
+
failureContext: failureDetails,
|
|
1829
1838
|
attempt,
|
|
1830
1839
|
};
|
|
1831
1840
|
debugLog("postUnit", { phase: "artifact-verify-retry", unitType: s.currentUnit.type, unitId: s.currentUnit.id, attempt });
|
|
@@ -1952,12 +1961,9 @@ export async function postUnitPostVerification(pctx) {
|
|
|
1952
1961
|
// 2. Delete SUMMARY.md for the task
|
|
1953
1962
|
if (mid && sid && tid) {
|
|
1954
1963
|
// Phase C: read+delete via canonical project root.
|
|
1955
|
-
const
|
|
1956
|
-
if (
|
|
1957
|
-
|
|
1958
|
-
if (existsSync(summaryFile)) {
|
|
1959
|
-
unlinkSync(summaryFile);
|
|
1960
|
-
}
|
|
1964
|
+
const summaryPath = resolveTaskArtifactPath(s.canonicalProjectRoot, mid, sid, tid, "SUMMARY");
|
|
1965
|
+
if (summaryPath && existsSync(summaryPath)) {
|
|
1966
|
+
unlinkSync(summaryPath);
|
|
1961
1967
|
}
|
|
1962
1968
|
}
|
|
1963
1969
|
// 3. Delete the retry_on artifact (e.g. NEEDS-REWORK.md)
|
|
@@ -2089,7 +2095,7 @@ export async function postUnitPostVerification(pctx) {
|
|
|
2089
2095
|
// Write evidence JSON to slice artifacts directory
|
|
2090
2096
|
const slicePath = resolveSlicePath(s.canonicalProjectRoot, mid, sid);
|
|
2091
2097
|
const evidenceFileName = `${sid}-PRE-EXEC-VERIFY.json`;
|
|
2092
|
-
let evidencePath = join(
|
|
2098
|
+
let evidencePath = join(relSlicePath(s.canonicalProjectRoot, mid, sid), evidenceFileName);
|
|
2093
2099
|
if (slicePath) {
|
|
2094
2100
|
writePreExecutionEvidence(result, slicePath, mid, sid);
|
|
2095
2101
|
evidencePath = relative(s.canonicalProjectRoot, join(slicePath, evidenceFileName)) || evidenceFileName;
|