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
|
@@ -9,9 +9,6 @@ const cjsRequire = createRequire(import.meta.url);
|
|
|
9
9
|
* Minimal terminal interface for TUI
|
|
10
10
|
*/
|
|
11
11
|
export interface Terminal {
|
|
12
|
-
// Whether stdout is a real TTY (false for pipes, e.g. RPC bridge processes)
|
|
13
|
-
readonly isTTY: boolean;
|
|
14
|
-
|
|
15
12
|
// Start the terminal with input and resize handlers
|
|
16
13
|
start(onInput: (data: string) => void, onResize: () => void): void;
|
|
17
14
|
|
|
@@ -66,22 +63,11 @@ export class ProcessTerminal implements Terminal {
|
|
|
66
63
|
private stdinDataHandler?: (data: string) => void;
|
|
67
64
|
private writeLogPath = process.env.PI_TUI_WRITE_LOG || "";
|
|
68
65
|
|
|
69
|
-
get isTTY(): boolean {
|
|
70
|
-
return !!process.stdout.isTTY;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
66
|
get kittyProtocolActive(): boolean {
|
|
74
67
|
return this._kittyProtocolActive;
|
|
75
68
|
}
|
|
76
69
|
|
|
77
70
|
start(onInput: (data: string) => void, onResize: () => void): void {
|
|
78
|
-
// Non-TTY stdout (pipe) — skip TUI initialization entirely.
|
|
79
|
-
// RPC bridge processes communicate via JSON, not terminal escape codes.
|
|
80
|
-
// Without this guard, the render loop burns 500%+ CPU. (issue #3095)
|
|
81
|
-
if (!this.isTTY) {
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
71
|
this.inputHandler = onInput;
|
|
86
72
|
this.resizeHandler = onResize;
|
|
87
73
|
|
|
@@ -399,12 +399,6 @@ export class TUI extends Container {
|
|
|
399
399
|
|
|
400
400
|
start(): void {
|
|
401
401
|
this.stopped = false;
|
|
402
|
-
// Non-TTY stdout (pipe) — skip TUI entirely to avoid burning CPU.
|
|
403
|
-
// RPC bridge processes have piped stdio; rendering ANSI escape codes
|
|
404
|
-
// to a pipe is pure waste and causes a runaway render loop. (issue #3095)
|
|
405
|
-
if (!this.terminal.isTTY) {
|
|
406
|
-
return;
|
|
407
|
-
}
|
|
408
402
|
this.terminal.start(
|
|
409
403
|
(data) => this.handleInput(data),
|
|
410
404
|
() => this.requestRender(),
|
|
@@ -464,8 +458,6 @@ export class TUI extends Container {
|
|
|
464
458
|
}
|
|
465
459
|
|
|
466
460
|
requestRender(force = false): void {
|
|
467
|
-
// Skip rendering on non-TTY stdout to prevent CPU burn (issue #3095)
|
|
468
|
-
if (!this.terminal.isTTY) return;
|
|
469
461
|
if (force) {
|
|
470
462
|
this.previousLines = [];
|
|
471
463
|
this.previousWidth = -1; // -1 triggers widthChanged, forcing a full clear
|
|
@@ -37,48 +37,6 @@ function newestSrcMtime(dir) {
|
|
|
37
37
|
return newest
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
/**
|
|
41
|
-
* Detects workspace packages whose dist/ is missing or stale.
|
|
42
|
-
*
|
|
43
|
-
* Missing dist/index.js is always reported (the package won't work at all).
|
|
44
|
-
*
|
|
45
|
-
* Staleness (src/ newer than dist/) is ONLY checked when a .git directory
|
|
46
|
-
* exists at root — indicating a development clone. In npm tarball installs,
|
|
47
|
-
* file timestamps are unreliable (npm sets all files to a canonical date,
|
|
48
|
-
* but extraction ordering can cause src/ to appear 1-2 seconds newer than
|
|
49
|
-
* dist/). Attempting to rebuild in that scenario is dangerous: devDependencies
|
|
50
|
-
* (including TypeScript) are not installed, and any globally-installed tsc
|
|
51
|
-
* may produce broken output that overwrites the known-good dist/.
|
|
52
|
-
*
|
|
53
|
-
* @param {string} root Project root directory
|
|
54
|
-
* @param {string[]} packages Package directory names to check
|
|
55
|
-
* @returns {string[]} Package names that need rebuilding
|
|
56
|
-
*/
|
|
57
|
-
function detectStalePackages(root, packages) {
|
|
58
|
-
const packagesDir = join(root, 'packages')
|
|
59
|
-
const isDevClone = existsSync(join(root, '.git'))
|
|
60
|
-
|
|
61
|
-
const stale = []
|
|
62
|
-
for (const pkg of packages) {
|
|
63
|
-
const distIndex = join(packagesDir, pkg, 'dist', 'index.js')
|
|
64
|
-
if (!existsSync(distIndex)) {
|
|
65
|
-
stale.push(pkg)
|
|
66
|
-
continue
|
|
67
|
-
}
|
|
68
|
-
// Only check src vs dist timestamps in development clones.
|
|
69
|
-
// In npm tarball installs, timestamps are unreliable and rebuilding
|
|
70
|
-
// without devDependencies can corrupt the pre-built dist/ (#2877).
|
|
71
|
-
if (isDevClone) {
|
|
72
|
-
const distMtime = statSync(distIndex).mtimeMs
|
|
73
|
-
const srcMtime = newestSrcMtime(join(packagesDir, pkg, 'src'))
|
|
74
|
-
if (srcMtime > distMtime) {
|
|
75
|
-
stale.push(pkg)
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
return stale
|
|
80
|
-
}
|
|
81
|
-
|
|
82
40
|
if (require.main === module) {
|
|
83
41
|
const root = resolve(__dirname, '..')
|
|
84
42
|
const packagesDir = join(root, 'packages')
|
|
@@ -99,7 +57,19 @@ if (require.main === module) {
|
|
|
99
57
|
'pi-coding-agent',
|
|
100
58
|
]
|
|
101
59
|
|
|
102
|
-
const stale =
|
|
60
|
+
const stale = []
|
|
61
|
+
for (const pkg of WORKSPACE_PACKAGES) {
|
|
62
|
+
const distIndex = join(packagesDir, pkg, 'dist', 'index.js')
|
|
63
|
+
if (!existsSync(distIndex)) {
|
|
64
|
+
stale.push(pkg)
|
|
65
|
+
continue
|
|
66
|
+
}
|
|
67
|
+
const distMtime = statSync(distIndex).mtimeMs
|
|
68
|
+
const srcMtime = newestSrcMtime(join(packagesDir, pkg, 'src'))
|
|
69
|
+
if (srcMtime > distMtime) {
|
|
70
|
+
stale.push(pkg)
|
|
71
|
+
}
|
|
72
|
+
}
|
|
103
73
|
|
|
104
74
|
if (stale.length === 0) process.exit(0)
|
|
105
75
|
|
|
@@ -108,7 +78,6 @@ if (require.main === module) {
|
|
|
108
78
|
for (const pkg of stale) {
|
|
109
79
|
const pkgDir = join(packagesDir, pkg)
|
|
110
80
|
try {
|
|
111
|
-
// execSync is safe here: the command is a hardcoded string, not user input
|
|
112
81
|
execSync('npm run build', { cwd: pkgDir, stdio: 'pipe' })
|
|
113
82
|
process.stderr.write(` ✓ ${pkg}\n`)
|
|
114
83
|
} catch (err) {
|
|
@@ -118,4 +87,4 @@ if (require.main === module) {
|
|
|
118
87
|
}
|
|
119
88
|
}
|
|
120
89
|
|
|
121
|
-
module.exports = { newestSrcMtime
|
|
90
|
+
module.exports = { newestSrcMtime }
|
|
@@ -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.
|
|
@@ -162,27 +162,9 @@ export default function AskUserQuestions(pi: ExtensionAPI) {
|
|
|
162
162
|
if (selected === undefined) {
|
|
163
163
|
return errorResult("ask_user_questions was cancelled", params.questions);
|
|
164
164
|
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
// trapped in a re-asking loop (bug #2715).
|
|
169
|
-
let freeTextNote = "";
|
|
170
|
-
const selectedStr = Array.isArray(selected) ? selected[0] : selected;
|
|
171
|
-
if (!q.allowMultiple && selectedStr === OTHER_OPTION_LABEL) {
|
|
172
|
-
const note = await ctx.ui.input(
|
|
173
|
-
`${q.header}: Please explain in your own words`,
|
|
174
|
-
"Type your answer here…",
|
|
175
|
-
);
|
|
176
|
-
if (note) {
|
|
177
|
-
freeTextNote = note;
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
const answerList = Array.isArray(selected) ? selected : [selected];
|
|
182
|
-
if (freeTextNote) {
|
|
183
|
-
answerList.push(`user_note: ${freeTextNote}`);
|
|
184
|
-
}
|
|
185
|
-
answers[q.id] = { answers: answerList };
|
|
165
|
+
answers[q.id] = {
|
|
166
|
+
answers: Array.isArray(selected) ? selected : [selected],
|
|
167
|
+
};
|
|
186
168
|
}
|
|
187
169
|
const roundResult: RoundResult = {
|
|
188
170
|
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"]
|
|
@@ -16,7 +16,6 @@ import type {
|
|
|
16
16
|
Usage,
|
|
17
17
|
WebSearchResultContent,
|
|
18
18
|
} from "@gsd/pi-ai";
|
|
19
|
-
import { repairToolJson } from "@gsd/pi-ai";
|
|
20
19
|
import type { BetaContentBlock, BetaRawMessageStreamEvent, NonNullableUsage } from "./sdk-types.js";
|
|
21
20
|
|
|
22
21
|
// ---------------------------------------------------------------------------
|
|
@@ -245,18 +244,12 @@ export class PartialMessageBuilder {
|
|
|
245
244
|
try {
|
|
246
245
|
block.arguments = JSON.parse(jsonStr);
|
|
247
246
|
} catch {
|
|
248
|
-
//
|
|
249
|
-
//
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
// Preserve the raw string for diagnostics but signal the
|
|
255
|
-
// malformation explicitly so downstream consumers can
|
|
256
|
-
// distinguish this from a healthy tool completion (#2574).
|
|
257
|
-
block.arguments = { _raw: jsonStr };
|
|
258
|
-
return { type: "toolcall_end", contentIndex, toolCall: block, partial: this.partial, malformedArguments: true };
|
|
259
|
-
}
|
|
247
|
+
// Stream was truncated mid-tool-call — JSON is garbage.
|
|
248
|
+
// Preserve the raw string for diagnostics but signal the
|
|
249
|
+
// malformation explicitly so downstream consumers can
|
|
250
|
+
// distinguish this from a healthy tool completion (#2574).
|
|
251
|
+
block.arguments = { _raw: jsonStr };
|
|
252
|
+
return { type: "toolcall_end", contentIndex, toolCall: block, partial: this.partial, malformedArguments: true };
|
|
260
253
|
}
|
|
261
254
|
return { type: "toolcall_end", contentIndex, toolCall: block, partial: this.partial };
|
|
262
255
|
}
|
|
@@ -23,6 +23,9 @@ import type {
|
|
|
23
23
|
SDKMessage,
|
|
24
24
|
SDKPartialAssistantMessage,
|
|
25
25
|
SDKResultMessage,
|
|
26
|
+
SDKSystemMessage,
|
|
27
|
+
SDKStatusMessage,
|
|
28
|
+
SDKUserMessage,
|
|
26
29
|
} from "./sdk-types.js";
|
|
27
30
|
|
|
28
31
|
// ---------------------------------------------------------------------------
|
|
@@ -68,49 +71,30 @@ function getClaudePath(): string {
|
|
|
68
71
|
}
|
|
69
72
|
|
|
70
73
|
// ---------------------------------------------------------------------------
|
|
71
|
-
// Prompt
|
|
74
|
+
// Prompt extraction
|
|
72
75
|
// ---------------------------------------------------------------------------
|
|
73
76
|
|
|
74
77
|
/**
|
|
75
|
-
* Extract
|
|
78
|
+
* Extract the last user prompt text from GSD's context messages.
|
|
79
|
+
* The SDK manages its own conversation history — we only send
|
|
80
|
+
* the latest user message as the prompt.
|
|
76
81
|
*/
|
|
77
|
-
function
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
.
|
|
83
|
-
|
|
82
|
+
function extractLastUserPrompt(context: Context): string {
|
|
83
|
+
for (let i = context.messages.length - 1; i >= 0; i--) {
|
|
84
|
+
const msg = context.messages[i];
|
|
85
|
+
if (msg.role === "user") {
|
|
86
|
+
if (typeof msg.content === "string") return msg.content;
|
|
87
|
+
if (Array.isArray(msg.content)) {
|
|
88
|
+
const textParts = msg.content
|
|
89
|
+
.filter((part: any) => part.type === "text")
|
|
90
|
+
.map((part: any) => part.text);
|
|
91
|
+
if (textParts.length > 0) return textParts.join("\n");
|
|
92
|
+
}
|
|
93
|
+
}
|
|
84
94
|
}
|
|
85
95
|
return "";
|
|
86
96
|
}
|
|
87
97
|
|
|
88
|
-
/**
|
|
89
|
-
* Build a full conversational prompt from GSD's context messages.
|
|
90
|
-
*
|
|
91
|
-
* Previous behaviour sent only the last user message, making every SDK
|
|
92
|
-
* call effectively stateless. This version serialises the complete
|
|
93
|
-
* conversation history (system prompt + all user/assistant turns) so
|
|
94
|
-
* Claude Code has full context for multi-turn continuity.
|
|
95
|
-
*/
|
|
96
|
-
export function buildPromptFromContext(context: Context): string {
|
|
97
|
-
const parts: string[] = [];
|
|
98
|
-
|
|
99
|
-
if (context.systemPrompt) {
|
|
100
|
-
parts.push(`[System]\n${context.systemPrompt}`);
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
for (const msg of context.messages) {
|
|
104
|
-
const text = extractMessageText(msg);
|
|
105
|
-
if (!text) continue;
|
|
106
|
-
|
|
107
|
-
const label = msg.role === "user" ? "User" : msg.role === "assistant" ? "Assistant" : "System";
|
|
108
|
-
parts.push(`[${label}]\n${text}`);
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
return parts.join("\n\n");
|
|
112
|
-
}
|
|
113
|
-
|
|
114
98
|
// ---------------------------------------------------------------------------
|
|
115
99
|
// Error helper
|
|
116
100
|
// ---------------------------------------------------------------------------
|
|
@@ -143,31 +127,6 @@ export function makeStreamExhaustedErrorMessage(model: string, lastTextContent:
|
|
|
143
127
|
return message;
|
|
144
128
|
}
|
|
145
129
|
|
|
146
|
-
// ---------------------------------------------------------------------------
|
|
147
|
-
// SDK options builder
|
|
148
|
-
// ---------------------------------------------------------------------------
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* Build the options object passed to the Claude Agent SDK's `query()` call.
|
|
152
|
-
*
|
|
153
|
-
* Extracted for testability — callers can verify session persistence,
|
|
154
|
-
* beta flags, and other configuration without mocking the full SDK.
|
|
155
|
-
*/
|
|
156
|
-
export function buildSdkOptions(modelId: string, prompt: string): Record<string, unknown> {
|
|
157
|
-
return {
|
|
158
|
-
pathToClaudeCodeExecutable: getClaudePath(),
|
|
159
|
-
model: modelId,
|
|
160
|
-
includePartialMessages: true,
|
|
161
|
-
persistSession: true,
|
|
162
|
-
cwd: process.cwd(),
|
|
163
|
-
permissionMode: "bypassPermissions",
|
|
164
|
-
allowDangerouslySkipPermissions: true,
|
|
165
|
-
settingSources: ["project"],
|
|
166
|
-
systemPrompt: { type: "preset", preset: "claude_code" },
|
|
167
|
-
betas: modelId.includes("sonnet") ? ["context-1m-2025-08-07"] : [],
|
|
168
|
-
};
|
|
169
|
-
}
|
|
170
|
-
|
|
171
130
|
// ---------------------------------------------------------------------------
|
|
172
131
|
// streamSimple implementation
|
|
173
132
|
// ---------------------------------------------------------------------------
|
|
@@ -221,14 +180,22 @@ async function pumpSdkMessages(
|
|
|
221
180
|
options.signal.addEventListener("abort", () => controller.abort(), { once: true });
|
|
222
181
|
}
|
|
223
182
|
|
|
224
|
-
const prompt =
|
|
225
|
-
const sdkOpts = buildSdkOptions(modelId, prompt);
|
|
183
|
+
const prompt = extractLastUserPrompt(context);
|
|
226
184
|
|
|
227
185
|
const queryResult = sdk.query({
|
|
228
186
|
prompt,
|
|
229
187
|
options: {
|
|
230
|
-
|
|
188
|
+
pathToClaudeCodeExecutable: getClaudePath(),
|
|
189
|
+
model: modelId,
|
|
190
|
+
includePartialMessages: true,
|
|
191
|
+
persistSession: false,
|
|
231
192
|
abortController: controller,
|
|
193
|
+
cwd: process.cwd(),
|
|
194
|
+
permissionMode: "bypassPermissions",
|
|
195
|
+
allowDangerouslySkipPermissions: true,
|
|
196
|
+
settingSources: ["project"],
|
|
197
|
+
systemPrompt: { type: "preset", preset: "claude_code" },
|
|
198
|
+
betas: modelId.includes("sonnet") ? ["context-1m-2025-08-07"] : [],
|
|
232
199
|
},
|
|
233
200
|
});
|
|
234
201
|
|
|
@@ -258,6 +225,7 @@ async function pumpSdkMessages(
|
|
|
258
225
|
// -- Streaming partial messages --
|
|
259
226
|
case "stream_event": {
|
|
260
227
|
const partial = msg as SDKPartialAssistantMessage;
|
|
228
|
+
if (partial.parent_tool_use_id !== null) break; // skip subagent
|
|
261
229
|
|
|
262
230
|
const event = partial.event;
|
|
263
231
|
|
|
@@ -288,6 +256,7 @@ async function pumpSdkMessages(
|
|
|
288
256
|
// -- Complete assistant message (non-streaming fallback) --
|
|
289
257
|
case "assistant": {
|
|
290
258
|
const sdkAssistant = msg as SDKAssistantMessage;
|
|
259
|
+
if (sdkAssistant.parent_tool_use_id !== null) break;
|
|
291
260
|
|
|
292
261
|
// Capture text content from complete messages
|
|
293
262
|
for (const block of sdkAssistant.message.content) {
|
|
@@ -302,6 +271,9 @@ async function pumpSdkMessages(
|
|
|
302
271
|
|
|
303
272
|
// -- User message (synthetic tool result — signals turn boundary) --
|
|
304
273
|
case "user": {
|
|
274
|
+
const userMsg = msg as SDKUserMessage;
|
|
275
|
+
if (userMsg.parent_tool_use_id !== null) break;
|
|
276
|
+
|
|
305
277
|
// Capture content from the completed turn before resetting
|
|
306
278
|
if (builder) {
|
|
307
279
|
for (const block of builder.message.content) {
|
|
@@ -102,32 +102,4 @@ describe("PartialMessageBuilder — malformed tool arguments (#2574)", () => {
|
|
|
102
102
|
"non-JSON content should set malformedArguments: true",
|
|
103
103
|
);
|
|
104
104
|
});
|
|
105
|
-
|
|
106
|
-
test("YAML bullet lists repaired to JSON arrays (#2660)", () => {
|
|
107
|
-
const builder = new PartialMessageBuilder("claude-sonnet-4-20250514");
|
|
108
|
-
const malformedJson =
|
|
109
|
-
'{"milestoneId": "M005", "keyDecisions": - Used Web Notification API, "keyFiles": - src/lib.rs, "title": "done"}';
|
|
110
|
-
const event = feedToolCall(builder, [malformedJson]);
|
|
111
|
-
|
|
112
|
-
assert.ok(event, "event should not be null");
|
|
113
|
-
assert.equal(event!.type, "toolcall_end");
|
|
114
|
-
// Repaired YAML bullets should NOT set malformedArguments
|
|
115
|
-
assert.equal(
|
|
116
|
-
(event as any).malformedArguments,
|
|
117
|
-
undefined,
|
|
118
|
-
"repaired YAML bullets should not set malformedArguments",
|
|
119
|
-
);
|
|
120
|
-
if (event!.type === "toolcall_end") {
|
|
121
|
-
assert.equal(event!.toolCall.arguments.milestoneId, "M005");
|
|
122
|
-
assert.ok(
|
|
123
|
-
Array.isArray(event!.toolCall.arguments.keyDecisions),
|
|
124
|
-
"keyDecisions should be repaired to an array",
|
|
125
|
-
);
|
|
126
|
-
assert.ok(
|
|
127
|
-
Array.isArray(event!.toolCall.arguments.keyFiles),
|
|
128
|
-
"keyFiles should be repaired to an array",
|
|
129
|
-
);
|
|
130
|
-
assert.equal(event!.toolCall.arguments.title, "done");
|
|
131
|
-
}
|
|
132
|
-
});
|
|
133
105
|
});
|
|
@@ -1,15 +1,6 @@
|
|
|
1
1
|
import { describe, test } from "node:test";
|
|
2
2
|
import assert from "node:assert/strict";
|
|
3
|
-
import {
|
|
4
|
-
makeStreamExhaustedErrorMessage,
|
|
5
|
-
buildPromptFromContext,
|
|
6
|
-
buildSdkOptions,
|
|
7
|
-
} from "../stream-adapter.ts";
|
|
8
|
-
import type { Context, Message } from "@gsd/pi-ai";
|
|
9
|
-
|
|
10
|
-
// ---------------------------------------------------------------------------
|
|
11
|
-
// Existing tests — exhausted stream fallback (#2575)
|
|
12
|
-
// ---------------------------------------------------------------------------
|
|
3
|
+
import { makeStreamExhaustedErrorMessage } from "../stream-adapter.ts";
|
|
13
4
|
|
|
14
5
|
describe("stream-adapter — exhausted stream fallback (#2575)", () => {
|
|
15
6
|
test("generator exhaustion becomes an error message instead of clean completion", () => {
|
|
@@ -28,101 +19,3 @@ describe("stream-adapter — exhausted stream fallback (#2575)", () => {
|
|
|
28
19
|
assert.match(String((message.content[0] as any)?.text ?? ""), /Claude Code error: stream_exhausted_without_result/);
|
|
29
20
|
});
|
|
30
21
|
});
|
|
31
|
-
|
|
32
|
-
// ---------------------------------------------------------------------------
|
|
33
|
-
// Bug #2859 — stateless provider regression tests
|
|
34
|
-
// ---------------------------------------------------------------------------
|
|
35
|
-
|
|
36
|
-
describe("stream-adapter — full context prompt (#2859)", () => {
|
|
37
|
-
test("buildPromptFromContext includes all user and assistant messages, not just the last user message", () => {
|
|
38
|
-
const context: Context = {
|
|
39
|
-
systemPrompt: "You are a helpful assistant.",
|
|
40
|
-
messages: [
|
|
41
|
-
{ role: "user", content: "What is 2+2?" } as Message,
|
|
42
|
-
{
|
|
43
|
-
role: "assistant",
|
|
44
|
-
content: [{ type: "text", text: "4" }],
|
|
45
|
-
api: "anthropic-messages",
|
|
46
|
-
provider: "claude-code",
|
|
47
|
-
model: "claude-sonnet-4-20250514",
|
|
48
|
-
usage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, totalTokens: 0, cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 } },
|
|
49
|
-
stopReason: "stop",
|
|
50
|
-
timestamp: Date.now(),
|
|
51
|
-
} as Message,
|
|
52
|
-
{ role: "user", content: "Now multiply that by 3" } as Message,
|
|
53
|
-
],
|
|
54
|
-
};
|
|
55
|
-
|
|
56
|
-
const prompt = buildPromptFromContext(context);
|
|
57
|
-
|
|
58
|
-
// Must contain content from BOTH user messages, not just the last
|
|
59
|
-
assert.ok(prompt.includes("2+2"), "prompt must include first user message");
|
|
60
|
-
assert.ok(prompt.includes("multiply"), "prompt must include second user message");
|
|
61
|
-
// Must contain assistant response for continuity
|
|
62
|
-
assert.ok(prompt.includes("4"), "prompt must include assistant reply for context");
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
test("buildPromptFromContext includes system prompt when present", () => {
|
|
66
|
-
const context: Context = {
|
|
67
|
-
systemPrompt: "You are a coding assistant.",
|
|
68
|
-
messages: [
|
|
69
|
-
{ role: "user", content: "Write a function" } as Message,
|
|
70
|
-
],
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
const prompt = buildPromptFromContext(context);
|
|
74
|
-
assert.ok(prompt.includes("coding assistant"), "prompt must include system prompt");
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
test("buildPromptFromContext handles array content parts in user messages", () => {
|
|
78
|
-
const context: Context = {
|
|
79
|
-
messages: [
|
|
80
|
-
{
|
|
81
|
-
role: "user",
|
|
82
|
-
content: [
|
|
83
|
-
{ type: "text", text: "First part" },
|
|
84
|
-
{ type: "text", text: "Second part" },
|
|
85
|
-
],
|
|
86
|
-
} as Message,
|
|
87
|
-
{ role: "user", content: "Follow-up" } as Message,
|
|
88
|
-
],
|
|
89
|
-
};
|
|
90
|
-
|
|
91
|
-
const prompt = buildPromptFromContext(context);
|
|
92
|
-
assert.ok(prompt.includes("First part"), "prompt must include array content parts");
|
|
93
|
-
assert.ok(prompt.includes("Second part"), "prompt must include all text parts");
|
|
94
|
-
assert.ok(prompt.includes("Follow-up"), "prompt must include follow-up message");
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
test("buildPromptFromContext returns empty string for empty messages", () => {
|
|
98
|
-
const context: Context = { messages: [] };
|
|
99
|
-
const prompt = buildPromptFromContext(context);
|
|
100
|
-
assert.equal(prompt, "");
|
|
101
|
-
});
|
|
102
|
-
});
|
|
103
|
-
|
|
104
|
-
describe("stream-adapter — session persistence (#2859)", () => {
|
|
105
|
-
test("buildSdkOptions enables persistSession by default", () => {
|
|
106
|
-
const options = buildSdkOptions("claude-sonnet-4-20250514", "test prompt");
|
|
107
|
-
assert.equal(options.persistSession, true, "persistSession must default to true");
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
test("buildSdkOptions sets model and prompt correctly", () => {
|
|
111
|
-
const options = buildSdkOptions("claude-sonnet-4-20250514", "hello world");
|
|
112
|
-
assert.equal(options.model, "claude-sonnet-4-20250514");
|
|
113
|
-
});
|
|
114
|
-
|
|
115
|
-
test("buildSdkOptions enables betas for sonnet models", () => {
|
|
116
|
-
const sonnetOpts = buildSdkOptions("claude-sonnet-4-20250514", "test");
|
|
117
|
-
assert.ok(
|
|
118
|
-
Array.isArray(sonnetOpts.betas) && sonnetOpts.betas.length > 0,
|
|
119
|
-
"sonnet models should have betas enabled",
|
|
120
|
-
);
|
|
121
|
-
|
|
122
|
-
const opusOpts = buildSdkOptions("claude-opus-4-20250514", "test");
|
|
123
|
-
assert.ok(
|
|
124
|
-
Array.isArray(opusOpts.betas) && opusOpts.betas.length === 0,
|
|
125
|
-
"non-sonnet models should have empty betas",
|
|
126
|
-
);
|
|
127
|
-
});
|
|
128
|
-
});
|
|
@@ -54,9 +54,6 @@ function hydrateProcessEnv(key: string, value: string): void {
|
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
async function writeEnvKey(filePath: string, key: string, value: string): Promise<void> {
|
|
57
|
-
if (typeof value !== "string") {
|
|
58
|
-
throw new TypeError(`writeEnvKey expects a string value for key "${key}", got ${typeof value}`);
|
|
59
|
-
}
|
|
60
57
|
let content = "";
|
|
61
58
|
try {
|
|
62
59
|
content = await readFile(filePath, "utf8");
|
|
@@ -422,7 +419,7 @@ export async function collectSecretsFromManifest(
|
|
|
422
419
|
for (const { key, value } of collected) {
|
|
423
420
|
const entry = manifest.entries.find((e) => e.key === key);
|
|
424
421
|
if (entry) {
|
|
425
|
-
entry.status = value
|
|
422
|
+
entry.status = value !== null ? "collected" : "skipped";
|
|
426
423
|
}
|
|
427
424
|
}
|
|
428
425
|
|
|
@@ -430,14 +427,14 @@ export async function collectSecretsFromManifest(
|
|
|
430
427
|
await writeFile(manifestPath, formatSecretsManifest(manifest), "utf8");
|
|
431
428
|
|
|
432
429
|
// (j) Apply collected values to destination
|
|
433
|
-
const provided = collected.filter((c) => c.value
|
|
430
|
+
const provided = collected.filter((c) => c.value !== null) as Array<{ key: string; value: string }>;
|
|
434
431
|
const { applied } = await applySecrets(provided, destination, {
|
|
435
432
|
envFilePath: resolve(ctx.cwd, ".env"),
|
|
436
433
|
});
|
|
437
434
|
|
|
438
435
|
const skipped = [
|
|
439
436
|
...alreadySkipped,
|
|
440
|
-
...collected.filter((c) => c.value
|
|
437
|
+
...collected.filter((c) => c.value === null).map((c) => c.key),
|
|
441
438
|
];
|
|
442
439
|
|
|
443
440
|
return { applied, skipped, existingSkipped };
|
|
@@ -508,8 +505,8 @@ export default function secureEnv(pi: ExtensionAPI) {
|
|
|
508
505
|
collected.push({ key: item.key, value });
|
|
509
506
|
}
|
|
510
507
|
|
|
511
|
-
const provided = collected.filter((c) => c.value
|
|
512
|
-
const skipped = collected.filter((c) => c.value
|
|
508
|
+
const provided = collected.filter((c) => c.value !== null) as Array<{ key: string; value: string }>;
|
|
509
|
+
const skipped = collected.filter((c) => c.value === null).map((c) => c.key);
|
|
513
510
|
|
|
514
511
|
// Apply to destination via shared helper
|
|
515
512
|
const { applied, errors } = await applySecrets(provided, destination, {
|
|
@@ -79,7 +79,7 @@ async function searchWithOAuth(
|
|
|
79
79
|
signal?: AbortSignal,
|
|
80
80
|
): Promise<SearchResult> {
|
|
81
81
|
const model = process.env.GEMINI_SEARCH_MODEL || "gemini-2.5-flash";
|
|
82
|
-
const url = `https://cloudcode-pa.googleapis.com/v1internal:streamGenerateContent
|
|
82
|
+
const url = `https://cloudcode-pa.googleapis.com/v1internal:streamGenerateContent`;
|
|
83
83
|
|
|
84
84
|
const GEMINI_CLI_HEADERS = {
|
|
85
85
|
ideType: "IDE_UNSPECIFIED",
|
|
@@ -104,7 +104,6 @@ async function searchWithOAuth(
|
|
|
104
104
|
contents: [{ parts: [{ text: query }] }],
|
|
105
105
|
tools: [{ googleSearch: {} }],
|
|
106
106
|
},
|
|
107
|
-
userAgent: "pi-coding-agent",
|
|
108
107
|
}),
|
|
109
108
|
signal,
|
|
110
109
|
});
|