@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
|
@@ -170,6 +170,9 @@ export function classifyQuestion(input) {
|
|
|
170
170
|
/**
|
|
171
171
|
* THE single policy point for whether a question's answer counts as answered.
|
|
172
172
|
*
|
|
173
|
+
* - timed_out rounds → "timeout" for every kind (host elicitation expired
|
|
174
|
+
* before the user answered; fail-closed, but the caller pauses-and-waits
|
|
175
|
+
* instead of re-asking into the same timeout loop, #852).
|
|
173
176
|
* - cancelled rounds → "cancelled" for every kind.
|
|
174
177
|
* - gate: delegates to evaluateGateAnswer in the consent-verdict leaf — the
|
|
175
178
|
* same verdict engine write-gate's applyAskUserQuestionsGateResult consumes;
|
|
@@ -181,6 +184,8 @@ export function classifyQuestion(input) {
|
|
|
181
184
|
*/
|
|
182
185
|
export function evaluateAnswer(options) {
|
|
183
186
|
const { question, details } = options;
|
|
187
|
+
if (details.timed_out)
|
|
188
|
+
return "timeout";
|
|
184
189
|
if (details.cancelled)
|
|
185
190
|
return "cancelled";
|
|
186
191
|
const { kind } = classifyQuestion({ id: question.id, options: question.options });
|
|
@@ -203,6 +208,7 @@ export function evaluateAnswer(options) {
|
|
|
203
208
|
}
|
|
204
209
|
const OUTCOME_PRECEDENCE = [
|
|
205
210
|
"cancelled",
|
|
211
|
+
"timeout",
|
|
206
212
|
"waiting",
|
|
207
213
|
"declined",
|
|
208
214
|
"verified",
|
|
@@ -217,6 +223,12 @@ const OUTCOME_PRECEDENCE = [
|
|
|
217
223
|
* a no-op, so it reports "answered" here.
|
|
218
224
|
*/
|
|
219
225
|
export function evaluateAskUserQuestionsRound(questions, details) {
|
|
226
|
+
// timed_out is checked before cancelled: a host elicitation timeout is a
|
|
227
|
+
// more specific signal than the deliberate-dismissal cancelled it is also
|
|
228
|
+
// marked with, and callers must pause-and-wait instead of treating it as a
|
|
229
|
+
// re-ask-able cancel (#852).
|
|
230
|
+
if (details.timed_out)
|
|
231
|
+
return "timeout";
|
|
220
232
|
if (details.cancelled)
|
|
221
233
|
return "cancelled";
|
|
222
234
|
let worst = "answered";
|
|
@@ -44,13 +44,23 @@ export function hasNotesValue(notes) {
|
|
|
44
44
|
/**
|
|
45
45
|
* THE per-question verdict for gate questions (fail-closed):
|
|
46
46
|
*
|
|
47
|
+
* - timed_out rounds → "timeout" (host elicitation expired before the user
|
|
48
|
+
* answered; fail-closed — the gate stays pending — but the caller pauses
|
|
49
|
+
* instead of re-asking into the same timeout loop, #852).
|
|
47
50
|
* - cancelled rounds → "cancelled".
|
|
48
51
|
* - the confirmation option (structural match) → "verified".
|
|
49
52
|
* - any other real selection → "declined".
|
|
50
53
|
* - empty/missing selection → "waiting" — an empty answer is NEVER an answer,
|
|
51
54
|
* so notes can never satisfy a gate either.
|
|
55
|
+
*
|
|
56
|
+
* `timed_out` is checked first: the handler marks a timed-out round with both
|
|
57
|
+
* `cancelled: true` and `timed_out: true` (see
|
|
58
|
+
* `askUserQuestionsHandler`), so the timeout must win to avoid the cancelled
|
|
59
|
+
* branch's re-ask semantics.
|
|
52
60
|
*/
|
|
53
61
|
export function evaluateGateAnswer(question, details) {
|
|
62
|
+
if (details.timed_out)
|
|
63
|
+
return "timeout";
|
|
54
64
|
if (details.cancelled)
|
|
55
65
|
return "cancelled";
|
|
56
66
|
const questionId = typeof question.id === "string" ? question.id : "";
|
|
@@ -12,8 +12,10 @@ import { loadFile } from "./files.js";
|
|
|
12
12
|
import { isDbAvailable, getMilestoneSlices, getSliceTasks } from "./gsd-db.js";
|
|
13
13
|
import { resolveMilestoneFile } from "./paths.js";
|
|
14
14
|
import { getAutoDashboardData } from "./auto.js";
|
|
15
|
+
import { getAutoRuntimeSnapshot } from "./auto-runtime-state.js";
|
|
15
16
|
import { getLedger, getProjectTotals, aggregateByPhase, aggregateBySlice, aggregateByModel, aggregateCacheHitRate, formatCost, formatTokenCount, formatCostProjection, getPromptSizeStats, } from "./metrics.js";
|
|
16
17
|
import { loadEffectiveGSDPreferences } from "./preferences.js";
|
|
18
|
+
import { countPendingCaptures } from "./captures.js";
|
|
17
19
|
import { getActiveWorktreeName } from "./worktree-session-state.js";
|
|
18
20
|
import { getWorkerBatches, hasActiveWorkers } from "../subagent/worker-registry.js";
|
|
19
21
|
import { formatDuration, padRight, joinColumns, centerLine, fitColumns, STATUS_GLYPH, STATUS_COLOR } from "../shared/mod.js";
|
|
@@ -102,20 +104,54 @@ export class GSDDashboardOverlay {
|
|
|
102
104
|
currentUnit,
|
|
103
105
|
].join("|");
|
|
104
106
|
}
|
|
107
|
+
refreshVolatileDashboardData(snapshot = getAutoRuntimeSnapshot()) {
|
|
108
|
+
let pendingCaptureCount = this.dashData.pendingCaptureCount;
|
|
109
|
+
try {
|
|
110
|
+
if (snapshot.basePath) {
|
|
111
|
+
pendingCaptureCount = countPendingCaptures(snapshot.basePath);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
// Non-fatal — keep last known value
|
|
116
|
+
}
|
|
117
|
+
this.dashData = {
|
|
118
|
+
...this.dashData,
|
|
119
|
+
active: snapshot.active,
|
|
120
|
+
paused: snapshot.paused,
|
|
121
|
+
currentUnit: snapshot.currentUnit
|
|
122
|
+
? {
|
|
123
|
+
type: snapshot.currentUnit.type,
|
|
124
|
+
id: snapshot.currentUnit.id,
|
|
125
|
+
startedAt: snapshot.currentUnit.startedAt,
|
|
126
|
+
}
|
|
127
|
+
: null,
|
|
128
|
+
basePath: snapshot.basePath,
|
|
129
|
+
elapsed: snapshot.active || snapshot.paused
|
|
130
|
+
? (this.dashData.startTime > 0 ? Date.now() - this.dashData.startTime : 0)
|
|
131
|
+
: 0,
|
|
132
|
+
toolSurface: snapshot.toolSurface,
|
|
133
|
+
pendingCaptureCount,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
105
136
|
async refreshDashboard(initial = false) {
|
|
106
137
|
if (this.disposed)
|
|
107
138
|
return;
|
|
108
|
-
|
|
109
|
-
const nextIdentity = this.computeDashboardIdentity(
|
|
139
|
+
const runtimeSnapshot = getAutoRuntimeSnapshot();
|
|
140
|
+
const nextIdentity = this.computeDashboardIdentity(runtimeSnapshot);
|
|
110
141
|
const identityChanged = initial || nextIdentity !== this.loadedDashboardIdentity;
|
|
111
142
|
if (identityChanged) {
|
|
143
|
+
this.dashData = getAutoDashboardData();
|
|
144
|
+
const loadedIdentity = this.computeDashboardIdentity(this.dashData);
|
|
112
145
|
const loaded = await this.loadData();
|
|
113
146
|
if (this.disposed)
|
|
114
147
|
return;
|
|
115
148
|
if (loaded) {
|
|
116
|
-
this.loadedDashboardIdentity =
|
|
149
|
+
this.loadedDashboardIdentity = loadedIdentity;
|
|
117
150
|
}
|
|
118
151
|
}
|
|
152
|
+
else {
|
|
153
|
+
this.refreshVolatileDashboardData(runtimeSnapshot);
|
|
154
|
+
}
|
|
119
155
|
if (initial) {
|
|
120
156
|
this.loading = false;
|
|
121
157
|
}
|
|
@@ -615,6 +615,33 @@ export function closeDatabase() {
|
|
|
615
615
|
// failed open doesn't persist into the next open attempt or status check.
|
|
616
616
|
_dbOpenState.reset();
|
|
617
617
|
}
|
|
618
|
+
/**
|
|
619
|
+
* Open an isolated database connection that does NOT touch the process-wide
|
|
620
|
+
* `currentDb` singleton. Intended for background observers (e.g. the parallel
|
|
621
|
+
* monitor overlay) that must read a database without displacing an active
|
|
622
|
+
* workflow session connection.
|
|
623
|
+
*
|
|
624
|
+
* The caller MUST call `adapter.close()` when done. Schema migrations are NOT
|
|
625
|
+
* run — the database must already exist and be fully migrated by the primary
|
|
626
|
+
* connection. Returns null if the connection cannot be opened.
|
|
627
|
+
*/
|
|
628
|
+
export function openIsolatedDatabase(path) {
|
|
629
|
+
try {
|
|
630
|
+
const rawDb = providerLoader.openRaw(path);
|
|
631
|
+
if (!rawDb)
|
|
632
|
+
return null;
|
|
633
|
+
const adapter = createDbAdapter(rawDb);
|
|
634
|
+
// Minimal pragmas for a short-lived read-only observer connection.
|
|
635
|
+
// WAL mode is already set file-wide by the primary connection; repeating
|
|
636
|
+
// it here is a no-op on an existing WAL file and safe to issue.
|
|
637
|
+
adapter.exec("PRAGMA journal_mode=WAL");
|
|
638
|
+
adapter.exec("PRAGMA busy_timeout = 5000");
|
|
639
|
+
return adapter;
|
|
640
|
+
}
|
|
641
|
+
catch {
|
|
642
|
+
return null;
|
|
643
|
+
}
|
|
644
|
+
}
|
|
618
645
|
/**
|
|
619
646
|
* Re-open the active database connection from disk.
|
|
620
647
|
*
|
|
@@ -218,6 +218,46 @@ export function getMilestoneSlices(milestoneId) {
|
|
|
218
218
|
const rows = getDbOrNull().prepare("SELECT * FROM slices WHERE milestone_id = :mid ORDER BY sequence, id").all({ ":mid": milestoneId });
|
|
219
219
|
return rows.map(rowToSlice);
|
|
220
220
|
}
|
|
221
|
+
export function getParallelMonitorSliceProgress(milestoneId) {
|
|
222
|
+
const db = getDbOrNull();
|
|
223
|
+
if (!db)
|
|
224
|
+
return [];
|
|
225
|
+
const rows = db.prepare(`SELECT
|
|
226
|
+
s.id AS id,
|
|
227
|
+
s.status AS status,
|
|
228
|
+
COUNT(t.id) AS total,
|
|
229
|
+
COALESCE(SUM(CASE WHEN t.status='complete' THEN 1 ELSE 0 END), 0) AS done
|
|
230
|
+
FROM slices s
|
|
231
|
+
LEFT JOIN tasks t ON s.milestone_id=t.milestone_id AND s.id=t.slice_id
|
|
232
|
+
WHERE s.milestone_id=:mid
|
|
233
|
+
GROUP BY s.id
|
|
234
|
+
ORDER BY s.id`).all({ ":mid": milestoneId });
|
|
235
|
+
return rows.map((row) => ({
|
|
236
|
+
id: String(row["id"] ?? ""),
|
|
237
|
+
status: String(row["status"] ?? ""),
|
|
238
|
+
total: Number(row["total"] ?? 0),
|
|
239
|
+
done: Number(row["done"] ?? 0),
|
|
240
|
+
}));
|
|
241
|
+
}
|
|
242
|
+
export function getParallelMonitorRecentCompletions(milestoneId, limit = 5) {
|
|
243
|
+
const db = getDbOrNull();
|
|
244
|
+
if (!db)
|
|
245
|
+
return [];
|
|
246
|
+
const numericLimit = Number.isFinite(limit) ? Math.floor(limit) : 5;
|
|
247
|
+
const safeLimit = Math.max(1, Math.min(50, numericLimit));
|
|
248
|
+
const rows = db.prepare(`SELECT id, slice_id, one_liner
|
|
249
|
+
FROM tasks
|
|
250
|
+
WHERE milestone_id=:mid
|
|
251
|
+
AND status='complete'
|
|
252
|
+
AND completed_at IS NOT NULL
|
|
253
|
+
ORDER BY completed_at DESC
|
|
254
|
+
LIMIT ${safeLimit}`).all({ ":mid": milestoneId });
|
|
255
|
+
return rows.map((row) => ({
|
|
256
|
+
taskId: String(row["id"] ?? ""),
|
|
257
|
+
sliceId: String(row["slice_id"] ?? ""),
|
|
258
|
+
oneLiner: String(row["one_liner"] ?? ""),
|
|
259
|
+
}));
|
|
260
|
+
}
|
|
221
261
|
/**
|
|
222
262
|
* Load slices for many milestones in a single query. Returns a Map keyed by
|
|
223
263
|
* milestone_id, preserving `ORDER BY sequence, id` within each bucket.
|
|
@@ -281,6 +321,20 @@ export function getArtifact(path) {
|
|
|
281
321
|
return null;
|
|
282
322
|
return rowToArtifact(row);
|
|
283
323
|
}
|
|
324
|
+
/** Milestone-level artifacts (CONTEXT, RESEARCH, VALIDATION, etc.) from the artifacts table. */
|
|
325
|
+
export function getMilestoneScopedArtifacts(milestoneId) {
|
|
326
|
+
if (!getDbOrNull())
|
|
327
|
+
return [];
|
|
328
|
+
const rows = getDbOrNull().prepare("SELECT * FROM artifacts WHERE milestone_id = :mid AND slice_id IS NULL AND task_id IS NULL ORDER BY path").all({ ":mid": milestoneId });
|
|
329
|
+
return rows.map(rowToArtifact);
|
|
330
|
+
}
|
|
331
|
+
/** Slice-level artifacts (CONTEXT, RESEARCH, CONTINUE, etc.) from the artifacts table. */
|
|
332
|
+
export function getSliceScopedArtifacts(milestoneId, sliceId) {
|
|
333
|
+
if (!getDbOrNull())
|
|
334
|
+
return [];
|
|
335
|
+
const rows = getDbOrNull().prepare("SELECT * FROM artifacts WHERE milestone_id = :mid AND slice_id = :sid AND task_id IS NULL ORDER BY path").all({ ":mid": milestoneId, ":sid": sliceId });
|
|
336
|
+
return rows.map(rowToArtifact);
|
|
337
|
+
}
|
|
284
338
|
/** Fast milestone status check — avoids deserializing JSON planning fields. */
|
|
285
339
|
export function getActiveMilestoneIdFromDb() {
|
|
286
340
|
if (!getDbOrNull())
|
|
@@ -387,10 +387,31 @@ export function getRecentUnitKeysForWorker(workerId, limit = 20) {
|
|
|
387
387
|
// Reverse so callers consume oldest-first (sliding-window semantics).
|
|
388
388
|
return rows.reverse().map((r) => ({ key: r.unit_id }));
|
|
389
389
|
}
|
|
390
|
-
export function getRecentUnitKeysForProjectRoot(projectRootRealpath, limit = 20) {
|
|
390
|
+
export function getRecentUnitKeysForProjectRoot(projectRootRealpath, limit = 20, traceId) {
|
|
391
391
|
if (!isDbAvailable())
|
|
392
392
|
return [];
|
|
393
393
|
const db = _getAdapter();
|
|
394
|
+
// When a trace_id is provided, scope the window to the current session so
|
|
395
|
+
// stale finalize-retry entries from PREVIOUS sessions don't fire detectStuck
|
|
396
|
+
// Rule 1 on the first iteration of a new session — killing auto-mode before
|
|
397
|
+
// any new dispatch runs. Without this, a project that had two consecutive
|
|
398
|
+
// finalize-retry failures in a prior session is permanently stuck: every
|
|
399
|
+
// fresh session loads those stale errors and immediately declares stuck.
|
|
400
|
+
if (traceId) {
|
|
401
|
+
const rows = db.prepare(`SELECT ud.unit_type, ud.unit_id
|
|
402
|
+
FROM unit_dispatches ud
|
|
403
|
+
INNER JOIN workers w ON w.worker_id = ud.worker_id
|
|
404
|
+
WHERE w.project_root_realpath = :project_root_realpath
|
|
405
|
+
AND w.status != 'crashed'
|
|
406
|
+
AND ud.trace_id = :trace_id
|
|
407
|
+
ORDER BY ud.started_at DESC, ud.id DESC
|
|
408
|
+
LIMIT :limit`).all({
|
|
409
|
+
":project_root_realpath": projectRootRealpath,
|
|
410
|
+
":trace_id": traceId,
|
|
411
|
+
":limit": limit,
|
|
412
|
+
});
|
|
413
|
+
return rows.reverse().map((r) => ({ key: `${r.unit_type}/${r.unit_id}` }));
|
|
414
|
+
}
|
|
394
415
|
const rows = db.prepare(`SELECT ud.unit_type, ud.unit_id
|
|
395
416
|
FROM unit_dispatches ud
|
|
396
417
|
INNER JOIN workers w ON w.worker_id = ud.worker_id
|
|
@@ -10,6 +10,24 @@ import { createHash } from "node:crypto";
|
|
|
10
10
|
import { logError, logWarning } from "../../workflow-logger.js";
|
|
11
11
|
import { getDbOrNull, openDatabase } from "../engine.js";
|
|
12
12
|
import { TERMINAL_STATUS_SQL } from "../sql-constants.js";
|
|
13
|
+
/**
|
|
14
|
+
* Optional override for the project-root DB open inside reconcileWorktreeDb.
|
|
15
|
+
* Production leaves this null so the real engine.openDatabase runs; tests
|
|
16
|
+
* inject a function returning false to deterministically exercise the
|
|
17
|
+
* cannot-open-main-DB branch (reconcile.ts:82), which is otherwise unreachable
|
|
18
|
+
* without a contrived provider/OS fault (openDatabase rethrows on real failures
|
|
19
|
+
* rather than returning false across providers).
|
|
20
|
+
* @internal
|
|
21
|
+
*/
|
|
22
|
+
let _mainDbOpenerFn = null;
|
|
23
|
+
export function _setMainDbOpenerFnForTests(fn) {
|
|
24
|
+
const previous = _mainDbOpenerFn;
|
|
25
|
+
_mainDbOpenerFn = fn;
|
|
26
|
+
return () => { _mainDbOpenerFn = previous; };
|
|
27
|
+
}
|
|
28
|
+
function openMainDb(mainDbPath) {
|
|
29
|
+
return _mainDbOpenerFn ? _mainDbOpenerFn(mainDbPath) : openDatabase(mainDbPath);
|
|
30
|
+
}
|
|
13
31
|
export function copyWorktreeDb(srcDbPath, destDbPath) {
|
|
14
32
|
try {
|
|
15
33
|
if (!existsSync(srcDbPath))
|
|
@@ -61,7 +79,7 @@ export function reconcileWorktreeDb(mainDbPath, worktreeDbPath) {
|
|
|
61
79
|
return zero;
|
|
62
80
|
}
|
|
63
81
|
if (!getDbOrNull()) {
|
|
64
|
-
const opened =
|
|
82
|
+
const opened = openMainDb(mainDbPath);
|
|
65
83
|
if (!opened) {
|
|
66
84
|
logError("db", "worktree DB reconciliation failed: cannot open main DB");
|
|
67
85
|
return zero;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// File Purpose: Workspace-facing Interface for opening and maintaining the workflow database.
|
|
3
3
|
import { existsSync } from "node:fs";
|
|
4
4
|
import { dirname } from "node:path";
|
|
5
|
-
import { backupDatabaseSnapshot, checkpointDatabase, closeAllDatabases, closeDatabase, closeDatabaseByWorkspace, getDbPath, getDbStatus, getDbProvider, isDbAvailable, openDatabase, openDatabaseByScope, openDatabaseByWorkspace, refreshOpenDatabaseFromDisk, vacuumDatabase, wasDbOpenAttempted, } from "./gsd-db.js";
|
|
5
|
+
import { backupDatabaseSnapshot, checkpointDatabase, closeAllDatabases, closeDatabase, closeDatabaseByWorkspace, getDbPath, getDbStatus, getDbProvider, isDbAvailable, openDatabase, openDatabaseByScope, openDatabaseByWorkspace, openIsolatedDatabase, refreshOpenDatabaseFromDisk, vacuumDatabase, wasDbOpenAttempted, } from "./gsd-db.js";
|
|
6
6
|
import { resolveGsdPathContract } from "./paths.js";
|
|
7
7
|
import { setLogBasePath } from "./workflow-logger.js";
|
|
8
8
|
export function resolveWorkflowDatabaseLocation(basePath) {
|
|
@@ -59,6 +59,18 @@ export function openExistingWorkflowDatabase(basePath) {
|
|
|
59
59
|
export function openWorkflowDatabasePath(path) {
|
|
60
60
|
return openDatabase(path);
|
|
61
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Open an isolated database connection for read-only observation without
|
|
64
|
+
* displacing the active workflow session's global DB handle. The caller is
|
|
65
|
+
* responsible for calling `adapter.close()` when done.
|
|
66
|
+
*
|
|
67
|
+
* Use this for background observers (e.g. the parallel monitor overlay) that
|
|
68
|
+
* need to query a database on a 5s tick without interfering with the primary
|
|
69
|
+
* connection. Returns null if the connection cannot be opened.
|
|
70
|
+
*/
|
|
71
|
+
export function openWorkflowDatabaseIsolated(path) {
|
|
72
|
+
return openIsolatedDatabase(path);
|
|
73
|
+
}
|
|
62
74
|
export function openWorkflowDatabaseByWorkspace(workspace) {
|
|
63
75
|
return openDatabaseByWorkspace(workspace);
|
|
64
76
|
}
|
|
@@ -6,7 +6,7 @@ import { startAutoDetached } from "./auto.js";
|
|
|
6
6
|
import { extractDepthVerificationMilestoneId, getPendingGate } from "./bootstrap/write-gate.js";
|
|
7
7
|
import { getMilestone, insertMilestone, isDbAvailable } from "./gsd-db.js";
|
|
8
8
|
import { assessMilestoneHandoffReadiness, formatAcceptedDiscussHandoffMessage, } from "./milestone-readiness.js";
|
|
9
|
-
import { gsdRoot, resolveGsdRootFile, resolveMilestoneFile } from "./paths.js";
|
|
9
|
+
import { clearPathCache, gsdRoot, resolveGsdRootFile, resolveMilestoneFile } from "./paths.js";
|
|
10
10
|
import { _getPendingAutoStart, deletePendingAutoStart } from "./pending-auto-start.js";
|
|
11
11
|
import { logWarning } from "./workflow-logger.js";
|
|
12
12
|
import { readManifest } from "./workflow-manifest.js";
|
|
@@ -186,14 +186,18 @@ function cleanupAcceptedHandoffArtifacts(entry) {
|
|
|
186
186
|
}
|
|
187
187
|
/** Called from agent_end to check if auto-mode should start after discuss. */
|
|
188
188
|
export function checkAutoStartAfterDiscuss(lookupBasePath) {
|
|
189
|
+
// Clear the path cache so layout-aware resolution sees fresh directory
|
|
190
|
+
// listings — the cache may have been primed before discuss wrote its
|
|
191
|
+
// artifacts (e.g. CONTEXT.md), causing resolveMilestoneFile to miss them.
|
|
192
|
+
clearPathCache();
|
|
189
193
|
const entry = _getPendingAutoStart(lookupBasePath);
|
|
190
194
|
if (!entry)
|
|
191
195
|
return false;
|
|
192
196
|
const { ctx, pi, basePath, milestoneId, step } = entry;
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
const contextFile =
|
|
196
|
-
const roadmapFile =
|
|
197
|
+
// Use layout-aware resolution so flat-phase projects (phases/NN-slug/)
|
|
198
|
+
// are found as well as legacy projects (milestones/MID/).
|
|
199
|
+
const contextFile = resolveMilestoneFile(basePath, milestoneId, "CONTEXT");
|
|
200
|
+
const roadmapFile = resolveMilestoneFile(basePath, milestoneId, "ROADMAP");
|
|
197
201
|
if (!contextFile && !roadmapFile)
|
|
198
202
|
return false;
|
|
199
203
|
if (hasBlockingDepthGate(entry))
|
|
@@ -6,13 +6,14 @@ import { loadFile } from "./files.js";
|
|
|
6
6
|
import { resolveMilestoneFile } from "./paths.js";
|
|
7
7
|
import { isCompletedMilestoneTerminal } from "./milestone-closeout.js";
|
|
8
8
|
import { deriveState } from "./state.js";
|
|
9
|
+
import { isClosedStatus } from "./status-guards.js";
|
|
9
10
|
import { allWorktreesDirs, createWorktree, listWorktrees, resolveGitDir } from "./worktree-manager.js";
|
|
10
11
|
import { abortAndReset } from "./git-self-heal.js";
|
|
11
12
|
import { RUNTIME_EXCLUSION_PATHS, resolveMilestoneIntegrationBranch, writeIntegrationBranch } from "./git-service.js";
|
|
12
13
|
import { nativeIsRepo, nativeWorktreeList, nativeWorktreeRemove, nativeBranchList, nativeBranchDelete, nativeLsFiles, nativeRmCached, nativeHasChanges, nativeLastCommitEpoch, nativeGetCurrentBranch, nativeAddTracked, nativeCommit } from "./native-git-bridge.js";
|
|
13
14
|
import { getAllWorktreeHealth } from "./worktree-health.js";
|
|
14
15
|
import { loadEffectiveGSDPreferences } from "./preferences.js";
|
|
15
|
-
import { listUnmergedGitPaths } from "./git-conflict-state.js";
|
|
16
|
+
import { listUnmergedGitPaths, probeGitConflictState, reconcileGitConflictsOnSignal } from "./git-conflict-state.js";
|
|
16
17
|
import { resolveWorktreeProjectRoot } from "./worktree-root.js";
|
|
17
18
|
/**
|
|
18
19
|
* Returns true if the directory contains only doctor artifacts
|
|
@@ -140,13 +141,13 @@ function getSnapshotDiffCheckFailure(basePath) {
|
|
|
140
141
|
}
|
|
141
142
|
return failures.length > 0 ? failures.join("\n") : null;
|
|
142
143
|
}
|
|
143
|
-
export async function checkGitHealth(basePath, issues, fixesApplied, shouldFix, isolationMode = "none") {
|
|
144
|
+
export async function checkGitHealth(basePath, issues, fixesApplied, shouldFix, isolationMode = "none", dryRun = false) {
|
|
144
145
|
// Degrade gracefully if not a git repo
|
|
145
146
|
if (!nativeIsRepo(basePath)) {
|
|
146
147
|
return; // Not a git repo — skip all git health checks
|
|
147
148
|
}
|
|
148
149
|
const gitDir = resolveGitDir(basePath);
|
|
149
|
-
|
|
150
|
+
let unmergedPaths = listUnmergedGitPaths(basePath);
|
|
150
151
|
if (unmergedPaths === null) {
|
|
151
152
|
issues.push({
|
|
152
153
|
severity: "error",
|
|
@@ -158,6 +159,28 @@ export async function checkGitHealth(basePath, issues, fixesApplied, shouldFix,
|
|
|
158
159
|
});
|
|
159
160
|
return;
|
|
160
161
|
}
|
|
162
|
+
// ── Auto-resolve safe conflicts before reporting ──────────────────────
|
|
163
|
+
// A failed worktree merge (e.g. during complete-slice) can leave conflict
|
|
164
|
+
// markers for paths that are always safe to accept from the milestone side
|
|
165
|
+
// (.gsd/ state and build artifacts). Run the same reconciliation the
|
|
166
|
+
// preflight/auto-worktree paths use before the doctor hard-blocks auto-mode,
|
|
167
|
+
// so only genuinely-manual conflicts remain. This also clears stale
|
|
168
|
+
// merge-state markers (e.g. MERGE_HEAD) in the same pass when auto-resolve
|
|
169
|
+
// empties the unmerged set (#849).
|
|
170
|
+
if (unmergedPaths.length > 0 && !dryRun) {
|
|
171
|
+
try {
|
|
172
|
+
const reconcileFixes = reconcileGitConflictsOnSignal(basePath, probeGitConflictState(basePath));
|
|
173
|
+
if (reconcileFixes.length > 0) {
|
|
174
|
+
fixesApplied.push(...reconcileFixes);
|
|
175
|
+
const refreshed = listUnmergedGitPaths(basePath);
|
|
176
|
+
if (refreshed !== null)
|
|
177
|
+
unmergedPaths = refreshed;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
// Non-fatal — fall through to report the unmerged paths as-is
|
|
182
|
+
}
|
|
183
|
+
}
|
|
161
184
|
// ── Orphaned auto-worktrees & Stale milestone branches ────────────────
|
|
162
185
|
// These checks only apply in worktree/branch modes — skip in none mode
|
|
163
186
|
// where no milestone worktrees or branches are created.
|
|
@@ -174,7 +197,7 @@ export async function checkGitHealth(basePath, issues, fixesApplied, shouldFix,
|
|
|
174
197
|
const milestoneId = wt.branch.replace(/^milestone\//, "");
|
|
175
198
|
const milestoneEntry = state.registry.find(m => m.id === milestoneId);
|
|
176
199
|
const isComplete = milestoneEntry
|
|
177
|
-
?
|
|
200
|
+
? isClosedStatus(milestoneEntry.status)
|
|
178
201
|
: false;
|
|
179
202
|
if (!isComplete && !hasProjectContentOnDisk(wt.path) && hasProjectContentOnDisk(basePath)) {
|
|
180
203
|
issues.push({
|
|
@@ -269,6 +292,9 @@ export async function checkGitHealth(basePath, issues, fixesApplied, shouldFix,
|
|
|
269
292
|
const roadmapContent = roadmapPath ? await loadFile(roadmapPath) : null;
|
|
270
293
|
if (!roadmapContent)
|
|
271
294
|
continue;
|
|
295
|
+
const milestoneEntry = state.registry.find(m => m.id === milestoneId);
|
|
296
|
+
if (!milestoneEntry || !isClosedStatus(milestoneEntry.status))
|
|
297
|
+
continue;
|
|
272
298
|
branchMilestoneComplete = await isCompletedMilestoneTerminal(basePath, milestoneId);
|
|
273
299
|
if (branchMilestoneComplete) {
|
|
274
300
|
issues.push({
|
|
@@ -35,7 +35,7 @@ const CLI_AUTH_PROVIDERS = new Set([
|
|
|
35
35
|
const PROVIDER_ROUTES = {
|
|
36
36
|
anthropic: ["github-copilot", "claude-code"],
|
|
37
37
|
openai: ["github-copilot", "openai-codex"],
|
|
38
|
-
google: ["google-gemini-cli"],
|
|
38
|
+
google: ["google-antigravity", "google-gemini-cli"],
|
|
39
39
|
};
|
|
40
40
|
// ── Model → Provider ID mapping ───────────────────────────────────────────────
|
|
41
41
|
/**
|
|
@@ -10,25 +10,12 @@ import { getActiveAutoWorkers } from "./db/auto-workers.js";
|
|
|
10
10
|
import { normalizeRealPath } from "./paths.js";
|
|
11
11
|
import { ensureGitignore, isGsdGitignored } from "./gitignore.js";
|
|
12
12
|
import { readAllSessionStatuses, isSessionStale, removeSessionStatus } from "./session-status-io.js";
|
|
13
|
-
import { recoverFailedMigration } from "./migrate-external.js";
|
|
13
|
+
import { isCurrentGsdStateIntactForMigratingCleanup, recoverFailedMigration } from "./migrate-external.js";
|
|
14
14
|
import { splitCompletedKey } from "./forensics.js";
|
|
15
15
|
import { findMilestoneIds } from "./milestone-ids.js";
|
|
16
16
|
import { getAllMilestones, isDbAvailable } from "./gsd-db.js";
|
|
17
17
|
import { loadEffectiveGSDPreferences } from "./preferences.js";
|
|
18
18
|
const MAX_UAT_ATTEMPTS = 3;
|
|
19
|
-
function isCurrentGsdStateIntactForMigratingCleanup(basePath) {
|
|
20
|
-
try {
|
|
21
|
-
const stateFile = resolveGsdRootFile(basePath, "STATE");
|
|
22
|
-
const milestonesPath = milestonesDir(basePath);
|
|
23
|
-
const dbPath = join(gsdRoot(basePath), "gsd.db");
|
|
24
|
-
const hasDbFile = existsSync(dbPath);
|
|
25
|
-
const hasNonEmptyDb = hasDbFile && statSync(dbPath).size > 0;
|
|
26
|
-
return existsSync(stateFile) && existsSync(milestonesPath) && hasNonEmptyDb;
|
|
27
|
-
}
|
|
28
|
-
catch {
|
|
29
|
-
return false;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
19
|
function hasAssessmentVerdict(basePath, mid, sid) {
|
|
33
20
|
const assessmentPath = join(gsdRoot(basePath), "milestones", mid, "slices", sid, `${sid}-ASSESSMENT.md`);
|
|
34
21
|
if (!existsSync(assessmentPath))
|
|
@@ -53,19 +40,21 @@ export async function checkRuntimeHealth(basePath, issues, fixesApplied, shouldF
|
|
|
53
40
|
if (lock) {
|
|
54
41
|
const alive = isLockProcessAlive(lock);
|
|
55
42
|
if (!alive) {
|
|
56
|
-
issues.push({
|
|
57
|
-
severity: "error",
|
|
58
|
-
code: "stale_crash_lock",
|
|
59
|
-
scope: "project",
|
|
60
|
-
unitId: "project",
|
|
61
|
-
message: `Stale auto-mode worker (PID ${lock.pid}, started ${lock.startedAt}, was executing ${lock.unitType} ${lock.unitId}) — process is no longer running`,
|
|
62
|
-
file: "<workers table>",
|
|
63
|
-
fixable: true,
|
|
64
|
-
});
|
|
65
43
|
if (shouldFix("stale_crash_lock")) {
|
|
66
44
|
clearStaleWorkerLock(basePath);
|
|
67
45
|
fixesApplied.push("cleared stale auto-mode worker state");
|
|
68
46
|
}
|
|
47
|
+
else {
|
|
48
|
+
issues.push({
|
|
49
|
+
severity: "error",
|
|
50
|
+
code: "stale_crash_lock",
|
|
51
|
+
scope: "project",
|
|
52
|
+
unitId: "project",
|
|
53
|
+
message: `Stale auto-mode worker (PID ${lock.pid}, started ${lock.startedAt}, was executing ${lock.unitType} ${lock.unitId}) — process is no longer running`,
|
|
54
|
+
file: "<workers table>",
|
|
55
|
+
fixable: true,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
69
58
|
}
|
|
70
59
|
}
|
|
71
60
|
}
|
|
@@ -440,7 +429,7 @@ export async function checkRuntimeHealth(basePath, issues, fixesApplied, shouldF
|
|
|
440
429
|
});
|
|
441
430
|
if (shouldFix("failed_migration")) {
|
|
442
431
|
if (recoverFailedMigration(basePath)) {
|
|
443
|
-
fixesApplied.push("recovered failed
|
|
432
|
+
fixesApplied.push("recovered failed external state migration");
|
|
444
433
|
}
|
|
445
434
|
else if (isCurrentGsdStateIntactForMigratingCleanup(basePath)) {
|
|
446
435
|
try {
|
|
@@ -4,7 +4,8 @@ import { loadFile, parseSummary, saveFile, parseTaskPlanMustHaves, countMustHave
|
|
|
4
4
|
import { parseRoadmap as parseLegacyRoadmap, parsePlan as parseLegacyPlan } from "./parsers-legacy.js";
|
|
5
5
|
import { isDbAvailable, getMilestoneSlices, getSliceTasks } from "./gsd-db.js";
|
|
6
6
|
import { openExistingWorkflowDatabase } from "./db-workspace.js";
|
|
7
|
-
import { resolveMilestoneFile, resolveMilestonePath, resolveSliceFile, resolveSlicePath, resolveTaskFile, resolveTasksDir, milestonesDir, gsdRoot, relMilestoneFile, relSliceFile, relTaskFile, relSlicePath, relGsdRootFile, resolveGsdRootFile, relMilestonePath } from "./paths.js";
|
|
7
|
+
import { resolveMilestoneFile, resolveMilestonePath, resolveSliceFile, resolveSlicePath, resolveTaskFile, resolveTasksDir, milestonesDir, legacyMilestonesDir, gsdRoot, relMilestoneFile, relSliceFile, relTaskFile, relSlicePath, relGsdRootFile, resolveGsdRootFile, relMilestonePath } from "./paths.js";
|
|
8
|
+
import { findMilestoneIds } from "./milestone-ids.js";
|
|
8
9
|
import { deriveState, isMilestoneComplete } from "./state.js";
|
|
9
10
|
import { invalidateAllCaches } from "./cache.js";
|
|
10
11
|
import { loadEffectiveGSDPreferences } from "./preferences.js";
|
|
@@ -171,7 +172,8 @@ export async function selectDoctorScope(basePath, requestedScope) {
|
|
|
171
172
|
return state.activeMilestone.id;
|
|
172
173
|
}
|
|
173
174
|
const milestonesPath = milestonesDir(basePath);
|
|
174
|
-
|
|
175
|
+
const legacyMilestonesPath = legacyMilestonesDir(basePath);
|
|
176
|
+
if (!existsSync(milestonesPath) && !existsSync(legacyMilestonesPath))
|
|
175
177
|
return undefined;
|
|
176
178
|
for (const milestone of state.registry) {
|
|
177
179
|
const roadmapPath = resolveMilestoneFile(basePath, milestone.id, "ROADMAP");
|
|
@@ -333,7 +335,7 @@ export async function runGSDDoctor(basePath, options) {
|
|
|
333
335
|
const isolationMode = options?.isolationMode ??
|
|
334
336
|
(prefs?.preferences?.git?.isolation === "worktree" ? "worktree" :
|
|
335
337
|
prefs?.preferences?.git?.isolation === "branch" ? "branch" : "none");
|
|
336
|
-
await checkGitHealth(basePath, issues, fixesApplied, shouldFix, isolationMode);
|
|
338
|
+
await checkGitHealth(basePath, issues, fixesApplied, shouldFix, isolationMode, dryRun);
|
|
337
339
|
const gitMs = Date.now() - t0git;
|
|
338
340
|
// Runtime health checks — timed
|
|
339
341
|
const t0runtime = Date.now();
|
|
@@ -352,7 +354,8 @@ export async function runGSDDoctor(basePath, options) {
|
|
|
352
354
|
// Engine health checks — DB constraints and projection drift
|
|
353
355
|
await checkEngineHealth(basePath, issues, fixesApplied);
|
|
354
356
|
const milestonesPath = milestonesDir(basePath);
|
|
355
|
-
|
|
357
|
+
const legacyMilestonesPath2 = legacyMilestonesDir(basePath);
|
|
358
|
+
if (!existsSync(milestonesPath) && !existsSync(legacyMilestonesPath2)) {
|
|
356
359
|
const report = { ok: issues.every(i => i.severity !== "error"), basePath, issues, fixesApplied, timing: { git: gitMs, runtime: runtimeMs, environment: envMs, gsdState: 0 } };
|
|
357
360
|
await appendDoctorHistory(basePath, report);
|
|
358
361
|
return report;
|
|
@@ -396,7 +399,13 @@ export async function runGSDDoctor(basePath, options) {
|
|
|
396
399
|
// Non-fatal — provider check failure should not block other checks
|
|
397
400
|
}
|
|
398
401
|
}
|
|
399
|
-
|
|
402
|
+
// When DB is unavailable, state.registry is empty. Fall back to a direct
|
|
403
|
+
// filesystem scan so the doctor can still report issues (e.g. missing ROADMAP)
|
|
404
|
+
// for milestone dirs that exist on disk.
|
|
405
|
+
const milestoneEntries = state.registry.length > 0
|
|
406
|
+
? state.registry
|
|
407
|
+
: findMilestoneIds(basePath).map(id => ({ id, title: id }));
|
|
408
|
+
for (const milestone of milestoneEntries) {
|
|
400
409
|
const milestoneId = milestone.id;
|
|
401
410
|
const milestonePath = resolveMilestonePath(basePath, milestoneId);
|
|
402
411
|
if (!milestonePath)
|
|
@@ -433,8 +442,17 @@ export async function runGSDDoctor(basePath, options) {
|
|
|
433
442
|
}
|
|
434
443
|
const roadmapPath = resolveMilestoneFile(basePath, milestoneId, "ROADMAP");
|
|
435
444
|
const roadmapContent = roadmapPath ? await loadFile(roadmapPath) : null;
|
|
436
|
-
if (!roadmapContent)
|
|
445
|
+
if (!roadmapContent) {
|
|
446
|
+
issues.push({
|
|
447
|
+
severity: "error",
|
|
448
|
+
code: "missing_roadmap",
|
|
449
|
+
scope: "milestone",
|
|
450
|
+
unitId: milestoneId,
|
|
451
|
+
message: `Milestone ${milestoneId} is missing its ROADMAP.md file.`,
|
|
452
|
+
fixable: false,
|
|
453
|
+
});
|
|
437
454
|
continue;
|
|
455
|
+
}
|
|
438
456
|
let slices;
|
|
439
457
|
if (isDbAvailable()) {
|
|
440
458
|
const dbSlices = getMilestoneSlices(milestoneId);
|
|
@@ -574,6 +592,9 @@ export async function runGSDDoctor(basePath, options) {
|
|
|
574
592
|
// Skipped slices may legitimately never create tasks/.
|
|
575
593
|
if (slice.pending || slice.skipped)
|
|
576
594
|
continue;
|
|
595
|
+
// Flat-phase: tasks are embedded in plan files; no tasks/ subdir expected.
|
|
596
|
+
if (!existsSync(legacyMilestonesDir(basePath)))
|
|
597
|
+
continue;
|
|
577
598
|
issues.push({
|
|
578
599
|
severity: slice.done ? "warning" : "error",
|
|
579
600
|
code: "missing_tasks_dir",
|
|
@@ -739,7 +760,7 @@ export async function runGSDDoctor(basePath, options) {
|
|
|
739
760
|
code: "all_slices_done_missing_milestone_validation",
|
|
740
761
|
scope: "milestone",
|
|
741
762
|
unitId: milestoneId,
|
|
742
|
-
message: `All slices are done but
|
|
763
|
+
message: `All slices are done but the milestone VALIDATION.md is missing \u2014 milestone is in validating-milestone phase`,
|
|
743
764
|
file: relMilestoneFile(basePath, milestoneId, "VALIDATION"),
|
|
744
765
|
fixable: false,
|
|
745
766
|
});
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*
|
|
10
10
|
* @see https://github.com/open-gsd/gsd-pi/issues/2577
|
|
11
11
|
*/
|
|
12
|
-
import { TOOL_SURFACE_NOT_READY } from "./tool-surface-readiness.js";
|
|
12
|
+
import { TOOL_SURFACE_NOT_READY, isTerminalToolSurfaceError } from "./tool-surface-readiness.js";
|
|
13
13
|
export function createRetryState() {
|
|
14
14
|
return { networkRetryCount: 0, consecutiveTransientCount: 0, currentRetryModelId: undefined };
|
|
15
15
|
}
|
|
@@ -82,7 +82,19 @@ export function classifyError(errorMsg, retryAfterMs) {
|
|
|
82
82
|
if (TOOL_SCHEMA_RE.test(errorMsg)) {
|
|
83
83
|
return { kind: "tool-schema", retryAfterMs: 0 };
|
|
84
84
|
}
|
|
85
|
+
// Terminal tool-surface failure: the workflow MCP server is in a
|
|
86
|
+
// non-self-healing status (failed / needs-auth / disabled). This is NOT
|
|
87
|
+
// transient — retrying the same model cannot repair a dead server, so it
|
|
88
|
+
// must escalate / pause rather than retrying every ~3s into the per-unit
|
|
89
|
+
// cost cap. Checked ahead of the transient readiness branch below, which
|
|
90
|
+
// shares the TOOL_SURFACE_NOT_READY prefix and would otherwise collapse the
|
|
91
|
+
// terminal case into a transient `network` retry. See #783.
|
|
92
|
+
if (isTerminalToolSurfaceError(errorMsg)) {
|
|
93
|
+
return { kind: "permanent" };
|
|
94
|
+
}
|
|
85
95
|
// Tool-surface readiness abort — transient; retry the same model shortly.
|
|
96
|
+
// This covers the not-yet-connected variants (absent, pending, connected but
|
|
97
|
+
// not registered); terminal statuses were handled by the branch above.
|
|
86
98
|
if (TOOL_SURFACE_NOT_READY_RE.test(errorMsg)) {
|
|
87
99
|
return { kind: "network", retryAfterMs: retryAfterMs ?? 3_000 };
|
|
88
100
|
}
|