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
|
@@ -48,7 +48,7 @@ const NETWORK_RE = /network|ECONNRESET|ETIMEDOUT|ECONNREFUSED|socket hang up|fet
|
|
|
48
48
|
const SERVER_RE = /internal server error|500|502|503|overloaded|server_error|api_error|service.?unavailable/i;
|
|
49
49
|
// ECONNRESET/ECONNREFUSED are in NETWORK_RE (same-model retry first).
|
|
50
50
|
const CONNECTION_RE = /terminated|connection.?refused|other side closed|EPIPE|network.?(?:is\s+)?unavailable|stream_exhausted(?:_without_result)?/i;
|
|
51
|
-
const STREAM_RE = /Unexpected end of JSON|Unexpected token.*JSON|Expected
|
|
51
|
+
const STREAM_RE = /Unexpected end of JSON|Unexpected token.*JSON|Expected double-quoted property name|SyntaxError.*JSON/i;
|
|
52
52
|
const RESET_DELAY_RE = /reset in (\d+)s/i;
|
|
53
53
|
|
|
54
54
|
/**
|
|
@@ -58,9 +58,9 @@ const RESET_DELAY_RE = /reset in (\d+)s/i;
|
|
|
58
58
|
* 1. Permanent (auth/billing/quota) — unless also rate-limited
|
|
59
59
|
* 2. Rate limit (429, rate.?limit, too many requests)
|
|
60
60
|
* 3. Network (ECONNRESET, ETIMEDOUT, socket hang up, fetch failed, dns)
|
|
61
|
-
* 4.
|
|
62
|
-
* 5.
|
|
63
|
-
* 6.
|
|
61
|
+
* 4. Server (500/502/503, overloaded, server_error)
|
|
62
|
+
* 5. Connection (terminated, ECONNREFUSED, EPIPE, other side closed)
|
|
63
|
+
* 6. Stream truncation (malformed JSON from mid-stream cut)
|
|
64
64
|
* 7. Unknown
|
|
65
65
|
*/
|
|
66
66
|
export function classifyError(errorMsg: string, retryAfterMs?: number): ErrorClass {
|
|
@@ -90,24 +90,21 @@ export function classifyError(errorMsg: string, retryAfterMs?: number): ErrorCla
|
|
|
90
90
|
return { kind: "network", retryAfterMs: retryAfterMs ?? 3_000 };
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
-
// 4.
|
|
94
|
-
// Checked before server/connection because JSON parse errors can contain
|
|
95
|
-
// substrings like "position 500" (matches SERVER_RE) or "Unterminated"
|
|
96
|
-
// (matches CONNECTION_RE's "terminated" pattern).
|
|
97
|
-
if (STREAM_RE.test(errorMsg)) {
|
|
98
|
-
return { kind: "stream", retryAfterMs: retryAfterMs ?? 15_000 };
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
// 5. Server errors — try fallback model
|
|
93
|
+
// 4. Server errors — try fallback model
|
|
102
94
|
if (SERVER_RE.test(errorMsg)) {
|
|
103
95
|
return { kind: "server", retryAfterMs: retryAfterMs ?? 30_000 };
|
|
104
96
|
}
|
|
105
97
|
|
|
106
|
-
//
|
|
98
|
+
// 5. Connection errors — try fallback model
|
|
107
99
|
if (CONNECTION_RE.test(errorMsg)) {
|
|
108
100
|
return { kind: "connection", retryAfterMs: retryAfterMs ?? 15_000 };
|
|
109
101
|
}
|
|
110
102
|
|
|
103
|
+
// 6. Stream truncation — downstream symptom of connection drop
|
|
104
|
+
if (STREAM_RE.test(errorMsg)) {
|
|
105
|
+
return { kind: "stream", retryAfterMs: retryAfterMs ?? 15_000 };
|
|
106
|
+
}
|
|
107
|
+
|
|
111
108
|
// 7. Unknown
|
|
112
109
|
return { kind: "unknown" };
|
|
113
110
|
}
|
|
@@ -12,22 +12,7 @@
|
|
|
12
12
|
"gsd_requirement_update", "gsd_milestone_generate_id"
|
|
13
13
|
],
|
|
14
14
|
"commands": ["gsd", "kill", "worktree", "exit"],
|
|
15
|
-
"hooks": [
|
|
16
|
-
"session_start",
|
|
17
|
-
"session_switch",
|
|
18
|
-
"bash_transform",
|
|
19
|
-
"session_fork",
|
|
20
|
-
"before_agent_start",
|
|
21
|
-
"agent_end",
|
|
22
|
-
"session_before_compact",
|
|
23
|
-
"session_shutdown",
|
|
24
|
-
"tool_call",
|
|
25
|
-
"tool_result",
|
|
26
|
-
"tool_execution_start",
|
|
27
|
-
"tool_execution_end",
|
|
28
|
-
"model_select",
|
|
29
|
-
"before_provider_request"
|
|
30
|
-
],
|
|
15
|
+
"hooks": ["session_start", "session_switch"],
|
|
31
16
|
"shortcuts": ["Ctrl+Alt+G"]
|
|
32
17
|
}
|
|
33
18
|
}
|
|
@@ -28,8 +28,6 @@ import { deriveState } from "./state.js";
|
|
|
28
28
|
import { isAutoActive } from "./auto.js";
|
|
29
29
|
import { loadPrompt } from "./prompt-loader.js";
|
|
30
30
|
import { gsdRoot } from "./paths.js";
|
|
31
|
-
import { isDbAvailable, getAllMilestones, getMilestoneSlices, getSliceTasks } from "./gsd-db.js";
|
|
32
|
-
import { isClosedStatus } from "./status-guards.js";
|
|
33
31
|
import { formatDuration } from "../shared/format-utils.js";
|
|
34
32
|
import { getAutoWorktreePath } from "./auto-worktree.js";
|
|
35
33
|
import { loadEffectiveGSDPreferences, loadGlobalGSDPreferences, getGlobalGSDPreferencesPath } from "./preferences.js";
|
|
@@ -87,15 +85,6 @@ interface JournalSummary {
|
|
|
87
85
|
fileCount: number;
|
|
88
86
|
}
|
|
89
87
|
|
|
90
|
-
interface DbCompletionCounts {
|
|
91
|
-
milestones: number;
|
|
92
|
-
milestonesTotal: number;
|
|
93
|
-
slices: number;
|
|
94
|
-
slicesTotal: number;
|
|
95
|
-
tasks: number;
|
|
96
|
-
tasksTotal: number;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
88
|
interface ForensicReport {
|
|
100
89
|
gsdVersion: string;
|
|
101
90
|
timestamp: string;
|
|
@@ -106,7 +95,6 @@ interface ForensicReport {
|
|
|
106
95
|
unitTraces: UnitTrace[];
|
|
107
96
|
metrics: MetricsLedger | null;
|
|
108
97
|
completedKeys: string[];
|
|
109
|
-
dbCompletionCounts: DbCompletionCounts | null;
|
|
110
98
|
crashLock: LockData | null;
|
|
111
99
|
doctorIssues: DoctorIssue[];
|
|
112
100
|
anomalies: ForensicAnomaly[];
|
|
@@ -118,15 +106,13 @@ interface ForensicReport {
|
|
|
118
106
|
// ─── Duplicate Detection ──────────────────────────────────────────────────────
|
|
119
107
|
|
|
120
108
|
const DEDUP_PROMPT_SECTION = `
|
|
121
|
-
##
|
|
109
|
+
## Duplicate Detection (REQUIRED before issue creation)
|
|
122
110
|
|
|
123
|
-
Before
|
|
111
|
+
Before offering to create a GitHub issue, you MUST search for existing issues and PRs that may already address this bug. This step uses the user's AI tokens for analysis.
|
|
124
112
|
|
|
125
113
|
### Search Steps
|
|
126
114
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
1. **Search closed issues** for similar keywords:
|
|
115
|
+
1. **Search closed issues** for similar keywords from your diagnosis:
|
|
130
116
|
\`\`\`
|
|
131
117
|
gh issue list --repo gsd-build/gsd-2 --state closed --search "<keywords from root cause>" --limit 20
|
|
132
118
|
\`\`\`
|
|
@@ -143,16 +129,20 @@ Use keywords from the user's problem description and the anomaly summaries in th
|
|
|
143
129
|
|
|
144
130
|
### Analysis
|
|
145
131
|
|
|
146
|
-
For each result, compare it against
|
|
132
|
+
For each result, compare it against your root-cause diagnosis:
|
|
147
133
|
- Does the issue describe the same code path or file?
|
|
148
|
-
- Does the PR modify the
|
|
134
|
+
- Does the PR modify the same file:line you identified?
|
|
149
135
|
- Is the symptom description semantically similar even if keywords differ?
|
|
150
136
|
|
|
151
|
-
###
|
|
137
|
+
### Present Findings
|
|
138
|
+
|
|
139
|
+
If you find potential matches, present them to the user:
|
|
152
140
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
141
|
+
1. **"Already fixed by PR #X — skip issue creation"** — when a merged PR or closed issue clearly addresses the same root cause. Explain why you believe it matches.
|
|
142
|
+
2. **"Add my findings to existing issue #Y"** — when an open issue exists for the same bug. Use \`gh issue comment #Y --repo gsd-build/gsd-2\` to add forensic evidence.
|
|
143
|
+
3. **"Create new issue anyway"** — when existing results do not cover this specific failure.
|
|
144
|
+
|
|
145
|
+
Only proceed to issue creation if no matches were found OR the user explicitly chooses "Create new issue anyway".
|
|
156
146
|
`;
|
|
157
147
|
|
|
158
148
|
async function writeForensicsDedupPref(ctx: ExtensionCommandContext, enabled: boolean): Promise<void> {
|
|
@@ -260,9 +250,6 @@ export async function handleForensics(
|
|
|
260
250
|
{ customType: "gsd-forensics", content, display: false },
|
|
261
251
|
{ triggerTurn: true },
|
|
262
252
|
);
|
|
263
|
-
|
|
264
|
-
// Persist forensics context so follow-up turns can re-inject it (#2941)
|
|
265
|
-
writeForensicsMarker(basePath, savedPath, content);
|
|
266
253
|
}
|
|
267
254
|
|
|
268
255
|
// ─── Report Builder ───────────────────────────────────────────────────────────
|
|
@@ -288,9 +275,8 @@ export async function buildForensicReport(basePath: string): Promise<ForensicRep
|
|
|
288
275
|
// 3. Load metrics
|
|
289
276
|
const metrics = loadLedgerFromDisk(basePath);
|
|
290
277
|
|
|
291
|
-
// 4. Load completed keys
|
|
278
|
+
// 4. Load completed keys
|
|
292
279
|
const completedKeys = loadCompletedKeys(basePath);
|
|
293
|
-
const dbCompletionCounts = getDbCompletionCounts();
|
|
294
280
|
|
|
295
281
|
// 5. Check crash lock
|
|
296
282
|
const crashLock = readCrashLock(basePath);
|
|
@@ -349,7 +335,6 @@ export async function buildForensicReport(basePath: string): Promise<ForensicRep
|
|
|
349
335
|
unitTraces,
|
|
350
336
|
metrics,
|
|
351
337
|
completedKeys,
|
|
352
|
-
dbCompletionCounts,
|
|
353
338
|
crashLock,
|
|
354
339
|
doctorIssues,
|
|
355
340
|
anomalies,
|
|
@@ -600,44 +585,6 @@ function loadCompletedKeys(basePath: string): string[] {
|
|
|
600
585
|
return [];
|
|
601
586
|
}
|
|
602
587
|
|
|
603
|
-
// ─── DB Completion Counts ────────────────────────────────────────────────────
|
|
604
|
-
|
|
605
|
-
function getDbCompletionCounts(): DbCompletionCounts | null {
|
|
606
|
-
if (!isDbAvailable()) return null;
|
|
607
|
-
|
|
608
|
-
const milestones = getAllMilestones();
|
|
609
|
-
let completedMilestones = 0;
|
|
610
|
-
let totalSlices = 0;
|
|
611
|
-
let completedSlices = 0;
|
|
612
|
-
let totalTasks = 0;
|
|
613
|
-
let completedTasks = 0;
|
|
614
|
-
|
|
615
|
-
for (const m of milestones) {
|
|
616
|
-
if (isClosedStatus(m.status)) completedMilestones++;
|
|
617
|
-
|
|
618
|
-
const slices = getMilestoneSlices(m.id);
|
|
619
|
-
for (const s of slices) {
|
|
620
|
-
totalSlices++;
|
|
621
|
-
if (isClosedStatus(s.status)) completedSlices++;
|
|
622
|
-
|
|
623
|
-
const tasks = getSliceTasks(m.id, s.id);
|
|
624
|
-
for (const t of tasks) {
|
|
625
|
-
totalTasks++;
|
|
626
|
-
if (isClosedStatus(t.status)) completedTasks++;
|
|
627
|
-
}
|
|
628
|
-
}
|
|
629
|
-
}
|
|
630
|
-
|
|
631
|
-
return {
|
|
632
|
-
milestones: completedMilestones,
|
|
633
|
-
milestonesTotal: milestones.length,
|
|
634
|
-
slices: completedSlices,
|
|
635
|
-
slicesTotal: totalSlices,
|
|
636
|
-
tasks: completedTasks,
|
|
637
|
-
tasksTotal: totalTasks,
|
|
638
|
-
};
|
|
639
|
-
}
|
|
640
|
-
|
|
641
588
|
// ─── Anomaly Detectors ───────────────────────────────────────────────────────
|
|
642
589
|
|
|
643
590
|
function detectStuckLoops(units: UnitMetrics[], anomalies: ForensicAnomaly[]): void {
|
|
@@ -702,42 +649,15 @@ function detectTimeouts(traces: UnitTrace[], anomalies: ForensicAnomaly[]): void
|
|
|
702
649
|
}
|
|
703
650
|
}
|
|
704
651
|
|
|
705
|
-
/**
|
|
706
|
-
* Parse a completed-unit key into its unitType and unitId.
|
|
707
|
-
*
|
|
708
|
-
* Hook units use a compound slash-delimited type ("hook/<hookName>"), so a
|
|
709
|
-
* naive `key.indexOf("/")` would split "hook/telegram-progress/M007/S01" into
|
|
710
|
-
* unitType="hook" (wrong) instead of "hook/telegram-progress".
|
|
711
|
-
*
|
|
712
|
-
* Returns `null` for malformed keys that cannot be split.
|
|
713
|
-
*/
|
|
714
|
-
export function splitCompletedKey(key: string): { unitType: string; unitId: string } | null {
|
|
715
|
-
if (key.startsWith("hook/")) {
|
|
716
|
-
// Hook unit types are two segments: "hook/<hookName>/<unitId...>"
|
|
717
|
-
const secondSlash = key.indexOf("/", 5); // skip past "hook/"
|
|
718
|
-
if (secondSlash === -1) return null; // malformed — no unitId after hook name
|
|
719
|
-
return {
|
|
720
|
-
unitType: key.slice(0, secondSlash),
|
|
721
|
-
unitId: key.slice(secondSlash + 1),
|
|
722
|
-
};
|
|
723
|
-
}
|
|
724
|
-
|
|
725
|
-
const slashIdx = key.indexOf("/");
|
|
726
|
-
if (slashIdx === -1) return null;
|
|
727
|
-
return {
|
|
728
|
-
unitType: key.slice(0, slashIdx),
|
|
729
|
-
unitId: key.slice(slashIdx + 1),
|
|
730
|
-
};
|
|
731
|
-
}
|
|
732
|
-
|
|
733
652
|
function detectMissingArtifacts(completedKeys: string[], basePath: string, activeMilestone: string | null, anomalies: ForensicAnomaly[]): void {
|
|
734
653
|
// Also check the worktree path for artifacts — they may exist there but not at root
|
|
735
654
|
const wtBasePath = activeMilestone ? getAutoWorktreePath(basePath, activeMilestone) : null;
|
|
736
655
|
|
|
737
656
|
for (const key of completedKeys) {
|
|
738
|
-
const
|
|
739
|
-
if (
|
|
740
|
-
const
|
|
657
|
+
const slashIdx = key.indexOf("/");
|
|
658
|
+
if (slashIdx === -1) continue;
|
|
659
|
+
const unitType = key.slice(0, slashIdx);
|
|
660
|
+
const unitId = key.slice(slashIdx + 1);
|
|
741
661
|
|
|
742
662
|
const rootHasArtifact = verifyExpectedArtifact(unitType, unitId, basePath);
|
|
743
663
|
const wtHasArtifact = wtBasePath ? verifyExpectedArtifact(unitType, unitId, wtBasePath) : false;
|
|
@@ -976,42 +896,6 @@ function saveForensicReport(basePath: string, report: ForensicReport, problemDes
|
|
|
976
896
|
return filePath;
|
|
977
897
|
}
|
|
978
898
|
|
|
979
|
-
// ─── Forensics Session Marker ────────────────────────────────────────────────
|
|
980
|
-
|
|
981
|
-
export interface ForensicsMarker {
|
|
982
|
-
reportPath: string;
|
|
983
|
-
promptContent: string;
|
|
984
|
-
createdAt: string;
|
|
985
|
-
}
|
|
986
|
-
|
|
987
|
-
/**
|
|
988
|
-
* Write a marker file so that buildBeforeAgentStartResult() can re-inject
|
|
989
|
-
* the forensics prompt on follow-up turns. (#2941)
|
|
990
|
-
*/
|
|
991
|
-
export function writeForensicsMarker(basePath: string, reportPath: string, promptContent: string): void {
|
|
992
|
-
const dir = join(gsdRoot(basePath), "runtime");
|
|
993
|
-
mkdirSync(dir, { recursive: true });
|
|
994
|
-
const marker: ForensicsMarker = {
|
|
995
|
-
reportPath,
|
|
996
|
-
promptContent,
|
|
997
|
-
createdAt: new Date().toISOString(),
|
|
998
|
-
};
|
|
999
|
-
writeFileSync(join(dir, "active-forensics.json"), JSON.stringify(marker), "utf-8");
|
|
1000
|
-
}
|
|
1001
|
-
|
|
1002
|
-
/**
|
|
1003
|
-
* Read the active forensics marker, or null if none exists.
|
|
1004
|
-
*/
|
|
1005
|
-
export function readForensicsMarker(basePath: string): ForensicsMarker | null {
|
|
1006
|
-
const markerPath = join(gsdRoot(basePath), "runtime", "active-forensics.json");
|
|
1007
|
-
if (!existsSync(markerPath)) return null;
|
|
1008
|
-
try {
|
|
1009
|
-
return JSON.parse(readFileSync(markerPath, "utf-8")) as ForensicsMarker;
|
|
1010
|
-
} catch {
|
|
1011
|
-
return null;
|
|
1012
|
-
}
|
|
1013
|
-
}
|
|
1014
|
-
|
|
1015
899
|
// ─── Prompt Formatter ─────────────────────────────────────────────────────────
|
|
1016
900
|
|
|
1017
901
|
function formatReportForPrompt(report: ForensicReport): string {
|
|
@@ -1124,16 +1008,8 @@ function formatReportForPrompt(report: ForensicReport): string {
|
|
|
1124
1008
|
sections.push("");
|
|
1125
1009
|
}
|
|
1126
1010
|
|
|
1127
|
-
//
|
|
1128
|
-
|
|
1129
|
-
const c = report.dbCompletionCounts;
|
|
1130
|
-
sections.push(`### Completion Status (from DB)`);
|
|
1131
|
-
sections.push(`- ${c.milestones}/${c.milestonesTotal} milestones complete`);
|
|
1132
|
-
sections.push(`- ${c.slices}/${c.slicesTotal} slices complete`);
|
|
1133
|
-
sections.push(`- ${c.tasks}/${c.tasksTotal} tasks complete`);
|
|
1134
|
-
} else {
|
|
1135
|
-
sections.push(`### Completed Keys: ${report.completedKeys.length}`);
|
|
1136
|
-
}
|
|
1011
|
+
// Completed keys count
|
|
1012
|
+
sections.push(`### Completed Keys: ${report.completedKeys.length}`);
|
|
1137
1013
|
sections.push(`### GSD Version: ${report.gsdVersion}`);
|
|
1138
1014
|
sections.push(`### Active Milestone: ${report.activeMilestone ?? "none"}`);
|
|
1139
1015
|
sections.push(`### Active Slice: ${report.activeSlice ?? "none"}`);
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
import { execFileSync, execSync } from "node:child_process";
|
|
12
|
-
import { existsSync, mkdirSync, readFileSync,
|
|
12
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
13
13
|
import { join } from "node:path";
|
|
14
14
|
import { gsdRoot } from "./paths.js";
|
|
15
15
|
import { GIT_NO_PROMPT_ENV } from "./git-constants.js";
|
|
@@ -50,9 +50,9 @@ export interface GitPreferences {
|
|
|
50
50
|
main_branch?: string;
|
|
51
51
|
merge_strategy?: "squash" | "merge";
|
|
52
52
|
/** Controls auto-mode git isolation strategy.
|
|
53
|
-
* - "worktree": creates a milestone worktree for isolated work
|
|
53
|
+
* - "worktree": (default) creates a milestone worktree for isolated work
|
|
54
54
|
* - "branch": works directly in the project root (for submodule-heavy repos)
|
|
55
|
-
* - "none":
|
|
55
|
+
* - "none": no git isolation — commits land on the user's current branch directly
|
|
56
56
|
*/
|
|
57
57
|
isolation?: "worktree" | "branch" | "none";
|
|
58
58
|
/** When false, GSD will not modify .gitignore at all — no baseline patterns
|
|
@@ -488,29 +488,6 @@ export class GitServiceImpl {
|
|
|
488
488
|
// If .gsd/ IS in .gitignore (the default for external state projects),
|
|
489
489
|
// git add -A already skips it and the exclusions are harmless no-ops.
|
|
490
490
|
const allExclusions = [...RUNTIME_EXCLUSION_PATHS, ...extraExclusions];
|
|
491
|
-
|
|
492
|
-
// ── Parallel worker milestone scope (#1991) ──
|
|
493
|
-
// When GSD_MILESTONE_LOCK is set, this process is a parallel worker that
|
|
494
|
-
// must only commit files belonging to its own milestone. Exclude all other
|
|
495
|
-
// milestone directories from staging to prevent cross-milestone pollution
|
|
496
|
-
// (e.g., an M033 worker fabricating M032 artifacts in the same commit).
|
|
497
|
-
const milestoneLock = process.env.GSD_MILESTONE_LOCK;
|
|
498
|
-
if (milestoneLock) {
|
|
499
|
-
const msDir = join(gsdRoot(this.basePath), "milestones");
|
|
500
|
-
if (existsSync(msDir)) {
|
|
501
|
-
try {
|
|
502
|
-
const entries = readdirSync(msDir, { withFileTypes: true });
|
|
503
|
-
for (const entry of entries) {
|
|
504
|
-
if (entry.isDirectory() && entry.name !== milestoneLock) {
|
|
505
|
-
allExclusions.push(`.gsd/milestones/${entry.name}/`);
|
|
506
|
-
}
|
|
507
|
-
}
|
|
508
|
-
} catch {
|
|
509
|
-
// Best-effort — if we can't read the milestones dir, proceed without scoping
|
|
510
|
-
}
|
|
511
|
-
}
|
|
512
|
-
}
|
|
513
|
-
|
|
514
491
|
nativeAddAllWithExclusions(this.basePath, allExclusions);
|
|
515
492
|
}
|
|
516
493
|
|
|
@@ -41,7 +41,6 @@ const GSD_RUNTIME_PATTERNS = [
|
|
|
41
41
|
const BASELINE_PATTERNS = [
|
|
42
42
|
// ── GSD state directory (symlink to external storage) ──
|
|
43
43
|
".gsd",
|
|
44
|
-
".gsd-id",
|
|
45
44
|
|
|
46
45
|
// ── OS junk ──
|
|
47
46
|
".DS_Store",
|
|
@@ -85,38 +84,6 @@ const BASELINE_PATTERNS = [
|
|
|
85
84
|
"tmp/",
|
|
86
85
|
];
|
|
87
86
|
|
|
88
|
-
/**
|
|
89
|
-
* Check whether `.gsd` is covered by the project's `.gitignore`.
|
|
90
|
-
*
|
|
91
|
-
* Uses `git check-ignore` for accurate evaluation — this respects nested
|
|
92
|
-
* .gitignore files, global gitignore, and negation patterns. Returns true
|
|
93
|
-
* only when git would actually ignore `.gsd/`.
|
|
94
|
-
*
|
|
95
|
-
* Returns false (not ignored) if:
|
|
96
|
-
* - No `.gitignore` exists
|
|
97
|
-
* - `.gsd` is not listed in any active ignore rule
|
|
98
|
-
* - Not a git repo or git is unavailable
|
|
99
|
-
*/
|
|
100
|
-
export function isGsdGitignored(basePath: string): boolean {
|
|
101
|
-
// Check both `.gsd` and `.gsd/` because `.gsd/` in .gitignore (trailing
|
|
102
|
-
// slash = directory-only pattern) only matches the directory form. Using
|
|
103
|
-
// both paths covers all gitignore pattern variants.
|
|
104
|
-
for (const path of [".gsd", ".gsd/"]) {
|
|
105
|
-
try {
|
|
106
|
-
// git check-ignore exits 0 when the path IS ignored, 1 when it is NOT.
|
|
107
|
-
execFileSync("git", ["check-ignore", "-q", path], {
|
|
108
|
-
cwd: basePath,
|
|
109
|
-
stdio: "pipe",
|
|
110
|
-
env: GIT_NO_PROMPT_ENV,
|
|
111
|
-
});
|
|
112
|
-
return true; // exit 0 → .gsd is ignored
|
|
113
|
-
} catch {
|
|
114
|
-
// exit 1 → this form is NOT ignored, try the other
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
return false; // neither form is ignored (or git unavailable)
|
|
118
|
-
}
|
|
119
|
-
|
|
120
87
|
/**
|
|
121
88
|
* Check whether `.gsd/` contains files tracked by git.
|
|
122
89
|
* If so, the project intentionally keeps `.gsd/` in version control
|
|
@@ -10,7 +10,6 @@ import { existsSync, copyFileSync, mkdirSync, realpathSync } from "node:fs";
|
|
|
10
10
|
import { dirname } from "node:path";
|
|
11
11
|
import type { Decision, Requirement, GateRow, GateId, GateScope, GateStatus, GateVerdict } from "./types.js";
|
|
12
12
|
import { GSDError, GSD_STALE_STATE } from "./errors.js";
|
|
13
|
-
import { logError } from "./workflow-logger.js";
|
|
14
13
|
|
|
15
14
|
const _require = createRequire(import.meta.url);
|
|
16
15
|
|
|
@@ -779,21 +778,8 @@ export function openDatabase(path: string): boolean {
|
|
|
779
778
|
try {
|
|
780
779
|
initSchema(adapter, fileBacked);
|
|
781
780
|
} catch (err) {
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
if (fileBacked && err instanceof Error && err.message?.includes("malformed")) {
|
|
785
|
-
try {
|
|
786
|
-
adapter.exec("VACUUM");
|
|
787
|
-
initSchema(adapter, fileBacked);
|
|
788
|
-
process.stderr.write("gsd-db: recovered corrupt database via VACUUM\n");
|
|
789
|
-
} catch (retryErr) {
|
|
790
|
-
try { adapter.close(); } catch { /* swallow */ }
|
|
791
|
-
throw retryErr;
|
|
792
|
-
}
|
|
793
|
-
} else {
|
|
794
|
-
try { adapter.close(); } catch { /* swallow */ }
|
|
795
|
-
throw err;
|
|
796
|
-
}
|
|
781
|
+
try { adapter.close(); } catch { /* swallow */ }
|
|
782
|
+
throw err;
|
|
797
783
|
}
|
|
798
784
|
|
|
799
785
|
currentDb = adapter;
|
|
@@ -1138,11 +1124,10 @@ export function insertMilestone(m: {
|
|
|
1138
1124
|
});
|
|
1139
1125
|
}
|
|
1140
1126
|
|
|
1141
|
-
export function upsertMilestonePlanning(milestoneId: string, planning: Partial<MilestonePlanningRecord
|
|
1127
|
+
export function upsertMilestonePlanning(milestoneId: string, planning: Partial<MilestonePlanningRecord>): void {
|
|
1142
1128
|
if (!currentDb) throw new GSDError(GSD_STALE_STATE, "gsd-db: No database open");
|
|
1143
1129
|
currentDb.prepare(
|
|
1144
1130
|
`UPDATE milestones SET
|
|
1145
|
-
title = COALESCE(:title, title),
|
|
1146
1131
|
vision = COALESCE(:vision, vision),
|
|
1147
1132
|
success_criteria = COALESCE(:success_criteria, success_criteria),
|
|
1148
1133
|
key_risks = COALESCE(:key_risks, key_risks),
|
|
@@ -1157,7 +1142,6 @@ export function upsertMilestonePlanning(milestoneId: string, planning: Partial<M
|
|
|
1157
1142
|
WHERE id = :id`,
|
|
1158
1143
|
).run({
|
|
1159
1144
|
":id": milestoneId,
|
|
1160
|
-
":title": title ?? null,
|
|
1161
1145
|
":vision": planning.vision ?? null,
|
|
1162
1146
|
":success_criteria": planning.successCriteria ? JSON.stringify(planning.successCriteria) : null,
|
|
1163
1147
|
":key_risks": planning.keyRisks ? JSON.stringify(planning.keyRisks) : null,
|
|
@@ -1535,26 +1519,6 @@ export function insertVerificationEvidence(e: {
|
|
|
1535
1519
|
});
|
|
1536
1520
|
}
|
|
1537
1521
|
|
|
1538
|
-
export interface VerificationEvidenceRow {
|
|
1539
|
-
id: number;
|
|
1540
|
-
task_id: string;
|
|
1541
|
-
slice_id: string;
|
|
1542
|
-
milestone_id: string;
|
|
1543
|
-
command: string;
|
|
1544
|
-
exit_code: number;
|
|
1545
|
-
verdict: string;
|
|
1546
|
-
duration_ms: number;
|
|
1547
|
-
created_at: string;
|
|
1548
|
-
}
|
|
1549
|
-
|
|
1550
|
-
export function getVerificationEvidence(milestoneId: string, sliceId: string, taskId: string): VerificationEvidenceRow[] {
|
|
1551
|
-
if (!currentDb) return [];
|
|
1552
|
-
const rows = currentDb.prepare(
|
|
1553
|
-
"SELECT * FROM verification_evidence WHERE milestone_id = :mid AND slice_id = :sid AND task_id = :tid ORDER BY id",
|
|
1554
|
-
).all({ ":mid": milestoneId, ":sid": sliceId, ":tid": taskId });
|
|
1555
|
-
return rows as unknown as VerificationEvidenceRow[];
|
|
1556
|
-
}
|
|
1557
|
-
|
|
1558
1522
|
export interface MilestoneRow {
|
|
1559
1523
|
id: string;
|
|
1560
1524
|
title: string;
|
|
@@ -1774,7 +1738,7 @@ export function copyWorktreeDb(srcDbPath: string, destDbPath: string): boolean {
|
|
|
1774
1738
|
copyFileSync(srcDbPath, destDbPath);
|
|
1775
1739
|
return true;
|
|
1776
1740
|
} catch (err) {
|
|
1777
|
-
|
|
1741
|
+
process.stderr.write(`gsd-db: failed to copy DB to worktree: ${(err as Error).message}\n`);
|
|
1778
1742
|
return false;
|
|
1779
1743
|
}
|
|
1780
1744
|
}
|
|
@@ -1806,13 +1770,13 @@ export function reconcileWorktreeDb(
|
|
|
1806
1770
|
// ATTACH DATABASE doesn't support parameterized paths in all providers,
|
|
1807
1771
|
// so we use strict allowlist validation instead.
|
|
1808
1772
|
if (/['";\x00]/.test(worktreeDbPath)) {
|
|
1809
|
-
|
|
1773
|
+
process.stderr.write("gsd-db: worktree DB reconciliation failed: path contains unsafe characters\n");
|
|
1810
1774
|
return zero;
|
|
1811
1775
|
}
|
|
1812
1776
|
if (!currentDb) {
|
|
1813
1777
|
const opened = openDatabase(mainDbPath);
|
|
1814
1778
|
if (!opened) {
|
|
1815
|
-
|
|
1779
|
+
process.stderr.write("gsd-db: worktree DB reconciliation failed: cannot open main DB\n");
|
|
1816
1780
|
return zero;
|
|
1817
1781
|
}
|
|
1818
1782
|
}
|
|
@@ -1946,7 +1910,7 @@ export function reconcileWorktreeDb(
|
|
|
1946
1910
|
try { adapter.exec("DETACH DATABASE wt"); } catch { /* best effort */ }
|
|
1947
1911
|
}
|
|
1948
1912
|
} catch (err) {
|
|
1949
|
-
|
|
1913
|
+
process.stderr.write(`gsd-db: worktree DB reconciliation failed: ${(err as Error).message}\n`);
|
|
1950
1914
|
return { ...zero, conflicts };
|
|
1951
1915
|
}
|
|
1952
1916
|
}
|