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
|
@@ -38,12 +38,6 @@ import {
|
|
|
38
38
|
writeSessionStatus,
|
|
39
39
|
readSessionStatus,
|
|
40
40
|
} from "../../session-status-io.ts";
|
|
41
|
-
import {
|
|
42
|
-
openDatabase,
|
|
43
|
-
closeDatabase,
|
|
44
|
-
insertMilestone,
|
|
45
|
-
updateMilestoneStatus,
|
|
46
|
-
} from "../../gsd-db.ts";
|
|
47
41
|
|
|
48
42
|
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
49
43
|
|
|
@@ -471,107 +465,3 @@ test("mergeAllCompleted — by-completion order respects startedAt", async () =>
|
|
|
471
465
|
cleanup(repo);
|
|
472
466
|
}
|
|
473
467
|
});
|
|
474
|
-
|
|
475
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
476
|
-
// Bug #2812 — determineMergeOrder should use worktree DB as source of truth
|
|
477
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
478
|
-
|
|
479
|
-
/** Set up a worktree DB with a milestone marked complete */
|
|
480
|
-
function setupWorktreeDb(basePath: string, mid: string): void {
|
|
481
|
-
const wtGsdDir = join(basePath, ".gsd", "worktrees", mid, ".gsd");
|
|
482
|
-
mkdirSync(wtGsdDir, { recursive: true });
|
|
483
|
-
const dbPath = join(wtGsdDir, "gsd.db");
|
|
484
|
-
openDatabase(dbPath);
|
|
485
|
-
insertMilestone({ id: mid, title: `Milestone ${mid}`, status: "complete" });
|
|
486
|
-
updateMilestoneStatus(mid, "complete", new Date().toISOString());
|
|
487
|
-
closeDatabase();
|
|
488
|
-
}
|
|
489
|
-
|
|
490
|
-
test("determineMergeOrder — finds milestones completed in worktree DB even when worker state is 'error' (#2812)", () => {
|
|
491
|
-
const base = realpathSync(mkdtempSync(join(tmpdir(), "merge-db-bug-")));
|
|
492
|
-
try {
|
|
493
|
-
// Simulate the bug scenario: orchestrator has stale "error" state
|
|
494
|
-
// but the worktree DB shows milestone is actually complete.
|
|
495
|
-
setupWorktreeDb(base, "M011");
|
|
496
|
-
|
|
497
|
-
const workers = [
|
|
498
|
-
makeWorker({ milestoneId: "M010", state: "error" }),
|
|
499
|
-
makeWorker({ milestoneId: "M011", state: "error" }), // stale — actually complete in DB
|
|
500
|
-
makeWorker({ milestoneId: "M012", state: "running" }),
|
|
501
|
-
];
|
|
502
|
-
|
|
503
|
-
const order = determineMergeOrder(workers, "sequential", base);
|
|
504
|
-
|
|
505
|
-
// M011 should be included because its worktree DB says status='complete'
|
|
506
|
-
assert.ok(
|
|
507
|
-
order.includes("M011"),
|
|
508
|
-
`Expected M011 in merge order (worktree DB says complete), got: [${order}]`,
|
|
509
|
-
);
|
|
510
|
-
// M010 and M012 should NOT be included (no worktree DB with complete status)
|
|
511
|
-
assert.ok(!order.includes("M010"), "M010 should not be in merge order (error, no DB)");
|
|
512
|
-
assert.ok(!order.includes("M012"), "M012 should not be in merge order (running, no DB)");
|
|
513
|
-
} finally {
|
|
514
|
-
cleanup(base);
|
|
515
|
-
}
|
|
516
|
-
});
|
|
517
|
-
|
|
518
|
-
test("determineMergeOrder — workers with state='stopped' still included without basePath", () => {
|
|
519
|
-
// Backward compatibility: existing behavior still works when basePath is omitted
|
|
520
|
-
const workers = [
|
|
521
|
-
makeWorker({ milestoneId: "M001", state: "stopped" }),
|
|
522
|
-
makeWorker({ milestoneId: "M002", state: "error" }),
|
|
523
|
-
];
|
|
524
|
-
const order = determineMergeOrder(workers, "sequential");
|
|
525
|
-
assert.deepEqual(order, ["M001"]);
|
|
526
|
-
});
|
|
527
|
-
|
|
528
|
-
test("determineMergeOrder — combines stopped workers and DB-complete milestones without duplicates", () => {
|
|
529
|
-
const base = realpathSync(mkdtempSync(join(tmpdir(), "merge-dedup-")));
|
|
530
|
-
try {
|
|
531
|
-
// M001 is stopped in orchestrator AND complete in worktree DB
|
|
532
|
-
setupWorktreeDb(base, "M001");
|
|
533
|
-
|
|
534
|
-
const workers = [
|
|
535
|
-
makeWorker({ milestoneId: "M001", state: "stopped" }),
|
|
536
|
-
makeWorker({ milestoneId: "M002", state: "running" }),
|
|
537
|
-
];
|
|
538
|
-
|
|
539
|
-
const order = determineMergeOrder(workers, "sequential", base);
|
|
540
|
-
// M001 should appear exactly once
|
|
541
|
-
assert.deepEqual(order, ["M001"]);
|
|
542
|
-
} finally {
|
|
543
|
-
cleanup(base);
|
|
544
|
-
}
|
|
545
|
-
});
|
|
546
|
-
|
|
547
|
-
test("mergeAllCompleted — discovers DB-complete milestones when workers show error (#2812)", async () => {
|
|
548
|
-
const savedCwd = process.cwd();
|
|
549
|
-
const repo = createTempRepo();
|
|
550
|
-
|
|
551
|
-
try {
|
|
552
|
-
// Create milestone branch with a file
|
|
553
|
-
createMilestoneBranch(repo, "M011", [
|
|
554
|
-
{ name: "feature.ts", content: "export const feature = true;\n" },
|
|
555
|
-
]);
|
|
556
|
-
setupRoadmap(repo, "M011", "Feature System", ["S01: Feature module"]);
|
|
557
|
-
|
|
558
|
-
// Set up worktree DB showing M011 is complete
|
|
559
|
-
setupWorktreeDb(repo, "M011");
|
|
560
|
-
|
|
561
|
-
// Orchestrator thinks M011 is in error (stale state)
|
|
562
|
-
const workers = [
|
|
563
|
-
makeWorker({ milestoneId: "M011", state: "error" }),
|
|
564
|
-
];
|
|
565
|
-
|
|
566
|
-
process.chdir(repo);
|
|
567
|
-
const results = await mergeAllCompleted(repo, workers, "sequential");
|
|
568
|
-
|
|
569
|
-
// Should find and merge M011 despite orchestrator "error" state
|
|
570
|
-
assert.equal(results.length, 1, "should have one result");
|
|
571
|
-
assert.equal(results[0]!.milestoneId, "M011");
|
|
572
|
-
assert.equal(results[0]!.success, true, `M011 merge should succeed: ${results[0]!.error}`);
|
|
573
|
-
} finally {
|
|
574
|
-
process.chdir(savedCwd);
|
|
575
|
-
cleanup(repo);
|
|
576
|
-
}
|
|
577
|
-
});
|
|
@@ -171,7 +171,7 @@ test('(k) run-uat prompt template', () => {
|
|
|
171
171
|
const milestoneId = 'M001';
|
|
172
172
|
const sliceId = 'S01';
|
|
173
173
|
const uatPath = '.gsd/milestones/M001/slices/S01/S01-UAT.md';
|
|
174
|
-
const uatResultPath = '.gsd/milestones/M001/slices/S01/S01-
|
|
174
|
+
const uatResultPath = '.gsd/milestones/M001/slices/S01/S01-UAT.md';
|
|
175
175
|
const uatType = 'live-runtime';
|
|
176
176
|
const inlinedContext = '<!-- no context -->';
|
|
177
177
|
let promptResult: string | undefined;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { parseMemoryResponse, _resetExtractionState
|
|
1
|
+
import { parseMemoryResponse, _resetExtractionState } from '../memory-extractor.ts';
|
|
2
2
|
import {
|
|
3
3
|
openDatabase,
|
|
4
4
|
closeDatabase,
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
getActiveMemoriesRanked,
|
|
10
10
|
} from '../memory-store.ts';
|
|
11
11
|
import type { MemoryAction } from '../memory-store.ts';
|
|
12
|
-
import { describe, test, beforeEach, afterEach
|
|
12
|
+
import { describe, test, beforeEach, afterEach } from 'node:test';
|
|
13
13
|
import assert from 'node:assert/strict';
|
|
14
14
|
|
|
15
15
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
@@ -169,86 +169,3 @@ test('memory-extractor: reset extraction state', () => {
|
|
|
169
169
|
assert.ok(true, '_resetExtractionState should not throw');
|
|
170
170
|
});
|
|
171
171
|
|
|
172
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
173
|
-
// memory-extractor: buildMemoryLLMCall resolves OAuth API key via modelRegistry
|
|
174
|
-
// Regression test for #2959 — OAuth users had broken memory extraction
|
|
175
|
-
// because streamSimpleAnthropic only checked env vars, not auth.json.
|
|
176
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
177
|
-
|
|
178
|
-
test('memory-extractor: buildMemoryLLMCall resolves API key from modelRegistry for OAuth users', async () => {
|
|
179
|
-
const OAUTH_TOKEN = 'sk-ant-oat-test-oauth-token-12345';
|
|
180
|
-
let getApiKeyCalled = false;
|
|
181
|
-
|
|
182
|
-
const fakeModel = {
|
|
183
|
-
id: 'claude-haiku-test',
|
|
184
|
-
provider: 'anthropic',
|
|
185
|
-
api: 'anthropic-messages',
|
|
186
|
-
cost: { input: 0.25, output: 1.25 },
|
|
187
|
-
};
|
|
188
|
-
|
|
189
|
-
const ctx = {
|
|
190
|
-
modelRegistry: {
|
|
191
|
-
getAvailable: () => [fakeModel],
|
|
192
|
-
getApiKey: async (_model: any) => {
|
|
193
|
-
getApiKeyCalled = true;
|
|
194
|
-
return OAUTH_TOKEN;
|
|
195
|
-
},
|
|
196
|
-
},
|
|
197
|
-
} as any;
|
|
198
|
-
|
|
199
|
-
const llmCallFn = buildMemoryLLMCall(ctx);
|
|
200
|
-
assert.ok(llmCallFn !== null, 'buildMemoryLLMCall should return a function when models are available');
|
|
201
|
-
|
|
202
|
-
// The function should have resolved the API key eagerly via modelRegistry.getApiKey.
|
|
203
|
-
// Give the async getApiKey a tick to resolve.
|
|
204
|
-
await new Promise(resolve => setTimeout(resolve, 50));
|
|
205
|
-
assert.ok(getApiKeyCalled, 'buildMemoryLLMCall must call modelRegistry.getApiKey() to resolve OAuth tokens');
|
|
206
|
-
});
|
|
207
|
-
|
|
208
|
-
test('memory-extractor: buildMemoryLLMCall returns null when no models available', () => {
|
|
209
|
-
const ctx = {
|
|
210
|
-
modelRegistry: {
|
|
211
|
-
getAvailable: () => [],
|
|
212
|
-
getApiKey: async () => undefined,
|
|
213
|
-
},
|
|
214
|
-
} as any;
|
|
215
|
-
|
|
216
|
-
const llmCallFn = buildMemoryLLMCall(ctx);
|
|
217
|
-
assert.strictEqual(llmCallFn, null, 'should return null when no models available');
|
|
218
|
-
});
|
|
219
|
-
|
|
220
|
-
test('memory-extractor: buildMemoryLLMCall prefers haiku model', async () => {
|
|
221
|
-
let resolvedModelId: string | undefined;
|
|
222
|
-
|
|
223
|
-
const haikuModel = {
|
|
224
|
-
id: 'claude-3-5-haiku-20241022',
|
|
225
|
-
provider: 'anthropic',
|
|
226
|
-
api: 'anthropic-messages',
|
|
227
|
-
cost: { input: 0.25, output: 1.25 },
|
|
228
|
-
};
|
|
229
|
-
const sonnetModel = {
|
|
230
|
-
id: 'claude-sonnet-4-20250514',
|
|
231
|
-
provider: 'anthropic',
|
|
232
|
-
api: 'anthropic-messages',
|
|
233
|
-
cost: { input: 3, output: 15 },
|
|
234
|
-
};
|
|
235
|
-
|
|
236
|
-
const ctx = {
|
|
237
|
-
modelRegistry: {
|
|
238
|
-
getAvailable: () => [sonnetModel, haikuModel],
|
|
239
|
-
getApiKey: async (model: any) => {
|
|
240
|
-
resolvedModelId = model.id;
|
|
241
|
-
return 'sk-ant-oat-test-token';
|
|
242
|
-
},
|
|
243
|
-
},
|
|
244
|
-
} as any;
|
|
245
|
-
|
|
246
|
-
const llmCallFn = buildMemoryLLMCall(ctx);
|
|
247
|
-
assert.ok(llmCallFn !== null, 'should return a function');
|
|
248
|
-
|
|
249
|
-
// Wait for the async getApiKey to resolve
|
|
250
|
-
await new Promise(resolve => setTimeout(resolve, 50));
|
|
251
|
-
assert.strictEqual(resolvedModelId, 'claude-3-5-haiku-20241022',
|
|
252
|
-
'should resolve API key for haiku model, not sonnet');
|
|
253
|
-
});
|
|
254
|
-
|
|
@@ -67,37 +67,3 @@ test("all cost table entries have valid data", () => {
|
|
|
67
67
|
assert.ok(entry.updatedAt, `${entry.id} missing updatedAt`);
|
|
68
68
|
}
|
|
69
69
|
});
|
|
70
|
-
|
|
71
|
-
// ─── #2885: openai-codex and modern OpenAI models in cost table ──────────────
|
|
72
|
-
|
|
73
|
-
test("#2885: cost table includes openai-codex provider models", () => {
|
|
74
|
-
const ids = BUNDLED_COST_TABLE.map(e => e.id);
|
|
75
|
-
const codexModels = [
|
|
76
|
-
"gpt-5.1", "gpt-5.1-codex-max", "gpt-5.1-codex-mini",
|
|
77
|
-
"gpt-5.2", "gpt-5.2-codex", "gpt-5.3-codex", "gpt-5.3-codex-spark", "gpt-5.4",
|
|
78
|
-
];
|
|
79
|
-
for (const model of codexModels) {
|
|
80
|
-
assert.ok(ids.includes(model), `cost table should include openai-codex model "${model}"`);
|
|
81
|
-
}
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
test("#2885: cost table includes modern OpenAI models", () => {
|
|
85
|
-
const ids = BUNDLED_COST_TABLE.map(e => e.id);
|
|
86
|
-
const newModels = [
|
|
87
|
-
"o4-mini", "o4-mini-deep-research",
|
|
88
|
-
"gpt-4.1", "gpt-4.1-mini", "gpt-4.1-nano",
|
|
89
|
-
"gpt-5", "gpt-5-mini", "gpt-5-nano", "gpt-5-pro",
|
|
90
|
-
];
|
|
91
|
-
for (const model of newModels) {
|
|
92
|
-
assert.ok(ids.includes(model), `cost table should include modern OpenAI model "${model}"`);
|
|
93
|
-
}
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
test("#2885: lookupModelCost returns costs for new models (not 999 fallback)", () => {
|
|
97
|
-
const newModels = ["o4-mini", "gpt-4.1", "gpt-5", "gpt-5.4", "gpt-5.1-codex-mini"];
|
|
98
|
-
for (const model of newModels) {
|
|
99
|
-
const entry = lookupModelCost(model);
|
|
100
|
-
assert.ok(entry, `lookupModelCost should find "${model}"`);
|
|
101
|
-
assert.ok(entry.inputPer1k < 999, `${model} should have a real cost, not the 999 fallback`);
|
|
102
|
-
}
|
|
103
|
-
});
|
|
@@ -172,11 +172,11 @@ test("#2192: unknown model is not downgraded — respects user config", () => {
|
|
|
172
172
|
const config = { ...defaultRoutingConfig(), enabled: true };
|
|
173
173
|
const result = resolveModelForComplexity(
|
|
174
174
|
makeClassification("light"),
|
|
175
|
-
{ primary: "
|
|
175
|
+
{ primary: "gpt-5.4", fallbacks: [] },
|
|
176
176
|
config,
|
|
177
|
-
["
|
|
177
|
+
["gpt-5.4", ...AVAILABLE_MODELS],
|
|
178
178
|
);
|
|
179
|
-
assert.equal(result.modelId, "
|
|
179
|
+
assert.equal(result.modelId, "gpt-5.4", "unknown model should be used as-is");
|
|
180
180
|
assert.equal(result.wasDowngraded, false, "should not be downgraded");
|
|
181
181
|
assert.ok(result.reason.includes("not in the known tier map"), "reason should explain why");
|
|
182
182
|
});
|
|
@@ -205,68 +205,3 @@ test("#2192: known model is still downgraded normally", () => {
|
|
|
205
205
|
assert.equal(result.wasDowngraded, true, "known heavy model should still be downgraded for light tasks");
|
|
206
206
|
assert.notEqual(result.modelId, "claude-opus-4-6");
|
|
207
207
|
});
|
|
208
|
-
|
|
209
|
-
// ─── #2885: openai-codex and modern OpenAI models in tier map ────────────────
|
|
210
|
-
|
|
211
|
-
test("#2885: openai-codex light-tier models are recognized", () => {
|
|
212
|
-
const config = { ...defaultRoutingConfig(), enabled: true };
|
|
213
|
-
const lightModels = ["gpt-4.1-mini", "gpt-4.1-nano", "gpt-5-mini", "gpt-5-nano", "gpt-5.1-codex-mini", "gpt-5.3-codex-spark"];
|
|
214
|
-
for (const model of lightModels) {
|
|
215
|
-
const result = resolveModelForComplexity(
|
|
216
|
-
makeClassification("light"),
|
|
217
|
-
{ primary: model, fallbacks: [] },
|
|
218
|
-
config,
|
|
219
|
-
[model, ...AVAILABLE_MODELS],
|
|
220
|
-
);
|
|
221
|
-
// Model is known AND light-tier, so requesting light should NOT downgrade
|
|
222
|
-
assert.equal(result.wasDowngraded, false, `${model} should be known as light tier (wasDowngraded)`);
|
|
223
|
-
assert.equal(result.modelId, model, `${model} should be returned as-is for light tier`);
|
|
224
|
-
// Verify it IS known (not hitting the unknown-model bail-out)
|
|
225
|
-
assert.ok(!result.reason.includes("not in the known tier map"), `${model} should be in the known tier map`);
|
|
226
|
-
}
|
|
227
|
-
});
|
|
228
|
-
|
|
229
|
-
test("#2885: openai-codex standard-tier models are recognized", () => {
|
|
230
|
-
const config = { ...defaultRoutingConfig(), enabled: true };
|
|
231
|
-
const standardModels = ["gpt-4.1", "gpt-5.1-codex-max"];
|
|
232
|
-
for (const model of standardModels) {
|
|
233
|
-
const result = resolveModelForComplexity(
|
|
234
|
-
makeClassification("standard"),
|
|
235
|
-
{ primary: model, fallbacks: [] },
|
|
236
|
-
config,
|
|
237
|
-
[model, ...AVAILABLE_MODELS],
|
|
238
|
-
);
|
|
239
|
-
assert.equal(result.wasDowngraded, false, `${model} should be known as standard tier`);
|
|
240
|
-
assert.equal(result.modelId, model, `${model} should be returned as-is for standard tier`);
|
|
241
|
-
assert.ok(!result.reason.includes("not in the known tier map"), `${model} should be in the known tier map`);
|
|
242
|
-
}
|
|
243
|
-
});
|
|
244
|
-
|
|
245
|
-
test("#2885: openai-codex heavy-tier models are recognized", () => {
|
|
246
|
-
const config = { ...defaultRoutingConfig(), enabled: true };
|
|
247
|
-
const heavyModels = ["gpt-5", "gpt-5-pro", "gpt-5.1", "gpt-5.2", "gpt-5.2-codex", "gpt-5.3-codex", "gpt-5.4", "o4-mini", "o4-mini-deep-research"];
|
|
248
|
-
for (const model of heavyModels) {
|
|
249
|
-
const result = resolveModelForComplexity(
|
|
250
|
-
makeClassification("heavy"),
|
|
251
|
-
{ primary: model, fallbacks: [] },
|
|
252
|
-
config,
|
|
253
|
-
[model, ...AVAILABLE_MODELS],
|
|
254
|
-
);
|
|
255
|
-
assert.equal(result.wasDowngraded, false, `${model} should be known as heavy tier`);
|
|
256
|
-
assert.equal(result.modelId, model, `${model} should be returned as-is for heavy tier`);
|
|
257
|
-
assert.ok(!result.reason.includes("not in the known tier map"), `${model} should be in the known tier map`);
|
|
258
|
-
}
|
|
259
|
-
});
|
|
260
|
-
|
|
261
|
-
test("#2885: heavy openai-codex model downgrades to light for light task", () => {
|
|
262
|
-
const config = { ...defaultRoutingConfig(), enabled: true };
|
|
263
|
-
const result = resolveModelForComplexity(
|
|
264
|
-
makeClassification("light"),
|
|
265
|
-
{ primary: "gpt-5.4", fallbacks: [] },
|
|
266
|
-
config,
|
|
267
|
-
["gpt-5.4", "gpt-4.1-nano", ...AVAILABLE_MODELS],
|
|
268
|
-
);
|
|
269
|
-
assert.equal(result.wasDowngraded, true, "heavy model should downgrade for light task");
|
|
270
|
-
// Should pick a light-tier model
|
|
271
|
-
assert.notEqual(result.modelId, "gpt-5.4", "should not use the heavy model for light task");
|
|
272
|
-
});
|
|
@@ -154,34 +154,6 @@ test("all auto-dispatch unitTypes have preference mapping or subagent handling",
|
|
|
154
154
|
assert.deepEqual(unmapped, [], `Unmapped unitTypes in preferences-models.ts: ${unmapped.join(", ")}`);
|
|
155
155
|
});
|
|
156
156
|
|
|
157
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
158
|
-
// #2900: worktree-merge must map to completion phase
|
|
159
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
160
|
-
|
|
161
|
-
test("#2900: resolveModelWithFallbacksForUnit handles worktree-merge", () => {
|
|
162
|
-
assert.ok(preferencesSrc.includes('"worktree-merge"'), "missing worktree-merge case in switch");
|
|
163
|
-
});
|
|
164
|
-
|
|
165
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
166
|
-
// #2900: KNOWN_UNIT_TYPES must include all dispatched unit types
|
|
167
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
168
|
-
|
|
169
|
-
const preferenceTypesSrc = readSrc("preferences-types.ts");
|
|
170
|
-
|
|
171
|
-
test("#2900: KNOWN_UNIT_TYPES includes all auto-dispatch unit types", () => {
|
|
172
|
-
const missing: string[] = [];
|
|
173
|
-
for (const ut of ALL_KNOWN_UNIT_TYPES) {
|
|
174
|
-
if (!preferenceTypesSrc.includes(`"${ut}"`)) {
|
|
175
|
-
missing.push(ut);
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
assert.deepEqual(missing, [], `Missing from KNOWN_UNIT_TYPES: ${missing.join(", ")}`);
|
|
179
|
-
});
|
|
180
|
-
|
|
181
|
-
test("#2900: KNOWN_UNIT_TYPES includes worktree-merge", () => {
|
|
182
|
-
assert.ok(preferenceTypesSrc.includes('"worktree-merge"'), "worktree-merge missing from KNOWN_UNIT_TYPES");
|
|
183
|
-
});
|
|
184
|
-
|
|
185
157
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
186
158
|
// metrics.ts: classifyUnitPhase coverage
|
|
187
159
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
@@ -4,7 +4,6 @@ import assert from "node:assert/strict";
|
|
|
4
4
|
import {
|
|
5
5
|
buildDesktopNotificationCommand,
|
|
6
6
|
shouldSendDesktopNotification,
|
|
7
|
-
formatNotificationTitle,
|
|
8
7
|
} from "../notifications.js";
|
|
9
8
|
import type { NotificationPreferences } from "../types.js";
|
|
10
9
|
|
|
@@ -88,47 +87,3 @@ test("buildDesktopNotificationCommand preserves literal shell characters on linu
|
|
|
88
87
|
test("buildDesktopNotificationCommand skips unsupported platforms", () => {
|
|
89
88
|
assert.equal(buildDesktopNotificationCommand("win32", "Title", "Message"), null);
|
|
90
89
|
});
|
|
91
|
-
|
|
92
|
-
// ─── formatNotificationTitle — project context in notifications (#2708) ──────
|
|
93
|
-
|
|
94
|
-
test("formatNotificationTitle returns 'GSD' when no project name is given", () => {
|
|
95
|
-
assert.equal(formatNotificationTitle(), "GSD");
|
|
96
|
-
assert.equal(formatNotificationTitle(undefined), "GSD");
|
|
97
|
-
assert.equal(formatNotificationTitle(""), "GSD");
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
test("formatNotificationTitle includes project name when provided", () => {
|
|
101
|
-
assert.equal(formatNotificationTitle("my-app"), "GSD — my-app");
|
|
102
|
-
});
|
|
103
|
-
|
|
104
|
-
test("formatNotificationTitle trims whitespace from project name", () => {
|
|
105
|
-
assert.equal(formatNotificationTitle(" spaced "), "GSD — spaced");
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
test("buildDesktopNotificationCommand includes project name in title on linux", () => {
|
|
109
|
-
const command = buildDesktopNotificationCommand(
|
|
110
|
-
"linux",
|
|
111
|
-
formatNotificationTitle("my-project"),
|
|
112
|
-
"All milestones complete!",
|
|
113
|
-
"success",
|
|
114
|
-
);
|
|
115
|
-
assert.ok(command);
|
|
116
|
-
assert.equal(command.args[2], "GSD — my-project");
|
|
117
|
-
assert.equal(command.args[3], "All milestones complete!");
|
|
118
|
-
});
|
|
119
|
-
|
|
120
|
-
test("buildDesktopNotificationCommand includes project name in title on macOS", () => {
|
|
121
|
-
const command = buildDesktopNotificationCommand(
|
|
122
|
-
"darwin",
|
|
123
|
-
formatNotificationTitle("my-project"),
|
|
124
|
-
"Budget 90%",
|
|
125
|
-
"warning",
|
|
126
|
-
);
|
|
127
|
-
assert.ok(command);
|
|
128
|
-
if (command.file.includes("terminal-notifier")) {
|
|
129
|
-
const titleIdx = command.args.indexOf("-title");
|
|
130
|
-
assert.equal(command.args[titleIdx + 1], "GSD — my-project");
|
|
131
|
-
} else {
|
|
132
|
-
assert.match(command.args[1], /GSD — my-project/);
|
|
133
|
-
}
|
|
134
|
-
});
|
|
@@ -4,7 +4,7 @@ import { mkdtempSync, mkdirSync, rmSync, readFileSync, existsSync, writeFileSync
|
|
|
4
4
|
import { join } from 'node:path';
|
|
5
5
|
import { tmpdir } from 'node:os';
|
|
6
6
|
|
|
7
|
-
import { openDatabase, closeDatabase, getMilestone, getMilestoneSlices
|
|
7
|
+
import { openDatabase, closeDatabase, getMilestone, getMilestoneSlices } from '../gsd-db.ts';
|
|
8
8
|
import { handlePlanMilestone } from '../tools/plan-milestone.ts';
|
|
9
9
|
import { parseRoadmap } from '../parsers-legacy.ts';
|
|
10
10
|
|
|
@@ -197,35 +197,3 @@ test('handlePlanMilestone reruns idempotently and updates existing planning stat
|
|
|
197
197
|
cleanup(base);
|
|
198
198
|
}
|
|
199
199
|
});
|
|
200
|
-
|
|
201
|
-
// Regression: #2960 — plan-milestone must refuse to overwrite completed slices
|
|
202
|
-
test('handlePlanMilestone refuses to re-plan a milestone with completed slices (#2960)', async () => {
|
|
203
|
-
const base = makeTmpBase();
|
|
204
|
-
const dbPath = join(base, '.gsd', 'gsd.db');
|
|
205
|
-
openDatabase(dbPath);
|
|
206
|
-
|
|
207
|
-
try {
|
|
208
|
-
// First plan succeeds
|
|
209
|
-
const first = await handlePlanMilestone(validParams(), base);
|
|
210
|
-
assert.ok(!('error' in first), `initial plan should succeed: ${'error' in first ? first.error : ''}`);
|
|
211
|
-
|
|
212
|
-
// Mark S01 as complete
|
|
213
|
-
updateSliceStatus('M001', 'S01', 'complete');
|
|
214
|
-
|
|
215
|
-
// Second plan should fail — S01 is already complete
|
|
216
|
-
const second = await handlePlanMilestone({
|
|
217
|
-
...validParams(),
|
|
218
|
-
vision: 'Should not overwrite',
|
|
219
|
-
}, base);
|
|
220
|
-
assert.ok('error' in second, 'should refuse to re-plan when slices are completed');
|
|
221
|
-
assert.match(second.error, /cannot re-plan/i);
|
|
222
|
-
assert.match(second.error, /S01/);
|
|
223
|
-
|
|
224
|
-
// Verify the completed slice was not overwritten
|
|
225
|
-
const slices = getMilestoneSlices('M001');
|
|
226
|
-
const s01 = slices.find(s => s.id === 'S01');
|
|
227
|
-
assert.equal(s01?.status, 'complete', 'S01 should still be complete');
|
|
228
|
-
} finally {
|
|
229
|
-
cleanup(base);
|
|
230
|
-
}
|
|
231
|
-
});
|
|
@@ -202,35 +202,6 @@ test("reassess-roadmap prompt names gsd_reassess_roadmap as the tool to use", ()
|
|
|
202
202
|
assert.match(prompt, /gsd_reassess_roadmap/);
|
|
203
203
|
});
|
|
204
204
|
|
|
205
|
-
// ─── Bug #2933: prompt parameter names must match camelCase TypeBox schema ───
|
|
206
|
-
|
|
207
|
-
test("execute-task prompt uses camelCase parameter names matching TypeBox schema", () => {
|
|
208
|
-
const prompt = readPrompt("execute-task");
|
|
209
|
-
// The gsd_complete_task tool schema uses camelCase: milestoneId, sliceId, taskId
|
|
210
|
-
// Prompts must NOT tell the LLM to use snake_case (milestone_id, slice_id, task_id)
|
|
211
|
-
const toolCallLine = prompt.split("\n").find((l) => /gsd_complete_task/.test(l) || /gsd_task_complete/.test(l));
|
|
212
|
-
assert.ok(toolCallLine, "prompt must contain a gsd_complete_task or gsd_task_complete tool call line");
|
|
213
|
-
assert.doesNotMatch(toolCallLine!, /milestone_id/, "must use milestoneId, not milestone_id");
|
|
214
|
-
assert.doesNotMatch(toolCallLine!, /slice_id/, "must use sliceId, not slice_id");
|
|
215
|
-
assert.doesNotMatch(toolCallLine!, /task_id/, "must use taskId, not task_id");
|
|
216
|
-
// Positive: must mention the camelCase names
|
|
217
|
-
assert.match(toolCallLine!, /milestoneId/);
|
|
218
|
-
assert.match(toolCallLine!, /sliceId/);
|
|
219
|
-
assert.match(toolCallLine!, /taskId/);
|
|
220
|
-
});
|
|
221
|
-
|
|
222
|
-
test("complete-slice prompt uses camelCase parameter names matching TypeBox schema", () => {
|
|
223
|
-
const prompt = readPrompt("complete-slice");
|
|
224
|
-
// The gsd_complete_slice tool schema uses camelCase: milestoneId, sliceId
|
|
225
|
-
const toolCallLine = prompt.split("\n").find((l) => /gsd_complete_slice/.test(l) || /gsd_slice_complete/.test(l));
|
|
226
|
-
assert.ok(toolCallLine, "prompt must contain a gsd_complete_slice or gsd_slice_complete tool call line");
|
|
227
|
-
assert.doesNotMatch(toolCallLine!, /milestone_id/, "must use milestoneId, not milestone_id");
|
|
228
|
-
assert.doesNotMatch(toolCallLine!, /slice_id/, "must use sliceId, not slice_id");
|
|
229
|
-
// Positive: must mention the camelCase names
|
|
230
|
-
assert.match(toolCallLine!, /milestoneId/);
|
|
231
|
-
assert.match(toolCallLine!, /sliceId/);
|
|
232
|
-
});
|
|
233
|
-
|
|
234
205
|
test("reactive-execute prompt references tool calls instead of checkbox updates", () => {
|
|
235
206
|
const prompt = readPrompt("reactive-execute");
|
|
236
207
|
assert.doesNotMatch(prompt, /checkbox updates/);
|
|
@@ -118,44 +118,6 @@ test("classifyError: rate limit takes precedence over auth keywords", () => {
|
|
|
118
118
|
assert.ok(isTransient(result));
|
|
119
119
|
});
|
|
120
120
|
|
|
121
|
-
// ── STREAM_RE: V8 JSON parse error variants (#2916) ────────────────────────
|
|
122
|
-
|
|
123
|
-
test("classifyError: 'Expected comma/brace after property value in JSON' is transient stream", () => {
|
|
124
|
-
const result = classifyError(
|
|
125
|
-
"Expected ',' or '}' after property value in JSON at position 2056 (line 1 column 2057)"
|
|
126
|
-
);
|
|
127
|
-
assert.equal(result.kind, "stream");
|
|
128
|
-
assert.ok(isTransient(result));
|
|
129
|
-
assert.ok("retryAfterMs" in result && result.retryAfterMs === 15_000);
|
|
130
|
-
});
|
|
131
|
-
|
|
132
|
-
test("classifyError: 'Expected colon after property name in JSON' is transient stream", () => {
|
|
133
|
-
const result = classifyError(
|
|
134
|
-
"Expected ':' after property name in JSON at position 500 (line 1 column 501)"
|
|
135
|
-
);
|
|
136
|
-
assert.equal(result.kind, "stream");
|
|
137
|
-
assert.ok(isTransient(result));
|
|
138
|
-
assert.ok("retryAfterMs" in result && result.retryAfterMs === 15_000);
|
|
139
|
-
});
|
|
140
|
-
|
|
141
|
-
test("classifyError: 'Expected property name or brace in JSON' is transient stream", () => {
|
|
142
|
-
const result = classifyError(
|
|
143
|
-
"Expected property name or '}' in JSON at position 42 (line 1 column 43)"
|
|
144
|
-
);
|
|
145
|
-
assert.equal(result.kind, "stream");
|
|
146
|
-
assert.ok(isTransient(result));
|
|
147
|
-
assert.ok("retryAfterMs" in result && result.retryAfterMs === 15_000);
|
|
148
|
-
});
|
|
149
|
-
|
|
150
|
-
test("classifyError: 'Unterminated string in JSON' is transient stream", () => {
|
|
151
|
-
const result = classifyError(
|
|
152
|
-
"Unterminated string in JSON at position 100 (line 1 column 101)"
|
|
153
|
-
);
|
|
154
|
-
assert.equal(result.kind, "stream");
|
|
155
|
-
assert.ok(isTransient(result));
|
|
156
|
-
assert.ok("retryAfterMs" in result && result.retryAfterMs === 15_000);
|
|
157
|
-
});
|
|
158
|
-
|
|
159
121
|
// ── isTransientNetworkError ──────────────────────────────────────────────────
|
|
160
122
|
|
|
161
123
|
test("isTransientNetworkError detects ECONNRESET", () => {
|