gsd-pi 2.76.0-dev.fe143342a → 2.77.0-dev.1594b263e
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 +18 -36
- package/dist/claude-cli-check.js +36 -3
- package/dist/cli-web-branch.d.ts +1 -0
- package/dist/cli-web-branch.js +3 -0
- package/dist/cli.js +38 -2
- package/dist/extension-discovery.d.ts +6 -0
- package/dist/extension-discovery.js +37 -0
- package/dist/extension-registry.d.ts +3 -0
- package/dist/extension-sort.d.ts +18 -0
- package/dist/extension-sort.js +114 -0
- package/dist/extension-validator.d.ts +47 -0
- package/dist/extension-validator.js +127 -0
- package/dist/headless.js +49 -4
- package/dist/loader.js +35 -7
- package/dist/onboarding.js +45 -0
- package/dist/provider-migrations.d.ts +18 -0
- package/dist/provider-migrations.js +14 -0
- package/dist/resource-loader.d.ts +40 -0
- package/dist/resource-loader.js +32 -13
- package/dist/resources/extensions/browser-tools/capture.js +9 -0
- package/dist/resources/extensions/browser-tools/tests/browser-tools-integration.test.mjs +8 -59
- package/dist/resources/extensions/browser-tools/tests/browser-tools-unit.test.cjs +36 -24
- package/dist/resources/extensions/browser-tools/tests/capture-sharp-optional.test.cjs +69 -71
- package/dist/resources/extensions/browser-tools/tools/forms.js +5 -1
- package/dist/resources/extensions/browser-tools/tools/intent.js +5 -1
- package/dist/resources/extensions/claude-code-cli/readiness.js +9 -4
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +559 -76
- package/dist/resources/extensions/cmux/index.js +20 -0
- package/dist/resources/extensions/github-sync/templates.js +103 -0
- package/dist/resources/extensions/google-search/extension-manifest.json +5 -4
- package/dist/resources/extensions/google-search/index.js +3 -375
- package/dist/resources/extensions/gsd/abandon-detect.js +44 -0
- package/dist/resources/extensions/gsd/auto/loop.js +133 -2
- package/dist/resources/extensions/gsd/auto/phases.js +110 -42
- package/dist/resources/extensions/gsd/auto/resolve.js +24 -0
- package/dist/resources/extensions/gsd/auto/run-unit.js +48 -4
- package/dist/resources/extensions/gsd/auto/session.js +24 -3
- package/dist/resources/extensions/gsd/auto/turn-epoch.js +95 -0
- package/dist/resources/extensions/gsd/auto-dispatch.js +216 -40
- package/dist/resources/extensions/gsd/auto-loop.js +1 -1
- package/dist/resources/extensions/gsd/auto-model-selection.js +125 -5
- package/dist/resources/extensions/gsd/auto-post-unit.js +240 -66
- package/dist/resources/extensions/gsd/auto-prompts.js +386 -104
- package/dist/resources/extensions/gsd/auto-recovery.js +124 -4
- package/dist/resources/extensions/gsd/auto-start.js +141 -66
- package/dist/resources/extensions/gsd/auto-timeout-recovery.js +11 -5
- package/dist/resources/extensions/gsd/auto-tool-tracking.js +47 -7
- package/dist/resources/extensions/gsd/auto-unit-closeout.js +11 -2
- package/dist/resources/extensions/gsd/auto-worktree.js +230 -86
- package/dist/resources/extensions/gsd/auto.js +159 -48
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +36 -2
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +209 -0
- package/dist/resources/extensions/gsd/bootstrap/provider-error-resume.js +5 -6
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +11 -0
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +24 -9
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +11 -6
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +161 -11
- package/dist/resources/extensions/gsd/clean-root-preflight.js +93 -0
- package/dist/resources/extensions/gsd/commands/handlers/workflow.js +31 -4
- package/dist/resources/extensions/gsd/commands-cmux.js +9 -6
- package/dist/resources/extensions/gsd/commands-extensions.js +634 -43
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +968 -23
- package/dist/resources/extensions/gsd/component-loader.js +447 -0
- package/dist/resources/extensions/gsd/component-types.js +69 -0
- package/dist/resources/extensions/gsd/context-store.js +23 -7
- package/dist/resources/extensions/gsd/detection.js +49 -1
- package/dist/resources/extensions/gsd/dispatch-guard.js +29 -3
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +1 -1
- package/dist/resources/extensions/gsd/file-lock.js +49 -9
- package/dist/resources/extensions/gsd/forensics.js +106 -0
- package/dist/resources/extensions/gsd/gate-registry.js +2 -2
- package/dist/resources/extensions/gsd/git-constants.js +28 -1
- package/dist/resources/extensions/gsd/git-self-heal.js +27 -0
- package/dist/resources/extensions/gsd/git-service.js +127 -2
- package/dist/resources/extensions/gsd/gitignore.js +2 -0
- package/dist/resources/extensions/gsd/gsd-db.js +95 -32
- package/dist/resources/extensions/gsd/guided-flow-queue.js +4 -1
- package/dist/resources/extensions/gsd/guided-flow.js +214 -13
- package/dist/resources/extensions/gsd/health-widget.js +4 -1
- package/dist/resources/extensions/gsd/journal.js +17 -2
- package/dist/resources/extensions/gsd/key-manager.js +22 -0
- package/dist/resources/extensions/gsd/memory-extractor.js +7 -1
- package/dist/resources/extensions/gsd/milestone-actions.js +15 -0
- package/dist/resources/extensions/gsd/milestone-scope-classifier.js +299 -0
- package/dist/resources/extensions/gsd/milestone-summary-classifier.js +37 -0
- package/dist/resources/extensions/gsd/model-cost-table.js +3 -0
- package/dist/resources/extensions/gsd/model-router.js +42 -3
- package/dist/resources/extensions/gsd/native-git-bridge.js +34 -4
- package/dist/resources/extensions/gsd/notifications.js +30 -16
- package/dist/resources/extensions/gsd/pre-execution-checks.js +31 -6
- package/dist/resources/extensions/gsd/preferences-validation.js +23 -0
- package/dist/resources/extensions/gsd/prompt-cache-optimizer.js +4 -0
- package/dist/resources/extensions/gsd/prompts/complete-milestone.md +5 -1
- package/dist/resources/extensions/gsd/prompts/discuss-headless.md +29 -2
- package/dist/resources/extensions/gsd/prompts/discuss.md +29 -2
- package/dist/resources/extensions/gsd/prompts/doctor-heal.md +5 -4
- package/dist/resources/extensions/gsd/prompts/parallel-research-slices.md +5 -2
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +15 -2
- package/dist/resources/extensions/gsd/prompts/system.md +1 -0
- package/dist/resources/extensions/gsd/reports.js +5 -4
- package/dist/resources/extensions/gsd/safety/evidence-collector.js +96 -0
- package/dist/resources/extensions/gsd/safety/file-change-validator.js +12 -4
- package/dist/resources/extensions/gsd/safety/git-checkpoint.js +11 -0
- package/dist/resources/extensions/gsd/safety/safety-harness.js +5 -1
- package/dist/resources/extensions/gsd/service-tier.js +5 -2
- package/dist/resources/extensions/gsd/session-lock.js +19 -10
- package/dist/resources/extensions/gsd/skill-manifest.js +168 -0
- package/dist/resources/extensions/gsd/slice-cadence.js +238 -0
- package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +278 -8
- package/dist/resources/extensions/gsd/state-transition-matrix.js +118 -0
- package/dist/resources/extensions/gsd/state.js +69 -58
- package/dist/resources/extensions/gsd/sync-lock.js +98 -42
- package/dist/resources/extensions/gsd/token-counter.js +22 -5
- package/dist/resources/extensions/gsd/tools/complete-milestone.js +16 -10
- package/dist/resources/extensions/gsd/tools/complete-slice.js +21 -0
- package/dist/resources/extensions/gsd/tools/complete-task.js +31 -0
- package/dist/resources/extensions/gsd/tools/validate-milestone.js +7 -2
- package/dist/resources/extensions/gsd/unit-context-composer.js +147 -0
- package/dist/resources/extensions/gsd/unit-context-manifest.js +370 -0
- package/dist/resources/extensions/gsd/uok/audit.js +18 -2
- package/dist/resources/extensions/gsd/uok/dispatch-envelope.js +33 -0
- package/dist/resources/extensions/gsd/uok/execution-graph.js +10 -0
- package/dist/resources/extensions/gsd/uok/gate-runner.js +53 -5
- package/dist/resources/extensions/gsd/uok/gitops.js +2 -1
- package/dist/resources/extensions/gsd/uok/loop-adapter.js +37 -10
- package/dist/resources/extensions/gsd/uok/parity-report.js +58 -0
- package/dist/resources/extensions/gsd/uok/plan-v2.js +30 -7
- package/dist/resources/extensions/gsd/uok/writer.js +82 -0
- package/dist/resources/extensions/gsd/workflow-logger.js +10 -2
- package/dist/resources/extensions/gsd/workflow-mcp.js +6 -0
- package/dist/resources/extensions/gsd/worktree-manager.js +86 -8
- package/dist/resources/extensions/gsd/worktree-resolver.js +136 -17
- package/dist/resources/extensions/gsd/worktree-telemetry.js +198 -0
- package/dist/resources/extensions/mcp-client/auth.js +10 -1
- package/dist/resources/extensions/mcp-client/index.js +121 -10
- package/dist/resources/extensions/ollama/index.js +5 -1
- package/dist/resources/extensions/remote-questions/manager.js +11 -5
- package/dist/resources/extensions/shared/cmux-events.js +12 -0
- package/dist/resources/extensions/shared/rtk-session-stats.js +1 -2
- package/dist/resources/skills/create-skill/SKILL.md +2 -2
- package/dist/resources/skills/create-skill/references/gsd-skill-ecosystem.md +4 -4
- package/dist/resources/skills/create-skill/workflows/audit-skill.md +4 -4
- package/dist/resources/skills/create-skill/workflows/create-new-skill.md +5 -5
- package/dist/resources/skills/verify-before-complete/SKILL.md +2 -1
- package/dist/resources/skills/write-docs/SKILL.md +2 -1
- package/dist/tsconfig.extensions.tsbuildinfo +1 -1
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +10 -10
- 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/server/app/_global-error.html +1 -1
- 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.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- 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 +1 -1
- 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 +1 -1
- package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +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.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +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.js.nft.json +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.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/notifications/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +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.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/events/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +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.js.nft.json +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.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +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.js.nft.json +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.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +1 -1
- 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 +1 -1
- 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 +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +10 -10
- package/dist/web/standalone/.next/server/chunks/1926.js +1 -0
- package/dist/web/standalone/.next/server/chunks/6897.js +2 -2
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware-manifest.json +5 -5
- 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 +1 -1
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/web/standalone/.next/static/chunks/2826.e9f5195e91f9cad2.js +11 -0
- package/dist/web/standalone/.next/static/chunks/{webpack-5fc74f13a25fa1bb.js → webpack-2e68521d7c82f7c2.js} +1 -1
- package/dist/welcome-screen.js +6 -1
- package/dist/wizard.js +2 -0
- package/package.json +17 -16
- package/packages/daemon/package.json +2 -2
- package/packages/daemon/src/logger.ts +4 -3
- package/packages/mcp-server/README.md +3 -3
- package/packages/mcp-server/dist/env-writer.d.ts +1 -0
- package/packages/mcp-server/dist/env-writer.d.ts.map +1 -1
- package/packages/mcp-server/dist/env-writer.js +74 -6
- package/packages/mcp-server/dist/env-writer.js.map +1 -1
- package/packages/mcp-server/dist/remote-questions.d.ts +45 -0
- package/packages/mcp-server/dist/remote-questions.d.ts.map +1 -0
- package/packages/mcp-server/dist/remote-questions.js +732 -0
- package/packages/mcp-server/dist/remote-questions.js.map +1 -0
- package/packages/mcp-server/dist/server.d.ts +31 -0
- package/packages/mcp-server/dist/server.d.ts.map +1 -1
- package/packages/mcp-server/dist/server.js +179 -93
- package/packages/mcp-server/dist/server.js.map +1 -1
- package/packages/mcp-server/dist/session-manager.d.ts +14 -0
- package/packages/mcp-server/dist/session-manager.d.ts.map +1 -1
- package/packages/mcp-server/dist/session-manager.js +49 -1
- package/packages/mcp-server/dist/session-manager.js.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +15 -6
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/package.json +9 -3
- package/packages/mcp-server/src/env-writer.test.ts +79 -1
- package/packages/mcp-server/src/env-writer.ts +76 -6
- package/packages/mcp-server/src/mcp-server.test.ts +89 -0
- package/packages/mcp-server/src/readers/graph.test.ts +87 -15
- package/packages/mcp-server/src/readers/readers.test.ts +5 -1
- package/packages/mcp-server/src/remote-questions.test.ts +294 -0
- package/packages/mcp-server/src/remote-questions.ts +916 -0
- package/packages/mcp-server/src/secure-env-collect.test.ts +232 -237
- package/packages/mcp-server/src/server.ts +236 -108
- package/packages/mcp-server/src/session-manager.ts +43 -1
- package/packages/mcp-server/src/workflow-tools.test.ts +85 -0
- package/packages/mcp-server/src/workflow-tools.ts +19 -6
- package/packages/mcp-server/tsconfig.test.json +19 -0
- package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
- package/packages/native/package.json +7 -2
- package/packages/native/src/__tests__/_test-coverage-guard.test.mjs +98 -0
- package/packages/native/src/__tests__/clipboard.test.mjs +69 -23
- package/packages/native/src/__tests__/module-compat.test.mjs +59 -27
- package/packages/native/src/__tests__/ps.test.mjs +14 -8
- package/packages/native/src/__tests__/stream-process.test.mjs +23 -2
- package/packages/native/src/__tests__/truncate.test.mjs +17 -2
- package/packages/native/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-agent-core/package.json +6 -1
- package/packages/pi-agent-core/src/agent-loop.test.ts +226 -31
- package/packages/pi-agent-core/src/agent.test.ts +96 -102
- package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-ai/dist/models/capability-patches.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/capability-patches.js +9 -2
- package/packages/pi-ai/dist/models/capability-patches.js.map +1 -1
- package/packages/pi-ai/dist/models/custom.d.ts +38 -0
- package/packages/pi-ai/dist/models/custom.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/custom.js +41 -0
- package/packages/pi-ai/dist/models/custom.js.map +1 -1
- package/packages/pi-ai/dist/models/generated/index.d.ts +34 -0
- package/packages/pi-ai/dist/models/generated/index.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/generated/openai-codex.d.ts +17 -0
- package/packages/pi-ai/dist/models/generated/openai-codex.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/generated/openai-codex.js +17 -0
- package/packages/pi-ai/dist/models/generated/openai-codex.js.map +1 -1
- package/packages/pi-ai/dist/models/generated/openai.d.ts +17 -0
- package/packages/pi-ai/dist/models/generated/openai.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/generated/openai.js +17 -0
- package/packages/pi-ai/dist/models/generated/openai.js.map +1 -1
- package/packages/pi-ai/dist/models.generated.test.js +43 -70
- package/packages/pi-ai/dist/models.generated.test.js.map +1 -1
- package/packages/pi-ai/dist/models.test.js +36 -11
- package/packages/pi-ai/dist/models.test.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-auth.test.js +1 -1
- package/packages/pi-ai/dist/providers/anthropic-auth.test.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 +27 -4
- package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.js +8 -3
- package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
- package/packages/pi-ai/dist/providers/minimax-tool-name.test.d.ts +2 -0
- package/packages/pi-ai/dist/providers/minimax-tool-name.test.d.ts.map +1 -0
- package/packages/pi-ai/dist/providers/minimax-tool-name.test.js +80 -0
- package/packages/pi-ai/dist/providers/minimax-tool-name.test.js.map +1 -0
- package/packages/pi-ai/dist/providers/simple-options.d.ts +10 -0
- package/packages/pi-ai/dist/providers/simple-options.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/simple-options.js +16 -1
- package/packages/pi-ai/dist/providers/simple-options.js.map +1 -1
- package/packages/pi-ai/package.json +6 -1
- package/packages/pi-ai/scripts/generate-models.ts +44 -0
- package/packages/pi-ai/src/models/capability-patches.ts +10 -2
- package/packages/pi-ai/src/models/custom.ts +42 -0
- package/packages/pi-ai/src/models/generated/openai-codex.ts +17 -0
- package/packages/pi-ai/src/models/generated/openai.ts +17 -0
- package/packages/pi-ai/src/models.generated.test.ts +46 -73
- package/packages/pi-ai/src/models.test.ts +48 -11
- package/packages/pi-ai/src/providers/anthropic-auth.test.ts +1 -1
- package/packages/pi-ai/src/providers/anthropic-shared.ts +26 -5
- package/packages/pi-ai/src/providers/anthropic.ts +9 -3
- package/packages/pi-ai/src/providers/minimax-tool-name.test.ts +98 -0
- package/packages/pi-ai/src/providers/simple-options.ts +17 -1
- package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js +96 -31
- package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session-model-switch.test.js +75 -12
- package/packages/pi-coding-agent/dist/core/agent-session-model-switch.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session-tool-refresh.test.js +99 -31
- package/packages/pi-coding-agent/dist/core/agent-session-tool-refresh.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js +7 -0
- package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts +25 -0
- package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.js +105 -6
- package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js +230 -28
- package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/utils.d.ts +30 -2
- package/packages/pi-coding-agent/dist/core/compaction/utils.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/utils.js +113 -12
- package/packages/pi-coding-agent/dist/core/compaction/utils.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.d.ts +1 -0
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js +29 -18
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.js +130 -0
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/compaction-utils.test.js +56 -1
- package/packages/pi-coding-agent/dist/core/compaction-utils.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/discovery-cache.test.js +8 -15
- package/packages/pi-coding-agent/dist/core/discovery-cache.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.d.ts +25 -0
- package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.js +109 -0
- package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/extensions/extension-registry.d.ts +67 -0
- package/packages/pi-coding-agent/dist/core/extensions/extension-registry.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/extensions/extension-registry.js +167 -0
- package/packages/pi-coding-agent/dist/core/extensions/extension-registry.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts +8 -2
- package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.js +85 -8
- package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +14 -0
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/lsp-integration.test.js +41 -4
- package/packages/pi-coding-agent/dist/core/lsp/lsp-integration.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js +19 -2
- package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry-custom-caps.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/model-registry-custom-caps.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/model-registry-custom-caps.test.js +203 -0
- package/packages/pi-coding-agent/dist/core/model-registry-custom-caps.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry.js +14 -0
- package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/resource-loader-cache-reset.test.js +76 -18
- package/packages/pi-coding-agent/dist/core/resource-loader-cache-reset.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/resource-loader.js +1 -1
- package/packages/pi-coding-agent/dist/core/resource-loader.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.js +2 -6
- package/packages/pi-coding-agent/dist/core/retry-handler.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.test.js +5 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/retryable-error-regex.d.ts +18 -0
- package/packages/pi-coding-agent/dist/core/retryable-error-regex.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/retryable-error-regex.js +18 -0
- package/packages/pi-coding-agent/dist/core/retryable-error-regex.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/sdk.d.ts +1 -0
- package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.js +4 -1
- package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.test.js +19 -1
- package/packages/pi-coding-agent/dist/core/sdk.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager.js +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager.test.js +21 -1
- package/packages/pi-coding-agent/dist/core/session-manager.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.d.ts +20 -0
- package/packages/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.js +19 -5
- package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/path-utils.test.js +2 -1
- package/packages/pi-coding-agent/dist/core/tools/path-utils.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts +1 -0
- package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/index.js +1 -0
- package/packages/pi-coding-agent/dist/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/provider-display-name.test.js +15 -6
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/provider-display-name.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +36 -5
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/dynamic-border.test.js +20 -13
- package/packages/pi-coding-agent/dist/modes/interactive/components/dynamic-border.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +14 -5
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.d.ts +7 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.js +31 -9
- package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +30 -12
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js +18 -3
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +139 -0
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +4 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +118 -14
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/pi-coding-agent/dist/tests/system-prompt-skill-filter.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/tests/system-prompt-skill-filter.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/tests/system-prompt-skill-filter.test.js +130 -0
- package/packages/pi-coding-agent/dist/tests/system-prompt-skill-filter.test.js.map +1 -0
- package/packages/pi-coding-agent/package.json +6 -1
- package/packages/pi-coding-agent/src/core/agent-session-abort-order.test.ts +113 -36
- package/packages/pi-coding-agent/src/core/agent-session-model-switch.test.ts +89 -17
- package/packages/pi-coding-agent/src/core/agent-session-tool-refresh.test.ts +112 -43
- package/packages/pi-coding-agent/src/core/agent-session.ts +11 -0
- package/packages/pi-coding-agent/src/core/compaction/compaction.test.ts +368 -28
- package/packages/pi-coding-agent/src/core/compaction/compaction.ts +122 -6
- package/packages/pi-coding-agent/src/core/compaction/utils.ts +111 -13
- package/packages/pi-coding-agent/src/core/compaction-orchestrator.test.ts +154 -0
- package/packages/pi-coding-agent/src/core/compaction-orchestrator.ts +32 -18
- package/packages/pi-coding-agent/src/core/compaction-utils.test.ts +68 -1
- package/packages/pi-coding-agent/src/core/discovery-cache.test.ts +9 -18
- package/packages/pi-coding-agent/src/core/extensions/extension-discovery.ts +119 -0
- package/packages/pi-coding-agent/src/core/extensions/extension-registry.ts +222 -0
- package/packages/pi-coding-agent/src/core/extensions/loader.ts +82 -11
- package/packages/pi-coding-agent/src/core/extensions/runner.ts +2 -0
- package/packages/pi-coding-agent/src/core/extensions/types.ts +15 -0
- package/packages/pi-coding-agent/src/core/lsp/lsp-integration.test.ts +48 -4
- package/packages/pi-coding-agent/src/core/model-registry-auth-mode.test.ts +22 -2
- package/packages/pi-coding-agent/src/core/model-registry-custom-caps.test.ts +245 -0
- package/packages/pi-coding-agent/src/core/model-registry.ts +16 -0
- package/packages/pi-coding-agent/src/core/resource-loader-cache-reset.test.ts +93 -28
- package/packages/pi-coding-agent/src/core/resource-loader.ts +1 -1
- package/packages/pi-coding-agent/src/core/retry-handler.test.ts +5 -1
- package/packages/pi-coding-agent/src/core/retry-handler.ts +2 -8
- package/packages/pi-coding-agent/src/core/retryable-error-regex.ts +18 -0
- package/packages/pi-coding-agent/src/core/sdk.test.ts +25 -1
- package/packages/pi-coding-agent/src/core/sdk.ts +10 -3
- package/packages/pi-coding-agent/src/core/session-manager.test.ts +30 -1
- package/packages/pi-coding-agent/src/core/session-manager.ts +1 -1
- package/packages/pi-coding-agent/src/core/system-prompt.ts +38 -4
- package/packages/pi-coding-agent/src/core/tools/path-utils.test.ts +2 -1
- package/packages/pi-coding-agent/src/index.ts +1 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/provider-display-name.test.ts +17 -7
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +49 -3
- package/packages/pi-coding-agent/src/modes/interactive/components/dynamic-border.test.ts +26 -20
- package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +14 -5
- package/packages/pi-coding-agent/src/modes/interactive/components/model-selector.ts +45 -11
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +48 -9
- package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +160 -1
- package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.ts +20 -3
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode-state.ts +2 -0
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +132 -14
- package/packages/pi-coding-agent/src/tests/system-prompt-skill-filter.test.ts +157 -0
- package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-tui/dist/__tests__/autocomplete.test.js +31 -14
- package/packages/pi-tui/dist/__tests__/autocomplete.test.js.map +1 -1
- package/packages/pi-tui/dist/__tests__/overlay-layout.test.js +128 -17
- package/packages/pi-tui/dist/__tests__/overlay-layout.test.js.map +1 -1
- package/packages/pi-tui/dist/__tests__/stdin-buffer.test.js +51 -6
- package/packages/pi-tui/dist/__tests__/stdin-buffer.test.js.map +1 -1
- package/packages/pi-tui/dist/__tests__/tui.test.js +18 -30
- package/packages/pi-tui/dist/__tests__/tui.test.js.map +1 -1
- package/packages/pi-tui/dist/components/__tests__/input.test.js +10 -3
- package/packages/pi-tui/dist/components/__tests__/input.test.js.map +1 -1
- package/packages/pi-tui/dist/components/__tests__/loader.test.js +53 -9
- package/packages/pi-tui/dist/components/__tests__/loader.test.js.map +1 -1
- package/packages/pi-tui/dist/components/__tests__/markdown-maxlines.test.js +6 -2
- package/packages/pi-tui/dist/components/__tests__/markdown-maxlines.test.js.map +1 -1
- package/packages/pi-tui/dist/components/editor.d.ts +14 -0
- package/packages/pi-tui/dist/components/editor.d.ts.map +1 -1
- package/packages/pi-tui/dist/components/editor.js +19 -0
- package/packages/pi-tui/dist/components/editor.js.map +1 -1
- package/packages/pi-tui/dist/components/image.test.js +6 -5
- package/packages/pi-tui/dist/components/image.test.js.map +1 -1
- package/packages/pi-tui/dist/editor-component.d.ts +2 -0
- package/packages/pi-tui/dist/editor-component.d.ts.map +1 -1
- package/packages/pi-tui/dist/editor-component.js.map +1 -1
- package/packages/pi-tui/dist/stdin-buffer.d.ts +7 -0
- package/packages/pi-tui/dist/stdin-buffer.d.ts.map +1 -1
- package/packages/pi-tui/dist/stdin-buffer.js +20 -0
- package/packages/pi-tui/dist/stdin-buffer.js.map +1 -1
- package/packages/pi-tui/package.json +6 -1
- package/packages/pi-tui/src/__tests__/autocomplete.test.ts +46 -15
- package/packages/pi-tui/src/__tests__/overlay-layout.test.ts +140 -17
- package/packages/pi-tui/src/__tests__/stdin-buffer.test.ts +62 -6
- package/packages/pi-tui/src/__tests__/tui.test.ts +18 -37
- package/packages/pi-tui/src/components/__tests__/input.test.ts +19 -3
- package/packages/pi-tui/src/components/__tests__/loader.test.ts +112 -35
- package/packages/pi-tui/src/components/__tests__/markdown-maxlines.test.ts +9 -2
- package/packages/pi-tui/src/components/editor.ts +22 -0
- package/packages/pi-tui/src/components/image.test.ts +10 -5
- package/packages/pi-tui/src/editor-component.ts +3 -0
- package/packages/pi-tui/src/stdin-buffer.ts +26 -0
- package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
- package/packages/rpc-client/dist/rpc-client.test.js +101 -51
- package/packages/rpc-client/dist/rpc-client.test.js.map +1 -1
- package/packages/rpc-client/package.json +6 -1
- package/packages/rpc-client/src/rpc-client.test.ts +109 -52
- package/packages/rpc-client/tsconfig.tsbuildinfo +1 -1
- package/pkg/package.json +1 -1
- package/scripts/install.js +526 -0
- package/scripts/lib/workspace-manifest.cjs +86 -0
- package/scripts/link-workspace-packages.cjs +5 -17
- package/scripts/postinstall.js +9 -178
- package/src/resources/extensions/browser-tools/capture.ts +12 -0
- package/src/resources/extensions/browser-tools/tests/browser-tools-integration.test.mjs +8 -59
- package/src/resources/extensions/browser-tools/tests/browser-tools-unit.test.cjs +36 -24
- package/src/resources/extensions/browser-tools/tests/capture-sharp-optional.test.cjs +69 -71
- package/src/resources/extensions/browser-tools/tools/forms.ts +5 -1
- package/src/resources/extensions/browser-tools/tools/intent.ts +5 -1
- package/src/resources/extensions/claude-code-cli/readiness.ts +9 -4
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +609 -82
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +1033 -87
- package/src/resources/extensions/cmux/index.ts +35 -10
- package/src/resources/extensions/github-sync/templates.ts +151 -0
- package/src/resources/extensions/github-sync/tests/cli.test.ts +76 -7
- package/src/resources/extensions/github-sync/tests/templates.test.ts +92 -1
- package/src/resources/extensions/google-search/extension-manifest.json +5 -4
- package/src/resources/extensions/google-search/index.ts +9 -470
- package/src/resources/extensions/gsd/abandon-detect.ts +62 -0
- package/src/resources/extensions/gsd/auto/loop-deps.ts +14 -1
- package/src/resources/extensions/gsd/auto/loop.ts +151 -2
- package/src/resources/extensions/gsd/auto/phases.ts +139 -41
- package/src/resources/extensions/gsd/auto/resolve.ts +29 -0
- package/src/resources/extensions/gsd/auto/run-unit.ts +56 -4
- package/src/resources/extensions/gsd/auto/session.ts +35 -3
- package/src/resources/extensions/gsd/auto/turn-epoch.ts +108 -0
- package/src/resources/extensions/gsd/auto/types.ts +1 -1
- package/src/resources/extensions/gsd/auto-dispatch.ts +229 -39
- package/src/resources/extensions/gsd/auto-loop.ts +1 -1
- package/src/resources/extensions/gsd/auto-model-selection.ts +132 -5
- package/src/resources/extensions/gsd/auto-post-unit.ts +255 -76
- package/src/resources/extensions/gsd/auto-prompts.ts +413 -94
- package/src/resources/extensions/gsd/auto-recovery.ts +125 -2
- package/src/resources/extensions/gsd/auto-start.ts +166 -60
- package/src/resources/extensions/gsd/auto-timeout-recovery.ts +12 -5
- package/src/resources/extensions/gsd/auto-tool-tracking.ts +51 -7
- package/src/resources/extensions/gsd/auto-unit-closeout.ts +14 -3
- package/src/resources/extensions/gsd/auto-worktree.ts +251 -93
- package/src/resources/extensions/gsd/auto.ts +182 -54
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +43 -2
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +221 -0
- package/src/resources/extensions/gsd/bootstrap/provider-error-resume.ts +6 -6
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +11 -0
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +25 -9
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +13 -9
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +193 -11
- package/src/resources/extensions/gsd/clean-root-preflight.ts +111 -0
- package/src/resources/extensions/gsd/commands/handlers/workflow.ts +27 -8
- package/src/resources/extensions/gsd/commands-cmux.ts +10 -6
- package/src/resources/extensions/gsd/commands-extensions.ts +747 -41
- package/src/resources/extensions/gsd/commands-prefs-wizard.ts +898 -32
- package/src/resources/extensions/gsd/component-loader.ts +598 -0
- package/src/resources/extensions/gsd/component-types.ts +362 -0
- package/src/resources/extensions/gsd/context-store.ts +25 -8
- package/src/resources/extensions/gsd/detection.ts +58 -1
- package/src/resources/extensions/gsd/dispatch-guard.ts +26 -2
- package/src/resources/extensions/gsd/docs/preferences-reference.md +1 -1
- package/src/resources/extensions/gsd/file-lock.ts +84 -11
- package/src/resources/extensions/gsd/forensics.ts +118 -1
- package/src/resources/extensions/gsd/gate-registry.ts +2 -2
- package/src/resources/extensions/gsd/git-constants.ts +30 -1
- package/src/resources/extensions/gsd/git-self-heal.ts +31 -0
- package/src/resources/extensions/gsd/git-service.ts +150 -2
- package/src/resources/extensions/gsd/gitignore.ts +2 -1
- package/src/resources/extensions/gsd/gsd-db.ts +97 -34
- package/src/resources/extensions/gsd/guided-flow-queue.ts +4 -1
- package/src/resources/extensions/gsd/guided-flow.ts +261 -14
- package/src/resources/extensions/gsd/health-widget.ts +3 -1
- package/src/resources/extensions/gsd/journal.ts +39 -3
- package/src/resources/extensions/gsd/key-manager.ts +22 -0
- package/src/resources/extensions/gsd/memory-extractor.ts +11 -3
- package/src/resources/extensions/gsd/milestone-actions.ts +18 -0
- package/src/resources/extensions/gsd/milestone-scope-classifier.ts +366 -0
- package/src/resources/extensions/gsd/milestone-summary-classifier.ts +42 -0
- package/src/resources/extensions/gsd/model-cost-table.ts +3 -0
- package/src/resources/extensions/gsd/model-router.ts +48 -1
- package/src/resources/extensions/gsd/native-git-bridge.ts +34 -4
- package/src/resources/extensions/gsd/notifications.ts +27 -15
- package/src/resources/extensions/gsd/pre-execution-checks.ts +33 -7
- package/src/resources/extensions/gsd/preferences-types.ts +8 -0
- package/src/resources/extensions/gsd/preferences-validation.ts +21 -0
- package/src/resources/extensions/gsd/prompt-cache-optimizer.ts +4 -0
- package/src/resources/extensions/gsd/prompts/complete-milestone.md +5 -1
- package/src/resources/extensions/gsd/prompts/discuss-headless.md +29 -2
- package/src/resources/extensions/gsd/prompts/discuss.md +29 -2
- package/src/resources/extensions/gsd/prompts/doctor-heal.md +5 -4
- package/src/resources/extensions/gsd/prompts/parallel-research-slices.md +5 -2
- package/src/resources/extensions/gsd/prompts/plan-slice.md +15 -2
- package/src/resources/extensions/gsd/prompts/system.md +1 -0
- package/src/resources/extensions/gsd/reports.ts +5 -4
- package/src/resources/extensions/gsd/safety/evidence-collector.ts +119 -0
- package/src/resources/extensions/gsd/safety/file-change-validator.ts +16 -3
- package/src/resources/extensions/gsd/safety/git-checkpoint.ts +15 -0
- package/src/resources/extensions/gsd/safety/safety-harness.ts +9 -0
- package/src/resources/extensions/gsd/service-tier.ts +5 -2
- package/src/resources/extensions/gsd/session-lock.ts +20 -10
- package/src/resources/extensions/gsd/skill-manifest.ts +175 -0
- package/src/resources/extensions/gsd/slice-cadence.ts +299 -0
- package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +309 -8
- package/src/resources/extensions/gsd/state-transition-matrix.ts +152 -0
- package/src/resources/extensions/gsd/state.ts +76 -66
- package/src/resources/extensions/gsd/sync-lock.ts +97 -39
- package/src/resources/extensions/gsd/tests/artifact-retry-cap.test.ts +270 -0
- package/src/resources/extensions/gsd/tests/artifacts-table-preserved-on-cache-invalidate.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/auto-deterministic-error-classification-4973.test.ts +341 -0
- package/src/resources/extensions/gsd/tests/auto-discuss-milestone-deadlock-4973.test.ts +264 -0
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +322 -286
- package/src/resources/extensions/gsd/tests/auto-mode-guards.test.ts +79 -0
- package/src/resources/extensions/gsd/tests/auto-model-selection-tool-poisoning.test.ts +742 -0
- package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +78 -0
- package/src/resources/extensions/gsd/tests/auto-paused-session-validation.test.ts +12 -0
- package/src/resources/extensions/gsd/tests/auto-phases-lifecycle.test.ts +61 -0
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +122 -0
- package/src/resources/extensions/gsd/tests/auto-remediate-slice-status.test.ts +4 -1
- package/src/resources/extensions/gsd/tests/auto-retry-mcp-churn-fixes.test.ts +8 -194
- package/src/resources/extensions/gsd/tests/auto-start-bootstrap-await-3420.test.ts +141 -0
- package/src/resources/extensions/gsd/tests/auto-start-clean-runtime-db-gated.test.ts +64 -0
- package/src/resources/extensions/gsd/tests/auto-start-cold-db-bootstrap.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/auto-start-needs-discussion.test.ts +15 -58
- package/src/resources/extensions/gsd/tests/auto-start-worktree-db-path.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/auto-thinking-restore.test.ts +3 -2
- package/src/resources/extensions/gsd/tests/auto-warning-noise-regression.test.ts +3 -2
- package/src/resources/extensions/gsd/tests/auto-wrapup-inflight-guard.test.ts +23 -0
- package/src/resources/extensions/gsd/tests/bootstrap-derive-state-db-open.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/cache-staleness-regression.test.ts +17 -21
- package/src/resources/extensions/gsd/tests/canonical-milestone-root.test.ts +108 -0
- package/src/resources/extensions/gsd/tests/clean-root-preflight.test.ts +186 -0
- package/src/resources/extensions/gsd/tests/cmux.test.ts +5 -9
- package/src/resources/extensions/gsd/tests/complete-milestone-excerpt.test.ts +263 -0
- package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +61 -1
- package/src/resources/extensions/gsd/tests/complete-slice-composer.test.ts +192 -0
- package/src/resources/extensions/gsd/tests/complete-slice-verification-gate.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/complete-slice.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/complete-task.test.ts +16 -8
- package/src/resources/extensions/gsd/tests/component-loader.test.ts +589 -0
- package/src/resources/extensions/gsd/tests/component-types.test.ts +127 -0
- package/src/resources/extensions/gsd/tests/context-store.test.ts +79 -0
- package/src/resources/extensions/gsd/tests/copy-planning-artifacts-samepath.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/crash-recovery.test.ts +50 -1
- package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +161 -0
- package/src/resources/extensions/gsd/tests/db-access-guardrails.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/derive-state-crossval.test.ts +3 -3
- package/src/resources/extensions/gsd/tests/derive-state-db-disk-reconcile.test.ts +40 -0
- package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +91 -3
- package/src/resources/extensions/gsd/tests/derive-state.test.ts +4 -4
- package/src/resources/extensions/gsd/tests/discuss-slice-structured-questions.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/discuss-tool-scope-leak.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +14 -9
- package/src/resources/extensions/gsd/tests/dispatch-guard-summary-db-mismatch.test.ts +77 -0
- package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +25 -0
- package/src/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +14 -0
- package/src/resources/extensions/gsd/tests/dispatcher-stuck-planning.test.ts +3 -2
- package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +31 -0
- package/src/resources/extensions/gsd/tests/double-merge-guard.test.ts +4 -3
- package/src/resources/extensions/gsd/tests/empty-content-abort-loop.test.ts +4 -3
- package/src/resources/extensions/gsd/tests/ensure-db-open.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/escalation.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/exec-history.test.ts +113 -0
- package/src/resources/extensions/gsd/tests/execution-entry-missing-context-4671.test.ts +173 -0
- package/src/resources/extensions/gsd/tests/extension-bootstrap-isolation.test.ts +139 -129
- package/src/resources/extensions/gsd/tests/file-change-validator.test.ts +38 -0
- package/src/resources/extensions/gsd/tests/file-lock.test.ts +86 -12
- package/src/resources/extensions/gsd/tests/finalize-timeout-guard.test.ts +8 -104
- package/src/resources/extensions/gsd/tests/gate-state-canonicalization.test.ts +102 -0
- package/src/resources/extensions/gsd/tests/gate-storage.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/google-search-stub.test.ts +131 -0
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +296 -1
- package/src/resources/extensions/gsd/tests/headless-milestone-parity.test.ts +117 -0
- package/src/resources/extensions/gsd/tests/hook-key-parsing.test.ts +4 -55
- package/src/resources/extensions/gsd/tests/integration/all-milestones-complete-merge.test.ts +7 -56
- package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +30 -0
- package/src/resources/extensions/gsd/tests/integration/doctor-proactive.test.ts +18 -2
- package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +4 -2
- package/src/resources/extensions/gsd/tests/integration/gitignore-tracked-gsd.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/integration/idle-recovery.test.ts +30 -0
- package/src/resources/extensions/gsd/tests/integration/queue-completed-milestone-perf.test.ts +10 -4
- package/src/resources/extensions/gsd/tests/integration/state-machine-edge-cases.test.ts +144 -7
- package/src/resources/extensions/gsd/tests/integration/state-machine-live-validation.test.ts +4 -0
- package/src/resources/extensions/gsd/tests/integration/state-machine-runtime-failures.test.ts +2 -16
- package/src/resources/extensions/gsd/tests/integration/worktree-e2e.test.ts +11 -0
- package/src/resources/extensions/gsd/tests/interactive-routing-bypass.test.ts +9 -3
- package/src/resources/extensions/gsd/tests/interrupted-session-ui.test.ts +6 -9
- package/src/resources/extensions/gsd/tests/issue-4540-regressions.test.ts +288 -0
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +66 -0
- package/src/resources/extensions/gsd/tests/key-manager.test.ts +2 -0
- package/src/resources/extensions/gsd/tests/knowledge.test.ts +93 -1
- package/src/resources/extensions/gsd/tests/mcp-client-security.test.ts +47 -0
- package/src/resources/extensions/gsd/tests/md-importer.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/memory-extractor.test.ts +5 -15
- package/src/resources/extensions/gsd/tests/memory-pressure-stuck-state.test.ts +12 -0
- package/src/resources/extensions/gsd/tests/memory-store.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/merge-conflict-stops-loop.test.ts +227 -55
- package/src/resources/extensions/gsd/tests/milestone-scope-classifier.test.ts +187 -0
- package/src/resources/extensions/gsd/tests/milestone-status-authoritative.test.ts +3 -3
- package/src/resources/extensions/gsd/tests/milestone-summary-classifier.test.ts +30 -0
- package/src/resources/extensions/gsd/tests/milestone-transition-state-rebuild.test.ts +4 -2
- package/src/resources/extensions/gsd/tests/model-cost-table.test.ts +9 -1
- package/src/resources/extensions/gsd/tests/model-router.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/native-git-bridge-exec-fallback.test.ts +6 -48
- package/src/resources/extensions/gsd/tests/notification-widget.test.ts +6 -3
- package/src/resources/extensions/gsd/tests/orphaned-worktree-audit.test.ts +59 -2
- package/src/resources/extensions/gsd/tests/parallel-commit-scope.test.ts +5 -0
- package/src/resources/extensions/gsd/tests/parallel-research-dispatch.test.ts +274 -112
- package/src/resources/extensions/gsd/tests/parallel-skill-prompt-integration.test.ts +150 -0
- package/src/resources/extensions/gsd/tests/pipeline-variant-dispatch.test.ts +301 -0
- package/src/resources/extensions/gsd/tests/plan-gate-failed-doctor-heal-hint.test.ts +37 -0
- package/src/resources/extensions/gsd/tests/pre-exec-gate-loop.test.ts +272 -0
- package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +337 -0
- package/src/resources/extensions/gsd/tests/pre-execution-pause-wiring.test.ts +32 -1
- package/src/resources/extensions/gsd/tests/preferences-worktree-sync.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/prompt-cache-optimizer.test.ts +12 -0
- package/src/resources/extensions/gsd/tests/prompt-step-ordering.test.ts +15 -4
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +54 -41
- package/src/resources/extensions/gsd/tests/queue-auto-guard.test.ts +213 -0
- package/src/resources/extensions/gsd/tests/queue-draft-detection.test.ts +3 -2
- package/src/resources/extensions/gsd/tests/queued-discuss-fast-path.test.ts +4 -5
- package/src/resources/extensions/gsd/tests/quick-auto-guard.test.ts +13 -7
- package/src/resources/extensions/gsd/tests/ready-phrase-no-files-4573.test.ts +388 -0
- package/src/resources/extensions/gsd/tests/reassess-default-optin.test.ts +132 -0
- package/src/resources/extensions/gsd/tests/recovery-attempts-reset.test.ts +8 -40
- package/src/resources/extensions/gsd/tests/regex-hardening.test.ts +136 -256
- package/src/resources/extensions/gsd/tests/require-slice-discussion-dispatch.test.ts +170 -0
- package/src/resources/extensions/gsd/tests/research-milestone-composer.test.ts +114 -0
- package/src/resources/extensions/gsd/tests/restore-tools-after-discuss.test.ts +15 -6
- package/src/resources/extensions/gsd/tests/resume-dispatch-worktree.test.ts +230 -0
- package/src/resources/extensions/gsd/tests/rewrite-docs-abandon-detect.test.ts +195 -0
- package/src/resources/extensions/gsd/tests/run-uat-composer.test.ts +148 -0
- package/src/resources/extensions/gsd/tests/safety-harness-false-positives.test.ts +205 -0
- package/src/resources/extensions/gsd/tests/schema-v21-sequence.test.ts +413 -0
- package/src/resources/extensions/gsd/tests/service-tier.test.ts +4 -0
- package/src/resources/extensions/gsd/tests/session-lock-regression.test.ts +29 -0
- package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +32 -40
- package/src/resources/extensions/gsd/tests/sidecar-queue.test.ts +3 -2
- package/src/resources/extensions/gsd/tests/silent-catch-diagnostics.test.ts +55 -95
- package/src/resources/extensions/gsd/tests/single-writer-v3-tool-surface.test.ts +158 -0
- package/src/resources/extensions/gsd/tests/skill-activation.test.ts +120 -1
- package/src/resources/extensions/gsd/tests/skill-manifest.test.ts +112 -0
- package/src/resources/extensions/gsd/tests/slice-cadence.test.ts +242 -0
- package/src/resources/extensions/gsd/tests/slice-context-injection.test.ts +3 -2
- package/src/resources/extensions/gsd/tests/slice-parallel-orchestrator.test.ts +164 -1
- package/src/resources/extensions/gsd/tests/smart-entry-draft.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/stale-dirlistcache-4648.test.ts +112 -0
- package/src/resources/extensions/gsd/tests/stash-queued-context-files.test.ts +56 -0
- package/src/resources/extensions/gsd/tests/state-machine-full-walkthrough.test.ts +29 -5
- package/src/resources/extensions/gsd/tests/state-transition-matrix.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/stop-auto-race-null-unit.test.ts +3 -3
- package/src/resources/extensions/gsd/tests/structured-data-formatter.test.ts +11 -92
- package/src/resources/extensions/gsd/tests/stuck-detection-coverage.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/subagent-model-dispatch.test.ts +7 -6
- package/src/resources/extensions/gsd/tests/survivor-branch-complete.test.ts +102 -101
- package/src/resources/extensions/gsd/tests/sync-lock.test.ts +31 -0
- package/src/resources/extensions/gsd/tests/sync-worktree-skip-current.test.ts +4 -3
- package/src/resources/extensions/gsd/tests/test-helpers.test.ts +98 -0
- package/src/resources/extensions/gsd/tests/test-helpers.ts +153 -0
- package/src/resources/extensions/gsd/tests/token-counter.test.ts +105 -1
- package/src/resources/extensions/gsd/tests/token-profile.test.ts +8 -1
- package/src/resources/extensions/gsd/tests/tool-compatibility.test.ts +107 -0
- package/src/resources/extensions/gsd/tests/tool-invocation-error-loop-break.test.ts +61 -1
- package/src/resources/extensions/gsd/tests/tool-naming.test.ts +8 -1
- package/src/resources/extensions/gsd/tests/triage-resolution.test.ts +50 -2
- package/src/resources/extensions/gsd/tests/turn-epoch.test.ts +162 -0
- package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +355 -0
- package/src/resources/extensions/gsd/tests/unit-context-manifest.test.ts +258 -0
- package/src/resources/extensions/gsd/tests/uok-contracts.test.ts +51 -0
- package/src/resources/extensions/gsd/tests/uok-execution-graph.test.ts +16 -0
- package/src/resources/extensions/gsd/tests/uok-gate-runner.test.ts +75 -0
- package/src/resources/extensions/gsd/tests/uok-gitops-wiring.test.ts +49 -26
- package/src/resources/extensions/gsd/tests/uok-loop-adapter-writer.test.ts +65 -0
- package/src/resources/extensions/gsd/tests/uok-parity-report.test.ts +42 -0
- package/src/resources/extensions/gsd/tests/uok-plan-v2-wiring.test.ts +42 -2
- package/src/resources/extensions/gsd/tests/uok-writer.test.ts +75 -0
- package/src/resources/extensions/gsd/tests/validate-extension-package.test.ts +168 -0
- package/src/resources/extensions/gsd/tests/validate-milestone.test.ts +139 -5
- package/src/resources/extensions/gsd/tests/verify-artifact-tightened.test.ts +144 -80
- package/src/resources/extensions/gsd/tests/visualizer-critical-path.test.ts +20 -54
- package/src/resources/extensions/gsd/tests/visualizer-overlay.test.ts +342 -277
- package/src/resources/extensions/gsd/tests/worker-model-override.test.ts +37 -29
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +25 -2
- package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +65 -2
- package/src/resources/extensions/gsd/tests/worktree-db.test.ts +242 -247
- package/src/resources/extensions/gsd/tests/worktree-health-monorepo.test.ts +103 -67
- package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +6 -1
- package/src/resources/extensions/gsd/tests/worktree-nested-git-safety.test.ts +92 -90
- package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +78 -5
- package/src/resources/extensions/gsd/tests/worktree-submodule-safety.test.ts +238 -59
- package/src/resources/extensions/gsd/tests/worktree-sync-overwrite-loop.test.ts +113 -161
- package/src/resources/extensions/gsd/tests/worktree-telemetry.test.ts +210 -0
- package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +262 -0
- package/src/resources/extensions/gsd/tests/write-gate-predicates.test.ts +186 -0
- package/src/resources/extensions/gsd/tests/write-gate.test.ts +71 -5
- package/src/resources/extensions/gsd/tests/zombie-gsd-state.test.ts +80 -96
- package/src/resources/extensions/gsd/token-counter.ts +22 -5
- package/src/resources/extensions/gsd/tools/complete-milestone.ts +15 -9
- package/src/resources/extensions/gsd/tools/complete-slice.ts +38 -0
- package/src/resources/extensions/gsd/tools/complete-task.ts +49 -0
- package/src/resources/extensions/gsd/tools/validate-milestone.ts +8 -2
- package/src/resources/extensions/gsd/types.ts +3 -3
- package/src/resources/extensions/gsd/unit-context-composer.ts +218 -0
- package/src/resources/extensions/gsd/unit-context-manifest.ts +574 -0
- package/src/resources/extensions/gsd/uok/audit.ts +20 -2
- package/src/resources/extensions/gsd/uok/contracts.ts +65 -0
- package/src/resources/extensions/gsd/uok/dispatch-envelope.ts +56 -0
- package/src/resources/extensions/gsd/uok/execution-graph.ts +22 -0
- package/src/resources/extensions/gsd/uok/gate-runner.ts +65 -5
- package/src/resources/extensions/gsd/uok/gitops.ts +6 -1
- package/src/resources/extensions/gsd/uok/loop-adapter.ts +45 -10
- package/src/resources/extensions/gsd/uok/parity-report.ts +84 -0
- package/src/resources/extensions/gsd/uok/plan-v2.ts +39 -8
- package/src/resources/extensions/gsd/uok/writer.ts +113 -0
- package/src/resources/extensions/gsd/workflow-logger.ts +23 -3
- package/src/resources/extensions/gsd/workflow-mcp.ts +6 -0
- package/src/resources/extensions/gsd/worktree-manager.ts +109 -7
- package/src/resources/extensions/gsd/worktree-resolver.ts +150 -18
- package/src/resources/extensions/gsd/worktree-telemetry.ts +322 -0
- package/src/resources/extensions/mcp-client/auth.ts +12 -1
- package/src/resources/extensions/mcp-client/index.ts +132 -11
- package/src/resources/extensions/mcp-client/tests/server-name-spaces.test.ts +70 -36
- package/src/resources/extensions/ollama/index.ts +5 -1
- package/src/resources/extensions/ollama/ollama-auth-mode.test.ts +123 -15
- package/src/resources/extensions/ollama/ollama-status-indicator.test.ts +206 -19
- package/src/resources/extensions/remote-questions/manager.ts +36 -4
- package/src/resources/extensions/remote-questions/tests/command-polling.test.ts +200 -190
- package/src/resources/extensions/shared/cmux-events.ts +59 -0
- package/src/resources/extensions/shared/rtk-session-stats.ts +1 -2
- package/src/resources/extensions/shared/tests/interview-preview.test.ts +11 -3
- package/src/resources/extensions/voice/tests/linux-ready.test.ts +129 -113
- package/src/resources/skills/create-skill/SKILL.md +2 -2
- package/src/resources/skills/create-skill/references/gsd-skill-ecosystem.md +4 -4
- package/src/resources/skills/create-skill/workflows/audit-skill.md +4 -4
- package/src/resources/skills/create-skill/workflows/create-new-skill.md +5 -5
- package/src/resources/skills/verify-before-complete/SKILL.md +2 -1
- package/src/resources/skills/write-docs/SKILL.md +2 -1
- package/dist/web/standalone/.next/server/chunks/7461.js +0 -1
- package/dist/web/standalone/.next/static/chunks/2826.e59e8578e2e28639.js +0 -9
- package/packages/pi-ai/dist/utils/oauth/oauth-providers.test.d.ts +0 -2
- package/packages/pi-ai/dist/utils/oauth/oauth-providers.test.d.ts.map +0 -1
- package/packages/pi-ai/dist/utils/oauth/oauth-providers.test.js +0 -289
- package/packages/pi-ai/dist/utils/oauth/oauth-providers.test.js.map +0 -1
- package/packages/pi-ai/src/utils/oauth/oauth-providers.test.ts +0 -363
- package/src/resources/extensions/gsd/tests/auto-start-model-capture.test.ts +0 -143
- package/src/resources/extensions/gsd/tests/complete-milestone-false-merge.test.ts +0 -142
- package/src/resources/extensions/gsd/tests/dashboard-model-label-ordering.test.ts +0 -107
- package/src/resources/extensions/gsd/tests/find-missing-summaries-closed.test.ts +0 -48
- package/src/resources/extensions/gsd/tests/forensics-context-persist.test.ts +0 -159
- package/src/resources/extensions/gsd/tests/forensics-db-completion.test.ts +0 -96
- package/src/resources/extensions/gsd/tests/forensics-dedup.test.ts +0 -79
- package/src/resources/extensions/gsd/tests/forensics-hook-key-parse.test.ts +0 -74
- package/src/resources/extensions/gsd/tests/forensics-journal.test.ts +0 -162
- package/src/resources/extensions/gsd/tests/gitignore-bg-shell.test.ts +0 -38
- package/src/resources/extensions/gsd/tests/gsd-no-project-error.test.ts +0 -73
- package/src/resources/extensions/gsd/tests/idle-watchdog-stall-override.test.ts +0 -125
- package/src/resources/extensions/gsd/tests/import-done-milestones.test.ts +0 -42
- /package/dist/web/standalone/.next/static/{n21VtX2hZlkpdEUO_nU4z → MdwvuQQLlBY6wwiSO1Tgv}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{n21VtX2hZlkpdEUO_nU4z → MdwvuQQLlBY6wwiSO1Tgv}/_ssgManifest.js +0 -0
|
@@ -1599,6 +1599,221 @@ describe("checkTaskOrdering directory inputs (#4446)", () => {
|
|
|
1599
1599
|
});
|
|
1600
1600
|
});
|
|
1601
1601
|
|
|
1602
|
+
// ─── Regression Tests: checkTaskOrdering false positive for pre-execution refs (#4071) ──
|
|
1603
|
+
|
|
1604
|
+
describe("checkTaskOrdering false positive for pre-execution refs (#4071)", () => {
|
|
1605
|
+
test("completed task at higher index does not trigger ordering violation for its outputs", () => {
|
|
1606
|
+
// Scenario: after a replan, a completed task at higher array index has already
|
|
1607
|
+
// created a file. A new earlier-sequence task reads that file. Since the
|
|
1608
|
+
// completed task already ran, its output is available regardless of disk state.
|
|
1609
|
+
// checkTaskOrdering must not flag this as a sequence violation.
|
|
1610
|
+
const tasks = [
|
|
1611
|
+
createTask({
|
|
1612
|
+
id: "T_NEW",
|
|
1613
|
+
sequence: 1,
|
|
1614
|
+
status: "pending",
|
|
1615
|
+
inputs: ["artifacts/setup.json"],
|
|
1616
|
+
expected_output: [],
|
|
1617
|
+
}),
|
|
1618
|
+
createTask({
|
|
1619
|
+
id: "T_SETUP",
|
|
1620
|
+
sequence: 5,
|
|
1621
|
+
status: "completed",
|
|
1622
|
+
inputs: [],
|
|
1623
|
+
expected_output: ["artifacts/setup.json"],
|
|
1624
|
+
}),
|
|
1625
|
+
];
|
|
1626
|
+
|
|
1627
|
+
const results = checkTaskOrdering(tasks, "/tmp");
|
|
1628
|
+
assert.equal(
|
|
1629
|
+
results.length,
|
|
1630
|
+
0,
|
|
1631
|
+
"completed task outputs must not trigger ordering violations for earlier-sequence tasks that read them",
|
|
1632
|
+
);
|
|
1633
|
+
});
|
|
1634
|
+
|
|
1635
|
+
test("pending task at higher index still triggers ordering violation", () => {
|
|
1636
|
+
// A PENDING task at higher index creating a file is a real violation.
|
|
1637
|
+
// Only completed tasks get the exemption.
|
|
1638
|
+
const tasks = [
|
|
1639
|
+
createTask({
|
|
1640
|
+
id: "T01",
|
|
1641
|
+
sequence: 1,
|
|
1642
|
+
status: "pending",
|
|
1643
|
+
inputs: ["artifacts/output.json"],
|
|
1644
|
+
expected_output: [],
|
|
1645
|
+
}),
|
|
1646
|
+
createTask({
|
|
1647
|
+
id: "T02",
|
|
1648
|
+
sequence: 5,
|
|
1649
|
+
status: "pending",
|
|
1650
|
+
inputs: [],
|
|
1651
|
+
expected_output: ["artifacts/output.json"],
|
|
1652
|
+
}),
|
|
1653
|
+
];
|
|
1654
|
+
|
|
1655
|
+
const results = checkTaskOrdering(tasks, "/tmp");
|
|
1656
|
+
assert.equal(
|
|
1657
|
+
results.length,
|
|
1658
|
+
1,
|
|
1659
|
+
"pending task at higher index must still be flagged as ordering violation",
|
|
1660
|
+
);
|
|
1661
|
+
assert.equal(results[0].blocking, true);
|
|
1662
|
+
assert.ok(results[0].message.includes("T01"));
|
|
1663
|
+
assert.ok(results[0].message.includes("T02"));
|
|
1664
|
+
assert.ok(results[0].message.includes("sequence violation"));
|
|
1665
|
+
});
|
|
1666
|
+
|
|
1667
|
+
test("pending-first then completed-later: completed replaces pending in fileCreators (#4572)", () => {
|
|
1668
|
+
// Regression for CodeRabbit Major finding on PR #4572:
|
|
1669
|
+
// fileCreators only stored the FIRST task for a given path. If a PENDING task at
|
|
1670
|
+
// array index 1 was registered first, and a COMPLETED task at array index 2 also
|
|
1671
|
+
// declared the same output path, the completed entry was discarded. Line ~529 then
|
|
1672
|
+
// saw a pending creator with index > i and incorrectly fired a sequence violation
|
|
1673
|
+
// for the reader at array index 0.
|
|
1674
|
+
//
|
|
1675
|
+
// Scenario: path first declared by pending task (index 1), then by completed task
|
|
1676
|
+
// (index 2). Reader is at index 0. Without the fix a violation fires; with the fix
|
|
1677
|
+
// the completed entry replaces the pending entry and grants the exemption.
|
|
1678
|
+
const tasks = [
|
|
1679
|
+
// array index 0 — reads the shared path
|
|
1680
|
+
createTask({
|
|
1681
|
+
id: "T_READER",
|
|
1682
|
+
sequence: 1,
|
|
1683
|
+
status: "pending",
|
|
1684
|
+
inputs: ["shared/artifact.json"],
|
|
1685
|
+
expected_output: [],
|
|
1686
|
+
}),
|
|
1687
|
+
// array index 1 — pending producer (visited first during map build)
|
|
1688
|
+
createTask({
|
|
1689
|
+
id: "T_PENDING_PRODUCER",
|
|
1690
|
+
sequence: 5,
|
|
1691
|
+
status: "pending",
|
|
1692
|
+
inputs: [],
|
|
1693
|
+
expected_output: ["shared/artifact.json"],
|
|
1694
|
+
}),
|
|
1695
|
+
// array index 2 — completed producer (visited second; must replace pending entry)
|
|
1696
|
+
createTask({
|
|
1697
|
+
id: "T_COMPLETED_PRODUCER",
|
|
1698
|
+
sequence: 2,
|
|
1699
|
+
status: "completed",
|
|
1700
|
+
inputs: [],
|
|
1701
|
+
expected_output: ["shared/artifact.json"],
|
|
1702
|
+
}),
|
|
1703
|
+
];
|
|
1704
|
+
|
|
1705
|
+
// Without the fix: creator = T_PENDING_PRODUCER (index 1), !creator.completed && 1 > 0 → violation.
|
|
1706
|
+
// With the fix: creator = T_COMPLETED_PRODUCER (index 2), creator.completed → no violation.
|
|
1707
|
+
const results = checkTaskOrdering(tasks, "/tmp");
|
|
1708
|
+
assert.equal(
|
|
1709
|
+
results.length,
|
|
1710
|
+
0,
|
|
1711
|
+
"completed producer must replace pending producer in fileCreators and suppress false violation",
|
|
1712
|
+
);
|
|
1713
|
+
});
|
|
1714
|
+
|
|
1715
|
+
test("completed task output exemption applies regardless of whether file exists on disk", (t) => {
|
|
1716
|
+
// The completed-task exemption must work even when the file is not on disk
|
|
1717
|
+
// (e.g., the file was a temporary artifact that was cleaned up after the task ran).
|
|
1718
|
+
const tempDir = join(tmpdir(), `pre-exec-completed-task-${Date.now()}`);
|
|
1719
|
+
mkdirSync(tempDir, { recursive: true });
|
|
1720
|
+
t.after(() => rmSync(tempDir, { recursive: true, force: true }));
|
|
1721
|
+
|
|
1722
|
+
// File deliberately NOT created on disk — completed task ran in a prior session
|
|
1723
|
+
const tasks = [
|
|
1724
|
+
createTask({
|
|
1725
|
+
id: "T_MAIN",
|
|
1726
|
+
sequence: 0,
|
|
1727
|
+
status: "pending",
|
|
1728
|
+
inputs: ["generated/config.json"],
|
|
1729
|
+
expected_output: [],
|
|
1730
|
+
}),
|
|
1731
|
+
createTask({
|
|
1732
|
+
id: "T_INIT",
|
|
1733
|
+
sequence: 10,
|
|
1734
|
+
status: "completed",
|
|
1735
|
+
inputs: [],
|
|
1736
|
+
expected_output: ["generated/config.json"],
|
|
1737
|
+
}),
|
|
1738
|
+
];
|
|
1739
|
+
|
|
1740
|
+
const results = checkTaskOrdering(tasks, tempDir);
|
|
1741
|
+
assert.equal(
|
|
1742
|
+
results.length,
|
|
1743
|
+
0,
|
|
1744
|
+
"completed task exemption must apply even when file is absent from disk",
|
|
1745
|
+
);
|
|
1746
|
+
});
|
|
1747
|
+
});
|
|
1748
|
+
|
|
1749
|
+
describe("checkFilePathConsistency completed-task output exemption (#4071)", () => {
|
|
1750
|
+
test("completed task at higher index does not cause false positive for file it produced", (t) => {
|
|
1751
|
+
// Parallel to the checkTaskOrdering fix: checkFilePathConsistency also uses
|
|
1752
|
+
// getExpectedOutputsUpTo which historically only looked at prior-index tasks.
|
|
1753
|
+
// A completed task at a higher index has already run and its outputs are available.
|
|
1754
|
+
const tempDir = join(tmpdir(), `pre-exec-fc-completed-${Date.now()}`);
|
|
1755
|
+
mkdirSync(tempDir, { recursive: true });
|
|
1756
|
+
t.after(() => rmSync(tempDir, { recursive: true, force: true }));
|
|
1757
|
+
|
|
1758
|
+
// File is NOT on disk — completed task ran in a prior session and file was cleaned
|
|
1759
|
+
const tasks = [
|
|
1760
|
+
createTask({
|
|
1761
|
+
id: "T_MAIN",
|
|
1762
|
+
sequence: 1,
|
|
1763
|
+
status: "pending",
|
|
1764
|
+
inputs: ["artifacts/config.json"],
|
|
1765
|
+
expected_output: [],
|
|
1766
|
+
}),
|
|
1767
|
+
createTask({
|
|
1768
|
+
id: "T_SETUP",
|
|
1769
|
+
sequence: 10,
|
|
1770
|
+
status: "completed",
|
|
1771
|
+
inputs: [],
|
|
1772
|
+
expected_output: ["artifacts/config.json"],
|
|
1773
|
+
}),
|
|
1774
|
+
];
|
|
1775
|
+
|
|
1776
|
+
const results = checkFilePathConsistency(tasks, tempDir);
|
|
1777
|
+
assert.equal(
|
|
1778
|
+
results.length,
|
|
1779
|
+
0,
|
|
1780
|
+
"completed task at higher index should satisfy inputs of pending tasks that read its outputs",
|
|
1781
|
+
);
|
|
1782
|
+
});
|
|
1783
|
+
|
|
1784
|
+
test("pending task at higher index still causes a missing-file error", (t) => {
|
|
1785
|
+
const tempDir = join(tmpdir(), `pre-exec-fc-pending-${Date.now()}`);
|
|
1786
|
+
mkdirSync(tempDir, { recursive: true });
|
|
1787
|
+
t.after(() => rmSync(tempDir, { recursive: true, force: true }));
|
|
1788
|
+
|
|
1789
|
+
const tasks = [
|
|
1790
|
+
createTask({
|
|
1791
|
+
id: "T01",
|
|
1792
|
+
sequence: 1,
|
|
1793
|
+
status: "pending",
|
|
1794
|
+
inputs: ["artifacts/output.json"],
|
|
1795
|
+
expected_output: [],
|
|
1796
|
+
}),
|
|
1797
|
+
createTask({
|
|
1798
|
+
id: "T02",
|
|
1799
|
+
sequence: 10,
|
|
1800
|
+
status: "pending",
|
|
1801
|
+
inputs: [],
|
|
1802
|
+
expected_output: ["artifacts/output.json"],
|
|
1803
|
+
}),
|
|
1804
|
+
];
|
|
1805
|
+
|
|
1806
|
+
const results = checkFilePathConsistency(tasks, tempDir);
|
|
1807
|
+
assert.equal(
|
|
1808
|
+
results.length,
|
|
1809
|
+
1,
|
|
1810
|
+
"pending task at higher index must still be flagged — the file is not available yet",
|
|
1811
|
+
);
|
|
1812
|
+
assert.equal(results[0].blocking, true);
|
|
1813
|
+
assert.equal(results[0].target, "artifacts/output.json");
|
|
1814
|
+
});
|
|
1815
|
+
});
|
|
1816
|
+
|
|
1602
1817
|
describe("checkFilePathConsistency self-referential inputs (#4459)", () => {
|
|
1603
1818
|
test("input that is also in the same task's expected_output is not blocking when missing on disk", (t) => {
|
|
1604
1819
|
const tempDir = join(tmpdir(), `pre-exec-self-output-${Date.now()}`);
|
|
@@ -1664,3 +1879,125 @@ describe("checkFilePathConsistency self-referential inputs (#4459)", () => {
|
|
|
1664
1879
|
);
|
|
1665
1880
|
});
|
|
1666
1881
|
});
|
|
1882
|
+
|
|
1883
|
+
// ─── Regression Tests: quote-wrapped inputs treated as literal paths (#3747) ──
|
|
1884
|
+
|
|
1885
|
+
describe("checkFilePathConsistency quote-wrapped annotation (#3747)", () => {
|
|
1886
|
+
test("double-quoted path annotation is stripped before path check", (t) => {
|
|
1887
|
+
// Plan documents sometimes emit `"src/foo.ts"` (double-quote wrapped) as an
|
|
1888
|
+
// input value. The checker must strip the quotes before checking existence so
|
|
1889
|
+
// it doesn't produce a false-positive "file not found" error.
|
|
1890
|
+
const tempDir = join(tmpdir(), `pre-exec-quote-${Date.now()}`);
|
|
1891
|
+
mkdirSync(join(tempDir, "src"), { recursive: true });
|
|
1892
|
+
writeFileSync(join(tempDir, "src/foo.ts"), "// content");
|
|
1893
|
+
t.after(() => rmSync(tempDir, { recursive: true, force: true }));
|
|
1894
|
+
|
|
1895
|
+
const tasks = [
|
|
1896
|
+
createTask({
|
|
1897
|
+
id: "T01",
|
|
1898
|
+
inputs: ['"src/foo.ts"'],
|
|
1899
|
+
expected_output: [],
|
|
1900
|
+
}),
|
|
1901
|
+
];
|
|
1902
|
+
|
|
1903
|
+
const results = checkFilePathConsistency(tasks, tempDir);
|
|
1904
|
+
assert.equal(
|
|
1905
|
+
results.length,
|
|
1906
|
+
0,
|
|
1907
|
+
"Double-quoted path should be stripped and resolved to the real file",
|
|
1908
|
+
);
|
|
1909
|
+
});
|
|
1910
|
+
|
|
1911
|
+
test("single-quoted path annotation is stripped before path check", (t) => {
|
|
1912
|
+
const tempDir = join(tmpdir(), `pre-exec-squote-${Date.now()}`);
|
|
1913
|
+
mkdirSync(join(tempDir, "src"), { recursive: true });
|
|
1914
|
+
writeFileSync(join(tempDir, "src/bar.ts"), "// content");
|
|
1915
|
+
t.after(() => rmSync(tempDir, { recursive: true, force: true }));
|
|
1916
|
+
|
|
1917
|
+
const tasks = [
|
|
1918
|
+
createTask({
|
|
1919
|
+
id: "T01",
|
|
1920
|
+
inputs: ["'src/bar.ts'"],
|
|
1921
|
+
expected_output: [],
|
|
1922
|
+
}),
|
|
1923
|
+
];
|
|
1924
|
+
|
|
1925
|
+
const results = checkFilePathConsistency(tasks, tempDir);
|
|
1926
|
+
assert.equal(
|
|
1927
|
+
results.length,
|
|
1928
|
+
0,
|
|
1929
|
+
"Single-quoted path should be stripped and resolved to the real file",
|
|
1930
|
+
);
|
|
1931
|
+
});
|
|
1932
|
+
|
|
1933
|
+
test("backtick-only wrapped path without annotation resolves correctly", (t) => {
|
|
1934
|
+
// The bare form `src/foo.ts` (no dash annotation) must also work
|
|
1935
|
+
const tempDir = join(tmpdir(), `pre-exec-backtick-bare-${Date.now()}`);
|
|
1936
|
+
mkdirSync(join(tempDir, "src"), { recursive: true });
|
|
1937
|
+
writeFileSync(join(tempDir, "src/baz.ts"), "// content");
|
|
1938
|
+
t.after(() => rmSync(tempDir, { recursive: true, force: true }));
|
|
1939
|
+
|
|
1940
|
+
const tasks = [
|
|
1941
|
+
createTask({
|
|
1942
|
+
id: "T01",
|
|
1943
|
+
inputs: ["`src/baz.ts`"],
|
|
1944
|
+
expected_output: [],
|
|
1945
|
+
}),
|
|
1946
|
+
];
|
|
1947
|
+
|
|
1948
|
+
const results = checkFilePathConsistency(tasks, tempDir);
|
|
1949
|
+
assert.equal(
|
|
1950
|
+
results.length,
|
|
1951
|
+
0,
|
|
1952
|
+
"Bare backtick-wrapped path should resolve to the real file",
|
|
1953
|
+
);
|
|
1954
|
+
});
|
|
1955
|
+
|
|
1956
|
+
test("prose value with spaces inside quotes is skipped (not a path)", () => {
|
|
1957
|
+
// "some description text" contains spaces — should not be checked as a path
|
|
1958
|
+
const tasks = [
|
|
1959
|
+
createTask({
|
|
1960
|
+
id: "T01",
|
|
1961
|
+
inputs: ['"some description text"'],
|
|
1962
|
+
expected_output: [],
|
|
1963
|
+
}),
|
|
1964
|
+
];
|
|
1965
|
+
|
|
1966
|
+
const results = checkFilePathConsistency(tasks, "/tmp");
|
|
1967
|
+
assert.equal(
|
|
1968
|
+
results.length,
|
|
1969
|
+
0,
|
|
1970
|
+
"Quoted prose with spaces should not be treated as a file path",
|
|
1971
|
+
);
|
|
1972
|
+
});
|
|
1973
|
+
|
|
1974
|
+
test("17-error scenario: mixed annotated inputs produce 0 blocking errors", (t) => {
|
|
1975
|
+
// Reproduces the M004-ej6j88/S07 scenario from issue #3747 where a plan with
|
|
1976
|
+
// multiple backtick- and quote-wrapped input strings causes 17 false blocking errors.
|
|
1977
|
+
const tempDir = join(tmpdir(), `pre-exec-3747-scenario-${Date.now()}`);
|
|
1978
|
+
mkdirSync(join(tempDir, "src"), { recursive: true });
|
|
1979
|
+
writeFileSync(join(tempDir, "src/foo.ts"), "// content");
|
|
1980
|
+
writeFileSync(join(tempDir, "src/bar.ts"), "// content");
|
|
1981
|
+
t.after(() => rmSync(tempDir, { recursive: true, force: true }));
|
|
1982
|
+
|
|
1983
|
+
const tasks = [
|
|
1984
|
+
createTask({
|
|
1985
|
+
id: "T01",
|
|
1986
|
+
inputs: [
|
|
1987
|
+
"`src/foo.ts`",
|
|
1988
|
+
'"src/bar.ts"',
|
|
1989
|
+
"some description text",
|
|
1990
|
+
"Existing enum definition",
|
|
1991
|
+
],
|
|
1992
|
+
expected_output: [],
|
|
1993
|
+
}),
|
|
1994
|
+
];
|
|
1995
|
+
|
|
1996
|
+
const results = checkFilePathConsistency(tasks, tempDir);
|
|
1997
|
+
assert.equal(
|
|
1998
|
+
results.length,
|
|
1999
|
+
0,
|
|
2000
|
+
"Annotated file paths and prose inputs should produce zero blocking errors",
|
|
2001
|
+
);
|
|
2002
|
+
});
|
|
2003
|
+
});
|
|
@@ -191,7 +191,12 @@ function createFailingTasks(): void {
|
|
|
191
191
|
estimate: "1h",
|
|
192
192
|
files: [],
|
|
193
193
|
verify: "npm test",
|
|
194
|
-
inputs: [
|
|
194
|
+
inputs: [
|
|
195
|
+
"nonexistent-file-that-does-not-exist.ts",
|
|
196
|
+
"missing-second-file.ts",
|
|
197
|
+
"missing-third-file.ts",
|
|
198
|
+
"missing-fourth-file.ts",
|
|
199
|
+
],
|
|
195
200
|
expectedOutput: [],
|
|
196
201
|
observabilityImpact: "",
|
|
197
202
|
},
|
|
@@ -308,6 +313,32 @@ describe("Pre-execution checks → pauseAuto wiring", () => {
|
|
|
308
313
|
String(call.arguments[0]).includes("Pre-execution checks failed")
|
|
309
314
|
);
|
|
310
315
|
assert.ok(errorNotify, "Should show error notification about pre-execution check failure");
|
|
316
|
+
const errorMessage = String(errorNotify.arguments[0]);
|
|
317
|
+
assert.match(
|
|
318
|
+
errorMessage,
|
|
319
|
+
/Pre-execution checks failed: \d+ blocking issue/,
|
|
320
|
+
"failure notification should include the blocking issue count",
|
|
321
|
+
);
|
|
322
|
+
assert.ok(
|
|
323
|
+
errorMessage.includes("[file] nonexistent-file-that-does-not-exist.ts: Task T01 references"),
|
|
324
|
+
"failure notification should include category, target, and message details",
|
|
325
|
+
);
|
|
326
|
+
assert.ok(
|
|
327
|
+
errorMessage.includes("[file] missing-third-file.ts: Task T01 references"),
|
|
328
|
+
"failure notification should include up to three actionable check details",
|
|
329
|
+
);
|
|
330
|
+
assert.ok(
|
|
331
|
+
!errorMessage.includes("missing-fourth-file.ts"),
|
|
332
|
+
"failure notification should truncate details beyond the display limit",
|
|
333
|
+
);
|
|
334
|
+
assert.ok(
|
|
335
|
+
errorMessage.includes("...and 1 more"),
|
|
336
|
+
"failure notification should summarize truncated blocking checks",
|
|
337
|
+
);
|
|
338
|
+
assert.ok(
|
|
339
|
+
errorMessage.includes(join(".gsd", "milestones", "M001", "slices", "S01", "S01-PRE-EXEC-VERIFY.json")),
|
|
340
|
+
"failure notification should point to the relative pre-exec evidence file path",
|
|
341
|
+
);
|
|
311
342
|
});
|
|
312
343
|
|
|
313
344
|
test("pauseAuto is called when enhanced_verification_strict: true and pre-execution returns warn", async () => {
|
|
@@ -12,6 +12,7 @@ import assert from "node:assert/strict";
|
|
|
12
12
|
import { readFileSync, mkdtempSync, mkdirSync, writeFileSync, existsSync, readdirSync, rmSync } from "node:fs";
|
|
13
13
|
import { join } from "node:path";
|
|
14
14
|
import { tmpdir } from "node:os";
|
|
15
|
+
import { extractSourceRegion } from "./test-helpers.ts";
|
|
15
16
|
|
|
16
17
|
test("#2684: preferences files are NOT in ROOT_STATE_FILES (forward-only sync)", () => {
|
|
17
18
|
const srcPath = join(import.meta.dirname, "..", "auto-worktree.ts");
|
|
@@ -49,7 +50,7 @@ test("copyPlanningArtifacts prefers canonical PREFERENCES.md with lowercase fall
|
|
|
49
50
|
assert.ok(fnIdx !== -1, "copyPlanningArtifacts function exists");
|
|
50
51
|
|
|
51
52
|
// Extract function body (up to the next top-level function)
|
|
52
|
-
const fnBody = src
|
|
53
|
+
const fnBody = extractSourceRegion(src, "function copyPlanningArtifacts");
|
|
53
54
|
|
|
54
55
|
assert.ok(
|
|
55
56
|
fnBody.includes("PROJECT_PREFERENCES_FILE") && fnBody.includes("LEGACY_PROJECT_PREFERENCES_FILE"),
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// Guard test — every key in KNOWN_PREFERENCE_KEYS must be reachable from the
|
|
2
|
+
// /gsd prefs wizard. Without this guard, a new preference can be added to the
|
|
3
|
+
// schema without anyone wiring it into the TUI, silently re-creating the gap
|
|
4
|
+
// this test exists to prevent.
|
|
5
|
+
|
|
6
|
+
import test from "node:test";
|
|
7
|
+
import assert from "node:assert/strict";
|
|
8
|
+
import { readFileSync } from "node:fs";
|
|
9
|
+
|
|
10
|
+
import { KNOWN_PREFERENCE_KEYS } from "../preferences-types.ts";
|
|
11
|
+
|
|
12
|
+
// Keys exposed via a dedicated command rather than the wizard. They're still
|
|
13
|
+
// reachable by the user, just not inside the category menu flow. If you add a
|
|
14
|
+
// new key here, add a comment explaining where it lives.
|
|
15
|
+
const EXPOSED_OUTSIDE_WIZARD = new Set<string>([
|
|
16
|
+
"version", // auto-managed by writePreferencesFile
|
|
17
|
+
"modelOverrides", // advanced routing — edit PREFERENCES.md directly (not in KNOWN_PREFERENCE_KEYS)
|
|
18
|
+
"context_mode", // advanced sandbox config (gsd_exec + compaction) — enabled by default; edit PREFERENCES.md directly to tune timeouts/caps. Wizard coverage tracked separately.
|
|
19
|
+
]);
|
|
20
|
+
|
|
21
|
+
test("every KNOWN_PREFERENCE_KEYS entry is reachable from the wizard source", () => {
|
|
22
|
+
const src = readFileSync(
|
|
23
|
+
new URL("../commands-prefs-wizard.ts", import.meta.url),
|
|
24
|
+
"utf-8",
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
const missing: string[] = [];
|
|
28
|
+
for (const key of KNOWN_PREFERENCE_KEYS) {
|
|
29
|
+
if (EXPOSED_OUTSIDE_WIZARD.has(key)) continue;
|
|
30
|
+
// The key must appear somewhere in the wizard — either as a direct
|
|
31
|
+
// prefs[...] / pref reference, or in the orderedKeys serialization list.
|
|
32
|
+
// A plain substring match is enough because all prefs-wizard references
|
|
33
|
+
// use the exact key name.
|
|
34
|
+
if (!src.includes(`"${key}"`) && !src.includes(`.${key}`)) {
|
|
35
|
+
missing.push(key);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
assert.deepEqual(
|
|
40
|
+
missing,
|
|
41
|
+
[],
|
|
42
|
+
`These preference keys are in KNOWN_PREFERENCE_KEYS but are not referenced anywhere in the /gsd prefs wizard — they cannot be configured through the UI. Either add wizard coverage or add them to EXPOSED_OUTSIDE_WIZARD with an explanatory comment:\n${missing.join("\n")}`,
|
|
43
|
+
);
|
|
44
|
+
});
|
|
@@ -64,6 +64,18 @@ describe("prompt-cache-optimizer: classifySection", () => {
|
|
|
64
64
|
assert.equal(classifySection("overrides"), "semi-static");
|
|
65
65
|
});
|
|
66
66
|
|
|
67
|
+
// Regression: issue #4719 — KNOWLEDGE falls through to dynamic default.
|
|
68
|
+
// Knowledge content is reused across all tasks within a milestone, so it
|
|
69
|
+
// must be classified as semi-static to qualify for prefix caching when the
|
|
70
|
+
// cache optimizer is wired into the prompt path.
|
|
71
|
+
it("classifies knowledge as semi-static (issue #4719)", () => {
|
|
72
|
+
assert.equal(classifySection("knowledge"), "semi-static");
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
it("classifies project-knowledge as semi-static (issue #4719)", () => {
|
|
76
|
+
assert.equal(classifySection("project-knowledge"), "semi-static");
|
|
77
|
+
});
|
|
78
|
+
|
|
67
79
|
it("classifies task-plan as dynamic", () => {
|
|
68
80
|
assert.equal(classifySection("task-plan"), "dynamic");
|
|
69
81
|
});
|
|
@@ -13,6 +13,7 @@ import assert from 'node:assert/strict';
|
|
|
13
13
|
import { readFileSync } from 'node:fs';
|
|
14
14
|
import { fileURLToPath } from 'node:url';
|
|
15
15
|
import { dirname, join } from 'node:path';
|
|
16
|
+
import { extractSourceRegion } from "./test-helpers.ts";
|
|
16
17
|
|
|
17
18
|
const __filename = fileURLToPath(import.meta.url);
|
|
18
19
|
const __dirname = dirname(__filename);
|
|
@@ -69,11 +70,21 @@ describe('register-extension _gsdEpipeGuard (#3696)', () => {
|
|
|
69
70
|
|
|
70
71
|
describe('register-hooks session_before_compact (#3696)', () => {
|
|
71
72
|
test('session_before_compact only checks isAutoActive', () => {
|
|
72
|
-
//
|
|
73
|
-
|
|
73
|
+
// Anchor on the full registration token rather than the bare event name —
|
|
74
|
+
// prevents matching unrelated substring occurrences.
|
|
75
|
+
const compactIdx = registerHooksSrc.indexOf('pi.on("session_before_compact"');
|
|
74
76
|
assert.ok(compactIdx > -1, 'session_before_compact hook should exist');
|
|
75
|
-
// The first check in the handler should be isAutoActive(), not isAutoPaused()
|
|
76
|
-
|
|
77
|
+
// The first check in the handler should be isAutoActive(), not isAutoPaused().
|
|
78
|
+
// Bound the region to this single handler — register-hooks.ts contains
|
|
79
|
+
// multiple pi.on("session_before_compact") handlers and a later handler
|
|
80
|
+
// legitimately references isAutoPaused.
|
|
81
|
+
const afterCompact = extractSourceRegion(
|
|
82
|
+
registerHooksSrc,
|
|
83
|
+
'pi.on("session_before_compact"',
|
|
84
|
+
'pi.on("',
|
|
85
|
+
// NB: endAnchor search starts AFTER the startAnchor, so the next
|
|
86
|
+
// pi.on("... matches the subsequent handler rather than this one.
|
|
87
|
+
);
|
|
77
88
|
assert.match(afterCompact, /isAutoActive\(\)/,
|
|
78
89
|
'session_before_compact should check isAutoActive()');
|
|
79
90
|
// Should NOT block compaction when paused
|
|
@@ -13,7 +13,12 @@ import { fileURLToPath } from "node:url";
|
|
|
13
13
|
import { classifyError, isTransient, isTransientNetworkError } from "../error-classifier.ts";
|
|
14
14
|
import { pauseAutoForProviderError } from "../provider-error-pause.ts";
|
|
15
15
|
import { resumeAutoAfterProviderDelay } from "../bootstrap/provider-error-resume.ts";
|
|
16
|
+
import { MAX_TRANSIENT_AUTO_RESUMES } from "../bootstrap/agent-end-recovery.ts";
|
|
16
17
|
import { getNextFallbackModel } from "../preferences.ts";
|
|
18
|
+
// Zero-import module — imported by path rather than through the package
|
|
19
|
+
// barrel to avoid pulling the full AgentSession / @gsd/pi-ai dep graph into
|
|
20
|
+
// this unit test (see #4837).
|
|
21
|
+
import { RETRYABLE_ERROR_RE } from "../../../../../packages/pi-coding-agent/src/core/retryable-error-regex.ts";
|
|
17
22
|
|
|
18
23
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
19
24
|
|
|
@@ -404,6 +409,7 @@ test("resumeAutoAfterProviderDelay restarts paused auto-mode from the recorded b
|
|
|
404
409
|
stepMode: true,
|
|
405
410
|
basePath: "/tmp/project",
|
|
406
411
|
}),
|
|
412
|
+
resetTransientRetryState: () => {},
|
|
407
413
|
startAuto: async (_ctx, _pi, base, verboseMode, options) => {
|
|
408
414
|
startCalls.push({ base, verboseMode, step: options?.step });
|
|
409
415
|
},
|
|
@@ -428,6 +434,7 @@ test("resumeAutoAfterProviderDelay does not double-start when auto-mode is alrea
|
|
|
428
434
|
stepMode: false,
|
|
429
435
|
basePath: "/tmp/project",
|
|
430
436
|
}),
|
|
437
|
+
resetTransientRetryState: () => {},
|
|
431
438
|
startAuto: async () => {
|
|
432
439
|
startCalls += 1;
|
|
433
440
|
},
|
|
@@ -458,6 +465,7 @@ test("resumeAutoAfterProviderDelay leaves auto paused when no base path is avail
|
|
|
458
465
|
stepMode: false,
|
|
459
466
|
basePath: "",
|
|
460
467
|
}),
|
|
468
|
+
resetTransientRetryState: () => {},
|
|
461
469
|
startAuto: async () => {
|
|
462
470
|
startCalls += 1;
|
|
463
471
|
},
|
|
@@ -474,6 +482,35 @@ test("resumeAutoAfterProviderDelay leaves auto paused when no base path is avail
|
|
|
474
482
|
]);
|
|
475
483
|
});
|
|
476
484
|
|
|
485
|
+
test("resumeAutoAfterProviderDelay resets provider retry state without clearing session-timeout attempts", async () => {
|
|
486
|
+
const calls: string[] = [];
|
|
487
|
+
|
|
488
|
+
const result = await resumeAutoAfterProviderDelay(
|
|
489
|
+
{} as any,
|
|
490
|
+
{ ui: { notify() {} } } as any,
|
|
491
|
+
{
|
|
492
|
+
getSnapshot: () => ({
|
|
493
|
+
active: false,
|
|
494
|
+
paused: true,
|
|
495
|
+
stepMode: false,
|
|
496
|
+
basePath: "/tmp/project",
|
|
497
|
+
}),
|
|
498
|
+
resetTransientRetryState: () => {
|
|
499
|
+
calls.push("reset-transient");
|
|
500
|
+
},
|
|
501
|
+
startAuto: async () => {
|
|
502
|
+
calls.push("start-auto");
|
|
503
|
+
},
|
|
504
|
+
},
|
|
505
|
+
);
|
|
506
|
+
|
|
507
|
+
assert.equal(result, "resumed");
|
|
508
|
+
assert.deepEqual(calls, [
|
|
509
|
+
"reset-transient",
|
|
510
|
+
"start-auto",
|
|
511
|
+
]);
|
|
512
|
+
});
|
|
513
|
+
|
|
477
514
|
// ── Escalating backoff for transient errors (#1166) ─────────────────────────
|
|
478
515
|
|
|
479
516
|
test("agent-end-recovery.ts tracks consecutive transient errors for escalating backoff", () => {
|
|
@@ -567,31 +604,6 @@ test("resetTransientRetryState is exported from agent-end-recovery.ts", () => {
|
|
|
567
604
|
);
|
|
568
605
|
});
|
|
569
606
|
|
|
570
|
-
test("provider-error-resume.ts calls resetTransientRetryState before startAuto", () => {
|
|
571
|
-
const src = readFileSync(join(__dirname, "..", "bootstrap", "provider-error-resume.ts"), "utf-8");
|
|
572
|
-
assert.ok(
|
|
573
|
-
src.includes("resetTransientRetryState"),
|
|
574
|
-
"provider-error-resume.ts must import and call resetTransientRetryState",
|
|
575
|
-
);
|
|
576
|
-
// Ensure reset is called BEFORE startAuto — order matters
|
|
577
|
-
const resetIdx = src.indexOf("resetTransientRetryState()");
|
|
578
|
-
const startIdx = src.indexOf("await deps.startAuto(");
|
|
579
|
-
assert.ok(
|
|
580
|
-
resetIdx !== -1 && startIdx !== -1 && resetIdx < startIdx,
|
|
581
|
-
"resetTransientRetryState() must be called before deps.startAuto()",
|
|
582
|
-
);
|
|
583
|
-
// Session timeout counter must also be reset before startAuto
|
|
584
|
-
assert.ok(
|
|
585
|
-
src.includes("resetSessionTimeoutState"),
|
|
586
|
-
"provider-error-resume.ts must import and call resetSessionTimeoutState",
|
|
587
|
-
);
|
|
588
|
-
const sessionResetIdx = src.indexOf("resetSessionTimeoutState()");
|
|
589
|
-
assert.ok(
|
|
590
|
-
sessionResetIdx !== -1 && startIdx !== -1 && sessionResetIdx < startIdx,
|
|
591
|
-
"resetSessionTimeoutState() must be called before deps.startAuto()",
|
|
592
|
-
);
|
|
593
|
-
});
|
|
594
|
-
|
|
595
607
|
// ── Fix 2: Session creation timeout treated as transient in phases.ts ───────
|
|
596
608
|
|
|
597
609
|
test("phases.ts handles timeout session-creation failures with pause instead of stopAuto", () => {
|
|
@@ -670,13 +682,12 @@ test("phases.ts resets session timeout counter on successful unit completion", (
|
|
|
670
682
|
// ── Fix 3: MAX_TRANSIENT_AUTO_RESUMES raised to 8 ───────────────────────────
|
|
671
683
|
|
|
672
684
|
test("MAX_TRANSIENT_AUTO_RESUMES is at least 8 for sustained overload resilience", () => {
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
const value = Number(match![1]);
|
|
685
|
+
// Import the real constant rather than regex-scraping the source literal —
|
|
686
|
+
// this way the assertion cannot silently drift if the symbol is renamed or
|
|
687
|
+
// the value is moved. See #4837.
|
|
677
688
|
assert.ok(
|
|
678
|
-
|
|
679
|
-
`MAX_TRANSIENT_AUTO_RESUMES must be >= 8 for sustained overload resilience, got ${
|
|
689
|
+
MAX_TRANSIENT_AUTO_RESUMES >= 8,
|
|
690
|
+
`MAX_TRANSIENT_AUTO_RESUMES must be >= 8 for sustained overload resilience, got ${MAX_TRANSIENT_AUTO_RESUMES}`,
|
|
680
691
|
);
|
|
681
692
|
});
|
|
682
693
|
|
|
@@ -724,20 +735,22 @@ test("classifyError: 'context window' with 'exceed' is transient server", () =>
|
|
|
724
735
|
// ── agent-session retryable regex handles server_error (#1166) ──────────────
|
|
725
736
|
|
|
726
737
|
test("agent-session retryable error regex matches server_error (underscore)", () => {
|
|
727
|
-
//
|
|
728
|
-
//
|
|
729
|
-
//
|
|
730
|
-
//
|
|
731
|
-
|
|
738
|
+
// Import the real regex from the retry-handler so this test can never
|
|
739
|
+
// silently drift from runtime behaviour. The regex must match both
|
|
740
|
+
// "server error" (space) and "server_error" (underscore) to properly
|
|
741
|
+
// classify Codex streaming errors as retryable.
|
|
742
|
+
// "temporarily backed off" is intentionally excluded — see #3429 / #4837.
|
|
732
743
|
|
|
733
744
|
// server_error (with underscore — Codex streaming error format)
|
|
734
|
-
assert.ok(
|
|
745
|
+
assert.ok(RETRYABLE_ERROR_RE.test("Codex server_error: An error occurred"));
|
|
735
746
|
// server error (with space — traditional HTTP error format)
|
|
736
|
-
assert.ok(
|
|
747
|
+
assert.ok(RETRYABLE_ERROR_RE.test("server error occurred"));
|
|
737
748
|
// internal_error (with underscore)
|
|
738
|
-
assert.ok(
|
|
749
|
+
assert.ok(RETRYABLE_ERROR_RE.test("internal_error: something went wrong"));
|
|
739
750
|
// internal error (with space)
|
|
740
|
-
assert.ok(
|
|
751
|
+
assert.ok(RETRYABLE_ERROR_RE.test("internal error"));
|
|
741
752
|
// non-retryable errors must not match
|
|
742
|
-
assert.ok(!
|
|
753
|
+
assert.ok(!RETRYABLE_ERROR_RE.test("model not found"));
|
|
754
|
+
// "temporarily backed off" must NOT be matched (intentional exclusion #3429)
|
|
755
|
+
assert.ok(!RETRYABLE_ERROR_RE.test("temporarily backed off"));
|
|
743
756
|
});
|