@opengsd/gsd-pi 1.2.0-dev.fbdca60b → 1.3.0-dev.65546769
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -7
- package/dist/cli.js +28 -1
- package/dist/headless-context.js +0 -1
- package/dist/headless-events.d.ts +16 -1
- package/dist/headless-events.js +19 -2
- package/dist/headless.js +8 -1
- package/dist/help-text.js +29 -0
- package/dist/hermes-integration-install.d.ts +17 -0
- package/dist/hermes-integration-install.js +199 -0
- package/dist/jiti-workspace-aliases.d.ts +11 -2
- package/dist/jiti-workspace-aliases.js +19 -3
- package/dist/onboarding.js +9 -4
- package/dist/provider-migrations.d.ts +23 -0
- package/dist/provider-migrations.js +41 -0
- package/dist/read-cli.d.ts +23 -0
- package/dist/read-cli.js +90 -0
- package/dist/resource-loader.d.ts +3 -3
- package/dist/resource-loader.js +4 -13
- package/dist/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/GSD-WORKFLOW.md +22 -22
- package/dist/resources/extensions/claude-code-cli/index.js +7 -1
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +73 -20
- package/dist/resources/extensions/google-cli/stream-adapter.js +16 -1
- package/dist/resources/extensions/gsd/auto/dispatch-history.js +6 -1
- package/dist/resources/extensions/gsd/auto/loop.js +67 -2
- package/dist/resources/extensions/gsd/auto/orchestrator.js +50 -10
- package/dist/resources/extensions/gsd/auto/pre-dispatch.js +8 -0
- package/dist/resources/extensions/gsd/auto/workflow-kernel.js +15 -1
- package/dist/resources/extensions/gsd/auto-artifact-paths.js +81 -19
- package/dist/resources/extensions/gsd/auto-closeout-messaging.js +90 -0
- package/dist/resources/extensions/gsd/auto-dashboard.js +255 -431
- package/dist/resources/extensions/gsd/auto-direct-dispatch.js +15 -3
- package/dist/resources/extensions/gsd/auto-dispatch.js +47 -8
- package/dist/resources/extensions/gsd/auto-model-selection.js +14 -8
- package/dist/resources/extensions/gsd/auto-post-unit.js +39 -29
- package/dist/resources/extensions/gsd/auto-prompts.js +44 -30
- package/dist/resources/extensions/gsd/auto-recovery.js +118 -40
- package/dist/resources/extensions/gsd/auto-runtime-state.js +13 -0
- package/dist/resources/extensions/gsd/auto-start.js +58 -31
- package/dist/resources/extensions/gsd/auto-verification.js +5 -2
- package/dist/resources/extensions/gsd/auto-worktree.js +149 -91
- package/dist/resources/extensions/gsd/auto.js +97 -31
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +42 -54
- package/dist/resources/extensions/gsd/bootstrap/fallback-continuation.js +25 -0
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +24 -2
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +108 -9
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +164 -44
- package/dist/resources/extensions/gsd/bootstrap/tool-search-shim.js +22 -3
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +113 -27
- package/dist/resources/extensions/gsd/closeout-consistency-gate.js +92 -4
- package/dist/resources/extensions/gsd/closeout-wizard.js +8 -3
- package/dist/resources/extensions/gsd/codebase-generator.js +5 -8
- package/dist/resources/extensions/gsd/commands/catalog.js +6 -0
- package/dist/resources/extensions/gsd/commands/dispatcher.js +3 -0
- package/dist/resources/extensions/gsd/commands/gsd-core-aliases-handler.js +39 -0
- package/dist/resources/extensions/gsd/commands/gsd-core-aliases.js +44 -0
- package/dist/resources/extensions/gsd/commands/handlers/core.js +52 -8
- package/dist/resources/extensions/gsd/commands/handlers/ops.js +227 -3
- package/dist/resources/extensions/gsd/commands-cmux.js +3 -1
- package/dist/resources/extensions/gsd/commands-gsd-core.js +868 -0
- package/dist/resources/extensions/gsd/commands-handlers.js +67 -1
- package/dist/resources/extensions/gsd/commands-maintenance.js +79 -2
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +14 -1
- package/dist/resources/extensions/gsd/commands-verdict.js +17 -11
- package/dist/resources/extensions/gsd/compat/compat-marker.js +172 -0
- package/dist/resources/extensions/gsd/compat/index.js +3 -0
- package/dist/resources/extensions/gsd/compat/planning-compat.js +142 -0
- package/dist/resources/extensions/gsd/config-overlay.js +11 -8
- package/dist/resources/extensions/gsd/consent-question.js +12 -0
- package/dist/resources/extensions/gsd/consent-verdict.js +10 -0
- package/dist/resources/extensions/gsd/dashboard-overlay.js +39 -3
- package/dist/resources/extensions/gsd/db/engine.js +27 -0
- package/dist/resources/extensions/gsd/db/queries.js +54 -0
- package/dist/resources/extensions/gsd/db/unit-dispatches.js +22 -1
- package/dist/resources/extensions/gsd/db/writers/reconcile.js +19 -1
- package/dist/resources/extensions/gsd/db-workspace.js +13 -1
- package/dist/resources/extensions/gsd/discussion-handoff.js +9 -5
- package/dist/resources/extensions/gsd/doctor-git-checks.js +30 -4
- package/dist/resources/extensions/gsd/doctor-providers.js +1 -1
- package/dist/resources/extensions/gsd/doctor-runtime-checks.js +13 -24
- package/dist/resources/extensions/gsd/doctor.js +28 -7
- package/dist/resources/extensions/gsd/error-classifier.js +13 -1
- package/dist/resources/extensions/gsd/escalation.js +11 -4
- package/dist/resources/extensions/gsd/export-html.js +10 -3
- package/dist/resources/extensions/gsd/export.js +73 -0
- package/dist/resources/extensions/gsd/file-lock.js +1 -1
- package/dist/resources/extensions/gsd/flat-phase-migration.js +176 -0
- package/dist/resources/extensions/gsd/forensics.js +2 -1
- package/dist/resources/extensions/gsd/git-service.js +7 -4
- package/dist/resources/extensions/gsd/gitignore.js +6 -2
- package/dist/resources/extensions/gsd/guidance.js +7 -7
- package/dist/resources/extensions/gsd/guided-flow.js +11 -6
- package/dist/resources/extensions/gsd/layout-policy.js +75 -0
- package/dist/resources/extensions/gsd/markdown-renderer.js +391 -116
- package/dist/resources/extensions/gsd/mcp-filter.js +44 -10
- package/dist/resources/extensions/gsd/md-importer.js +153 -51
- package/dist/resources/extensions/gsd/metrics.js +19 -11
- package/dist/resources/extensions/gsd/migrate/layout-detect.js +32 -0
- package/dist/resources/extensions/gsd/migrate/planning-writer.js +203 -0
- package/dist/resources/extensions/gsd/migrate-external.js +51 -6
- package/dist/resources/extensions/gsd/migration-auto-check.js +5 -14
- package/dist/resources/extensions/gsd/milestone-actions.js +5 -3
- package/dist/resources/extensions/gsd/milestone-closeout.js +12 -2
- package/dist/resources/extensions/gsd/milestone-ids.js +50 -19
- package/dist/resources/extensions/gsd/milestone-planning-persistence.js +8 -0
- package/dist/resources/extensions/gsd/milestone-validation-verdict.js +7 -4
- package/dist/resources/extensions/gsd/model-router.js +79 -20
- package/dist/resources/extensions/gsd/notification-store.js +22 -29
- package/dist/resources/extensions/gsd/notifications.js +36 -7
- package/dist/resources/extensions/gsd/observability-validator.js +12 -4
- package/dist/resources/extensions/gsd/parallel-monitor-overlay.js +133 -35
- package/dist/resources/extensions/gsd/parsers-legacy.js +40 -14
- package/dist/resources/extensions/gsd/paths.js +356 -44
- package/dist/resources/extensions/gsd/planning-depth.js +2 -1
- package/dist/resources/extensions/gsd/post-execution-checks.js +26 -3
- package/dist/resources/extensions/gsd/preferences-models.js +34 -14
- package/dist/resources/extensions/gsd/preferences.js +148 -13
- package/dist/resources/extensions/gsd/prompts/ai-integration-phase.md +28 -0
- package/dist/resources/extensions/gsd/prompts/audit-fix.md +39 -0
- package/dist/resources/extensions/gsd/prompts/audit-milestone.md +26 -0
- package/dist/resources/extensions/gsd/prompts/audit-uat.md +24 -0
- package/dist/resources/extensions/gsd/prompts/autonomous.md +31 -0
- package/dist/resources/extensions/gsd/prompts/code-review.md +37 -0
- package/dist/resources/extensions/gsd/prompts/complete-milestone.md +8 -2
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +24 -15
- package/dist/resources/extensions/gsd/prompts/discuss-phase.md +31 -0
- package/dist/resources/extensions/gsd/prompts/docs-update.md +13 -0
- package/dist/resources/extensions/gsd/prompts/execute-phase.md +33 -0
- package/dist/resources/extensions/gsd/prompts/execute-task.md +5 -1
- package/dist/resources/extensions/gsd/prompts/explore.md +58 -0
- package/dist/resources/extensions/gsd/prompts/graphify.md +27 -0
- package/dist/resources/extensions/gsd/prompts/health.md +37 -0
- package/dist/resources/extensions/gsd/prompts/import.md +30 -0
- package/dist/resources/extensions/gsd/prompts/inbox.md +27 -0
- package/dist/resources/extensions/gsd/prompts/ingest-docs.md +30 -0
- package/dist/resources/extensions/gsd/prompts/manager.md +21 -0
- package/dist/resources/extensions/gsd/prompts/map-codebase.md +42 -0
- package/dist/resources/extensions/gsd/prompts/milestone-summary.md +27 -0
- package/dist/resources/extensions/gsd/prompts/mvp-phase.md +23 -0
- package/dist/resources/extensions/gsd/prompts/pause-work.md +24 -0
- package/dist/resources/extensions/gsd/prompts/phase.md +22 -0
- package/dist/resources/extensions/gsd/prompts/plan-phase.md +34 -0
- package/dist/resources/extensions/gsd/prompts/plan-review-convergence.md +34 -0
- package/dist/resources/extensions/gsd/prompts/profile-user.md +28 -0
- package/dist/resources/extensions/gsd/prompts/progress.md +30 -0
- package/dist/resources/extensions/gsd/prompts/quick-task.md +1 -1
- package/dist/resources/extensions/gsd/prompts/reactive-execute.md +2 -2
- package/dist/resources/extensions/gsd/prompts/resume-work.md +20 -0
- package/dist/resources/extensions/gsd/prompts/review-backlog.md +21 -0
- package/dist/resources/extensions/gsd/prompts/review.md +27 -0
- package/dist/resources/extensions/gsd/prompts/run-uat.md +5 -1
- package/dist/resources/extensions/gsd/prompts/secure-phase.md +24 -0
- package/dist/resources/extensions/gsd/prompts/settings.md +24 -0
- package/dist/resources/extensions/gsd/prompts/sketch.md +59 -0
- package/dist/resources/extensions/gsd/prompts/spec-phase.md +29 -0
- package/dist/resources/extensions/gsd/prompts/spike.md +59 -0
- package/dist/resources/extensions/gsd/prompts/stats.md +43 -0
- package/dist/resources/extensions/gsd/prompts/surface.md +25 -0
- package/dist/resources/extensions/gsd/prompts/thread.md +24 -0
- package/dist/resources/extensions/gsd/prompts/triage-captures.md +1 -1
- package/dist/resources/extensions/gsd/prompts/ui-phase.md +29 -0
- package/dist/resources/extensions/gsd/prompts/ui-review.md +29 -0
- package/dist/resources/extensions/gsd/prompts/ultraplan-phase.md +24 -0
- package/dist/resources/extensions/gsd/prompts/validate-phase.md +26 -0
- package/dist/resources/extensions/gsd/prompts/verify-work.md +24 -0
- package/dist/resources/extensions/gsd/prompts/workspace.md +22 -0
- package/dist/resources/extensions/gsd/prompts/workstreams.md +24 -0
- package/dist/resources/extensions/gsd/provider-error-guidance.js +24 -0
- package/dist/resources/extensions/gsd/queue-order.js +3 -2
- package/dist/resources/extensions/gsd/recovery-classification.js +8 -0
- package/dist/resources/extensions/gsd/roadmap-slices.js +1 -1
- package/dist/resources/extensions/gsd/safety/content-validator.js +2 -1
- package/dist/resources/extensions/gsd/safety/evidence-cross-ref.js +43 -1
- package/dist/resources/extensions/gsd/service-tier.js +2 -1
- package/dist/resources/extensions/gsd/session-lock.js +11 -9
- package/dist/resources/extensions/gsd/skills/gsd-headless/SKILL.md +3 -0
- package/dist/resources/extensions/gsd/skills/gsd-headless/references/commands.md +51 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/artifact-db.js +51 -10
- package/dist/resources/extensions/gsd/state-reconciliation/drift/completion.js +24 -3
- package/dist/resources/extensions/gsd/state-reconciliation/drift/external-markdown-edit.js +82 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/external-planning-edit.js +142 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/project-md.js +19 -6
- package/dist/resources/extensions/gsd/state-reconciliation/drift/roadmap.js +2 -2
- package/dist/resources/extensions/gsd/state-reconciliation/drift/stale-render.js +95 -19
- package/dist/resources/extensions/gsd/state-reconciliation/index.js +36 -3
- package/dist/resources/extensions/gsd/state-reconciliation/registry.js +12 -0
- package/dist/resources/extensions/gsd/state.js +48 -17
- package/dist/resources/extensions/gsd/sync-lock.js +11 -18
- package/dist/resources/extensions/gsd/tool-surface-readiness.js +205 -16
- package/dist/resources/extensions/gsd/tools/complete-milestone.js +4 -2
- package/dist/resources/extensions/gsd/tools/complete-slice.js +12 -2
- package/dist/resources/extensions/gsd/tools/complete-task.js +15 -1
- package/dist/resources/extensions/gsd/tools/exec-tool.js +2 -109
- package/dist/resources/extensions/gsd/tools/plan-slice.js +1 -3
- package/dist/resources/extensions/gsd/tools/plan-task.js +16 -1
- package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +9 -3
- package/dist/resources/extensions/gsd/tools/validate-milestone.js +8 -3
- package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +44 -5
- package/dist/resources/extensions/gsd/triage-resolution.js +14 -7
- package/dist/resources/extensions/gsd/tui/render-kit.js +38 -13
- package/dist/resources/extensions/gsd/undo.js +8 -9
- package/dist/resources/extensions/gsd/unit-registry.js +27 -3
- package/dist/resources/extensions/gsd/unmerged-milestone-guard.js +58 -2
- package/dist/resources/extensions/gsd/validation-block-guard.js +45 -0
- package/dist/resources/extensions/gsd/visualizer-data.js +35 -0
- package/dist/resources/extensions/gsd/visualizer-views.js +21 -2
- package/dist/resources/extensions/gsd/workflow-logger.js +4 -0
- package/dist/resources/extensions/gsd/workflow-mcp.js +9 -1
- package/dist/resources/extensions/gsd/workflow-projections.js +25 -4
- package/dist/resources/extensions/gsd/worktree-command.js +6 -6
- package/dist/resources/extensions/gsd/worktree-health.js +6 -3
- package/dist/resources/extensions/gsd/worktree-manager.js +109 -16
- package/dist/resources/extensions/gsd/worktree-safety.js +20 -11
- package/dist/resources/extensions/gsd/worktree-shell-guard.js +113 -0
- package/dist/resources/extensions/mcp-client/manager.js +3 -3
- package/dist/resources/extensions/search-the-web/index.js +41 -9
- package/dist/resources/extensions/search-the-web/native-search.js +18 -4
- package/dist/resources/extensions/shared/gsd-browser-cli.js +40 -2
- package/dist/resources/extensions/subagent/index.js +20 -15
- package/dist/resources/extensions/subagent/worktree-cwd.js +31 -0
- package/dist/tsconfig.extensions.tsbuildinfo +1 -1
- package/dist/update-check.js +15 -4
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +8 -8
- package/dist/web/standalone/.next/build-manifest.json +3 -3
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/react-loadable-manifest.json +3 -3
- package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +8 -8
- package/dist/web/standalone/.next/server/chunks/1128.js +1 -1
- package/dist/web/standalone/.next/server/chunks/5124.js +1 -1
- package/dist/web/standalone/.next/server/chunks/8357.js +1 -1
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/dist/web/standalone/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/.next/server/pages/500.html +1 -1
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/web/standalone/.next/static/chunks/{4283.e4873b058df143a1.js → 4283.8e446784528ed9dc.js} +2 -2
- package/dist/web/standalone/.next/static/chunks/8785.481aa5869991b760.js +1 -0
- package/dist/web/standalone/.next/static/chunks/{webpack-f0285ce91d4ec9ef.js → webpack-f46ea08200a0227e.js} +1 -1
- package/dist/web/standalone/node_modules/@gsd/native/package.json +1 -1
- package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
- package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
- package/dist/web-mode.d.ts +3 -1
- package/dist/web-mode.js +7 -5
- package/integrations/hermes/README.md +48 -0
- package/integrations/hermes/docs/setup.md +272 -0
- package/integrations/hermes/docs/upstream-hermes-pr.md +40 -0
- package/integrations/hermes/open_gsd_hermes/__init__.py +105 -0
- package/integrations/hermes/open_gsd_hermes/binding.py +107 -0
- package/integrations/hermes/open_gsd_hermes/commands.py +186 -0
- package/integrations/hermes/open_gsd_hermes/config.py +59 -0
- package/integrations/hermes/open_gsd_hermes/credentials.py +51 -0
- package/integrations/hermes/open_gsd_hermes/cron.py +85 -0
- package/integrations/hermes/open_gsd_hermes/formatting.py +13 -0
- package/integrations/hermes/open_gsd_hermes/gsd_client.py +269 -0
- package/integrations/hermes/open_gsd_hermes/inject.py +31 -0
- package/integrations/hermes/open_gsd_hermes/memory.py +66 -0
- package/integrations/hermes/open_gsd_hermes/notifications.py +71 -0
- package/integrations/hermes/open_gsd_hermes/snapshot.py +42 -0
- package/integrations/hermes/open_gsd_hermes/supervisor.py +180 -0
- package/integrations/hermes/open_gsd_hermes/types.py +100 -0
- package/integrations/hermes/plugin.yaml +38 -0
- package/integrations/hermes/pyproject.toml +32 -0
- package/integrations/hermes/scripts/preflight.sh +92 -0
- package/integrations/hermes/tests/fixtures/minimal-project/.gsd/STATE.md +17 -0
- package/integrations/hermes/tests/golden/memory_prefetch.txt +5 -0
- package/integrations/hermes/tests/golden/snapshot.txt +8 -0
- package/integrations/hermes/tests/test_binding.py +103 -0
- package/integrations/hermes/tests/test_config.py +36 -0
- package/integrations/hermes/tests/test_cron.py +34 -0
- package/integrations/hermes/tests/test_gsd_client_cache.py +120 -0
- package/integrations/hermes/tests/test_memory.py +59 -0
- package/integrations/hermes/tests/test_read_cli_contract.py +50 -0
- package/integrations/hermes/tests/test_register.py +56 -0
- package/integrations/hermes/tests/test_snapshot.py +53 -0
- package/integrations/hermes/tests/test_supervisor_fsm.py +581 -0
- package/package.json +8 -7
- package/packages/cloud-mcp-gateway/dist/runtime-registry.d.ts +8 -0
- package/packages/cloud-mcp-gateway/dist/runtime-registry.d.ts.map +1 -1
- package/packages/cloud-mcp-gateway/dist/runtime-registry.js +19 -2
- package/packages/cloud-mcp-gateway/dist/runtime-registry.js.map +1 -1
- package/packages/cloud-mcp-gateway/dist/runtime-registry.test.js +71 -2
- package/packages/cloud-mcp-gateway/dist/runtime-registry.test.js.map +1 -1
- package/packages/cloud-mcp-gateway/package.json +2 -2
- package/packages/contracts/package.json +1 -1
- package/packages/daemon/package.json +4 -4
- package/packages/gsd-agent-core/dist/sdk.d.ts.map +1 -1
- package/packages/gsd-agent-core/dist/sdk.js +6 -2
- package/packages/gsd-agent-core/dist/sdk.js.map +1 -1
- package/packages/gsd-agent-core/package.json +5 -5
- package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts +5 -5
- package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js +12 -24
- package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.js +5 -5
- package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.d.ts +3 -3
- package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.js +20 -11
- package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-turn-connect.d.ts +4 -3
- package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-turn-connect.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-turn-connect.js +5 -54
- package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-turn-connect.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.d.ts +2 -4
- package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.js +2 -4
- package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.d.ts +2 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.js +4 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.d.ts +9 -12
- package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.js +100 -166
- package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-progress-state.d.ts +2 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-progress-state.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-progress-state.js +4 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-progress-state.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-status-widget.d.ts +23 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-status-widget.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-status-widget.js +178 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-status-widget.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.d.ts +8 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.js +21 -9
- package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.d.ts +2 -3
- package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.js +2 -3
- package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts +3 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js +37 -15
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.d.ts +69 -3
- package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.js +223 -32
- package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.d.ts +3 -3
- package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.js +19 -19
- package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts +3 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js +26 -10
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.js +12 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js +5 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-autocomplete.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-autocomplete.js +3 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.js +3 -5
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-dialogs.js +2 -2
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-dialogs.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.d.ts +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.js +25 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-key-handlers.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-key-handlers.js +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-key-handlers.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-init.d.ts +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-init.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-init.js +20 -49
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-init.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts +4 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts +9 -2
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js +31 -6
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-ui-messaging.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-ui-messaging.js +0 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-ui-messaging.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js +3 -0
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/packages/gsd-agent-modes/package.json +7 -7
- package/packages/mcp-server/README.md +10 -0
- package/packages/mcp-server/dist/cli-errors.d.ts +11 -0
- package/packages/mcp-server/dist/cli-errors.d.ts.map +1 -1
- package/packages/mcp-server/dist/cli-errors.js +12 -0
- package/packages/mcp-server/dist/cli-errors.js.map +1 -1
- package/packages/mcp-server/dist/cli-runner.d.ts.map +1 -1
- package/packages/mcp-server/dist/cli-runner.js +33 -0
- package/packages/mcp-server/dist/cli-runner.js.map +1 -1
- package/packages/mcp-server/dist/cli.d.ts +1 -0
- package/packages/mcp-server/dist/cli.d.ts.map +1 -1
- package/packages/mcp-server/dist/cli.js +1 -0
- package/packages/mcp-server/dist/cli.js.map +1 -1
- package/packages/mcp-server/dist/server.d.ts +29 -0
- package/packages/mcp-server/dist/server.d.ts.map +1 -1
- package/packages/mcp-server/dist/server.js +82 -3
- package/packages/mcp-server/dist/server.js.map +1 -1
- package/packages/mcp-server/package.json +21 -5
- package/packages/native/package.json +1 -1
- package/packages/pi-agent-core/dist/agent-loop.js +9 -0
- package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/packages/pi-agent-core/package.json +1 -1
- package/packages/pi-ai/package.json +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-upstream-types.d.ts +28 -2
- package/packages/pi-coding-agent/dist/core/extensions/extension-upstream-types.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-upstream-types.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +5 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.js +3 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/index.js.map +1 -1
- package/packages/pi-coding-agent/package.json +8 -8
- package/packages/pi-tui/dist/autocomplete.d.ts.map +1 -1
- package/packages/pi-tui/dist/autocomplete.js +6 -1
- package/packages/pi-tui/dist/autocomplete.js.map +1 -1
- package/packages/pi-tui/dist/components/input.js +1 -1
- package/packages/pi-tui/dist/components/input.js.map +1 -1
- package/packages/pi-tui/dist/components/loader.d.ts.map +1 -1
- package/packages/pi-tui/dist/components/loader.js +1 -0
- package/packages/pi-tui/dist/components/loader.js.map +1 -1
- package/packages/pi-tui/dist/components/select-list.d.ts.map +1 -1
- package/packages/pi-tui/dist/components/select-list.js +8 -2
- package/packages/pi-tui/dist/components/select-list.js.map +1 -1
- package/packages/pi-tui/package.json +2 -2
- package/packages/rpc-client/package.json +2 -2
- package/pkg/package.json +1 -1
- package/src/resources/GSD-WORKFLOW.md +22 -22
- package/src/resources/extensions/browser-tools/tests/gsd-browser-launch-config.test.mjs +80 -0
- package/src/resources/extensions/claude-code-cli/index.ts +8 -1
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +83 -20
- package/src/resources/extensions/claude-code-cli/tests/index.test.ts +47 -0
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +182 -10
- package/src/resources/extensions/google-cli/stream-adapter.ts +22 -1
- package/src/resources/extensions/gsd/auto/dispatch-history.ts +19 -1
- package/src/resources/extensions/gsd/auto/loop.ts +69 -2
- package/src/resources/extensions/gsd/auto/orchestrator.ts +63 -10
- package/src/resources/extensions/gsd/auto/pre-dispatch.ts +13 -1
- package/src/resources/extensions/gsd/auto/workflow-kernel.ts +25 -3
- package/src/resources/extensions/gsd/auto-artifact-paths.ts +83 -20
- package/src/resources/extensions/gsd/auto-closeout-messaging.ts +90 -0
- package/src/resources/extensions/gsd/auto-dashboard.ts +310 -454
- package/src/resources/extensions/gsd/auto-direct-dispatch.ts +15 -2
- package/src/resources/extensions/gsd/auto-dispatch.ts +57 -12
- package/src/resources/extensions/gsd/auto-model-selection.ts +27 -5
- package/src/resources/extensions/gsd/auto-post-unit.ts +52 -31
- package/src/resources/extensions/gsd/auto-prompts.ts +45 -30
- package/src/resources/extensions/gsd/auto-recovery.ts +126 -37
- package/src/resources/extensions/gsd/auto-runtime-state.ts +13 -0
- package/src/resources/extensions/gsd/auto-start.ts +82 -36
- package/src/resources/extensions/gsd/auto-verification.ts +5 -7
- package/src/resources/extensions/gsd/auto-worktree.ts +83 -15
- package/src/resources/extensions/gsd/auto.ts +133 -32
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +45 -61
- package/src/resources/extensions/gsd/bootstrap/fallback-continuation.ts +31 -0
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +23 -2
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +123 -9
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +185 -46
- package/src/resources/extensions/gsd/bootstrap/tool-search-shim.ts +21 -3
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +138 -29
- package/src/resources/extensions/gsd/closeout-consistency-gate.ts +107 -3
- package/src/resources/extensions/gsd/closeout-wizard.ts +11 -2
- package/src/resources/extensions/gsd/codebase-generator.ts +6 -9
- package/src/resources/extensions/gsd/commands/catalog.ts +6 -0
- package/src/resources/extensions/gsd/commands/dispatcher.ts +3 -0
- package/src/resources/extensions/gsd/commands/gsd-core-aliases-handler.ts +48 -0
- package/src/resources/extensions/gsd/commands/gsd-core-aliases.ts +63 -0
- package/src/resources/extensions/gsd/commands/handlers/core.ts +58 -8
- package/src/resources/extensions/gsd/commands/handlers/ops.ts +230 -3
- package/src/resources/extensions/gsd/commands-cmux.ts +3 -0
- package/src/resources/extensions/gsd/commands-gsd-core.ts +1142 -0
- package/src/resources/extensions/gsd/commands-handlers.ts +76 -1
- package/src/resources/extensions/gsd/commands-maintenance.ts +98 -2
- package/src/resources/extensions/gsd/commands-prefs-wizard.ts +13 -0
- package/src/resources/extensions/gsd/commands-verdict.ts +16 -15
- package/src/resources/extensions/gsd/compat/compat-marker.ts +210 -0
- package/src/resources/extensions/gsd/compat/index.ts +12 -0
- package/src/resources/extensions/gsd/compat/planning-compat.ts +168 -0
- package/src/resources/extensions/gsd/config-overlay.ts +24 -9
- package/src/resources/extensions/gsd/consent-question.ts +11 -1
- package/src/resources/extensions/gsd/consent-verdict.ts +30 -1
- package/src/resources/extensions/gsd/dashboard-overlay.ts +41 -4
- package/src/resources/extensions/gsd/db/engine.ts +26 -0
- package/src/resources/extensions/gsd/db/queries.ts +78 -0
- package/src/resources/extensions/gsd/db/unit-dispatches.ts +24 -0
- package/src/resources/extensions/gsd/db/writers/reconcile.ts +24 -1
- package/src/resources/extensions/gsd/db-workspace.ts +15 -0
- package/src/resources/extensions/gsd/discussion-handoff.ts +9 -5
- package/src/resources/extensions/gsd/doctor-git-checks.ts +28 -3
- package/src/resources/extensions/gsd/doctor-providers.ts +1 -1
- package/src/resources/extensions/gsd/doctor-runtime-checks.ts +12 -25
- package/src/resources/extensions/gsd/doctor-types.ts +1 -0
- package/src/resources/extensions/gsd/doctor.ts +30 -7
- package/src/resources/extensions/gsd/error-classifier.ts +14 -1
- package/src/resources/extensions/gsd/escalation.ts +9 -4
- package/src/resources/extensions/gsd/export-html.ts +11 -4
- package/src/resources/extensions/gsd/export.ts +88 -1
- package/src/resources/extensions/gsd/file-lock.ts +1 -1
- package/src/resources/extensions/gsd/flat-phase-migration.ts +205 -0
- package/src/resources/extensions/gsd/forensics.ts +2 -1
- package/src/resources/extensions/gsd/git-constants.ts +1 -1
- package/src/resources/extensions/gsd/git-service.ts +7 -2
- package/src/resources/extensions/gsd/gitignore.ts +7 -3
- package/src/resources/extensions/gsd/guidance.ts +7 -7
- package/src/resources/extensions/gsd/guided-flow.ts +11 -6
- package/src/resources/extensions/gsd/layout-policy.ts +85 -0
- package/src/resources/extensions/gsd/markdown-renderer.ts +404 -104
- package/src/resources/extensions/gsd/mcp-filter.ts +59 -10
- package/src/resources/extensions/gsd/md-importer.ts +215 -65
- package/src/resources/extensions/gsd/metrics.ts +23 -10
- package/src/resources/extensions/gsd/migrate/layout-detect.ts +38 -0
- package/src/resources/extensions/gsd/migrate/planning-writer.ts +259 -0
- package/src/resources/extensions/gsd/migrate-external.ts +49 -6
- package/src/resources/extensions/gsd/migration-auto-check.ts +4 -13
- package/src/resources/extensions/gsd/milestone-actions.ts +5 -2
- package/src/resources/extensions/gsd/milestone-closeout.ts +13 -2
- package/src/resources/extensions/gsd/milestone-ids.ts +49 -19
- package/src/resources/extensions/gsd/milestone-planning-persistence.ts +8 -0
- package/src/resources/extensions/gsd/milestone-validation-verdict.ts +7 -9
- package/src/resources/extensions/gsd/model-router.ts +98 -18
- package/src/resources/extensions/gsd/notification-store.ts +17 -28
- package/src/resources/extensions/gsd/notifications.ts +37 -6
- package/src/resources/extensions/gsd/observability-validator.ts +12 -4
- package/src/resources/extensions/gsd/parallel-monitor-overlay.ts +151 -31
- package/src/resources/extensions/gsd/parsers-legacy.ts +42 -15
- package/src/resources/extensions/gsd/paths.ts +348 -39
- package/src/resources/extensions/gsd/planning-depth.ts +2 -1
- package/src/resources/extensions/gsd/post-execution-checks.ts +43 -3
- package/src/resources/extensions/gsd/preferences-models.ts +47 -13
- package/src/resources/extensions/gsd/preferences.ts +188 -14
- package/src/resources/extensions/gsd/prompts/ai-integration-phase.md +28 -0
- package/src/resources/extensions/gsd/prompts/audit-fix.md +39 -0
- package/src/resources/extensions/gsd/prompts/audit-milestone.md +26 -0
- package/src/resources/extensions/gsd/prompts/audit-uat.md +24 -0
- package/src/resources/extensions/gsd/prompts/autonomous.md +31 -0
- package/src/resources/extensions/gsd/prompts/code-review.md +37 -0
- package/src/resources/extensions/gsd/prompts/complete-milestone.md +8 -2
- package/src/resources/extensions/gsd/prompts/complete-slice.md +24 -15
- package/src/resources/extensions/gsd/prompts/discuss-phase.md +31 -0
- package/src/resources/extensions/gsd/prompts/docs-update.md +13 -0
- package/src/resources/extensions/gsd/prompts/execute-phase.md +33 -0
- package/src/resources/extensions/gsd/prompts/execute-task.md +5 -1
- package/src/resources/extensions/gsd/prompts/explore.md +58 -0
- package/src/resources/extensions/gsd/prompts/graphify.md +27 -0
- package/src/resources/extensions/gsd/prompts/health.md +37 -0
- package/src/resources/extensions/gsd/prompts/import.md +30 -0
- package/src/resources/extensions/gsd/prompts/inbox.md +27 -0
- package/src/resources/extensions/gsd/prompts/ingest-docs.md +30 -0
- package/src/resources/extensions/gsd/prompts/manager.md +21 -0
- package/src/resources/extensions/gsd/prompts/map-codebase.md +42 -0
- package/src/resources/extensions/gsd/prompts/milestone-summary.md +27 -0
- package/src/resources/extensions/gsd/prompts/mvp-phase.md +23 -0
- package/src/resources/extensions/gsd/prompts/pause-work.md +24 -0
- package/src/resources/extensions/gsd/prompts/phase.md +22 -0
- package/src/resources/extensions/gsd/prompts/plan-phase.md +34 -0
- package/src/resources/extensions/gsd/prompts/plan-review-convergence.md +34 -0
- package/src/resources/extensions/gsd/prompts/profile-user.md +28 -0
- package/src/resources/extensions/gsd/prompts/progress.md +30 -0
- package/src/resources/extensions/gsd/prompts/quick-task.md +1 -1
- package/src/resources/extensions/gsd/prompts/reactive-execute.md +2 -2
- package/src/resources/extensions/gsd/prompts/resume-work.md +20 -0
- package/src/resources/extensions/gsd/prompts/review-backlog.md +21 -0
- package/src/resources/extensions/gsd/prompts/review.md +27 -0
- package/src/resources/extensions/gsd/prompts/run-uat.md +5 -1
- package/src/resources/extensions/gsd/prompts/secure-phase.md +24 -0
- package/src/resources/extensions/gsd/prompts/settings.md +24 -0
- package/src/resources/extensions/gsd/prompts/sketch.md +59 -0
- package/src/resources/extensions/gsd/prompts/spec-phase.md +29 -0
- package/src/resources/extensions/gsd/prompts/spike.md +59 -0
- package/src/resources/extensions/gsd/prompts/stats.md +43 -0
- package/src/resources/extensions/gsd/prompts/surface.md +25 -0
- package/src/resources/extensions/gsd/prompts/thread.md +24 -0
- package/src/resources/extensions/gsd/prompts/triage-captures.md +1 -1
- package/src/resources/extensions/gsd/prompts/ui-phase.md +29 -0
- package/src/resources/extensions/gsd/prompts/ui-review.md +29 -0
- package/src/resources/extensions/gsd/prompts/ultraplan-phase.md +24 -0
- package/src/resources/extensions/gsd/prompts/validate-phase.md +26 -0
- package/src/resources/extensions/gsd/prompts/verify-work.md +24 -0
- package/src/resources/extensions/gsd/prompts/workspace.md +22 -0
- package/src/resources/extensions/gsd/prompts/workstreams.md +24 -0
- package/src/resources/extensions/gsd/provider-error-guidance.ts +32 -0
- package/src/resources/extensions/gsd/queue-order.ts +3 -2
- package/src/resources/extensions/gsd/recovery-classification.ts +7 -0
- package/src/resources/extensions/gsd/roadmap-slices.ts +1 -1
- package/src/resources/extensions/gsd/safety/content-validator.ts +2 -1
- package/src/resources/extensions/gsd/safety/evidence-cross-ref.ts +45 -1
- package/src/resources/extensions/gsd/service-tier.ts +2 -0
- package/src/resources/extensions/gsd/session-lock.ts +15 -13
- package/src/resources/extensions/gsd/skills/gsd-headless/SKILL.md +3 -0
- package/src/resources/extensions/gsd/skills/gsd-headless/references/commands.md +51 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/artifact-db.ts +58 -14
- package/src/resources/extensions/gsd/state-reconciliation/drift/completion.ts +22 -2
- package/src/resources/extensions/gsd/state-reconciliation/drift/external-markdown-edit.ts +105 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/external-planning-edit.ts +180 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/project-md.ts +19 -6
- package/src/resources/extensions/gsd/state-reconciliation/drift/roadmap.ts +2 -2
- package/src/resources/extensions/gsd/state-reconciliation/drift/stale-render.ts +98 -26
- package/src/resources/extensions/gsd/state-reconciliation/index.ts +36 -3
- package/src/resources/extensions/gsd/state-reconciliation/registry.ts +12 -0
- package/src/resources/extensions/gsd/state-reconciliation/types.ts +19 -0
- package/src/resources/extensions/gsd/state.ts +57 -15
- package/src/resources/extensions/gsd/sync-lock.ts +11 -20
- package/src/resources/extensions/gsd/tests/__fixtures__/flat-phase/.gsd/phases/01-foundation/01-01-PLAN.md +13 -0
- package/src/resources/extensions/gsd/tests/__fixtures__/flat-phase/.gsd/phases/01-foundation/01-ROADMAP.md +8 -0
- package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/m001-basic/.gsd/milestones/M001/M001-ROADMAP.md +13 -0
- package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/m001-basic/.gsd/milestones/M001/slices/S01/S01-PLAN.md +5 -0
- package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/PROJECT.md +1 -0
- package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/ROADMAP.md +5 -0
- package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/STATE.md +10 -0
- package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/phases/01-foundation/01-01-PLAN.md +13 -0
- package/src/resources/extensions/gsd/tests/auto-artifact-paths.test.ts +322 -1
- package/src/resources/extensions/gsd/tests/auto-closeout-messaging.test.ts +71 -0
- package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +68 -116
- package/src/resources/extensions/gsd/tests/auto-direct-dispatch-parse.test.ts +33 -0
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +104 -0
- package/src/resources/extensions/gsd/tests/auto-migrating-recovery.test.ts +32 -1
- package/src/resources/extensions/gsd/tests/auto-model-selection-tool-poisoning.test.ts +7 -2
- package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +10 -0
- package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +28 -22
- package/src/resources/extensions/gsd/tests/auto-paused-session-validation.test.ts +11 -2
- package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +19 -2
- package/src/resources/extensions/gsd/tests/auto-verification.test.ts +36 -0
- package/src/resources/extensions/gsd/tests/auto-worktree-auto-resolve.test.ts +17 -0
- package/src/resources/extensions/gsd/tests/blocker-placeholder-logs.test.ts +218 -0
- package/src/resources/extensions/gsd/tests/codebase-generator.test.ts +15 -11
- package/src/resources/extensions/gsd/tests/commands-dispatcher-unmerged-milestone.test.ts +89 -0
- package/src/resources/extensions/gsd/tests/commands-dispatcher-validation-block.test.ts +37 -1
- package/src/resources/extensions/gsd/tests/commands-eval-review.test.ts +31 -30
- package/src/resources/extensions/gsd/tests/commands-gsd-core.test.ts +862 -0
- package/src/resources/extensions/gsd/tests/commands-verdict.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/compat-health-line.test.ts +102 -0
- package/src/resources/extensions/gsd/tests/compat-marker-invalidation.test.ts +51 -0
- package/src/resources/extensions/gsd/tests/compat-marker.test.ts +105 -0
- package/src/resources/extensions/gsd/tests/complete-milestone-prompt-rendering.test.ts +6 -2
- package/src/resources/extensions/gsd/tests/complete-slice-reopen-handoff.test.ts +82 -0
- package/src/resources/extensions/gsd/tests/complete-slice.test.ts +7 -7
- package/src/resources/extensions/gsd/tests/complete-task.test.ts +7 -7
- package/src/resources/extensions/gsd/tests/consent-question.test.ts +45 -0
- package/src/resources/extensions/gsd/tests/core-overlay-fallback.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/dashboard-overlay.test.ts +37 -0
- package/src/resources/extensions/gsd/tests/db-authority-regression.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/db-engine-logs.test.ts +207 -0
- package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +63 -1
- package/src/resources/extensions/gsd/tests/derive-state-helpers.test.ts +49 -5
- package/src/resources/extensions/gsd/tests/discuss-cold-start-db-open.test.ts +10 -27
- package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +20 -1
- package/src/resources/extensions/gsd/tests/dispatch-db-degradation-logs.test.ts +98 -0
- package/src/resources/extensions/gsd/tests/dispatch-history.test.ts +102 -0
- package/src/resources/extensions/gsd/tests/dispatch-logs.test.ts +103 -0
- package/src/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +38 -49
- package/src/resources/extensions/gsd/tests/dispatch-reactive-logs.test.ts +98 -0
- package/src/resources/extensions/gsd/tests/dist-redirect.mjs +7 -0
- package/src/resources/extensions/gsd/tests/doctor-git-checks-autoresolve.test.ts +149 -0
- package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +6 -4
- package/src/resources/extensions/gsd/tests/ensure-preconditions-guard-4996.test.ts +17 -10
- package/src/resources/extensions/gsd/tests/evidence-cross-ref.test.ts +95 -0
- package/src/resources/extensions/gsd/tests/export-html-enhancements.test.ts +25 -0
- package/src/resources/extensions/gsd/tests/export-memory.test.ts +179 -0
- package/src/resources/extensions/gsd/tests/extension-bootstrap-isolation.test.ts +53 -0
- package/src/resources/extensions/gsd/tests/external-markdown-edit.test.ts +137 -0
- package/src/resources/extensions/gsd/tests/external-planning-edit.test.ts +199 -0
- package/src/resources/extensions/gsd/tests/fallback-continuation.test.ts +36 -0
- package/src/resources/extensions/gsd/tests/file-lock.test.ts +43 -0
- package/src/resources/extensions/gsd/tests/flat-phase-migration.test.ts +114 -0
- package/src/resources/extensions/gsd/tests/flat-phase-renderer.test.ts +83 -0
- package/src/resources/extensions/gsd/tests/flat-phase-round-trip.test.ts +72 -0
- package/src/resources/extensions/gsd/tests/flat-phase-validation-integration.test.ts +120 -0
- package/src/resources/extensions/gsd/tests/flat-phase-validation-path.test.ts +74 -0
- package/src/resources/extensions/gsd/tests/flat-rate-routing-guard.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/gsd-command-home.test.ts +40 -7
- package/src/resources/extensions/gsd/tests/gsd-core-parity-routing.test.ts +183 -0
- package/src/resources/extensions/gsd/tests/guidance.test.ts +25 -0
- package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +19 -11
- package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +75 -0
- package/src/resources/extensions/gsd/tests/integration/commands-eval-review.integration.test.ts +6 -2
- package/src/resources/extensions/gsd/tests/integration/gitignore-tracked-gsd.test.ts +55 -0
- package/src/resources/extensions/gsd/tests/integration/idle-recovery.test.ts +4 -3
- package/src/resources/extensions/gsd/tests/integration/integration-proof.test.ts +11 -7
- package/src/resources/extensions/gsd/tests/interactive-routing-bypass.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/knowledge-cold-start.test.ts +372 -0
- package/src/resources/extensions/gsd/tests/layout-policy.test.ts +59 -0
- package/src/resources/extensions/gsd/tests/loop.test.ts +60 -0
- package/src/resources/extensions/gsd/tests/markdown-renderer-parse-cache.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/markdown-renderer.test.ts +214 -82
- package/src/resources/extensions/gsd/tests/mcp-filter.test.ts +74 -1
- package/src/resources/extensions/gsd/tests/metrics-ledger-cap.test.ts +239 -0
- package/src/resources/extensions/gsd/tests/milestone-closeout.test.ts +7 -2
- package/src/resources/extensions/gsd/tests/milestone-settlement.test.ts +6 -1
- package/src/resources/extensions/gsd/tests/model-router.test.ts +343 -7
- package/src/resources/extensions/gsd/tests/notification-store.test.ts +23 -0
- package/src/resources/extensions/gsd/tests/notifications.test.ts +33 -0
- package/src/resources/extensions/gsd/tests/oauth-api-model-routing.test.ts +13 -1
- package/src/resources/extensions/gsd/tests/observability-validator-boundary.test.ts +194 -0
- package/src/resources/extensions/gsd/tests/orchestrator-legacy-parity.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/orchestrator-logs.test.ts +339 -0
- package/src/resources/extensions/gsd/tests/orphaned-worktree-audit.test.ts +52 -1
- package/src/resources/extensions/gsd/tests/parallel-monitor-overlay.test.ts +91 -0
- package/src/resources/extensions/gsd/tests/plan-milestone-boundary-map-preservation.test.ts +7 -2
- package/src/resources/extensions/gsd/tests/plan-milestone-sketch-render.test.ts +7 -2
- package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +9 -6
- package/src/resources/extensions/gsd/tests/plan-slice.test.ts +58 -23
- package/src/resources/extensions/gsd/tests/plan-task.test.ts +4 -4
- package/src/resources/extensions/gsd/tests/planning-crossval.test.ts +19 -0
- package/src/resources/extensions/gsd/tests/planning-layout-detect.test.ts +84 -0
- package/src/resources/extensions/gsd/tests/planning-marker.test.ts +107 -0
- package/src/resources/extensions/gsd/tests/planning-projection-hook.test.ts +123 -0
- package/src/resources/extensions/gsd/tests/planning-round-trip-property.test.ts +164 -0
- package/src/resources/extensions/gsd/tests/planning-writer.test.ts +82 -0
- package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +48 -1
- package/src/resources/extensions/gsd/tests/preferences.test.ts +47 -1
- package/src/resources/extensions/gsd/tests/prefs-missing-models-crash.test.ts +35 -4
- package/src/resources/extensions/gsd/tests/progress-strip-test-helpers.ts +79 -0
- package/src/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +2 -0
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +16 -0
- package/src/resources/extensions/gsd/tests/provider-error-guidance.test.ts +15 -0
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +107 -0
- package/src/resources/extensions/gsd/tests/ready-phrase-no-files-4573.test.ts +22 -13
- package/src/resources/extensions/gsd/tests/reassess-handler.test.ts +9 -8
- package/src/resources/extensions/gsd/tests/reconcile-logs.test.ts +244 -0
- package/src/resources/extensions/gsd/tests/recovery-finalize-logs.test.ts +119 -0
- package/src/resources/extensions/gsd/tests/recovery-verify-logs.test.ts +428 -0
- package/src/resources/extensions/gsd/tests/register-extension-guard.test.ts +25 -0
- package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +79 -4
- package/src/resources/extensions/gsd/tests/replan-handler.test.ts +4 -4
- package/src/resources/extensions/gsd/tests/resume-missing-worktree-warning.test.ts +5 -5
- package/src/resources/extensions/gsd/tests/round-trip-property.test.ts +137 -0
- package/src/resources/extensions/gsd/tests/session-lock-transient-read.test.ts +28 -2
- package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +68 -0
- package/src/resources/extensions/gsd/tests/show-config-command.test.ts +3 -0
- package/src/resources/extensions/gsd/tests/single-writer-invariant.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/stale-dirlistcache-4648.test.ts +7 -1
- package/src/resources/extensions/gsd/tests/state-reconciliation-drift.test.ts +155 -58
- package/src/resources/extensions/gsd/tests/stop-backtrack.test.ts +6 -2
- package/src/resources/extensions/gsd/tests/stuck-state-via-db.test.ts +85 -0
- package/src/resources/extensions/gsd/tests/sync-lock.test.ts +23 -0
- package/src/resources/extensions/gsd/tests/system-context-message-routing.test.ts +29 -1
- package/src/resources/extensions/gsd/tests/terminal-tool-surface-classification.test.ts +80 -0
- package/src/resources/extensions/gsd/tests/thinking-level-resolution.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/tool-schema-model-fallback.test.ts +64 -0
- package/src/resources/extensions/gsd/tests/tool-search-shim.test.ts +71 -0
- package/src/resources/extensions/gsd/tests/tool-surface-readiness.test.ts +26 -7
- package/src/resources/extensions/gsd/tests/tool-unavailable-retry.test.ts +23 -0
- package/src/resources/extensions/gsd/tests/tui-header-lifecycle.test.ts +40 -86
- package/src/resources/extensions/gsd/tests/tui-render-kit.test.ts +44 -6
- package/src/resources/extensions/gsd/tests/undo.test.ts +39 -37
- package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +22 -0
- package/src/resources/extensions/gsd/tests/unmerged-milestone-guard.test.ts +62 -0
- package/src/resources/extensions/gsd/tests/uok-audit.test.ts +194 -0
- package/src/resources/extensions/gsd/tests/uok-gitops-turn-action.test.ts +72 -1
- package/src/resources/extensions/gsd/tests/validate-milestone-write-order.test.ts +9 -1
- package/src/resources/extensions/gsd/tests/validation-block-guard.test.ts +51 -0
- package/src/resources/extensions/gsd/tests/validation-gate-patterns.test.ts +34 -6
- package/src/resources/extensions/gsd/tests/verify-artifact-tightened.test.ts +90 -0
- package/src/resources/extensions/gsd/tests/visualizer-data.test.ts +87 -0
- package/src/resources/extensions/gsd/tests/visualizer-views.test.ts +27 -0
- package/src/resources/extensions/gsd/tests/workflow-kernel.test.ts +51 -0
- package/src/resources/extensions/gsd/tests/workflow-mcp-preflight.test.ts +133 -0
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +34 -8
- package/src/resources/extensions/gsd/tests/workflow-projections.test.ts +3 -4
- package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +64 -8
- package/src/resources/extensions/gsd/tests/worktree-health.test.ts +43 -3
- package/src/resources/extensions/gsd/tests/worktree-manager.test.ts +62 -0
- package/src/resources/extensions/gsd/tests/worktree-safety.test.ts +39 -18
- package/src/resources/extensions/gsd/tests/worktree-write-gate.test.ts +75 -3
- package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +4 -1
- package/src/resources/extensions/gsd/tests/write-gate.test.ts +103 -0
- package/src/resources/extensions/gsd/tool-surface-readiness.ts +226 -16
- package/src/resources/extensions/gsd/tools/complete-milestone.ts +4 -7
- package/src/resources/extensions/gsd/tools/complete-slice.ts +12 -9
- package/src/resources/extensions/gsd/tools/complete-task.ts +15 -1
- package/src/resources/extensions/gsd/tools/exec-tool.ts +2 -118
- package/src/resources/extensions/gsd/tools/plan-slice.ts +1 -3
- package/src/resources/extensions/gsd/tools/plan-task.ts +17 -1
- package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +9 -10
- package/src/resources/extensions/gsd/tools/validate-milestone.ts +8 -13
- package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +43 -4
- package/src/resources/extensions/gsd/triage-resolution.ts +14 -7
- package/src/resources/extensions/gsd/tui/render-kit.ts +56 -13
- package/src/resources/extensions/gsd/undo.ts +8 -9
- package/src/resources/extensions/gsd/unit-registry.ts +27 -3
- package/src/resources/extensions/gsd/unmerged-milestone-guard.ts +60 -1
- package/src/resources/extensions/gsd/validation-block-guard.ts +46 -0
- package/src/resources/extensions/gsd/visualizer-data.ts +55 -0
- package/src/resources/extensions/gsd/visualizer-views.ts +27 -2
- package/src/resources/extensions/gsd/workflow-logger.ts +5 -0
- package/src/resources/extensions/gsd/workflow-mcp.ts +12 -1
- package/src/resources/extensions/gsd/workflow-projections.ts +24 -4
- package/src/resources/extensions/gsd/worktree-command.ts +6 -6
- package/src/resources/extensions/gsd/worktree-health.ts +6 -3
- package/src/resources/extensions/gsd/worktree-manager.ts +122 -16
- package/src/resources/extensions/gsd/worktree-safety.ts +31 -11
- package/src/resources/extensions/gsd/worktree-shell-guard.ts +123 -0
- package/src/resources/extensions/mcp-client/manager.ts +3 -3
- package/src/resources/extensions/search-the-web/index.ts +45 -9
- package/src/resources/extensions/search-the-web/native-search.ts +16 -4
- package/src/resources/extensions/shared/gsd-browser-cli.ts +41 -2
- package/src/resources/extensions/subagent/index.ts +20 -15
- package/src/resources/extensions/subagent/tests/worktree-cwd.test.ts +57 -0
- package/src/resources/extensions/subagent/worktree-cwd.ts +35 -0
- package/dist/web/standalone/.next/static/chunks/8785.2e5a118797fb2dd2.js +0 -1
- /package/dist/web/standalone/.next/static/{2T9IOdiiM3o3gZ4UbPi8E → BTKtGFF1Y-hvVJEGhBRo9}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{2T9IOdiiM3o3gZ4UbPi8E → BTKtGFF1Y-hvVJEGhBRo9}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
You are running the GSD **verify-work** workflow — validate built features through conversational UAT.
|
|
2
|
+
|
|
3
|
+
## Target
|
|
4
|
+
|
|
5
|
+
{{target}}
|
|
6
|
+
|
|
7
|
+
## Process
|
|
8
|
+
|
|
9
|
+
1. **Load what was built.** Read the target slice/milestone plan and SUMMARY to understand what features were delivered and what their acceptance criteria are.
|
|
10
|
+
|
|
11
|
+
2. **Draft a UAT script.** Turn each acceptance criterion into a concrete, observable test step the human can perform (or that you can perform via tooling where possible). Group by feature; order so earlier steps set up later ones.
|
|
12
|
+
|
|
13
|
+
3. **Walk through the script conversationally.** Present one step (or a small group) at a time. For each, record the outcome: `pass`, `fail` (with what happened), `blocked` (with the blocker), or `skipped` (intentionally). Do not advance past a fail without acknowledging it.
|
|
14
|
+
|
|
15
|
+
4. **Where you can self-verify** (deterministic checks: type checks, tests, lint, schema), run them and include the result alongside the human step.
|
|
16
|
+
|
|
17
|
+
5. **Produce the verdict.** After all steps: `pass` (all criteria met), `needs-attention` (some steps failed but none blocking), or `needs-remediation` (a blocking failure). Record the UAT outcome against the slice via the appropriate gsd-pi mechanism.
|
|
18
|
+
|
|
19
|
+
## Success criteria
|
|
20
|
+
|
|
21
|
+
- Every acceptance criterion becomes a concrete, observable step.
|
|
22
|
+
- Outcomes are recorded honestly — fails are not hidden.
|
|
23
|
+
- Deterministic checks are run where possible, not just asked about.
|
|
24
|
+
- The final verdict maps to a canonical gsd-pi outcome.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
You are running the GSD **workspace** workflow — manage isolated workspace environments for parallel or experimental work.
|
|
2
|
+
|
|
3
|
+
## Action
|
|
4
|
+
|
|
5
|
+
{{action}}
|
|
6
|
+
|
|
7
|
+
## Process
|
|
8
|
+
|
|
9
|
+
A workspace is an isolated environment backed by a git worktree. Map workspace actions onto worktrees:
|
|
10
|
+
|
|
11
|
+
- **--list / list** (default): show all worktrees with state (current, merged, clean, dirty) — `/gsd worktree list`.
|
|
12
|
+
- **--remove <name>**: remove a worktree — `/gsd worktree remove`.
|
|
13
|
+
- **--merge <name>**: merge a worktree — `/gsd worktree merge`.
|
|
14
|
+
- **--clean / clean**: clean stale worktree records — `/gsd worktree clean`.
|
|
15
|
+
|
|
16
|
+
Route every structural action to `/gsd worktree` rather than hand-managing git worktrees.
|
|
17
|
+
|
|
18
|
+
## Success criteria
|
|
19
|
+
|
|
20
|
+
- Listing reflects canonical worktree state.
|
|
21
|
+
- Structural actions route to `/gsd worktree`, keeping state canonical.
|
|
22
|
+
- Removing a dirty worktree is guarded (confirm first).
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
You are running the GSD **workstreams** workflow — manage parallel workstreams that run multiple milestones concurrently with isolation.
|
|
2
|
+
|
|
3
|
+
## Action
|
|
4
|
+
|
|
5
|
+
{{action}}
|
|
6
|
+
|
|
7
|
+
## Process
|
|
8
|
+
|
|
9
|
+
A workstream is a parallel worker running its own milestone in its own branch/worktree. Map workstream actions onto parallel workers:
|
|
10
|
+
|
|
11
|
+
- **list / status** (default): show all parallel workers — milestone, branch/worktree, progress, state (running/paused/done/failed).
|
|
12
|
+
- **create / start**: start parallel workers for all eligible milestones (`/gsd parallel start`). Does not accept a milestone target; use `/gsd parallel start` directly to start all eligible milestones.
|
|
13
|
+
- **switch**: focus the dashboard on the most active worker (`/gsd parallel watch`). Does not accept a milestone target; use `/gsd parallel watch` directly to monitor workers.
|
|
14
|
+
- **progress**: show all workers' progress (`/gsd parallel status`). Does not accept a milestone target; use `/gsd parallel status` directly for worker status.
|
|
15
|
+
- **pause / resume <milestone>**: pause or resume a worker (`/gsd parallel pause|resume`).
|
|
16
|
+
- **complete <milestone>**: complete and merge a worker's milestone (`/gsd parallel merge`).
|
|
17
|
+
|
|
18
|
+
Route every structural action to `/gsd parallel <subcommand>` rather than reimplementing worktree/merge logic.
|
|
19
|
+
|
|
20
|
+
## Success criteria
|
|
21
|
+
|
|
22
|
+
- Status reflects canonical parallel-worker state.
|
|
23
|
+
- Structural actions route to `/gsd parallel`, not duplicates.
|
|
24
|
+
- Unknown milestones list the valid options rather than failing silently.
|
|
@@ -60,6 +60,34 @@ function defaultAlternateModel(provider: string | undefined, modelId: string | u
|
|
|
60
60
|
return undefined;
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
+
function isGeminiCliDeprecatedError(errorMsg: string): boolean {
|
|
64
|
+
return (
|
|
65
|
+
/IneligibleTierError/i.test(errorMsg)
|
|
66
|
+
|| /UNSUPPORTED_CLIENT/i.test(errorMsg)
|
|
67
|
+
|| /no longer supported for Gemini Code Assist for individuals/i.test(errorMsg)
|
|
68
|
+
|| /migrate to the Antigravity suite/i.test(errorMsg)
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function resolveGeminiCliDeprecationGuidance(input: ProviderErrorGuidanceInput): ProviderErrorGuidance {
|
|
73
|
+
const { provider, modelId, unitType } = input;
|
|
74
|
+
const modelLabel =
|
|
75
|
+
provider && modelId ? `${provider}/${modelId}` : modelId ?? provider ?? "google-gemini-cli";
|
|
76
|
+
const unitSuffix = unitType ? ` during ${unitType}` : "";
|
|
77
|
+
|
|
78
|
+
return {
|
|
79
|
+
summary:
|
|
80
|
+
`Provider error on ${modelLabel}${unitSuffix}. ` +
|
|
81
|
+
"Google no longer supports Gemini CLI for individual-tier users — migrate to Antigravity CLI.",
|
|
82
|
+
steps: [
|
|
83
|
+
"Install Antigravity CLI: curl -fsSL https://antigravity.google/cli/install.sh | bash",
|
|
84
|
+
"Run `agy` in a terminal and complete authentication.",
|
|
85
|
+
"In GSD, run `/login` and select Antigravity, or restart GSD to auto-migrate when `agy` is on PATH.",
|
|
86
|
+
"Run /gsd next to resume the paused unit.",
|
|
87
|
+
],
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
|
|
63
91
|
/**
|
|
64
92
|
* Build concrete next steps for a provider/model rejection pause.
|
|
65
93
|
*/
|
|
@@ -73,6 +101,10 @@ export function resolveProviderErrorGuidance(input: ProviderErrorGuidanceInput):
|
|
|
73
101
|
hasConfiguredFallbacks,
|
|
74
102
|
} = input;
|
|
75
103
|
|
|
104
|
+
if (isGeminiCliDeprecatedError(errorMsg)) {
|
|
105
|
+
return resolveGeminiCliDeprecationGuidance(input);
|
|
106
|
+
}
|
|
107
|
+
|
|
76
108
|
const modelLabel =
|
|
77
109
|
provider && modelId ? `${provider}/${modelId}` : modelId ?? provider ?? "current model";
|
|
78
110
|
const phaseKey = unitTypeToPrefsPhaseKey(unitType);
|
|
@@ -64,8 +64,9 @@ export function loadQueueOrder(basePath: string): string[] | null {
|
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
/**
|
|
67
|
-
* Save a custom queue order.
|
|
68
|
-
*
|
|
67
|
+
* Save a custom queue order. When the DB connection is open, mirror the order
|
|
68
|
+
* into milestone sequence; QUEUE-ORDER.json remains the durable file contract
|
|
69
|
+
* for prompt-driven flows such as /gsd rethink.
|
|
69
70
|
*/
|
|
70
71
|
export function saveQueueOrder(basePath: string, order: string[]): void {
|
|
71
72
|
if (isDbAvailable()) {
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import { isToolUnavailableError } from "./auto-tool-tracking.js";
|
|
5
5
|
import { classifyError, isTransient, type ErrorClass } from "./error-classifier.js";
|
|
6
6
|
import { recoveryRemediation } from "./guidance.js";
|
|
7
|
+
import { isTerminalToolSurfaceError } from "./tool-surface-readiness.js";
|
|
7
8
|
import { ReconciliationFailedError } from "./state-reconciliation.js";
|
|
8
9
|
import { IllegalPhaseTransitionError } from "./state-transition-matrix.js";
|
|
9
10
|
|
|
@@ -94,6 +95,12 @@ const FAILURE_TAXONOMY: Record<
|
|
|
94
95
|
};
|
|
95
96
|
|
|
96
97
|
function inferFailureKind(message: string): RecoveryFailureKind {
|
|
98
|
+
// A terminal tool-surface failure (workflow MCP server in failed/needs-auth/
|
|
99
|
+
// disabled) will not self-heal, so it must escalate rather than retry the
|
|
100
|
+
// same model into the per-unit cost cap. Checked before the generic
|
|
101
|
+
// tool-unavailable branch, which matches the same readiness prefix and
|
|
102
|
+
// would otherwise route it to retry. See #783.
|
|
103
|
+
if (isTerminalToolSurfaceError(message)) return "runtime-unknown";
|
|
97
104
|
if (isToolUnavailableError(message)) return "tool-unavailable";
|
|
98
105
|
if (/tool contract|auto-unit tool scope|phase-boundary gate|not permitted.*own/i.test(message)) return "tool-contract";
|
|
99
106
|
if (/lifecycle progression|required artifact|missing .*assessment|missing .*closeout|cannot legally (?:advance|progress)/i.test(message)) return "lifecycle-progression";
|
|
@@ -201,7 +201,7 @@ export function parseRoadmapSlices(content: string): RoadmapSliceEntry[] {
|
|
|
201
201
|
let currentSlice: RoadmapSliceEntry | null = null;
|
|
202
202
|
|
|
203
203
|
for (const line of checkboxItems) {
|
|
204
|
-
const cbMatch = line.match(/^\s*-\s+\[([ xX])\]\s+\*\*([\w
|
|
204
|
+
const cbMatch = line.match(/^\s*-\s+\[([ xX])\]\s+\*\*([\w.-]+):\s+(.+?)\*\*\s*(.*)/);
|
|
205
205
|
if (cbMatch) {
|
|
206
206
|
if (currentSlice) slices.push(currentSlice);
|
|
207
207
|
|
|
@@ -46,7 +46,8 @@ export function validateContent(
|
|
|
46
46
|
|
|
47
47
|
type ContentValidatorFn = (content: string) => ContentViolation[];
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
// Matches both legacy "**T01: title**" and flat-phase "**T01**: title" checkbox formats.
|
|
50
|
+
const TASK_MARKER_RE = /^\s*(?:-\s+\[[ xX]\]\s+\*\*T\d+(?:\*\*)?:|#{2,4}\s+T\d+\b)/gm;
|
|
50
51
|
const SLICE_MARKER_RE = /^\s*(?:-\s+\[[ xX]\]\s+\*\*S\d+:|#{2,4}\s+S\d+\b)/gm;
|
|
51
52
|
|
|
52
53
|
const VALIDATORS: Record<string, ContentValidatorFn> = {
|
|
@@ -66,8 +66,28 @@ export function crossReferenceEvidence(
|
|
|
66
66
|
continue;
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
+
// A shell-spawn/infra failure means the command never ran (e.g. on Windows
|
|
70
|
+
// `gsd_exec runtime=bash` resolves to a WSL with no /bin/bash). The LLM
|
|
71
|
+
// typically recovers by re-running via another runtime, and that genuine
|
|
72
|
+
// run may not even be in the match set. Such a failure is inconclusive, not
|
|
73
|
+
// a falsified pass — exclude it before judging the exit code.
|
|
74
|
+
const commandRuns = matches.filter((m) => !isInfraSpawnFailure(m));
|
|
75
|
+
if (commandRuns.length === 0) {
|
|
76
|
+
if (claimed.exitCode === 0) {
|
|
77
|
+
mismatches.push({
|
|
78
|
+
severity: "warning",
|
|
79
|
+
claimed,
|
|
80
|
+
actual: latestMatch(matches),
|
|
81
|
+
reason:
|
|
82
|
+
`Matched execution failed to spawn (infrastructure error, not a command failure); ` +
|
|
83
|
+
`treating as inconclusive`,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
|
|
69
89
|
// Exit code mismatch: LLM claims success but actual command failed
|
|
70
|
-
const match = latestMatch(
|
|
90
|
+
const match = latestMatch(commandRuns);
|
|
71
91
|
if (claimed.exitCode === 0 && match.exitCode !== 0) {
|
|
72
92
|
mismatches.push({
|
|
73
93
|
severity: "error",
|
|
@@ -81,6 +101,30 @@ export function crossReferenceEvidence(
|
|
|
81
101
|
return mismatches;
|
|
82
102
|
}
|
|
83
103
|
|
|
104
|
+
/**
|
|
105
|
+
* Runtime-spawn / shell-infra failure signatures. When a bash-runtime call
|
|
106
|
+
* fails to *spawn* (rather than the command running and exiting non-zero), the
|
|
107
|
+
* recorded exitCode is an ordinary non-zero but the output carries one of these
|
|
108
|
+
* markers. Such a call is not evidence that a verification failed.
|
|
109
|
+
*/
|
|
110
|
+
const INFRA_SPAWN_FAILURE_SIGNATURES: readonly RegExp[] = [
|
|
111
|
+
/execvpe\([^)]*\)\s+failed/i, // WSL: execvpe(/bin/bash) failed: No such file or directory
|
|
112
|
+
/WSL \(.*\) ERROR/i, // WSL relay error banner
|
|
113
|
+
/command not found:\s*(?:bash|sh|zsh|dash|fish|ash|ksh|wsl)\b/i, // missing shell interpreter only
|
|
114
|
+
];
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* True when a non-zero bash call looks like a shell-spawn/infra failure (the
|
|
118
|
+
* command never started) rather than a real command failure. A successful run
|
|
119
|
+
* (exitCode 0) is never an infra failure.
|
|
120
|
+
*/
|
|
121
|
+
function isInfraSpawnFailure(call: BashEvidence): boolean {
|
|
122
|
+
if (call.exitCode === 0) return false;
|
|
123
|
+
const snippet = call.outputSnippet ?? "";
|
|
124
|
+
if (snippet.length === 0) return false;
|
|
125
|
+
return INFRA_SPAWN_FAILURE_SIGNATURES.some((re) => re.test(snippet));
|
|
126
|
+
}
|
|
127
|
+
|
|
84
128
|
// ─── Internals ──────────────────────────────────────────────────────────────
|
|
85
129
|
|
|
86
130
|
/**
|
|
@@ -13,6 +13,7 @@ import type { ExtensionCommandContext } from "@gsd/pi-coding-agent";
|
|
|
13
13
|
import { existsSync, readFileSync } from "node:fs";
|
|
14
14
|
import { saveFile } from "./files.js";
|
|
15
15
|
import {
|
|
16
|
+
clearGSDPreferencesCache,
|
|
16
17
|
getGlobalGSDPreferencesPath,
|
|
17
18
|
loadEffectiveGSDPreferences,
|
|
18
19
|
loadGlobalGSDPreferences,
|
|
@@ -153,6 +154,7 @@ async function writeGlobalServiceTier(
|
|
|
153
154
|
}
|
|
154
155
|
|
|
155
156
|
await saveFile(path, `---\n${frontmatter}---${body}`);
|
|
157
|
+
clearGSDPreferencesCache();
|
|
156
158
|
await ctx.waitForIdle();
|
|
157
159
|
await ctx.reload();
|
|
158
160
|
}
|
|
@@ -22,6 +22,7 @@ import { join, dirname } from "node:path";
|
|
|
22
22
|
import { gsdRoot, normalizeRealPath } from "./paths.js";
|
|
23
23
|
import { atomicWriteSync } from "./atomic-write.js";
|
|
24
24
|
import { markWorkerStoppingByPid } from "./db/auto-workers.js";
|
|
25
|
+
import { logWarning } from "./workflow-logger.js";
|
|
25
26
|
|
|
26
27
|
const _require = createRequire(import.meta.url);
|
|
27
28
|
|
|
@@ -223,15 +224,17 @@ function createLockCompromisedHandler(lockFilePath: string): () => void {
|
|
|
223
224
|
return () => {
|
|
224
225
|
const elapsed = Date.now() - _lockAcquiredAt;
|
|
225
226
|
if (elapsed < 1_800_000) {
|
|
226
|
-
|
|
227
|
-
|
|
227
|
+
logWarning(
|
|
228
|
+
"session",
|
|
229
|
+
`Lock heartbeat caught up after ${Math.round(elapsed / 1000)}s — long LLM call, no action needed.`,
|
|
228
230
|
);
|
|
229
231
|
return;
|
|
230
232
|
}
|
|
231
233
|
const existing = readExistingLockDataWithRetry(lockFilePath);
|
|
232
234
|
if (existing && existing.pid === process.pid) {
|
|
233
|
-
|
|
234
|
-
|
|
235
|
+
logWarning(
|
|
236
|
+
"session",
|
|
237
|
+
`Lock heartbeat mismatch after ${Math.round(elapsed / 1000)}s — lock file still owned by PID ${process.pid}, treating as false positive.`,
|
|
235
238
|
);
|
|
236
239
|
return;
|
|
237
240
|
}
|
|
@@ -476,9 +479,7 @@ export function getSessionLockStatus(basePath: string): SessionLockStatus {
|
|
|
476
479
|
try {
|
|
477
480
|
const result = acquireSessionLock(basePath);
|
|
478
481
|
if (result.acquired) {
|
|
479
|
-
|
|
480
|
-
`[gsd] Lock recovered after onCompromised — lock file PID matched, re-acquired.\n`,
|
|
481
|
-
);
|
|
482
|
+
logWarning("session", "Lock recovered after onCompromised — lock file PID matched, re-acquired.");
|
|
482
483
|
return { valid: true, recovered: true };
|
|
483
484
|
}
|
|
484
485
|
} catch {
|
|
@@ -697,6 +698,12 @@ export interface RetryOptions {
|
|
|
697
698
|
delayMs?: number;
|
|
698
699
|
}
|
|
699
700
|
|
|
701
|
+
const _retrySleepView = new Int32Array(new SharedArrayBuffer(4));
|
|
702
|
+
function sleepSync(ms: number): void {
|
|
703
|
+
if (!(ms > 0)) return;
|
|
704
|
+
Atomics.wait(_retrySleepView, 0, 0, ms);
|
|
705
|
+
}
|
|
706
|
+
|
|
700
707
|
export function readExistingLockDataWithRetry(
|
|
701
708
|
lp: string,
|
|
702
709
|
options?: RetryOptions,
|
|
@@ -708,12 +715,7 @@ export function readExistingLockDataWithRetry(
|
|
|
708
715
|
const data = readExistingLockData(lp);
|
|
709
716
|
if (data !== null) return data;
|
|
710
717
|
if (attempt < maxAttempts) {
|
|
711
|
-
|
|
712
|
-
// and the delays are short (200ms default).
|
|
713
|
-
const start = Date.now();
|
|
714
|
-
while (Date.now() - start < delayMs) {
|
|
715
|
-
// busy-wait
|
|
716
|
-
}
|
|
718
|
+
sleepSync(delayMs);
|
|
717
719
|
}
|
|
718
720
|
}
|
|
719
721
|
return null;
|
|
@@ -240,3 +240,6 @@ Quick reference — see [references/commands.md](references/commands.md) for the
|
|
|
240
240
|
| `skip` / `undo` | Unit control |
|
|
241
241
|
| `doctor` | Health check + auto-fix |
|
|
242
242
|
| `steer <desc>` | Hard-steer plan mid-execution |
|
|
243
|
+
| `explore` / `spike` / `sketch` | Prompt-driven ideation and experiment workflows |
|
|
244
|
+
| `map-codebase` / `docs-update` / `graphify` | Codebase documentation and knowledge workflows |
|
|
245
|
+
| `code-review` / `review` / `audit-*` / `verify-work` | Review, audit, and UAT workflows |
|
|
@@ -50,6 +50,57 @@ All commands can be run via `gsd headless [command]`.
|
|
|
50
50
|
| `inspect` | Show SQLite DB diagnostics (schema, row counts) |
|
|
51
51
|
| `forensics` | Post-mortem investigation of auto-mode failures |
|
|
52
52
|
|
|
53
|
+
## Additional Prompt-Driven Workflows
|
|
54
|
+
|
|
55
|
+
These commands dispatch native GSD prompts adapted to the milestone, slice, and `.gsd/` model. Use them as `gsd headless <command> [args...]`.
|
|
56
|
+
|
|
57
|
+
| Command | Description |
|
|
58
|
+
|---------|-------------|
|
|
59
|
+
| `explore` | Socratic ideation before committing an idea |
|
|
60
|
+
| `spike` | Focused throwaway experiment (`--quick`, `--text`, or frontier mode) |
|
|
61
|
+
| `sketch` | UI/design exploration with throwaway HTML mockups |
|
|
62
|
+
| `map-codebase` | Generate structured codebase docs under `.gsd/codebase/` |
|
|
63
|
+
| `docs-update` | Generate, update, or verify docs against live code |
|
|
64
|
+
| `graphify` | Build, query, inspect, or diff `.gsd/knowledge/` |
|
|
65
|
+
| `stats` | Show project statistics, milestone state, git metrics, and timeline |
|
|
66
|
+
| `progress` | Summarize recent work; can route `--next` or `--do "..."` |
|
|
67
|
+
| `health` | Check `.gsd/` integrity (`--repair`, `--context`) |
|
|
68
|
+
| `surface` | Manage surfaced skills and extensions |
|
|
69
|
+
| `code-review` | Review changed source for bugs, security, and quality |
|
|
70
|
+
| `review` | Peer-review recent work across reviewer perspectives |
|
|
71
|
+
| `audit-milestone` | Verify a milestone met its definition of done |
|
|
72
|
+
| `audit-uat` | Audit outstanding UAT/verification items |
|
|
73
|
+
| `audit-fix` | Classify and remediate audit findings |
|
|
74
|
+
| `ui-review` | Run a six-pillar frontend visual audit |
|
|
75
|
+
| `secure-phase` | Verify threat mitigations |
|
|
76
|
+
| `validate-phase` | Fill validation and test coverage gaps |
|
|
77
|
+
| `verify-work` | Run conversational UAT |
|
|
78
|
+
| `plan-review-convergence` | Iterate a plan through review cycles |
|
|
79
|
+
| `discuss-phase` | Gather milestone or slice context through questions |
|
|
80
|
+
| `plan-phase` | Create a detailed slice plan |
|
|
81
|
+
| `execute-phase` | Execute slice tasks with wave support |
|
|
82
|
+
| `spec-phase` | Clarify what a milestone delivers |
|
|
83
|
+
| `mvp-phase` | Plan a vertical MVP milestone |
|
|
84
|
+
| `ui-phase` | Produce a `UI-SPEC` |
|
|
85
|
+
| `ai-integration-phase` | Produce an `AI-SPEC` |
|
|
86
|
+
| `ultraplan-phase` | Run extended planning and review |
|
|
87
|
+
| `autonomous` | Run remaining lifecycle work continuously |
|
|
88
|
+
| `pause-work` | Create a pause handoff |
|
|
89
|
+
| `resume-work` | Resume work with restored context |
|
|
90
|
+
| `manager` | Manage multiple milestones from a command-center workflow |
|
|
91
|
+
| `phase` | Manage milestone queue ordering |
|
|
92
|
+
| `thread` | Manage persistent context threads |
|
|
93
|
+
| `workstreams` | Route workstream actions through `parallel` |
|
|
94
|
+
| `workspace` | Route workspace actions through `worktree` |
|
|
95
|
+
| `milestone-summary` | Generate a project or milestone summary |
|
|
96
|
+
| `review-backlog` | Review and promote backlog items |
|
|
97
|
+
| `inbox` | Triage GitHub issues and PRs |
|
|
98
|
+
| `import` | Ingest external plans with conflict detection |
|
|
99
|
+
| `ingest-docs` | Bootstrap or merge `.gsd/` state from docs |
|
|
100
|
+
| `profile-user` | Generate and persist a developer profile |
|
|
101
|
+
| `settings` | Configure workflow toggles and model profile |
|
|
102
|
+
| `ns-context`, `ns-ideate`, `ns-manage`, `ns-project`, `ns-review`, `ns-workflow` | Namespace-grouping names that redirect to `help` |
|
|
103
|
+
|
|
53
104
|
## Phases
|
|
54
105
|
|
|
55
106
|
GSD workflows progress through these phases:
|
|
@@ -213,13 +213,21 @@ function detectArtifactDbStatusDriftForMilestone(
|
|
|
213
213
|
|
|
214
214
|
for (const task of tasks) {
|
|
215
215
|
if (isClosedStatus(task.status)) continue;
|
|
216
|
-
|
|
216
|
+
// Flat-phase: task summaries live in the phase dir as TID-SUMMARY.md
|
|
217
|
+
let diskTaskSummary = resolveTaskFile(
|
|
217
218
|
basePath,
|
|
218
219
|
milestoneId,
|
|
219
220
|
slice.id,
|
|
220
221
|
task.id,
|
|
221
222
|
"SUMMARY",
|
|
222
223
|
);
|
|
224
|
+
if (!diskTaskSummary) {
|
|
225
|
+
const phaseDir = resolveMilestonePath(basePath, milestoneId);
|
|
226
|
+
if (phaseDir) {
|
|
227
|
+
const flatSummary = join(phaseDir, `${task.id}-SUMMARY.md`);
|
|
228
|
+
if (existsSync(flatSummary)) diskTaskSummary = flatSummary;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
223
231
|
if (!diskTaskSummary || !existsSync(diskTaskSummary)) continue;
|
|
224
232
|
addUniqueDrift(drifts, seen, {
|
|
225
233
|
kind: "artifact-db-status-divergence",
|
|
@@ -302,12 +310,35 @@ function detectDiskSliceIdDivergenceForMilestone(
|
|
|
302
310
|
const milestonePath = resolveMilestonePath(basePath, milestoneId);
|
|
303
311
|
if (!milestonePath) return [];
|
|
304
312
|
|
|
305
|
-
const slicesDir = join(milestonePath, "slices");
|
|
306
|
-
if (!existsSync(slicesDir)) return [];
|
|
307
|
-
|
|
308
313
|
const knownSliceIds = new Set(getMilestoneSlices(milestoneId).map((slice) => slice.id));
|
|
309
314
|
const drifts: DiskSliceIdDivergenceDrift[] = [];
|
|
310
315
|
|
|
316
|
+
// Flat-phase: scan phase dir for plan files (NN-MM-PLAN.md) where MM
|
|
317
|
+
// doesn't match any known slice. Each plan file's slice id is S<MM>.
|
|
318
|
+
try {
|
|
319
|
+
for (const entry of readdirSync(milestonePath)) {
|
|
320
|
+
const planMatch = entry.match(/^\d+-(\d+)-PLAN\.md$/i);
|
|
321
|
+
if (!planMatch) continue;
|
|
322
|
+
const planNum = parseInt(planMatch[1]!, 10);
|
|
323
|
+
const sliceId = `S${String(planNum).padStart(2, "0")}`;
|
|
324
|
+
if (knownSliceIds.has(sliceId)) continue;
|
|
325
|
+
drifts.push({
|
|
326
|
+
kind: "disk-slice-id-divergence",
|
|
327
|
+
milestoneId,
|
|
328
|
+
sliceId,
|
|
329
|
+
sliceDir: join(milestonePath, entry),
|
|
330
|
+
disposition: "block-meaningful",
|
|
331
|
+
reason: `plan file ${entry} references unknown ${sliceId}`,
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
} catch {
|
|
335
|
+
// unreadable phase dir
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
// Legacy: scan slices/ subdir for unknown slice dirs
|
|
339
|
+
const slicesDir = join(milestonePath, "slices");
|
|
340
|
+
if (!existsSync(slicesDir)) return drifts;
|
|
341
|
+
|
|
311
342
|
for (const entry of readdirSync(slicesDir)) {
|
|
312
343
|
const sliceDir = join(slicesDir, entry);
|
|
313
344
|
try {
|
|
@@ -410,6 +441,27 @@ function quarantineSliceDir(record: DiskSliceIdDivergenceDrift, basePath: string
|
|
|
410
441
|
renameSync(record.sliceDir, target);
|
|
411
442
|
}
|
|
412
443
|
|
|
444
|
+
export function completedMilestoneReopenedGuidance(
|
|
445
|
+
record: Pick<CompletedMilestoneReopenedDrift, "milestoneId" | "dbStatus" | "completedDispatchAt">,
|
|
446
|
+
): string {
|
|
447
|
+
const when = record.completedDispatchAt ?? "time unknown";
|
|
448
|
+
const intro =
|
|
449
|
+
`Milestone ${record.milestoneId} has completed closeout dispatch history (${when}) ` +
|
|
450
|
+
`but DB status is still ${record.dbStatus}.`;
|
|
451
|
+
|
|
452
|
+
if (isClosedStatus(record.dbStatus)) {
|
|
453
|
+
return (
|
|
454
|
+
`${intro} Use gsd_milestone_reopen for ${record.milestoneId} to redo this milestone, then run /gsd next.`
|
|
455
|
+
);
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
return (
|
|
459
|
+
`${intro} Finish closeout with \`/gsd dispatch complete-milestone ${record.milestoneId}\`, ` +
|
|
460
|
+
`review with \`/gsd status ${record.milestoneId}\`, then run /gsd next. ` +
|
|
461
|
+
"Running /gsd next again before fixing this will pause immediately."
|
|
462
|
+
);
|
|
463
|
+
}
|
|
464
|
+
|
|
413
465
|
function diskSliceIdDivergenceGuidance(record: DiskSliceIdDivergenceDrift): string {
|
|
414
466
|
const quarantineExample = `.gsd/quarantine/milestones/${record.milestoneId}/slices/${record.sliceId}-manual-review`;
|
|
415
467
|
return (
|
|
@@ -444,11 +496,7 @@ export function repairArtifactDbDrift(
|
|
|
444
496
|
}
|
|
445
497
|
|
|
446
498
|
if (record.kind === "completed-milestone-reopened") {
|
|
447
|
-
throw new Error(
|
|
448
|
-
`Milestone ${record.milestoneId} has completed complete-milestone dispatch history` +
|
|
449
|
-
` (${record.completedDispatchAt ?? "time unknown"}) but the DB status is ${record.dbStatus}. ` +
|
|
450
|
-
"Refusing to plan it again without an explicit reopen or recovery.",
|
|
451
|
-
);
|
|
499
|
+
throw new Error(completedMilestoneReopenedGuidance(record));
|
|
452
500
|
}
|
|
453
501
|
|
|
454
502
|
throw new Error(
|
|
@@ -472,11 +520,7 @@ export function describeArtifactDbDriftBlocker(
|
|
|
472
520
|
}
|
|
473
521
|
|
|
474
522
|
if (record.kind === "completed-milestone-reopened") {
|
|
475
|
-
return (
|
|
476
|
-
`Milestone ${record.milestoneId} has completed complete-milestone dispatch history` +
|
|
477
|
-
` (${record.completedDispatchAt ?? "time unknown"}) but the DB status is ${record.dbStatus}. ` +
|
|
478
|
-
"Refusing to plan it again without an explicit reopen or recovery."
|
|
479
|
-
);
|
|
523
|
+
return completedMilestoneReopenedGuidance(record);
|
|
480
524
|
}
|
|
481
525
|
|
|
482
526
|
return (
|
|
@@ -20,9 +20,11 @@ import {
|
|
|
20
20
|
} from "../../gsd-db.js";
|
|
21
21
|
import {
|
|
22
22
|
resolveMilestoneFile,
|
|
23
|
+
resolveMilestonePath,
|
|
23
24
|
resolveSliceFile,
|
|
24
25
|
resolveTaskFile,
|
|
25
26
|
} from "../../paths.js";
|
|
27
|
+
import { join } from "node:path";
|
|
26
28
|
import type { GSDState } from "../../types.js";
|
|
27
29
|
import type { DriftContext, DriftHandler, DriftRecord } from "../types.js";
|
|
28
30
|
|
|
@@ -103,13 +105,23 @@ function collectMilestoneCompletionDrift(
|
|
|
103
105
|
for (const task of getSliceTasks(mid, slice.id)) {
|
|
104
106
|
if (!COMPLETE_STATUSES.has(task.status)) continue;
|
|
105
107
|
if (task.completed_at !== null) continue;
|
|
106
|
-
|
|
108
|
+
// Flat-phase: task summaries live in the phase dir as TID-SUMMARY.md.
|
|
109
|
+
// Legacy: resolveTaskFile returns the tasks/TID/TID-SUMMARY.md path.
|
|
110
|
+
let taskSummary = resolveTaskFile(
|
|
107
111
|
ctx.basePath,
|
|
108
112
|
mid,
|
|
109
113
|
slice.id,
|
|
110
114
|
task.id,
|
|
111
115
|
"SUMMARY",
|
|
112
116
|
);
|
|
117
|
+
// Flat-phase fallback: check the phase dir directly
|
|
118
|
+
if (!taskSummary) {
|
|
119
|
+
const phaseDir = resolveMilestonePath(ctx.basePath, mid);
|
|
120
|
+
if (phaseDir) {
|
|
121
|
+
const flatSummary = join(phaseDir, `${task.id}-SUMMARY.md`);
|
|
122
|
+
if (existsSync(flatSummary)) taskSummary = flatSummary;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
113
125
|
if (taskSummary && existsSync(taskSummary)) {
|
|
114
126
|
drifts.push({
|
|
115
127
|
kind: "missing-completion-timestamp",
|
|
@@ -170,7 +182,15 @@ export function repairMissingCompletionTimestamp(
|
|
|
170
182
|
task.completed_at !== null ||
|
|
171
183
|
!COMPLETE_STATUSES.has(task.status)
|
|
172
184
|
) return;
|
|
173
|
-
|
|
185
|
+
// Flat-phase: task summaries live in the phase dir as TID-SUMMARY.md
|
|
186
|
+
let summary = resolveTaskFile(ctx.basePath, mid, sid, tid, "SUMMARY");
|
|
187
|
+
if (!summary) {
|
|
188
|
+
const phaseDir = resolveMilestonePath(ctx.basePath, mid);
|
|
189
|
+
if (phaseDir) {
|
|
190
|
+
const flatSummary = join(phaseDir, `${tid}-SUMMARY.md`);
|
|
191
|
+
if (existsSync(flatSummary)) summary = flatSummary;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
174
194
|
const ts = summary ? summaryMtimeIso(summary) : null;
|
|
175
195
|
if (!ts) return;
|
|
176
196
|
updateTaskStatus(mid, sid, tid, task.status, ts);
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
// Project/App: gsd-pi
|
|
2
|
+
// File Purpose: ADR-017 drift handler for external (gsd-core) markdown edits.
|
|
3
|
+
//
|
|
4
|
+
// gsd-pi's DB is canonical, but .gsd/*.md is the inter-tool contract. When
|
|
5
|
+
// gsd-core edits a projection file, this handler detects the sha drift vs the
|
|
6
|
+
// recorded baseline in .gsd/.compat.json and re-imports the affected entities
|
|
7
|
+
// into the DB. The next renderAllFromDb pass re-projects; the write-time
|
|
8
|
+
// invalidation hook then refreshes the marker entry, closing the loop.
|
|
9
|
+
|
|
10
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
11
|
+
import { join } from "node:path";
|
|
12
|
+
|
|
13
|
+
import {
|
|
14
|
+
computeProjectionSha,
|
|
15
|
+
readCompatMarker,
|
|
16
|
+
writeCompatMarker,
|
|
17
|
+
} from "../../compat/compat-marker.js";
|
|
18
|
+
import { logWarning } from "../../workflow-logger.js";
|
|
19
|
+
import type { GSDState } from "../../types.js";
|
|
20
|
+
import type { DriftContext, DriftHandler, DriftRecord } from "../types.js";
|
|
21
|
+
|
|
22
|
+
type ExternalMarkdownEditDrift = Extract<
|
|
23
|
+
DriftRecord,
|
|
24
|
+
{ kind: "external-markdown-edit" }
|
|
25
|
+
>;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Detect sha drift between the marker baseline and current file contents.
|
|
29
|
+
*
|
|
30
|
+
* - Missing marker → no records (the broader /gsd recover flow handles a
|
|
31
|
+
* cold-start; this handler only fires when we have a baseline to compare).
|
|
32
|
+
* - Missing file on disk → no record (other handlers cover missing artifacts).
|
|
33
|
+
* - Sha match → no record (gsd-pi's own write or no change).
|
|
34
|
+
* - Sha mismatch → one record per drifted file, scoped to its recorded entities.
|
|
35
|
+
*/
|
|
36
|
+
function detectExternalMarkdownEdit(
|
|
37
|
+
_state: GSDState,
|
|
38
|
+
ctx: DriftContext,
|
|
39
|
+
): ExternalMarkdownEditDrift[] {
|
|
40
|
+
const marker = readCompatMarker(ctx.basePath);
|
|
41
|
+
const entries = Object.entries(marker.projections);
|
|
42
|
+
if (entries.length === 0) return [];
|
|
43
|
+
|
|
44
|
+
const records: ExternalMarkdownEditDrift[] = [];
|
|
45
|
+
for (const [projectionPath, entry] of entries) {
|
|
46
|
+
const abs = join(ctx.basePath, ".gsd", projectionPath);
|
|
47
|
+
if (!existsSync(abs)) continue;
|
|
48
|
+
const actual = computeProjectionSha(readFileSync(abs, "utf-8"));
|
|
49
|
+
if (actual === entry.sha) continue;
|
|
50
|
+
records.push({
|
|
51
|
+
kind: "external-markdown-edit",
|
|
52
|
+
projectionPath,
|
|
53
|
+
expectedSha: entry.sha,
|
|
54
|
+
actualSha: actual,
|
|
55
|
+
entities: entry.entities,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
return records;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Idempotent repair: re-import hierarchy for the affected entities from
|
|
63
|
+
* markdown into the DB, then update the marker entry so the next detect pass
|
|
64
|
+
* sees the file as expected. migrateHierarchyToDb is itself idempotent
|
|
65
|
+
* (upsert), so re-running this repair after a successful one is a no-op.
|
|
66
|
+
*/
|
|
67
|
+
async function repairExternalMarkdownEdit(
|
|
68
|
+
record: ExternalMarkdownEditDrift,
|
|
69
|
+
ctx: DriftContext,
|
|
70
|
+
): Promise<void> {
|
|
71
|
+
try {
|
|
72
|
+
// Dynamic imports break a module-init cycle: this handler ← registry ←
|
|
73
|
+
// state.ts ← guided-flow.ts ← md-importer.ts ← (this handler's old static
|
|
74
|
+
// import). Deferring to repair time keeps module load cycle-free.
|
|
75
|
+
const { migrateHierarchyToDb } = await import("../../md-importer.js");
|
|
76
|
+
const { invalidateStateCache } = await import("../../state.js");
|
|
77
|
+
// Scoped re-import. migrateHierarchyToDb walks the whole tree but is a
|
|
78
|
+
// cheap upsert; per-entity scoping would require decomposing it, which is
|
|
79
|
+
// out of scope for v1. The cost is bounded by tree size and runs at most
|
|
80
|
+
// once per reconcile pass (MAX_PASSES=2).
|
|
81
|
+
migrateHierarchyToDb(ctx.basePath);
|
|
82
|
+
invalidateStateCache();
|
|
83
|
+
} catch (err) {
|
|
84
|
+
logWarning(
|
|
85
|
+
"reconcile",
|
|
86
|
+
`external-markdown-edit repair failed for ${record.projectionPath}: ${(err as Error).message}`,
|
|
87
|
+
);
|
|
88
|
+
throw err;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Refresh the marker so a second pass (cap=2 reconcile) doesn't re-fire.
|
|
92
|
+
const marker = readCompatMarker(ctx.basePath);
|
|
93
|
+
marker.projections[record.projectionPath] = {
|
|
94
|
+
sha: record.actualSha,
|
|
95
|
+
entities: record.entities,
|
|
96
|
+
};
|
|
97
|
+
marker.lastProjectedAt = new Date().toISOString();
|
|
98
|
+
writeCompatMarker(ctx.basePath, marker);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export const externalMarkdownEditHandler: DriftHandler<ExternalMarkdownEditDrift> = {
|
|
102
|
+
kind: "external-markdown-edit",
|
|
103
|
+
detect: detectExternalMarkdownEdit,
|
|
104
|
+
repair: repairExternalMarkdownEdit,
|
|
105
|
+
};
|