gsd-pi 2.58.0-dev.778d6ac → 2.58.0-dev.d63175c
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 +1 -1
- package/dist/cli.js +35 -49
- package/dist/headless-ui.d.ts +0 -17
- package/dist/headless-ui.js +3 -97
- package/dist/headless.js +6 -67
- package/dist/help-text.js +0 -1
- package/dist/onboarding.js +0 -44
- package/dist/resource-loader.js +1 -16
- package/dist/resources/agents/researcher.md +1 -1
- package/dist/resources/extensions/ask-user-questions.js +3 -16
- package/dist/resources/extensions/async-jobs/extension-manifest.json +1 -1
- package/dist/resources/extensions/bg-shell/extension-manifest.json +1 -1
- package/dist/resources/extensions/browser-tools/extension-manifest.json +1 -1
- package/dist/resources/extensions/claude-code-cli/partial-builder.js +6 -14
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +36 -59
- package/dist/resources/extensions/context7/extension-manifest.json +1 -1
- package/dist/resources/extensions/get-secrets-from-user.js +5 -8
- package/dist/resources/extensions/google-search/extension-manifest.json +1 -1
- package/dist/resources/extensions/google-search/index.js +1 -2
- package/dist/resources/extensions/gsd/auto/phases.js +21 -25
- package/dist/resources/extensions/gsd/auto-artifact-paths.js +2 -2
- package/dist/resources/extensions/gsd/auto-dashboard.js +20 -37
- package/dist/resources/extensions/gsd/auto-dispatch.js +2 -17
- package/dist/resources/extensions/gsd/auto-model-selection.js +3 -26
- package/dist/resources/extensions/gsd/auto-post-unit.js +4 -16
- package/dist/resources/extensions/gsd/auto-prompts.js +1 -1
- package/dist/resources/extensions/gsd/auto-recovery.js +5 -13
- package/dist/resources/extensions/gsd/auto-start.js +22 -35
- package/dist/resources/extensions/gsd/auto-worktree.js +12 -196
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +0 -32
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +8 -80
- package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +1 -32
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +18 -33
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +11 -44
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +0 -67
- package/dist/resources/extensions/gsd/captures.js +4 -56
- package/dist/resources/extensions/gsd/db-writer.js +8 -116
- package/dist/resources/extensions/gsd/doctor-git-checks.js +0 -28
- package/dist/resources/extensions/gsd/doctor-providers.js +1 -2
- package/dist/resources/extensions/gsd/doctor-runtime-checks.js +4 -5
- package/dist/resources/extensions/gsd/doctor.js +1 -3
- package/dist/resources/extensions/gsd/error-classifier.js +10 -13
- package/dist/resources/extensions/gsd/extension-manifest.json +1 -16
- package/dist/resources/extensions/gsd/forensics.js +20 -123
- package/dist/resources/extensions/gsd/git-service.js +1 -23
- package/dist/resources/extensions/gsd/gitignore.js +0 -33
- package/dist/resources/extensions/gsd/gsd-db.js +9 -36
- package/dist/resources/extensions/gsd/guided-flow.js +44 -106
- package/dist/resources/extensions/gsd/health-widget-core.js +0 -31
- package/dist/resources/extensions/gsd/health-widget.js +0 -17
- package/dist/resources/extensions/gsd/index.js +1 -1
- package/dist/resources/extensions/gsd/memory-extractor.js +0 -7
- package/dist/resources/extensions/gsd/migrate-external.js +1 -8
- package/dist/resources/extensions/gsd/model-cost-table.js +0 -18
- package/dist/resources/extensions/gsd/model-router.js +1 -35
- package/dist/resources/extensions/gsd/native-git-bridge.js +0 -17
- package/dist/resources/extensions/gsd/notifications.js +1 -16
- package/dist/resources/extensions/gsd/parallel-eligibility.js +2 -13
- package/dist/resources/extensions/gsd/parallel-merge.js +5 -78
- package/dist/resources/extensions/gsd/parsers-legacy.js +3 -20
- package/dist/resources/extensions/gsd/paths.js +0 -43
- package/dist/resources/extensions/gsd/preferences-models.js +1 -14
- package/dist/resources/extensions/gsd/preferences-types.js +1 -2
- package/dist/resources/extensions/gsd/preferences.js +16 -13
- package/dist/resources/extensions/gsd/prompt-loader.js +1 -4
- package/dist/resources/extensions/gsd/prompts/complete-milestone.md +1 -1
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +2 -4
- package/dist/resources/extensions/gsd/prompts/discuss-headless.md +1 -1
- package/dist/resources/extensions/gsd/prompts/discuss.md +1 -1
- package/dist/resources/extensions/gsd/prompts/execute-task.md +1 -3
- package/dist/resources/extensions/gsd/prompts/forensics.md +2 -2
- package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +1 -1
- package/dist/resources/extensions/gsd/prompts/guided-discuss-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +0 -2
- package/dist/resources/extensions/gsd/prompts/rethink.md +1 -1
- package/dist/resources/extensions/gsd/prompts/triage-captures.md +0 -1
- package/dist/resources/extensions/gsd/repo-identity.js +11 -205
- package/dist/resources/extensions/gsd/rethink.js +0 -5
- package/dist/resources/extensions/gsd/roadmap-slices.js +4 -5
- package/dist/resources/extensions/gsd/state.js +27 -85
- package/dist/resources/extensions/gsd/tests/dist-redirect.mjs +1 -20
- package/dist/resources/extensions/gsd/tools/complete-task.js +71 -34
- package/dist/resources/extensions/gsd/tools/plan-milestone.js +2 -12
- package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +1 -29
- package/dist/resources/extensions/gsd/tools/validate-milestone.js +3 -14
- package/dist/resources/extensions/gsd/triage-resolution.js +7 -22
- package/dist/resources/extensions/gsd/undo.js +2 -2
- package/dist/resources/extensions/gsd/unit-ownership.js +33 -164
- package/dist/resources/extensions/gsd/verdict-parser.js +8 -20
- package/dist/resources/extensions/gsd/workflow-manifest.js +5 -24
- package/dist/resources/extensions/gsd/workflow-projections.js +63 -95
- package/dist/resources/extensions/gsd/workflow-reconcile.js +5 -35
- package/dist/resources/extensions/gsd/workspace-index.js +0 -24
- package/dist/resources/extensions/gsd/worktree-manager.js +1 -105
- package/dist/resources/extensions/gsd/worktree-resolver.js +3 -20
- package/dist/resources/extensions/mcp-client/index.js +7 -11
- package/dist/resources/extensions/search-the-web/extension-manifest.json +1 -1
- package/dist/resources/extensions/shared/interview-ui.js +1 -11
- package/dist/resources/skills/create-gsd-extension/SKILL.md +3 -5
- package/dist/resources/skills/create-gsd-extension/references/key-rules-gotchas.md +4 -5
- package/dist/resources/skills/create-gsd-extension/workflows/add-capability.md +2 -2
- package/dist/resources/skills/create-gsd-extension/workflows/create-extension.md +4 -4
- package/dist/resources/skills/create-gsd-extension/workflows/debug-extension.md +3 -5
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +17 -17
- 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/required-server-files.json +1 -1
- package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.html +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/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +2 -2
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- 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 +2 -2
- 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 +2 -2
- package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +17 -17
- package/dist/web/standalone/.next/server/chunks/2229.js +2 -2
- 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.8b732f67a11b11b4.js +9 -0
- package/dist/web/standalone/.next/static/chunks/{webpack-a1c1e452c6b32d04.js → webpack-61d3afac6d0f0ce7.js} +1 -1
- package/dist/web/standalone/.next/static/css/a58ef8a151aa0493.css +1 -0
- package/dist/web/standalone/server.js +1 -1
- package/dist/web-mode.js +1 -2
- package/package.json +2 -2
- package/packages/native/dist/ast/index.js +5 -9
- package/packages/native/dist/ast/types.js +1 -2
- package/packages/native/dist/clipboard/index.js +7 -12
- package/packages/native/dist/clipboard/types.js +1 -2
- package/packages/native/dist/diff/index.js +7 -12
- package/packages/native/dist/diff/types.js +1 -2
- package/packages/native/dist/fd/index.js +3 -6
- package/packages/native/dist/fd/types.js +1 -2
- package/packages/native/dist/glob/index.js +5 -9
- package/packages/native/dist/glob/types.js +1 -2
- package/packages/native/dist/grep/index.js +5 -9
- package/packages/native/dist/grep/types.js +1 -2
- package/packages/native/dist/gsd-parser/index.js +11 -18
- package/packages/native/dist/gsd-parser/types.js +1 -2
- package/packages/native/dist/highlight/index.js +7 -12
- package/packages/native/dist/highlight/types.js +1 -2
- package/packages/native/dist/html/index.js +3 -6
- package/packages/native/dist/html/types.js +1 -2
- package/packages/native/dist/image/index.js +5 -10
- package/packages/native/dist/image/types.js +4 -7
- package/packages/native/dist/index.js +17 -70
- package/packages/native/dist/json-parse/index.js +8 -13
- package/packages/native/dist/native.js +10 -47
- package/packages/native/dist/ps/index.js +9 -15
- package/packages/native/dist/ps/types.js +1 -2
- package/packages/native/dist/stream-process/index.js +7 -12
- package/packages/native/dist/text/index.js +14 -24
- package/packages/native/dist/text/types.js +2 -5
- package/packages/native/dist/truncate/index.js +7 -12
- package/packages/native/dist/ttsr/index.js +7 -12
- package/packages/native/dist/ttsr/types.js +1 -2
- package/packages/native/dist/xxhash/index.js +5 -9
- package/packages/native/package.json +19 -19
- package/packages/native/src/native.ts +8 -9
- package/packages/pi-agent-core/dist/agent-loop.js +2 -3
- package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/packages/pi-agent-core/dist/proxy.d.ts +1 -1
- package/packages/pi-agent-core/dist/proxy.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/proxy.js.map +1 -1
- package/packages/pi-agent-core/src/agent-loop.ts +2 -3
- package/packages/pi-agent-core/src/proxy.ts +1 -1
- package/packages/pi-ai/dist/env-api-keys.js +0 -1
- package/packages/pi-ai/dist/env-api-keys.js.map +1 -1
- package/packages/pi-ai/dist/index.d.ts +0 -1
- package/packages/pi-ai/dist/index.d.ts.map +1 -1
- package/packages/pi-ai/dist/index.js +0 -1
- package/packages/pi-ai/dist/index.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.js +2 -19
- package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
- package/packages/pi-ai/dist/types.d.ts +3 -3
- package/packages/pi-ai/dist/types.d.ts.map +1 -1
- package/packages/pi-ai/dist/types.js.map +1 -1
- package/packages/pi-ai/dist/utils/json-parse.d.ts +0 -3
- package/packages/pi-ai/dist/utils/json-parse.d.ts.map +1 -1
- package/packages/pi-ai/dist/utils/json-parse.js +1 -24
- package/packages/pi-ai/dist/utils/json-parse.js.map +1 -1
- package/packages/pi-ai/src/env-api-keys.ts +0 -1
- package/packages/pi-ai/src/index.ts +0 -1
- package/packages/pi-ai/src/providers/anthropic-shared.ts +2 -17
- package/packages/pi-ai/src/types.ts +2 -3
- package/packages/pi-ai/src/utils/json-parse.ts +1 -28
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts +0 -4
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js +0 -31
- package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts +1 -17
- package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.js +2 -62
- package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/exec.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/exec.js +1 -3
- package/packages/pi-coding-agent/dist/core/exec.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +0 -4
- package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.js +0 -2
- package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts +0 -5
- package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.js +0 -5
- package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/index.d.ts +1 -1
- package/packages/pi-coding-agent/dist/core/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/index.js +1 -1
- package/packages/pi-coding-agent/dist/core/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/index.js +0 -3
- package/packages/pi-coding-agent/dist/core/lsp/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/lspmux.js +0 -3
- package/packages/pi-coding-agent/dist/core/lsp/lspmux.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/messages.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/messages.js +2 -31
- package/packages/pi-coding-agent/dist/core/messages.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-resolver.js +0 -1
- package/packages/pi-coding-agent/dist/core/model-resolver.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/resource-loader.d.ts +0 -10
- package/packages/pi-coding-agent/dist/core/resource-loader.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/resource-loader.js +1 -12
- package/packages/pi-coding-agent/dist/core/resource-loader.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.d.ts +0 -6
- package/packages/pi-coding-agent/dist/core/retry-handler.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.js +1 -48
- package/packages/pi-coding-agent/dist/core/retry-handler.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/hashline-read.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/hashline-read.js +3 -10
- package/packages/pi-coding-agent/dist/core/tools/hashline-read.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/read.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/read.js +4 -13
- package/packages/pi-coding-agent/dist/core/tools/read.js.map +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts +2 -2
- package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/index.js +1 -1
- package/packages/pi-coding-agent/dist/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +0 -4
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.d.ts +0 -1
- package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.js +0 -5
- package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.js.map +1 -1
- package/packages/pi-coding-agent/src/core/agent-session.ts +1 -38
- package/packages/pi-coding-agent/src/core/compaction/compaction.ts +1 -94
- package/packages/pi-coding-agent/src/core/exec.ts +1 -3
- package/packages/pi-coding-agent/src/core/extensions/index.ts +0 -4
- package/packages/pi-coding-agent/src/core/extensions/loader.ts +0 -5
- package/packages/pi-coding-agent/src/core/index.ts +0 -6
- package/packages/pi-coding-agent/src/core/lsp/index.ts +0 -3
- package/packages/pi-coding-agent/src/core/lsp/lspmux.ts +0 -3
- package/packages/pi-coding-agent/src/core/messages.ts +2 -29
- package/packages/pi-coding-agent/src/core/model-resolver.ts +0 -1
- package/packages/pi-coding-agent/src/core/resource-loader.ts +1 -20
- package/packages/pi-coding-agent/src/core/retry-handler.ts +1 -52
- package/packages/pi-coding-agent/src/core/tools/hashline-read.ts +3 -11
- package/packages/pi-coding-agent/src/core/tools/read.ts +4 -14
- package/packages/pi-coding-agent/src/index.ts +0 -6
- package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +0 -7
- package/packages/pi-coding-agent/src/modes/rpc/remote-terminal.ts +0 -6
- package/packages/pi-tui/dist/terminal.d.ts +0 -2
- package/packages/pi-tui/dist/terminal.d.ts.map +1 -1
- package/packages/pi-tui/dist/terminal.js +0 -9
- package/packages/pi-tui/dist/terminal.js.map +1 -1
- package/packages/pi-tui/dist/tui.d.ts.map +1 -1
- package/packages/pi-tui/dist/tui.js +0 -9
- package/packages/pi-tui/dist/tui.js.map +1 -1
- package/packages/pi-tui/src/terminal.ts +0 -14
- package/packages/pi-tui/src/tui.ts +0 -8
- package/scripts/ensure-workspace-builds.cjs +14 -45
- package/src/resources/agents/researcher.md +1 -1
- package/src/resources/extensions/ask-user-questions.ts +3 -21
- package/src/resources/extensions/async-jobs/extension-manifest.json +1 -1
- package/src/resources/extensions/bg-shell/extension-manifest.json +1 -1
- package/src/resources/extensions/browser-tools/extension-manifest.json +1 -1
- package/src/resources/extensions/claude-code-cli/partial-builder.ts +6 -13
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +35 -63
- package/src/resources/extensions/claude-code-cli/tests/partial-builder.test.ts +0 -28
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +1 -108
- package/src/resources/extensions/context7/extension-manifest.json +1 -1
- package/src/resources/extensions/get-secrets-from-user.ts +5 -8
- package/src/resources/extensions/google-search/extension-manifest.json +1 -1
- package/src/resources/extensions/google-search/index.ts +1 -2
- package/src/resources/extensions/gsd/auto/loop-deps.ts +0 -1
- package/src/resources/extensions/gsd/auto/phases.ts +34 -43
- package/src/resources/extensions/gsd/auto-artifact-paths.ts +2 -2
- package/src/resources/extensions/gsd/auto-dashboard.ts +19 -37
- package/src/resources/extensions/gsd/auto-dispatch.ts +2 -18
- package/src/resources/extensions/gsd/auto-model-selection.ts +5 -26
- package/src/resources/extensions/gsd/auto-post-unit.ts +4 -18
- package/src/resources/extensions/gsd/auto-prompts.ts +1 -1
- package/src/resources/extensions/gsd/auto-recovery.ts +5 -12
- package/src/resources/extensions/gsd/auto-start.ts +26 -35
- package/src/resources/extensions/gsd/auto-worktree.ts +9 -190
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +0 -31
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +8 -85
- package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +1 -38
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +19 -31
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +11 -50
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +0 -75
- package/src/resources/extensions/gsd/captures.ts +3 -63
- package/src/resources/extensions/gsd/db-writer.ts +7 -140
- package/src/resources/extensions/gsd/doctor-git-checks.ts +0 -26
- package/src/resources/extensions/gsd/doctor-providers.ts +1 -2
- package/src/resources/extensions/gsd/doctor-runtime-checks.ts +4 -5
- package/src/resources/extensions/gsd/doctor.ts +1 -3
- package/src/resources/extensions/gsd/error-classifier.ts +11 -14
- package/src/resources/extensions/gsd/extension-manifest.json +1 -16
- package/src/resources/extensions/gsd/forensics.ts +20 -144
- package/src/resources/extensions/gsd/git-service.ts +3 -26
- package/src/resources/extensions/gsd/gitignore.ts +0 -33
- package/src/resources/extensions/gsd/gsd-db.ts +7 -43
- package/src/resources/extensions/gsd/guided-flow.ts +45 -114
- package/src/resources/extensions/gsd/health-widget-core.ts +0 -34
- package/src/resources/extensions/gsd/health-widget.ts +0 -17
- package/src/resources/extensions/gsd/index.ts +0 -1
- package/src/resources/extensions/gsd/memory-extractor.ts +0 -8
- package/src/resources/extensions/gsd/migrate-external.ts +1 -9
- package/src/resources/extensions/gsd/model-cost-table.ts +0 -19
- package/src/resources/extensions/gsd/model-router.ts +1 -35
- package/src/resources/extensions/gsd/native-git-bridge.ts +0 -17
- package/src/resources/extensions/gsd/notifications.ts +0 -16
- package/src/resources/extensions/gsd/parallel-eligibility.ts +2 -15
- package/src/resources/extensions/gsd/parallel-merge.ts +4 -87
- package/src/resources/extensions/gsd/parsers-legacy.ts +3 -22
- package/src/resources/extensions/gsd/paths.ts +0 -42
- package/src/resources/extensions/gsd/preferences-models.ts +1 -14
- package/src/resources/extensions/gsd/preferences-types.ts +1 -2
- package/src/resources/extensions/gsd/preferences.ts +15 -13
- package/src/resources/extensions/gsd/prompt-loader.ts +1 -4
- package/src/resources/extensions/gsd/prompts/complete-milestone.md +1 -1
- package/src/resources/extensions/gsd/prompts/complete-slice.md +2 -4
- package/src/resources/extensions/gsd/prompts/discuss-headless.md +1 -1
- package/src/resources/extensions/gsd/prompts/discuss.md +1 -1
- package/src/resources/extensions/gsd/prompts/execute-task.md +1 -3
- package/src/resources/extensions/gsd/prompts/forensics.md +2 -2
- package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +1 -1
- package/src/resources/extensions/gsd/prompts/guided-discuss-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/plan-slice.md +0 -2
- package/src/resources/extensions/gsd/prompts/rethink.md +1 -1
- package/src/resources/extensions/gsd/prompts/triage-captures.md +0 -1
- package/src/resources/extensions/gsd/repo-identity.ts +11 -186
- package/src/resources/extensions/gsd/rethink.ts +0 -6
- package/src/resources/extensions/gsd/roadmap-slices.ts +4 -5
- package/src/resources/extensions/gsd/state.ts +32 -84
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +0 -29
- package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +1 -71
- package/src/resources/extensions/gsd/tests/captures.test.ts +0 -103
- package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +0 -27
- package/src/resources/extensions/gsd/tests/complete-slice.test.ts +0 -21
- package/src/resources/extensions/gsd/tests/db-writer.test.ts +12 -7
- package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +5 -78
- package/src/resources/extensions/gsd/tests/derive-state.test.ts +0 -29
- package/src/resources/extensions/gsd/tests/discuss-queued-milestones.test.ts +0 -40
- package/src/resources/extensions/gsd/tests/dist-redirect.mjs +1 -20
- package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +0 -117
- package/src/resources/extensions/gsd/tests/empty-db-reconciliation.test.ts +79 -0
- package/src/resources/extensions/gsd/tests/forensics-dedup.test.ts +0 -31
- package/src/resources/extensions/gsd/tests/gsd-tools.test.ts +12 -125
- package/src/resources/extensions/gsd/tests/health-widget.test.ts +0 -67
- package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +1 -111
- package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +0 -101
- package/src/resources/extensions/gsd/tests/integration/auto-worktree.test.ts +0 -59
- package/src/resources/extensions/gsd/tests/integration/parallel-merge.test.ts +0 -110
- package/src/resources/extensions/gsd/tests/integration/run-uat.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/memory-extractor.test.ts +2 -85
- package/src/resources/extensions/gsd/tests/model-cost-table.test.ts +0 -34
- package/src/resources/extensions/gsd/tests/model-router.test.ts +3 -68
- package/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +0 -28
- package/src/resources/extensions/gsd/tests/notifications.test.ts +0 -45
- package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +1 -33
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +0 -29
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +0 -38
- package/src/resources/extensions/gsd/tests/reassess-handler.test.ts +0 -117
- package/src/resources/extensions/gsd/tests/roadmap-slices.test.ts +0 -97
- package/src/resources/extensions/gsd/tests/secure-env-collect.test.ts +0 -134
- package/src/resources/extensions/gsd/tests/tool-naming.test.ts +1 -2
- package/src/resources/extensions/gsd/tests/triage-resolution.test.ts +0 -8
- package/src/resources/extensions/gsd/tests/unit-ownership.test.ts +17 -100
- package/src/resources/extensions/gsd/tests/validate-milestone-write-order.test.ts +1 -4
- package/src/resources/extensions/gsd/tests/workflow-logger.test.ts +0 -48
- package/src/resources/extensions/gsd/tests/workflow-manifest.test.ts +0 -92
- package/src/resources/extensions/gsd/tests/workflow-projections.test.ts +2 -4
- package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +1 -48
- package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +5 -29
- package/src/resources/extensions/gsd/tools/complete-task.ts +74 -36
- package/src/resources/extensions/gsd/tools/plan-milestone.ts +1 -13
- package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +0 -36
- package/src/resources/extensions/gsd/tools/validate-milestone.ts +2 -20
- package/src/resources/extensions/gsd/triage-resolution.ts +6 -23
- package/src/resources/extensions/gsd/types.ts +2 -4
- package/src/resources/extensions/gsd/undo.ts +2 -2
- package/src/resources/extensions/gsd/unit-ownership.ts +35 -206
- package/src/resources/extensions/gsd/verdict-parser.ts +6 -21
- package/src/resources/extensions/gsd/workflow-logger.ts +1 -3
- package/src/resources/extensions/gsd/workflow-manifest.ts +5 -22
- package/src/resources/extensions/gsd/workflow-projections.ts +64 -97
- package/src/resources/extensions/gsd/workflow-reconcile.ts +10 -39
- package/src/resources/extensions/gsd/workspace-index.ts +0 -30
- package/src/resources/extensions/gsd/worktree-manager.ts +1 -120
- package/src/resources/extensions/gsd/worktree-resolver.ts +3 -22
- package/src/resources/extensions/mcp-client/index.ts +7 -13
- package/src/resources/extensions/search-the-web/extension-manifest.json +1 -1
- package/src/resources/extensions/shared/interview-ui.ts +1 -12
- package/src/resources/skills/create-gsd-extension/SKILL.md +3 -5
- package/src/resources/skills/create-gsd-extension/references/key-rules-gotchas.md +4 -5
- package/src/resources/skills/create-gsd-extension/workflows/add-capability.md +2 -2
- package/src/resources/skills/create-gsd-extension/workflows/create-extension.md +4 -4
- package/src/resources/skills/create-gsd-extension/workflows/debug-extension.md +3 -5
- package/dist/resources/extensions/gsd/milestone-validation-gates.js +0 -45
- package/dist/resources/extensions/ollama/index.js +0 -112
- package/dist/resources/extensions/ollama/model-capabilities.js +0 -115
- package/dist/resources/extensions/ollama/ollama-client.js +0 -168
- package/dist/resources/extensions/ollama/ollama-commands.js +0 -194
- package/dist/resources/extensions/ollama/ollama-discovery.js +0 -69
- package/dist/resources/extensions/ollama/ollama-tool.js +0 -184
- package/dist/resources/extensions/ollama/types.js +0 -2
- package/dist/startup-model-validation.d.ts +0 -39
- package/dist/startup-model-validation.js +0 -50
- package/dist/web/standalone/.next/static/chunks/6502.7593d7797a4b3999.js +0 -9
- package/dist/web/standalone/.next/static/css/f6e8833d46e738d8.css +0 -1
- package/packages/native/src/__tests__/module-compat.test.mjs +0 -91
- package/packages/pi-agent-core/src/agent-loop.test.ts +0 -45
- package/packages/pi-ai/dist/providers/anthropic-shared.test.d.ts +0 -2
- package/packages/pi-ai/dist/providers/anthropic-shared.test.d.ts.map +0 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.test.js +0 -25
- package/packages/pi-ai/dist/providers/anthropic-shared.test.js.map +0 -1
- package/packages/pi-ai/dist/utils/repair-tool-json.d.ts +0 -37
- package/packages/pi-ai/dist/utils/repair-tool-json.d.ts.map +0 -1
- package/packages/pi-ai/dist/utils/repair-tool-json.js +0 -75
- package/packages/pi-ai/dist/utils/repair-tool-json.js.map +0 -1
- package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.d.ts +0 -2
- package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.d.ts.map +0 -1
- package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.js +0 -73
- package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.js.map +0 -1
- package/packages/pi-ai/src/providers/anthropic-shared.test.ts +0 -29
- package/packages/pi-ai/src/utils/repair-tool-json.ts +0 -88
- package/packages/pi-ai/src/utils/tests/repair-tool-json.test.ts +0 -102
- package/packages/pi-coding-agent/dist/core/compaction/compaction.test.d.ts +0 -6
- package/packages/pi-coding-agent/dist/core/compaction/compaction.test.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js +0 -176
- package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js.map +0 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.d.ts +0 -28
- package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.js +0 -37
- package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.js.map +0 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.d.ts +0 -2
- package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.js +0 -63
- package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.js.map +0 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-sort.d.ts +0 -19
- package/packages/pi-coding-agent/dist/core/extensions/extension-sort.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-sort.js +0 -115
- package/packages/pi-coding-agent/dist/core/extensions/extension-sort.js.map +0 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.d.ts +0 -2
- package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.js +0 -109
- package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.js.map +0 -1
- package/packages/pi-coding-agent/dist/core/image-overflow-recovery.d.ts +0 -44
- package/packages/pi-coding-agent/dist/core/image-overflow-recovery.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/image-overflow-recovery.js +0 -97
- package/packages/pi-coding-agent/dist/core/image-overflow-recovery.js.map +0 -1
- package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.d.ts +0 -2
- package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.js +0 -181
- package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.js.map +0 -1
- package/packages/pi-coding-agent/dist/core/messages.test.d.ts +0 -9
- package/packages/pi-coding-agent/dist/core/messages.test.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/messages.test.js +0 -86
- package/packages/pi-coding-agent/dist/core/messages.test.js.map +0 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.test.d.ts +0 -9
- package/packages/pi-coding-agent/dist/core/retry-handler.test.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.test.js +0 -193
- package/packages/pi-coding-agent/dist/core/retry-handler.test.js.map +0 -1
- package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.d.ts +0 -16
- package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.js +0 -80
- package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.js.map +0 -1
- package/packages/pi-coding-agent/src/core/compaction/compaction.test.ts +0 -236
- package/packages/pi-coding-agent/src/core/extensions/extension-manifest.test.ts +0 -77
- package/packages/pi-coding-agent/src/core/extensions/extension-manifest.ts +0 -62
- package/packages/pi-coding-agent/src/core/extensions/extension-sort.test.ts +0 -134
- package/packages/pi-coding-agent/src/core/extensions/extension-sort.ts +0 -137
- package/packages/pi-coding-agent/src/core/image-overflow-recovery.test.ts +0 -228
- package/packages/pi-coding-agent/src/core/image-overflow-recovery.ts +0 -118
- package/packages/pi-coding-agent/src/core/messages.test.ts +0 -114
- package/packages/pi-coding-agent/src/core/retry-handler.test.ts +0 -255
- package/packages/pi-coding-agent/src/core/tools/spawn-shell-windows.test.ts +0 -92
- package/src/resources/extensions/gsd/milestone-validation-gates.ts +0 -56
- package/src/resources/extensions/gsd/tests/auto-mode-interactive-guard.test.ts +0 -71
- package/src/resources/extensions/gsd/tests/cli-provider-rate-limit.test.ts +0 -47
- package/src/resources/extensions/gsd/tests/completion-hierarchy-guards.test.ts +0 -192
- package/src/resources/extensions/gsd/tests/db-path-worktree-symlink.test.ts +0 -131
- package/src/resources/extensions/gsd/tests/discord-invite-links.test.ts +0 -47
- package/src/resources/extensions/gsd/tests/discuss-empty-db-fallback.test.ts +0 -127
- package/src/resources/extensions/gsd/tests/dynamic-routing-default.test.ts +0 -20
- package/src/resources/extensions/gsd/tests/empty-content-abort-loop.test.ts +0 -74
- package/src/resources/extensions/gsd/tests/event-replay-idempotency.test.ts +0 -140
- package/src/resources/extensions/gsd/tests/forensics-context-persist.test.ts +0 -129
- package/src/resources/extensions/gsd/tests/forensics-db-completion.test.ts +0 -96
- package/src/resources/extensions/gsd/tests/gsdroot-worktree-detection.test.ts +0 -164
- package/src/resources/extensions/gsd/tests/guided-flow-dynamic-routing.test.ts +0 -135
- package/src/resources/extensions/gsd/tests/guided-flow-session-isolation.test.ts +0 -97
- package/src/resources/extensions/gsd/tests/hook-key-parsing.test.ts +0 -107
- package/src/resources/extensions/gsd/tests/integration/doctor-false-positives.test.ts +0 -243
- package/src/resources/extensions/gsd/tests/integration/gitignore-staging-2570.test.ts +0 -150
- package/src/resources/extensions/gsd/tests/integration/state-machine-live-validation.test.ts +0 -959
- package/src/resources/extensions/gsd/tests/migrate-external-worktree.test.ts +0 -105
- package/src/resources/extensions/gsd/tests/milestone-status-authoritative.test.ts +0 -116
- package/src/resources/extensions/gsd/tests/parallel-commit-scope.test.ts +0 -159
- package/src/resources/extensions/gsd/tests/parallel-eligibility-ghost.test.ts +0 -150
- package/src/resources/extensions/gsd/tests/plan-milestone-title.test.ts +0 -70
- package/src/resources/extensions/gsd/tests/project-relocation-recovery.test.ts +0 -297
- package/src/resources/extensions/gsd/tests/prompt-loader-replacement.test.ts +0 -178
- package/src/resources/extensions/gsd/tests/prompt-tool-names.test.ts +0 -69
- package/src/resources/extensions/gsd/tests/queue-execution-guard.test.ts +0 -157
- package/src/resources/extensions/gsd/tests/quick-turn-end-cleanup.test.ts +0 -90
- package/src/resources/extensions/gsd/tests/reconciliation-edge-cases.test.ts +0 -162
- package/src/resources/extensions/gsd/tests/slice-disk-reconcile.test.ts +0 -233
- package/src/resources/extensions/gsd/tests/stash-queued-context-files.test.ts +0 -305
- package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +0 -405
- package/src/resources/extensions/gsd/tests/state-derivation-parity.test.ts +0 -257
- package/src/resources/extensions/gsd/tests/state-machine-full-walkthrough.test.ts +0 -1628
- package/src/resources/extensions/gsd/tests/stop-auto-race-null-unit.test.ts +0 -106
- package/src/resources/extensions/gsd/tests/stuck-detection-coverage.test.ts +0 -174
- package/src/resources/extensions/gsd/tests/summary-render-parity.test.ts +0 -221
- package/src/resources/extensions/gsd/tests/uat-stuck-loop-orphaned-worktree.test.ts +0 -289
- package/src/resources/extensions/gsd/tests/vacuum-recovery.test.ts +0 -154
- package/src/resources/extensions/gsd/tests/verdict-parser.test.ts +0 -156
- package/src/resources/extensions/gsd/tests/verification-operational-gate.test.ts +0 -82
- package/src/resources/extensions/gsd/tests/worktree-db-respawn-truncation.test.ts +0 -140
- package/src/resources/extensions/gsd/tests/worktree-nested-git-safety.test.ts +0 -101
- package/src/resources/extensions/gsd/tests/zombie-gsd-state.test.ts +0 -95
- package/src/resources/extensions/mcp-client/tests/server-name-spaces.test.ts +0 -55
- package/src/resources/extensions/ollama/index.ts +0 -130
- package/src/resources/extensions/ollama/model-capabilities.ts +0 -145
- package/src/resources/extensions/ollama/ollama-client.ts +0 -196
- package/src/resources/extensions/ollama/ollama-commands.ts +0 -248
- package/src/resources/extensions/ollama/ollama-discovery.ts +0 -106
- package/src/resources/extensions/ollama/ollama-tool.ts +0 -218
- package/src/resources/extensions/ollama/tests/model-capabilities.test.ts +0 -162
- package/src/resources/extensions/ollama/tests/ollama-client.test.ts +0 -38
- package/src/resources/extensions/ollama/tests/ollama-discovery.test.ts +0 -28
- package/src/resources/extensions/ollama/types.ts +0 -130
- package/src/resources/extensions/shared/tests/ask-user-freetext.test.ts +0 -156
- /package/dist/web/standalone/.next/static/{R0D4xaIPl5kg93edN7Oo0 → 5DLsjFHdSB6_a1EDQVjr7}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{R0D4xaIPl5kg93edN7Oo0 → 5DLsjFHdSB6_a1EDQVjr7}/_ssgManifest.js +0 -0
|
@@ -112,20 +112,7 @@ export async function analyzeParallelEligibility(
|
|
|
112
112
|
for (const mid of milestoneIds) {
|
|
113
113
|
const entry = registryMap.get(mid);
|
|
114
114
|
const title = entry?.title ?? mid;
|
|
115
|
-
|
|
116
|
-
// Rule 0: milestones with no registry entry (ghost directories, unknown
|
|
117
|
-
// state) are ineligible — we cannot determine their status or deps (#2501)
|
|
118
|
-
if (!entry) {
|
|
119
|
-
ineligible.push({
|
|
120
|
-
milestoneId: mid,
|
|
121
|
-
title,
|
|
122
|
-
eligible: false,
|
|
123
|
-
reason: "Milestone has no planning data — cannot determine eligibility.",
|
|
124
|
-
});
|
|
125
|
-
continue;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
const status = entry.status;
|
|
115
|
+
const status = entry?.status ?? "pending";
|
|
129
116
|
|
|
130
117
|
// Rule 1: skip complete and parked milestones
|
|
131
118
|
if (status === "complete" || status === "parked") {
|
|
@@ -139,7 +126,7 @@ export async function analyzeParallelEligibility(
|
|
|
139
126
|
}
|
|
140
127
|
|
|
141
128
|
// Rule 2: check dependency satisfaction
|
|
142
|
-
const deps = entry
|
|
129
|
+
const deps = entry?.dependsOn ?? [];
|
|
143
130
|
const unsatisfied = deps.filter(dep => {
|
|
144
131
|
const depEntry = registryMap.get(dep);
|
|
145
132
|
return !depEntry || depEntry.status !== "complete";
|
|
@@ -5,9 +5,6 @@
|
|
|
5
5
|
* with safety checks for parallel execution context.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import { existsSync, readdirSync } from "node:fs";
|
|
9
|
-
import { join } from "node:path";
|
|
10
|
-
import { spawnSync } from "node:child_process";
|
|
11
8
|
import { loadFile } from "./files.js";
|
|
12
9
|
import { resolveMilestoneFile } from "./paths.js";
|
|
13
10
|
import { mergeMilestoneToMain } from "./auto-worktree.js";
|
|
@@ -31,102 +28,22 @@ export type MergeOrder = "sequential" | "by-completion";
|
|
|
31
28
|
|
|
32
29
|
// ─── Merge Queue ───────────────────────────────────────────────────────────
|
|
33
30
|
|
|
34
|
-
/**
|
|
35
|
-
* Check whether a milestone is complete by querying its worktree SQLite DB.
|
|
36
|
-
* Uses a subprocess to avoid disrupting the global DB singleton.
|
|
37
|
-
* Returns true when milestones.status = 'complete' in the worktree's gsd.db.
|
|
38
|
-
*/
|
|
39
|
-
export function isMilestoneCompleteInWorktreeDb(basePath: string, mid: string): boolean {
|
|
40
|
-
const dbPath = join(basePath, ".gsd", "worktrees", mid, ".gsd", "gsd.db");
|
|
41
|
-
if (!existsSync(dbPath)) return false;
|
|
42
|
-
|
|
43
|
-
try {
|
|
44
|
-
const result = spawnSync(
|
|
45
|
-
"sqlite3",
|
|
46
|
-
[dbPath, `SELECT status FROM milestones WHERE id='${mid}' LIMIT 1`],
|
|
47
|
-
{ timeout: 3000, encoding: "utf-8" },
|
|
48
|
-
);
|
|
49
|
-
return (result.stdout || "").trim() === "complete";
|
|
50
|
-
} catch {
|
|
51
|
-
return false;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Discover milestone IDs with status='complete' in their worktree DB,
|
|
57
|
-
* scanning .gsd/worktrees/<MID>/.gsd/gsd.db for each worktree directory.
|
|
58
|
-
*/
|
|
59
|
-
function discoverDbCompletedMilestones(basePath: string): Set<string> {
|
|
60
|
-
const completed = new Set<string>();
|
|
61
|
-
const worktreeDir = join(basePath, ".gsd", "worktrees");
|
|
62
|
-
try {
|
|
63
|
-
for (const entry of readdirSync(worktreeDir)) {
|
|
64
|
-
if (entry.startsWith("M") && isMilestoneCompleteInWorktreeDb(basePath, entry)) {
|
|
65
|
-
completed.add(entry);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
} catch {
|
|
69
|
-
// worktrees dir may not exist
|
|
70
|
-
}
|
|
71
|
-
return completed;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
31
|
/**
|
|
75
32
|
* Determine safe merge order for completed milestones.
|
|
76
33
|
* Sequential: merge in milestone ID order (M001 before M002).
|
|
77
34
|
* By-completion: merge in the order milestones finished.
|
|
78
|
-
*
|
|
79
|
-
* When basePath is provided, also checks worktree SQLite DBs as the
|
|
80
|
-
* source of truth — workers with stale orchestrator state (e.g. "error")
|
|
81
|
-
* are included if their worktree DB shows status='complete'.
|
|
82
|
-
* See: https://github.com/gsd-build/gsd-2/issues/2812
|
|
83
35
|
*/
|
|
84
36
|
export function determineMergeOrder(
|
|
85
37
|
workers: WorkerInfo[],
|
|
86
38
|
order: MergeOrder = "sequential",
|
|
87
|
-
basePath?: string,
|
|
88
39
|
): string[] {
|
|
89
|
-
|
|
90
|
-
const stoppedIds = new Set(
|
|
91
|
-
workers.filter(w => w.state === "stopped").map(w => w.milestoneId),
|
|
92
|
-
);
|
|
93
|
-
|
|
94
|
-
// When basePath is available, also check worktree DBs for milestones
|
|
95
|
-
// whose orchestrator state is stale but are actually complete (#2812)
|
|
96
|
-
const dbCompleted = basePath ? discoverDbCompletedMilestones(basePath) : new Set<string>();
|
|
97
|
-
|
|
98
|
-
// Union: milestone is mergeable if stopped OR DB-complete
|
|
99
|
-
const mergeableIds = new Set([...stoppedIds, ...dbCompleted]);
|
|
100
|
-
|
|
101
|
-
// Build the list from tracked workers + any DB-discovered milestones
|
|
102
|
-
// not tracked by the orchestrator at all
|
|
103
|
-
const workerMap = new Map(workers.map(w => [w.milestoneId, w]));
|
|
104
|
-
const allMergeable: WorkerInfo[] = [];
|
|
105
|
-
for (const mid of mergeableIds) {
|
|
106
|
-
const w = workerMap.get(mid);
|
|
107
|
-
if (w) {
|
|
108
|
-
allMergeable.push(w);
|
|
109
|
-
} else {
|
|
110
|
-
// Milestone discovered from worktree DB but not in workers list
|
|
111
|
-
allMergeable.push({
|
|
112
|
-
milestoneId: mid,
|
|
113
|
-
title: mid,
|
|
114
|
-
pid: 0,
|
|
115
|
-
process: null,
|
|
116
|
-
worktreePath: basePath ? join(basePath, ".gsd", "worktrees", mid) : "",
|
|
117
|
-
startedAt: 0,
|
|
118
|
-
state: "stopped",
|
|
119
|
-
cost: 0,
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
|
|
40
|
+
const completed = workers.filter(w => w.state === "stopped");
|
|
124
41
|
if (order === "by-completion") {
|
|
125
|
-
return
|
|
42
|
+
return completed
|
|
126
43
|
.sort((a, b) => a.startedAt - b.startedAt) // earliest first
|
|
127
44
|
.map(w => w.milestoneId);
|
|
128
45
|
}
|
|
129
|
-
return
|
|
46
|
+
return completed
|
|
130
47
|
.sort((a, b) => a.milestoneId.localeCompare(b.milestoneId))
|
|
131
48
|
.map(w => w.milestoneId);
|
|
132
49
|
}
|
|
@@ -197,7 +114,7 @@ export async function mergeAllCompleted(
|
|
|
197
114
|
workers: WorkerInfo[],
|
|
198
115
|
order: MergeOrder = "sequential",
|
|
199
116
|
): Promise<MergeResult[]> {
|
|
200
|
-
const mergeOrder = determineMergeOrder(workers, order
|
|
117
|
+
const mergeOrder = determineMergeOrder(workers, order);
|
|
201
118
|
const results: MergeResult[] = [];
|
|
202
119
|
|
|
203
120
|
for (const mid of mergeOrder) {
|
|
@@ -196,28 +196,18 @@ function _parsePlanImpl(content: string): SlicePlan {
|
|
|
196
196
|
const mhSection = extractSection(body, 'Must-Haves');
|
|
197
197
|
const mustHaves = mhSection ? parseBullets(mhSection) : [];
|
|
198
198
|
|
|
199
|
-
// Parse tasks from ## Tasks section first, then scan the full body for any
|
|
200
|
-
// task checkboxes that were missed. Multi-task plans can interleave T01 detail
|
|
201
|
-
// headings (## Steps, ## Must-Haves) before T02's checkbox, which causes
|
|
202
|
-
// extractSection("Tasks") to stop at the first ## heading and miss T02+ (#3105).
|
|
203
199
|
const tasksSection = extractSection(body, 'Tasks');
|
|
204
200
|
const tasks: TaskPlanEntry[] = [];
|
|
205
201
|
|
|
206
|
-
|
|
207
|
-
|
|
202
|
+
if (tasksSection) {
|
|
203
|
+
const taskLines = tasksSection.split('\n');
|
|
208
204
|
let currentTask: TaskPlanEntry | null = null;
|
|
209
205
|
|
|
210
|
-
for (const line of
|
|
206
|
+
for (const line of taskLines) {
|
|
211
207
|
const cbMatch = line.match(/^-\s+\[([ xX])\]\s+\*\*([\w.]+):\s+(.+?)\*\*\s*(.*)/);
|
|
212
208
|
// Heading-style: ### T01 -- Title, ### T01: Title, ### T01 — Title
|
|
213
209
|
const hdMatch = !cbMatch ? line.match(/^#{2,4}\s+([\w.]+)\s*(?:--|—|:)\s*(.+)/) : null;
|
|
214
210
|
if (cbMatch || hdMatch) {
|
|
215
|
-
const taskId = cbMatch ? cbMatch[2] : hdMatch![1];
|
|
216
|
-
// Skip tasks already found in the Tasks section
|
|
217
|
-
if (knownIds.has(taskId)) {
|
|
218
|
-
currentTask = null;
|
|
219
|
-
continue;
|
|
220
|
-
}
|
|
221
211
|
if (currentTask) tasks.push(currentTask);
|
|
222
212
|
|
|
223
213
|
if (cbMatch) {
|
|
@@ -269,17 +259,8 @@ function _parsePlanImpl(content: string): SlicePlan {
|
|
|
269
259
|
}
|
|
270
260
|
}
|
|
271
261
|
if (currentTask) tasks.push(currentTask);
|
|
272
|
-
};
|
|
273
|
-
|
|
274
|
-
if (tasksSection) {
|
|
275
|
-
parseTaskLines(tasksSection.split('\n'), new Set());
|
|
276
262
|
}
|
|
277
263
|
|
|
278
|
-
// Second pass: scan the full body for task checkboxes outside ## Tasks.
|
|
279
|
-
// This handles interleaved plans where T02+ appear after T01's detail headings.
|
|
280
|
-
const foundIds = new Set(tasks.map(t => t.id));
|
|
281
|
-
parseTaskLines(body.split('\n'), foundIds);
|
|
282
|
-
|
|
283
264
|
const filesSection = extractSection(body, 'Files Likely Touched');
|
|
284
265
|
const filesLikelyTouched = filesSection ? parseBullets(filesSection) : [];
|
|
285
266
|
|
|
@@ -307,58 +307,16 @@ export function gsdRoot(basePath: string): string {
|
|
|
307
307
|
return result;
|
|
308
308
|
}
|
|
309
309
|
|
|
310
|
-
/**
|
|
311
|
-
* Detect if a path is inside a .gsd/worktrees/<name>/ structure.
|
|
312
|
-
*
|
|
313
|
-
* GSD auto-worktrees live at <project>/.gsd/worktrees/<milestoneId>/.
|
|
314
|
-
* When gsdRoot() is called with such a path, we must NOT walk up to the
|
|
315
|
-
* project root's .gsd — each worktree manages its own .gsd state (#2594).
|
|
316
|
-
*
|
|
317
|
-
* Matches both forward-slash and platform-native separators to handle
|
|
318
|
-
* Windows paths (path.sep = '\\') and normalized Unix paths.
|
|
319
|
-
*/
|
|
320
|
-
function isInsideGsdWorktree(p: string): boolean {
|
|
321
|
-
// Match /.gsd/worktrees/<name> where <name> is the final segment or
|
|
322
|
-
// followed by a separator. The <name> segment must be non-empty.
|
|
323
|
-
const sepFwd = "/";
|
|
324
|
-
const sepNative = "\\";
|
|
325
|
-
const markers = [
|
|
326
|
-
`${sepFwd}.gsd${sepFwd}worktrees${sepFwd}`,
|
|
327
|
-
`${sepNative}.gsd${sepNative}worktrees${sepNative}`,
|
|
328
|
-
];
|
|
329
|
-
for (const marker of markers) {
|
|
330
|
-
const idx = p.indexOf(marker);
|
|
331
|
-
if (idx === -1) continue;
|
|
332
|
-
// Verify there's a non-empty worktree name after the marker
|
|
333
|
-
const afterMarker = p.slice(idx + marker.length);
|
|
334
|
-
// The name is everything up to the next separator (or end of string)
|
|
335
|
-
const nameEnd = afterMarker.search(/[/\\]/);
|
|
336
|
-
const name = nameEnd === -1 ? afterMarker : afterMarker.slice(0, nameEnd);
|
|
337
|
-
if (name.length > 0) return true;
|
|
338
|
-
}
|
|
339
|
-
return false;
|
|
340
|
-
}
|
|
341
|
-
|
|
342
310
|
function probeGsdRoot(rawBasePath: string): string {
|
|
343
311
|
// 1. Fast path — check the input path directly
|
|
344
312
|
const local = join(rawBasePath, ".gsd");
|
|
345
313
|
if (existsSync(local)) return local;
|
|
346
314
|
|
|
347
|
-
// 1b. Worktree guard (#2594) — if basePath is inside a .gsd/worktrees/<name>/
|
|
348
|
-
// structure, return the worktree-local .gsd path immediately. Without this,
|
|
349
|
-
// the git-root probe (step 2) or walk-up (step 3) escapes to the project
|
|
350
|
-
// root's .gsd, causing ensurePreconditions() and deriveState() to read/write
|
|
351
|
-
// state in the wrong location.
|
|
352
|
-
if (isInsideGsdWorktree(rawBasePath)) return local;
|
|
353
|
-
|
|
354
315
|
// Resolve symlinks so path comparisons work correctly across platforms
|
|
355
316
|
// (e.g. macOS /var → /private/var). Use rawBasePath as fallback if not resolvable.
|
|
356
317
|
let basePath: string;
|
|
357
318
|
try { basePath = realpathSync.native(rawBasePath); } catch { basePath = rawBasePath; }
|
|
358
319
|
|
|
359
|
-
// Also check the resolved path for the worktree pattern (macOS /tmp → /private/tmp)
|
|
360
|
-
if (basePath !== rawBasePath && isInsideGsdWorktree(basePath)) return local;
|
|
361
|
-
|
|
362
320
|
// 2. Git root anchor — used as both probe target and walk-up boundary
|
|
363
321
|
// Only walk if we're inside a git project — prevents escaping into
|
|
364
322
|
// unrelated filesystem territory when running outside any repo.
|
|
@@ -69,7 +69,6 @@ export function resolveModelWithFallbacksForUnit(unitType: string): ResolvedMode
|
|
|
69
69
|
break;
|
|
70
70
|
case "complete-slice":
|
|
71
71
|
case "complete-milestone":
|
|
72
|
-
case "worktree-merge":
|
|
73
72
|
case "run-uat":
|
|
74
73
|
phaseConfig = m.completion;
|
|
75
74
|
break;
|
|
@@ -138,18 +137,6 @@ export function getNextFallbackModel(
|
|
|
138
137
|
}
|
|
139
138
|
}
|
|
140
139
|
|
|
141
|
-
/**
|
|
142
|
-
* Detect whether an error message indicates a transient network error
|
|
143
|
-
* (worth retrying the same model) vs a permanent provider error
|
|
144
|
-
* (auth failure, quota exceeded, etc. -- should fall back immediately).
|
|
145
|
-
*/
|
|
146
|
-
export function isTransientNetworkError(errorMsg: string): boolean {
|
|
147
|
-
if (!errorMsg) return false;
|
|
148
|
-
const hasNetworkSignal = /network|ECONNRESET|ETIMEDOUT|ECONNREFUSED|socket hang up|fetch failed|connection.*reset|dns/i.test(errorMsg);
|
|
149
|
-
const hasPermanentSignal = /auth|unauthorized|forbidden|invalid.*key|quota|billing/i.test(errorMsg);
|
|
150
|
-
return hasNetworkSignal && !hasPermanentSignal;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
140
|
/**
|
|
154
141
|
* Validate a model ID string.
|
|
155
142
|
* Returns true if the ID looks like a valid model identifier.
|
|
@@ -321,7 +308,7 @@ export function resolveContextSelection(): import("./types.js").ContextSelection
|
|
|
321
308
|
}
|
|
322
309
|
|
|
323
310
|
/**
|
|
324
|
-
* Resolve the search provider preference from
|
|
311
|
+
* Resolve the search provider preference from PREFERENCES.md.
|
|
325
312
|
* Returns undefined if not configured (caller falls back to existing behavior).
|
|
326
313
|
*/
|
|
327
314
|
export function resolveSearchProviderFromPreferences(): GSDPreferences["search_provider"] | undefined {
|
|
@@ -100,8 +100,7 @@ export const KNOWN_PREFERENCE_KEYS = new Set<string>([
|
|
|
100
100
|
export const KNOWN_UNIT_TYPES = [
|
|
101
101
|
"research-milestone", "plan-milestone", "research-slice", "plan-slice",
|
|
102
102
|
"execute-task", "reactive-execute", "gate-evaluate", "complete-slice", "replan-slice", "reassess-roadmap",
|
|
103
|
-
"run-uat", "complete-milestone",
|
|
104
|
-
"discuss-milestone", "discuss-slice", "worktree-merge",
|
|
103
|
+
"run-uat", "complete-milestone",
|
|
105
104
|
] as const;
|
|
106
105
|
export type UnitType = (typeof KNOWN_UNIT_TYPES)[number];
|
|
107
106
|
|
|
@@ -69,7 +69,6 @@ export {
|
|
|
69
69
|
resolveModelForUnit,
|
|
70
70
|
resolveModelWithFallbacksForUnit,
|
|
71
71
|
getNextFallbackModel,
|
|
72
|
-
isTransientNetworkError,
|
|
73
72
|
validateModelId,
|
|
74
73
|
updatePreferencesModels,
|
|
75
74
|
resolveDynamicRoutingConfig,
|
|
@@ -88,7 +87,7 @@ function gsdHome(): string {
|
|
|
88
87
|
}
|
|
89
88
|
|
|
90
89
|
function globalPreferencesPath(): string {
|
|
91
|
-
return join(gsdHome(), "
|
|
90
|
+
return join(gsdHome(), "PREFERENCES.md");
|
|
92
91
|
}
|
|
93
92
|
|
|
94
93
|
function legacyGlobalPreferencesPath(): string {
|
|
@@ -96,15 +95,15 @@ function legacyGlobalPreferencesPath(): string {
|
|
|
96
95
|
}
|
|
97
96
|
|
|
98
97
|
function projectPreferencesPath(): string {
|
|
99
|
-
return join(gsdRoot(process.cwd()), "
|
|
98
|
+
return join(gsdRoot(process.cwd()), "PREFERENCES.md");
|
|
100
99
|
}
|
|
101
|
-
//
|
|
102
|
-
// Check
|
|
103
|
-
function
|
|
104
|
-
return join(gsdHome(), "
|
|
100
|
+
// Legacy: older versions used lowercase preferences.md.
|
|
101
|
+
// Check lowercase as a fallback so those files aren't silently ignored.
|
|
102
|
+
function globalPreferencesPathLegacy(): string {
|
|
103
|
+
return join(gsdHome(), "preferences.md");
|
|
105
104
|
}
|
|
106
|
-
function
|
|
107
|
-
return join(gsdRoot(process.cwd()), "
|
|
105
|
+
function projectPreferencesPathLegacy(): string {
|
|
106
|
+
return join(gsdRoot(process.cwd()), "preferences.md");
|
|
108
107
|
}
|
|
109
108
|
|
|
110
109
|
export function getGlobalGSDPreferencesPath(): string {
|
|
@@ -123,13 +122,13 @@ export function getProjectGSDPreferencesPath(): string {
|
|
|
123
122
|
|
|
124
123
|
export function loadGlobalGSDPreferences(): LoadedGSDPreferences | null {
|
|
125
124
|
return loadPreferencesFile(globalPreferencesPath(), "global")
|
|
126
|
-
?? loadPreferencesFile(
|
|
125
|
+
?? loadPreferencesFile(globalPreferencesPathLegacy(), "global")
|
|
127
126
|
?? loadPreferencesFile(legacyGlobalPreferencesPath(), "global");
|
|
128
127
|
}
|
|
129
128
|
|
|
130
129
|
export function loadProjectGSDPreferences(): LoadedGSDPreferences | null {
|
|
131
130
|
return loadPreferencesFile(projectPreferencesPath(), "project")
|
|
132
|
-
?? loadPreferencesFile(
|
|
131
|
+
?? loadPreferencesFile(projectPreferencesPathLegacy(), "project");
|
|
133
132
|
}
|
|
134
133
|
|
|
135
134
|
export function loadEffectiveGSDPreferences(): LoadedGSDPreferences | null {
|
|
@@ -224,7 +223,7 @@ export function parsePreferencesMarkdown(content: string): GSDPreferences | null
|
|
|
224
223
|
|
|
225
224
|
if (!_warnedUnrecognizedFormat) {
|
|
226
225
|
_warnedUnrecognizedFormat = true;
|
|
227
|
-
console.warn("[parsePreferencesMarkdown]
|
|
226
|
+
console.warn("[parsePreferencesMarkdown] PREFERENCES.md exists but uses an unrecognized format — skipping.");
|
|
228
227
|
}
|
|
229
228
|
return null;
|
|
230
229
|
}
|
|
@@ -371,6 +370,9 @@ function mergePreferences(base: GSDPreferences, override: GSDPreferences): GSDPr
|
|
|
371
370
|
service_tier: override.service_tier ?? base.service_tier,
|
|
372
371
|
forensics_dedup: override.forensics_dedup ?? base.forensics_dedup,
|
|
373
372
|
show_token_cost: override.show_token_cost ?? base.show_token_cost,
|
|
373
|
+
experimental: (base.experimental || override.experimental)
|
|
374
|
+
? { ...(base.experimental ?? {}), ...(override.experimental ?? {}) }
|
|
375
|
+
: undefined,
|
|
374
376
|
};
|
|
375
377
|
}
|
|
376
378
|
|
|
@@ -517,7 +519,7 @@ export function resolvePreDispatchHooks(): PreDispatchHookConfig[] {
|
|
|
517
519
|
* Resolve the effective git isolation mode from preferences.
|
|
518
520
|
* Returns "none" (default), "worktree", or "branch".
|
|
519
521
|
*
|
|
520
|
-
* Default is "none" so GSD works out of the box without
|
|
522
|
+
* Default is "none" so GSD works out of the box without PREFERENCES.md.
|
|
521
523
|
* Worktree isolation requires explicit opt-in because it depends on git
|
|
522
524
|
* branch infrastructure that must be set up before use.
|
|
523
525
|
*/
|
|
@@ -134,10 +134,7 @@ export function loadPrompt(name: string, vars: Record<string, string> = {}): str
|
|
|
134
134
|
}
|
|
135
135
|
|
|
136
136
|
for (const [key, value] of Object.entries(effectiveVars)) {
|
|
137
|
-
|
|
138
|
-
// replacement patterns ($', $`, $&) being interpreted in the value.
|
|
139
|
-
// See: https://github.com/gsd-build/gsd-2/issues/2968
|
|
140
|
-
content = content.split(`{{${key}}}`).join(value);
|
|
137
|
+
content = content.replaceAll(`{{${key}}}`, value);
|
|
141
138
|
}
|
|
142
139
|
|
|
143
140
|
return content.trim();
|
|
@@ -56,7 +56,7 @@ Then:
|
|
|
56
56
|
- `followUps` (string) — Follow-up items for future milestones
|
|
57
57
|
- `deviations` (string) — Deviations from the original plan
|
|
58
58
|
10. For each requirement whose status changed in step 8, call `gsd_requirement_update` with the requirement ID and updated `status` and `validation` fields — the tool regenerates `.gsd/REQUIREMENTS.md` automatically.
|
|
59
|
-
11. Update `.gsd/PROJECT.md
|
|
59
|
+
11. Update `.gsd/PROJECT.md` to reflect milestone completion and current project state.
|
|
60
60
|
12. Review all slice summaries for cross-cutting lessons, patterns, or gotchas that emerged during this milestone. Append any non-obvious, reusable insights to `.gsd/KNOWLEDGE.md`.
|
|
61
61
|
13. Do not commit manually — the system auto-commits your changes after this unit completes.
|
|
62
62
|
- Say: "Milestone {{milestoneId}} complete."
|
|
@@ -29,11 +29,9 @@ Then:
|
|
|
29
29
|
8. Write `{{sliceUatPath}}` — a concrete UAT script with real test cases derived from the slice plan and task summaries. Include preconditions, numbered steps with expected outcomes, and edge cases. This must NOT be a placeholder or generic template — tailor every test case to what this slice actually built.
|
|
30
30
|
9. Review task summaries for `key_decisions`. Append any significant decisions to `.gsd/DECISIONS.md` if missing.
|
|
31
31
|
10. Review task summaries for patterns, gotchas, or non-obvious lessons learned. If any would save future agents from repeating investigation or hitting the same issues, append them to `.gsd/KNOWLEDGE.md`. Only add entries that are genuinely useful — don't pad with obvious observations.
|
|
32
|
-
11. Call `gsd_complete_slice` with
|
|
32
|
+
11. Call `gsd_complete_slice` with milestone_id, slice_id, the slice summary, and the UAT result. Do NOT manually mark the roadmap checkbox — the tool writes to the DB and renders the ROADMAP.md projection automatically.
|
|
33
33
|
12. Do not run git commands — the system commits your changes and handles any merge after this unit succeeds.
|
|
34
|
-
13. Update `.gsd/PROJECT.md` if it exists — refresh current state if needed
|
|
35
|
-
|
|
36
|
-
**Autonomous execution:** Do not call `ask_user_questions` or `secure_env_collect`. You are running in auto-mode — there is no human available to answer questions. Make reasonable assumptions and document them in the slice summary. If a decision genuinely requires human input, note it in the summary and proceed with the best available option.
|
|
34
|
+
13. Update `.gsd/PROJECT.md` if it exists — refresh current state if needed.
|
|
37
35
|
|
|
38
36
|
**You MUST call `gsd_complete_slice` with the slice summary and UAT content before finishing. The tool persists to both DB and disk and renders `{{sliceSummaryPath}}` and `{{sliceUatPath}}` automatically.**
|
|
39
37
|
|
|
@@ -38,7 +38,7 @@ Do a mandatory investigation pass before making any decisions. This is not optio
|
|
|
38
38
|
3. **Web search** — `search-the-web` if the domain is unfamiliar, if you need current best practices, or if the spec references external services/APIs you need facts about. Use `fetch_page` for full content when snippets aren't enough.
|
|
39
39
|
|
|
40
40
|
**Web search budget:** Budget carefully across investigation + focused research:
|
|
41
|
-
- Prefer `resolve_library` / `get_library_docs` over `
|
|
41
|
+
- Prefer `resolve_library` / `get_library_docs` over `web_search` for library documentation.
|
|
42
42
|
- Prefer `search_and_read` for one-shot topic research.
|
|
43
43
|
- Target 2-3 web searches in this investigation pass. Save remaining budget for focused research.
|
|
44
44
|
- Do NOT repeat the same or similar queries.
|
|
@@ -37,7 +37,7 @@ Before asking your first question, do a mandatory investigation pass. This is no
|
|
|
37
37
|
3. **Web search** — `search-the-web` if the domain is unfamiliar, if you need current best practices, or if the user referenced external services/APIs you need facts about. Use `fetch_page` for full content when snippets aren't enough.
|
|
38
38
|
|
|
39
39
|
**Web search budget:** You have a limited number of web searches per turn (typically 3-5). The discuss phase spans many turns (investigation, question rounds, focused research, requirements), so budget carefully:
|
|
40
|
-
- Prefer `resolve_library` / `get_library_docs` over `
|
|
40
|
+
- Prefer `resolve_library` / `get_library_docs` over `web_search` for library documentation — they don't consume the web search budget.
|
|
41
41
|
- Prefer `search_and_read` for one-shot topic research — it combines search + page fetch in a single call.
|
|
42
42
|
- Target 2-3 web searches in the investigation pass. Save remaining budget for the focused research pass before roadmap creation.
|
|
43
43
|
- Do NOT repeat the same or similar queries. If a search didn't find what you need, rephrase once or move on.
|
|
@@ -68,13 +68,11 @@ Then:
|
|
|
68
68
|
17. If you discover a non-obvious rule, recurring gotcha, or useful pattern during execution, append it to `.gsd/KNOWLEDGE.md`. Only add entries that would save future agents from repeating your investigation. Don't add obvious things.
|
|
69
69
|
18. Read the template at `~/.gsd/agent/extensions/gsd/templates/task-summary.md`
|
|
70
70
|
19. Write `{{taskSummaryPath}}`
|
|
71
|
-
20. Call `gsd_complete_task` with
|
|
71
|
+
20. Call `gsd_complete_task` with milestone_id, slice_id, task_id, and a summary of what was accomplished. This is your final required step — do NOT manually edit PLAN.md checkboxes. The tool marks the task complete, updates the DB, and renders PLAN.md automatically.
|
|
72
72
|
21. Do not run git commands — the system reads your task summary after completion and creates a meaningful commit from it (type inferred from title, message from your one-liner, key files from frontmatter). Write a clear, specific one-liner in the summary — it becomes the commit message.
|
|
73
73
|
|
|
74
74
|
All work stays in your working directory: `{{workingDirectory}}`.
|
|
75
75
|
|
|
76
|
-
**Autonomous execution:** Do not call `ask_user_questions` or `secure_env_collect`. You are running in auto-mode — there is no human available to answer questions. Make reasonable assumptions and document them in the task summary. If a decision genuinely requires human input, note it in the summary and proceed with the best available option.
|
|
77
|
-
|
|
78
76
|
**You MUST call `gsd_complete_task` AND write `{{taskSummaryPath}}` before finishing.**
|
|
79
77
|
|
|
80
78
|
When done, say: "Task {{taskId}} complete."
|
|
@@ -102,8 +102,6 @@ A stale lock (PID is dead) means the previous auto-mode session crashed mid-unit
|
|
|
102
102
|
|
|
103
103
|
A unit dispatched more than once (`type/id` appears multiple times) indicates a stuck loop — the unit completed but artifact verification failed.
|
|
104
104
|
|
|
105
|
-
{{dedupSection}}
|
|
106
|
-
|
|
107
105
|
## Investigation Protocol
|
|
108
106
|
|
|
109
107
|
1. **Start with the pre-parsed forensic report** above. The anomaly section contains automated findings — treat these as leads, not conclusions.
|
|
@@ -135,6 +133,8 @@ Explain your findings:
|
|
|
135
133
|
- **Code snippet** — the problematic code and what it should do instead
|
|
136
134
|
- **Recovery** — what the user can do right now to get unstuck
|
|
137
135
|
|
|
136
|
+
{{dedupSection}}
|
|
137
|
+
|
|
138
138
|
Then **offer GitHub issue creation**: "Would you like me to create a GitHub issue for this on gsd-build/gsd-2?"
|
|
139
139
|
|
|
140
140
|
**CRITICAL: The `github_issues` tool ONLY targets the current user's repository — it has no `repo` parameter. You MUST use `gh issue create --repo gsd-build/gsd-2` via the `bash` tool to file on the correct repo. Do NOT use the `github_issues` tool for this.**
|
|
@@ -13,7 +13,7 @@ Discuss milestone {{milestoneId}} ("{{milestoneTitle}}"). Identify gray areas, a
|
|
|
13
13
|
Do a lightweight targeted investigation so your questions are grounded in reality:
|
|
14
14
|
- Scout the codebase (`rg`, `find`, or `scout`) to understand what already exists that this milestone touches or builds on
|
|
15
15
|
- Check the roadmap context above (if present) to understand what surrounds this milestone
|
|
16
|
-
- Use `resolve_library` / `get_library_docs` for unfamiliar libraries — prefer this over `
|
|
16
|
+
- Use `resolve_library` / `get_library_docs` for unfamiliar libraries — prefer this over `web_search` for library documentation
|
|
17
17
|
- Identify the 3–5 biggest behavioural and architectural unknowns: things where the user's answer will materially change what gets built
|
|
18
18
|
|
|
19
19
|
**Web search budget:** You have a limited number of web searches per turn (typically 3-5). Prefer `resolve_library` / `get_library_docs` for library documentation and `search_and_read` for one-shot topic research — they are more budget-efficient. Target 2-3 web searches in the investigation pass. Distribute remaining searches across subsequent question rounds rather than clustering them.
|
|
@@ -13,7 +13,7 @@ Your goal is **not** to center the discussion on tech stack trivia, naming conve
|
|
|
13
13
|
Do a lightweight targeted investigation so your questions are grounded in reality:
|
|
14
14
|
- Scout the codebase (`rg`, `find`, or `scout` for broad unfamiliar areas) to understand what already exists that this slice touches or builds on
|
|
15
15
|
- Check the roadmap context above to understand what surrounds this slice — what comes before, what depends on it
|
|
16
|
-
- Use `resolve_library` / `get_library_docs` for unfamiliar libraries — prefer this over `
|
|
16
|
+
- Use `resolve_library` / `get_library_docs` for unfamiliar libraries — prefer this over `web_search` for library documentation
|
|
17
17
|
- Identify the 3–5 biggest behavioural unknowns: things where the user's answer will materially change what gets built
|
|
18
18
|
|
|
19
19
|
**Web search budget:** You have a limited number of web searches per turn (typically 3-5). Prefer `resolve_library` / `get_library_docs` for library documentation and `search_and_read` for one-shot topic research — they are more budget-efficient. Target 2-3 web searches in the investigation pass. Distribute remaining searches across subsequent question rounds rather than clustering them.
|
|
@@ -82,8 +82,6 @@ Then:
|
|
|
82
82
|
|
|
83
83
|
The slice directory and tasks/ subdirectory already exist. Do NOT mkdir. All work stays in your working directory: `{{workingDirectory}}`.
|
|
84
84
|
|
|
85
|
-
**Autonomous execution:** Do not call `ask_user_questions` or `secure_env_collect`. You are running in auto-mode — there is no human available to answer questions. Make reasonable assumptions and document them in the plan. If a decision genuinely requires human input, write a note in the relevant task's description and call `gsd_plan_slice` with what you have.
|
|
86
|
-
|
|
87
85
|
**You MUST call `gsd_plan_slice` to persist the planning state before finishing.**
|
|
88
86
|
|
|
89
87
|
When done, say: "Slice {{sliceId}} planned."
|
|
@@ -80,4 +80,4 @@ If a proposed order would violate constraints, explain the issue and suggest alt
|
|
|
80
80
|
- Do NOT park completed milestones — it would corrupt dependency satisfaction
|
|
81
81
|
- Park is preferred over discard when a milestone has any completed work
|
|
82
82
|
- Always persist queue order changes to `.gsd/QUEUE-ORDER.json`
|
|
83
|
-
-
|
|
83
|
+
- After changes, run `git add .gsd/ && git commit -m "docs(gsd): rethink milestone plan"` to persist (rethink runs interactively outside auto-mode, so no system auto-commit)
|
|
@@ -54,7 +54,6 @@ For each capture, classify it as one of:
|
|
|
54
54
|
- Add `**Resolution:** <brief description of what will happen>`
|
|
55
55
|
- Add `**Rationale:** <why this classification>`
|
|
56
56
|
- Add `**Resolved:** <current ISO timestamp>`
|
|
57
|
-
- Add `**Milestone:** <current milestone ID>` (e.g., `**Milestone:** M003`)
|
|
58
57
|
|
|
59
58
|
4. **Summarize** what was triaged: how many captures, what classifications were assigned, and what actions are pending (e.g., "2 quick-tasks ready for execution, 1 deferred to S03").
|
|
60
59
|
|