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
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
[](https://www.npmjs.com/package/gsd-pi)
|
|
8
8
|
[](https://www.npmjs.com/package/gsd-pi)
|
|
9
9
|
[](https://github.com/gsd-build/GSD-2)
|
|
10
|
-
[](https://discord.
|
|
10
|
+
[](https://discord.gg/gsd)
|
|
11
11
|
[](LICENSE)
|
|
12
12
|
[](https://dexscreener.com/solana/dwudwjvan7bzkw9zwlbyv6kspdlvhwzrqy6ebk8xzxkv)
|
|
13
13
|
|
package/dist/cli.js
CHANGED
|
@@ -5,8 +5,7 @@ import { agentDir, sessionsDir, authFilePath } from './app-paths.js';
|
|
|
5
5
|
import { initResources, buildResourceLoader, getNewerManagedResourceVersion } from './resource-loader.js';
|
|
6
6
|
import { ensureManagedTools } from './tool-bootstrap.js';
|
|
7
7
|
import { loadStoredEnvKeys } from './wizard.js';
|
|
8
|
-
import { migratePiCredentials } from './pi-migration.js';
|
|
9
|
-
import { validateConfiguredModel } from './startup-model-validation.js';
|
|
8
|
+
import { getPiDefaultModelAndProvider, migratePiCredentials } from './pi-migration.js';
|
|
10
9
|
import { shouldRunOnboarding, runOnboarding } from './onboarding.js';
|
|
11
10
|
import chalk from 'chalk';
|
|
12
11
|
import { checkForUpdates } from './update-check.js';
|
|
@@ -137,7 +136,6 @@ const hasSubcommand = cliFlags.messages.length > 0;
|
|
|
137
136
|
if (!process.stdin.isTTY && !isPrintMode && !hasSubcommand && !cliFlags.listModels && !cliFlags.web) {
|
|
138
137
|
process.stderr.write('[gsd] Error: Interactive mode requires a terminal (TTY).\n');
|
|
139
138
|
process.stderr.write('[gsd] Non-interactive alternatives:\n');
|
|
140
|
-
process.stderr.write('[gsd] gsd auto Auto-mode (pipeable, no TUI)\n');
|
|
141
139
|
process.stderr.write('[gsd] gsd --print "your message" Single-shot prompt\n');
|
|
142
140
|
process.stderr.write('[gsd] gsd --mode rpc JSON-RPC over stdin/stdout\n');
|
|
143
141
|
process.stderr.write('[gsd] gsd --mode mcp MCP server over stdin/stdout\n');
|
|
@@ -250,22 +248,6 @@ if (cliFlags.messages[0] === 'headless') {
|
|
|
250
248
|
await runHeadless(parseHeadlessArgs(process.argv));
|
|
251
249
|
process.exit(0);
|
|
252
250
|
}
|
|
253
|
-
// `gsd auto [args...]` — shorthand for `gsd headless auto [args...]` (#2732)
|
|
254
|
-
// Without this, `gsd auto` falls through to the interactive TUI which hangs
|
|
255
|
-
// when stdin/stdout are piped (non-TTY environments).
|
|
256
|
-
if (cliFlags.messages[0] === 'auto') {
|
|
257
|
-
await ensureRtkBootstrap();
|
|
258
|
-
const { runHeadless, parseHeadlessArgs } = await import('./headless.js');
|
|
259
|
-
// Rewrite argv so parseHeadlessArgs sees: [node, gsd, headless, auto, ...rest]
|
|
260
|
-
const rewrittenArgv = [
|
|
261
|
-
process.argv[0],
|
|
262
|
-
process.argv[1],
|
|
263
|
-
'headless',
|
|
264
|
-
...cliFlags.messages, // ['auto', ...extra args]
|
|
265
|
-
];
|
|
266
|
-
await runHeadless(parseHeadlessArgs(rewrittenArgv));
|
|
267
|
-
process.exit(0);
|
|
268
|
-
}
|
|
269
251
|
// Pi's tool bootstrap can mis-detect already-installed fd/rg on some systems
|
|
270
252
|
// because spawnSync(..., ["--version"]) returns EPERM despite a zero exit code.
|
|
271
253
|
// Provision local managed binaries first so Pi sees them without probing PATH.
|
|
@@ -346,6 +328,38 @@ if (cliFlags.listModels !== undefined) {
|
|
|
346
328
|
}
|
|
347
329
|
process.exit(0);
|
|
348
330
|
}
|
|
331
|
+
// Validate configured model on startup — catches stale settings from prior installs
|
|
332
|
+
// (e.g. grok-2 which no longer exists) and fresh installs with no settings.
|
|
333
|
+
// Only resets the default when the configured model no longer exists in the registry;
|
|
334
|
+
// never overwrites a valid user choice.
|
|
335
|
+
const configuredProvider = settingsManager.getDefaultProvider();
|
|
336
|
+
const configuredModel = settingsManager.getDefaultModel();
|
|
337
|
+
const allModels = modelRegistry.getAll();
|
|
338
|
+
const availableModels = modelRegistry.getAvailable();
|
|
339
|
+
const configuredExists = configuredProvider && configuredModel &&
|
|
340
|
+
allModels.some((m) => m.provider === configuredProvider && m.id === configuredModel);
|
|
341
|
+
const configuredAvailable = configuredProvider && configuredModel &&
|
|
342
|
+
availableModels.some((m) => m.provider === configuredProvider && m.id === configuredModel);
|
|
343
|
+
if (!configuredModel || !configuredExists) {
|
|
344
|
+
// Model not configured at all, or removed from registry — pick a fallback.
|
|
345
|
+
// Only fires when the model is genuinely unknown (not just temporarily unavailable).
|
|
346
|
+
const piDefault = getPiDefaultModelAndProvider();
|
|
347
|
+
const preferred = (piDefault
|
|
348
|
+
? availableModels.find((m) => m.provider === piDefault.provider && m.id === piDefault.model)
|
|
349
|
+
: undefined) ||
|
|
350
|
+
availableModels.find((m) => m.provider === 'openai' && m.id === 'gpt-5.4') ||
|
|
351
|
+
availableModels.find((m) => m.provider === 'openai') ||
|
|
352
|
+
availableModels.find((m) => m.provider === 'anthropic' && m.id === 'claude-opus-4-6') ||
|
|
353
|
+
availableModels.find((m) => m.provider === 'anthropic' && m.id.includes('opus')) ||
|
|
354
|
+
availableModels.find((m) => m.provider === 'anthropic') ||
|
|
355
|
+
availableModels[0];
|
|
356
|
+
if (preferred) {
|
|
357
|
+
settingsManager.setDefaultModelAndProvider(preferred.provider, preferred.id);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
if (settingsManager.getDefaultThinkingLevel() !== 'off' && !configuredExists) {
|
|
361
|
+
settingsManager.setDefaultThinkingLevel('off');
|
|
362
|
+
}
|
|
349
363
|
// GSD always uses quiet startup — the gsd extension renders its own branded header
|
|
350
364
|
if (!settingsManager.getQuietStartup()) {
|
|
351
365
|
settingsManager.setQuietStartup(true);
|
|
@@ -391,10 +405,6 @@ if (isPrintMode) {
|
|
|
391
405
|
resourceLoader,
|
|
392
406
|
});
|
|
393
407
|
markStartup('createAgentSession');
|
|
394
|
-
// Validate configured model AFTER extensions have registered their models (#2626).
|
|
395
|
-
// Before this, extension-provided models (e.g. claude-code/*) were not yet in the
|
|
396
|
-
// registry, causing the user's valid choice to be silently overwritten.
|
|
397
|
-
validateConfiguredModel(modelRegistry, settingsManager);
|
|
398
408
|
if (extensionsResult.errors.length > 0) {
|
|
399
409
|
for (const err of extensionsResult.errors) {
|
|
400
410
|
// Downgrade conflicts with built-in tools to warnings (#1347)
|
|
@@ -478,19 +488,6 @@ if (!cliFlags.worktree && !isPrintMode) {
|
|
|
478
488
|
catch { /* non-fatal */ }
|
|
479
489
|
}
|
|
480
490
|
// ---------------------------------------------------------------------------
|
|
481
|
-
// Auto-redirect: `gsd auto` with piped stdout → headless mode (#2732)
|
|
482
|
-
// When stdout is not a TTY (e.g. `gsd auto | cat`, `gsd auto > file`),
|
|
483
|
-
// the TUI cannot render and the process hangs. Redirect to headless mode
|
|
484
|
-
// which handles non-interactive output gracefully.
|
|
485
|
-
// ---------------------------------------------------------------------------
|
|
486
|
-
if (cliFlags.messages[0] === 'auto' && !process.stdout.isTTY) {
|
|
487
|
-
await ensureRtkBootstrap();
|
|
488
|
-
const { runHeadless, parseHeadlessArgs } = await import('./headless.js');
|
|
489
|
-
process.stderr.write('[gsd] stdout is not a terminal — running auto-mode in headless mode.\n');
|
|
490
|
-
await runHeadless(parseHeadlessArgs(['node', 'gsd', 'headless', ...cliFlags.messages.slice(1)]));
|
|
491
|
-
process.exit(0);
|
|
492
|
-
}
|
|
493
|
-
// ---------------------------------------------------------------------------
|
|
494
491
|
// Interactive mode — normal TTY session
|
|
495
492
|
// ---------------------------------------------------------------------------
|
|
496
493
|
await ensureRtkBootstrap();
|
|
@@ -527,10 +524,6 @@ const { session, extensionsResult } = await createAgentSession({
|
|
|
527
524
|
resourceLoader,
|
|
528
525
|
});
|
|
529
526
|
markStartup('createAgentSession');
|
|
530
|
-
// Validate configured model AFTER extensions have registered their models (#2626).
|
|
531
|
-
// Before this, extension-provided models (e.g. claude-code/*) were not yet in the
|
|
532
|
-
// registry, causing the user's valid choice to be silently overwritten.
|
|
533
|
-
validateConfiguredModel(modelRegistry, settingsManager);
|
|
534
527
|
if (extensionsResult.errors.length > 0) {
|
|
535
528
|
for (const err of extensionsResult.errors) {
|
|
536
529
|
const isSuperseded = err.error.includes("supersedes");
|
|
@@ -579,21 +572,14 @@ if (enabledModelPatterns && enabledModelPatterns.length > 0) {
|
|
|
579
572
|
session.setScopedModels(scopedModels);
|
|
580
573
|
}
|
|
581
574
|
}
|
|
582
|
-
if (!process.stdin.isTTY
|
|
583
|
-
|
|
584
|
-
? 'stdin and stdout are'
|
|
585
|
-
: !process.stdin.isTTY
|
|
586
|
-
? 'stdin is'
|
|
587
|
-
: 'stdout is';
|
|
588
|
-
process.stderr.write(`[gsd] Error: Interactive mode requires a terminal (TTY) but ${missing} not a TTY.\n`);
|
|
575
|
+
if (!process.stdin.isTTY) {
|
|
576
|
+
process.stderr.write('[gsd] Error: Interactive mode requires a terminal (TTY).\n');
|
|
589
577
|
process.stderr.write('[gsd] Non-interactive alternatives:\n');
|
|
590
|
-
process.stderr.write('[gsd] gsd auto Auto-mode (pipeable, no TUI)\n');
|
|
591
578
|
process.stderr.write('[gsd] gsd --print "your message" Single-shot prompt\n');
|
|
592
579
|
process.stderr.write('[gsd] gsd --web [path] Browser-only web mode\n');
|
|
593
580
|
process.stderr.write('[gsd] gsd --mode rpc JSON-RPC over stdin/stdout\n');
|
|
594
581
|
process.stderr.write('[gsd] gsd --mode mcp MCP server over stdin/stdout\n');
|
|
595
582
|
process.stderr.write('[gsd] gsd --mode text "message" Text output mode\n');
|
|
596
|
-
process.stderr.write('[gsd] gsd headless Auto-mode without TUI\n');
|
|
597
583
|
process.exit(1);
|
|
598
584
|
}
|
|
599
585
|
// Welcome screen — shown on every fresh interactive session before TUI takes over.
|
package/dist/headless-ui.d.ts
CHANGED
|
@@ -40,25 +40,8 @@ export declare function handleExtensionUIRequest(event: ExtensionUIRequest, clie
|
|
|
40
40
|
export declare function formatProgress(event: Record<string, unknown>, ctx: ProgressContext): string | null;
|
|
41
41
|
/**
|
|
42
42
|
* Format a thinking preview line from accumulated LLM text deltas.
|
|
43
|
-
* Used as a fallback when streaming is not enabled — shows a truncated one-liner.
|
|
44
43
|
*/
|
|
45
44
|
export declare function formatThinkingLine(text: string): string;
|
|
46
|
-
/**
|
|
47
|
-
* Format a text_start marker — printed once when the assistant begins a text block.
|
|
48
|
-
*/
|
|
49
|
-
export declare function formatTextStart(): string;
|
|
50
|
-
/**
|
|
51
|
-
* Format a text_end marker — printed after the last text_delta.
|
|
52
|
-
*/
|
|
53
|
-
export declare function formatTextEnd(): string;
|
|
54
|
-
/**
|
|
55
|
-
* Format a thinking_start marker.
|
|
56
|
-
*/
|
|
57
|
-
export declare function formatThinkingStart(): string;
|
|
58
|
-
/**
|
|
59
|
-
* Format a thinking_end marker.
|
|
60
|
-
*/
|
|
61
|
-
export declare function formatThinkingEnd(): string;
|
|
62
45
|
/**
|
|
63
46
|
* Format a cost line (used for periodic cost updates in verbose mode).
|
|
64
47
|
*/
|
package/dist/headless-ui.js
CHANGED
|
@@ -40,45 +40,24 @@ const c = colorsDisabled ? noColor() : _c;
|
|
|
40
40
|
export function summarizeToolArgs(toolName, toolInput) {
|
|
41
41
|
const name = String(toolName ?? '');
|
|
42
42
|
const input = (toolInput && typeof toolInput === 'object') ? toolInput : {};
|
|
43
|
-
// Helper: extract file path from either 'path' or 'file_path' (tools use both)
|
|
44
|
-
const filePath = () => shortPath(input.path ?? input.file_path) || '';
|
|
45
43
|
switch (name) {
|
|
46
44
|
case 'Read':
|
|
47
45
|
case 'read':
|
|
48
|
-
return
|
|
46
|
+
return shortPath(input.file_path) || '';
|
|
49
47
|
case 'Write':
|
|
50
48
|
case 'write':
|
|
51
|
-
return
|
|
49
|
+
return shortPath(input.file_path) || '';
|
|
52
50
|
case 'Edit':
|
|
53
51
|
case 'edit':
|
|
54
|
-
return
|
|
55
|
-
case 'hashline_edit':
|
|
56
|
-
return filePath();
|
|
52
|
+
return shortPath(input.file_path) || '';
|
|
57
53
|
case 'Bash':
|
|
58
54
|
case 'bash': {
|
|
59
55
|
const cmd = String(input.command ?? '');
|
|
60
56
|
return cmd.length > 80 ? cmd.slice(0, 77) + '...' : cmd;
|
|
61
57
|
}
|
|
62
|
-
case 'async_bash': {
|
|
63
|
-
const cmd = String(input.command ?? '');
|
|
64
|
-
return cmd.length > 80 ? cmd.slice(0, 77) + '...' : cmd;
|
|
65
|
-
}
|
|
66
|
-
case 'await_job': {
|
|
67
|
-
const jobs = input.jobs;
|
|
68
|
-
if (Array.isArray(jobs) && jobs.length > 0)
|
|
69
|
-
return jobs.join(', ');
|
|
70
|
-
return '';
|
|
71
|
-
}
|
|
72
|
-
case 'cancel_job':
|
|
73
|
-
return String(input.job_id ?? '');
|
|
74
58
|
case 'Glob':
|
|
75
59
|
case 'glob':
|
|
76
60
|
return String(input.pattern ?? '');
|
|
77
|
-
case 'find': {
|
|
78
|
-
const pat = String(input.pattern ?? '');
|
|
79
|
-
const p = shortPath(input.path);
|
|
80
|
-
return p ? `${pat} in ${p}` : pat;
|
|
81
|
-
}
|
|
82
61
|
case 'Grep':
|
|
83
62
|
case 'grep':
|
|
84
63
|
case 'Search':
|
|
@@ -87,32 +66,12 @@ export function summarizeToolArgs(toolName, toolInput) {
|
|
|
87
66
|
const g = input.glob ? ` ${input.glob}` : '';
|
|
88
67
|
return `${pat}${g}`;
|
|
89
68
|
}
|
|
90
|
-
case 'ls':
|
|
91
|
-
return shortPath(input.path) || '';
|
|
92
|
-
case 'lsp': {
|
|
93
|
-
const action = String(input.action ?? '');
|
|
94
|
-
const file = shortPath(input.file);
|
|
95
|
-
const sym = input.symbol ? ` ${input.symbol}` : '';
|
|
96
|
-
return file ? `${action} ${file}${sym}` : action;
|
|
97
|
-
}
|
|
98
69
|
case 'Task':
|
|
99
70
|
case 'task': {
|
|
100
71
|
const desc = String(input.description ?? input.prompt ?? '');
|
|
101
72
|
return desc.length > 60 ? desc.slice(0, 57) + '...' : desc;
|
|
102
73
|
}
|
|
103
|
-
case 'subagent': {
|
|
104
|
-
const agent = String(input.agent ?? '');
|
|
105
|
-
const t = String(input.task ?? '');
|
|
106
|
-
const summary = t.length > 50 ? t.slice(0, 47) + '...' : t;
|
|
107
|
-
return agent ? `${agent}: ${summary}` : summary;
|
|
108
|
-
}
|
|
109
|
-
case 'browser_navigate':
|
|
110
|
-
return String(input.url ?? '');
|
|
111
74
|
default: {
|
|
112
|
-
// GSD tools: show milestone/slice/task IDs when present
|
|
113
|
-
if (name.startsWith('gsd_')) {
|
|
114
|
-
return summarizeGsdTool(name, input);
|
|
115
|
-
}
|
|
116
75
|
// Fallback: show first string-valued key up to 60 chars
|
|
117
76
|
for (const v of Object.values(input)) {
|
|
118
77
|
if (typeof v === 'string' && v.length > 0) {
|
|
@@ -123,31 +82,6 @@ export function summarizeToolArgs(toolName, toolInput) {
|
|
|
123
82
|
}
|
|
124
83
|
}
|
|
125
84
|
}
|
|
126
|
-
/** Summarize GSD extension tool args into a compact identifier string. */
|
|
127
|
-
function summarizeGsdTool(name, input) {
|
|
128
|
-
const parts = [];
|
|
129
|
-
if (input.milestoneId)
|
|
130
|
-
parts.push(String(input.milestoneId));
|
|
131
|
-
if (input.sliceId)
|
|
132
|
-
parts.push(String(input.sliceId));
|
|
133
|
-
if (input.taskId)
|
|
134
|
-
parts.push(String(input.taskId));
|
|
135
|
-
if (parts.length > 0) {
|
|
136
|
-
const id = parts.join('/');
|
|
137
|
-
// For completion tools, add the one-liner if present
|
|
138
|
-
if (name.includes('complete') && typeof input.oneLiner === 'string') {
|
|
139
|
-
const ol = input.oneLiner.length > 50 ? input.oneLiner.slice(0, 47) + '...' : input.oneLiner;
|
|
140
|
-
return `${id} ${ol}`;
|
|
141
|
-
}
|
|
142
|
-
return id;
|
|
143
|
-
}
|
|
144
|
-
// Fallback for GSD tools without IDs (e.g. gsd_decision_save)
|
|
145
|
-
if (input.decision) {
|
|
146
|
-
const d = String(input.decision);
|
|
147
|
-
return d.length > 60 ? d.slice(0, 57) + '...' : d;
|
|
148
|
-
}
|
|
149
|
-
return '';
|
|
150
|
-
}
|
|
151
85
|
function shortPath(p) {
|
|
152
86
|
if (typeof p !== 'string')
|
|
153
87
|
return '';
|
|
@@ -286,40 +220,12 @@ export function formatProgress(event, ctx) {
|
|
|
286
220
|
}
|
|
287
221
|
/**
|
|
288
222
|
* Format a thinking preview line from accumulated LLM text deltas.
|
|
289
|
-
* Used as a fallback when streaming is not enabled — shows a truncated one-liner.
|
|
290
223
|
*/
|
|
291
224
|
export function formatThinkingLine(text) {
|
|
292
225
|
const trimmed = text.replace(/\s+/g, ' ').trim();
|
|
293
226
|
const truncated = trimmed.length > 120 ? trimmed.slice(0, 117) + '...' : trimmed;
|
|
294
227
|
return `${c.dim}${c.italic}[thinking] ${truncated}${c.reset}`;
|
|
295
228
|
}
|
|
296
|
-
// ---------------------------------------------------------------------------
|
|
297
|
-
// Streaming Text / Thinking Formatters
|
|
298
|
-
// ---------------------------------------------------------------------------
|
|
299
|
-
/**
|
|
300
|
-
* Format a text_start marker — printed once when the assistant begins a text block.
|
|
301
|
-
*/
|
|
302
|
-
export function formatTextStart() {
|
|
303
|
-
return `${c.dim}[text]${c.reset}`;
|
|
304
|
-
}
|
|
305
|
-
/**
|
|
306
|
-
* Format a text_end marker — printed after the last text_delta.
|
|
307
|
-
*/
|
|
308
|
-
export function formatTextEnd() {
|
|
309
|
-
return ''; // empty — newline handled by caller
|
|
310
|
-
}
|
|
311
|
-
/**
|
|
312
|
-
* Format a thinking_start marker.
|
|
313
|
-
*/
|
|
314
|
-
export function formatThinkingStart() {
|
|
315
|
-
return `${c.dim}${c.italic}[thinking]${c.reset}`;
|
|
316
|
-
}
|
|
317
|
-
/**
|
|
318
|
-
* Format a thinking_end marker.
|
|
319
|
-
*/
|
|
320
|
-
export function formatThinkingEnd() {
|
|
321
|
-
return ''; // empty — newline handled by caller
|
|
322
|
-
}
|
|
323
229
|
/**
|
|
324
230
|
* Format a cost line (used for periodic cost updates in verbose mode).
|
|
325
231
|
*/
|
package/dist/headless.js
CHANGED
|
@@ -19,7 +19,7 @@ import { getProjectSessionsDir } from './project-sessions.js';
|
|
|
19
19
|
import { loadAndValidateAnswerFile, AnswerInjector } from './headless-answers.js';
|
|
20
20
|
import { isTerminalNotification, isBlockedNotification, isMilestoneReadyNotification, isQuickCommand, FIRE_AND_FORGET_METHODS, IDLE_TIMEOUT_MS, NEW_MILESTONE_IDLE_TIMEOUT_MS, EXIT_SUCCESS, EXIT_ERROR, EXIT_BLOCKED, EXIT_CANCELLED, mapStatusToExitCode, } from './headless-events.js';
|
|
21
21
|
import { VALID_OUTPUT_FORMATS } from './headless-types.js';
|
|
22
|
-
import { handleExtensionUIRequest, formatProgress, formatThinkingLine,
|
|
22
|
+
import { handleExtensionUIRequest, formatProgress, formatThinkingLine, startSupervisedStdinReader, } from './headless-ui.js';
|
|
23
23
|
import { loadContext, bootstrapGsdProject, } from './headless-context.js';
|
|
24
24
|
/**
|
|
25
25
|
* Resolve a session prefix to a single session.
|
|
@@ -291,9 +291,6 @@ async function runHeadlessOnce(options, restartCount) {
|
|
|
291
291
|
const toolStartTimes = new Map();
|
|
292
292
|
let lastCostData;
|
|
293
293
|
let thinkingBuffer = '';
|
|
294
|
-
// Streaming state: tracks whether we're inside a text or thinking block
|
|
295
|
-
let inTextBlock = false;
|
|
296
|
-
let inThinkingBlock = false;
|
|
297
294
|
// Emit HeadlessJsonResult to stdout for --output-format json batch mode
|
|
298
295
|
function emitBatchJsonResult() {
|
|
299
296
|
if (options.outputFormat !== 'json')
|
|
@@ -433,58 +430,11 @@ async function runHeadlessOnce(options, restartCount) {
|
|
|
433
430
|
};
|
|
434
431
|
}
|
|
435
432
|
}
|
|
436
|
-
//
|
|
433
|
+
// Accumulate thinking text from message_update text_delta events
|
|
437
434
|
if (eventType === 'message_update') {
|
|
438
435
|
const ame = eventObj.assistantMessageEvent;
|
|
439
|
-
if (ame
|
|
440
|
-
|
|
441
|
-
// --- Text streaming ---
|
|
442
|
-
if (ameType === 'text_start') {
|
|
443
|
-
inTextBlock = true;
|
|
444
|
-
process.stderr.write(formatTextStart());
|
|
445
|
-
}
|
|
446
|
-
else if (ameType === 'text_delta') {
|
|
447
|
-
const delta = String(ame.delta ?? ame.text ?? '');
|
|
448
|
-
if (delta) {
|
|
449
|
-
if (!inTextBlock) {
|
|
450
|
-
// Edge case: delta without start
|
|
451
|
-
inTextBlock = true;
|
|
452
|
-
process.stderr.write(formatTextStart());
|
|
453
|
-
}
|
|
454
|
-
process.stderr.write(delta);
|
|
455
|
-
}
|
|
456
|
-
}
|
|
457
|
-
else if (ameType === 'text_end') {
|
|
458
|
-
if (inTextBlock) {
|
|
459
|
-
process.stderr.write(formatTextEnd() + '\n');
|
|
460
|
-
inTextBlock = false;
|
|
461
|
-
}
|
|
462
|
-
}
|
|
463
|
-
// --- Thinking streaming ---
|
|
464
|
-
else if (ameType === 'thinking_start') {
|
|
465
|
-
inThinkingBlock = true;
|
|
466
|
-
process.stderr.write(formatThinkingStart());
|
|
467
|
-
}
|
|
468
|
-
else if (ameType === 'thinking_delta') {
|
|
469
|
-
const delta = String(ame.delta ?? ame.text ?? '');
|
|
470
|
-
if (delta) {
|
|
471
|
-
if (!inThinkingBlock) {
|
|
472
|
-
inThinkingBlock = true;
|
|
473
|
-
process.stderr.write(formatThinkingStart());
|
|
474
|
-
}
|
|
475
|
-
process.stderr.write(delta);
|
|
476
|
-
}
|
|
477
|
-
}
|
|
478
|
-
else if (ameType === 'thinking_end') {
|
|
479
|
-
if (inThinkingBlock) {
|
|
480
|
-
process.stderr.write(formatThinkingEnd() + '\n');
|
|
481
|
-
inThinkingBlock = false;
|
|
482
|
-
}
|
|
483
|
-
}
|
|
484
|
-
}
|
|
485
|
-
// Non-verbose: accumulate text_delta for truncated one-liner
|
|
486
|
-
else if (ame?.type === 'text_delta') {
|
|
487
|
-
thinkingBuffer += String(ame.delta ?? ame.text ?? '');
|
|
436
|
+
if (ame?.type === 'text_delta') {
|
|
437
|
+
thinkingBuffer += String(ame.text ?? '');
|
|
488
438
|
}
|
|
489
439
|
}
|
|
490
440
|
// Track tool execution start timestamps
|
|
@@ -493,19 +443,8 @@ async function runHeadlessOnce(options, restartCount) {
|
|
|
493
443
|
if (toolCallId)
|
|
494
444
|
toolStartTimes.set(toolCallId, Date.now());
|
|
495
445
|
}
|
|
496
|
-
//
|
|
497
|
-
if (options.verbose && (
|
|
498
|
-
if (inTextBlock) {
|
|
499
|
-
process.stderr.write('\n');
|
|
500
|
-
inTextBlock = false;
|
|
501
|
-
}
|
|
502
|
-
if (inThinkingBlock) {
|
|
503
|
-
process.stderr.write('\n');
|
|
504
|
-
inThinkingBlock = false;
|
|
505
|
-
}
|
|
506
|
-
}
|
|
507
|
-
// Non-verbose: flush accumulated buffer as truncated one-liner
|
|
508
|
-
else if (!options.verbose && thinkingBuffer.trim() &&
|
|
446
|
+
// Flush thinking buffer before tool calls or message end
|
|
447
|
+
if (options.verbose && thinkingBuffer.trim() &&
|
|
509
448
|
(eventType === 'tool_execution_start' || eventType === 'message_end')) {
|
|
510
449
|
process.stderr.write(formatThinkingLine(thinkingBuffer) + '\n');
|
|
511
450
|
thinkingBuffer = '';
|
package/dist/help-text.js
CHANGED
|
@@ -160,7 +160,6 @@ export function printHelp(version) {
|
|
|
160
160
|
process.stdout.write(' update Update GSD to the latest version\n');
|
|
161
161
|
process.stdout.write(' sessions List and resume a past session\n');
|
|
162
162
|
process.stdout.write(' worktree <cmd> Manage worktrees (list, merge, clean, remove)\n');
|
|
163
|
-
process.stdout.write(' auto [args] Run auto-mode without TUI (pipeable)\n');
|
|
164
163
|
process.stdout.write(' headless [cmd] [args] Run /gsd commands without TUI (default: auto)\n');
|
|
165
164
|
process.stdout.write('\nRun gsd <subcommand> --help for subcommand-specific help.\n');
|
|
166
165
|
}
|
package/dist/onboarding.js
CHANGED
|
@@ -49,7 +49,6 @@ const LLM_PROVIDER_IDS = [
|
|
|
49
49
|
'xai',
|
|
50
50
|
'openrouter',
|
|
51
51
|
'mistral',
|
|
52
|
-
'ollama',
|
|
53
52
|
'ollama-cloud',
|
|
54
53
|
'custom-openai',
|
|
55
54
|
];
|
|
@@ -64,7 +63,6 @@ const OTHER_PROVIDERS = [
|
|
|
64
63
|
{ value: 'xai', label: 'xAI (Grok)' },
|
|
65
64
|
{ value: 'openrouter', label: 'OpenRouter' },
|
|
66
65
|
{ value: 'mistral', label: 'Mistral' },
|
|
67
|
-
{ value: 'ollama', label: 'Ollama (Local)' },
|
|
68
66
|
{ value: 'ollama-cloud', label: 'Ollama Cloud' },
|
|
69
67
|
{ value: 'custom-openai', label: 'Custom (OpenAI-compatible)' },
|
|
70
68
|
];
|
|
@@ -295,9 +293,6 @@ async function runLlmStep(p, pc, authStorage) {
|
|
|
295
293
|
if (provider === 'custom-openai') {
|
|
296
294
|
return await runCustomOpenAIFlow(p, pc, authStorage);
|
|
297
295
|
}
|
|
298
|
-
if (provider === 'ollama') {
|
|
299
|
-
return await runOllamaLocalFlow(p, pc, authStorage);
|
|
300
|
-
}
|
|
301
296
|
const label = provider === 'anthropic' ? 'Anthropic'
|
|
302
297
|
: provider === 'openai' ? 'OpenAI'
|
|
303
298
|
: OTHER_PROVIDERS.find(op => op.value === provider)?.label ?? String(provider);
|
|
@@ -387,45 +382,6 @@ async function runApiKeyFlow(p, pc, authStorage, providerId, providerLabel) {
|
|
|
387
382
|
p.log.success(`API key saved for ${pc.green(providerLabel)}`);
|
|
388
383
|
return true;
|
|
389
384
|
}
|
|
390
|
-
// ─── Ollama Local Flow ───────────────────────────────────────────────────────
|
|
391
|
-
async function runOllamaLocalFlow(p, pc, authStorage) {
|
|
392
|
-
const host = process.env.OLLAMA_HOST || 'http://localhost:11434';
|
|
393
|
-
const s = p.spinner();
|
|
394
|
-
s.start(`Checking Ollama at ${host}...`);
|
|
395
|
-
try {
|
|
396
|
-
const controller = new AbortController();
|
|
397
|
-
const timeout = setTimeout(() => controller.abort(), 3000);
|
|
398
|
-
const response = await fetch(host, { signal: controller.signal });
|
|
399
|
-
clearTimeout(timeout);
|
|
400
|
-
if (response.ok) {
|
|
401
|
-
s.stop(`Ollama is running at ${pc.green(host)}`);
|
|
402
|
-
// Store a placeholder so the provider is recognized as authenticated
|
|
403
|
-
authStorage.set('ollama', { type: 'api_key', key: 'ollama' });
|
|
404
|
-
p.log.success(`${pc.green('Ollama (Local)')} configured — no API key needed`);
|
|
405
|
-
p.log.info(pc.dim('Models are discovered automatically from your local Ollama instance.'));
|
|
406
|
-
return true;
|
|
407
|
-
}
|
|
408
|
-
else {
|
|
409
|
-
s.stop('Ollama check failed');
|
|
410
|
-
p.log.warn(`Ollama responded with status ${response.status} at ${host}`);
|
|
411
|
-
}
|
|
412
|
-
}
|
|
413
|
-
catch {
|
|
414
|
-
s.stop('Ollama not detected');
|
|
415
|
-
p.log.warn(`Could not reach Ollama at ${host}`);
|
|
416
|
-
p.log.info(pc.dim('Install Ollama from https://ollama.com and run "ollama serve"'));
|
|
417
|
-
p.log.info(pc.dim('Set OLLAMA_HOST if using a non-default address.'));
|
|
418
|
-
}
|
|
419
|
-
// Even if not reachable now, save the config — the extension will detect it at runtime
|
|
420
|
-
const proceed = await p.confirm({
|
|
421
|
-
message: 'Save Ollama as your provider anyway? (it will auto-detect when running)',
|
|
422
|
-
});
|
|
423
|
-
if (p.isCancel(proceed) || !proceed)
|
|
424
|
-
return false;
|
|
425
|
-
authStorage.set('ollama', { type: 'api_key', key: 'ollama' });
|
|
426
|
-
p.log.success(`${pc.green('Ollama (Local)')} saved — models will appear when Ollama is running`);
|
|
427
|
-
return true;
|
|
428
|
-
}
|
|
429
385
|
// ─── Custom OpenAI-compatible Flow ────────────────────────────────────────────
|
|
430
386
|
async function runCustomOpenAIFlow(p, pc, authStorage) {
|
|
431
387
|
// Prompt for base URL
|
package/dist/resource-loader.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DefaultResourceLoader
|
|
1
|
+
import { DefaultResourceLoader } from '@gsd/pi-coding-agent';
|
|
2
2
|
import { createHash } from 'node:crypto';
|
|
3
3
|
import { homedir } from 'node:os';
|
|
4
4
|
import { chmodSync, copyFileSync, cpSync, existsSync, lstatSync, mkdirSync, openSync, closeSync, readFileSync, readlinkSync, readdirSync, rmSync, statSync, symlinkSync, unlinkSync, writeFileSync } from 'node:fs';
|
|
@@ -584,20 +584,5 @@ export function buildResourceLoader(agentDir) {
|
|
|
584
584
|
agentDir,
|
|
585
585
|
additionalExtensionPaths: piExtensionPaths,
|
|
586
586
|
bundledExtensionNames: bundledKeys,
|
|
587
|
-
extensionPathsTransform: (paths) => {
|
|
588
|
-
// 1. Filter community extensions through the GSD registry
|
|
589
|
-
const filteredPaths = paths.filter((entryPath) => {
|
|
590
|
-
const manifest = readManifestFromEntryPath(entryPath);
|
|
591
|
-
if (!manifest)
|
|
592
|
-
return true; // no manifest = always load
|
|
593
|
-
return isExtensionEnabled(registry, manifest.id);
|
|
594
|
-
});
|
|
595
|
-
// 2. Sort in topological dependency order
|
|
596
|
-
const { sortedPaths, warnings } = sortExtensionPaths(filteredPaths);
|
|
597
|
-
return {
|
|
598
|
-
paths: sortedPaths,
|
|
599
|
-
diagnostics: warnings.map((w) => w.message),
|
|
600
|
-
};
|
|
601
|
-
},
|
|
602
587
|
});
|
|
603
588
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: researcher
|
|
3
3
|
description: Web researcher that finds and synthesizes current information using Brave Search
|
|
4
|
-
tools:
|
|
4
|
+
tools: web_search, bash
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
You are a web researcher. You find current, accurate information using web search and synthesize it into a clear, well-structured report.
|
|
@@ -104,22 +104,9 @@ export default function AskUserQuestions(pi) {
|
|
|
104
104
|
if (selected === undefined) {
|
|
105
105
|
return errorResult("ask_user_questions was cancelled", params.questions);
|
|
106
106
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
let freeTextNote = "";
|
|
111
|
-
const selectedStr = Array.isArray(selected) ? selected[0] : selected;
|
|
112
|
-
if (!q.allowMultiple && selectedStr === OTHER_OPTION_LABEL) {
|
|
113
|
-
const note = await ctx.ui.input(`${q.header}: Please explain in your own words`, "Type your answer here…");
|
|
114
|
-
if (note) {
|
|
115
|
-
freeTextNote = note;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
const answerList = Array.isArray(selected) ? selected : [selected];
|
|
119
|
-
if (freeTextNote) {
|
|
120
|
-
answerList.push(`user_note: ${freeTextNote}`);
|
|
121
|
-
}
|
|
122
|
-
answers[q.id] = { answers: answerList };
|
|
107
|
+
answers[q.id] = {
|
|
108
|
+
answers: Array.isArray(selected) ? selected : [selected],
|
|
109
|
+
};
|
|
123
110
|
}
|
|
124
111
|
const roundResult = {
|
|
125
112
|
endInterview: false,
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"provides": {
|
|
9
9
|
"tools": ["bg_shell"],
|
|
10
10
|
"commands": ["bg"],
|
|
11
|
-
"hooks": ["session_shutdown"
|
|
11
|
+
"hooks": ["session_shutdown"],
|
|
12
12
|
"shortcuts": ["Ctrl+Alt+B"]
|
|
13
13
|
}
|
|
14
14
|
}
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"browser_visual_diff", "browser_zoom_region",
|
|
30
30
|
"browser_generate_test", "browser_action_cache", "browser_check_injection"
|
|
31
31
|
],
|
|
32
|
-
"hooks": ["
|
|
32
|
+
"hooks": ["session_shutdown"]
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"runtime": ["playwright"]
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
* Translates the Claude Agent SDK's `BetaRawMessageStreamEvent` sequence
|
|
5
5
|
* into GSD's `AssistantMessageEvent` deltas for incremental TUI rendering.
|
|
6
6
|
*/
|
|
7
|
-
import { repairToolJson } from "@gsd/pi-ai";
|
|
8
7
|
// ---------------------------------------------------------------------------
|
|
9
8
|
// Content-block mapping helpers
|
|
10
9
|
// ---------------------------------------------------------------------------
|
|
@@ -211,19 +210,12 @@ export class PartialMessageBuilder {
|
|
|
211
210
|
block.arguments = JSON.parse(jsonStr);
|
|
212
211
|
}
|
|
213
212
|
catch {
|
|
214
|
-
//
|
|
215
|
-
//
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
// Repair also failed — stream was truncated or garbage.
|
|
221
|
-
// Preserve the raw string for diagnostics but signal the
|
|
222
|
-
// malformation explicitly so downstream consumers can
|
|
223
|
-
// distinguish this from a healthy tool completion (#2574).
|
|
224
|
-
block.arguments = { _raw: jsonStr };
|
|
225
|
-
return { type: "toolcall_end", contentIndex, toolCall: block, partial: this.partial, malformedArguments: true };
|
|
226
|
-
}
|
|
213
|
+
// Stream was truncated mid-tool-call — JSON is garbage.
|
|
214
|
+
// Preserve the raw string for diagnostics but signal the
|
|
215
|
+
// malformation explicitly so downstream consumers can
|
|
216
|
+
// distinguish this from a healthy tool completion (#2574).
|
|
217
|
+
block.arguments = { _raw: jsonStr };
|
|
218
|
+
return { type: "toolcall_end", contentIndex, toolCall: block, partial: this.partial, malformedArguments: true };
|
|
227
219
|
}
|
|
228
220
|
return { type: "toolcall_end", contentIndex, toolCall: block, partial: this.partial };
|
|
229
221
|
}
|