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
|
@@ -10,7 +10,6 @@ import type { ExtensionAPI, ExtensionContext, ExtensionCommandContext } from "@g
|
|
|
10
10
|
import { showNextAction } from "../shared/tui.js";
|
|
11
11
|
import { loadFile } from "./files.js";
|
|
12
12
|
import { isDbAvailable, getMilestoneSlices } from "./gsd-db.js";
|
|
13
|
-
import { parseRoadmapSlices } from "./roadmap-slices.js";
|
|
14
13
|
import { loadPrompt, inlineTemplate } from "./prompt-loader.js";
|
|
15
14
|
import { buildSkillActivationBlock } from "./auto-prompts.js";
|
|
16
15
|
import { deriveState } from "./state.js";
|
|
@@ -38,7 +37,7 @@ import { showConfirm } from "../shared/tui.js";
|
|
|
38
37
|
import { debugLog } from "./debug-logger.js";
|
|
39
38
|
import { findMilestoneIds, nextMilestoneId, reserveMilestoneId, getReservedMilestoneIds, clearReservedMilestoneIds } from "./milestone-ids.js";
|
|
40
39
|
import { parkMilestone, discardMilestone } from "./milestone-actions.js";
|
|
41
|
-
import {
|
|
40
|
+
import { resolveModelWithFallbacksForUnit } from "./preferences-models.js";
|
|
42
41
|
|
|
43
42
|
// ─── Re-exports (preserve public API for existing importers) ────────────────
|
|
44
43
|
export {
|
|
@@ -76,72 +75,25 @@ function buildDocsCommitInstruction(_message: string): string {
|
|
|
76
75
|
|
|
77
76
|
// ─── Auto-start after discuss ─────────────────────────────────────────────────
|
|
78
77
|
|
|
79
|
-
/**
|
|
80
|
-
|
|
78
|
+
/** Stashed context + flag for auto-starting after discuss phase completes */
|
|
79
|
+
let pendingAutoStart: {
|
|
81
80
|
ctx: ExtensionCommandContext;
|
|
82
81
|
pi: ExtensionAPI;
|
|
83
82
|
basePath: string;
|
|
84
83
|
milestoneId: string; // the milestone being discussed
|
|
85
84
|
step?: boolean; // preserve step mode through discuss → auto transition
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
const pendingAutoStartMap = new Map<string, PendingAutoStartEntry>();
|
|
85
|
+
} | null = null;
|
|
89
86
|
|
|
90
|
-
/**
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
* Internal use only — external code should use the Map directly.
|
|
94
|
-
*/
|
|
95
|
-
function _getPendingAutoStart(basePath?: string): PendingAutoStartEntry | null {
|
|
96
|
-
if (basePath) return pendingAutoStartMap.get(basePath) ?? null;
|
|
97
|
-
if (pendingAutoStartMap.size === 1) return pendingAutoStartMap.values().next().value!;
|
|
98
|
-
return null;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* Store pending auto-start state for a project.
|
|
103
|
-
* Exported for testing (#2985).
|
|
104
|
-
*/
|
|
105
|
-
export function setPendingAutoStart(basePath: string, entry: { basePath: string; milestoneId: string; ctx?: ExtensionCommandContext; pi?: ExtensionAPI; step?: boolean }): void {
|
|
106
|
-
pendingAutoStartMap.set(basePath, entry as PendingAutoStartEntry);
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* Clear pending auto-start state.
|
|
111
|
-
* If basePath is given, clears only that project. Otherwise clears all.
|
|
112
|
-
* Exported for testing (#2985).
|
|
113
|
-
*/
|
|
114
|
-
export function clearPendingAutoStart(basePath?: string): void {
|
|
115
|
-
if (basePath) {
|
|
116
|
-
pendingAutoStartMap.delete(basePath);
|
|
117
|
-
} else {
|
|
118
|
-
pendingAutoStartMap.clear();
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* Returns the milestoneId being discussed for the given project.
|
|
124
|
-
* When basePath is omitted and only one session is active, returns that
|
|
125
|
-
* session's milestoneId for backward compatibility. Returns null when
|
|
126
|
-
* multiple sessions exist and basePath is not specified (#2985 Bug 4).
|
|
127
|
-
*/
|
|
128
|
-
export function getDiscussionMilestoneId(basePath?: string): string | null {
|
|
129
|
-
if (basePath) {
|
|
130
|
-
return pendingAutoStartMap.get(basePath)?.milestoneId ?? null;
|
|
131
|
-
}
|
|
132
|
-
// Backward compat: return the sole entry's milestoneId, or null if ambiguous
|
|
133
|
-
if (pendingAutoStartMap.size === 1) {
|
|
134
|
-
return pendingAutoStartMap.values().next().value!.milestoneId;
|
|
135
|
-
}
|
|
136
|
-
return null;
|
|
87
|
+
/** Returns the milestoneId being discussed, or null if no discussion is active */
|
|
88
|
+
export function getDiscussionMilestoneId(): string | null {
|
|
89
|
+
return pendingAutoStart?.milestoneId ?? null;
|
|
137
90
|
}
|
|
138
91
|
|
|
139
92
|
/** Called from agent_end to check if auto-mode should start after discuss */
|
|
140
93
|
export function checkAutoStartAfterDiscuss(): boolean {
|
|
141
|
-
|
|
142
|
-
if (!entry) return false;
|
|
94
|
+
if (!pendingAutoStart) return false;
|
|
143
95
|
|
|
144
|
-
const { ctx, pi, basePath, milestoneId, step } =
|
|
96
|
+
const { ctx, pi, basePath, milestoneId, step } = pendingAutoStart;
|
|
145
97
|
|
|
146
98
|
// Gate 1: Primary milestone must have CONTEXT.md or ROADMAP.md
|
|
147
99
|
// The "discuss" path creates CONTEXT.md; the "plan" path creates ROADMAP.md.
|
|
@@ -225,7 +177,7 @@ export function checkAutoStartAfterDiscuss(): boolean {
|
|
|
225
177
|
// Cleanup: remove discussion manifest after auto-start (only needed during discussion)
|
|
226
178
|
try { unlinkSync(manifestPath); } catch { /* may not exist for single-milestone */ }
|
|
227
179
|
|
|
228
|
-
|
|
180
|
+
pendingAutoStart = null;
|
|
229
181
|
ctx.ui.notify(`Milestone ${milestoneId} ready.`, "info");
|
|
230
182
|
startAuto(ctx, pi, basePath, false, { step }).catch((err) => {
|
|
231
183
|
ctx.ui.notify(`Auto-start failed: ${getErrorMessage(err)}`, "error");
|
|
@@ -271,20 +223,24 @@ async function dispatchWorkflow(
|
|
|
271
223
|
ctx?: ExtensionContext,
|
|
272
224
|
unitType?: string,
|
|
273
225
|
): Promise<void> {
|
|
274
|
-
//
|
|
275
|
-
// tier downgrade, fallback chains) — same path as auto-mode dispatches (#2958).
|
|
226
|
+
// Apply model preference for this unit type (if configured)
|
|
276
227
|
if (ctx && unitType) {
|
|
277
|
-
const
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
model
|
|
286
|
-
|
|
287
|
-
|
|
228
|
+
const modelConfig = resolveModelWithFallbacksForUnit(unitType);
|
|
229
|
+
if (modelConfig) {
|
|
230
|
+
const availableModels = ctx.modelRegistry.getAvailable();
|
|
231
|
+
const modelsToTry = [modelConfig.primary, ...modelConfig.fallbacks];
|
|
232
|
+
|
|
233
|
+
for (const modelId of modelsToTry) {
|
|
234
|
+
// Resolve model from available models (same logic as auto-model-selection)
|
|
235
|
+
const model = resolveAvailableModel(modelId, availableModels, ctx.model?.provider);
|
|
236
|
+
if (!model) continue;
|
|
237
|
+
|
|
238
|
+
const ok = await pi.setModel(model, { persist: false });
|
|
239
|
+
if (ok) {
|
|
240
|
+
debugLog("guided-flow-model-applied", { unitType, model: `${model.provider}/${model.id}` });
|
|
241
|
+
break;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
288
244
|
}
|
|
289
245
|
}
|
|
290
246
|
|
|
@@ -437,7 +393,7 @@ export async function showHeadlessMilestoneCreation(
|
|
|
437
393
|
const prompt = buildHeadlessDiscussPrompt(nextId, seedContext, basePath);
|
|
438
394
|
|
|
439
395
|
// Set pending auto start (auto-mode triggers on "Milestone X ready." via checkAutoStartAfterDiscuss)
|
|
440
|
-
|
|
396
|
+
pendingAutoStart = { ctx, pi, basePath, milestoneId: nextId };
|
|
441
397
|
|
|
442
398
|
// Dispatch — headless milestone creation is a planning activity
|
|
443
399
|
await dispatchWorkflow(pi, prompt, "gsd-run", ctx, "plan-milestone");
|
|
@@ -617,12 +573,12 @@ export async function showDiscuss(
|
|
|
617
573
|
const seed = draftContent
|
|
618
574
|
? `${basePrompt}\n\n## Prior Discussion (Draft Seed)\n\n${draftContent}`
|
|
619
575
|
: basePrompt;
|
|
620
|
-
|
|
576
|
+
pendingAutoStart = { ctx, pi, basePath, milestoneId: mid, step: false };
|
|
621
577
|
await dispatchWorkflow(pi, seed, "gsd-discuss", ctx, "discuss-milestone");
|
|
622
578
|
} else if (choice === "discuss_fresh") {
|
|
623
579
|
const discussMilestoneTemplates = inlineTemplate("context", "Context");
|
|
624
580
|
const structuredQuestionsAvailable = pi.getActiveTools().includes("ask_user_questions") ? "true" : "false";
|
|
625
|
-
|
|
581
|
+
pendingAutoStart = { ctx, pi, basePath, milestoneId: mid, step: false };
|
|
626
582
|
await dispatchWorkflow(pi, loadPrompt("guided-discuss-milestone", {
|
|
627
583
|
milestoneId: mid, milestoneTitle, inlinedTemplates: discussMilestoneTemplates, structuredQuestionsAvailable,
|
|
628
584
|
commitInstruction: buildDocsCommitInstruction(`docs(${mid}): milestone context from discuss`),
|
|
@@ -631,7 +587,7 @@ export async function showDiscuss(
|
|
|
631
587
|
const milestoneIds = findMilestoneIds(basePath);
|
|
632
588
|
const uniqueMilestoneIds = !!loadEffectiveGSDPreferences()?.preferences?.unique_milestone_ids;
|
|
633
589
|
const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds);
|
|
634
|
-
|
|
590
|
+
pendingAutoStart = { ctx, pi, basePath, milestoneId: nextId, step: false };
|
|
635
591
|
await dispatchWorkflow(pi, buildDiscussPrompt(nextId, `New milestone ${nextId}.`, basePath), "gsd-run", ctx, "discuss-milestone");
|
|
636
592
|
}
|
|
637
593
|
return;
|
|
@@ -661,21 +617,9 @@ export async function showDiscuss(
|
|
|
661
617
|
} else {
|
|
662
618
|
normSlices = [];
|
|
663
619
|
}
|
|
664
|
-
// DB is open but returned zero slices despite a roadmap existing —
|
|
665
|
-
// the DB may be empty due to WAL loss or truncation (see #2815, #2892).
|
|
666
|
-
// Fall back to roadmap parsing to prevent false "all complete" exit.
|
|
667
|
-
if (normSlices.length === 0 && roadmapContent) {
|
|
668
|
-
normSlices = parseRoadmapSlices(roadmapContent).map(s => ({ id: s.id, done: s.done, title: s.title }));
|
|
669
|
-
}
|
|
670
620
|
const pendingSlices = normSlices.filter(s => !s.done);
|
|
671
621
|
|
|
672
622
|
if (pendingSlices.length === 0) {
|
|
673
|
-
// All slices complete — but queued milestones may still need discussion (#3150)
|
|
674
|
-
const pendingMilestones = state.registry.filter(m => m.status === "pending");
|
|
675
|
-
if (pendingMilestones.length > 0) {
|
|
676
|
-
await showDiscussQueuedMilestone(ctx, pi, basePath, pendingMilestones);
|
|
677
|
-
return;
|
|
678
|
-
}
|
|
679
623
|
ctx.ui.notify("All slices are complete — nothing to discuss.", "info");
|
|
680
624
|
return;
|
|
681
625
|
}
|
|
@@ -692,14 +636,9 @@ export async function showDiscuss(
|
|
|
692
636
|
discussedMap.set(s.id, !!contextFile);
|
|
693
637
|
}
|
|
694
638
|
|
|
695
|
-
// If all pending slices are discussed,
|
|
639
|
+
// If all pending slices are discussed, notify and exit instead of looping
|
|
696
640
|
const allDiscussed = pendingSlices.every(s => discussedMap.get(s.id));
|
|
697
641
|
if (allDiscussed) {
|
|
698
|
-
const pendingMilestones = state.registry.filter(m => m.status === "pending");
|
|
699
|
-
if (pendingMilestones.length > 0) {
|
|
700
|
-
await showDiscussQueuedMilestone(ctx, pi, basePath, pendingMilestones);
|
|
701
|
-
return;
|
|
702
|
-
}
|
|
703
642
|
const lockData = readSessionLockData(basePath);
|
|
704
643
|
const remoteAutoRunning = lockData && lockData.pid !== process.pid && isSessionLockProcessAlive(lockData);
|
|
705
644
|
const nextStep = remoteAutoRunning
|
|
@@ -993,7 +932,7 @@ async function handleMilestoneActions(
|
|
|
993
932
|
const milestoneIds = findMilestoneIds(basePath);
|
|
994
933
|
const uniqueMilestoneIds = !!loadEffectiveGSDPreferences()?.preferences?.unique_milestone_ids;
|
|
995
934
|
const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds);
|
|
996
|
-
|
|
935
|
+
pendingAutoStart = { ctx, pi, basePath, milestoneId: nextId, step: stepMode };
|
|
997
936
|
await dispatchWorkflow(pi, buildDiscussPrompt(nextId,
|
|
998
937
|
`New milestone ${nextId}.`,
|
|
999
938
|
basePath
|
|
@@ -1035,15 +974,7 @@ export async function showSmartEntry(
|
|
|
1035
974
|
}
|
|
1036
975
|
|
|
1037
976
|
// ── Detection preamble — run before any bootstrap ────────────────────
|
|
1038
|
-
|
|
1039
|
-
// A zombie .gsd/ state (symlink exists but missing PREFERENCES.md and
|
|
1040
|
-
// milestones/) must trigger the init wizard, not skip it (#2942).
|
|
1041
|
-
const gsdPath = gsdRoot(basePath);
|
|
1042
|
-
const hasBootstrapArtifacts = existsSync(gsdPath)
|
|
1043
|
-
&& (existsSync(join(gsdPath, "PREFERENCES.md"))
|
|
1044
|
-
|| existsSync(join(gsdPath, "milestones")));
|
|
1045
|
-
|
|
1046
|
-
if (!hasBootstrapArtifacts) {
|
|
977
|
+
if (!existsSync(gsdRoot(basePath))) {
|
|
1047
978
|
const detection = detectProjectState(basePath);
|
|
1048
979
|
|
|
1049
980
|
// v1 .planning/ detected — offer migration before anything else
|
|
@@ -1058,7 +989,7 @@ export async function showSmartEntry(
|
|
|
1058
989
|
// "fresh" — fall through to init wizard
|
|
1059
990
|
}
|
|
1060
991
|
|
|
1061
|
-
// No .gsd/
|
|
992
|
+
// No .gsd/ — run the project init wizard
|
|
1062
993
|
const result = await showProjectInit(ctx, pi, basePath, detection);
|
|
1063
994
|
if (!result.completed) return; // User cancelled
|
|
1064
995
|
|
|
@@ -1117,9 +1048,9 @@ export async function showSmartEntry(
|
|
|
1117
1048
|
if (!state.activeMilestone?.id) {
|
|
1118
1049
|
// Guard: if a discuss session is already in flight, don't re-inject the prompt.
|
|
1119
1050
|
// Both /gsd and /gsd auto reach this branch when no milestone exists yet.
|
|
1120
|
-
// Without this guard, every subsequent /gsd call overwrites
|
|
1051
|
+
// Without this guard, every subsequent /gsd call overwrites pendingAutoStart
|
|
1121
1052
|
// and fires another dispatchWorkflow, resetting the conversation mid-interview.
|
|
1122
|
-
if (
|
|
1053
|
+
if (pendingAutoStart) {
|
|
1123
1054
|
ctx.ui.notify("Discussion already in progress — answer the question above to continue.", "info");
|
|
1124
1055
|
return;
|
|
1125
1056
|
}
|
|
@@ -1152,7 +1083,7 @@ export async function showSmartEntry(
|
|
|
1152
1083
|
|
|
1153
1084
|
if (isFirst) {
|
|
1154
1085
|
// First ever — skip wizard, just ask directly
|
|
1155
|
-
|
|
1086
|
+
pendingAutoStart = { ctx, pi, basePath, milestoneId: nextId, step: stepMode };
|
|
1156
1087
|
await dispatchWorkflow(pi, buildDiscussPrompt(nextId,
|
|
1157
1088
|
`New project, milestone ${nextId}. Do NOT read or explore .gsd/ — it's empty scaffolding.`,
|
|
1158
1089
|
basePath
|
|
@@ -1173,7 +1104,7 @@ export async function showSmartEntry(
|
|
|
1173
1104
|
});
|
|
1174
1105
|
|
|
1175
1106
|
if (choice === "new_milestone") {
|
|
1176
|
-
|
|
1107
|
+
pendingAutoStart = { ctx, pi, basePath, milestoneId: nextId, step: stepMode };
|
|
1177
1108
|
await dispatchWorkflow(pi, buildDiscussPrompt(nextId,
|
|
1178
1109
|
`New milestone ${nextId}.`,
|
|
1179
1110
|
basePath
|
|
@@ -1212,7 +1143,7 @@ export async function showSmartEntry(
|
|
|
1212
1143
|
const uniqueMilestoneIds = !!loadEffectiveGSDPreferences()?.preferences?.unique_milestone_ids;
|
|
1213
1144
|
const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds);
|
|
1214
1145
|
|
|
1215
|
-
|
|
1146
|
+
pendingAutoStart = { ctx, pi, basePath, milestoneId: nextId, step: stepMode };
|
|
1216
1147
|
await dispatchWorkflow(pi, buildDiscussPrompt(nextId,
|
|
1217
1148
|
`New milestone ${nextId}.`,
|
|
1218
1149
|
basePath
|
|
@@ -1263,12 +1194,12 @@ export async function showSmartEntry(
|
|
|
1263
1194
|
const seed = draftContent
|
|
1264
1195
|
? `${basePrompt}\n\n## Prior Discussion (Draft Seed)\n\n${draftContent}`
|
|
1265
1196
|
: basePrompt;
|
|
1266
|
-
|
|
1197
|
+
pendingAutoStart = { ctx, pi, basePath, milestoneId, step: stepMode };
|
|
1267
1198
|
await dispatchWorkflow(pi, seed, "gsd-discuss", ctx, "discuss-milestone");
|
|
1268
1199
|
} else if (choice === "discuss_fresh") {
|
|
1269
1200
|
const discussMilestoneTemplates = inlineTemplate("context", "Context");
|
|
1270
1201
|
const structuredQuestionsAvailable = pi.getActiveTools().includes("ask_user_questions") ? "true" : "false";
|
|
1271
|
-
|
|
1202
|
+
pendingAutoStart = { ctx, pi, basePath, milestoneId, step: stepMode };
|
|
1272
1203
|
await dispatchWorkflow(pi, loadPrompt("guided-discuss-milestone", {
|
|
1273
1204
|
milestoneId, milestoneTitle, inlinedTemplates: discussMilestoneTemplates, structuredQuestionsAvailable,
|
|
1274
1205
|
commitInstruction: buildDocsCommitInstruction(`docs(${milestoneId}): milestone context from discuss`),
|
|
@@ -1277,7 +1208,7 @@ export async function showSmartEntry(
|
|
|
1277
1208
|
const milestoneIds = findMilestoneIds(basePath);
|
|
1278
1209
|
const uniqueMilestoneIds = !!loadEffectiveGSDPreferences()?.preferences?.unique_milestone_ids;
|
|
1279
1210
|
const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds);
|
|
1280
|
-
|
|
1211
|
+
pendingAutoStart = { ctx, pi, basePath, milestoneId: nextId, step: stepMode };
|
|
1281
1212
|
await dispatchWorkflow(pi, buildDiscussPrompt(nextId,
|
|
1282
1213
|
`New milestone ${nextId}.`,
|
|
1283
1214
|
basePath
|
|
@@ -1330,7 +1261,7 @@ export async function showSmartEntry(
|
|
|
1330
1261
|
});
|
|
1331
1262
|
|
|
1332
1263
|
if (choice === "plan") {
|
|
1333
|
-
|
|
1264
|
+
pendingAutoStart = { ctx, pi, basePath, milestoneId, step: stepMode };
|
|
1334
1265
|
const planMilestoneTemplates = [
|
|
1335
1266
|
inlineTemplate("roadmap", "Roadmap"),
|
|
1336
1267
|
inlineTemplate("plan", "Slice Plan"),
|
|
@@ -1361,7 +1292,7 @@ export async function showSmartEntry(
|
|
|
1361
1292
|
const milestoneIds = findMilestoneIds(basePath);
|
|
1362
1293
|
const uniqueMilestoneIds = !!loadEffectiveGSDPreferences()?.preferences?.unique_milestone_ids;
|
|
1363
1294
|
const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds);
|
|
1364
|
-
|
|
1295
|
+
pendingAutoStart = { ctx, pi, basePath, milestoneId: nextId, step: stepMode };
|
|
1365
1296
|
await dispatchWorkflow(pi, buildDiscussPrompt(nextId,
|
|
1366
1297
|
`New milestone ${nextId}.`,
|
|
1367
1298
|
basePath
|
|
@@ -18,10 +18,6 @@ export interface HealthWidgetData {
|
|
|
18
18
|
providerIssue: string | null;
|
|
19
19
|
environmentErrorCount: number;
|
|
20
20
|
environmentWarningCount: number;
|
|
21
|
-
/** Unix epoch (seconds) of the last commit, or null if unavailable. */
|
|
22
|
-
lastCommitEpoch: number | null;
|
|
23
|
-
/** Subject line of the last commit, or null if unavailable. */
|
|
24
|
-
lastCommitMessage: string | null;
|
|
25
21
|
lastRefreshed: number;
|
|
26
22
|
}
|
|
27
23
|
|
|
@@ -36,29 +32,6 @@ function formatCost(n: number): string {
|
|
|
36
32
|
return n >= 1 ? `$${n.toFixed(2)}` : `${(n * 100).toFixed(1)}¢`;
|
|
37
33
|
}
|
|
38
34
|
|
|
39
|
-
/**
|
|
40
|
-
* Format a Unix epoch (seconds) as a human-readable relative time string.
|
|
41
|
-
* Returns "just now" for <1m, "Xm ago" for <1h, "Xh ago" for <24h, "Xd ago" otherwise.
|
|
42
|
-
*/
|
|
43
|
-
export function formatRelativeTime(epochSeconds: number): string {
|
|
44
|
-
const diffSeconds = Math.floor(Date.now() / 1000) - epochSeconds;
|
|
45
|
-
if (diffSeconds < 60) return "just now";
|
|
46
|
-
const minutes = Math.floor(diffSeconds / 60);
|
|
47
|
-
if (minutes < 60) return `${minutes}m ago`;
|
|
48
|
-
const hours = Math.floor(minutes / 60);
|
|
49
|
-
if (hours < 24) return `${hours}h ago`;
|
|
50
|
-
const days = Math.floor(hours / 24);
|
|
51
|
-
return `${days}d ago`;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Truncate a commit message to fit the widget, appending "…" if needed.
|
|
56
|
-
*/
|
|
57
|
-
function truncateMessage(msg: string, maxLen: number): string {
|
|
58
|
-
if (msg.length <= maxLen) return msg;
|
|
59
|
-
return msg.slice(0, maxLen - 1) + "…";
|
|
60
|
-
}
|
|
61
|
-
|
|
62
35
|
/**
|
|
63
36
|
* Build compact health lines for the widget.
|
|
64
37
|
* Returns a string array suitable for setWidget().
|
|
@@ -100,12 +73,5 @@ export function buildHealthLines(data: HealthWidgetData): string[] {
|
|
|
100
73
|
parts.push(`Env: ${data.environmentWarningCount} warning${data.environmentWarningCount > 1 ? "s" : ""}`);
|
|
101
74
|
}
|
|
102
75
|
|
|
103
|
-
// Always-on last commit display — shows relative time + truncated message
|
|
104
|
-
if (data.lastCommitEpoch !== null && data.lastCommitEpoch > 0) {
|
|
105
|
-
const relTime = formatRelativeTime(data.lastCommitEpoch);
|
|
106
|
-
const msg = data.lastCommitMessage ? ` — ${truncateMessage(data.lastCommitMessage, 50)}` : "";
|
|
107
|
-
parts.push(`Last commit: ${relTime}${msg}`);
|
|
108
|
-
}
|
|
109
|
-
|
|
110
76
|
return [` ${parts.join(" │ ")}`];
|
|
111
77
|
}
|
|
@@ -13,7 +13,6 @@ import type { GSDState } from "./types.js";
|
|
|
13
13
|
import { runProviderChecks, summariseProviderIssues } from "./doctor-providers.js";
|
|
14
14
|
import { runEnvironmentChecks } from "./doctor-environment.js";
|
|
15
15
|
import { loadEffectiveGSDPreferences } from "./preferences.js";
|
|
16
|
-
import { nativeIsRepo, nativeLastCommitEpoch, nativeGetCurrentBranch, nativeCommitSubject } from "./native-git-bridge.js";
|
|
17
16
|
import { loadLedgerFromDisk, getProjectTotals } from "./metrics.js";
|
|
18
17
|
import { describeNextUnit, estimateTimeRemaining, updateSliceProgressCache } from "./auto-dashboard.js";
|
|
19
18
|
import { projectRoot } from "./commands/context.js";
|
|
@@ -32,8 +31,6 @@ function loadHealthWidgetData(basePath: string): HealthWidgetData {
|
|
|
32
31
|
let providerIssue: string | null = null;
|
|
33
32
|
let environmentErrorCount = 0;
|
|
34
33
|
let environmentWarningCount = 0;
|
|
35
|
-
let lastCommitEpoch: number | null = null;
|
|
36
|
-
let lastCommitMessage: string | null = null;
|
|
37
34
|
|
|
38
35
|
const projectState = detectHealthWidgetProjectState(basePath);
|
|
39
36
|
|
|
@@ -61,18 +58,6 @@ function loadHealthWidgetData(basePath: string): HealthWidgetData {
|
|
|
61
58
|
}
|
|
62
59
|
} catch { /* non-fatal */ }
|
|
63
60
|
|
|
64
|
-
// ── Last commit info ──
|
|
65
|
-
try {
|
|
66
|
-
if (nativeIsRepo(basePath)) {
|
|
67
|
-
const branch = nativeGetCurrentBranch(basePath);
|
|
68
|
-
const epoch = nativeLastCommitEpoch(basePath, branch || "HEAD");
|
|
69
|
-
if (epoch > 0) {
|
|
70
|
-
lastCommitEpoch = epoch;
|
|
71
|
-
lastCommitMessage = nativeCommitSubject(basePath, branch || "HEAD") || null;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
} catch { /* non-fatal */ }
|
|
75
|
-
|
|
76
61
|
return {
|
|
77
62
|
projectState,
|
|
78
63
|
budgetCeiling,
|
|
@@ -80,8 +65,6 @@ function loadHealthWidgetData(basePath: string): HealthWidgetData {
|
|
|
80
65
|
providerIssue,
|
|
81
66
|
environmentErrorCount,
|
|
82
67
|
environmentWarningCount,
|
|
83
|
-
lastCommitEpoch,
|
|
84
|
-
lastCommitMessage,
|
|
85
68
|
lastRefreshed: Date.now(),
|
|
86
69
|
};
|
|
87
70
|
}
|
|
@@ -87,22 +87,14 @@ export function buildMemoryLLMCall(ctx: ExtensionContext): LLMCallFn | null {
|
|
|
87
87
|
|
|
88
88
|
const selectedModel = model as Model<Api>;
|
|
89
89
|
|
|
90
|
-
// Resolve API key via modelRegistry so OAuth tokens (auth.json) are used.
|
|
91
|
-
// Without this, streamSimpleAnthropic only checks env vars via getEnvApiKey,
|
|
92
|
-
// which returns undefined for OAuth users (Claude Max / Claude Pro).
|
|
93
|
-
// See: https://github.com/gsd-build/gsd-2/issues/2959
|
|
94
|
-
const resolvedKeyPromise = ctx.modelRegistry.getApiKey(selectedModel).catch(() => undefined);
|
|
95
|
-
|
|
96
90
|
return async (system: string, user: string): Promise<string> => {
|
|
97
91
|
const { completeSimple } = await import('@gsd/pi-ai');
|
|
98
|
-
const resolvedApiKey = await resolvedKeyPromise;
|
|
99
92
|
const result: AssistantMessage = await completeSimple(selectedModel, {
|
|
100
93
|
systemPrompt: system,
|
|
101
94
|
messages: [{ role: 'user', content: [{ type: 'text', text: user }], timestamp: Date.now() }],
|
|
102
95
|
}, {
|
|
103
96
|
maxTokens: 2048,
|
|
104
97
|
temperature: 0,
|
|
105
|
-
...(resolvedApiKey ? { apiKey: resolvedApiKey } : {}),
|
|
106
98
|
});
|
|
107
99
|
|
|
108
100
|
// Extract text from response
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
import { execFileSync } from "node:child_process";
|
|
10
10
|
import { existsSync, lstatSync, mkdirSync, readdirSync, realpathSync, renameSync, cpSync, rmSync, symlinkSync } from "node:fs";
|
|
11
11
|
import { join } from "node:path";
|
|
12
|
-
import { externalGsdRoot
|
|
12
|
+
import { externalGsdRoot } from "./repo-identity.js";
|
|
13
13
|
import { getErrorMessage } from "./error-utils.js";
|
|
14
14
|
import { hasGitTrackedGsdFiles } from "./gitignore.js";
|
|
15
15
|
import { GIT_NO_PROMPT_ENV } from "./git-constants.js";
|
|
@@ -34,14 +34,6 @@ export interface MigrationResult {
|
|
|
34
34
|
* 3. On failure: rename `.gsd.migrating` back to `.gsd` (rollback)
|
|
35
35
|
*/
|
|
36
36
|
export function migrateToExternalState(basePath: string): MigrationResult {
|
|
37
|
-
// Worktrees get their .gsd via syncGsdStateToWorktree(), not migration.
|
|
38
|
-
// Migration inside a worktree would compute the same external hash as the
|
|
39
|
-
// main repo (externalGsdRoot hashes remoteUrl + gitRoot), creating a broken
|
|
40
|
-
// junction and orphaning .gsd.migrating (#2970).
|
|
41
|
-
if (isInsideWorktree(basePath)) {
|
|
42
|
-
return { migrated: false };
|
|
43
|
-
}
|
|
44
|
-
|
|
45
37
|
const localGsd = join(basePath, ".gsd");
|
|
46
38
|
|
|
47
39
|
// Skip if doesn't exist
|
|
@@ -33,29 +33,10 @@ export const BUNDLED_COST_TABLE: ModelCostEntry[] = [
|
|
|
33
33
|
// OpenAI
|
|
34
34
|
{ id: "gpt-4o", inputPer1k: 0.0025, outputPer1k: 0.01, updatedAt: "2025-03-15" },
|
|
35
35
|
{ id: "gpt-4o-mini", inputPer1k: 0.00015, outputPer1k: 0.0006, updatedAt: "2025-03-15" },
|
|
36
|
-
{ id: "gpt-4.1", inputPer1k: 0.002, outputPer1k: 0.008, updatedAt: "2026-03-29" },
|
|
37
|
-
{ id: "gpt-4.1-mini", inputPer1k: 0.0004, outputPer1k: 0.0016, updatedAt: "2026-03-29" },
|
|
38
|
-
{ id: "gpt-4.1-nano", inputPer1k: 0.0001, outputPer1k: 0.0004, updatedAt: "2026-03-29" },
|
|
39
|
-
{ id: "gpt-5", inputPer1k: 0.01, outputPer1k: 0.04, updatedAt: "2026-03-29" },
|
|
40
|
-
{ id: "gpt-5-mini", inputPer1k: 0.0003, outputPer1k: 0.0012, updatedAt: "2026-03-29" },
|
|
41
|
-
{ id: "gpt-5-nano", inputPer1k: 0.0001, outputPer1k: 0.0004, updatedAt: "2026-03-29" },
|
|
42
|
-
{ id: "gpt-5-pro", inputPer1k: 0.015, outputPer1k: 0.06, updatedAt: "2026-03-29" },
|
|
43
36
|
{ id: "o1", inputPer1k: 0.015, outputPer1k: 0.06, updatedAt: "2025-03-15" },
|
|
44
37
|
{ id: "o3", inputPer1k: 0.015, outputPer1k: 0.06, updatedAt: "2025-03-15" },
|
|
45
|
-
{ id: "o4-mini", inputPer1k: 0.005, outputPer1k: 0.02, updatedAt: "2026-03-29" },
|
|
46
|
-
{ id: "o4-mini-deep-research", inputPer1k: 0.005, outputPer1k: 0.02, updatedAt: "2026-03-29" },
|
|
47
38
|
{ id: "gpt-4-turbo", inputPer1k: 0.01, outputPer1k: 0.03, updatedAt: "2025-03-15" },
|
|
48
39
|
|
|
49
|
-
// OpenAI Codex
|
|
50
|
-
{ id: "gpt-5.1", inputPer1k: 0.005, outputPer1k: 0.02, updatedAt: "2026-03-29" },
|
|
51
|
-
{ id: "gpt-5.1-codex-max", inputPer1k: 0.003, outputPer1k: 0.012, updatedAt: "2026-03-29" },
|
|
52
|
-
{ id: "gpt-5.1-codex-mini", inputPer1k: 0.0003, outputPer1k: 0.0012, updatedAt: "2026-03-29" },
|
|
53
|
-
{ id: "gpt-5.2", inputPer1k: 0.005, outputPer1k: 0.02, updatedAt: "2026-03-29" },
|
|
54
|
-
{ id: "gpt-5.2-codex", inputPer1k: 0.005, outputPer1k: 0.02, updatedAt: "2026-03-29" },
|
|
55
|
-
{ id: "gpt-5.3-codex", inputPer1k: 0.005, outputPer1k: 0.02, updatedAt: "2026-03-29" },
|
|
56
|
-
{ id: "gpt-5.3-codex-spark", inputPer1k: 0.0003, outputPer1k: 0.0012, updatedAt: "2026-03-29" },
|
|
57
|
-
{ id: "gpt-5.4", inputPer1k: 0.005, outputPer1k: 0.02, updatedAt: "2026-03-29" },
|
|
58
|
-
|
|
59
40
|
// Google
|
|
60
41
|
{ id: "gemini-2.0-flash", inputPer1k: 0.0001, outputPer1k: 0.0004, updatedAt: "2025-03-15" },
|
|
61
42
|
{ id: "gemini-flash-2.0", inputPer1k: 0.0001, outputPer1k: 0.0004, updatedAt: "2025-03-15" },
|
|
@@ -44,12 +44,6 @@ const MODEL_CAPABILITY_TIER: Record<string, ComplexityTier> = {
|
|
|
44
44
|
"claude-3-5-haiku-latest": "light",
|
|
45
45
|
"claude-3-haiku-20240307": "light",
|
|
46
46
|
"gpt-4o-mini": "light",
|
|
47
|
-
"gpt-4.1-mini": "light",
|
|
48
|
-
"gpt-4.1-nano": "light",
|
|
49
|
-
"gpt-5-mini": "light",
|
|
50
|
-
"gpt-5-nano": "light",
|
|
51
|
-
"gpt-5.1-codex-mini": "light",
|
|
52
|
-
"gpt-5.3-codex-spark": "light",
|
|
53
47
|
"gemini-2.0-flash": "light",
|
|
54
48
|
"gemini-flash-2.0": "light",
|
|
55
49
|
|
|
@@ -58,8 +52,6 @@ const MODEL_CAPABILITY_TIER: Record<string, ComplexityTier> = {
|
|
|
58
52
|
"claude-sonnet-4-5-20250514": "standard",
|
|
59
53
|
"claude-3-5-sonnet-latest": "standard",
|
|
60
54
|
"gpt-4o": "standard",
|
|
61
|
-
"gpt-4.1": "standard",
|
|
62
|
-
"gpt-5.1-codex-max": "standard",
|
|
63
55
|
"gemini-2.5-pro": "standard",
|
|
64
56
|
"deepseek-chat": "standard",
|
|
65
57
|
|
|
@@ -67,17 +59,8 @@ const MODEL_CAPABILITY_TIER: Record<string, ComplexityTier> = {
|
|
|
67
59
|
"claude-opus-4-6": "heavy",
|
|
68
60
|
"claude-3-opus-latest": "heavy",
|
|
69
61
|
"gpt-4-turbo": "heavy",
|
|
70
|
-
"gpt-5": "heavy",
|
|
71
|
-
"gpt-5-pro": "heavy",
|
|
72
|
-
"gpt-5.1": "heavy",
|
|
73
|
-
"gpt-5.2": "heavy",
|
|
74
|
-
"gpt-5.2-codex": "heavy",
|
|
75
|
-
"gpt-5.3-codex": "heavy",
|
|
76
|
-
"gpt-5.4": "heavy",
|
|
77
62
|
"o1": "heavy",
|
|
78
63
|
"o3": "heavy",
|
|
79
|
-
"o4-mini": "heavy",
|
|
80
|
-
"o4-mini-deep-research": "heavy",
|
|
81
64
|
};
|
|
82
65
|
|
|
83
66
|
// ─── Cost Table (per 1K input tokens, approximate USD) ───────────────────────
|
|
@@ -92,23 +75,6 @@ const MODEL_COST_PER_1K_INPUT: Record<string, number> = {
|
|
|
92
75
|
"claude-opus-4-6": 0.015,
|
|
93
76
|
"gpt-4o-mini": 0.00015,
|
|
94
77
|
"gpt-4o": 0.0025,
|
|
95
|
-
"gpt-4.1": 0.002,
|
|
96
|
-
"gpt-4.1-mini": 0.0004,
|
|
97
|
-
"gpt-4.1-nano": 0.0001,
|
|
98
|
-
"gpt-5": 0.01,
|
|
99
|
-
"gpt-5-mini": 0.0003,
|
|
100
|
-
"gpt-5-nano": 0.0001,
|
|
101
|
-
"gpt-5-pro": 0.015,
|
|
102
|
-
"gpt-5.1": 0.005,
|
|
103
|
-
"gpt-5.1-codex-max": 0.003,
|
|
104
|
-
"gpt-5.1-codex-mini": 0.0003,
|
|
105
|
-
"gpt-5.2": 0.005,
|
|
106
|
-
"gpt-5.2-codex": 0.005,
|
|
107
|
-
"gpt-5.3-codex": 0.005,
|
|
108
|
-
"gpt-5.3-codex-spark": 0.0003,
|
|
109
|
-
"gpt-5.4": 0.005,
|
|
110
|
-
"o4-mini": 0.005,
|
|
111
|
-
"o4-mini-deep-research": 0.005,
|
|
112
78
|
"gemini-2.0-flash": 0.0001,
|
|
113
79
|
"gemini-2.5-pro": 0.00125,
|
|
114
80
|
"deepseek-chat": 0.00014,
|
|
@@ -225,7 +191,7 @@ export function escalateTier(currentTier: ComplexityTier): ComplexityTier | null
|
|
|
225
191
|
*/
|
|
226
192
|
export function defaultRoutingConfig(): DynamicRoutingConfig {
|
|
227
193
|
return {
|
|
228
|
-
enabled:
|
|
194
|
+
enabled: false,
|
|
229
195
|
escalate_on_failure: true,
|
|
230
196
|
budget_pressure: true,
|
|
231
197
|
cross_provider: true,
|
|
@@ -931,23 +931,6 @@ export function nativeResetHard(basePath: string): void {
|
|
|
931
931
|
execSync("git reset --hard HEAD", { cwd: basePath, stdio: "pipe" });
|
|
932
932
|
}
|
|
933
933
|
|
|
934
|
-
/**
|
|
935
|
-
* Get the subject line of a commit (git log -1 --format=%s <ref>).
|
|
936
|
-
* Returns empty string if the ref doesn't exist.
|
|
937
|
-
*/
|
|
938
|
-
export function nativeCommitSubject(basePath: string, ref: string): string {
|
|
939
|
-
try {
|
|
940
|
-
return execFileSync("git", ["log", "-1", "--format=%s", ref], {
|
|
941
|
-
cwd: basePath,
|
|
942
|
-
stdio: ["ignore", "pipe", "pipe"],
|
|
943
|
-
encoding: "utf-8",
|
|
944
|
-
env: GIT_NO_PROMPT_ENV,
|
|
945
|
-
}).trim();
|
|
946
|
-
} catch {
|
|
947
|
-
return "";
|
|
948
|
-
}
|
|
949
|
-
}
|
|
950
|
-
|
|
951
934
|
/**
|
|
952
935
|
* Delete a branch.
|
|
953
936
|
* Native: libgit2 branch delete.
|
|
@@ -23,13 +23,7 @@ export function sendDesktopNotification(
|
|
|
23
23
|
message: string,
|
|
24
24
|
level: NotifyLevel = "info",
|
|
25
25
|
kind: NotificationKind = "complete",
|
|
26
|
-
projectName?: string,
|
|
27
26
|
): void {
|
|
28
|
-
// When a projectName is provided and the title is the default "GSD",
|
|
29
|
-
// replace it with a project-qualified title for multi-project clarity.
|
|
30
|
-
if (projectName && title === "GSD") {
|
|
31
|
-
title = formatNotificationTitle(projectName);
|
|
32
|
-
}
|
|
33
27
|
const loaded = loadEffectiveGSDPreferences()?.preferences;
|
|
34
28
|
if (!shouldSendDesktopNotification(kind, loaded?.notifications)) return;
|
|
35
29
|
|
|
@@ -70,16 +64,6 @@ export function shouldSendDesktopNotification(
|
|
|
70
64
|
}
|
|
71
65
|
}
|
|
72
66
|
|
|
73
|
-
/**
|
|
74
|
-
* Format a notification title that includes the project name for context.
|
|
75
|
-
* Returns "GSD — projectName" when a project name is available, otherwise "GSD".
|
|
76
|
-
*/
|
|
77
|
-
export function formatNotificationTitle(projectName?: string): string {
|
|
78
|
-
const trimmed = projectName?.trim();
|
|
79
|
-
if (trimmed) return `GSD — ${trimmed}`;
|
|
80
|
-
return "GSD";
|
|
81
|
-
}
|
|
82
|
-
|
|
83
67
|
export function buildDesktopNotificationCommand(
|
|
84
68
|
platform: NodeJS.Platform,
|
|
85
69
|
title: string,
|