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
|
@@ -1,53 +1,19 @@
|
|
|
1
1
|
import { join } from "node:path";
|
|
2
2
|
import { mkdirSync, existsSync, readFileSync, unlinkSync } from "node:fs";
|
|
3
|
-
import { logWarning, logError } from "./workflow-logger.js";
|
|
4
3
|
import { readEvents, findForkPoint, appendEvent, getSessionId } from "./workflow-events.js";
|
|
5
4
|
import type { WorkflowEvent } from "./workflow-events.js";
|
|
6
5
|
import {
|
|
7
6
|
transaction,
|
|
8
7
|
updateTaskStatus,
|
|
9
8
|
updateSliceStatus,
|
|
10
|
-
getSliceTasks,
|
|
11
9
|
insertVerificationEvidence,
|
|
12
10
|
upsertDecision,
|
|
13
11
|
openDatabase,
|
|
14
12
|
} from "./gsd-db.js";
|
|
15
|
-
import { isClosedStatus } from "./status-guards.js";
|
|
16
13
|
import { writeManifest } from "./workflow-manifest.js";
|
|
17
14
|
import { atomicWriteSync } from "./atomic-write.js";
|
|
18
15
|
import { acquireSyncLock, releaseSyncLock } from "./sync-lock.js";
|
|
19
16
|
|
|
20
|
-
// ─── Replay Helpers ──────────────────────────────────────────────────────────
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Replay a complete_slice event with task validation.
|
|
24
|
-
*
|
|
25
|
-
* #2945 Bug 2: The original replay blindly called updateSliceStatus("done")
|
|
26
|
-
* without checking whether all tasks in the slice are actually complete.
|
|
27
|
-
* During API overload or partial execution, a complete_slice event could
|
|
28
|
-
* be logged even when tasks were skipped, causing the milestone completion
|
|
29
|
-
* guard to see the slice as "done" and allow premature milestone completion.
|
|
30
|
-
*
|
|
31
|
-
* This function validates that every task in the slice has a closed status
|
|
32
|
-
* before marking the slice as done. If any task is still pending, the slice
|
|
33
|
-
* status is left unchanged.
|
|
34
|
-
*/
|
|
35
|
-
export function replaySliceComplete(milestoneId: string, sliceId: string, ts: string): void {
|
|
36
|
-
const tasks = getSliceTasks(milestoneId, sliceId);
|
|
37
|
-
// If there are tasks and any are not closed, skip the status update
|
|
38
|
-
if (tasks.length > 0) {
|
|
39
|
-
const incompleteTasks = tasks.filter(t => !isClosedStatus(t.status));
|
|
40
|
-
if (incompleteTasks.length > 0) {
|
|
41
|
-
process.stderr.write(
|
|
42
|
-
`[gsd] reconcile: skipping complete_slice replay for ${sliceId} — ` +
|
|
43
|
-
`${incompleteTasks.length} task(s) still pending\n`,
|
|
44
|
-
);
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
updateSliceStatus(milestoneId, sliceId, "done", ts);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
17
|
// ─── Public Types ─────────────────────────────────────────────────────────────
|
|
52
18
|
|
|
53
19
|
export interface ConflictEntry {
|
|
@@ -116,8 +82,7 @@ function replayEvents(events: WorkflowEvent[]): void {
|
|
|
116
82
|
case "complete_slice": {
|
|
117
83
|
const milestoneId = p["milestoneId"] as string;
|
|
118
84
|
const sliceId = p["sliceId"] as string;
|
|
119
|
-
|
|
120
|
-
replaySliceComplete(milestoneId, sliceId, event.ts);
|
|
85
|
+
updateSliceStatus(milestoneId, sliceId, "done", event.ts);
|
|
121
86
|
break;
|
|
122
87
|
}
|
|
123
88
|
case "plan_slice": {
|
|
@@ -309,7 +274,9 @@ export function reconcileWorktreeLogs(
|
|
|
309
274
|
// Acquire advisory lock to prevent concurrent reconcile + append races
|
|
310
275
|
const lock = acquireSyncLock(mainBasePath);
|
|
311
276
|
if (!lock.acquired) {
|
|
312
|
-
|
|
277
|
+
process.stderr.write(
|
|
278
|
+
`[gsd] reconcile: could not acquire sync lock — another reconciliation may be in progress\n`,
|
|
279
|
+
);
|
|
313
280
|
return { autoMerged: 0, conflicts: [] };
|
|
314
281
|
}
|
|
315
282
|
|
|
@@ -348,7 +315,9 @@ function _reconcileWorktreeLogsInner(
|
|
|
348
315
|
if (conflicts.length > 0) {
|
|
349
316
|
// D-04: atomic all-or-nothing — block entire merge
|
|
350
317
|
writeConflictsFile(mainBasePath, conflicts, worktreeBasePath);
|
|
351
|
-
|
|
318
|
+
process.stderr.write(
|
|
319
|
+
`[gsd] reconcile: ${conflicts.length} conflict(s) detected — see ${join(mainBasePath, ".gsd", "CONFLICTS.md")}\n`,
|
|
320
|
+
);
|
|
352
321
|
return { autoMerged: 0, conflicts };
|
|
353
322
|
}
|
|
354
323
|
|
|
@@ -372,7 +341,9 @@ function _reconcileWorktreeLogsInner(
|
|
|
372
341
|
try {
|
|
373
342
|
writeManifest(mainBasePath);
|
|
374
343
|
} catch (err) {
|
|
375
|
-
|
|
344
|
+
process.stderr.write(
|
|
345
|
+
`[gsd] reconcile: manifest write failed (non-fatal): ${(err as Error).message}\n`,
|
|
346
|
+
);
|
|
376
347
|
}
|
|
377
348
|
|
|
378
349
|
return { autoMerged: merged.length, conflicts: [] };
|
|
@@ -11,7 +11,6 @@ import {
|
|
|
11
11
|
resolveTasksDir,
|
|
12
12
|
} from "./paths.js";
|
|
13
13
|
import { deriveState } from "./state.js";
|
|
14
|
-
import { extractVerdict } from "./verdict-parser.js";
|
|
15
14
|
import { milestoneIdSort, findMilestoneIds } from "./guided-flow.js";
|
|
16
15
|
import type { RiskLevel } from "./types.js";
|
|
17
16
|
import { getSliceBranchName, detectWorktreeName } from "./worktree.js";
|
|
@@ -43,10 +42,6 @@ export interface WorkspaceMilestoneTarget {
|
|
|
43
42
|
id: string;
|
|
44
43
|
title: string;
|
|
45
44
|
roadmapPath?: string;
|
|
46
|
-
/** Authoritative milestone lifecycle status from the GSD state registry. */
|
|
47
|
-
status?: "complete" | "active" | "pending" | "parked";
|
|
48
|
-
/** Milestone validation verdict, when validation has been performed. */
|
|
49
|
-
validationVerdict?: "pass" | "needs-attention" | "needs-remediation";
|
|
50
45
|
slices: WorkspaceSliceTarget[];
|
|
51
46
|
}
|
|
52
47
|
|
|
@@ -197,31 +192,6 @@ export async function indexWorkspace(basePath: string, opts: IndexWorkspaceOptio
|
|
|
197
192
|
phase: state.phase,
|
|
198
193
|
};
|
|
199
194
|
|
|
200
|
-
// Enrich milestones with authoritative status from state registry (#2807)
|
|
201
|
-
if (state.registry) {
|
|
202
|
-
const registryMap = new Map(state.registry.map(e => [e.id, e]));
|
|
203
|
-
for (const milestone of milestones) {
|
|
204
|
-
const entry = registryMap.get(milestone.id);
|
|
205
|
-
if (entry) {
|
|
206
|
-
milestone.status = entry.status;
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
// Populate validationVerdict from VALIDATION files (#2807)
|
|
212
|
-
for (const milestone of milestones) {
|
|
213
|
-
const validationPath = resolveMilestoneFile(basePath, milestone.id, "VALIDATION");
|
|
214
|
-
if (validationPath) {
|
|
215
|
-
const validationContent = await loadFile(validationPath);
|
|
216
|
-
if (validationContent) {
|
|
217
|
-
const verdict = extractVerdict(validationContent);
|
|
218
|
-
if (verdict === "pass" || verdict === "needs-attention" || verdict === "needs-remediation") {
|
|
219
|
-
milestone.validationVerdict = verdict;
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
|
|
225
195
|
const scopes: WorkspaceScopeTarget[] = [{ scope: "project", label: "project", kind: "project" }];
|
|
226
196
|
for (const milestone of milestones) {
|
|
227
197
|
scopes.push({ scope: milestone.id, label: `${milestone.id}: ${milestone.title}`, kind: "milestone" });
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* 4. remove() — git worktree remove + branch cleanup
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
import { existsSync,
|
|
18
|
+
import { existsSync, mkdirSync, readFileSync, realpathSync, rmSync } from "node:fs";
|
|
19
19
|
import { execFileSync } from "node:child_process";
|
|
20
20
|
import { join, resolve, sep } from "node:path";
|
|
21
21
|
import { GSDError, GSD_PARSE_ERROR, GSD_STALE_STATE, GSD_LOCK_HELD, GSD_GIT_ERROR, GSD_MERGE_CONFLICT } from "./errors.js";
|
|
@@ -277,78 +277,6 @@ export function listWorktrees(basePath: string): WorktreeInfo[] {
|
|
|
277
277
|
return worktrees;
|
|
278
278
|
}
|
|
279
279
|
|
|
280
|
-
// ─── Nested .git Detection (#2616) ──────────────────────────────────────
|
|
281
|
-
//
|
|
282
|
-
// Scaffolding tools (create-next-app, cargo init, etc.) create nested .git
|
|
283
|
-
// directories inside worktrees. Git records these as gitlinks (mode 160000)
|
|
284
|
-
// without a .gitmodules entry — so worktree cleanup destroys the only copy
|
|
285
|
-
// of their object database, causing permanent silent data loss.
|
|
286
|
-
|
|
287
|
-
/** Directories to skip when scanning for nested .git dirs. */
|
|
288
|
-
const NESTED_GIT_SKIP_DIRS = new Set([
|
|
289
|
-
".git", ".gsd", "node_modules", ".next", ".nuxt", "dist", "build",
|
|
290
|
-
"__pycache__", ".tox", ".venv", "venv", "target", "vendor",
|
|
291
|
-
]);
|
|
292
|
-
|
|
293
|
-
/**
|
|
294
|
-
* Recursively find nested .git directories inside a worktree root.
|
|
295
|
-
* Returns paths to directories that contain their own .git (directory, not file).
|
|
296
|
-
* Skips node_modules, .gsd, and other non-project directories for performance.
|
|
297
|
-
*
|
|
298
|
-
* A nested .git *directory* (not a .git file — which is a legitimate worktree
|
|
299
|
-
* pointer) indicates a scaffolded repo that will become an orphaned gitlink.
|
|
300
|
-
*/
|
|
301
|
-
export function findNestedGitDirs(rootPath: string): string[] {
|
|
302
|
-
const results: string[] = [];
|
|
303
|
-
|
|
304
|
-
function walk(dir: string, depth: number): void {
|
|
305
|
-
// Cap recursion depth to avoid runaway scanning
|
|
306
|
-
if (depth > 10) return;
|
|
307
|
-
|
|
308
|
-
let entries: string[];
|
|
309
|
-
try {
|
|
310
|
-
entries = readdirSync(dir);
|
|
311
|
-
} catch {
|
|
312
|
-
return; // Permission denied, broken symlink, etc.
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
for (const entry of entries) {
|
|
316
|
-
if (NESTED_GIT_SKIP_DIRS.has(entry)) continue;
|
|
317
|
-
|
|
318
|
-
const fullPath = join(dir, entry);
|
|
319
|
-
|
|
320
|
-
// Only follow real directories, not symlinks
|
|
321
|
-
let stat;
|
|
322
|
-
try {
|
|
323
|
-
stat = lstatSync(fullPath);
|
|
324
|
-
} catch {
|
|
325
|
-
continue;
|
|
326
|
-
}
|
|
327
|
-
if (!stat.isDirectory()) continue;
|
|
328
|
-
|
|
329
|
-
// Check if this directory contains a .git *directory* (not a .git file).
|
|
330
|
-
// A .git file is a worktree pointer and is legitimate.
|
|
331
|
-
// A .git directory is a standalone repo created by scaffolding.
|
|
332
|
-
const innerGit = join(fullPath, ".git");
|
|
333
|
-
try {
|
|
334
|
-
const innerStat = lstatSync(innerGit);
|
|
335
|
-
if (innerStat.isDirectory()) {
|
|
336
|
-
results.push(fullPath);
|
|
337
|
-
// Don't recurse into the nested repo — we found what we need
|
|
338
|
-
continue;
|
|
339
|
-
}
|
|
340
|
-
} catch {
|
|
341
|
-
// No .git here — continue scanning
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
walk(fullPath, depth + 1);
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
walk(rootPath, 0);
|
|
349
|
-
return results;
|
|
350
|
-
}
|
|
351
|
-
|
|
352
280
|
/**
|
|
353
281
|
* Remove a worktree and optionally delete its branch.
|
|
354
282
|
* If the process is currently inside the worktree, chdir out first.
|
|
@@ -427,30 +355,6 @@ export function removeWorktree(
|
|
|
427
355
|
}
|
|
428
356
|
}
|
|
429
357
|
|
|
430
|
-
// Nested .git safety (#2616): detect nested .git directories created by
|
|
431
|
-
// scaffolding tools (create-next-app, cargo init, etc.). These produce
|
|
432
|
-
// gitlink entries (mode 160000) without .gitmodules — cleanup would destroy
|
|
433
|
-
// the only copy of the nested object database, causing permanent data loss.
|
|
434
|
-
// Fix: remove the nested .git dirs so git tracks the files as regular content.
|
|
435
|
-
const nestedGitDirs = findNestedGitDirs(resolvedWtPath);
|
|
436
|
-
if (nestedGitDirs.length > 0) {
|
|
437
|
-
for (const nestedDir of nestedGitDirs) {
|
|
438
|
-
const nestedGitPath = join(nestedDir, ".git");
|
|
439
|
-
try {
|
|
440
|
-
rmSync(nestedGitPath, { recursive: true, force: true });
|
|
441
|
-
logWarning("reconcile",
|
|
442
|
-
`Removed nested .git directory from scaffolded project to prevent data loss (#2616)`,
|
|
443
|
-
{ worktree: name, nestedRepo: nestedDir },
|
|
444
|
-
);
|
|
445
|
-
} catch {
|
|
446
|
-
logWarning("reconcile",
|
|
447
|
-
`Failed to remove nested .git directory — files may be lost as orphaned gitlink`,
|
|
448
|
-
{ worktree: name, nestedRepo: nestedDir },
|
|
449
|
-
);
|
|
450
|
-
}
|
|
451
|
-
}
|
|
452
|
-
}
|
|
453
|
-
|
|
454
358
|
// Remove worktree: try non-force first when submodules have changes,
|
|
455
359
|
// falling back to force only after submodule state has been preserved.
|
|
456
360
|
const useForce = hasSubmoduleChanges ? false : force;
|
|
@@ -461,29 +365,6 @@ export function removeWorktree(
|
|
|
461
365
|
try { nativeWorktreeRemove(basePath, resolvedWtPath, true); } catch { /* may fail */ }
|
|
462
366
|
}
|
|
463
367
|
|
|
464
|
-
// (#2821) If the worktree directory STILL exists after both native removal
|
|
465
|
-
// attempts (e.g. untracked files like ASSESSMENT/UAT-RESULT prevent git
|
|
466
|
-
// worktree remove), force-remove the git internal worktree metadata first,
|
|
467
|
-
// then remove the filesystem directory. Without this, the .git/worktrees/<name>
|
|
468
|
-
// lock prevents rmSync from cleaning up, and the orphaned worktree directory
|
|
469
|
-
// causes every subsequent `/gsd auto` to re-enter the stale worktree.
|
|
470
|
-
if (existsSync(resolvedWtPath)) {
|
|
471
|
-
try {
|
|
472
|
-
const wtInternalDir = join(basePath, ".git", "worktrees", name);
|
|
473
|
-
if (existsSync(wtInternalDir)) {
|
|
474
|
-
rmSync(wtInternalDir, { recursive: true, force: true });
|
|
475
|
-
}
|
|
476
|
-
rmSync(resolvedWtPath, { recursive: true, force: true });
|
|
477
|
-
} catch {
|
|
478
|
-
logWarning(
|
|
479
|
-
"reconcile",
|
|
480
|
-
`Worktree directory could not be removed after git internal cleanup: ${resolvedWtPath}. ` +
|
|
481
|
-
`Manual cleanup: rm -rf "${resolvedWtPath.replaceAll("\\", "/")}"`,
|
|
482
|
-
{ worktree: name },
|
|
483
|
-
);
|
|
484
|
-
}
|
|
485
|
-
}
|
|
486
|
-
|
|
487
368
|
// Prune stale entries so git knows the worktree is gone
|
|
488
369
|
nativeWorktreePrune(basePath);
|
|
489
370
|
|
|
@@ -350,13 +350,7 @@ export class WorktreeResolver {
|
|
|
350
350
|
data: { milestoneId, mode },
|
|
351
351
|
});
|
|
352
352
|
|
|
353
|
-
|
|
354
|
-
// regardless of the current isolation config. This prevents data loss when
|
|
355
|
-
// the default isolation mode changes between versions (e.g., "worktree" ->
|
|
356
|
-
// "none"): the worktree branch still holds real commits that need merging.
|
|
357
|
-
const inWorktree = this.deps.isInAutoWorktree(this.s.basePath) && this.s.originalBasePath;
|
|
358
|
-
|
|
359
|
-
if (mode === "none" && !inWorktree) {
|
|
353
|
+
if (mode === "none") {
|
|
360
354
|
debugLog("WorktreeResolver", {
|
|
361
355
|
action: "mergeAndExit",
|
|
362
356
|
milestoneId,
|
|
@@ -367,7 +361,8 @@ export class WorktreeResolver {
|
|
|
367
361
|
}
|
|
368
362
|
|
|
369
363
|
if (
|
|
370
|
-
mode === "worktree" ||
|
|
364
|
+
mode === "worktree" ||
|
|
365
|
+
(this.deps.isInAutoWorktree(this.s.basePath) && this.s.originalBasePath)
|
|
371
366
|
) {
|
|
372
367
|
this._mergeWorktreeMode(milestoneId, ctx);
|
|
373
368
|
} else if (mode === "branch") {
|
|
@@ -437,20 +432,6 @@ export class WorktreeResolver {
|
|
|
437
432
|
milestoneId,
|
|
438
433
|
roadmapContent,
|
|
439
434
|
);
|
|
440
|
-
|
|
441
|
-
// #2945 Bug 3: mergeMilestoneToMain performs best-effort worktree
|
|
442
|
-
// cleanup internally (step 12), but it can silently fail on Windows
|
|
443
|
-
// or when the worktree directory is locked. Perform a secondary
|
|
444
|
-
// teardown here to ensure the worktree is properly cleaned up.
|
|
445
|
-
// This is idempotent — if the worktree was already removed,
|
|
446
|
-
// teardownAutoWorktree handles the no-op case gracefully.
|
|
447
|
-
try {
|
|
448
|
-
this.deps.teardownAutoWorktree(originalBase, milestoneId);
|
|
449
|
-
} catch {
|
|
450
|
-
// Best-effort — the primary cleanup in mergeMilestoneToMain may
|
|
451
|
-
// have already removed the worktree.
|
|
452
|
-
}
|
|
453
|
-
|
|
454
435
|
if (mergeResult.codeFilesChanged) {
|
|
455
436
|
ctx.notify(
|
|
456
437
|
`Milestone ${milestoneId} merged to main.${mergeResult.pushed ? " Pushed to remote." : ""}`,
|
|
@@ -111,11 +111,7 @@ function readConfigs(): McpServerConfig[] {
|
|
|
111
111
|
}
|
|
112
112
|
|
|
113
113
|
function getServerConfig(name: string): McpServerConfig | undefined {
|
|
114
|
-
|
|
115
|
-
return readConfigs().find((s) =>
|
|
116
|
-
s.name === trimmed ||
|
|
117
|
-
s.name.toLowerCase() === trimmed.toLowerCase(),
|
|
118
|
-
);
|
|
114
|
+
return readConfigs().find((s) => s.name === name);
|
|
119
115
|
}
|
|
120
116
|
|
|
121
117
|
/** Resolve ${VAR} references in env values against process.env. */
|
|
@@ -135,14 +131,12 @@ function resolveEnv(env: Record<string, string>): Record<string, string> {
|
|
|
135
131
|
}
|
|
136
132
|
|
|
137
133
|
async function getOrConnect(name: string, signal?: AbortSignal): Promise<Client> {
|
|
134
|
+
const existing = connections.get(name);
|
|
135
|
+
if (existing) return existing.client;
|
|
136
|
+
|
|
138
137
|
const config = getServerConfig(name);
|
|
139
138
|
if (!config) throw new Error(`Unknown MCP server: "${name}". Use mcp_servers to list available servers.`);
|
|
140
139
|
|
|
141
|
-
// Always use config.name as the canonical cache key so that variant
|
|
142
|
-
// casing / whitespace still hits the same connection.
|
|
143
|
-
const existing = connections.get(config.name);
|
|
144
|
-
if (existing) return existing.client;
|
|
145
|
-
|
|
146
140
|
const client = new Client({ name: "gsd", version: "1.0.0" });
|
|
147
141
|
let transport: StdioClientTransport | StreamableHTTPClientTransport;
|
|
148
142
|
|
|
@@ -157,15 +151,15 @@ async function getOrConnect(name: string, signal?: AbortSignal): Promise<Client>
|
|
|
157
151
|
} else if (config.transport === "http" && config.url) {
|
|
158
152
|
const resolvedUrl = config.url.replace(
|
|
159
153
|
/\$\{([^}]+)\}/g,
|
|
160
|
-
(_,
|
|
154
|
+
(_, name) => process.env[name] ?? "",
|
|
161
155
|
);
|
|
162
156
|
transport = new StreamableHTTPClientTransport(new URL(resolvedUrl));
|
|
163
157
|
} else {
|
|
164
|
-
throw new Error(`Server "${
|
|
158
|
+
throw new Error(`Server "${name}" has unsupported transport: ${config.transport}`);
|
|
165
159
|
}
|
|
166
160
|
|
|
167
161
|
await client.connect(transport, { signal, timeout: 30000 });
|
|
168
|
-
connections.set(
|
|
162
|
+
connections.set(name, { client, transport });
|
|
169
163
|
return client;
|
|
170
164
|
}
|
|
171
165
|
|
|
@@ -8,6 +8,6 @@
|
|
|
8
8
|
"provides": {
|
|
9
9
|
"tools": ["search-the-web", "fetch_page", "search_and_read", "web_search"],
|
|
10
10
|
"commands": ["search-provider"],
|
|
11
|
-
"hooks": ["
|
|
11
|
+
"hooks": ["model_select", "before_provider_request"]
|
|
12
12
|
}
|
|
13
13
|
}
|
|
@@ -105,7 +105,7 @@ export interface WrapUpOptions {
|
|
|
105
105
|
// ─── Constants ────────────────────────────────────────────────────────────────
|
|
106
106
|
|
|
107
107
|
const OTHER_OPTION_LABEL = "None of the above";
|
|
108
|
-
const OTHER_OPTION_DESCRIPTION = "
|
|
108
|
+
const OTHER_OPTION_DESCRIPTION = "Press TAB to add optional notes.";
|
|
109
109
|
|
|
110
110
|
// ─── Wrap-up screen ───────────────────────────────────────────────────────────
|
|
111
111
|
|
|
@@ -295,17 +295,6 @@ export async function showInterviewRound(
|
|
|
295
295
|
states[currentIdx].committedIndex = states[currentIdx].cursorIndex;
|
|
296
296
|
}
|
|
297
297
|
|
|
298
|
-
// Auto-open the notes field when "None of the above" is selected
|
|
299
|
-
// so the user can immediately provide a free-text explanation
|
|
300
|
-
// instead of being trapped in a re-asking loop (bug #2715).
|
|
301
|
-
if (!isMultiSelect(currentIdx) && states[currentIdx].cursorIndex === noneOrDoneIdx(currentIdx)) {
|
|
302
|
-
states[currentIdx].notesVisible = true;
|
|
303
|
-
focusNotes = true;
|
|
304
|
-
loadStateToEditor();
|
|
305
|
-
refresh();
|
|
306
|
-
return;
|
|
307
|
-
}
|
|
308
|
-
|
|
309
298
|
if (isMultiQuestion && currentIdx < questions.length - 1) {
|
|
310
299
|
let next = currentIdx + 1;
|
|
311
300
|
for (let i = 0; i < questions.length; i++) {
|
|
@@ -7,11 +7,9 @@ description: Create, debug, and iterate on GSD extensions (TypeScript modules th
|
|
|
7
7
|
|
|
8
8
|
**Extensions are TypeScript modules** that hook into GSD's runtime (built on pi). They export a default function receiving `ExtensionAPI` and use it to subscribe to events, register tools/commands/shortcuts, and interact with the session.
|
|
9
9
|
|
|
10
|
-
**GSD extension paths
|
|
11
|
-
- Global: `~/.
|
|
12
|
-
- Project-local: `.gsd/extensions/*.ts` or `.gsd/extensions/*/index.ts`
|
|
13
|
-
|
|
14
|
-
Note: `~/.gsd/agent/extensions/` is reserved for bundled extensions synced from the gsd-pi package. Community extensions placed there are silently ignored by the loader.
|
|
10
|
+
**GSD extension paths:**
|
|
11
|
+
- Global extensions: `~/.gsd/agent/extensions/*.ts` or `~/.gsd/agent/extensions/*/index.ts`
|
|
12
|
+
- Project-local extensions: `.gsd/extensions/*.ts` or `.gsd/extensions/*/index.ts`
|
|
15
13
|
|
|
16
14
|
**The three primitives:**
|
|
17
15
|
1. **Events** — Listen and react (`pi.on("event", handler)`). Can block tool calls, modify messages, inject context.
|
|
@@ -26,12 +26,11 @@ Non-negotiable rules and common gotchas when building GSD extensions.
|
|
|
26
26
|
</common_patterns>
|
|
27
27
|
|
|
28
28
|
<gsd_paths>
|
|
29
|
-
**GSD extension paths
|
|
30
|
-
- Global: `~/.
|
|
31
|
-
- Global (subdir): `~/.
|
|
29
|
+
**GSD extension paths:**
|
|
30
|
+
- Global: `~/.gsd/agent/extensions/*.ts`
|
|
31
|
+
- Global (subdir): `~/.gsd/agent/extensions/*/index.ts`
|
|
32
32
|
- Project-local: `.gsd/extensions/*.ts`
|
|
33
33
|
- Project-local (subdir): `.gsd/extensions/*/index.ts`
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
Community extensions placed there are silently ignored by the loader.
|
|
35
|
+
The upstream pi docs reference `~/.pi` paths — GSD uses `~/.gsd` everywhere instead.
|
|
37
36
|
</gsd_paths>
|
|
@@ -14,7 +14,7 @@ Read the reference file for the specific capability being added:
|
|
|
14
14
|
## Step 1: Identify the Extension
|
|
15
15
|
|
|
16
16
|
Locate the existing extension file. Check:
|
|
17
|
-
- `~/.
|
|
17
|
+
- `~/.gsd/agent/extensions/` (global)
|
|
18
18
|
- `.gsd/extensions/` (project-local)
|
|
19
19
|
|
|
20
20
|
Read the current extension code to understand its structure.
|
|
@@ -28,7 +28,7 @@ If the extension needs new imports, add them at the top of the file.
|
|
|
28
28
|
## Step 3: Handle Structural Changes
|
|
29
29
|
|
|
30
30
|
**Single file → Directory**: If the extension is outgrowing a single file:
|
|
31
|
-
1. Create `~/.
|
|
31
|
+
1. Create `~/.gsd/agent/extensions/my-extension/`
|
|
32
32
|
2. Move the file to `index.ts`
|
|
33
33
|
3. Extract helpers to separate files
|
|
34
34
|
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
## Step 1: Determine Scope and Placement
|
|
13
13
|
|
|
14
14
|
Ask the user:
|
|
15
|
-
- **Global** (`~/.
|
|
15
|
+
- **Global** (`~/.gsd/agent/extensions/`) — Available in all GSD sessions
|
|
16
16
|
- **Project-local** (`.gsd/extensions/`) — Available only in this project
|
|
17
17
|
|
|
18
18
|
## Step 2: Determine Extension Capabilities
|
|
@@ -36,12 +36,12 @@ Identify what the extension needs from the user's description:
|
|
|
36
36
|
|
|
37
37
|
**Single file** — for small extensions (1-2 tools/commands, simple hooks):
|
|
38
38
|
```
|
|
39
|
-
~/.
|
|
39
|
+
~/.gsd/agent/extensions/my-extension.ts
|
|
40
40
|
```
|
|
41
41
|
|
|
42
42
|
**Directory with index.ts** — for multi-file extensions:
|
|
43
43
|
```
|
|
44
|
-
~/.
|
|
44
|
+
~/.gsd/agent/extensions/my-extension/
|
|
45
45
|
├── index.ts
|
|
46
46
|
├── tools.ts
|
|
47
47
|
└── utils.ts
|
|
@@ -49,7 +49,7 @@ Identify what the extension needs from the user's description:
|
|
|
49
49
|
|
|
50
50
|
**Package with dependencies** — when npm packages are needed:
|
|
51
51
|
```
|
|
52
|
-
~/.
|
|
52
|
+
~/.gsd/agent/extensions/my-extension/
|
|
53
53
|
├── package.json
|
|
54
54
|
├── src/index.ts
|
|
55
55
|
└── node_modules/
|
|
@@ -32,14 +32,12 @@ gsd -e ./path/to/extension.ts
|
|
|
32
32
|
|
|
33
33
|
## Step 3: Verify File Location
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
- `~/.
|
|
37
|
-
- `~/.
|
|
35
|
+
Extensions must be in auto-discovery paths:
|
|
36
|
+
- `~/.gsd/agent/extensions/*.ts`
|
|
37
|
+
- `~/.gsd/agent/extensions/*/index.ts`
|
|
38
38
|
- `.gsd/extensions/*.ts`
|
|
39
39
|
- `.gsd/extensions/*/index.ts`
|
|
40
40
|
|
|
41
|
-
Note: `~/.gsd/agent/extensions/` is reserved for bundled extensions synced from the gsd-pi package.
|
|
42
|
-
|
|
43
41
|
The file must `export default function(pi: ExtensionAPI) { ... }`.
|
|
44
42
|
|
|
45
43
|
## Step 4: Check for Common Mistakes
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Milestone validation quality gate persistence.
|
|
3
|
-
*
|
|
4
|
-
* #2945 Bug 4: validate-milestone was writing VALIDATION.md to disk and
|
|
5
|
-
* inserting an assessment row, but never persisted structured quality_gates
|
|
6
|
-
* records in the DB. This module inserts milestone-level validation gates
|
|
7
|
-
* that correspond to the validation checks performed.
|
|
8
|
-
*
|
|
9
|
-
* Gate IDs for milestone validation:
|
|
10
|
-
* MV01 — Success criteria checklist
|
|
11
|
-
* MV02 — Slice delivery audit
|
|
12
|
-
* MV03 — Cross-slice integration
|
|
13
|
-
* MV04 — Requirement coverage
|
|
14
|
-
*
|
|
15
|
-
* These use the existing quality_gates table with scope "milestone".
|
|
16
|
-
*/
|
|
17
|
-
import { _getAdapter } from "./gsd-db.js";
|
|
18
|
-
/** Milestone validation gate IDs. */
|
|
19
|
-
const MILESTONE_GATE_IDS = ["MV01", "MV02", "MV03", "MV04"];
|
|
20
|
-
/**
|
|
21
|
-
* Insert milestone-level quality_gates records for a validation run.
|
|
22
|
-
*
|
|
23
|
-
* Each gate is inserted with status "complete" and a verdict derived
|
|
24
|
-
* from the overall milestone validation verdict. Individual gate-level
|
|
25
|
-
* verdicts are not available (the handler receives a single verdict),
|
|
26
|
-
* so all gates share the overall verdict.
|
|
27
|
-
*/
|
|
28
|
-
export function insertMilestoneValidationGates(milestoneId, sliceId, verdict, evaluatedAt) {
|
|
29
|
-
const db = _getAdapter();
|
|
30
|
-
if (!db)
|
|
31
|
-
return;
|
|
32
|
-
const gateVerdict = verdict === "pass" ? "pass" : "flag";
|
|
33
|
-
for (const gateId of MILESTONE_GATE_IDS) {
|
|
34
|
-
db.prepare(`INSERT OR REPLACE INTO quality_gates
|
|
35
|
-
(milestone_id, slice_id, gate_id, scope, task_id, status, verdict, rationale, findings, evaluated_at)
|
|
36
|
-
VALUES (:mid, :sid, :gid, 'milestone', '', 'complete', :verdict, :rationale, '', :evaluated_at)`).run({
|
|
37
|
-
":mid": milestoneId,
|
|
38
|
-
":sid": sliceId,
|
|
39
|
-
":gid": gateId,
|
|
40
|
-
":verdict": gateVerdict,
|
|
41
|
-
":rationale": `Milestone validation verdict: ${verdict}`,
|
|
42
|
-
":evaluated_at": evaluatedAt,
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
}
|