gsd-pi 2.58.0-dev.778d6ac → 2.58.0-dev.d63175c
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/cli.js +35 -49
- package/dist/headless-ui.d.ts +0 -17
- package/dist/headless-ui.js +3 -97
- package/dist/headless.js +6 -67
- package/dist/help-text.js +0 -1
- package/dist/onboarding.js +0 -44
- package/dist/resource-loader.js +1 -16
- package/dist/resources/agents/researcher.md +1 -1
- package/dist/resources/extensions/ask-user-questions.js +3 -16
- package/dist/resources/extensions/async-jobs/extension-manifest.json +1 -1
- package/dist/resources/extensions/bg-shell/extension-manifest.json +1 -1
- package/dist/resources/extensions/browser-tools/extension-manifest.json +1 -1
- package/dist/resources/extensions/claude-code-cli/partial-builder.js +6 -14
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +36 -59
- package/dist/resources/extensions/context7/extension-manifest.json +1 -1
- package/dist/resources/extensions/get-secrets-from-user.js +5 -8
- package/dist/resources/extensions/google-search/extension-manifest.json +1 -1
- package/dist/resources/extensions/google-search/index.js +1 -2
- package/dist/resources/extensions/gsd/auto/phases.js +21 -25
- package/dist/resources/extensions/gsd/auto-artifact-paths.js +2 -2
- package/dist/resources/extensions/gsd/auto-dashboard.js +20 -37
- package/dist/resources/extensions/gsd/auto-dispatch.js +2 -17
- package/dist/resources/extensions/gsd/auto-model-selection.js +3 -26
- package/dist/resources/extensions/gsd/auto-post-unit.js +4 -16
- package/dist/resources/extensions/gsd/auto-prompts.js +1 -1
- package/dist/resources/extensions/gsd/auto-recovery.js +5 -13
- package/dist/resources/extensions/gsd/auto-start.js +22 -35
- package/dist/resources/extensions/gsd/auto-worktree.js +12 -196
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +0 -32
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +8 -80
- package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +1 -32
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +18 -33
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +11 -44
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +0 -67
- package/dist/resources/extensions/gsd/captures.js +4 -56
- package/dist/resources/extensions/gsd/db-writer.js +8 -116
- package/dist/resources/extensions/gsd/doctor-git-checks.js +0 -28
- package/dist/resources/extensions/gsd/doctor-providers.js +1 -2
- package/dist/resources/extensions/gsd/doctor-runtime-checks.js +4 -5
- package/dist/resources/extensions/gsd/doctor.js +1 -3
- package/dist/resources/extensions/gsd/error-classifier.js +10 -13
- package/dist/resources/extensions/gsd/extension-manifest.json +1 -16
- package/dist/resources/extensions/gsd/forensics.js +20 -123
- package/dist/resources/extensions/gsd/git-service.js +1 -23
- package/dist/resources/extensions/gsd/gitignore.js +0 -33
- package/dist/resources/extensions/gsd/gsd-db.js +9 -36
- package/dist/resources/extensions/gsd/guided-flow.js +44 -106
- package/dist/resources/extensions/gsd/health-widget-core.js +0 -31
- package/dist/resources/extensions/gsd/health-widget.js +0 -17
- package/dist/resources/extensions/gsd/index.js +1 -1
- package/dist/resources/extensions/gsd/memory-extractor.js +0 -7
- package/dist/resources/extensions/gsd/migrate-external.js +1 -8
- package/dist/resources/extensions/gsd/model-cost-table.js +0 -18
- package/dist/resources/extensions/gsd/model-router.js +1 -35
- package/dist/resources/extensions/gsd/native-git-bridge.js +0 -17
- package/dist/resources/extensions/gsd/notifications.js +1 -16
- package/dist/resources/extensions/gsd/parallel-eligibility.js +2 -13
- package/dist/resources/extensions/gsd/parallel-merge.js +5 -78
- package/dist/resources/extensions/gsd/parsers-legacy.js +3 -20
- package/dist/resources/extensions/gsd/paths.js +0 -43
- package/dist/resources/extensions/gsd/preferences-models.js +1 -14
- package/dist/resources/extensions/gsd/preferences-types.js +1 -2
- package/dist/resources/extensions/gsd/preferences.js +16 -13
- package/dist/resources/extensions/gsd/prompt-loader.js +1 -4
- package/dist/resources/extensions/gsd/prompts/complete-milestone.md +1 -1
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +2 -4
- package/dist/resources/extensions/gsd/prompts/discuss-headless.md +1 -1
- package/dist/resources/extensions/gsd/prompts/discuss.md +1 -1
- package/dist/resources/extensions/gsd/prompts/execute-task.md +1 -3
- package/dist/resources/extensions/gsd/prompts/forensics.md +2 -2
- package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +1 -1
- package/dist/resources/extensions/gsd/prompts/guided-discuss-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +0 -2
- package/dist/resources/extensions/gsd/prompts/rethink.md +1 -1
- package/dist/resources/extensions/gsd/prompts/triage-captures.md +0 -1
- package/dist/resources/extensions/gsd/repo-identity.js +11 -205
- package/dist/resources/extensions/gsd/rethink.js +0 -5
- package/dist/resources/extensions/gsd/roadmap-slices.js +4 -5
- package/dist/resources/extensions/gsd/state.js +27 -85
- package/dist/resources/extensions/gsd/tests/dist-redirect.mjs +1 -20
- package/dist/resources/extensions/gsd/tools/complete-task.js +71 -34
- package/dist/resources/extensions/gsd/tools/plan-milestone.js +2 -12
- package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +1 -29
- package/dist/resources/extensions/gsd/tools/validate-milestone.js +3 -14
- package/dist/resources/extensions/gsd/triage-resolution.js +7 -22
- package/dist/resources/extensions/gsd/undo.js +2 -2
- package/dist/resources/extensions/gsd/unit-ownership.js +33 -164
- package/dist/resources/extensions/gsd/verdict-parser.js +8 -20
- package/dist/resources/extensions/gsd/workflow-manifest.js +5 -24
- package/dist/resources/extensions/gsd/workflow-projections.js +63 -95
- package/dist/resources/extensions/gsd/workflow-reconcile.js +5 -35
- package/dist/resources/extensions/gsd/workspace-index.js +0 -24
- package/dist/resources/extensions/gsd/worktree-manager.js +1 -105
- package/dist/resources/extensions/gsd/worktree-resolver.js +3 -20
- package/dist/resources/extensions/mcp-client/index.js +7 -11
- package/dist/resources/extensions/search-the-web/extension-manifest.json +1 -1
- package/dist/resources/extensions/shared/interview-ui.js +1 -11
- package/dist/resources/skills/create-gsd-extension/SKILL.md +3 -5
- package/dist/resources/skills/create-gsd-extension/references/key-rules-gotchas.md +4 -5
- package/dist/resources/skills/create-gsd-extension/workflows/add-capability.md +2 -2
- package/dist/resources/skills/create-gsd-extension/workflows/create-extension.md +4 -4
- package/dist/resources/skills/create-gsd-extension/workflows/debug-extension.md +3 -5
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +17 -17
- package/dist/web/standalone/.next/build-manifest.json +3 -3
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
- package/dist/web/standalone/.next/required-server-files.json +1 -1
- package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.html +2 -2
- package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +2 -2
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +17 -17
- package/dist/web/standalone/.next/server/chunks/2229.js +2 -2
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/dist/web/standalone/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/.next/server/pages/500.html +2 -2
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/web/standalone/.next/static/chunks/6502.8b732f67a11b11b4.js +9 -0
- package/dist/web/standalone/.next/static/chunks/{webpack-a1c1e452c6b32d04.js → webpack-61d3afac6d0f0ce7.js} +1 -1
- package/dist/web/standalone/.next/static/css/a58ef8a151aa0493.css +1 -0
- package/dist/web/standalone/server.js +1 -1
- package/dist/web-mode.js +1 -2
- package/package.json +2 -2
- package/packages/native/dist/ast/index.js +5 -9
- package/packages/native/dist/ast/types.js +1 -2
- package/packages/native/dist/clipboard/index.js +7 -12
- package/packages/native/dist/clipboard/types.js +1 -2
- package/packages/native/dist/diff/index.js +7 -12
- package/packages/native/dist/diff/types.js +1 -2
- package/packages/native/dist/fd/index.js +3 -6
- package/packages/native/dist/fd/types.js +1 -2
- package/packages/native/dist/glob/index.js +5 -9
- package/packages/native/dist/glob/types.js +1 -2
- package/packages/native/dist/grep/index.js +5 -9
- package/packages/native/dist/grep/types.js +1 -2
- package/packages/native/dist/gsd-parser/index.js +11 -18
- package/packages/native/dist/gsd-parser/types.js +1 -2
- package/packages/native/dist/highlight/index.js +7 -12
- package/packages/native/dist/highlight/types.js +1 -2
- package/packages/native/dist/html/index.js +3 -6
- package/packages/native/dist/html/types.js +1 -2
- package/packages/native/dist/image/index.js +5 -10
- package/packages/native/dist/image/types.js +4 -7
- package/packages/native/dist/index.js +17 -70
- package/packages/native/dist/json-parse/index.js +8 -13
- package/packages/native/dist/native.js +10 -47
- package/packages/native/dist/ps/index.js +9 -15
- package/packages/native/dist/ps/types.js +1 -2
- package/packages/native/dist/stream-process/index.js +7 -12
- package/packages/native/dist/text/index.js +14 -24
- package/packages/native/dist/text/types.js +2 -5
- package/packages/native/dist/truncate/index.js +7 -12
- package/packages/native/dist/ttsr/index.js +7 -12
- package/packages/native/dist/ttsr/types.js +1 -2
- package/packages/native/dist/xxhash/index.js +5 -9
- package/packages/native/package.json +19 -19
- package/packages/native/src/native.ts +8 -9
- package/packages/pi-agent-core/dist/agent-loop.js +2 -3
- package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/packages/pi-agent-core/dist/proxy.d.ts +1 -1
- package/packages/pi-agent-core/dist/proxy.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/proxy.js.map +1 -1
- package/packages/pi-agent-core/src/agent-loop.ts +2 -3
- package/packages/pi-agent-core/src/proxy.ts +1 -1
- package/packages/pi-ai/dist/env-api-keys.js +0 -1
- package/packages/pi-ai/dist/env-api-keys.js.map +1 -1
- package/packages/pi-ai/dist/index.d.ts +0 -1
- package/packages/pi-ai/dist/index.d.ts.map +1 -1
- package/packages/pi-ai/dist/index.js +0 -1
- package/packages/pi-ai/dist/index.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.js +2 -19
- package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
- package/packages/pi-ai/dist/types.d.ts +3 -3
- package/packages/pi-ai/dist/types.d.ts.map +1 -1
- package/packages/pi-ai/dist/types.js.map +1 -1
- package/packages/pi-ai/dist/utils/json-parse.d.ts +0 -3
- package/packages/pi-ai/dist/utils/json-parse.d.ts.map +1 -1
- package/packages/pi-ai/dist/utils/json-parse.js +1 -24
- package/packages/pi-ai/dist/utils/json-parse.js.map +1 -1
- package/packages/pi-ai/src/env-api-keys.ts +0 -1
- package/packages/pi-ai/src/index.ts +0 -1
- package/packages/pi-ai/src/providers/anthropic-shared.ts +2 -17
- package/packages/pi-ai/src/types.ts +2 -3
- package/packages/pi-ai/src/utils/json-parse.ts +1 -28
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts +0 -4
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js +0 -31
- package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts +1 -17
- package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.js +2 -62
- package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/exec.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/exec.js +1 -3
- package/packages/pi-coding-agent/dist/core/exec.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +0 -4
- package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.js +0 -2
- package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts +0 -5
- package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.js +0 -5
- package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/index.d.ts +1 -1
- package/packages/pi-coding-agent/dist/core/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/index.js +1 -1
- package/packages/pi-coding-agent/dist/core/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/index.js +0 -3
- package/packages/pi-coding-agent/dist/core/lsp/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/lspmux.js +0 -3
- package/packages/pi-coding-agent/dist/core/lsp/lspmux.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/messages.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/messages.js +2 -31
- package/packages/pi-coding-agent/dist/core/messages.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-resolver.js +0 -1
- package/packages/pi-coding-agent/dist/core/model-resolver.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/resource-loader.d.ts +0 -10
- package/packages/pi-coding-agent/dist/core/resource-loader.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/resource-loader.js +1 -12
- package/packages/pi-coding-agent/dist/core/resource-loader.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.d.ts +0 -6
- package/packages/pi-coding-agent/dist/core/retry-handler.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.js +1 -48
- package/packages/pi-coding-agent/dist/core/retry-handler.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/hashline-read.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/hashline-read.js +3 -10
- package/packages/pi-coding-agent/dist/core/tools/hashline-read.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/read.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/read.js +4 -13
- package/packages/pi-coding-agent/dist/core/tools/read.js.map +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts +2 -2
- package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/index.js +1 -1
- package/packages/pi-coding-agent/dist/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +0 -4
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.d.ts +0 -1
- package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.js +0 -5
- package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.js.map +1 -1
- package/packages/pi-coding-agent/src/core/agent-session.ts +1 -38
- package/packages/pi-coding-agent/src/core/compaction/compaction.ts +1 -94
- package/packages/pi-coding-agent/src/core/exec.ts +1 -3
- package/packages/pi-coding-agent/src/core/extensions/index.ts +0 -4
- package/packages/pi-coding-agent/src/core/extensions/loader.ts +0 -5
- package/packages/pi-coding-agent/src/core/index.ts +0 -6
- package/packages/pi-coding-agent/src/core/lsp/index.ts +0 -3
- package/packages/pi-coding-agent/src/core/lsp/lspmux.ts +0 -3
- package/packages/pi-coding-agent/src/core/messages.ts +2 -29
- package/packages/pi-coding-agent/src/core/model-resolver.ts +0 -1
- package/packages/pi-coding-agent/src/core/resource-loader.ts +1 -20
- package/packages/pi-coding-agent/src/core/retry-handler.ts +1 -52
- package/packages/pi-coding-agent/src/core/tools/hashline-read.ts +3 -11
- package/packages/pi-coding-agent/src/core/tools/read.ts +4 -14
- package/packages/pi-coding-agent/src/index.ts +0 -6
- package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +0 -7
- package/packages/pi-coding-agent/src/modes/rpc/remote-terminal.ts +0 -6
- package/packages/pi-tui/dist/terminal.d.ts +0 -2
- package/packages/pi-tui/dist/terminal.d.ts.map +1 -1
- package/packages/pi-tui/dist/terminal.js +0 -9
- package/packages/pi-tui/dist/terminal.js.map +1 -1
- package/packages/pi-tui/dist/tui.d.ts.map +1 -1
- package/packages/pi-tui/dist/tui.js +0 -9
- package/packages/pi-tui/dist/tui.js.map +1 -1
- package/packages/pi-tui/src/terminal.ts +0 -14
- package/packages/pi-tui/src/tui.ts +0 -8
- package/scripts/ensure-workspace-builds.cjs +14 -45
- package/src/resources/agents/researcher.md +1 -1
- package/src/resources/extensions/ask-user-questions.ts +3 -21
- package/src/resources/extensions/async-jobs/extension-manifest.json +1 -1
- package/src/resources/extensions/bg-shell/extension-manifest.json +1 -1
- package/src/resources/extensions/browser-tools/extension-manifest.json +1 -1
- package/src/resources/extensions/claude-code-cli/partial-builder.ts +6 -13
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +35 -63
- package/src/resources/extensions/claude-code-cli/tests/partial-builder.test.ts +0 -28
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +1 -108
- package/src/resources/extensions/context7/extension-manifest.json +1 -1
- package/src/resources/extensions/get-secrets-from-user.ts +5 -8
- package/src/resources/extensions/google-search/extension-manifest.json +1 -1
- package/src/resources/extensions/google-search/index.ts +1 -2
- package/src/resources/extensions/gsd/auto/loop-deps.ts +0 -1
- package/src/resources/extensions/gsd/auto/phases.ts +34 -43
- package/src/resources/extensions/gsd/auto-artifact-paths.ts +2 -2
- package/src/resources/extensions/gsd/auto-dashboard.ts +19 -37
- package/src/resources/extensions/gsd/auto-dispatch.ts +2 -18
- package/src/resources/extensions/gsd/auto-model-selection.ts +5 -26
- package/src/resources/extensions/gsd/auto-post-unit.ts +4 -18
- package/src/resources/extensions/gsd/auto-prompts.ts +1 -1
- package/src/resources/extensions/gsd/auto-recovery.ts +5 -12
- package/src/resources/extensions/gsd/auto-start.ts +26 -35
- package/src/resources/extensions/gsd/auto-worktree.ts +9 -190
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +0 -31
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +8 -85
- package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +1 -38
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +19 -31
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +11 -50
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +0 -75
- package/src/resources/extensions/gsd/captures.ts +3 -63
- package/src/resources/extensions/gsd/db-writer.ts +7 -140
- package/src/resources/extensions/gsd/doctor-git-checks.ts +0 -26
- package/src/resources/extensions/gsd/doctor-providers.ts +1 -2
- package/src/resources/extensions/gsd/doctor-runtime-checks.ts +4 -5
- package/src/resources/extensions/gsd/doctor.ts +1 -3
- package/src/resources/extensions/gsd/error-classifier.ts +11 -14
- package/src/resources/extensions/gsd/extension-manifest.json +1 -16
- package/src/resources/extensions/gsd/forensics.ts +20 -144
- package/src/resources/extensions/gsd/git-service.ts +3 -26
- package/src/resources/extensions/gsd/gitignore.ts +0 -33
- package/src/resources/extensions/gsd/gsd-db.ts +7 -43
- package/src/resources/extensions/gsd/guided-flow.ts +45 -114
- package/src/resources/extensions/gsd/health-widget-core.ts +0 -34
- package/src/resources/extensions/gsd/health-widget.ts +0 -17
- package/src/resources/extensions/gsd/index.ts +0 -1
- package/src/resources/extensions/gsd/memory-extractor.ts +0 -8
- package/src/resources/extensions/gsd/migrate-external.ts +1 -9
- package/src/resources/extensions/gsd/model-cost-table.ts +0 -19
- package/src/resources/extensions/gsd/model-router.ts +1 -35
- package/src/resources/extensions/gsd/native-git-bridge.ts +0 -17
- package/src/resources/extensions/gsd/notifications.ts +0 -16
- package/src/resources/extensions/gsd/parallel-eligibility.ts +2 -15
- package/src/resources/extensions/gsd/parallel-merge.ts +4 -87
- package/src/resources/extensions/gsd/parsers-legacy.ts +3 -22
- package/src/resources/extensions/gsd/paths.ts +0 -42
- package/src/resources/extensions/gsd/preferences-models.ts +1 -14
- package/src/resources/extensions/gsd/preferences-types.ts +1 -2
- package/src/resources/extensions/gsd/preferences.ts +15 -13
- package/src/resources/extensions/gsd/prompt-loader.ts +1 -4
- package/src/resources/extensions/gsd/prompts/complete-milestone.md +1 -1
- package/src/resources/extensions/gsd/prompts/complete-slice.md +2 -4
- package/src/resources/extensions/gsd/prompts/discuss-headless.md +1 -1
- package/src/resources/extensions/gsd/prompts/discuss.md +1 -1
- package/src/resources/extensions/gsd/prompts/execute-task.md +1 -3
- package/src/resources/extensions/gsd/prompts/forensics.md +2 -2
- package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +1 -1
- package/src/resources/extensions/gsd/prompts/guided-discuss-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/plan-slice.md +0 -2
- package/src/resources/extensions/gsd/prompts/rethink.md +1 -1
- package/src/resources/extensions/gsd/prompts/triage-captures.md +0 -1
- package/src/resources/extensions/gsd/repo-identity.ts +11 -186
- package/src/resources/extensions/gsd/rethink.ts +0 -6
- package/src/resources/extensions/gsd/roadmap-slices.ts +4 -5
- package/src/resources/extensions/gsd/state.ts +32 -84
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +0 -29
- package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +1 -71
- package/src/resources/extensions/gsd/tests/captures.test.ts +0 -103
- package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +0 -27
- package/src/resources/extensions/gsd/tests/complete-slice.test.ts +0 -21
- package/src/resources/extensions/gsd/tests/db-writer.test.ts +12 -7
- package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +5 -78
- package/src/resources/extensions/gsd/tests/derive-state.test.ts +0 -29
- package/src/resources/extensions/gsd/tests/discuss-queued-milestones.test.ts +0 -40
- package/src/resources/extensions/gsd/tests/dist-redirect.mjs +1 -20
- package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +0 -117
- package/src/resources/extensions/gsd/tests/empty-db-reconciliation.test.ts +79 -0
- package/src/resources/extensions/gsd/tests/forensics-dedup.test.ts +0 -31
- package/src/resources/extensions/gsd/tests/gsd-tools.test.ts +12 -125
- package/src/resources/extensions/gsd/tests/health-widget.test.ts +0 -67
- package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +1 -111
- package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +0 -101
- package/src/resources/extensions/gsd/tests/integration/auto-worktree.test.ts +0 -59
- package/src/resources/extensions/gsd/tests/integration/parallel-merge.test.ts +0 -110
- package/src/resources/extensions/gsd/tests/integration/run-uat.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/memory-extractor.test.ts +2 -85
- package/src/resources/extensions/gsd/tests/model-cost-table.test.ts +0 -34
- package/src/resources/extensions/gsd/tests/model-router.test.ts +3 -68
- package/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +0 -28
- package/src/resources/extensions/gsd/tests/notifications.test.ts +0 -45
- package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +1 -33
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +0 -29
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +0 -38
- package/src/resources/extensions/gsd/tests/reassess-handler.test.ts +0 -117
- package/src/resources/extensions/gsd/tests/roadmap-slices.test.ts +0 -97
- package/src/resources/extensions/gsd/tests/secure-env-collect.test.ts +0 -134
- package/src/resources/extensions/gsd/tests/tool-naming.test.ts +1 -2
- package/src/resources/extensions/gsd/tests/triage-resolution.test.ts +0 -8
- package/src/resources/extensions/gsd/tests/unit-ownership.test.ts +17 -100
- package/src/resources/extensions/gsd/tests/validate-milestone-write-order.test.ts +1 -4
- package/src/resources/extensions/gsd/tests/workflow-logger.test.ts +0 -48
- package/src/resources/extensions/gsd/tests/workflow-manifest.test.ts +0 -92
- package/src/resources/extensions/gsd/tests/workflow-projections.test.ts +2 -4
- package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +1 -48
- package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +5 -29
- package/src/resources/extensions/gsd/tools/complete-task.ts +74 -36
- package/src/resources/extensions/gsd/tools/plan-milestone.ts +1 -13
- package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +0 -36
- package/src/resources/extensions/gsd/tools/validate-milestone.ts +2 -20
- package/src/resources/extensions/gsd/triage-resolution.ts +6 -23
- package/src/resources/extensions/gsd/types.ts +2 -4
- package/src/resources/extensions/gsd/undo.ts +2 -2
- package/src/resources/extensions/gsd/unit-ownership.ts +35 -206
- package/src/resources/extensions/gsd/verdict-parser.ts +6 -21
- package/src/resources/extensions/gsd/workflow-logger.ts +1 -3
- package/src/resources/extensions/gsd/workflow-manifest.ts +5 -22
- package/src/resources/extensions/gsd/workflow-projections.ts +64 -97
- package/src/resources/extensions/gsd/workflow-reconcile.ts +10 -39
- package/src/resources/extensions/gsd/workspace-index.ts +0 -30
- package/src/resources/extensions/gsd/worktree-manager.ts +1 -120
- package/src/resources/extensions/gsd/worktree-resolver.ts +3 -22
- package/src/resources/extensions/mcp-client/index.ts +7 -13
- package/src/resources/extensions/search-the-web/extension-manifest.json +1 -1
- package/src/resources/extensions/shared/interview-ui.ts +1 -12
- package/src/resources/skills/create-gsd-extension/SKILL.md +3 -5
- package/src/resources/skills/create-gsd-extension/references/key-rules-gotchas.md +4 -5
- package/src/resources/skills/create-gsd-extension/workflows/add-capability.md +2 -2
- package/src/resources/skills/create-gsd-extension/workflows/create-extension.md +4 -4
- package/src/resources/skills/create-gsd-extension/workflows/debug-extension.md +3 -5
- package/dist/resources/extensions/gsd/milestone-validation-gates.js +0 -45
- package/dist/resources/extensions/ollama/index.js +0 -112
- package/dist/resources/extensions/ollama/model-capabilities.js +0 -115
- package/dist/resources/extensions/ollama/ollama-client.js +0 -168
- package/dist/resources/extensions/ollama/ollama-commands.js +0 -194
- package/dist/resources/extensions/ollama/ollama-discovery.js +0 -69
- package/dist/resources/extensions/ollama/ollama-tool.js +0 -184
- package/dist/resources/extensions/ollama/types.js +0 -2
- package/dist/startup-model-validation.d.ts +0 -39
- package/dist/startup-model-validation.js +0 -50
- package/dist/web/standalone/.next/static/chunks/6502.7593d7797a4b3999.js +0 -9
- package/dist/web/standalone/.next/static/css/f6e8833d46e738d8.css +0 -1
- package/packages/native/src/__tests__/module-compat.test.mjs +0 -91
- package/packages/pi-agent-core/src/agent-loop.test.ts +0 -45
- package/packages/pi-ai/dist/providers/anthropic-shared.test.d.ts +0 -2
- package/packages/pi-ai/dist/providers/anthropic-shared.test.d.ts.map +0 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.test.js +0 -25
- package/packages/pi-ai/dist/providers/anthropic-shared.test.js.map +0 -1
- package/packages/pi-ai/dist/utils/repair-tool-json.d.ts +0 -37
- package/packages/pi-ai/dist/utils/repair-tool-json.d.ts.map +0 -1
- package/packages/pi-ai/dist/utils/repair-tool-json.js +0 -75
- package/packages/pi-ai/dist/utils/repair-tool-json.js.map +0 -1
- package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.d.ts +0 -2
- package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.d.ts.map +0 -1
- package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.js +0 -73
- package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.js.map +0 -1
- package/packages/pi-ai/src/providers/anthropic-shared.test.ts +0 -29
- package/packages/pi-ai/src/utils/repair-tool-json.ts +0 -88
- package/packages/pi-ai/src/utils/tests/repair-tool-json.test.ts +0 -102
- package/packages/pi-coding-agent/dist/core/compaction/compaction.test.d.ts +0 -6
- package/packages/pi-coding-agent/dist/core/compaction/compaction.test.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js +0 -176
- package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js.map +0 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.d.ts +0 -28
- package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.js +0 -37
- package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.js.map +0 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.d.ts +0 -2
- package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.js +0 -63
- package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.js.map +0 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-sort.d.ts +0 -19
- package/packages/pi-coding-agent/dist/core/extensions/extension-sort.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-sort.js +0 -115
- package/packages/pi-coding-agent/dist/core/extensions/extension-sort.js.map +0 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.d.ts +0 -2
- package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.js +0 -109
- package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.js.map +0 -1
- package/packages/pi-coding-agent/dist/core/image-overflow-recovery.d.ts +0 -44
- package/packages/pi-coding-agent/dist/core/image-overflow-recovery.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/image-overflow-recovery.js +0 -97
- package/packages/pi-coding-agent/dist/core/image-overflow-recovery.js.map +0 -1
- package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.d.ts +0 -2
- package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.js +0 -181
- package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.js.map +0 -1
- package/packages/pi-coding-agent/dist/core/messages.test.d.ts +0 -9
- package/packages/pi-coding-agent/dist/core/messages.test.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/messages.test.js +0 -86
- package/packages/pi-coding-agent/dist/core/messages.test.js.map +0 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.test.d.ts +0 -9
- package/packages/pi-coding-agent/dist/core/retry-handler.test.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.test.js +0 -193
- package/packages/pi-coding-agent/dist/core/retry-handler.test.js.map +0 -1
- package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.d.ts +0 -16
- package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.js +0 -80
- package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.js.map +0 -1
- package/packages/pi-coding-agent/src/core/compaction/compaction.test.ts +0 -236
- package/packages/pi-coding-agent/src/core/extensions/extension-manifest.test.ts +0 -77
- package/packages/pi-coding-agent/src/core/extensions/extension-manifest.ts +0 -62
- package/packages/pi-coding-agent/src/core/extensions/extension-sort.test.ts +0 -134
- package/packages/pi-coding-agent/src/core/extensions/extension-sort.ts +0 -137
- package/packages/pi-coding-agent/src/core/image-overflow-recovery.test.ts +0 -228
- package/packages/pi-coding-agent/src/core/image-overflow-recovery.ts +0 -118
- package/packages/pi-coding-agent/src/core/messages.test.ts +0 -114
- package/packages/pi-coding-agent/src/core/retry-handler.test.ts +0 -255
- package/packages/pi-coding-agent/src/core/tools/spawn-shell-windows.test.ts +0 -92
- package/src/resources/extensions/gsd/milestone-validation-gates.ts +0 -56
- package/src/resources/extensions/gsd/tests/auto-mode-interactive-guard.test.ts +0 -71
- package/src/resources/extensions/gsd/tests/cli-provider-rate-limit.test.ts +0 -47
- package/src/resources/extensions/gsd/tests/completion-hierarchy-guards.test.ts +0 -192
- package/src/resources/extensions/gsd/tests/db-path-worktree-symlink.test.ts +0 -131
- package/src/resources/extensions/gsd/tests/discord-invite-links.test.ts +0 -47
- package/src/resources/extensions/gsd/tests/discuss-empty-db-fallback.test.ts +0 -127
- package/src/resources/extensions/gsd/tests/dynamic-routing-default.test.ts +0 -20
- package/src/resources/extensions/gsd/tests/empty-content-abort-loop.test.ts +0 -74
- package/src/resources/extensions/gsd/tests/event-replay-idempotency.test.ts +0 -140
- package/src/resources/extensions/gsd/tests/forensics-context-persist.test.ts +0 -129
- package/src/resources/extensions/gsd/tests/forensics-db-completion.test.ts +0 -96
- package/src/resources/extensions/gsd/tests/gsdroot-worktree-detection.test.ts +0 -164
- package/src/resources/extensions/gsd/tests/guided-flow-dynamic-routing.test.ts +0 -135
- package/src/resources/extensions/gsd/tests/guided-flow-session-isolation.test.ts +0 -97
- package/src/resources/extensions/gsd/tests/hook-key-parsing.test.ts +0 -107
- package/src/resources/extensions/gsd/tests/integration/doctor-false-positives.test.ts +0 -243
- package/src/resources/extensions/gsd/tests/integration/gitignore-staging-2570.test.ts +0 -150
- package/src/resources/extensions/gsd/tests/integration/state-machine-live-validation.test.ts +0 -959
- package/src/resources/extensions/gsd/tests/migrate-external-worktree.test.ts +0 -105
- package/src/resources/extensions/gsd/tests/milestone-status-authoritative.test.ts +0 -116
- package/src/resources/extensions/gsd/tests/parallel-commit-scope.test.ts +0 -159
- package/src/resources/extensions/gsd/tests/parallel-eligibility-ghost.test.ts +0 -150
- package/src/resources/extensions/gsd/tests/plan-milestone-title.test.ts +0 -70
- package/src/resources/extensions/gsd/tests/project-relocation-recovery.test.ts +0 -297
- package/src/resources/extensions/gsd/tests/prompt-loader-replacement.test.ts +0 -178
- package/src/resources/extensions/gsd/tests/prompt-tool-names.test.ts +0 -69
- package/src/resources/extensions/gsd/tests/queue-execution-guard.test.ts +0 -157
- package/src/resources/extensions/gsd/tests/quick-turn-end-cleanup.test.ts +0 -90
- package/src/resources/extensions/gsd/tests/reconciliation-edge-cases.test.ts +0 -162
- package/src/resources/extensions/gsd/tests/slice-disk-reconcile.test.ts +0 -233
- package/src/resources/extensions/gsd/tests/stash-queued-context-files.test.ts +0 -305
- package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +0 -405
- package/src/resources/extensions/gsd/tests/state-derivation-parity.test.ts +0 -257
- package/src/resources/extensions/gsd/tests/state-machine-full-walkthrough.test.ts +0 -1628
- package/src/resources/extensions/gsd/tests/stop-auto-race-null-unit.test.ts +0 -106
- package/src/resources/extensions/gsd/tests/stuck-detection-coverage.test.ts +0 -174
- package/src/resources/extensions/gsd/tests/summary-render-parity.test.ts +0 -221
- package/src/resources/extensions/gsd/tests/uat-stuck-loop-orphaned-worktree.test.ts +0 -289
- package/src/resources/extensions/gsd/tests/vacuum-recovery.test.ts +0 -154
- package/src/resources/extensions/gsd/tests/verdict-parser.test.ts +0 -156
- package/src/resources/extensions/gsd/tests/verification-operational-gate.test.ts +0 -82
- package/src/resources/extensions/gsd/tests/worktree-db-respawn-truncation.test.ts +0 -140
- package/src/resources/extensions/gsd/tests/worktree-nested-git-safety.test.ts +0 -101
- package/src/resources/extensions/gsd/tests/zombie-gsd-state.test.ts +0 -95
- package/src/resources/extensions/mcp-client/tests/server-name-spaces.test.ts +0 -55
- package/src/resources/extensions/ollama/index.ts +0 -130
- package/src/resources/extensions/ollama/model-capabilities.ts +0 -145
- package/src/resources/extensions/ollama/ollama-client.ts +0 -196
- package/src/resources/extensions/ollama/ollama-commands.ts +0 -248
- package/src/resources/extensions/ollama/ollama-discovery.ts +0 -106
- package/src/resources/extensions/ollama/ollama-tool.ts +0 -218
- package/src/resources/extensions/ollama/tests/model-capabilities.test.ts +0 -162
- package/src/resources/extensions/ollama/tests/ollama-client.test.ts +0 -38
- package/src/resources/extensions/ollama/tests/ollama-discovery.test.ts +0 -28
- package/src/resources/extensions/ollama/types.ts +0 -130
- package/src/resources/extensions/shared/tests/ask-user-freetext.test.ts +0 -156
- /package/dist/web/standalone/.next/static/{R0D4xaIPl5kg93edN7Oo0 → 5DLsjFHdSB6_a1EDQVjr7}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{R0D4xaIPl5kg93edN7Oo0 → 5DLsjFHdSB6_a1EDQVjr7}/_ssgManifest.js +0 -0
|
@@ -1,255 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* RetryHandler tests — long-context entitlement 429 error handling (#2803)
|
|
3
|
-
*
|
|
4
|
-
* Verifies that "Extra usage is required for long context requests" errors
|
|
5
|
-
* are classified as quota_exhausted (not rate_limit) and trigger a model
|
|
6
|
-
* downgrade from [1m] to base when no cross-provider fallback exists.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import { describe, it, beforeEach, mock, type Mock } from "node:test";
|
|
10
|
-
import assert from "node:assert/strict";
|
|
11
|
-
import { RetryHandler, type RetryHandlerDeps } from "./retry-handler.js";
|
|
12
|
-
import type { Api, AssistantMessage, Model } from "@gsd/pi-ai";
|
|
13
|
-
import type { FallbackResolver } from "./fallback-resolver.js";
|
|
14
|
-
import type { ModelRegistry } from "./model-registry.js";
|
|
15
|
-
import type { SettingsManager } from "./settings-manager.js";
|
|
16
|
-
|
|
17
|
-
// ─── Helpers ────────────────────────────────────────────────────────────────
|
|
18
|
-
|
|
19
|
-
function createMockModel(provider: string, id: string): Model<Api> {
|
|
20
|
-
return {
|
|
21
|
-
id,
|
|
22
|
-
name: id,
|
|
23
|
-
api: "anthropic" as Api,
|
|
24
|
-
provider,
|
|
25
|
-
baseUrl: "https://api.anthropic.com",
|
|
26
|
-
reasoning: false,
|
|
27
|
-
input: ["text"],
|
|
28
|
-
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
|
29
|
-
contextWindow: 1_000_000,
|
|
30
|
-
maxTokens: 16384,
|
|
31
|
-
} as Model<Api>;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
function errorMessage(msg: string): AssistantMessage {
|
|
35
|
-
return {
|
|
36
|
-
role: "assistant",
|
|
37
|
-
content: [],
|
|
38
|
-
api: "anthropic-messages",
|
|
39
|
-
provider: "anthropic",
|
|
40
|
-
model: "claude-opus-4-6[1m]",
|
|
41
|
-
usage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, totalTokens: 0, cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 } },
|
|
42
|
-
stopReason: "error",
|
|
43
|
-
errorMessage: msg,
|
|
44
|
-
timestamp: Date.now(),
|
|
45
|
-
} as AssistantMessage;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
interface MockDeps {
|
|
49
|
-
deps: RetryHandlerDeps;
|
|
50
|
-
emittedEvents: Array<Record<string, any>>;
|
|
51
|
-
continueFn: Mock<() => Promise<void>>;
|
|
52
|
-
onModelChangeFn: Mock<(model: Model<any>) => void>;
|
|
53
|
-
markUsageLimitReached: Mock<(...args: any[]) => boolean>;
|
|
54
|
-
findFallback: Mock<(...args: any[]) => Promise<any>>;
|
|
55
|
-
findModel: Mock<(provider: string, modelId: string) => Model<Api> | undefined>;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
function createMockDeps(overrides?: {
|
|
59
|
-
model?: Model<Api>;
|
|
60
|
-
retryEnabled?: boolean;
|
|
61
|
-
markUsageLimitReachedResult?: boolean;
|
|
62
|
-
fallbackResult?: any;
|
|
63
|
-
findModelResult?: (provider: string, modelId: string) => Model<Api> | undefined;
|
|
64
|
-
}): MockDeps {
|
|
65
|
-
const model = overrides?.model ?? createMockModel("anthropic", "claude-opus-4-6[1m]");
|
|
66
|
-
const emittedEvents: Array<Record<string, any>> = [];
|
|
67
|
-
const continueFn = mock.fn(async () => {});
|
|
68
|
-
const onModelChangeFn = mock.fn((_model: Model<any>) => {});
|
|
69
|
-
const markUsageLimitReached = mock.fn(
|
|
70
|
-
() => overrides?.markUsageLimitReachedResult ?? false,
|
|
71
|
-
);
|
|
72
|
-
const findFallback = mock.fn(async () => overrides?.fallbackResult ?? null);
|
|
73
|
-
const findModel = mock.fn(
|
|
74
|
-
overrides?.findModelResult ?? ((_provider: string, _modelId: string) => undefined),
|
|
75
|
-
);
|
|
76
|
-
|
|
77
|
-
const messages: Array<{ role: string } & Record<string, any>> = [];
|
|
78
|
-
|
|
79
|
-
const deps: RetryHandlerDeps = {
|
|
80
|
-
agent: {
|
|
81
|
-
continue: continueFn,
|
|
82
|
-
state: { messages },
|
|
83
|
-
setModel: mock.fn(),
|
|
84
|
-
replaceMessages: mock.fn((newMessages: any[]) => {
|
|
85
|
-
messages.length = 0;
|
|
86
|
-
messages.push(...newMessages);
|
|
87
|
-
}),
|
|
88
|
-
} as any,
|
|
89
|
-
settingsManager: {
|
|
90
|
-
getRetryEnabled: () => overrides?.retryEnabled ?? true,
|
|
91
|
-
getRetrySettings: () => ({
|
|
92
|
-
enabled: overrides?.retryEnabled ?? true,
|
|
93
|
-
maxRetries: 5,
|
|
94
|
-
baseDelayMs: 1000,
|
|
95
|
-
maxDelayMs: 30000,
|
|
96
|
-
}),
|
|
97
|
-
} as unknown as SettingsManager,
|
|
98
|
-
modelRegistry: {
|
|
99
|
-
authStorage: {
|
|
100
|
-
markUsageLimitReached,
|
|
101
|
-
},
|
|
102
|
-
find: findModel,
|
|
103
|
-
} as unknown as ModelRegistry,
|
|
104
|
-
fallbackResolver: {
|
|
105
|
-
findFallback,
|
|
106
|
-
} as unknown as FallbackResolver,
|
|
107
|
-
getModel: () => model,
|
|
108
|
-
getSessionId: () => "test-session",
|
|
109
|
-
emit: (event: any) => emittedEvents.push(event),
|
|
110
|
-
onModelChange: onModelChangeFn,
|
|
111
|
-
};
|
|
112
|
-
|
|
113
|
-
return { deps, emittedEvents, continueFn, onModelChangeFn, markUsageLimitReached, findFallback, findModel };
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
// ─── _classifyErrorType (tested via handleRetryableError behavior) ──────────
|
|
117
|
-
|
|
118
|
-
describe("RetryHandler — long-context entitlement 429 (#2803)", () => {
|
|
119
|
-
|
|
120
|
-
describe("error classification", () => {
|
|
121
|
-
it("classifies 'Extra usage is required for long context requests' as quota_exhausted, not rate_limit", async () => {
|
|
122
|
-
// When the error is classified as quota_exhausted AND no alternate credentials
|
|
123
|
-
// AND no fallback, the handler should emit fallback_chain_exhausted and stop.
|
|
124
|
-
// If misclassified as rate_limit, it would enter the backoff loop instead.
|
|
125
|
-
const { deps, emittedEvents, findModel } = createMockDeps({
|
|
126
|
-
model: createMockModel("anthropic", "claude-opus-4-6[1m]"),
|
|
127
|
-
markUsageLimitReachedResult: false, // no alternate credentials
|
|
128
|
-
fallbackResult: null, // no cross-provider fallback
|
|
129
|
-
findModelResult: () => undefined, // no base model either
|
|
130
|
-
});
|
|
131
|
-
|
|
132
|
-
const handler = new RetryHandler(deps);
|
|
133
|
-
const msg = errorMessage(
|
|
134
|
-
'429 {"type":"error","error":{"type":"rate_limit_error","message":"Extra usage is required for long context requests."}}'
|
|
135
|
-
);
|
|
136
|
-
|
|
137
|
-
const result = await handler.handleRetryableError(msg);
|
|
138
|
-
|
|
139
|
-
// Should NOT retry (would be true if misclassified as rate_limit entering backoff)
|
|
140
|
-
assert.equal(result, false);
|
|
141
|
-
|
|
142
|
-
// Should emit fallback_chain_exhausted (quota_exhausted path), NOT auto_retry_start (backoff path)
|
|
143
|
-
const chainExhausted = emittedEvents.find((e) => e.type === "fallback_chain_exhausted");
|
|
144
|
-
assert.ok(chainExhausted, "Expected fallback_chain_exhausted event for entitlement error");
|
|
145
|
-
|
|
146
|
-
const retryStart = emittedEvents.find((e) => e.type === "auto_retry_start");
|
|
147
|
-
assert.equal(retryStart, undefined, "Should NOT emit auto_retry_start for entitlement error");
|
|
148
|
-
});
|
|
149
|
-
|
|
150
|
-
it("still classifies regular 429 rate limits as rate_limit", async () => {
|
|
151
|
-
// A normal "rate limit" 429 should still be classified as rate_limit
|
|
152
|
-
const { deps, emittedEvents } = createMockDeps({
|
|
153
|
-
model: createMockModel("anthropic", "claude-opus-4-6"),
|
|
154
|
-
markUsageLimitReachedResult: false,
|
|
155
|
-
fallbackResult: null,
|
|
156
|
-
});
|
|
157
|
-
|
|
158
|
-
const handler = new RetryHandler(deps);
|
|
159
|
-
const msg = errorMessage("429 Too Many Requests");
|
|
160
|
-
|
|
161
|
-
const result = await handler.handleRetryableError(msg);
|
|
162
|
-
|
|
163
|
-
// Should enter the backoff loop (rate_limit path, not quota_exhausted)
|
|
164
|
-
assert.equal(result, true);
|
|
165
|
-
|
|
166
|
-
const retryStart = emittedEvents.find((e) => e.type === "auto_retry_start");
|
|
167
|
-
assert.ok(retryStart, "Regular 429 should enter backoff retry");
|
|
168
|
-
});
|
|
169
|
-
});
|
|
170
|
-
|
|
171
|
-
describe("long-context model downgrade", () => {
|
|
172
|
-
it("downgrades from [1m] to base model when entitlement error and no fallback", async () => {
|
|
173
|
-
const baseModel = createMockModel("anthropic", "claude-opus-4-6");
|
|
174
|
-
const { deps, emittedEvents, onModelChangeFn, continueFn } = createMockDeps({
|
|
175
|
-
model: createMockModel("anthropic", "claude-opus-4-6[1m]"),
|
|
176
|
-
markUsageLimitReachedResult: false,
|
|
177
|
-
fallbackResult: null,
|
|
178
|
-
findModelResult: (provider: string, modelId: string) => {
|
|
179
|
-
if (provider === "anthropic" && modelId === "claude-opus-4-6") return baseModel;
|
|
180
|
-
return undefined;
|
|
181
|
-
},
|
|
182
|
-
});
|
|
183
|
-
|
|
184
|
-
const handler = new RetryHandler(deps);
|
|
185
|
-
const msg = errorMessage("Extra usage is required for long context requests.");
|
|
186
|
-
|
|
187
|
-
const result = await handler.handleRetryableError(msg);
|
|
188
|
-
|
|
189
|
-
assert.equal(result, true, "Should retry after downgrade");
|
|
190
|
-
|
|
191
|
-
// Should have called setModel with the base model
|
|
192
|
-
const setModelCalls = (deps.agent.setModel as any).mock.calls;
|
|
193
|
-
assert.equal(setModelCalls.length, 1);
|
|
194
|
-
assert.equal(setModelCalls[0].arguments[0].id, "claude-opus-4-6");
|
|
195
|
-
|
|
196
|
-
// Should have notified about model change
|
|
197
|
-
assert.equal(onModelChangeFn.mock.calls.length, 1);
|
|
198
|
-
|
|
199
|
-
// Should emit a fallback_provider_switch event indicating downgrade
|
|
200
|
-
const switchEvent = emittedEvents.find((e) => e.type === "fallback_provider_switch");
|
|
201
|
-
assert.ok(switchEvent, "Expected fallback_provider_switch event for downgrade");
|
|
202
|
-
assert.ok(switchEvent!.reason.includes("long context downgrade"), `reason should mention downgrade: ${switchEvent!.reason}`);
|
|
203
|
-
});
|
|
204
|
-
|
|
205
|
-
it("emits fallback_chain_exhausted when base model is also unavailable", async () => {
|
|
206
|
-
const { deps, emittedEvents } = createMockDeps({
|
|
207
|
-
model: createMockModel("anthropic", "claude-opus-4-6[1m]"),
|
|
208
|
-
markUsageLimitReachedResult: false,
|
|
209
|
-
fallbackResult: null,
|
|
210
|
-
findModelResult: () => undefined, // base model not found
|
|
211
|
-
});
|
|
212
|
-
|
|
213
|
-
const handler = new RetryHandler(deps);
|
|
214
|
-
const msg = errorMessage("Extra usage is required for long context requests.");
|
|
215
|
-
|
|
216
|
-
const result = await handler.handleRetryableError(msg);
|
|
217
|
-
|
|
218
|
-
assert.equal(result, false);
|
|
219
|
-
const chainExhausted = emittedEvents.find((e) => e.type === "fallback_chain_exhausted");
|
|
220
|
-
assert.ok(chainExhausted, "Expected fallback_chain_exhausted when base model unavailable");
|
|
221
|
-
});
|
|
222
|
-
|
|
223
|
-
it("does not attempt downgrade for non-[1m] models", async () => {
|
|
224
|
-
// When a regular model (no [1m] suffix) gets a quota_exhausted error
|
|
225
|
-
// with no fallback, it should just stop — no downgrade attempt.
|
|
226
|
-
const { deps, emittedEvents } = createMockDeps({
|
|
227
|
-
model: createMockModel("anthropic", "claude-opus-4-6"),
|
|
228
|
-
markUsageLimitReachedResult: false,
|
|
229
|
-
fallbackResult: null,
|
|
230
|
-
});
|
|
231
|
-
|
|
232
|
-
const handler = new RetryHandler(deps);
|
|
233
|
-
const msg = errorMessage("Extra usage is required for long context requests.");
|
|
234
|
-
|
|
235
|
-
const result = await handler.handleRetryableError(msg);
|
|
236
|
-
|
|
237
|
-
assert.equal(result, false);
|
|
238
|
-
const chainExhausted = emittedEvents.find((e) => e.type === "fallback_chain_exhausted");
|
|
239
|
-
assert.ok(chainExhausted);
|
|
240
|
-
|
|
241
|
-
// No downgrade switch should occur
|
|
242
|
-
const switchEvent = emittedEvents.find((e) => e.type === "fallback_provider_switch");
|
|
243
|
-
assert.equal(switchEvent, undefined, "Should not switch for non-[1m] models");
|
|
244
|
-
});
|
|
245
|
-
});
|
|
246
|
-
|
|
247
|
-
describe("isRetryableError", () => {
|
|
248
|
-
it("considers long-context entitlement error as retryable", () => {
|
|
249
|
-
const { deps } = createMockDeps();
|
|
250
|
-
const handler = new RetryHandler(deps);
|
|
251
|
-
const msg = errorMessage("Extra usage is required for long context requests.");
|
|
252
|
-
assert.equal(handler.isRetryableError(msg), true);
|
|
253
|
-
});
|
|
254
|
-
});
|
|
255
|
-
});
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* spawn-shell-windows.test.ts — Regression test for Windows spawn ENOENT/EINVAL.
|
|
3
|
-
*
|
|
4
|
-
* On Windows, npm/npx/tsc and other tools are installed as .cmd batch scripts.
|
|
5
|
-
* Node's `spawn()` without `shell: true` cannot execute .cmd files, resulting
|
|
6
|
-
* in ENOENT or EINVAL errors. Every spawn site that may invoke a user-installed
|
|
7
|
-
* binary (not `node` or a shell like `sh`/`bash`/`cmd`) must include
|
|
8
|
-
* `shell: process.platform === "win32"` so the call is resolved through cmd.exe
|
|
9
|
-
* on Windows while remaining a direct exec on POSIX.
|
|
10
|
-
*
|
|
11
|
-
* This test structurally scans all spawn sites and verifies the guard is present.
|
|
12
|
-
*
|
|
13
|
-
* Fixes: gsd-build/gsd-2#2854
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
import test from "node:test";
|
|
17
|
-
import assert from "node:assert/strict";
|
|
18
|
-
import { readFileSync } from "node:fs";
|
|
19
|
-
import { join, dirname, relative } from "node:path";
|
|
20
|
-
import { fileURLToPath } from "node:url";
|
|
21
|
-
|
|
22
|
-
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
23
|
-
const coreDir = join(__dirname, "..");
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Files that call `spawn()` with a user-facing binary (not `node`, `sh`, `bash`,
|
|
27
|
-
* or `cmd`) and therefore need the Windows shell guard.
|
|
28
|
-
*
|
|
29
|
-
* If a file spawns only hardcoded system binaries (like `node` in rpc-client.ts),
|
|
30
|
-
* it does not need the guard and should NOT appear here.
|
|
31
|
-
*/
|
|
32
|
-
const SPAWN_FILES_NEEDING_SHELL_GUARD = [
|
|
33
|
-
// Extension's GSD client — spawns the `gsd` binary which is a .cmd on Windows
|
|
34
|
-
join(coreDir, "..", "..", "..", "vscode-extension", "src", "gsd-client.ts"),
|
|
35
|
-
// exec.ts — used by extensions to run arbitrary commands
|
|
36
|
-
join(coreDir, "exec.ts"),
|
|
37
|
-
// LSP index — spawns project-type commands (tsc, cargo, etc.)
|
|
38
|
-
join(coreDir, "lsp", "index.ts"),
|
|
39
|
-
// LSP client — spawns LSP server binaries (npx, etc.)
|
|
40
|
-
join(coreDir, "lsp", "client.ts"),
|
|
41
|
-
// LSP mux — spawns lspmux binary
|
|
42
|
-
join(coreDir, "lsp", "lspmux.ts"),
|
|
43
|
-
// Package manager — spawns npm/yarn/pnpm
|
|
44
|
-
join(coreDir, "package-manager.ts"),
|
|
45
|
-
];
|
|
46
|
-
|
|
47
|
-
test("all spawn sites that invoke user-facing binaries include shell: process.platform === 'win32'", () => {
|
|
48
|
-
const failures: string[] = [];
|
|
49
|
-
|
|
50
|
-
for (const file of SPAWN_FILES_NEEDING_SHELL_GUARD) {
|
|
51
|
-
let content: string;
|
|
52
|
-
try {
|
|
53
|
-
content = readFileSync(file, "utf-8");
|
|
54
|
-
} catch {
|
|
55
|
-
// File may not exist in this checkout — skip
|
|
56
|
-
continue;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
const lines = content.split("\n");
|
|
60
|
-
|
|
61
|
-
// Find all spawn(..., { ... }) call sites and check each one
|
|
62
|
-
// for the presence of `shell: process.platform === "win32"` within
|
|
63
|
-
// 5 lines after the spawn call.
|
|
64
|
-
for (let i = 0; i < lines.length; i++) {
|
|
65
|
-
const line = lines[i]!;
|
|
66
|
-
// Skip comments
|
|
67
|
-
if (line.trim().startsWith("//") || line.trim().startsWith("*")) continue;
|
|
68
|
-
|
|
69
|
-
// Detect a spawn() call
|
|
70
|
-
if (/\bspawn\(/.test(line)) {
|
|
71
|
-
// Look ahead up to 8 lines for the shell guard
|
|
72
|
-
const lookahead = lines.slice(i, i + 8).join("\n");
|
|
73
|
-
const hasShellGuard =
|
|
74
|
-
/shell:\s*process\.platform\s*===\s*["']win32["']/.test(lookahead);
|
|
75
|
-
|
|
76
|
-
if (!hasShellGuard) {
|
|
77
|
-
const relPath = relative(join(coreDir, "..", ".."), file);
|
|
78
|
-
failures.push(`${relPath}:${i + 1}`);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
assert.deepEqual(
|
|
85
|
-
failures,
|
|
86
|
-
[],
|
|
87
|
-
`The following spawn sites are missing 'shell: process.platform === "win32"':\n` +
|
|
88
|
-
failures.map(f => ` - ${f}`).join("\n") +
|
|
89
|
-
`\nOn Windows, .cmd wrapper scripts (npm, npx, tsc, gsd) require shell ` +
|
|
90
|
-
`resolution. Without this guard, spawn fails with ENOENT or EINVAL.`,
|
|
91
|
-
);
|
|
92
|
-
});
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Milestone validation quality gate persistence.
|
|
3
|
-
*
|
|
4
|
-
* #2945 Bug 4: validate-milestone was writing VALIDATION.md to disk and
|
|
5
|
-
* inserting an assessment row, but never persisted structured quality_gates
|
|
6
|
-
* records in the DB. This module inserts milestone-level validation gates
|
|
7
|
-
* that correspond to the validation checks performed.
|
|
8
|
-
*
|
|
9
|
-
* Gate IDs for milestone validation:
|
|
10
|
-
* MV01 — Success criteria checklist
|
|
11
|
-
* MV02 — Slice delivery audit
|
|
12
|
-
* MV03 — Cross-slice integration
|
|
13
|
-
* MV04 — Requirement coverage
|
|
14
|
-
*
|
|
15
|
-
* These use the existing quality_gates table with scope "milestone".
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
import { _getAdapter } from "./gsd-db.js";
|
|
19
|
-
|
|
20
|
-
/** Milestone validation gate IDs. */
|
|
21
|
-
const MILESTONE_GATE_IDS = ["MV01", "MV02", "MV03", "MV04"] as const;
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Insert milestone-level quality_gates records for a validation run.
|
|
25
|
-
*
|
|
26
|
-
* Each gate is inserted with status "complete" and a verdict derived
|
|
27
|
-
* from the overall milestone validation verdict. Individual gate-level
|
|
28
|
-
* verdicts are not available (the handler receives a single verdict),
|
|
29
|
-
* so all gates share the overall verdict.
|
|
30
|
-
*/
|
|
31
|
-
export function insertMilestoneValidationGates(
|
|
32
|
-
milestoneId: string,
|
|
33
|
-
sliceId: string,
|
|
34
|
-
verdict: string,
|
|
35
|
-
evaluatedAt: string,
|
|
36
|
-
): void {
|
|
37
|
-
const db = _getAdapter();
|
|
38
|
-
if (!db) return;
|
|
39
|
-
|
|
40
|
-
const gateVerdict = verdict === "pass" ? "pass" : "flag";
|
|
41
|
-
|
|
42
|
-
for (const gateId of MILESTONE_GATE_IDS) {
|
|
43
|
-
db.prepare(
|
|
44
|
-
`INSERT OR REPLACE INTO quality_gates
|
|
45
|
-
(milestone_id, slice_id, gate_id, scope, task_id, status, verdict, rationale, findings, evaluated_at)
|
|
46
|
-
VALUES (:mid, :sid, :gid, 'milestone', '', 'complete', :verdict, :rationale, '', :evaluated_at)`,
|
|
47
|
-
).run({
|
|
48
|
-
":mid": milestoneId,
|
|
49
|
-
":sid": sliceId,
|
|
50
|
-
":gid": gateId,
|
|
51
|
-
":verdict": gateVerdict,
|
|
52
|
-
":rationale": `Milestone validation verdict: ${verdict}`,
|
|
53
|
-
":evaluated_at": evaluatedAt,
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
}
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Test: auto-mode prompts must prohibit ask_user_questions / secure_env_collect
|
|
3
|
-
*
|
|
4
|
-
* Bug #2936: When the LLM calls ask_user_questions during auto-mode units
|
|
5
|
-
* (plan-slice, execute-task, complete-slice), the interactive tool queues a
|
|
6
|
-
* user response which causes the subsequent gsd_plan_slice / gsd_complete_task
|
|
7
|
-
* call to fail with "Skipped due to queued user message." The canonical GSD
|
|
8
|
-
* tool call is never recorded, verifyExpectedArtifact finds no artifact, and
|
|
9
|
-
* the dispatch loop re-dispatches the same unit 2-4x.
|
|
10
|
-
*
|
|
11
|
-
* Fix: Each auto-mode prompt must contain an "Autonomous execution" guard
|
|
12
|
-
* that explicitly prohibits ask_user_questions and secure_env_collect.
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
import test from "node:test";
|
|
16
|
-
import assert from "node:assert/strict";
|
|
17
|
-
import { readFileSync } from "node:fs";
|
|
18
|
-
import { join, dirname } from "node:path";
|
|
19
|
-
import { fileURLToPath } from "node:url";
|
|
20
|
-
|
|
21
|
-
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
22
|
-
const promptsDir = join(__dirname, "..", "prompts");
|
|
23
|
-
|
|
24
|
-
function loadPromptRaw(name: string): string {
|
|
25
|
-
return readFileSync(join(promptsDir, `${name}.md`), "utf-8");
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
const AUTO_MODE_PROMPTS = ["plan-slice", "execute-task", "complete-slice"];
|
|
29
|
-
|
|
30
|
-
for (const promptName of AUTO_MODE_PROMPTS) {
|
|
31
|
-
test(`${promptName} prompt prohibits ask_user_questions in auto-mode`, () => {
|
|
32
|
-
const content = loadPromptRaw(promptName);
|
|
33
|
-
|
|
34
|
-
assert.ok(
|
|
35
|
-
content.includes("ask_user_questions"),
|
|
36
|
-
`${promptName}.md must mention ask_user_questions (to prohibit it)`,
|
|
37
|
-
);
|
|
38
|
-
|
|
39
|
-
assert.ok(
|
|
40
|
-
content.includes("secure_env_collect"),
|
|
41
|
-
`${promptName}.md must mention secure_env_collect (to prohibit it)`,
|
|
42
|
-
);
|
|
43
|
-
|
|
44
|
-
// The guard must clearly state this is autonomous / auto-mode
|
|
45
|
-
assert.ok(
|
|
46
|
-
content.toLowerCase().includes("auto-mode") || content.toLowerCase().includes("autonomous"),
|
|
47
|
-
`${promptName}.md must reference auto-mode or autonomous execution`,
|
|
48
|
-
);
|
|
49
|
-
|
|
50
|
-
// The guard must indicate no human is available
|
|
51
|
-
assert.ok(
|
|
52
|
-
content.includes("no human") || content.includes("no user"),
|
|
53
|
-
`${promptName}.md must state that no human/user is available to answer`,
|
|
54
|
-
);
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
test("auto-mode prompts contain autonomous guard before final tool call reminder", () => {
|
|
59
|
-
for (const promptName of AUTO_MODE_PROMPTS) {
|
|
60
|
-
const content = loadPromptRaw(promptName);
|
|
61
|
-
|
|
62
|
-
// The guard should appear before the final "MUST call" line
|
|
63
|
-
const guardIndex = content.indexOf("ask_user_questions");
|
|
64
|
-
const mustCallIndex = content.lastIndexOf("MUST call");
|
|
65
|
-
|
|
66
|
-
assert.ok(
|
|
67
|
-
guardIndex !== -1 && mustCallIndex !== -1 && guardIndex < mustCallIndex,
|
|
68
|
-
`${promptName}.md: autonomous guard (ask_user_questions prohibition) must appear before the final MUST call reminder`,
|
|
69
|
-
);
|
|
70
|
-
}
|
|
71
|
-
});
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* cli-provider-rate-limit.test.ts — Verify rate-limit backoff capping
|
|
3
|
-
* for CLI-style providers (openai-codex, google-gemini-cli). (#2922)
|
|
4
|
-
*
|
|
5
|
-
* These providers use per-user quotas with shorter windows, so the
|
|
6
|
-
* default 60s backoff should be capped at 30s to avoid leaving users
|
|
7
|
-
* stuck in an apparent permanent "rate limit" state.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import test from "node:test";
|
|
11
|
-
import assert from "node:assert/strict";
|
|
12
|
-
import { readFileSync } from "node:fs";
|
|
13
|
-
import { join, dirname } from "node:path";
|
|
14
|
-
import { fileURLToPath } from "node:url";
|
|
15
|
-
|
|
16
|
-
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
17
|
-
const RECOVERY_PATH = join(__dirname, "..", "bootstrap", "agent-end-recovery.ts");
|
|
18
|
-
|
|
19
|
-
function getRecoverySource(): string {
|
|
20
|
-
return readFileSync(RECOVERY_PATH, "utf-8");
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
test("agent-end-recovery references openai-codex for rate-limit handling (#2922)", () => {
|
|
24
|
-
const src = getRecoverySource();
|
|
25
|
-
assert.ok(
|
|
26
|
-
src.includes("openai-codex"),
|
|
27
|
-
'agent-end-recovery.ts must reference "openai-codex" for CLI provider rate-limit handling (#2922)',
|
|
28
|
-
);
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
test("agent-end-recovery references google-gemini-cli for rate-limit handling (#2922)", () => {
|
|
32
|
-
const src = getRecoverySource();
|
|
33
|
-
assert.ok(
|
|
34
|
-
src.includes("google-gemini-cli"),
|
|
35
|
-
'agent-end-recovery.ts must reference "google-gemini-cli" for CLI provider rate-limit handling (#2922)',
|
|
36
|
-
);
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
test("agent-end-recovery caps rate-limit backoff for CLI providers (#2922)", () => {
|
|
40
|
-
const src = getRecoverySource();
|
|
41
|
-
// Must have a Math.min capping pattern for CLI provider rate-limit backoff
|
|
42
|
-
const cappingRe = /Math\.min\s*\(/;
|
|
43
|
-
assert.ok(
|
|
44
|
-
cappingRe.test(src),
|
|
45
|
-
'agent-end-recovery.ts must cap rate-limit backoff with Math.min for CLI providers (#2922)',
|
|
46
|
-
);
|
|
47
|
-
});
|