gsd-pi 2.58.0-dev.778d6ac → 2.58.0-dev.d63175c
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/cli.js +35 -49
- package/dist/headless-ui.d.ts +0 -17
- package/dist/headless-ui.js +3 -97
- package/dist/headless.js +6 -67
- package/dist/help-text.js +0 -1
- package/dist/onboarding.js +0 -44
- package/dist/resource-loader.js +1 -16
- package/dist/resources/agents/researcher.md +1 -1
- package/dist/resources/extensions/ask-user-questions.js +3 -16
- package/dist/resources/extensions/async-jobs/extension-manifest.json +1 -1
- package/dist/resources/extensions/bg-shell/extension-manifest.json +1 -1
- package/dist/resources/extensions/browser-tools/extension-manifest.json +1 -1
- package/dist/resources/extensions/claude-code-cli/partial-builder.js +6 -14
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +36 -59
- package/dist/resources/extensions/context7/extension-manifest.json +1 -1
- package/dist/resources/extensions/get-secrets-from-user.js +5 -8
- package/dist/resources/extensions/google-search/extension-manifest.json +1 -1
- package/dist/resources/extensions/google-search/index.js +1 -2
- package/dist/resources/extensions/gsd/auto/phases.js +21 -25
- package/dist/resources/extensions/gsd/auto-artifact-paths.js +2 -2
- package/dist/resources/extensions/gsd/auto-dashboard.js +20 -37
- package/dist/resources/extensions/gsd/auto-dispatch.js +2 -17
- package/dist/resources/extensions/gsd/auto-model-selection.js +3 -26
- package/dist/resources/extensions/gsd/auto-post-unit.js +4 -16
- package/dist/resources/extensions/gsd/auto-prompts.js +1 -1
- package/dist/resources/extensions/gsd/auto-recovery.js +5 -13
- package/dist/resources/extensions/gsd/auto-start.js +22 -35
- package/dist/resources/extensions/gsd/auto-worktree.js +12 -196
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +0 -32
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +8 -80
- package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +1 -32
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +18 -33
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +11 -44
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +0 -67
- package/dist/resources/extensions/gsd/captures.js +4 -56
- package/dist/resources/extensions/gsd/db-writer.js +8 -116
- package/dist/resources/extensions/gsd/doctor-git-checks.js +0 -28
- package/dist/resources/extensions/gsd/doctor-providers.js +1 -2
- package/dist/resources/extensions/gsd/doctor-runtime-checks.js +4 -5
- package/dist/resources/extensions/gsd/doctor.js +1 -3
- package/dist/resources/extensions/gsd/error-classifier.js +10 -13
- package/dist/resources/extensions/gsd/extension-manifest.json +1 -16
- package/dist/resources/extensions/gsd/forensics.js +20 -123
- package/dist/resources/extensions/gsd/git-service.js +1 -23
- package/dist/resources/extensions/gsd/gitignore.js +0 -33
- package/dist/resources/extensions/gsd/gsd-db.js +9 -36
- package/dist/resources/extensions/gsd/guided-flow.js +44 -106
- package/dist/resources/extensions/gsd/health-widget-core.js +0 -31
- package/dist/resources/extensions/gsd/health-widget.js +0 -17
- package/dist/resources/extensions/gsd/index.js +1 -1
- package/dist/resources/extensions/gsd/memory-extractor.js +0 -7
- package/dist/resources/extensions/gsd/migrate-external.js +1 -8
- package/dist/resources/extensions/gsd/model-cost-table.js +0 -18
- package/dist/resources/extensions/gsd/model-router.js +1 -35
- package/dist/resources/extensions/gsd/native-git-bridge.js +0 -17
- package/dist/resources/extensions/gsd/notifications.js +1 -16
- package/dist/resources/extensions/gsd/parallel-eligibility.js +2 -13
- package/dist/resources/extensions/gsd/parallel-merge.js +5 -78
- package/dist/resources/extensions/gsd/parsers-legacy.js +3 -20
- package/dist/resources/extensions/gsd/paths.js +0 -43
- package/dist/resources/extensions/gsd/preferences-models.js +1 -14
- package/dist/resources/extensions/gsd/preferences-types.js +1 -2
- package/dist/resources/extensions/gsd/preferences.js +16 -13
- package/dist/resources/extensions/gsd/prompt-loader.js +1 -4
- package/dist/resources/extensions/gsd/prompts/complete-milestone.md +1 -1
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +2 -4
- package/dist/resources/extensions/gsd/prompts/discuss-headless.md +1 -1
- package/dist/resources/extensions/gsd/prompts/discuss.md +1 -1
- package/dist/resources/extensions/gsd/prompts/execute-task.md +1 -3
- package/dist/resources/extensions/gsd/prompts/forensics.md +2 -2
- package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +1 -1
- package/dist/resources/extensions/gsd/prompts/guided-discuss-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +0 -2
- package/dist/resources/extensions/gsd/prompts/rethink.md +1 -1
- package/dist/resources/extensions/gsd/prompts/triage-captures.md +0 -1
- package/dist/resources/extensions/gsd/repo-identity.js +11 -205
- package/dist/resources/extensions/gsd/rethink.js +0 -5
- package/dist/resources/extensions/gsd/roadmap-slices.js +4 -5
- package/dist/resources/extensions/gsd/state.js +27 -85
- package/dist/resources/extensions/gsd/tests/dist-redirect.mjs +1 -20
- package/dist/resources/extensions/gsd/tools/complete-task.js +71 -34
- package/dist/resources/extensions/gsd/tools/plan-milestone.js +2 -12
- package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +1 -29
- package/dist/resources/extensions/gsd/tools/validate-milestone.js +3 -14
- package/dist/resources/extensions/gsd/triage-resolution.js +7 -22
- package/dist/resources/extensions/gsd/undo.js +2 -2
- package/dist/resources/extensions/gsd/unit-ownership.js +33 -164
- package/dist/resources/extensions/gsd/verdict-parser.js +8 -20
- package/dist/resources/extensions/gsd/workflow-manifest.js +5 -24
- package/dist/resources/extensions/gsd/workflow-projections.js +63 -95
- package/dist/resources/extensions/gsd/workflow-reconcile.js +5 -35
- package/dist/resources/extensions/gsd/workspace-index.js +0 -24
- package/dist/resources/extensions/gsd/worktree-manager.js +1 -105
- package/dist/resources/extensions/gsd/worktree-resolver.js +3 -20
- package/dist/resources/extensions/mcp-client/index.js +7 -11
- package/dist/resources/extensions/search-the-web/extension-manifest.json +1 -1
- package/dist/resources/extensions/shared/interview-ui.js +1 -11
- package/dist/resources/skills/create-gsd-extension/SKILL.md +3 -5
- package/dist/resources/skills/create-gsd-extension/references/key-rules-gotchas.md +4 -5
- package/dist/resources/skills/create-gsd-extension/workflows/add-capability.md +2 -2
- package/dist/resources/skills/create-gsd-extension/workflows/create-extension.md +4 -4
- package/dist/resources/skills/create-gsd-extension/workflows/debug-extension.md +3 -5
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +17 -17
- package/dist/web/standalone/.next/build-manifest.json +3 -3
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
- package/dist/web/standalone/.next/required-server-files.json +1 -1
- package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.html +2 -2
- package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +2 -2
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +17 -17
- package/dist/web/standalone/.next/server/chunks/2229.js +2 -2
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/dist/web/standalone/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/.next/server/pages/500.html +2 -2
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/web/standalone/.next/static/chunks/6502.8b732f67a11b11b4.js +9 -0
- package/dist/web/standalone/.next/static/chunks/{webpack-a1c1e452c6b32d04.js → webpack-61d3afac6d0f0ce7.js} +1 -1
- package/dist/web/standalone/.next/static/css/a58ef8a151aa0493.css +1 -0
- package/dist/web/standalone/server.js +1 -1
- package/dist/web-mode.js +1 -2
- package/package.json +2 -2
- package/packages/native/dist/ast/index.js +5 -9
- package/packages/native/dist/ast/types.js +1 -2
- package/packages/native/dist/clipboard/index.js +7 -12
- package/packages/native/dist/clipboard/types.js +1 -2
- package/packages/native/dist/diff/index.js +7 -12
- package/packages/native/dist/diff/types.js +1 -2
- package/packages/native/dist/fd/index.js +3 -6
- package/packages/native/dist/fd/types.js +1 -2
- package/packages/native/dist/glob/index.js +5 -9
- package/packages/native/dist/glob/types.js +1 -2
- package/packages/native/dist/grep/index.js +5 -9
- package/packages/native/dist/grep/types.js +1 -2
- package/packages/native/dist/gsd-parser/index.js +11 -18
- package/packages/native/dist/gsd-parser/types.js +1 -2
- package/packages/native/dist/highlight/index.js +7 -12
- package/packages/native/dist/highlight/types.js +1 -2
- package/packages/native/dist/html/index.js +3 -6
- package/packages/native/dist/html/types.js +1 -2
- package/packages/native/dist/image/index.js +5 -10
- package/packages/native/dist/image/types.js +4 -7
- package/packages/native/dist/index.js +17 -70
- package/packages/native/dist/json-parse/index.js +8 -13
- package/packages/native/dist/native.js +10 -47
- package/packages/native/dist/ps/index.js +9 -15
- package/packages/native/dist/ps/types.js +1 -2
- package/packages/native/dist/stream-process/index.js +7 -12
- package/packages/native/dist/text/index.js +14 -24
- package/packages/native/dist/text/types.js +2 -5
- package/packages/native/dist/truncate/index.js +7 -12
- package/packages/native/dist/ttsr/index.js +7 -12
- package/packages/native/dist/ttsr/types.js +1 -2
- package/packages/native/dist/xxhash/index.js +5 -9
- package/packages/native/package.json +19 -19
- package/packages/native/src/native.ts +8 -9
- package/packages/pi-agent-core/dist/agent-loop.js +2 -3
- package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/packages/pi-agent-core/dist/proxy.d.ts +1 -1
- package/packages/pi-agent-core/dist/proxy.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/proxy.js.map +1 -1
- package/packages/pi-agent-core/src/agent-loop.ts +2 -3
- package/packages/pi-agent-core/src/proxy.ts +1 -1
- package/packages/pi-ai/dist/env-api-keys.js +0 -1
- package/packages/pi-ai/dist/env-api-keys.js.map +1 -1
- package/packages/pi-ai/dist/index.d.ts +0 -1
- package/packages/pi-ai/dist/index.d.ts.map +1 -1
- package/packages/pi-ai/dist/index.js +0 -1
- package/packages/pi-ai/dist/index.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.js +2 -19
- package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
- package/packages/pi-ai/dist/types.d.ts +3 -3
- package/packages/pi-ai/dist/types.d.ts.map +1 -1
- package/packages/pi-ai/dist/types.js.map +1 -1
- package/packages/pi-ai/dist/utils/json-parse.d.ts +0 -3
- package/packages/pi-ai/dist/utils/json-parse.d.ts.map +1 -1
- package/packages/pi-ai/dist/utils/json-parse.js +1 -24
- package/packages/pi-ai/dist/utils/json-parse.js.map +1 -1
- package/packages/pi-ai/src/env-api-keys.ts +0 -1
- package/packages/pi-ai/src/index.ts +0 -1
- package/packages/pi-ai/src/providers/anthropic-shared.ts +2 -17
- package/packages/pi-ai/src/types.ts +2 -3
- package/packages/pi-ai/src/utils/json-parse.ts +1 -28
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts +0 -4
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js +0 -31
- package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts +1 -17
- package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.js +2 -62
- package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/exec.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/exec.js +1 -3
- package/packages/pi-coding-agent/dist/core/exec.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +0 -4
- package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.js +0 -2
- package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts +0 -5
- package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.js +0 -5
- package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/index.d.ts +1 -1
- package/packages/pi-coding-agent/dist/core/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/index.js +1 -1
- package/packages/pi-coding-agent/dist/core/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/index.js +0 -3
- package/packages/pi-coding-agent/dist/core/lsp/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/lspmux.js +0 -3
- package/packages/pi-coding-agent/dist/core/lsp/lspmux.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/messages.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/messages.js +2 -31
- package/packages/pi-coding-agent/dist/core/messages.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-resolver.js +0 -1
- package/packages/pi-coding-agent/dist/core/model-resolver.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/resource-loader.d.ts +0 -10
- package/packages/pi-coding-agent/dist/core/resource-loader.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/resource-loader.js +1 -12
- package/packages/pi-coding-agent/dist/core/resource-loader.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.d.ts +0 -6
- package/packages/pi-coding-agent/dist/core/retry-handler.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.js +1 -48
- package/packages/pi-coding-agent/dist/core/retry-handler.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/hashline-read.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/hashline-read.js +3 -10
- package/packages/pi-coding-agent/dist/core/tools/hashline-read.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/read.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/read.js +4 -13
- package/packages/pi-coding-agent/dist/core/tools/read.js.map +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts +2 -2
- package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/index.js +1 -1
- package/packages/pi-coding-agent/dist/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +0 -4
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.d.ts +0 -1
- package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.js +0 -5
- package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.js.map +1 -1
- package/packages/pi-coding-agent/src/core/agent-session.ts +1 -38
- package/packages/pi-coding-agent/src/core/compaction/compaction.ts +1 -94
- package/packages/pi-coding-agent/src/core/exec.ts +1 -3
- package/packages/pi-coding-agent/src/core/extensions/index.ts +0 -4
- package/packages/pi-coding-agent/src/core/extensions/loader.ts +0 -5
- package/packages/pi-coding-agent/src/core/index.ts +0 -6
- package/packages/pi-coding-agent/src/core/lsp/index.ts +0 -3
- package/packages/pi-coding-agent/src/core/lsp/lspmux.ts +0 -3
- package/packages/pi-coding-agent/src/core/messages.ts +2 -29
- package/packages/pi-coding-agent/src/core/model-resolver.ts +0 -1
- package/packages/pi-coding-agent/src/core/resource-loader.ts +1 -20
- package/packages/pi-coding-agent/src/core/retry-handler.ts +1 -52
- package/packages/pi-coding-agent/src/core/tools/hashline-read.ts +3 -11
- package/packages/pi-coding-agent/src/core/tools/read.ts +4 -14
- package/packages/pi-coding-agent/src/index.ts +0 -6
- package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +0 -7
- package/packages/pi-coding-agent/src/modes/rpc/remote-terminal.ts +0 -6
- package/packages/pi-tui/dist/terminal.d.ts +0 -2
- package/packages/pi-tui/dist/terminal.d.ts.map +1 -1
- package/packages/pi-tui/dist/terminal.js +0 -9
- package/packages/pi-tui/dist/terminal.js.map +1 -1
- package/packages/pi-tui/dist/tui.d.ts.map +1 -1
- package/packages/pi-tui/dist/tui.js +0 -9
- package/packages/pi-tui/dist/tui.js.map +1 -1
- package/packages/pi-tui/src/terminal.ts +0 -14
- package/packages/pi-tui/src/tui.ts +0 -8
- package/scripts/ensure-workspace-builds.cjs +14 -45
- package/src/resources/agents/researcher.md +1 -1
- package/src/resources/extensions/ask-user-questions.ts +3 -21
- package/src/resources/extensions/async-jobs/extension-manifest.json +1 -1
- package/src/resources/extensions/bg-shell/extension-manifest.json +1 -1
- package/src/resources/extensions/browser-tools/extension-manifest.json +1 -1
- package/src/resources/extensions/claude-code-cli/partial-builder.ts +6 -13
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +35 -63
- package/src/resources/extensions/claude-code-cli/tests/partial-builder.test.ts +0 -28
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +1 -108
- package/src/resources/extensions/context7/extension-manifest.json +1 -1
- package/src/resources/extensions/get-secrets-from-user.ts +5 -8
- package/src/resources/extensions/google-search/extension-manifest.json +1 -1
- package/src/resources/extensions/google-search/index.ts +1 -2
- package/src/resources/extensions/gsd/auto/loop-deps.ts +0 -1
- package/src/resources/extensions/gsd/auto/phases.ts +34 -43
- package/src/resources/extensions/gsd/auto-artifact-paths.ts +2 -2
- package/src/resources/extensions/gsd/auto-dashboard.ts +19 -37
- package/src/resources/extensions/gsd/auto-dispatch.ts +2 -18
- package/src/resources/extensions/gsd/auto-model-selection.ts +5 -26
- package/src/resources/extensions/gsd/auto-post-unit.ts +4 -18
- package/src/resources/extensions/gsd/auto-prompts.ts +1 -1
- package/src/resources/extensions/gsd/auto-recovery.ts +5 -12
- package/src/resources/extensions/gsd/auto-start.ts +26 -35
- package/src/resources/extensions/gsd/auto-worktree.ts +9 -190
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +0 -31
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +8 -85
- package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +1 -38
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +19 -31
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +11 -50
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +0 -75
- package/src/resources/extensions/gsd/captures.ts +3 -63
- package/src/resources/extensions/gsd/db-writer.ts +7 -140
- package/src/resources/extensions/gsd/doctor-git-checks.ts +0 -26
- package/src/resources/extensions/gsd/doctor-providers.ts +1 -2
- package/src/resources/extensions/gsd/doctor-runtime-checks.ts +4 -5
- package/src/resources/extensions/gsd/doctor.ts +1 -3
- package/src/resources/extensions/gsd/error-classifier.ts +11 -14
- package/src/resources/extensions/gsd/extension-manifest.json +1 -16
- package/src/resources/extensions/gsd/forensics.ts +20 -144
- package/src/resources/extensions/gsd/git-service.ts +3 -26
- package/src/resources/extensions/gsd/gitignore.ts +0 -33
- package/src/resources/extensions/gsd/gsd-db.ts +7 -43
- package/src/resources/extensions/gsd/guided-flow.ts +45 -114
- package/src/resources/extensions/gsd/health-widget-core.ts +0 -34
- package/src/resources/extensions/gsd/health-widget.ts +0 -17
- package/src/resources/extensions/gsd/index.ts +0 -1
- package/src/resources/extensions/gsd/memory-extractor.ts +0 -8
- package/src/resources/extensions/gsd/migrate-external.ts +1 -9
- package/src/resources/extensions/gsd/model-cost-table.ts +0 -19
- package/src/resources/extensions/gsd/model-router.ts +1 -35
- package/src/resources/extensions/gsd/native-git-bridge.ts +0 -17
- package/src/resources/extensions/gsd/notifications.ts +0 -16
- package/src/resources/extensions/gsd/parallel-eligibility.ts +2 -15
- package/src/resources/extensions/gsd/parallel-merge.ts +4 -87
- package/src/resources/extensions/gsd/parsers-legacy.ts +3 -22
- package/src/resources/extensions/gsd/paths.ts +0 -42
- package/src/resources/extensions/gsd/preferences-models.ts +1 -14
- package/src/resources/extensions/gsd/preferences-types.ts +1 -2
- package/src/resources/extensions/gsd/preferences.ts +15 -13
- package/src/resources/extensions/gsd/prompt-loader.ts +1 -4
- package/src/resources/extensions/gsd/prompts/complete-milestone.md +1 -1
- package/src/resources/extensions/gsd/prompts/complete-slice.md +2 -4
- package/src/resources/extensions/gsd/prompts/discuss-headless.md +1 -1
- package/src/resources/extensions/gsd/prompts/discuss.md +1 -1
- package/src/resources/extensions/gsd/prompts/execute-task.md +1 -3
- package/src/resources/extensions/gsd/prompts/forensics.md +2 -2
- package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +1 -1
- package/src/resources/extensions/gsd/prompts/guided-discuss-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/plan-slice.md +0 -2
- package/src/resources/extensions/gsd/prompts/rethink.md +1 -1
- package/src/resources/extensions/gsd/prompts/triage-captures.md +0 -1
- package/src/resources/extensions/gsd/repo-identity.ts +11 -186
- package/src/resources/extensions/gsd/rethink.ts +0 -6
- package/src/resources/extensions/gsd/roadmap-slices.ts +4 -5
- package/src/resources/extensions/gsd/state.ts +32 -84
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +0 -29
- package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +1 -71
- package/src/resources/extensions/gsd/tests/captures.test.ts +0 -103
- package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +0 -27
- package/src/resources/extensions/gsd/tests/complete-slice.test.ts +0 -21
- package/src/resources/extensions/gsd/tests/db-writer.test.ts +12 -7
- package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +5 -78
- package/src/resources/extensions/gsd/tests/derive-state.test.ts +0 -29
- package/src/resources/extensions/gsd/tests/discuss-queued-milestones.test.ts +0 -40
- package/src/resources/extensions/gsd/tests/dist-redirect.mjs +1 -20
- package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +0 -117
- package/src/resources/extensions/gsd/tests/empty-db-reconciliation.test.ts +79 -0
- package/src/resources/extensions/gsd/tests/forensics-dedup.test.ts +0 -31
- package/src/resources/extensions/gsd/tests/gsd-tools.test.ts +12 -125
- package/src/resources/extensions/gsd/tests/health-widget.test.ts +0 -67
- package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +1 -111
- package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +0 -101
- package/src/resources/extensions/gsd/tests/integration/auto-worktree.test.ts +0 -59
- package/src/resources/extensions/gsd/tests/integration/parallel-merge.test.ts +0 -110
- package/src/resources/extensions/gsd/tests/integration/run-uat.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/memory-extractor.test.ts +2 -85
- package/src/resources/extensions/gsd/tests/model-cost-table.test.ts +0 -34
- package/src/resources/extensions/gsd/tests/model-router.test.ts +3 -68
- package/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +0 -28
- package/src/resources/extensions/gsd/tests/notifications.test.ts +0 -45
- package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +1 -33
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +0 -29
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +0 -38
- package/src/resources/extensions/gsd/tests/reassess-handler.test.ts +0 -117
- package/src/resources/extensions/gsd/tests/roadmap-slices.test.ts +0 -97
- package/src/resources/extensions/gsd/tests/secure-env-collect.test.ts +0 -134
- package/src/resources/extensions/gsd/tests/tool-naming.test.ts +1 -2
- package/src/resources/extensions/gsd/tests/triage-resolution.test.ts +0 -8
- package/src/resources/extensions/gsd/tests/unit-ownership.test.ts +17 -100
- package/src/resources/extensions/gsd/tests/validate-milestone-write-order.test.ts +1 -4
- package/src/resources/extensions/gsd/tests/workflow-logger.test.ts +0 -48
- package/src/resources/extensions/gsd/tests/workflow-manifest.test.ts +0 -92
- package/src/resources/extensions/gsd/tests/workflow-projections.test.ts +2 -4
- package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +1 -48
- package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +5 -29
- package/src/resources/extensions/gsd/tools/complete-task.ts +74 -36
- package/src/resources/extensions/gsd/tools/plan-milestone.ts +1 -13
- package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +0 -36
- package/src/resources/extensions/gsd/tools/validate-milestone.ts +2 -20
- package/src/resources/extensions/gsd/triage-resolution.ts +6 -23
- package/src/resources/extensions/gsd/types.ts +2 -4
- package/src/resources/extensions/gsd/undo.ts +2 -2
- package/src/resources/extensions/gsd/unit-ownership.ts +35 -206
- package/src/resources/extensions/gsd/verdict-parser.ts +6 -21
- package/src/resources/extensions/gsd/workflow-logger.ts +1 -3
- package/src/resources/extensions/gsd/workflow-manifest.ts +5 -22
- package/src/resources/extensions/gsd/workflow-projections.ts +64 -97
- package/src/resources/extensions/gsd/workflow-reconcile.ts +10 -39
- package/src/resources/extensions/gsd/workspace-index.ts +0 -30
- package/src/resources/extensions/gsd/worktree-manager.ts +1 -120
- package/src/resources/extensions/gsd/worktree-resolver.ts +3 -22
- package/src/resources/extensions/mcp-client/index.ts +7 -13
- package/src/resources/extensions/search-the-web/extension-manifest.json +1 -1
- package/src/resources/extensions/shared/interview-ui.ts +1 -12
- package/src/resources/skills/create-gsd-extension/SKILL.md +3 -5
- package/src/resources/skills/create-gsd-extension/references/key-rules-gotchas.md +4 -5
- package/src/resources/skills/create-gsd-extension/workflows/add-capability.md +2 -2
- package/src/resources/skills/create-gsd-extension/workflows/create-extension.md +4 -4
- package/src/resources/skills/create-gsd-extension/workflows/debug-extension.md +3 -5
- package/dist/resources/extensions/gsd/milestone-validation-gates.js +0 -45
- package/dist/resources/extensions/ollama/index.js +0 -112
- package/dist/resources/extensions/ollama/model-capabilities.js +0 -115
- package/dist/resources/extensions/ollama/ollama-client.js +0 -168
- package/dist/resources/extensions/ollama/ollama-commands.js +0 -194
- package/dist/resources/extensions/ollama/ollama-discovery.js +0 -69
- package/dist/resources/extensions/ollama/ollama-tool.js +0 -184
- package/dist/resources/extensions/ollama/types.js +0 -2
- package/dist/startup-model-validation.d.ts +0 -39
- package/dist/startup-model-validation.js +0 -50
- package/dist/web/standalone/.next/static/chunks/6502.7593d7797a4b3999.js +0 -9
- package/dist/web/standalone/.next/static/css/f6e8833d46e738d8.css +0 -1
- package/packages/native/src/__tests__/module-compat.test.mjs +0 -91
- package/packages/pi-agent-core/src/agent-loop.test.ts +0 -45
- package/packages/pi-ai/dist/providers/anthropic-shared.test.d.ts +0 -2
- package/packages/pi-ai/dist/providers/anthropic-shared.test.d.ts.map +0 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.test.js +0 -25
- package/packages/pi-ai/dist/providers/anthropic-shared.test.js.map +0 -1
- package/packages/pi-ai/dist/utils/repair-tool-json.d.ts +0 -37
- package/packages/pi-ai/dist/utils/repair-tool-json.d.ts.map +0 -1
- package/packages/pi-ai/dist/utils/repair-tool-json.js +0 -75
- package/packages/pi-ai/dist/utils/repair-tool-json.js.map +0 -1
- package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.d.ts +0 -2
- package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.d.ts.map +0 -1
- package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.js +0 -73
- package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.js.map +0 -1
- package/packages/pi-ai/src/providers/anthropic-shared.test.ts +0 -29
- package/packages/pi-ai/src/utils/repair-tool-json.ts +0 -88
- package/packages/pi-ai/src/utils/tests/repair-tool-json.test.ts +0 -102
- package/packages/pi-coding-agent/dist/core/compaction/compaction.test.d.ts +0 -6
- package/packages/pi-coding-agent/dist/core/compaction/compaction.test.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js +0 -176
- package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js.map +0 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.d.ts +0 -28
- package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.js +0 -37
- package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.js.map +0 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.d.ts +0 -2
- package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.js +0 -63
- package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.js.map +0 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-sort.d.ts +0 -19
- package/packages/pi-coding-agent/dist/core/extensions/extension-sort.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-sort.js +0 -115
- package/packages/pi-coding-agent/dist/core/extensions/extension-sort.js.map +0 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.d.ts +0 -2
- package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.js +0 -109
- package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.js.map +0 -1
- package/packages/pi-coding-agent/dist/core/image-overflow-recovery.d.ts +0 -44
- package/packages/pi-coding-agent/dist/core/image-overflow-recovery.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/image-overflow-recovery.js +0 -97
- package/packages/pi-coding-agent/dist/core/image-overflow-recovery.js.map +0 -1
- package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.d.ts +0 -2
- package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.js +0 -181
- package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.js.map +0 -1
- package/packages/pi-coding-agent/dist/core/messages.test.d.ts +0 -9
- package/packages/pi-coding-agent/dist/core/messages.test.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/messages.test.js +0 -86
- package/packages/pi-coding-agent/dist/core/messages.test.js.map +0 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.test.d.ts +0 -9
- package/packages/pi-coding-agent/dist/core/retry-handler.test.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.test.js +0 -193
- package/packages/pi-coding-agent/dist/core/retry-handler.test.js.map +0 -1
- package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.d.ts +0 -16
- package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.js +0 -80
- package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.js.map +0 -1
- package/packages/pi-coding-agent/src/core/compaction/compaction.test.ts +0 -236
- package/packages/pi-coding-agent/src/core/extensions/extension-manifest.test.ts +0 -77
- package/packages/pi-coding-agent/src/core/extensions/extension-manifest.ts +0 -62
- package/packages/pi-coding-agent/src/core/extensions/extension-sort.test.ts +0 -134
- package/packages/pi-coding-agent/src/core/extensions/extension-sort.ts +0 -137
- package/packages/pi-coding-agent/src/core/image-overflow-recovery.test.ts +0 -228
- package/packages/pi-coding-agent/src/core/image-overflow-recovery.ts +0 -118
- package/packages/pi-coding-agent/src/core/messages.test.ts +0 -114
- package/packages/pi-coding-agent/src/core/retry-handler.test.ts +0 -255
- package/packages/pi-coding-agent/src/core/tools/spawn-shell-windows.test.ts +0 -92
- package/src/resources/extensions/gsd/milestone-validation-gates.ts +0 -56
- package/src/resources/extensions/gsd/tests/auto-mode-interactive-guard.test.ts +0 -71
- package/src/resources/extensions/gsd/tests/cli-provider-rate-limit.test.ts +0 -47
- package/src/resources/extensions/gsd/tests/completion-hierarchy-guards.test.ts +0 -192
- package/src/resources/extensions/gsd/tests/db-path-worktree-symlink.test.ts +0 -131
- package/src/resources/extensions/gsd/tests/discord-invite-links.test.ts +0 -47
- package/src/resources/extensions/gsd/tests/discuss-empty-db-fallback.test.ts +0 -127
- package/src/resources/extensions/gsd/tests/dynamic-routing-default.test.ts +0 -20
- package/src/resources/extensions/gsd/tests/empty-content-abort-loop.test.ts +0 -74
- package/src/resources/extensions/gsd/tests/event-replay-idempotency.test.ts +0 -140
- package/src/resources/extensions/gsd/tests/forensics-context-persist.test.ts +0 -129
- package/src/resources/extensions/gsd/tests/forensics-db-completion.test.ts +0 -96
- package/src/resources/extensions/gsd/tests/gsdroot-worktree-detection.test.ts +0 -164
- package/src/resources/extensions/gsd/tests/guided-flow-dynamic-routing.test.ts +0 -135
- package/src/resources/extensions/gsd/tests/guided-flow-session-isolation.test.ts +0 -97
- package/src/resources/extensions/gsd/tests/hook-key-parsing.test.ts +0 -107
- package/src/resources/extensions/gsd/tests/integration/doctor-false-positives.test.ts +0 -243
- package/src/resources/extensions/gsd/tests/integration/gitignore-staging-2570.test.ts +0 -150
- package/src/resources/extensions/gsd/tests/integration/state-machine-live-validation.test.ts +0 -959
- package/src/resources/extensions/gsd/tests/migrate-external-worktree.test.ts +0 -105
- package/src/resources/extensions/gsd/tests/milestone-status-authoritative.test.ts +0 -116
- package/src/resources/extensions/gsd/tests/parallel-commit-scope.test.ts +0 -159
- package/src/resources/extensions/gsd/tests/parallel-eligibility-ghost.test.ts +0 -150
- package/src/resources/extensions/gsd/tests/plan-milestone-title.test.ts +0 -70
- package/src/resources/extensions/gsd/tests/project-relocation-recovery.test.ts +0 -297
- package/src/resources/extensions/gsd/tests/prompt-loader-replacement.test.ts +0 -178
- package/src/resources/extensions/gsd/tests/prompt-tool-names.test.ts +0 -69
- package/src/resources/extensions/gsd/tests/queue-execution-guard.test.ts +0 -157
- package/src/resources/extensions/gsd/tests/quick-turn-end-cleanup.test.ts +0 -90
- package/src/resources/extensions/gsd/tests/reconciliation-edge-cases.test.ts +0 -162
- package/src/resources/extensions/gsd/tests/slice-disk-reconcile.test.ts +0 -233
- package/src/resources/extensions/gsd/tests/stash-queued-context-files.test.ts +0 -305
- package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +0 -405
- package/src/resources/extensions/gsd/tests/state-derivation-parity.test.ts +0 -257
- package/src/resources/extensions/gsd/tests/state-machine-full-walkthrough.test.ts +0 -1628
- package/src/resources/extensions/gsd/tests/stop-auto-race-null-unit.test.ts +0 -106
- package/src/resources/extensions/gsd/tests/stuck-detection-coverage.test.ts +0 -174
- package/src/resources/extensions/gsd/tests/summary-render-parity.test.ts +0 -221
- package/src/resources/extensions/gsd/tests/uat-stuck-loop-orphaned-worktree.test.ts +0 -289
- package/src/resources/extensions/gsd/tests/vacuum-recovery.test.ts +0 -154
- package/src/resources/extensions/gsd/tests/verdict-parser.test.ts +0 -156
- package/src/resources/extensions/gsd/tests/verification-operational-gate.test.ts +0 -82
- package/src/resources/extensions/gsd/tests/worktree-db-respawn-truncation.test.ts +0 -140
- package/src/resources/extensions/gsd/tests/worktree-nested-git-safety.test.ts +0 -101
- package/src/resources/extensions/gsd/tests/zombie-gsd-state.test.ts +0 -95
- package/src/resources/extensions/mcp-client/tests/server-name-spaces.test.ts +0 -55
- package/src/resources/extensions/ollama/index.ts +0 -130
- package/src/resources/extensions/ollama/model-capabilities.ts +0 -145
- package/src/resources/extensions/ollama/ollama-client.ts +0 -196
- package/src/resources/extensions/ollama/ollama-commands.ts +0 -248
- package/src/resources/extensions/ollama/ollama-discovery.ts +0 -106
- package/src/resources/extensions/ollama/ollama-tool.ts +0 -218
- package/src/resources/extensions/ollama/tests/model-capabilities.test.ts +0 -162
- package/src/resources/extensions/ollama/tests/ollama-client.test.ts +0 -38
- package/src/resources/extensions/ollama/tests/ollama-discovery.test.ts +0 -28
- package/src/resources/extensions/ollama/types.ts +0 -130
- package/src/resources/extensions/shared/tests/ask-user-freetext.test.ts +0 -156
- /package/dist/web/standalone/.next/static/{R0D4xaIPl5kg93edN7Oo0 → 5DLsjFHdSB6_a1EDQVjr7}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{R0D4xaIPl5kg93edN7Oo0 → 5DLsjFHdSB6_a1EDQVjr7}/_ssgManifest.js +0 -0
|
@@ -48,45 +48,30 @@ function getClaudePath() {
|
|
|
48
48
|
return cachedClaudePath;
|
|
49
49
|
}
|
|
50
50
|
// ---------------------------------------------------------------------------
|
|
51
|
-
// Prompt
|
|
51
|
+
// Prompt extraction
|
|
52
52
|
// ---------------------------------------------------------------------------
|
|
53
53
|
/**
|
|
54
|
-
* Extract
|
|
54
|
+
* Extract the last user prompt text from GSD's context messages.
|
|
55
|
+
* The SDK manages its own conversation history — we only send
|
|
56
|
+
* the latest user message as the prompt.
|
|
55
57
|
*/
|
|
56
|
-
function
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
.
|
|
63
|
-
|
|
64
|
-
|
|
58
|
+
function extractLastUserPrompt(context) {
|
|
59
|
+
for (let i = context.messages.length - 1; i >= 0; i--) {
|
|
60
|
+
const msg = context.messages[i];
|
|
61
|
+
if (msg.role === "user") {
|
|
62
|
+
if (typeof msg.content === "string")
|
|
63
|
+
return msg.content;
|
|
64
|
+
if (Array.isArray(msg.content)) {
|
|
65
|
+
const textParts = msg.content
|
|
66
|
+
.filter((part) => part.type === "text")
|
|
67
|
+
.map((part) => part.text);
|
|
68
|
+
if (textParts.length > 0)
|
|
69
|
+
return textParts.join("\n");
|
|
70
|
+
}
|
|
71
|
+
}
|
|
65
72
|
}
|
|
66
73
|
return "";
|
|
67
74
|
}
|
|
68
|
-
/**
|
|
69
|
-
* Build a full conversational prompt from GSD's context messages.
|
|
70
|
-
*
|
|
71
|
-
* Previous behaviour sent only the last user message, making every SDK
|
|
72
|
-
* call effectively stateless. This version serialises the complete
|
|
73
|
-
* conversation history (system prompt + all user/assistant turns) so
|
|
74
|
-
* Claude Code has full context for multi-turn continuity.
|
|
75
|
-
*/
|
|
76
|
-
export function buildPromptFromContext(context) {
|
|
77
|
-
const parts = [];
|
|
78
|
-
if (context.systemPrompt) {
|
|
79
|
-
parts.push(`[System]\n${context.systemPrompt}`);
|
|
80
|
-
}
|
|
81
|
-
for (const msg of context.messages) {
|
|
82
|
-
const text = extractMessageText(msg);
|
|
83
|
-
if (!text)
|
|
84
|
-
continue;
|
|
85
|
-
const label = msg.role === "user" ? "User" : msg.role === "assistant" ? "Assistant" : "System";
|
|
86
|
-
parts.push(`[${label}]\n${text}`);
|
|
87
|
-
}
|
|
88
|
-
return parts.join("\n\n");
|
|
89
|
-
}
|
|
90
75
|
// ---------------------------------------------------------------------------
|
|
91
76
|
// Error helper
|
|
92
77
|
// ---------------------------------------------------------------------------
|
|
@@ -117,29 +102,6 @@ export function makeStreamExhaustedErrorMessage(model, lastTextContent) {
|
|
|
117
102
|
return message;
|
|
118
103
|
}
|
|
119
104
|
// ---------------------------------------------------------------------------
|
|
120
|
-
// SDK options builder
|
|
121
|
-
// ---------------------------------------------------------------------------
|
|
122
|
-
/**
|
|
123
|
-
* Build the options object passed to the Claude Agent SDK's `query()` call.
|
|
124
|
-
*
|
|
125
|
-
* Extracted for testability — callers can verify session persistence,
|
|
126
|
-
* beta flags, and other configuration without mocking the full SDK.
|
|
127
|
-
*/
|
|
128
|
-
export function buildSdkOptions(modelId, prompt) {
|
|
129
|
-
return {
|
|
130
|
-
pathToClaudeCodeExecutable: getClaudePath(),
|
|
131
|
-
model: modelId,
|
|
132
|
-
includePartialMessages: true,
|
|
133
|
-
persistSession: true,
|
|
134
|
-
cwd: process.cwd(),
|
|
135
|
-
permissionMode: "bypassPermissions",
|
|
136
|
-
allowDangerouslySkipPermissions: true,
|
|
137
|
-
settingSources: ["project"],
|
|
138
|
-
systemPrompt: { type: "preset", preset: "claude_code" },
|
|
139
|
-
betas: modelId.includes("sonnet") ? ["context-1m-2025-08-07"] : [],
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
|
-
// ---------------------------------------------------------------------------
|
|
143
105
|
// streamSimple implementation
|
|
144
106
|
// ---------------------------------------------------------------------------
|
|
145
107
|
/**
|
|
@@ -171,13 +133,21 @@ async function pumpSdkMessages(model, context, options, stream) {
|
|
|
171
133
|
if (options?.signal) {
|
|
172
134
|
options.signal.addEventListener("abort", () => controller.abort(), { once: true });
|
|
173
135
|
}
|
|
174
|
-
const prompt =
|
|
175
|
-
const sdkOpts = buildSdkOptions(modelId, prompt);
|
|
136
|
+
const prompt = extractLastUserPrompt(context);
|
|
176
137
|
const queryResult = sdk.query({
|
|
177
138
|
prompt,
|
|
178
139
|
options: {
|
|
179
|
-
|
|
140
|
+
pathToClaudeCodeExecutable: getClaudePath(),
|
|
141
|
+
model: modelId,
|
|
142
|
+
includePartialMessages: true,
|
|
143
|
+
persistSession: false,
|
|
180
144
|
abortController: controller,
|
|
145
|
+
cwd: process.cwd(),
|
|
146
|
+
permissionMode: "bypassPermissions",
|
|
147
|
+
allowDangerouslySkipPermissions: true,
|
|
148
|
+
settingSources: ["project"],
|
|
149
|
+
systemPrompt: { type: "preset", preset: "claude_code" },
|
|
150
|
+
betas: modelId.includes("sonnet") ? ["context-1m-2025-08-07"] : [],
|
|
181
151
|
},
|
|
182
152
|
});
|
|
183
153
|
// Emit start with an empty partial
|
|
@@ -204,6 +174,8 @@ async function pumpSdkMessages(model, context, options, stream) {
|
|
|
204
174
|
// -- Streaming partial messages --
|
|
205
175
|
case "stream_event": {
|
|
206
176
|
const partial = msg;
|
|
177
|
+
if (partial.parent_tool_use_id !== null)
|
|
178
|
+
break; // skip subagent
|
|
207
179
|
const event = partial.event;
|
|
208
180
|
// New assistant turn starts with message_start
|
|
209
181
|
if (event.type === "message_start") {
|
|
@@ -228,6 +200,8 @@ async function pumpSdkMessages(model, context, options, stream) {
|
|
|
228
200
|
// -- Complete assistant message (non-streaming fallback) --
|
|
229
201
|
case "assistant": {
|
|
230
202
|
const sdkAssistant = msg;
|
|
203
|
+
if (sdkAssistant.parent_tool_use_id !== null)
|
|
204
|
+
break;
|
|
231
205
|
// Capture text content from complete messages
|
|
232
206
|
for (const block of sdkAssistant.message.content) {
|
|
233
207
|
if (block.type === "text") {
|
|
@@ -241,6 +215,9 @@ async function pumpSdkMessages(model, context, options, stream) {
|
|
|
241
215
|
}
|
|
242
216
|
// -- User message (synthetic tool result — signals turn boundary) --
|
|
243
217
|
case "user": {
|
|
218
|
+
const userMsg = msg;
|
|
219
|
+
if (userMsg.parent_tool_use_id !== null)
|
|
220
|
+
break;
|
|
244
221
|
// Capture content from the completed turn before resetting
|
|
245
222
|
if (builder) {
|
|
246
223
|
for (const block of builder.message.content) {
|
|
@@ -31,9 +31,6 @@ function hydrateProcessEnv(key, value) {
|
|
|
31
31
|
process.env[key] = value;
|
|
32
32
|
}
|
|
33
33
|
async function writeEnvKey(filePath, key, value) {
|
|
34
|
-
if (typeof value !== "string") {
|
|
35
|
-
throw new TypeError(`writeEnvKey expects a string value for key "${key}", got ${typeof value}`);
|
|
36
|
-
}
|
|
37
34
|
let content = "";
|
|
38
35
|
try {
|
|
39
36
|
content = await readFile(filePath, "utf8");
|
|
@@ -337,19 +334,19 @@ export async function collectSecretsFromManifest(base, milestoneId, ctx) {
|
|
|
337
334
|
for (const { key, value } of collected) {
|
|
338
335
|
const entry = manifest.entries.find((e) => e.key === key);
|
|
339
336
|
if (entry) {
|
|
340
|
-
entry.status = value
|
|
337
|
+
entry.status = value !== null ? "collected" : "skipped";
|
|
341
338
|
}
|
|
342
339
|
}
|
|
343
340
|
// (i) Write manifest back to disk
|
|
344
341
|
await writeFile(manifestPath, formatSecretsManifest(manifest), "utf8");
|
|
345
342
|
// (j) Apply collected values to destination
|
|
346
|
-
const provided = collected.filter((c) => c.value
|
|
343
|
+
const provided = collected.filter((c) => c.value !== null);
|
|
347
344
|
const { applied } = await applySecrets(provided, destination, {
|
|
348
345
|
envFilePath: resolve(ctx.cwd, ".env"),
|
|
349
346
|
});
|
|
350
347
|
const skipped = [
|
|
351
348
|
...alreadySkipped,
|
|
352
|
-
...collected.filter((c) => c.value
|
|
349
|
+
...collected.filter((c) => c.value === null).map((c) => c.key),
|
|
353
350
|
];
|
|
354
351
|
return { applied, skipped, existingSkipped };
|
|
355
352
|
}
|
|
@@ -406,8 +403,8 @@ export default function secureEnv(pi) {
|
|
|
406
403
|
const value = await collectOneSecret(ctx, i, params.keys.length, item.key, item.hint, item.guidance);
|
|
407
404
|
collected.push({ key: item.key, value });
|
|
408
405
|
}
|
|
409
|
-
const provided = collected.filter((c) => c.value
|
|
410
|
-
const skipped = collected.filter((c) => c.value
|
|
406
|
+
const provided = collected.filter((c) => c.value !== null);
|
|
407
|
+
const skipped = collected.filter((c) => c.value === null).map((c) => c.key);
|
|
411
408
|
// Apply to destination via shared helper
|
|
412
409
|
const { applied, errors } = await applySecrets(provided, destination, {
|
|
413
410
|
envFilePath: resolve(ctx.cwd, params.envFilePath ?? ".env"),
|
|
@@ -26,7 +26,7 @@ async function getClient() {
|
|
|
26
26
|
*/
|
|
27
27
|
async function searchWithOAuth(query, accessToken, projectId, signal) {
|
|
28
28
|
const model = process.env.GEMINI_SEARCH_MODEL || "gemini-2.5-flash";
|
|
29
|
-
const url = `https://cloudcode-pa.googleapis.com/v1internal:streamGenerateContent
|
|
29
|
+
const url = `https://cloudcode-pa.googleapis.com/v1internal:streamGenerateContent`;
|
|
30
30
|
const GEMINI_CLI_HEADERS = {
|
|
31
31
|
ideType: "IDE_UNSPECIFIED",
|
|
32
32
|
platform: "PLATFORM_UNSPECIFIED",
|
|
@@ -49,7 +49,6 @@ async function searchWithOAuth(query, accessToken, projectId, signal) {
|
|
|
49
49
|
contents: [{ parts: [{ text: query }] }],
|
|
50
50
|
tools: [{ googleSearch: {} }],
|
|
51
51
|
},
|
|
52
|
-
userAgent: "pi-coding-agent",
|
|
53
52
|
}),
|
|
54
53
|
signal,
|
|
55
54
|
});
|
|
@@ -13,7 +13,7 @@ import { runUnit } from "./run-unit.js";
|
|
|
13
13
|
import { debugLog } from "../debug-logger.js";
|
|
14
14
|
import { PROJECT_FILES } from "../detection.js";
|
|
15
15
|
import { MergeConflictError } from "../git-service.js";
|
|
16
|
-
import { join
|
|
16
|
+
import { join } from "node:path";
|
|
17
17
|
import { existsSync, cpSync } from "node:fs";
|
|
18
18
|
import { logWarning, logError } from "../workflow-logger.js";
|
|
19
19
|
import { gsdRoot } from "../paths.js";
|
|
@@ -146,7 +146,7 @@ export async function runPreDispatch(ic, loopState) {
|
|
|
146
146
|
if (mid && s.currentMilestoneId && mid !== s.currentMilestoneId) {
|
|
147
147
|
deps.emitJournalEvent({ ts: new Date().toISOString(), flowId: ic.flowId, seq: ic.nextSeq(), eventType: "milestone-transition", data: { from: s.currentMilestoneId, to: mid } });
|
|
148
148
|
ctx.ui.notify(`Milestone ${s.currentMilestoneId} complete. Advancing to ${mid}: ${midTitle}.`, "info");
|
|
149
|
-
deps.sendDesktopNotification("GSD", `Milestone ${s.currentMilestoneId} complete!`, "success", "milestone"
|
|
149
|
+
deps.sendDesktopNotification("GSD", `Milestone ${s.currentMilestoneId} complete!`, "success", "milestone");
|
|
150
150
|
deps.logCmuxEvent(prefs, `Milestone ${s.currentMilestoneId} complete. Advancing to ${mid}.`, "success");
|
|
151
151
|
const vizPrefs = prefs;
|
|
152
152
|
if (vizPrefs?.auto_visualize) {
|
|
@@ -255,7 +255,7 @@ export async function runPreDispatch(ic, loopState) {
|
|
|
255
255
|
}
|
|
256
256
|
// PR creation (auto_pr) is handled inside mergeMilestoneToMain (#2302)
|
|
257
257
|
}
|
|
258
|
-
deps.sendDesktopNotification("GSD", "All milestones complete!", "success", "milestone"
|
|
258
|
+
deps.sendDesktopNotification("GSD", "All milestones complete!", "success", "milestone");
|
|
259
259
|
deps.logCmuxEvent(prefs, "All milestones complete.", "success");
|
|
260
260
|
await deps.stopAuto(ctx, pi, "All milestones complete");
|
|
261
261
|
}
|
|
@@ -269,7 +269,7 @@ export async function runPreDispatch(ic, loopState) {
|
|
|
269
269
|
const blockerMsg = `Blocked: ${state.blockers.join(", ")}`;
|
|
270
270
|
await deps.stopAuto(ctx, pi, blockerMsg);
|
|
271
271
|
ctx.ui.notify(`${blockerMsg}. Fix and run /gsd auto.`, "warning");
|
|
272
|
-
deps.sendDesktopNotification("GSD", blockerMsg, "error", "attention"
|
|
272
|
+
deps.sendDesktopNotification("GSD", blockerMsg, "error", "attention");
|
|
273
273
|
deps.logCmuxEvent(prefs, blockerMsg, "error");
|
|
274
274
|
}
|
|
275
275
|
else {
|
|
@@ -326,7 +326,7 @@ export async function runPreDispatch(ic, loopState) {
|
|
|
326
326
|
}
|
|
327
327
|
// PR creation (auto_pr) is handled inside mergeMilestoneToMain (#2302)
|
|
328
328
|
}
|
|
329
|
-
deps.sendDesktopNotification("GSD", `Milestone ${mid} complete!`, "success", "milestone"
|
|
329
|
+
deps.sendDesktopNotification("GSD", `Milestone ${mid} complete!`, "success", "milestone");
|
|
330
330
|
deps.logCmuxEvent(prefs, `Milestone ${mid} complete.`, "success");
|
|
331
331
|
await closeoutAndStop(ctx, pi, s, deps, `Milestone ${mid} complete`);
|
|
332
332
|
debugLog("autoLoop", { phase: "exit", reason: "milestone-complete" });
|
|
@@ -338,7 +338,7 @@ export async function runPreDispatch(ic, loopState) {
|
|
|
338
338
|
const blockerMsg = `Blocked: ${state.blockers.join(", ")}`;
|
|
339
339
|
await closeoutAndStop(ctx, pi, s, deps, blockerMsg);
|
|
340
340
|
ctx.ui.notify(`${blockerMsg}. Fix and run /gsd auto.`, "warning");
|
|
341
|
-
deps.sendDesktopNotification("GSD", blockerMsg, "error", "attention"
|
|
341
|
+
deps.sendDesktopNotification("GSD", blockerMsg, "error", "attention");
|
|
342
342
|
deps.logCmuxEvent(prefs, blockerMsg, "error");
|
|
343
343
|
debugLog("autoLoop", { phase: "exit", reason: "blocked" });
|
|
344
344
|
deps.emitJournalEvent({ ts: new Date().toISOString(), flowId: ic.flowId, seq: ic.nextSeq(), eventType: "terminal", data: { reason: "blocked", blockers: state.blockers } });
|
|
@@ -520,28 +520,28 @@ export async function runGuards(ic, mid) {
|
|
|
520
520
|
// 100% — special enforcement logic (halt/pause/warn)
|
|
521
521
|
const msg = `Budget ceiling ${deps.formatCost(budgetCeiling)} reached (spent ${deps.formatCost(totalCost)}).`;
|
|
522
522
|
if (budgetEnforcementAction === "halt") {
|
|
523
|
-
deps.sendDesktopNotification("GSD", msg, "error", "budget"
|
|
523
|
+
deps.sendDesktopNotification("GSD", msg, "error", "budget");
|
|
524
524
|
await deps.stopAuto(ctx, pi, "Budget ceiling reached");
|
|
525
525
|
debugLog("autoLoop", { phase: "exit", reason: "budget-halt" });
|
|
526
526
|
return { action: "break", reason: "budget-halt" };
|
|
527
527
|
}
|
|
528
528
|
if (budgetEnforcementAction === "pause") {
|
|
529
529
|
ctx.ui.notify(`${msg} Pausing auto-mode — /gsd auto to override and continue.`, "warning");
|
|
530
|
-
deps.sendDesktopNotification("GSD", msg, "warning", "budget"
|
|
530
|
+
deps.sendDesktopNotification("GSD", msg, "warning", "budget");
|
|
531
531
|
deps.logCmuxEvent(prefs, msg, "warning");
|
|
532
532
|
await deps.pauseAuto(ctx, pi);
|
|
533
533
|
debugLog("autoLoop", { phase: "exit", reason: "budget-pause" });
|
|
534
534
|
return { action: "break", reason: "budget-pause" };
|
|
535
535
|
}
|
|
536
536
|
ctx.ui.notify(`${msg} Continuing (enforcement: warn).`, "warning");
|
|
537
|
-
deps.sendDesktopNotification("GSD", msg, "warning", "budget"
|
|
537
|
+
deps.sendDesktopNotification("GSD", msg, "warning", "budget");
|
|
538
538
|
deps.logCmuxEvent(prefs, msg, "warning");
|
|
539
539
|
}
|
|
540
540
|
else if (threshold.pct < 100) {
|
|
541
541
|
// Sub-100% — simple notification
|
|
542
542
|
const msg = `${threshold.label}: ${deps.formatCost(totalCost)} / ${deps.formatCost(budgetCeiling)}`;
|
|
543
543
|
ctx.ui.notify(msg, threshold.notifyLevel);
|
|
544
|
-
deps.sendDesktopNotification("GSD", msg, threshold.notifyLevel, "budget"
|
|
544
|
+
deps.sendDesktopNotification("GSD", msg, threshold.notifyLevel, "budget");
|
|
545
545
|
deps.logCmuxEvent(prefs, msg, threshold.cmuxLevel);
|
|
546
546
|
}
|
|
547
547
|
}
|
|
@@ -561,7 +561,7 @@ export async function runGuards(ic, mid) {
|
|
|
561
561
|
contextUsage.percent >= contextThreshold) {
|
|
562
562
|
const msg = `Context window at ${contextUsage.percent}% (threshold: ${contextThreshold}%). Pausing to prevent truncated output.`;
|
|
563
563
|
ctx.ui.notify(`${msg} Run /gsd auto to continue (will start fresh session).`, "warning");
|
|
564
|
-
deps.sendDesktopNotification("GSD", `Context ${contextUsage.percent}% — paused`, "warning", "attention"
|
|
564
|
+
deps.sendDesktopNotification("GSD", `Context ${contextUsage.percent}% — paused`, "warning", "attention");
|
|
565
565
|
await deps.pauseAuto(ctx, pi);
|
|
566
566
|
debugLog("autoLoop", { phase: "exit", reason: "context-window" });
|
|
567
567
|
return { action: "break", reason: "context-window" };
|
|
@@ -646,12 +646,6 @@ export async function runUnitPhase(ic, iterData, loopState, sidecarItem) {
|
|
|
646
646
|
lastProgressKind: "dispatch",
|
|
647
647
|
recoveryAttempts: 0, // Reset so re-dispatched units get full recovery budget (#2322)
|
|
648
648
|
});
|
|
649
|
-
// Select and apply model (with tier escalation on retry — normal units only)
|
|
650
|
-
const modelResult = await deps.selectAndApplyModel(ctx, pi, unitType, unitId, s.basePath, prefs, s.verbose, s.autoModeStartModel, sidecarItem ? undefined : { isRetry, previousTier });
|
|
651
|
-
s.currentUnitRouting =
|
|
652
|
-
modelResult.routing;
|
|
653
|
-
s.currentUnitModel =
|
|
654
|
-
modelResult.appliedModel;
|
|
655
649
|
// Status bar + progress widget
|
|
656
650
|
ctx.ui.setStatus("gsd-auto", "auto");
|
|
657
651
|
if (mid)
|
|
@@ -715,6 +709,12 @@ export async function runUnitPhase(ic, iterData, loopState, sidecarItem) {
|
|
|
715
709
|
const msg = reorderErr instanceof Error ? reorderErr.message : String(reorderErr);
|
|
716
710
|
logWarning("engine", "Prompt reorder failed", { error: msg });
|
|
717
711
|
}
|
|
712
|
+
// Select and apply model (with tier escalation on retry — normal units only)
|
|
713
|
+
const modelResult = await deps.selectAndApplyModel(ctx, pi, unitType, unitId, s.basePath, prefs, s.verbose, s.autoModeStartModel, sidecarItem ? undefined : { isRetry, previousTier });
|
|
714
|
+
s.currentUnitRouting =
|
|
715
|
+
modelResult.routing;
|
|
716
|
+
s.currentUnitModel =
|
|
717
|
+
modelResult.appliedModel;
|
|
718
718
|
// Apply sidecar/pre-dispatch hook model override (takes priority over standard model selection)
|
|
719
719
|
const hookModelOverride = sidecarItem?.model ?? iterData.hookModelOverride;
|
|
720
720
|
if (hookModelOverride) {
|
|
@@ -806,11 +806,7 @@ export async function runUnitPhase(ic, iterData, loopState, sidecarItem) {
|
|
|
806
806
|
// ── Immediate unit closeout (metrics, activity log, memory) ────────
|
|
807
807
|
// Run right after runUnit() returns so telemetry is never lost to a
|
|
808
808
|
// crash between iterations.
|
|
809
|
-
|
|
810
|
-
// this coroutine was suspended at `await runUnit(...)` (#2939).
|
|
811
|
-
if (s.currentUnit) {
|
|
812
|
-
await deps.closeoutUnit(ctx, s.basePath, unitType, unitId, s.currentUnit.startedAt, deps.buildSnapshotOpts(unitType, unitId));
|
|
813
|
-
}
|
|
809
|
+
await deps.closeoutUnit(ctx, s.basePath, unitType, unitId, s.currentUnit.startedAt, deps.buildSnapshotOpts(unitType, unitId));
|
|
814
810
|
// ── Zero tool-call guard (#1833) ──────────────────────────────────
|
|
815
811
|
// An execute-task agent that completes with 0 tool calls made no
|
|
816
812
|
// real changes — its summary is hallucinated. Treat as failed so
|
|
@@ -818,7 +814,7 @@ export async function runUnitPhase(ic, iterData, loopState, sidecarItem) {
|
|
|
818
814
|
if (unitType === "execute-task") {
|
|
819
815
|
const currentLedger = deps.getLedger();
|
|
820
816
|
if (currentLedger?.units) {
|
|
821
|
-
const lastUnit = [...currentLedger.units].reverse().find((u) => u.type === unitType && u.id === unitId && u.startedAt === s.currentUnit
|
|
817
|
+
const lastUnit = [...currentLedger.units].reverse().find((u) => u.type === unitType && u.id === unitId && u.startedAt === s.currentUnit.startedAt);
|
|
822
818
|
if (lastUnit && lastUnit.toolCalls === 0) {
|
|
823
819
|
debugLog("runUnitPhase", {
|
|
824
820
|
phase: "zero-tool-calls",
|
|
@@ -829,7 +825,7 @@ export async function runUnitPhase(ic, iterData, loopState, sidecarItem) {
|
|
|
829
825
|
ctx.ui.notify(`${unitType} ${unitId} completed with 0 tool calls — hallucinated summary, will retry`, "warning");
|
|
830
826
|
// Fall through to next iteration where dispatch will re-derive
|
|
831
827
|
// and re-dispatch this task.
|
|
832
|
-
return { action: "next", data: { unitStartedAt: s.currentUnit
|
|
828
|
+
return { action: "next", data: { unitStartedAt: s.currentUnit.startedAt } };
|
|
833
829
|
}
|
|
834
830
|
}
|
|
835
831
|
}
|
|
@@ -844,7 +840,7 @@ export async function runUnitPhase(ic, iterData, loopState, sidecarItem) {
|
|
|
844
840
|
s.unitRecoveryCount.delete(`${unitType}/${unitId}`);
|
|
845
841
|
}
|
|
846
842
|
deps.emitJournalEvent({ ts: new Date().toISOString(), flowId: ic.flowId, seq: ic.nextSeq(), eventType: "unit-end", data: { unitType, unitId, status: unitResult.status, artifactVerified, ...(unitResult.errorContext ? { errorContext: unitResult.errorContext } : {}) }, causedBy: { flowId: ic.flowId, seq: unitStartSeq } });
|
|
847
|
-
return { action: "next", data: { unitStartedAt: s.currentUnit
|
|
843
|
+
return { action: "next", data: { unitStartedAt: s.currentUnit.startedAt } };
|
|
848
844
|
}
|
|
849
845
|
// ─── runFinalize ──────────────────────────────────────────────────────────────
|
|
850
846
|
/**
|
|
@@ -42,7 +42,7 @@ export function resolveExpectedArtifactPath(unitType, unitId, base) {
|
|
|
42
42
|
}
|
|
43
43
|
case "run-uat": {
|
|
44
44
|
const dir = resolveSlicePath(base, mid, sid);
|
|
45
|
-
return dir ? join(dir, buildSliceFileName(sid, "
|
|
45
|
+
return dir ? join(dir, buildSliceFileName(sid, "UAT")) : null;
|
|
46
46
|
}
|
|
47
47
|
case "execute-task": {
|
|
48
48
|
const dir = resolveSlicePath(base, mid, sid);
|
|
@@ -105,7 +105,7 @@ export function diagnoseExpectedArtifact(unitType, unitId, base) {
|
|
|
105
105
|
case "reassess-roadmap":
|
|
106
106
|
return `${relSliceFile(base, mid, sid, "ASSESSMENT")} (roadmap reassessment)`;
|
|
107
107
|
case "run-uat":
|
|
108
|
-
return `${relSliceFile(base, mid, sid, "
|
|
108
|
+
return `${relSliceFile(base, mid, sid, "UAT")} (UAT result)`;
|
|
109
109
|
case "validate-milestone":
|
|
110
110
|
return `${relMilestoneFile(base, mid, "VALIDATION")} (milestone validation report)`;
|
|
111
111
|
case "complete-milestone":
|
|
@@ -458,13 +458,6 @@ export function updateProgressWidget(ctx, unitType, unitId, state, accessors, ti
|
|
|
458
458
|
: theme.fg("dim", elapsed))
|
|
459
459
|
: "";
|
|
460
460
|
lines.push(rightAlign(headerLeft, headerRight, width));
|
|
461
|
-
// Worktree/branch right-aligned below header
|
|
462
|
-
if (worktreeName && cachedBranch) {
|
|
463
|
-
lines.push(rightAlign("", theme.fg("dim", `${worktreeName} (${cachedBranch})`), width));
|
|
464
|
-
}
|
|
465
|
-
else if (cachedBranch) {
|
|
466
|
-
lines.push(rightAlign("", theme.fg("dim", cachedBranch), width));
|
|
467
|
-
}
|
|
468
461
|
// Show health signal details when degraded (yellow/red)
|
|
469
462
|
if (score.level !== "green" && score.signals.length > 0 && widgetMode !== "min") {
|
|
470
463
|
// Show up to 3 most relevant signals in compact form
|
|
@@ -571,10 +564,10 @@ export function updateProgressWidget(ctx, unitType, unitId, state, accessors, ti
|
|
|
571
564
|
const hasContext = !!(mid || (slice && unitType !== "research-milestone" && unitType !== "plan-milestone"));
|
|
572
565
|
if (mid) {
|
|
573
566
|
const modelTag = modelDisplay ? theme.fg("muted", ` ${modelDisplay}`) : "";
|
|
574
|
-
lines.push(truncateToWidth(`${pad}${theme.fg("dim", mid.title)}${modelTag}`, width
|
|
567
|
+
lines.push(truncateToWidth(`${pad}${theme.fg("dim", mid.title)}${modelTag}`, width));
|
|
575
568
|
}
|
|
576
569
|
if (slice && unitType !== "research-milestone" && unitType !== "plan-milestone") {
|
|
577
|
-
lines.push(truncateToWidth(`${pad}${theme.fg("text", theme.bold(`${slice.id}: ${slice.title}`))}`, width
|
|
570
|
+
lines.push(truncateToWidth(`${pad}${theme.fg("text", theme.bold(`${slice.id}: ${slice.title}`))}`, width));
|
|
578
571
|
}
|
|
579
572
|
if (hasContext)
|
|
580
573
|
lines.push("");
|
|
@@ -612,11 +605,6 @@ export function updateProgressWidget(ctx, unitType, unitId, state, accessors, ti
|
|
|
612
605
|
// Build right column: task checklist
|
|
613
606
|
const rightLines = [];
|
|
614
607
|
const maxVisibleTasks = 8;
|
|
615
|
-
// Max visible chars for task title text (before ANSI theming)
|
|
616
|
-
const maxTaskTitleLen = 45;
|
|
617
|
-
function truncTitle(s) {
|
|
618
|
-
return s.length > maxTaskTitleLen ? s.slice(0, maxTaskTitleLen - 1) + "…" : s;
|
|
619
|
-
}
|
|
620
608
|
function formatTaskLine(t, isCurrent) {
|
|
621
609
|
const glyph = t.done
|
|
622
610
|
? theme.fg("success", "*")
|
|
@@ -628,12 +616,11 @@ export function updateProgressWidget(ctx, unitType, unitId, state, accessors, ti
|
|
|
628
616
|
: t.done
|
|
629
617
|
? theme.fg("muted", t.id)
|
|
630
618
|
: theme.fg("dim", t.id);
|
|
631
|
-
const short = truncTitle(t.title);
|
|
632
619
|
const title = isCurrent
|
|
633
|
-
? theme.fg("text",
|
|
620
|
+
? theme.fg("text", t.title)
|
|
634
621
|
: t.done
|
|
635
|
-
? theme.fg("muted",
|
|
636
|
-
: theme.fg("text",
|
|
622
|
+
? theme.fg("muted", t.title)
|
|
623
|
+
: theme.fg("text", t.title);
|
|
637
624
|
return `${glyph} ${id}: ${title}`;
|
|
638
625
|
}
|
|
639
626
|
if (useTwoCol && taskDetailsCol) {
|
|
@@ -655,7 +642,7 @@ export function updateProgressWidget(ctx, unitType, unitId, state, accessors, ti
|
|
|
655
642
|
if (maxRows > 0) {
|
|
656
643
|
lines.push("");
|
|
657
644
|
for (let i = 0; i < maxRows; i++) {
|
|
658
|
-
const left = padToWidth(truncateToWidth(leftLines[i] ?? "", leftColWidth
|
|
645
|
+
const left = padToWidth(truncateToWidth(leftLines[i] ?? "", leftColWidth), leftColWidth);
|
|
659
646
|
const right = rightLines[i] ?? "";
|
|
660
647
|
lines.push(`${left}${right}`);
|
|
661
648
|
}
|
|
@@ -665,7 +652,7 @@ export function updateProgressWidget(ctx, unitType, unitId, state, accessors, ti
|
|
|
665
652
|
if (leftLines.length > 0) {
|
|
666
653
|
lines.push("");
|
|
667
654
|
for (const l of leftLines)
|
|
668
|
-
lines.push(truncateToWidth(l, width
|
|
655
|
+
lines.push(truncateToWidth(l, width));
|
|
669
656
|
}
|
|
670
657
|
}
|
|
671
658
|
// ── Footer: simplified stats + pwd + last commit + hints ────────
|
|
@@ -695,28 +682,24 @@ export function updateProgressWidget(ctx, unitType, unitId, state, accessors, ti
|
|
|
695
682
|
lines.push(rightAlign("", theme.fg("dim", cachedRtkLabel), width));
|
|
696
683
|
}
|
|
697
684
|
}
|
|
698
|
-
//
|
|
685
|
+
// PWD line with last commit info right-aligned
|
|
699
686
|
const lastCommit = getLastCommit(accessors.getBasePath());
|
|
700
|
-
const maxCommitLen = 65;
|
|
701
|
-
const commitMsg = lastCommit
|
|
702
|
-
? lastCommit.message.length > maxCommitLen
|
|
703
|
-
? lastCommit.message.slice(0, maxCommitLen - 1) + "…"
|
|
704
|
-
: lastCommit.message
|
|
705
|
-
: "";
|
|
706
|
-
// Hints line
|
|
707
|
-
const hintParts = [];
|
|
708
|
-
hintParts.push("esc pause");
|
|
709
|
-
hintParts.push(process.platform === "darwin" ? "⌃⌥G dashboard" : "Ctrl+Alt+G dashboard");
|
|
710
|
-
const hintStr = theme.fg("dim", hintParts.join(" | "));
|
|
711
687
|
const commitStr = lastCommit
|
|
712
|
-
? theme.fg("dim", `${lastCommit.timeAgo} ago: ${
|
|
688
|
+
? theme.fg("dim", `${lastCommit.timeAgo} ago: ${lastCommit.message}`)
|
|
713
689
|
: "";
|
|
690
|
+
const pwdStr = theme.fg("dim", widgetPwd);
|
|
714
691
|
if (commitStr) {
|
|
715
|
-
lines.push(rightAlign(`${pad}${
|
|
692
|
+
lines.push(rightAlign(`${pad}${pwdStr}`, truncateToWidth(commitStr, Math.floor(width * 0.45)), width));
|
|
716
693
|
}
|
|
717
694
|
else {
|
|
718
|
-
lines.push(
|
|
695
|
+
lines.push(`${pad}${pwdStr}`);
|
|
719
696
|
}
|
|
697
|
+
// Hints line
|
|
698
|
+
const hintParts = [];
|
|
699
|
+
hintParts.push("esc pause");
|
|
700
|
+
hintParts.push(process.platform === "darwin" ? "⌃⌥G dashboard" : "Ctrl+Alt+G dashboard");
|
|
701
|
+
const hintStr = theme.fg("dim", hintParts.join(" | "));
|
|
702
|
+
lines.push(rightAlign("", hintStr, width));
|
|
720
703
|
lines.push(...ui.bar());
|
|
721
704
|
cachedLines = lines;
|
|
722
705
|
cachedWidth = width;
|
|
@@ -740,12 +723,12 @@ function rightAlign(left, right, width) {
|
|
|
740
723
|
const leftVis = visibleWidth(left);
|
|
741
724
|
const rightVis = visibleWidth(right);
|
|
742
725
|
const gap = Math.max(1, width - leftVis - rightVis);
|
|
743
|
-
return truncateToWidth(left + " ".repeat(gap) + right, width
|
|
726
|
+
return truncateToWidth(left + " ".repeat(gap) + right, width);
|
|
744
727
|
}
|
|
745
728
|
/** Pad a string with trailing spaces to fill exactly `colWidth` (ANSI-aware). */
|
|
746
729
|
function padToWidth(s, colWidth) {
|
|
747
730
|
const vis = visibleWidth(s);
|
|
748
731
|
if (vis >= colWidth)
|
|
749
|
-
return truncateToWidth(s, colWidth
|
|
732
|
+
return truncateToWidth(s, colWidth);
|
|
750
733
|
return s + " ".repeat(colWidth - vis);
|
|
751
734
|
}
|
|
@@ -13,7 +13,6 @@ import { isDbAvailable, getMilestoneSlices, getPendingGates, markAllGatesOmitted
|
|
|
13
13
|
import { extractVerdict, isAcceptableUatVerdict } from "./verdict-parser.js";
|
|
14
14
|
import { gsdRoot, resolveMilestoneFile, resolveMilestonePath, resolveSliceFile, resolveTaskFile, relSliceFile, buildMilestoneFileName, } from "./paths.js";
|
|
15
15
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
16
|
-
import { logError } from "./workflow-logger.js";
|
|
17
16
|
import { join } from "node:path";
|
|
18
17
|
import { hasImplementationArtifacts } from "./auto-recovery.js";
|
|
19
18
|
import { buildDiscussMilestonePrompt, buildResearchMilestonePrompt, buildPlanMilestonePrompt, buildResearchSlicePrompt, buildPlanSlicePrompt, buildExecuteTaskPrompt, buildCompleteSlicePrompt, buildCompleteMilestonePrompt, buildValidateMilestonePrompt, buildReplanSlicePrompt, buildRunUatPrompt, buildReassessRoadmapPrompt, buildRewriteDocsPrompt, buildReactiveExecutePrompt, buildGateEvaluatePrompt, checkNeedsReassessment, checkNeedsRunUat, } from "./auto-prompts.js";
|
|
@@ -60,20 +59,6 @@ export function setRewriteCount(basePath, count) {
|
|
|
60
59
|
mkdirSync(join(gsdRoot(basePath), "runtime"), { recursive: true });
|
|
61
60
|
writeFileSync(filePath, JSON.stringify({ count, updatedAt: new Date().toISOString() }) + "\n");
|
|
62
61
|
}
|
|
63
|
-
// ─── Helpers ─────────────────────────────────────────────────────────────
|
|
64
|
-
/**
|
|
65
|
-
* Returns true when the verification_operational value indicates that no
|
|
66
|
-
* operational verification is needed. Covers common phrasings the planning
|
|
67
|
-
* agent may use: "None", "None required", "N/A", "Not applicable", etc.
|
|
68
|
-
*
|
|
69
|
-
* @see https://github.com/gsd-build/gsd-2/issues/2931
|
|
70
|
-
*/
|
|
71
|
-
export function isVerificationNotApplicable(value) {
|
|
72
|
-
const v = (value ?? "").toLowerCase().trim();
|
|
73
|
-
if (!v || v === "none")
|
|
74
|
-
return true;
|
|
75
|
-
return /^(?:none[\s._-]*(?:required|needed|planned)?|n\/?a|not[\s._-]+(?:applicable|required|needed)|no[\s._-]+operational[\s\S]*)$/i.test(v);
|
|
76
|
-
}
|
|
77
62
|
// ─── Rules ────────────────────────────────────────────────────────────────
|
|
78
63
|
export const DISPATCH_RULES = [
|
|
79
64
|
{
|
|
@@ -398,7 +383,7 @@ export const DISPATCH_RULES = [
|
|
|
398
383
|
}
|
|
399
384
|
catch (err) {
|
|
400
385
|
// Non-fatal — fall through to sequential execution
|
|
401
|
-
|
|
386
|
+
process.stderr.write(`gsd-reactive: graph derivation failed: ${err.message}\n`);
|
|
402
387
|
return null;
|
|
403
388
|
}
|
|
404
389
|
},
|
|
@@ -541,7 +526,7 @@ export const DISPATCH_RULES = [
|
|
|
541
526
|
if (isDbAvailable()) {
|
|
542
527
|
const milestone = getMilestone(mid);
|
|
543
528
|
if (milestone?.verification_operational &&
|
|
544
|
-
|
|
529
|
+
milestone.verification_operational.toLowerCase() !== "none") {
|
|
545
530
|
const validationPath = resolveMilestoneFile(basePath, mid, "VALIDATION");
|
|
546
531
|
if (validationPath) {
|
|
547
532
|
const validationContent = await loadFile(validationPath);
|
|
@@ -163,30 +163,7 @@ export function resolveModelId(modelId, availableModels, currentProvider) {
|
|
|
163
163
|
return availableModels.find(m => m.id.toLowerCase() === lower
|
|
164
164
|
|| `${m.provider}/${m.id}`.toLowerCase() === lower);
|
|
165
165
|
}
|
|
166
|
-
// Bare ID —
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
// context, tool visibility, and cost characteristics (#2905). Bare IDs in
|
|
170
|
-
// PREFERENCES.md must resolve to the canonical API provider, not to an
|
|
171
|
-
// extension wrapper that happens to be the current session provider.
|
|
172
|
-
const candidates = availableModels.filter(m => m.id === modelId);
|
|
173
|
-
if (candidates.length === 0)
|
|
174
|
-
return undefined;
|
|
175
|
-
if (candidates.length === 1)
|
|
176
|
-
return candidates[0];
|
|
177
|
-
// Extension / CLI-wrapper providers that should never win bare-ID resolution
|
|
178
|
-
// when a first-class API provider also offers the same model.
|
|
179
|
-
const EXTENSION_PROVIDERS = new Set(["claude-code"]);
|
|
180
|
-
// Prefer currentProvider only when it is a first-class API provider
|
|
181
|
-
if (currentProvider && !EXTENSION_PROVIDERS.has(currentProvider)) {
|
|
182
|
-
const providerMatch = candidates.find(m => m.provider === currentProvider);
|
|
183
|
-
if (providerMatch)
|
|
184
|
-
return providerMatch;
|
|
185
|
-
}
|
|
186
|
-
// Prefer "anthropic" as the canonical provider for Anthropic models
|
|
187
|
-
const anthropicMatch = candidates.find(m => m.provider === "anthropic");
|
|
188
|
-
if (anthropicMatch)
|
|
189
|
-
return anthropicMatch;
|
|
190
|
-
// Fall back to first non-extension candidate, or any candidate
|
|
191
|
-
return candidates.find(m => !EXTENSION_PROVIDERS.has(m.provider)) ?? candidates[0];
|
|
166
|
+
// Bare ID — prefer current provider, then first available
|
|
167
|
+
const exactProviderMatch = availableModels.find(m => m.id === modelId && m.provider === currentProvider);
|
|
168
|
+
return exactProviderMatch ?? availableModels.find(m => m.id === modelId);
|
|
192
169
|
}
|