gsd-pi 2.65.0 → 2.66.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/mcp-server.js +6 -2
- package/dist/resources/extensions/browser-tools/capture.js +20 -1
- package/dist/resources/extensions/browser-tools/tests/capture-sharp-optional.test.cjs +93 -0
- package/dist/resources/extensions/gsd/auto/finalize-timeout.js +2 -0
- package/dist/resources/extensions/gsd/auto/loop.js +2 -2
- package/dist/resources/extensions/gsd/auto/phases.js +48 -5
- package/dist/resources/extensions/gsd/auto/run-unit.js +13 -2
- package/dist/resources/extensions/gsd/auto/session.js +4 -0
- package/dist/resources/extensions/gsd/auto/types.js +2 -0
- package/dist/resources/extensions/gsd/auto-dashboard.js +2 -1
- package/dist/resources/extensions/gsd/auto-dispatch.js +99 -9
- package/dist/resources/extensions/gsd/auto-model-selection.js +7 -5
- package/dist/resources/extensions/gsd/auto-post-unit.js +17 -6
- package/dist/resources/extensions/gsd/auto-prompts.js +24 -0
- package/dist/resources/extensions/gsd/auto-recovery.js +40 -22
- package/dist/resources/extensions/gsd/auto-start.js +175 -12
- package/dist/resources/extensions/gsd/auto-tool-tracking.js +10 -0
- package/dist/resources/extensions/gsd/auto-worktree.js +29 -7
- package/dist/resources/extensions/gsd/auto.js +21 -15
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +17 -4
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +10 -0
- package/dist/resources/extensions/gsd/bootstrap/query-tools.js +6 -4
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +5 -1
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +11 -3
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +3 -1
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +31 -1
- package/dist/resources/extensions/gsd/commands/context.js +8 -1
- package/dist/resources/extensions/gsd/commands/handlers/core.js +23 -2
- package/dist/resources/extensions/gsd/commands-extensions.js +1 -1
- package/dist/resources/extensions/gsd/config-overlay.js +312 -0
- package/dist/resources/extensions/gsd/db-writer.js +13 -3
- package/dist/resources/extensions/gsd/detection.js +1 -1
- package/dist/resources/extensions/gsd/dispatch-guard.js +2 -1
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +1 -0
- package/dist/resources/extensions/gsd/doctor.js +2 -1
- package/dist/resources/extensions/gsd/files.js +17 -0
- package/dist/resources/extensions/gsd/gitignore.js +1 -0
- package/dist/resources/extensions/gsd/gsd-db.js +47 -4
- package/dist/resources/extensions/gsd/guided-flow.js +220 -29
- package/dist/resources/extensions/gsd/index.js +1 -1
- package/dist/resources/extensions/gsd/json-persistence.js +5 -2
- package/dist/resources/extensions/gsd/md-importer.js +14 -7
- package/dist/resources/extensions/gsd/notification-overlay.js +1 -1
- package/dist/resources/extensions/gsd/notification-widget.js +2 -1
- package/dist/resources/extensions/gsd/parallel-monitor-overlay.js +1 -1
- package/dist/resources/extensions/gsd/parallel-orchestrator.js +17 -11
- package/dist/resources/extensions/gsd/pre-execution-checks.js +26 -5
- package/dist/resources/extensions/gsd/preferences-types.js +3 -0
- package/dist/resources/extensions/gsd/preferences-validation.js +45 -1
- package/dist/resources/extensions/gsd/preferences.js +9 -2
- package/dist/resources/extensions/gsd/preparation.js +1092 -0
- package/dist/resources/extensions/gsd/prompt-validation.js +67 -0
- package/dist/resources/extensions/gsd/prompts/complete-milestone.md +3 -3
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/discuss-prepared.md +424 -0
- package/dist/resources/extensions/gsd/prompts/discuss.md +2 -0
- package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +6 -1
- package/dist/resources/extensions/gsd/prompts/guided-discuss-slice.md +5 -4
- package/dist/resources/extensions/gsd/prompts/parallel-research-slices.md +23 -0
- package/dist/resources/extensions/gsd/prompts/queue.md +2 -0
- package/dist/resources/extensions/gsd/prompts/rethink.md +2 -1
- package/dist/resources/extensions/gsd/prompts/system.md +2 -2
- package/dist/resources/extensions/gsd/prompts/validate-milestone.md +56 -23
- package/dist/resources/extensions/gsd/quick.js +19 -15
- package/dist/resources/extensions/gsd/reactive-graph.js +12 -0
- package/dist/resources/extensions/gsd/roadmap-slices.js +24 -5
- package/dist/resources/extensions/gsd/safety/content-validator.js +3 -3
- package/dist/resources/extensions/gsd/session-lock.js +23 -1
- package/dist/resources/extensions/gsd/state.js +115 -28
- package/dist/resources/extensions/gsd/templates/context-enhanced.md +138 -0
- package/dist/resources/extensions/gsd/tools/complete-milestone.js +15 -3
- package/dist/resources/extensions/gsd/tools/complete-slice.js +27 -6
- package/dist/resources/extensions/gsd/tools/complete-task.js +31 -7
- package/dist/resources/extensions/gsd/tools/plan-milestone.js +7 -5
- package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +5 -2
- package/dist/resources/extensions/gsd/tools/reopen-milestone.js +119 -0
- package/dist/resources/extensions/gsd/tools/reopen-slice.js +30 -0
- package/dist/resources/extensions/gsd/tools/reopen-task.js +18 -0
- package/dist/resources/extensions/gsd/triage-resolution.js +33 -16
- package/dist/resources/extensions/gsd/undo.js +3 -2
- package/dist/resources/extensions/gsd/workflow-events.js +1 -0
- package/dist/resources/extensions/gsd/workflow-logger.js +1 -1
- package/dist/resources/extensions/gsd/workflow-projections.js +7 -9
- package/dist/resources/extensions/gsd/workflow-reconcile.js +100 -9
- package/dist/resources/extensions/gsd/workflow-templates.js +11 -2
- package/dist/resources/extensions/gsd/worktree-manager.js +5 -2
- package/dist/resources/extensions/gsd/worktree.js +9 -0
- package/dist/resources/extensions/shared/interview-ui.js +1 -1
- package/dist/resources/extensions/subagent/agents.js +19 -5
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +14 -14
- 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 +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.html +2 -2
- 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 +14 -14
- 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 +2 -2
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/web/standalone/.next/static/chunks/6502.8874bcae249c02e1.js +9 -0
- package/dist/web/standalone/.next/static/chunks/{webpack-a1c1e452c6b32d04.js → webpack-9fed74684e1c5bb1.js} +1 -1
- package/package.json +1 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.js +30 -19
- package/packages/pi-coding-agent/dist/core/retry-handler.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.test.js +51 -0
- package/packages/pi-coding-agent/dist/core/retry-handler.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.js +9 -9
- package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.d.ts +2 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.js +10 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +20 -5
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js +15 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +18 -0
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +4 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/pi-coding-agent/package.json +1 -1
- package/packages/pi-coding-agent/src/core/retry-handler.test.ts +80 -0
- package/packages/pi-coding-agent/src/core/retry-handler.ts +37 -25
- package/packages/pi-coding-agent/src/core/sdk.ts +9 -9
- package/packages/pi-coding-agent/src/modes/interactive/components/provider-manager.ts +10 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +20 -4
- package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +27 -0
- package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.ts +16 -1
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +5 -0
- package/packages/pi-tui/dist/components/image.d.ts +2 -0
- package/packages/pi-tui/dist/components/image.d.ts.map +1 -1
- package/packages/pi-tui/dist/components/image.js +4 -0
- package/packages/pi-tui/dist/components/image.js.map +1 -1
- package/packages/pi-tui/dist/components/image.test.d.ts +6 -0
- package/packages/pi-tui/dist/components/image.test.d.ts.map +1 -0
- package/packages/pi-tui/dist/components/image.test.js +32 -0
- package/packages/pi-tui/dist/components/image.test.js.map +1 -0
- package/packages/pi-tui/dist/tui.d.ts.map +1 -1
- package/packages/pi-tui/dist/tui.js +3 -1
- package/packages/pi-tui/dist/tui.js.map +1 -1
- package/packages/pi-tui/src/components/image.test.ts +36 -0
- package/packages/pi-tui/src/components/image.ts +5 -0
- package/packages/pi-tui/src/tui.ts +3 -1
- package/pkg/package.json +1 -1
- package/src/resources/extensions/browser-tools/capture.ts +19 -1
- package/src/resources/extensions/browser-tools/tests/capture-sharp-optional.test.cjs +93 -0
- package/src/resources/extensions/gsd/auto/finalize-timeout.ts +3 -0
- package/src/resources/extensions/gsd/auto/loop.ts +2 -2
- package/src/resources/extensions/gsd/auto/phases.ts +68 -3
- package/src/resources/extensions/gsd/auto/run-unit.ts +12 -2
- package/src/resources/extensions/gsd/auto/session.ts +4 -0
- package/src/resources/extensions/gsd/auto/types.ts +5 -0
- package/src/resources/extensions/gsd/auto-dashboard.ts +2 -1
- package/src/resources/extensions/gsd/auto-dispatch.ts +110 -9
- package/src/resources/extensions/gsd/auto-model-selection.ts +7 -5
- package/src/resources/extensions/gsd/auto-post-unit.ts +16 -6
- package/src/resources/extensions/gsd/auto-prompts.ts +31 -0
- package/src/resources/extensions/gsd/auto-recovery.ts +29 -23
- package/src/resources/extensions/gsd/auto-start.ts +188 -10
- package/src/resources/extensions/gsd/auto-tool-tracking.ts +10 -0
- package/src/resources/extensions/gsd/auto-worktree.ts +28 -7
- package/src/resources/extensions/gsd/auto.ts +19 -8
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +16 -4
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +10 -0
- package/src/resources/extensions/gsd/bootstrap/query-tools.ts +5 -4
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +4 -1
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +11 -3
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +3 -1
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +36 -1
- package/src/resources/extensions/gsd/commands/context.ts +7 -1
- package/src/resources/extensions/gsd/commands/handlers/core.ts +26 -2
- package/src/resources/extensions/gsd/commands-extensions.ts +1 -1
- package/src/resources/extensions/gsd/config-overlay.ts +331 -0
- package/src/resources/extensions/gsd/db-writer.ts +11 -3
- package/src/resources/extensions/gsd/detection.ts +1 -1
- package/src/resources/extensions/gsd/dispatch-guard.ts +2 -1
- package/src/resources/extensions/gsd/docs/preferences-reference.md +1 -0
- package/src/resources/extensions/gsd/doctor.ts +2 -1
- package/src/resources/extensions/gsd/files.ts +19 -0
- package/src/resources/extensions/gsd/gitignore.ts +1 -0
- package/src/resources/extensions/gsd/gsd-db.ts +46 -4
- package/src/resources/extensions/gsd/guided-flow.ts +254 -30
- package/src/resources/extensions/gsd/index.ts +1 -0
- package/src/resources/extensions/gsd/json-persistence.ts +6 -3
- package/src/resources/extensions/gsd/md-importer.ts +13 -6
- package/src/resources/extensions/gsd/notification-overlay.ts +1 -1
- package/src/resources/extensions/gsd/notification-widget.ts +2 -1
- package/src/resources/extensions/gsd/parallel-monitor-overlay.ts +1 -1
- package/src/resources/extensions/gsd/parallel-orchestrator.ts +19 -11
- package/src/resources/extensions/gsd/pre-execution-checks.ts +32 -7
- package/src/resources/extensions/gsd/preferences-types.ts +25 -0
- package/src/resources/extensions/gsd/preferences-validation.ts +45 -1
- package/src/resources/extensions/gsd/preferences.ts +9 -2
- package/src/resources/extensions/gsd/preparation.ts +1419 -0
- package/src/resources/extensions/gsd/prompt-validation.ts +88 -0
- package/src/resources/extensions/gsd/prompts/complete-milestone.md +3 -3
- package/src/resources/extensions/gsd/prompts/complete-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/discuss-prepared.md +424 -0
- package/src/resources/extensions/gsd/prompts/discuss.md +2 -0
- package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +6 -1
- package/src/resources/extensions/gsd/prompts/guided-discuss-slice.md +5 -4
- package/src/resources/extensions/gsd/prompts/parallel-research-slices.md +23 -0
- package/src/resources/extensions/gsd/prompts/queue.md +2 -0
- package/src/resources/extensions/gsd/prompts/rethink.md +2 -1
- package/src/resources/extensions/gsd/prompts/system.md +2 -2
- package/src/resources/extensions/gsd/prompts/validate-milestone.md +56 -23
- package/src/resources/extensions/gsd/quick.ts +20 -15
- package/src/resources/extensions/gsd/reactive-graph.ts +18 -0
- package/src/resources/extensions/gsd/roadmap-slices.ts +21 -5
- package/src/resources/extensions/gsd/safety/content-validator.ts +3 -3
- package/src/resources/extensions/gsd/session-lock.ts +17 -1
- package/src/resources/extensions/gsd/state.ts +115 -26
- package/src/resources/extensions/gsd/templates/context-enhanced.md +138 -0
- package/src/resources/extensions/gsd/tests/adversarial-review-fixes.test.ts +223 -0
- package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +33 -2
- package/src/resources/extensions/gsd/tests/auto-remediate-slice-status.test.ts +56 -0
- package/src/resources/extensions/gsd/tests/clear-stale-autostart.test.ts +41 -0
- package/src/resources/extensions/gsd/tests/complete-slice-verification-gate.test.ts +72 -0
- package/src/resources/extensions/gsd/tests/complete-task-normalize-lists.test.ts +54 -0
- package/src/resources/extensions/gsd/tests/defer-milestone-stamp.test.ts +30 -0
- package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +4 -3
- package/src/resources/extensions/gsd/tests/discuss-incremental-persistence.test.ts +36 -0
- package/src/resources/extensions/gsd/tests/discuss-slice-structured-questions.test.ts +46 -0
- package/src/resources/extensions/gsd/tests/dispatch-guard-closed-status.test.ts +33 -0
- package/src/resources/extensions/gsd/tests/dispatcher-stuck-planning.test.ts +37 -0
- package/src/resources/extensions/gsd/tests/error-success-mask.test.ts +37 -0
- package/src/resources/extensions/gsd/tests/finalize-timeout-guard.test.ts +125 -0
- package/src/resources/extensions/gsd/tests/find-missing-summaries-closed.test.ts +48 -0
- package/src/resources/extensions/gsd/tests/format-shortcut.test.ts +69 -0
- package/src/resources/extensions/gsd/tests/frontmatter-parse-noise.test.ts +42 -0
- package/src/resources/extensions/gsd/tests/gitignore-bg-shell.test.ts +38 -0
- package/src/resources/extensions/gsd/tests/guided-flow-state-rebuild.test.ts +103 -0
- package/src/resources/extensions/gsd/tests/import-done-milestones.test.ts +42 -0
- package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +11 -9
- package/src/resources/extensions/gsd/tests/integration/state-machine-edge-cases.test.ts +4 -2
- package/src/resources/extensions/gsd/tests/integration/state-machine-live-validation.test.ts +28 -30
- package/src/resources/extensions/gsd/tests/integration/test-isolation.ts +53 -0
- package/src/resources/extensions/gsd/tests/integration-prepared-discussion.test.ts +525 -0
- package/src/resources/extensions/gsd/tests/isolation-none-branch-guard.test.ts +62 -0
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +11 -10
- package/src/resources/extensions/gsd/tests/needs-remediation-revalidation.test.ts +48 -0
- package/src/resources/extensions/gsd/tests/note-captures-executed.test.ts +46 -0
- package/src/resources/extensions/gsd/tests/orphaned-worktree-audit.test.ts +189 -0
- package/src/resources/extensions/gsd/tests/parallel-research-dispatch.test.ts +77 -0
- package/src/resources/extensions/gsd/tests/phantom-ghost-detection.test.ts +55 -0
- package/src/resources/extensions/gsd/tests/phantom-milestone-default-queued.test.ts +39 -0
- package/src/resources/extensions/gsd/tests/pre-exec-backtick-strip.test.ts +68 -0
- package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +284 -20
- package/src/resources/extensions/gsd/tests/pre-execution-fail-closed.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/pre-execution-pause-wiring.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/preparation.test.ts +1211 -0
- package/src/resources/extensions/gsd/tests/project-root-cwd-crash.test.ts +53 -0
- package/src/resources/extensions/gsd/tests/projection-no-plan-overwrite.test.ts +83 -0
- package/src/resources/extensions/gsd/tests/prompt-builder.test.ts +669 -0
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +7 -4
- package/src/resources/extensions/gsd/tests/prompt-step-ordering.test.ts +85 -0
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/query-tools-db-open.test.ts +47 -0
- package/src/resources/extensions/gsd/tests/queued-discuss-fast-path.test.ts +107 -0
- package/src/resources/extensions/gsd/tests/reactive-graph.test.ts +45 -0
- package/src/resources/extensions/gsd/tests/restore-tools-after-discuss.test.ts +63 -0
- package/src/resources/extensions/gsd/tests/rogue-file-detection.test.ts +4 -5
- package/src/resources/extensions/gsd/tests/run-uat-replay-cap.test.ts +51 -0
- package/src/resources/extensions/gsd/tests/show-config-command.test.ts +56 -0
- package/src/resources/extensions/gsd/tests/skip-slice-state-rebuild.test.ts +31 -0
- package/src/resources/extensions/gsd/tests/skipped-validation-completion.test.ts +39 -0
- package/src/resources/extensions/gsd/tests/slice-sequence-insert.test.ts +51 -0
- package/src/resources/extensions/gsd/tests/smart-entry-complete.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/stale-lockfile-recovery.test.ts +36 -0
- package/src/resources/extensions/gsd/tests/stale-queued-milestone.test.ts +147 -0
- package/src/resources/extensions/gsd/tests/stale-worktree-cwd.test.ts +13 -0
- package/src/resources/extensions/gsd/tests/stash-pop-gsd-conflict.test.ts +21 -0
- package/src/resources/extensions/gsd/tests/stash-queued-context-files.test.ts +21 -0
- package/src/resources/extensions/gsd/tests/state-machine-full-walkthrough.test.ts +6 -7
- package/src/resources/extensions/gsd/tests/status-db-open.test.ts +47 -0
- package/src/resources/extensions/gsd/tests/stuck-detection-coverage.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/subagent-agent-discovery.test.ts +47 -0
- package/src/resources/extensions/gsd/tests/symlink-extension-discovery.test.ts +125 -0
- package/src/resources/extensions/gsd/tests/sync-worktree-skip-current.test.ts +65 -0
- package/src/resources/extensions/gsd/tests/tool-invocation-error-loop-break.test.ts +29 -1
- package/src/resources/extensions/gsd/tests/triage-resolution.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/validate-milestone.test.ts +3 -4
- package/src/resources/extensions/gsd/tests/verification-operational-gate.test.ts +15 -0
- package/src/resources/extensions/gsd/tests/verify-artifact-tightened.test.ts +89 -0
- package/src/resources/extensions/gsd/tests/wave1-critical-regressions.test.ts +49 -0
- package/src/resources/extensions/gsd/tests/wave2-events-regressions.test.ts +48 -0
- package/src/resources/extensions/gsd/tests/wave3-session-regressions.test.ts +47 -0
- package/src/resources/extensions/gsd/tests/wave4-write-safety-regressions.test.ts +70 -0
- package/src/resources/extensions/gsd/tests/wave5-consistency-regressions.test.ts +165 -0
- package/src/resources/extensions/gsd/tests/worker-model-override.test.ts +48 -0
- package/src/resources/extensions/gsd/tests/workflow-logger-audit.test.ts +6 -3
- package/src/resources/extensions/gsd/tests/worktree-expected-warnings.test.ts +38 -0
- package/src/resources/extensions/gsd/tests/worktree-integration.test.ts +16 -0
- package/src/resources/extensions/gsd/tests/worktree-main-branch.test.ts +20 -0
- package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +16 -17
- package/src/resources/extensions/gsd/tests/worktree-sync-tasks.test.ts +13 -9
- package/src/resources/extensions/gsd/tests/worktree.test.ts +26 -9
- package/src/resources/extensions/gsd/tests/write-gate.test.ts +127 -2
- package/src/resources/extensions/gsd/tests/zero-slice-roadmap-guided.test.ts +19 -0
- package/src/resources/extensions/gsd/tools/complete-milestone.ts +13 -3
- package/src/resources/extensions/gsd/tools/complete-slice.ts +26 -6
- package/src/resources/extensions/gsd/tools/complete-task.ts +29 -7
- package/src/resources/extensions/gsd/tools/plan-milestone.ts +11 -9
- package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +5 -2
- package/src/resources/extensions/gsd/tools/reopen-milestone.ts +152 -0
- package/src/resources/extensions/gsd/tools/reopen-slice.ts +27 -0
- package/src/resources/extensions/gsd/tools/reopen-task.ts +17 -0
- package/src/resources/extensions/gsd/triage-resolution.ts +37 -17
- package/src/resources/extensions/gsd/types.ts +4 -0
- package/src/resources/extensions/gsd/undo.ts +3 -2
- package/src/resources/extensions/gsd/workflow-events.ts +5 -3
- package/src/resources/extensions/gsd/workflow-logger.ts +1 -1
- package/src/resources/extensions/gsd/workflow-projections.ts +7 -8
- package/src/resources/extensions/gsd/workflow-reconcile.ts +109 -8
- package/src/resources/extensions/gsd/workflow-templates.ts +11 -2
- package/src/resources/extensions/gsd/worktree-manager.ts +4 -2
- package/src/resources/extensions/gsd/worktree.ts +10 -0
- package/src/resources/extensions/shared/interview-ui.ts +1 -1
- package/src/resources/extensions/shared/tests/interview-notes-loop.test.ts +8 -10
- package/src/resources/extensions/subagent/agents.ts +30 -6
- package/dist/web/standalone/.next/static/chunks/6502.7593d7797a4b3999.js +0 -9
- /package/dist/web/standalone/.next/static/{MRM3OSYIAa4HMDqVGQ9nt → Bdk1mnQugYZh7ZxuXUYvc}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{MRM3OSYIAa4HMDqVGQ9nt → Bdk1mnQugYZh7ZxuXUYvc}/_ssgManifest.js +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// GSD Extension — Notification History Overlay
|
|
2
2
|
// Scrollable panel showing all persisted notifications with severity filtering.
|
|
3
|
-
// Toggled with Ctrl+Alt+N or opened from /gsd notifications.
|
|
3
|
+
// Toggled with Ctrl+Alt+N (⌃⌥N on macOS) or opened from /gsd notifications.
|
|
4
4
|
import { truncateToWidth, visibleWidth, matchesKey, Key } from "@gsd/pi-tui";
|
|
5
5
|
import { readNotifications, markAllRead, clearNotifications, } from "./notification-store.js";
|
|
6
6
|
import { padRight, joinColumns } from "../shared/mod.js";
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
// the most recent notification message. Refreshes every 5 seconds.
|
|
4
4
|
// Widget key: "gsd-notifications", placement: "belowEditor"
|
|
5
5
|
import { getUnreadCount, readNotifications } from "./notification-store.js";
|
|
6
|
+
import { formatShortcut } from "./files.js";
|
|
6
7
|
// ─── Pure rendering ──���────────────────────────���─────────────────────────
|
|
7
8
|
export function buildNotificationWidgetLines() {
|
|
8
9
|
const unread = getUnreadCount();
|
|
@@ -18,7 +19,7 @@ export function buildNotificationWidgetLines() {
|
|
|
18
19
|
const truncated = latest.message.length > msgMax
|
|
19
20
|
? latest.message.slice(0, msgMax - 1) + "…"
|
|
20
21
|
: latest.message;
|
|
21
|
-
return [` ${icon} [${badge}] ${truncated} (Ctrl+Alt+N to view)`];
|
|
22
|
+
return [` ${icon} [${badge}] ${truncated} (${formatShortcut("Ctrl+Alt+N")} to view)`];
|
|
22
23
|
}
|
|
23
24
|
// ─── Widget init ────────────────────────────────────────────────────────
|
|
24
25
|
const REFRESH_INTERVAL_MS = 5_000;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* GSD Parallel Monitor Overlay
|
|
3
3
|
*
|
|
4
4
|
* Full-screen TUI overlay showing real-time parallel worker progress.
|
|
5
|
-
* Opened via `/gsd parallel watch` or Ctrl+Alt+P.
|
|
5
|
+
* Opened via `/gsd parallel watch` or Ctrl+Alt+P (⌃⌥P on macOS).
|
|
6
6
|
* Reads the same data sources as `scripts/parallel-monitor.mjs` but
|
|
7
7
|
* renders as a native pi-tui overlay with theme integration.
|
|
8
8
|
*/
|
|
@@ -440,19 +440,25 @@ export function spawnWorker(basePath, milestoneId) {
|
|
|
440
440
|
return false;
|
|
441
441
|
let child;
|
|
442
442
|
try {
|
|
443
|
+
const workerEnv = {
|
|
444
|
+
...process.env,
|
|
445
|
+
GSD_MILESTONE_LOCK: milestoneId,
|
|
446
|
+
// Pass the real project root so workers don't need to re-derive it.
|
|
447
|
+
// Without this, process.cwd() resolves symlinks and the worktree
|
|
448
|
+
// path heuristic can match the user-level ~/.gsd instead of the
|
|
449
|
+
// project .gsd, causing writes to ~ and corrupting user config.
|
|
450
|
+
GSD_PROJECT_ROOT: basePath,
|
|
451
|
+
// Prevent workers from spawning their own parallel sessions
|
|
452
|
+
GSD_PARALLEL_WORKER: "1",
|
|
453
|
+
};
|
|
454
|
+
// Apply worker model override if configured, so workers use a cheaper
|
|
455
|
+
// model (e.g. Haiku) rather than inheriting the coordinator's model.
|
|
456
|
+
if (state.config.worker_model) {
|
|
457
|
+
workerEnv.GSD_WORKER_MODEL = state.config.worker_model;
|
|
458
|
+
}
|
|
443
459
|
child = spawn(process.execPath, [binPath, "headless", "--json", "auto"], {
|
|
444
460
|
cwd: worker.worktreePath,
|
|
445
|
-
env:
|
|
446
|
-
...process.env,
|
|
447
|
-
GSD_MILESTONE_LOCK: milestoneId,
|
|
448
|
-
// Pass the real project root so workers don't need to re-derive it.
|
|
449
|
-
// Without this, process.cwd() resolves symlinks and the worktree
|
|
450
|
-
// path heuristic can match the user-level ~/.gsd instead of the
|
|
451
|
-
// project .gsd, causing writes to ~ and corrupting user config.
|
|
452
|
-
GSD_PROJECT_ROOT: basePath,
|
|
453
|
-
// Prevent workers from spawning their own parallel sessions
|
|
454
|
-
GSD_PARALLEL_WORKER: "1",
|
|
455
|
-
},
|
|
461
|
+
env: workerEnv,
|
|
456
462
|
stdio: ["ignore", "pipe", "pipe"],
|
|
457
463
|
detached: false,
|
|
458
464
|
});
|
|
@@ -197,8 +197,9 @@ export async function checkPackageExistence(tasks, _basePath) {
|
|
|
197
197
|
export function normalizeFilePath(filePath) {
|
|
198
198
|
if (!filePath)
|
|
199
199
|
return filePath;
|
|
200
|
+
let normalized = extractPathFromAnnotation(filePath);
|
|
200
201
|
// Normalize path separators to forward slashes
|
|
201
|
-
|
|
202
|
+
normalized = normalized.replace(/\\/g, "/");
|
|
202
203
|
// Remove leading ./
|
|
203
204
|
while (normalized.startsWith("./")) {
|
|
204
205
|
normalized = normalized.slice(2);
|
|
@@ -211,6 +212,21 @@ export function normalizeFilePath(filePath) {
|
|
|
211
212
|
}
|
|
212
213
|
return normalized;
|
|
213
214
|
}
|
|
215
|
+
function extractPathFromAnnotation(raw) {
|
|
216
|
+
const trimmed = raw.trim();
|
|
217
|
+
if (!trimmed)
|
|
218
|
+
return trimmed;
|
|
219
|
+
const backtickMatch = trimmed.match(/^`([^`]+)`(?:\s+[—–-]\s+.*)?$/);
|
|
220
|
+
if (backtickMatch) {
|
|
221
|
+
return backtickMatch[1].trim();
|
|
222
|
+
}
|
|
223
|
+
const annotatedMatch = trimmed.match(/^(.+?)\s+[—–-]\s+.+$/);
|
|
224
|
+
if (annotatedMatch) {
|
|
225
|
+
return annotatedMatch[1].trim();
|
|
226
|
+
}
|
|
227
|
+
// Fall back to the original behavior for already-plain paths.
|
|
228
|
+
return trimmed.replace(/`/g, "");
|
|
229
|
+
}
|
|
214
230
|
/**
|
|
215
231
|
* Build a set of files that will be created by tasks up to (but not including) taskIndex.
|
|
216
232
|
* All paths are normalized for consistent comparison.
|
|
@@ -225,10 +241,13 @@ function getExpectedOutputsUpTo(tasks, taskIndex) {
|
|
|
225
241
|
return outputs;
|
|
226
242
|
}
|
|
227
243
|
/**
|
|
228
|
-
* Check that all files referenced in task.
|
|
244
|
+
* Check that all files referenced in task.inputs either:
|
|
229
245
|
* 1. Exist on disk, OR
|
|
230
246
|
* 2. Are in a prior task's expected_output
|
|
231
247
|
*
|
|
248
|
+
* task.files ("files likely touched") is excluded — it intentionally includes
|
|
249
|
+
* files the task will create, so they don't need to pre-exist (#3626).
|
|
250
|
+
*
|
|
232
251
|
* All paths are normalized before comparison to ensure ./src/a.ts matches src/a.ts.
|
|
233
252
|
*/
|
|
234
253
|
export function checkFilePathConsistency(tasks, basePath) {
|
|
@@ -236,7 +255,7 @@ export function checkFilePathConsistency(tasks, basePath) {
|
|
|
236
255
|
for (let i = 0; i < tasks.length; i++) {
|
|
237
256
|
const task = tasks[i];
|
|
238
257
|
const priorOutputs = getExpectedOutputsUpTo(tasks, i);
|
|
239
|
-
const filesToCheck = [...task.
|
|
258
|
+
const filesToCheck = [...task.inputs];
|
|
240
259
|
for (const file of filesToCheck) {
|
|
241
260
|
// Skip empty strings
|
|
242
261
|
if (!file.trim())
|
|
@@ -281,10 +300,12 @@ export function checkTaskOrdering(tasks, _basePath) {
|
|
|
281
300
|
}
|
|
282
301
|
}
|
|
283
302
|
}
|
|
284
|
-
// Check each task's inputs against file creators
|
|
303
|
+
// Check each task's inputs against file creators.
|
|
304
|
+
// Only check task.inputs — task.files ("files likely touched") intentionally
|
|
305
|
+
// includes files the task will create, so they don't indicate read-before-create (#3677).
|
|
285
306
|
for (let i = 0; i < tasks.length; i++) {
|
|
286
307
|
const task = tasks[i];
|
|
287
|
-
const filesToCheck = [...task.
|
|
308
|
+
const filesToCheck = [...task.inputs];
|
|
288
309
|
for (const file of filesToCheck) {
|
|
289
310
|
const normalizedFile = normalizeFilePath(file);
|
|
290
311
|
const creator = fileCreators.get(normalizedFile);
|
|
@@ -80,6 +80,9 @@ export const KNOWN_PREFERENCE_KEYS = new Set([
|
|
|
80
80
|
"enhanced_verification_pre",
|
|
81
81
|
"enhanced_verification_post",
|
|
82
82
|
"enhanced_verification_strict",
|
|
83
|
+
"discuss_preparation",
|
|
84
|
+
"discuss_web_research",
|
|
85
|
+
"discuss_depth",
|
|
83
86
|
]);
|
|
84
87
|
/** Canonical list of all dispatch unit types. */
|
|
85
88
|
export const KNOWN_UNIT_TYPES = [
|
|
@@ -542,6 +542,14 @@ export function validatePreferences(preferences) {
|
|
|
542
542
|
errors.push("parallel.auto_merge must be one of: auto, confirm, manual");
|
|
543
543
|
}
|
|
544
544
|
}
|
|
545
|
+
if (p.worker_model !== undefined) {
|
|
546
|
+
if (typeof p.worker_model === "string" && p.worker_model.length > 0) {
|
|
547
|
+
parallel.worker_model = p.worker_model;
|
|
548
|
+
}
|
|
549
|
+
else {
|
|
550
|
+
errors.push("parallel.worker_model must be a non-empty string");
|
|
551
|
+
}
|
|
552
|
+
}
|
|
545
553
|
if (Object.keys(parallel).length > 0) {
|
|
546
554
|
validated.parallel = parallel;
|
|
547
555
|
}
|
|
@@ -574,7 +582,15 @@ export function validatePreferences(preferences) {
|
|
|
574
582
|
errors.push('reactive_execution.isolation_mode must be "same-tree"');
|
|
575
583
|
}
|
|
576
584
|
}
|
|
577
|
-
|
|
585
|
+
if (re.subagent_model !== undefined) {
|
|
586
|
+
if (typeof re.subagent_model === "string" && re.subagent_model.length > 0) {
|
|
587
|
+
validRe.subagent_model = re.subagent_model;
|
|
588
|
+
}
|
|
589
|
+
else {
|
|
590
|
+
errors.push("reactive_execution.subagent_model must be a non-empty string");
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
const knownReKeys = new Set(["enabled", "max_parallel", "isolation_mode", "subagent_model"]);
|
|
578
594
|
for (const key of Object.keys(re)) {
|
|
579
595
|
if (!knownReKeys.has(key)) {
|
|
580
596
|
warnings.push(`unknown reactive_execution key "${key}" — ignored`);
|
|
@@ -972,5 +988,33 @@ export function validatePreferences(preferences) {
|
|
|
972
988
|
errors.push("enhanced_verification_strict must be a boolean");
|
|
973
989
|
}
|
|
974
990
|
}
|
|
991
|
+
// ─── Discuss Preparation ────────────────────────────────────────────
|
|
992
|
+
if (preferences.discuss_preparation !== undefined) {
|
|
993
|
+
if (typeof preferences.discuss_preparation === "boolean") {
|
|
994
|
+
validated.discuss_preparation = preferences.discuss_preparation;
|
|
995
|
+
}
|
|
996
|
+
else {
|
|
997
|
+
errors.push("discuss_preparation must be a boolean");
|
|
998
|
+
}
|
|
999
|
+
}
|
|
1000
|
+
// ─── Discuss Web Research ───────────────────────────────────────────
|
|
1001
|
+
if (preferences.discuss_web_research !== undefined) {
|
|
1002
|
+
if (typeof preferences.discuss_web_research === "boolean") {
|
|
1003
|
+
validated.discuss_web_research = preferences.discuss_web_research;
|
|
1004
|
+
}
|
|
1005
|
+
else {
|
|
1006
|
+
errors.push("discuss_web_research must be a boolean");
|
|
1007
|
+
}
|
|
1008
|
+
}
|
|
1009
|
+
// ─── Discuss Depth ──────────────────────────────────────────────────
|
|
1010
|
+
if (preferences.discuss_depth !== undefined) {
|
|
1011
|
+
const validDepths = new Set(["quick", "standard", "thorough"]);
|
|
1012
|
+
if (typeof preferences.discuss_depth === "string" && validDepths.has(preferences.discuss_depth)) {
|
|
1013
|
+
validated.discuss_depth = preferences.discuss_depth;
|
|
1014
|
+
}
|
|
1015
|
+
else {
|
|
1016
|
+
errors.push(`discuss_depth must be one of: quick, standard, thorough`);
|
|
1017
|
+
}
|
|
1018
|
+
}
|
|
975
1019
|
return { preferences: validated, errors, warnings };
|
|
976
1020
|
}
|
|
@@ -127,9 +127,10 @@ function loadPreferencesFile(path, scope) {
|
|
|
127
127
|
};
|
|
128
128
|
}
|
|
129
129
|
let _warnedUnrecognizedFormat = false;
|
|
130
|
-
/** @internal Reset the warn-once
|
|
130
|
+
/** @internal Reset the warn-once flags — exported for testing only. */
|
|
131
131
|
export function _resetParseWarningFlag() {
|
|
132
132
|
_warnedUnrecognizedFormat = false;
|
|
133
|
+
_warnedFrontmatterParse = false;
|
|
133
134
|
}
|
|
134
135
|
/** @internal Exported for testing only */
|
|
135
136
|
export function parsePreferencesMarkdown(content) {
|
|
@@ -156,6 +157,7 @@ export function parsePreferencesMarkdown(content) {
|
|
|
156
157
|
}
|
|
157
158
|
return null;
|
|
158
159
|
}
|
|
160
|
+
let _warnedFrontmatterParse = false;
|
|
159
161
|
function parseFrontmatterBlock(frontmatter) {
|
|
160
162
|
try {
|
|
161
163
|
const parsed = parseYaml(frontmatter);
|
|
@@ -165,7 +167,11 @@ function parseFrontmatterBlock(frontmatter) {
|
|
|
165
167
|
return parsed;
|
|
166
168
|
}
|
|
167
169
|
catch (e) {
|
|
168
|
-
|
|
170
|
+
// Warn at most once per session to avoid flooding TUI (#3376)
|
|
171
|
+
if (!_warnedFrontmatterParse) {
|
|
172
|
+
_warnedFrontmatterParse = true;
|
|
173
|
+
logWarning("guided", `YAML parse error in preferences frontmatter (suppressing further): ${e.message}`);
|
|
174
|
+
}
|
|
169
175
|
return {};
|
|
170
176
|
}
|
|
171
177
|
}
|
|
@@ -449,5 +455,6 @@ export function resolveParallelConfig(prefs) {
|
|
|
449
455
|
budget_ceiling: prefs?.parallel?.budget_ceiling,
|
|
450
456
|
merge_strategy: prefs?.parallel?.merge_strategy ?? "per-milestone",
|
|
451
457
|
auto_merge: prefs?.parallel?.auto_merge ?? "confirm",
|
|
458
|
+
worker_model: prefs?.parallel?.worker_model,
|
|
452
459
|
};
|
|
453
460
|
}
|