gsd-pi 2.58.0-dev.778d6ac → 2.58.0-dev.d63175c
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/cli.js +35 -49
- package/dist/headless-ui.d.ts +0 -17
- package/dist/headless-ui.js +3 -97
- package/dist/headless.js +6 -67
- package/dist/help-text.js +0 -1
- package/dist/onboarding.js +0 -44
- package/dist/resource-loader.js +1 -16
- package/dist/resources/agents/researcher.md +1 -1
- package/dist/resources/extensions/ask-user-questions.js +3 -16
- package/dist/resources/extensions/async-jobs/extension-manifest.json +1 -1
- package/dist/resources/extensions/bg-shell/extension-manifest.json +1 -1
- package/dist/resources/extensions/browser-tools/extension-manifest.json +1 -1
- package/dist/resources/extensions/claude-code-cli/partial-builder.js +6 -14
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +36 -59
- package/dist/resources/extensions/context7/extension-manifest.json +1 -1
- package/dist/resources/extensions/get-secrets-from-user.js +5 -8
- package/dist/resources/extensions/google-search/extension-manifest.json +1 -1
- package/dist/resources/extensions/google-search/index.js +1 -2
- package/dist/resources/extensions/gsd/auto/phases.js +21 -25
- package/dist/resources/extensions/gsd/auto-artifact-paths.js +2 -2
- package/dist/resources/extensions/gsd/auto-dashboard.js +20 -37
- package/dist/resources/extensions/gsd/auto-dispatch.js +2 -17
- package/dist/resources/extensions/gsd/auto-model-selection.js +3 -26
- package/dist/resources/extensions/gsd/auto-post-unit.js +4 -16
- package/dist/resources/extensions/gsd/auto-prompts.js +1 -1
- package/dist/resources/extensions/gsd/auto-recovery.js +5 -13
- package/dist/resources/extensions/gsd/auto-start.js +22 -35
- package/dist/resources/extensions/gsd/auto-worktree.js +12 -196
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +0 -32
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +8 -80
- package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +1 -32
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +18 -33
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +11 -44
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +0 -67
- package/dist/resources/extensions/gsd/captures.js +4 -56
- package/dist/resources/extensions/gsd/db-writer.js +8 -116
- package/dist/resources/extensions/gsd/doctor-git-checks.js +0 -28
- package/dist/resources/extensions/gsd/doctor-providers.js +1 -2
- package/dist/resources/extensions/gsd/doctor-runtime-checks.js +4 -5
- package/dist/resources/extensions/gsd/doctor.js +1 -3
- package/dist/resources/extensions/gsd/error-classifier.js +10 -13
- package/dist/resources/extensions/gsd/extension-manifest.json +1 -16
- package/dist/resources/extensions/gsd/forensics.js +20 -123
- package/dist/resources/extensions/gsd/git-service.js +1 -23
- package/dist/resources/extensions/gsd/gitignore.js +0 -33
- package/dist/resources/extensions/gsd/gsd-db.js +9 -36
- package/dist/resources/extensions/gsd/guided-flow.js +44 -106
- package/dist/resources/extensions/gsd/health-widget-core.js +0 -31
- package/dist/resources/extensions/gsd/health-widget.js +0 -17
- package/dist/resources/extensions/gsd/index.js +1 -1
- package/dist/resources/extensions/gsd/memory-extractor.js +0 -7
- package/dist/resources/extensions/gsd/migrate-external.js +1 -8
- package/dist/resources/extensions/gsd/model-cost-table.js +0 -18
- package/dist/resources/extensions/gsd/model-router.js +1 -35
- package/dist/resources/extensions/gsd/native-git-bridge.js +0 -17
- package/dist/resources/extensions/gsd/notifications.js +1 -16
- package/dist/resources/extensions/gsd/parallel-eligibility.js +2 -13
- package/dist/resources/extensions/gsd/parallel-merge.js +5 -78
- package/dist/resources/extensions/gsd/parsers-legacy.js +3 -20
- package/dist/resources/extensions/gsd/paths.js +0 -43
- package/dist/resources/extensions/gsd/preferences-models.js +1 -14
- package/dist/resources/extensions/gsd/preferences-types.js +1 -2
- package/dist/resources/extensions/gsd/preferences.js +16 -13
- package/dist/resources/extensions/gsd/prompt-loader.js +1 -4
- package/dist/resources/extensions/gsd/prompts/complete-milestone.md +1 -1
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +2 -4
- package/dist/resources/extensions/gsd/prompts/discuss-headless.md +1 -1
- package/dist/resources/extensions/gsd/prompts/discuss.md +1 -1
- package/dist/resources/extensions/gsd/prompts/execute-task.md +1 -3
- package/dist/resources/extensions/gsd/prompts/forensics.md +2 -2
- package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +1 -1
- package/dist/resources/extensions/gsd/prompts/guided-discuss-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +0 -2
- package/dist/resources/extensions/gsd/prompts/rethink.md +1 -1
- package/dist/resources/extensions/gsd/prompts/triage-captures.md +0 -1
- package/dist/resources/extensions/gsd/repo-identity.js +11 -205
- package/dist/resources/extensions/gsd/rethink.js +0 -5
- package/dist/resources/extensions/gsd/roadmap-slices.js +4 -5
- package/dist/resources/extensions/gsd/state.js +27 -85
- package/dist/resources/extensions/gsd/tests/dist-redirect.mjs +1 -20
- package/dist/resources/extensions/gsd/tools/complete-task.js +71 -34
- package/dist/resources/extensions/gsd/tools/plan-milestone.js +2 -12
- package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +1 -29
- package/dist/resources/extensions/gsd/tools/validate-milestone.js +3 -14
- package/dist/resources/extensions/gsd/triage-resolution.js +7 -22
- package/dist/resources/extensions/gsd/undo.js +2 -2
- package/dist/resources/extensions/gsd/unit-ownership.js +33 -164
- package/dist/resources/extensions/gsd/verdict-parser.js +8 -20
- package/dist/resources/extensions/gsd/workflow-manifest.js +5 -24
- package/dist/resources/extensions/gsd/workflow-projections.js +63 -95
- package/dist/resources/extensions/gsd/workflow-reconcile.js +5 -35
- package/dist/resources/extensions/gsd/workspace-index.js +0 -24
- package/dist/resources/extensions/gsd/worktree-manager.js +1 -105
- package/dist/resources/extensions/gsd/worktree-resolver.js +3 -20
- package/dist/resources/extensions/mcp-client/index.js +7 -11
- package/dist/resources/extensions/search-the-web/extension-manifest.json +1 -1
- package/dist/resources/extensions/shared/interview-ui.js +1 -11
- package/dist/resources/skills/create-gsd-extension/SKILL.md +3 -5
- package/dist/resources/skills/create-gsd-extension/references/key-rules-gotchas.md +4 -5
- package/dist/resources/skills/create-gsd-extension/workflows/add-capability.md +2 -2
- package/dist/resources/skills/create-gsd-extension/workflows/create-extension.md +4 -4
- package/dist/resources/skills/create-gsd-extension/workflows/debug-extension.md +3 -5
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +17 -17
- package/dist/web/standalone/.next/build-manifest.json +3 -3
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
- package/dist/web/standalone/.next/required-server-files.json +1 -1
- package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.html +2 -2
- package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +2 -2
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +17 -17
- package/dist/web/standalone/.next/server/chunks/2229.js +2 -2
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/dist/web/standalone/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/.next/server/pages/500.html +2 -2
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/web/standalone/.next/static/chunks/6502.8b732f67a11b11b4.js +9 -0
- package/dist/web/standalone/.next/static/chunks/{webpack-a1c1e452c6b32d04.js → webpack-61d3afac6d0f0ce7.js} +1 -1
- package/dist/web/standalone/.next/static/css/a58ef8a151aa0493.css +1 -0
- package/dist/web/standalone/server.js +1 -1
- package/dist/web-mode.js +1 -2
- package/package.json +2 -2
- package/packages/native/dist/ast/index.js +5 -9
- package/packages/native/dist/ast/types.js +1 -2
- package/packages/native/dist/clipboard/index.js +7 -12
- package/packages/native/dist/clipboard/types.js +1 -2
- package/packages/native/dist/diff/index.js +7 -12
- package/packages/native/dist/diff/types.js +1 -2
- package/packages/native/dist/fd/index.js +3 -6
- package/packages/native/dist/fd/types.js +1 -2
- package/packages/native/dist/glob/index.js +5 -9
- package/packages/native/dist/glob/types.js +1 -2
- package/packages/native/dist/grep/index.js +5 -9
- package/packages/native/dist/grep/types.js +1 -2
- package/packages/native/dist/gsd-parser/index.js +11 -18
- package/packages/native/dist/gsd-parser/types.js +1 -2
- package/packages/native/dist/highlight/index.js +7 -12
- package/packages/native/dist/highlight/types.js +1 -2
- package/packages/native/dist/html/index.js +3 -6
- package/packages/native/dist/html/types.js +1 -2
- package/packages/native/dist/image/index.js +5 -10
- package/packages/native/dist/image/types.js +4 -7
- package/packages/native/dist/index.js +17 -70
- package/packages/native/dist/json-parse/index.js +8 -13
- package/packages/native/dist/native.js +10 -47
- package/packages/native/dist/ps/index.js +9 -15
- package/packages/native/dist/ps/types.js +1 -2
- package/packages/native/dist/stream-process/index.js +7 -12
- package/packages/native/dist/text/index.js +14 -24
- package/packages/native/dist/text/types.js +2 -5
- package/packages/native/dist/truncate/index.js +7 -12
- package/packages/native/dist/ttsr/index.js +7 -12
- package/packages/native/dist/ttsr/types.js +1 -2
- package/packages/native/dist/xxhash/index.js +5 -9
- package/packages/native/package.json +19 -19
- package/packages/native/src/native.ts +8 -9
- package/packages/pi-agent-core/dist/agent-loop.js +2 -3
- package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/packages/pi-agent-core/dist/proxy.d.ts +1 -1
- package/packages/pi-agent-core/dist/proxy.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/proxy.js.map +1 -1
- package/packages/pi-agent-core/src/agent-loop.ts +2 -3
- package/packages/pi-agent-core/src/proxy.ts +1 -1
- package/packages/pi-ai/dist/env-api-keys.js +0 -1
- package/packages/pi-ai/dist/env-api-keys.js.map +1 -1
- package/packages/pi-ai/dist/index.d.ts +0 -1
- package/packages/pi-ai/dist/index.d.ts.map +1 -1
- package/packages/pi-ai/dist/index.js +0 -1
- package/packages/pi-ai/dist/index.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.js +2 -19
- package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
- package/packages/pi-ai/dist/types.d.ts +3 -3
- package/packages/pi-ai/dist/types.d.ts.map +1 -1
- package/packages/pi-ai/dist/types.js.map +1 -1
- package/packages/pi-ai/dist/utils/json-parse.d.ts +0 -3
- package/packages/pi-ai/dist/utils/json-parse.d.ts.map +1 -1
- package/packages/pi-ai/dist/utils/json-parse.js +1 -24
- package/packages/pi-ai/dist/utils/json-parse.js.map +1 -1
- package/packages/pi-ai/src/env-api-keys.ts +0 -1
- package/packages/pi-ai/src/index.ts +0 -1
- package/packages/pi-ai/src/providers/anthropic-shared.ts +2 -17
- package/packages/pi-ai/src/types.ts +2 -3
- package/packages/pi-ai/src/utils/json-parse.ts +1 -28
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts +0 -4
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js +0 -31
- package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts +1 -17
- package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.js +2 -62
- package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/exec.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/exec.js +1 -3
- package/packages/pi-coding-agent/dist/core/exec.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +0 -4
- package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.js +0 -2
- package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts +0 -5
- package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.js +0 -5
- package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/index.d.ts +1 -1
- package/packages/pi-coding-agent/dist/core/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/index.js +1 -1
- package/packages/pi-coding-agent/dist/core/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/index.js +0 -3
- package/packages/pi-coding-agent/dist/core/lsp/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/lspmux.js +0 -3
- package/packages/pi-coding-agent/dist/core/lsp/lspmux.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/messages.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/messages.js +2 -31
- package/packages/pi-coding-agent/dist/core/messages.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-resolver.js +0 -1
- package/packages/pi-coding-agent/dist/core/model-resolver.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/resource-loader.d.ts +0 -10
- package/packages/pi-coding-agent/dist/core/resource-loader.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/resource-loader.js +1 -12
- package/packages/pi-coding-agent/dist/core/resource-loader.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.d.ts +0 -6
- package/packages/pi-coding-agent/dist/core/retry-handler.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.js +1 -48
- package/packages/pi-coding-agent/dist/core/retry-handler.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/hashline-read.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/hashline-read.js +3 -10
- package/packages/pi-coding-agent/dist/core/tools/hashline-read.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/read.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/read.js +4 -13
- package/packages/pi-coding-agent/dist/core/tools/read.js.map +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts +2 -2
- package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/index.js +1 -1
- package/packages/pi-coding-agent/dist/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +0 -4
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.d.ts +0 -1
- package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.js +0 -5
- package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.js.map +1 -1
- package/packages/pi-coding-agent/src/core/agent-session.ts +1 -38
- package/packages/pi-coding-agent/src/core/compaction/compaction.ts +1 -94
- package/packages/pi-coding-agent/src/core/exec.ts +1 -3
- package/packages/pi-coding-agent/src/core/extensions/index.ts +0 -4
- package/packages/pi-coding-agent/src/core/extensions/loader.ts +0 -5
- package/packages/pi-coding-agent/src/core/index.ts +0 -6
- package/packages/pi-coding-agent/src/core/lsp/index.ts +0 -3
- package/packages/pi-coding-agent/src/core/lsp/lspmux.ts +0 -3
- package/packages/pi-coding-agent/src/core/messages.ts +2 -29
- package/packages/pi-coding-agent/src/core/model-resolver.ts +0 -1
- package/packages/pi-coding-agent/src/core/resource-loader.ts +1 -20
- package/packages/pi-coding-agent/src/core/retry-handler.ts +1 -52
- package/packages/pi-coding-agent/src/core/tools/hashline-read.ts +3 -11
- package/packages/pi-coding-agent/src/core/tools/read.ts +4 -14
- package/packages/pi-coding-agent/src/index.ts +0 -6
- package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +0 -7
- package/packages/pi-coding-agent/src/modes/rpc/remote-terminal.ts +0 -6
- package/packages/pi-tui/dist/terminal.d.ts +0 -2
- package/packages/pi-tui/dist/terminal.d.ts.map +1 -1
- package/packages/pi-tui/dist/terminal.js +0 -9
- package/packages/pi-tui/dist/terminal.js.map +1 -1
- package/packages/pi-tui/dist/tui.d.ts.map +1 -1
- package/packages/pi-tui/dist/tui.js +0 -9
- package/packages/pi-tui/dist/tui.js.map +1 -1
- package/packages/pi-tui/src/terminal.ts +0 -14
- package/packages/pi-tui/src/tui.ts +0 -8
- package/scripts/ensure-workspace-builds.cjs +14 -45
- package/src/resources/agents/researcher.md +1 -1
- package/src/resources/extensions/ask-user-questions.ts +3 -21
- package/src/resources/extensions/async-jobs/extension-manifest.json +1 -1
- package/src/resources/extensions/bg-shell/extension-manifest.json +1 -1
- package/src/resources/extensions/browser-tools/extension-manifest.json +1 -1
- package/src/resources/extensions/claude-code-cli/partial-builder.ts +6 -13
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +35 -63
- package/src/resources/extensions/claude-code-cli/tests/partial-builder.test.ts +0 -28
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +1 -108
- package/src/resources/extensions/context7/extension-manifest.json +1 -1
- package/src/resources/extensions/get-secrets-from-user.ts +5 -8
- package/src/resources/extensions/google-search/extension-manifest.json +1 -1
- package/src/resources/extensions/google-search/index.ts +1 -2
- package/src/resources/extensions/gsd/auto/loop-deps.ts +0 -1
- package/src/resources/extensions/gsd/auto/phases.ts +34 -43
- package/src/resources/extensions/gsd/auto-artifact-paths.ts +2 -2
- package/src/resources/extensions/gsd/auto-dashboard.ts +19 -37
- package/src/resources/extensions/gsd/auto-dispatch.ts +2 -18
- package/src/resources/extensions/gsd/auto-model-selection.ts +5 -26
- package/src/resources/extensions/gsd/auto-post-unit.ts +4 -18
- package/src/resources/extensions/gsd/auto-prompts.ts +1 -1
- package/src/resources/extensions/gsd/auto-recovery.ts +5 -12
- package/src/resources/extensions/gsd/auto-start.ts +26 -35
- package/src/resources/extensions/gsd/auto-worktree.ts +9 -190
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +0 -31
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +8 -85
- package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +1 -38
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +19 -31
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +11 -50
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +0 -75
- package/src/resources/extensions/gsd/captures.ts +3 -63
- package/src/resources/extensions/gsd/db-writer.ts +7 -140
- package/src/resources/extensions/gsd/doctor-git-checks.ts +0 -26
- package/src/resources/extensions/gsd/doctor-providers.ts +1 -2
- package/src/resources/extensions/gsd/doctor-runtime-checks.ts +4 -5
- package/src/resources/extensions/gsd/doctor.ts +1 -3
- package/src/resources/extensions/gsd/error-classifier.ts +11 -14
- package/src/resources/extensions/gsd/extension-manifest.json +1 -16
- package/src/resources/extensions/gsd/forensics.ts +20 -144
- package/src/resources/extensions/gsd/git-service.ts +3 -26
- package/src/resources/extensions/gsd/gitignore.ts +0 -33
- package/src/resources/extensions/gsd/gsd-db.ts +7 -43
- package/src/resources/extensions/gsd/guided-flow.ts +45 -114
- package/src/resources/extensions/gsd/health-widget-core.ts +0 -34
- package/src/resources/extensions/gsd/health-widget.ts +0 -17
- package/src/resources/extensions/gsd/index.ts +0 -1
- package/src/resources/extensions/gsd/memory-extractor.ts +0 -8
- package/src/resources/extensions/gsd/migrate-external.ts +1 -9
- package/src/resources/extensions/gsd/model-cost-table.ts +0 -19
- package/src/resources/extensions/gsd/model-router.ts +1 -35
- package/src/resources/extensions/gsd/native-git-bridge.ts +0 -17
- package/src/resources/extensions/gsd/notifications.ts +0 -16
- package/src/resources/extensions/gsd/parallel-eligibility.ts +2 -15
- package/src/resources/extensions/gsd/parallel-merge.ts +4 -87
- package/src/resources/extensions/gsd/parsers-legacy.ts +3 -22
- package/src/resources/extensions/gsd/paths.ts +0 -42
- package/src/resources/extensions/gsd/preferences-models.ts +1 -14
- package/src/resources/extensions/gsd/preferences-types.ts +1 -2
- package/src/resources/extensions/gsd/preferences.ts +15 -13
- package/src/resources/extensions/gsd/prompt-loader.ts +1 -4
- package/src/resources/extensions/gsd/prompts/complete-milestone.md +1 -1
- package/src/resources/extensions/gsd/prompts/complete-slice.md +2 -4
- package/src/resources/extensions/gsd/prompts/discuss-headless.md +1 -1
- package/src/resources/extensions/gsd/prompts/discuss.md +1 -1
- package/src/resources/extensions/gsd/prompts/execute-task.md +1 -3
- package/src/resources/extensions/gsd/prompts/forensics.md +2 -2
- package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +1 -1
- package/src/resources/extensions/gsd/prompts/guided-discuss-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/plan-slice.md +0 -2
- package/src/resources/extensions/gsd/prompts/rethink.md +1 -1
- package/src/resources/extensions/gsd/prompts/triage-captures.md +0 -1
- package/src/resources/extensions/gsd/repo-identity.ts +11 -186
- package/src/resources/extensions/gsd/rethink.ts +0 -6
- package/src/resources/extensions/gsd/roadmap-slices.ts +4 -5
- package/src/resources/extensions/gsd/state.ts +32 -84
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +0 -29
- package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +1 -71
- package/src/resources/extensions/gsd/tests/captures.test.ts +0 -103
- package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +0 -27
- package/src/resources/extensions/gsd/tests/complete-slice.test.ts +0 -21
- package/src/resources/extensions/gsd/tests/db-writer.test.ts +12 -7
- package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +5 -78
- package/src/resources/extensions/gsd/tests/derive-state.test.ts +0 -29
- package/src/resources/extensions/gsd/tests/discuss-queued-milestones.test.ts +0 -40
- package/src/resources/extensions/gsd/tests/dist-redirect.mjs +1 -20
- package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +0 -117
- package/src/resources/extensions/gsd/tests/empty-db-reconciliation.test.ts +79 -0
- package/src/resources/extensions/gsd/tests/forensics-dedup.test.ts +0 -31
- package/src/resources/extensions/gsd/tests/gsd-tools.test.ts +12 -125
- package/src/resources/extensions/gsd/tests/health-widget.test.ts +0 -67
- package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +1 -111
- package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +0 -101
- package/src/resources/extensions/gsd/tests/integration/auto-worktree.test.ts +0 -59
- package/src/resources/extensions/gsd/tests/integration/parallel-merge.test.ts +0 -110
- package/src/resources/extensions/gsd/tests/integration/run-uat.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/memory-extractor.test.ts +2 -85
- package/src/resources/extensions/gsd/tests/model-cost-table.test.ts +0 -34
- package/src/resources/extensions/gsd/tests/model-router.test.ts +3 -68
- package/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +0 -28
- package/src/resources/extensions/gsd/tests/notifications.test.ts +0 -45
- package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +1 -33
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +0 -29
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +0 -38
- package/src/resources/extensions/gsd/tests/reassess-handler.test.ts +0 -117
- package/src/resources/extensions/gsd/tests/roadmap-slices.test.ts +0 -97
- package/src/resources/extensions/gsd/tests/secure-env-collect.test.ts +0 -134
- package/src/resources/extensions/gsd/tests/tool-naming.test.ts +1 -2
- package/src/resources/extensions/gsd/tests/triage-resolution.test.ts +0 -8
- package/src/resources/extensions/gsd/tests/unit-ownership.test.ts +17 -100
- package/src/resources/extensions/gsd/tests/validate-milestone-write-order.test.ts +1 -4
- package/src/resources/extensions/gsd/tests/workflow-logger.test.ts +0 -48
- package/src/resources/extensions/gsd/tests/workflow-manifest.test.ts +0 -92
- package/src/resources/extensions/gsd/tests/workflow-projections.test.ts +2 -4
- package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +1 -48
- package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +5 -29
- package/src/resources/extensions/gsd/tools/complete-task.ts +74 -36
- package/src/resources/extensions/gsd/tools/plan-milestone.ts +1 -13
- package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +0 -36
- package/src/resources/extensions/gsd/tools/validate-milestone.ts +2 -20
- package/src/resources/extensions/gsd/triage-resolution.ts +6 -23
- package/src/resources/extensions/gsd/types.ts +2 -4
- package/src/resources/extensions/gsd/undo.ts +2 -2
- package/src/resources/extensions/gsd/unit-ownership.ts +35 -206
- package/src/resources/extensions/gsd/verdict-parser.ts +6 -21
- package/src/resources/extensions/gsd/workflow-logger.ts +1 -3
- package/src/resources/extensions/gsd/workflow-manifest.ts +5 -22
- package/src/resources/extensions/gsd/workflow-projections.ts +64 -97
- package/src/resources/extensions/gsd/workflow-reconcile.ts +10 -39
- package/src/resources/extensions/gsd/workspace-index.ts +0 -30
- package/src/resources/extensions/gsd/worktree-manager.ts +1 -120
- package/src/resources/extensions/gsd/worktree-resolver.ts +3 -22
- package/src/resources/extensions/mcp-client/index.ts +7 -13
- package/src/resources/extensions/search-the-web/extension-manifest.json +1 -1
- package/src/resources/extensions/shared/interview-ui.ts +1 -12
- package/src/resources/skills/create-gsd-extension/SKILL.md +3 -5
- package/src/resources/skills/create-gsd-extension/references/key-rules-gotchas.md +4 -5
- package/src/resources/skills/create-gsd-extension/workflows/add-capability.md +2 -2
- package/src/resources/skills/create-gsd-extension/workflows/create-extension.md +4 -4
- package/src/resources/skills/create-gsd-extension/workflows/debug-extension.md +3 -5
- package/dist/resources/extensions/gsd/milestone-validation-gates.js +0 -45
- package/dist/resources/extensions/ollama/index.js +0 -112
- package/dist/resources/extensions/ollama/model-capabilities.js +0 -115
- package/dist/resources/extensions/ollama/ollama-client.js +0 -168
- package/dist/resources/extensions/ollama/ollama-commands.js +0 -194
- package/dist/resources/extensions/ollama/ollama-discovery.js +0 -69
- package/dist/resources/extensions/ollama/ollama-tool.js +0 -184
- package/dist/resources/extensions/ollama/types.js +0 -2
- package/dist/startup-model-validation.d.ts +0 -39
- package/dist/startup-model-validation.js +0 -50
- package/dist/web/standalone/.next/static/chunks/6502.7593d7797a4b3999.js +0 -9
- package/dist/web/standalone/.next/static/css/f6e8833d46e738d8.css +0 -1
- package/packages/native/src/__tests__/module-compat.test.mjs +0 -91
- package/packages/pi-agent-core/src/agent-loop.test.ts +0 -45
- package/packages/pi-ai/dist/providers/anthropic-shared.test.d.ts +0 -2
- package/packages/pi-ai/dist/providers/anthropic-shared.test.d.ts.map +0 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.test.js +0 -25
- package/packages/pi-ai/dist/providers/anthropic-shared.test.js.map +0 -1
- package/packages/pi-ai/dist/utils/repair-tool-json.d.ts +0 -37
- package/packages/pi-ai/dist/utils/repair-tool-json.d.ts.map +0 -1
- package/packages/pi-ai/dist/utils/repair-tool-json.js +0 -75
- package/packages/pi-ai/dist/utils/repair-tool-json.js.map +0 -1
- package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.d.ts +0 -2
- package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.d.ts.map +0 -1
- package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.js +0 -73
- package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.js.map +0 -1
- package/packages/pi-ai/src/providers/anthropic-shared.test.ts +0 -29
- package/packages/pi-ai/src/utils/repair-tool-json.ts +0 -88
- package/packages/pi-ai/src/utils/tests/repair-tool-json.test.ts +0 -102
- package/packages/pi-coding-agent/dist/core/compaction/compaction.test.d.ts +0 -6
- package/packages/pi-coding-agent/dist/core/compaction/compaction.test.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js +0 -176
- package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js.map +0 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.d.ts +0 -28
- package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.js +0 -37
- package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.js.map +0 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.d.ts +0 -2
- package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.js +0 -63
- package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.js.map +0 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-sort.d.ts +0 -19
- package/packages/pi-coding-agent/dist/core/extensions/extension-sort.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-sort.js +0 -115
- package/packages/pi-coding-agent/dist/core/extensions/extension-sort.js.map +0 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.d.ts +0 -2
- package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.js +0 -109
- package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.js.map +0 -1
- package/packages/pi-coding-agent/dist/core/image-overflow-recovery.d.ts +0 -44
- package/packages/pi-coding-agent/dist/core/image-overflow-recovery.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/image-overflow-recovery.js +0 -97
- package/packages/pi-coding-agent/dist/core/image-overflow-recovery.js.map +0 -1
- package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.d.ts +0 -2
- package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.js +0 -181
- package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.js.map +0 -1
- package/packages/pi-coding-agent/dist/core/messages.test.d.ts +0 -9
- package/packages/pi-coding-agent/dist/core/messages.test.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/messages.test.js +0 -86
- package/packages/pi-coding-agent/dist/core/messages.test.js.map +0 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.test.d.ts +0 -9
- package/packages/pi-coding-agent/dist/core/retry-handler.test.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.test.js +0 -193
- package/packages/pi-coding-agent/dist/core/retry-handler.test.js.map +0 -1
- package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.d.ts +0 -16
- package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.js +0 -80
- package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.js.map +0 -1
- package/packages/pi-coding-agent/src/core/compaction/compaction.test.ts +0 -236
- package/packages/pi-coding-agent/src/core/extensions/extension-manifest.test.ts +0 -77
- package/packages/pi-coding-agent/src/core/extensions/extension-manifest.ts +0 -62
- package/packages/pi-coding-agent/src/core/extensions/extension-sort.test.ts +0 -134
- package/packages/pi-coding-agent/src/core/extensions/extension-sort.ts +0 -137
- package/packages/pi-coding-agent/src/core/image-overflow-recovery.test.ts +0 -228
- package/packages/pi-coding-agent/src/core/image-overflow-recovery.ts +0 -118
- package/packages/pi-coding-agent/src/core/messages.test.ts +0 -114
- package/packages/pi-coding-agent/src/core/retry-handler.test.ts +0 -255
- package/packages/pi-coding-agent/src/core/tools/spawn-shell-windows.test.ts +0 -92
- package/src/resources/extensions/gsd/milestone-validation-gates.ts +0 -56
- package/src/resources/extensions/gsd/tests/auto-mode-interactive-guard.test.ts +0 -71
- package/src/resources/extensions/gsd/tests/cli-provider-rate-limit.test.ts +0 -47
- package/src/resources/extensions/gsd/tests/completion-hierarchy-guards.test.ts +0 -192
- package/src/resources/extensions/gsd/tests/db-path-worktree-symlink.test.ts +0 -131
- package/src/resources/extensions/gsd/tests/discord-invite-links.test.ts +0 -47
- package/src/resources/extensions/gsd/tests/discuss-empty-db-fallback.test.ts +0 -127
- package/src/resources/extensions/gsd/tests/dynamic-routing-default.test.ts +0 -20
- package/src/resources/extensions/gsd/tests/empty-content-abort-loop.test.ts +0 -74
- package/src/resources/extensions/gsd/tests/event-replay-idempotency.test.ts +0 -140
- package/src/resources/extensions/gsd/tests/forensics-context-persist.test.ts +0 -129
- package/src/resources/extensions/gsd/tests/forensics-db-completion.test.ts +0 -96
- package/src/resources/extensions/gsd/tests/gsdroot-worktree-detection.test.ts +0 -164
- package/src/resources/extensions/gsd/tests/guided-flow-dynamic-routing.test.ts +0 -135
- package/src/resources/extensions/gsd/tests/guided-flow-session-isolation.test.ts +0 -97
- package/src/resources/extensions/gsd/tests/hook-key-parsing.test.ts +0 -107
- package/src/resources/extensions/gsd/tests/integration/doctor-false-positives.test.ts +0 -243
- package/src/resources/extensions/gsd/tests/integration/gitignore-staging-2570.test.ts +0 -150
- package/src/resources/extensions/gsd/tests/integration/state-machine-live-validation.test.ts +0 -959
- package/src/resources/extensions/gsd/tests/migrate-external-worktree.test.ts +0 -105
- package/src/resources/extensions/gsd/tests/milestone-status-authoritative.test.ts +0 -116
- package/src/resources/extensions/gsd/tests/parallel-commit-scope.test.ts +0 -159
- package/src/resources/extensions/gsd/tests/parallel-eligibility-ghost.test.ts +0 -150
- package/src/resources/extensions/gsd/tests/plan-milestone-title.test.ts +0 -70
- package/src/resources/extensions/gsd/tests/project-relocation-recovery.test.ts +0 -297
- package/src/resources/extensions/gsd/tests/prompt-loader-replacement.test.ts +0 -178
- package/src/resources/extensions/gsd/tests/prompt-tool-names.test.ts +0 -69
- package/src/resources/extensions/gsd/tests/queue-execution-guard.test.ts +0 -157
- package/src/resources/extensions/gsd/tests/quick-turn-end-cleanup.test.ts +0 -90
- package/src/resources/extensions/gsd/tests/reconciliation-edge-cases.test.ts +0 -162
- package/src/resources/extensions/gsd/tests/slice-disk-reconcile.test.ts +0 -233
- package/src/resources/extensions/gsd/tests/stash-queued-context-files.test.ts +0 -305
- package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +0 -405
- package/src/resources/extensions/gsd/tests/state-derivation-parity.test.ts +0 -257
- package/src/resources/extensions/gsd/tests/state-machine-full-walkthrough.test.ts +0 -1628
- package/src/resources/extensions/gsd/tests/stop-auto-race-null-unit.test.ts +0 -106
- package/src/resources/extensions/gsd/tests/stuck-detection-coverage.test.ts +0 -174
- package/src/resources/extensions/gsd/tests/summary-render-parity.test.ts +0 -221
- package/src/resources/extensions/gsd/tests/uat-stuck-loop-orphaned-worktree.test.ts +0 -289
- package/src/resources/extensions/gsd/tests/vacuum-recovery.test.ts +0 -154
- package/src/resources/extensions/gsd/tests/verdict-parser.test.ts +0 -156
- package/src/resources/extensions/gsd/tests/verification-operational-gate.test.ts +0 -82
- package/src/resources/extensions/gsd/tests/worktree-db-respawn-truncation.test.ts +0 -140
- package/src/resources/extensions/gsd/tests/worktree-nested-git-safety.test.ts +0 -101
- package/src/resources/extensions/gsd/tests/zombie-gsd-state.test.ts +0 -95
- package/src/resources/extensions/mcp-client/tests/server-name-spaces.test.ts +0 -55
- package/src/resources/extensions/ollama/index.ts +0 -130
- package/src/resources/extensions/ollama/model-capabilities.ts +0 -145
- package/src/resources/extensions/ollama/ollama-client.ts +0 -196
- package/src/resources/extensions/ollama/ollama-commands.ts +0 -248
- package/src/resources/extensions/ollama/ollama-discovery.ts +0 -106
- package/src/resources/extensions/ollama/ollama-tool.ts +0 -218
- package/src/resources/extensions/ollama/tests/model-capabilities.test.ts +0 -162
- package/src/resources/extensions/ollama/tests/ollama-client.test.ts +0 -38
- package/src/resources/extensions/ollama/tests/ollama-discovery.test.ts +0 -28
- package/src/resources/extensions/ollama/types.ts +0 -130
- package/src/resources/extensions/shared/tests/ask-user-freetext.test.ts +0 -156
- /package/dist/web/standalone/.next/static/{R0D4xaIPl5kg93edN7Oo0 → 5DLsjFHdSB6_a1EDQVjr7}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{R0D4xaIPl5kg93edN7Oo0 → 5DLsjFHdSB6_a1EDQVjr7}/_ssgManifest.js +0 -0
|
@@ -317,54 +317,6 @@ describe("workflow-logger", () => {
|
|
|
317
317
|
});
|
|
318
318
|
});
|
|
319
319
|
|
|
320
|
-
describe("new log components (db, dispatch)", () => {
|
|
321
|
-
test("logError with 'db' component stores correct component", () => {
|
|
322
|
-
logError("db", "failed to copy DB to worktree", { error: "ENOENT" });
|
|
323
|
-
const entries = peekLogs();
|
|
324
|
-
assert.equal(entries.length, 1);
|
|
325
|
-
assert.equal(entries[0].severity, "error");
|
|
326
|
-
assert.equal(entries[0].component, "db");
|
|
327
|
-
assert.equal(entries[0].message, "failed to copy DB to worktree");
|
|
328
|
-
assert.deepEqual(entries[0].context, { error: "ENOENT" });
|
|
329
|
-
});
|
|
330
|
-
|
|
331
|
-
test("logError with 'dispatch' component stores correct component", () => {
|
|
332
|
-
logError("dispatch", "reactive graph derivation failed", { error: "timeout" });
|
|
333
|
-
const entries = peekLogs();
|
|
334
|
-
assert.equal(entries.length, 1);
|
|
335
|
-
assert.equal(entries[0].severity, "error");
|
|
336
|
-
assert.equal(entries[0].component, "dispatch");
|
|
337
|
-
assert.deepEqual(entries[0].context, { error: "timeout" });
|
|
338
|
-
});
|
|
339
|
-
|
|
340
|
-
test("logWarning with 'reconcile' component for centralized logging path", () => {
|
|
341
|
-
logWarning("reconcile", "could not acquire sync lock — another reconciliation may be in progress");
|
|
342
|
-
const entries = peekLogs();
|
|
343
|
-
assert.equal(entries.length, 1);
|
|
344
|
-
assert.equal(entries[0].severity, "warn");
|
|
345
|
-
assert.equal(entries[0].component, "reconcile");
|
|
346
|
-
});
|
|
347
|
-
|
|
348
|
-
test("summarizeLogs includes db and dispatch entries", () => {
|
|
349
|
-
logError("db", "worktree DB reconciliation failed: path contains unsafe characters");
|
|
350
|
-
logWarning("dispatch", "graph derivation timeout");
|
|
351
|
-
const summary = summarizeLogs()!;
|
|
352
|
-
assert.ok(summary.includes("1 error(s)"));
|
|
353
|
-
assert.ok(summary.includes("1 warning(s)"));
|
|
354
|
-
assert.ok(summary.includes("unsafe characters"));
|
|
355
|
-
assert.ok(summary.includes("graph derivation timeout"));
|
|
356
|
-
});
|
|
357
|
-
|
|
358
|
-
test("formatForNotification renders db and dispatch components", () => {
|
|
359
|
-
logError("db", "copy failed");
|
|
360
|
-
logWarning("dispatch", "slow derivation");
|
|
361
|
-
const entries = drainLogs();
|
|
362
|
-
const formatted = formatForNotification(entries);
|
|
363
|
-
assert.ok(formatted.includes("[db] copy failed"));
|
|
364
|
-
assert.ok(formatted.includes("[dispatch] slow derivation"));
|
|
365
|
-
});
|
|
366
|
-
});
|
|
367
|
-
|
|
368
320
|
describe("stderr output", () => {
|
|
369
321
|
test("writes WARN prefix to stderr for warnings", (t) => {
|
|
370
322
|
const written: string[] = [];
|
|
@@ -12,7 +12,6 @@ import {
|
|
|
12
12
|
insertMilestone,
|
|
13
13
|
insertSlice,
|
|
14
14
|
insertTask,
|
|
15
|
-
_getAdapter,
|
|
16
15
|
} from '../gsd-db.ts';
|
|
17
16
|
import {
|
|
18
17
|
writeManifest,
|
|
@@ -166,97 +165,6 @@ test('workflow-manifest: bootstrapFromManifest restores DB from manifest (round-
|
|
|
166
165
|
}
|
|
167
166
|
});
|
|
168
167
|
|
|
169
|
-
// ─── snapshotState: numeric column coercion (#2962) ─────────────────────
|
|
170
|
-
|
|
171
|
-
test('workflow-manifest: snapshotState coerces string placeholders in numeric columns to null (#2962)', () => {
|
|
172
|
-
const base = tempDir();
|
|
173
|
-
openDatabase(tempDbPath(base));
|
|
174
|
-
try {
|
|
175
|
-
// Set up prerequisite rows
|
|
176
|
-
insertMilestone({ id: 'M001' });
|
|
177
|
-
insertSlice({ id: 'S01', milestoneId: 'M001' });
|
|
178
|
-
insertTask({ id: 'T01', sliceId: 'S01', milestoneId: 'M001', title: 'Task', status: 'complete' });
|
|
179
|
-
|
|
180
|
-
// Insert verification_evidence with string placeholders in numeric columns
|
|
181
|
-
// This simulates what happens after schema migrations or manual inserts
|
|
182
|
-
const db = _getAdapter()!;
|
|
183
|
-
db.prepare(
|
|
184
|
-
`INSERT INTO verification_evidence (task_id, slice_id, milestone_id, command, exit_code, verdict, duration_ms, created_at)
|
|
185
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,
|
|
186
|
-
).run('T01', 'S01', 'M001', 'npm test', '-', 'pass', '-', new Date().toISOString());
|
|
187
|
-
|
|
188
|
-
// snapshotState should coerce "-" to null for numeric columns
|
|
189
|
-
const snap = snapshotState();
|
|
190
|
-
const ev = snap.verification_evidence[0];
|
|
191
|
-
assert.strictEqual(ev.exit_code, null, 'exit_code "-" should be coerced to null');
|
|
192
|
-
assert.strictEqual(ev.duration_ms, null, 'duration_ms "-" should be coerced to null');
|
|
193
|
-
|
|
194
|
-
// Round-trip through JSON should not throw
|
|
195
|
-
const json = JSON.stringify(snap, null, 2);
|
|
196
|
-
const reparsed = JSON.parse(json);
|
|
197
|
-
assert.strictEqual(reparsed.verification_evidence[0].exit_code, null);
|
|
198
|
-
assert.strictEqual(reparsed.verification_evidence[0].duration_ms, null);
|
|
199
|
-
} finally {
|
|
200
|
-
closeDatabase();
|
|
201
|
-
cleanupDir(base);
|
|
202
|
-
}
|
|
203
|
-
});
|
|
204
|
-
|
|
205
|
-
test('workflow-manifest: snapshotState coerces empty string and N/A in numeric columns (#2962)', () => {
|
|
206
|
-
const base = tempDir();
|
|
207
|
-
openDatabase(tempDbPath(base));
|
|
208
|
-
try {
|
|
209
|
-
insertMilestone({ id: 'M001' });
|
|
210
|
-
insertSlice({ id: 'S01', milestoneId: 'M001' });
|
|
211
|
-
insertTask({ id: 'T01', sliceId: 'S01', milestoneId: 'M001', title: 'Task', status: 'complete' });
|
|
212
|
-
|
|
213
|
-
const db = _getAdapter()!;
|
|
214
|
-
db.prepare(
|
|
215
|
-
`INSERT INTO verification_evidence (task_id, slice_id, milestone_id, command, exit_code, verdict, duration_ms, created_at)
|
|
216
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,
|
|
217
|
-
).run('T01', 'S01', 'M001', 'npm test', 'N/A', 'pass', '', new Date().toISOString());
|
|
218
|
-
|
|
219
|
-
const snap = snapshotState();
|
|
220
|
-
const ev = snap.verification_evidence[0];
|
|
221
|
-
assert.strictEqual(ev.exit_code, null, 'exit_code "N/A" should be coerced to null');
|
|
222
|
-
assert.strictEqual(ev.duration_ms, null, 'duration_ms "" should be coerced to null');
|
|
223
|
-
} finally {
|
|
224
|
-
closeDatabase();
|
|
225
|
-
cleanupDir(base);
|
|
226
|
-
}
|
|
227
|
-
});
|
|
228
|
-
|
|
229
|
-
test('workflow-manifest: snapshotState coerces string placeholders in sequence columns (#2962)', () => {
|
|
230
|
-
const base = tempDir();
|
|
231
|
-
openDatabase(tempDbPath(base));
|
|
232
|
-
try {
|
|
233
|
-
insertMilestone({ id: 'M001' });
|
|
234
|
-
|
|
235
|
-
// Insert a slice with a string sequence via raw SQL
|
|
236
|
-
const db = _getAdapter()!;
|
|
237
|
-
db.prepare(
|
|
238
|
-
`INSERT INTO slices (milestone_id, id, title, status, risk, depends, demo, created_at, sequence)
|
|
239
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
|
240
|
-
).run('M001', 'S01', 'Test Slice', 'planned', 'low', '[]', '', new Date().toISOString(), '-');
|
|
241
|
-
|
|
242
|
-
db.prepare(
|
|
243
|
-
`INSERT INTO tasks (milestone_id, slice_id, id, title, status, sequence)
|
|
244
|
-
VALUES (?, ?, ?, ?, ?, ?)`,
|
|
245
|
-
).run('M001', 'S01', 'T01', 'Test Task', 'planned', 'N/A');
|
|
246
|
-
|
|
247
|
-
const snap = snapshotState();
|
|
248
|
-
assert.strictEqual(snap.slices[0].sequence, 0, 'slice sequence "-" should be coerced to 0');
|
|
249
|
-
assert.strictEqual(snap.tasks[0].sequence, 0, 'task sequence "N/A" should be coerced to 0');
|
|
250
|
-
|
|
251
|
-
// JSON round-trip must not throw
|
|
252
|
-
const json = JSON.stringify(snap, null, 2);
|
|
253
|
-
assert.doesNotThrow(() => JSON.parse(json));
|
|
254
|
-
} finally {
|
|
255
|
-
closeDatabase();
|
|
256
|
-
cleanupDir(base);
|
|
257
|
-
}
|
|
258
|
-
});
|
|
259
|
-
|
|
260
168
|
// ─── readManifest: version check ─────────────────────────────────────────
|
|
261
169
|
|
|
262
170
|
test('workflow-manifest: readManifest throws on unsupported version', () => {
|
|
@@ -86,12 +86,10 @@ test('workflow-projections: renderPlanContent falls back to TBD when goal and fu
|
|
|
86
86
|
assert.ok(content.includes('**Goal:** TBD'));
|
|
87
87
|
});
|
|
88
88
|
|
|
89
|
-
test('workflow-projections: renderPlanContent falls back to
|
|
89
|
+
test('workflow-projections: renderPlanContent falls back to full_summary_md when goal is empty', () => {
|
|
90
90
|
const slice = makeSlice({ goal: '', full_summary_md: 'Fallback goal text' });
|
|
91
91
|
const content = renderPlanContent(slice, []);
|
|
92
|
-
|
|
93
|
-
// multi-line rendered markdown that corrupts single-line fields.
|
|
94
|
-
assert.ok(content.includes('**Goal:** TBD'), `expected TBD fallback, got: ${content}`);
|
|
92
|
+
assert.ok(content.includes('**Goal:** Fallback goal text'));
|
|
95
93
|
});
|
|
96
94
|
|
|
97
95
|
test('workflow-projections: renderPlanContent includes ## Tasks section', () => {
|
|
@@ -481,8 +481,7 @@ test("mergeAndExit resolves roadmap from worktree when missing at project root (
|
|
|
481
481
|
|
|
482
482
|
// Should have called mergeMilestoneToMain, not bare teardown
|
|
483
483
|
assert.equal(findCalls(deps.calls, "mergeMilestoneToMain").length, 1);
|
|
484
|
-
|
|
485
|
-
assert.equal(findCalls(deps.calls, "teardownAutoWorktree").length, 1);
|
|
484
|
+
assert.equal(findCalls(deps.calls, "teardownAutoWorktree").length, 0);
|
|
486
485
|
assert.equal(s.basePath, "/project"); // restored
|
|
487
486
|
assert.ok(ctx.messages.some((m) => m.msg.includes("merged to main")));
|
|
488
487
|
});
|
|
@@ -914,49 +913,3 @@ test("isolationDegraded is reset by session.reset() (#2483)", () => {
|
|
|
914
913
|
|
|
915
914
|
assert.equal(s.isolationDegraded, false);
|
|
916
915
|
});
|
|
917
|
-
|
|
918
|
-
// ─── #2625 — Default isolation mode change must not orphan worktree commits ──
|
|
919
|
-
|
|
920
|
-
test("mergeAndExit still merges when mode is 'none' but session is in a worktree (#2625)", () => {
|
|
921
|
-
// Scenario: user upgraded from a version where default was "worktree" to one
|
|
922
|
-
// where default is "none". They have an active worktree with committed work.
|
|
923
|
-
// mergeAndExit must detect the active worktree and merge regardless of config.
|
|
924
|
-
const s = makeSession({
|
|
925
|
-
basePath: "/project/.gsd/worktrees/M001",
|
|
926
|
-
originalBasePath: "/project",
|
|
927
|
-
});
|
|
928
|
-
const deps = makeDeps({
|
|
929
|
-
isInAutoWorktree: () => true,
|
|
930
|
-
getIsolationMode: () => "none", // config says "none" — but we ARE in a worktree
|
|
931
|
-
});
|
|
932
|
-
const ctx = makeNotifyCtx();
|
|
933
|
-
const resolver = new WorktreeResolver(s, deps);
|
|
934
|
-
|
|
935
|
-
resolver.mergeAndExit("M001", ctx);
|
|
936
|
-
|
|
937
|
-
// Must still merge — not skip silently
|
|
938
|
-
assert.equal(findCalls(deps.calls, "mergeMilestoneToMain").length, 1,
|
|
939
|
-
"must call mergeMilestoneToMain even when isolation mode is 'none' but we are in a worktree");
|
|
940
|
-
assert.equal(s.basePath, "/project", "basePath must be restored to project root");
|
|
941
|
-
assert.ok(ctx.messages.some((m) => m.msg.includes("merged to main")),
|
|
942
|
-
"must notify about the merge");
|
|
943
|
-
});
|
|
944
|
-
|
|
945
|
-
test("mergeAndExit in none mode remains a no-op when NOT in a worktree (#2625)", () => {
|
|
946
|
-
// When mode is "none" and we are genuinely not in a worktree, it should still be a no-op.
|
|
947
|
-
const s = makeSession({
|
|
948
|
-
basePath: "/project",
|
|
949
|
-
originalBasePath: "/project",
|
|
950
|
-
});
|
|
951
|
-
const deps = makeDeps({
|
|
952
|
-
isInAutoWorktree: () => false,
|
|
953
|
-
getIsolationMode: () => "none",
|
|
954
|
-
});
|
|
955
|
-
const ctx = makeNotifyCtx();
|
|
956
|
-
const resolver = new WorktreeResolver(s, deps);
|
|
957
|
-
|
|
958
|
-
resolver.mergeAndExit("M001", ctx);
|
|
959
|
-
|
|
960
|
-
assert.equal(findCalls(deps.calls, "mergeMilestoneToMain").length, 0,
|
|
961
|
-
"must NOT merge when not in a worktree and mode is none");
|
|
962
|
-
});
|
|
@@ -100,8 +100,8 @@ describe('worktree-sync-milestones', async () => {
|
|
|
100
100
|
}
|
|
101
101
|
}
|
|
102
102
|
|
|
103
|
-
// ─── 3.
|
|
104
|
-
console.log('\n=== 3.
|
|
103
|
+
// ─── 3. gsd.db deleted in worktree after sync ─────────────────────────
|
|
104
|
+
console.log('\n=== 3. gsd.db deleted in worktree after sync ===');
|
|
105
105
|
{
|
|
106
106
|
const mainBase = createBase('main');
|
|
107
107
|
const wtBase = createBase('wt');
|
|
@@ -111,37 +111,13 @@ describe('worktree-sync-milestones', async () => {
|
|
|
111
111
|
mkdirSync(m001Dir, { recursive: true });
|
|
112
112
|
writeFileSync(join(m001Dir, 'M001-ROADMAP.md'), '# Roadmap');
|
|
113
113
|
|
|
114
|
-
// Worktree has
|
|
115
|
-
writeFileSync(join(wtBase, '.gsd', 'gsd.db'), '');
|
|
114
|
+
// Worktree has a stale gsd.db
|
|
115
|
+
writeFileSync(join(wtBase, '.gsd', 'gsd.db'), 'stale data');
|
|
116
116
|
assert.ok(existsSync(join(wtBase, '.gsd', 'gsd.db')), 'gsd.db exists before sync');
|
|
117
117
|
|
|
118
118
|
syncProjectRootToWorktree(mainBase, wtBase, 'M001');
|
|
119
119
|
|
|
120
|
-
assert.ok(!existsSync(join(wtBase, '.gsd', 'gsd.db')), '#853:
|
|
121
|
-
} finally {
|
|
122
|
-
cleanup(mainBase);
|
|
123
|
-
cleanup(wtBase);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
// ─── 3b. non-empty gsd.db preserved in worktree after sync (#2815) ───
|
|
128
|
-
console.log('\n=== 3b. non-empty gsd.db preserved in worktree after sync (#2815) ===');
|
|
129
|
-
{
|
|
130
|
-
const mainBase = createBase('main');
|
|
131
|
-
const wtBase = createBase('wt');
|
|
132
|
-
|
|
133
|
-
try {
|
|
134
|
-
const m001Dir = join(mainBase, '.gsd', 'milestones', 'M001');
|
|
135
|
-
mkdirSync(m001Dir, { recursive: true });
|
|
136
|
-
writeFileSync(join(m001Dir, 'M001-ROADMAP.md'), '# Roadmap');
|
|
137
|
-
|
|
138
|
-
// Worktree has a populated gsd.db (e.g. from gsd-migrate on respawn)
|
|
139
|
-
writeFileSync(join(wtBase, '.gsd', 'gsd.db'), 'migrated-db-content');
|
|
140
|
-
assert.ok(existsSync(join(wtBase, '.gsd', 'gsd.db')), 'gsd.db exists before sync');
|
|
141
|
-
|
|
142
|
-
syncProjectRootToWorktree(mainBase, wtBase, 'M001');
|
|
143
|
-
|
|
144
|
-
assert.ok(existsSync(join(wtBase, '.gsd', 'gsd.db')), '#2815: non-empty gsd.db preserved after sync');
|
|
120
|
+
assert.ok(!existsSync(join(wtBase, '.gsd', 'gsd.db')), '#853: gsd.db deleted after sync');
|
|
145
121
|
} finally {
|
|
146
122
|
cleanup(mainBase);
|
|
147
123
|
cleanup(wtBase);
|
|
@@ -30,7 +30,7 @@ import { checkOwnership, taskUnitKey } from "../unit-ownership.js";
|
|
|
30
30
|
import { saveFile, clearParseCache } from "../files.js";
|
|
31
31
|
import { invalidateStateCache } from "../state.js";
|
|
32
32
|
import { renderPlanCheckboxes } from "../markdown-renderer.js";
|
|
33
|
-
import { renderAllProjections
|
|
33
|
+
import { renderAllProjections } from "../workflow-projections.js";
|
|
34
34
|
import { writeManifest } from "../workflow-manifest.js";
|
|
35
35
|
import { appendEvent } from "../workflow-events.js";
|
|
36
36
|
|
|
@@ -41,40 +41,79 @@ export interface CompleteTaskResult {
|
|
|
41
41
|
summaryPath: string;
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
import type { TaskRow } from "../gsd-db.js";
|
|
45
|
-
|
|
46
44
|
/**
|
|
47
|
-
*
|
|
48
|
-
*
|
|
45
|
+
* Render task summary markdown matching the template format.
|
|
46
|
+
* YAML frontmatter uses snake_case keys for parseSummary() compatibility.
|
|
49
47
|
*/
|
|
50
|
-
function
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
48
|
+
function renderSummaryMarkdown(params: CompleteTaskParams): string {
|
|
49
|
+
const now = new Date().toISOString();
|
|
50
|
+
const keyFilesYaml = params.keyFiles.length > 0
|
|
51
|
+
? params.keyFiles.map(f => ` - ${f}`).join("\n")
|
|
52
|
+
: " - (none)";
|
|
53
|
+
const keyDecisionsYaml = params.keyDecisions.length > 0
|
|
54
|
+
? params.keyDecisions.map(d => ` - ${d}`).join("\n")
|
|
55
|
+
: " - (none)";
|
|
56
|
+
|
|
57
|
+
// Build verification evidence table rows
|
|
58
|
+
let evidenceTable = "| # | Command | Exit Code | Verdict | Duration |\n|---|---------|-----------|---------|----------|\n";
|
|
59
|
+
if (params.verificationEvidence.length > 0) {
|
|
60
|
+
params.verificationEvidence.forEach((e, i) => {
|
|
61
|
+
evidenceTable += `| ${i + 1} | \`${e.command}\` | ${e.exitCode} | ${e.verdict} | ${e.durationMs}ms |\n`;
|
|
62
|
+
});
|
|
63
|
+
} else {
|
|
64
|
+
evidenceTable += "| — | No verification commands discovered | — | — | — |\n";
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Determine verification_result from evidence
|
|
68
|
+
const allPassed = params.verificationEvidence.length > 0 &&
|
|
69
|
+
params.verificationEvidence.every(e => e.exitCode === 0 || e.verdict.includes("✅") || e.verdict.toLowerCase().includes("pass"));
|
|
70
|
+
const verificationResult = allPassed ? "passed" : (params.verificationEvidence.length === 0 ? "untested" : "mixed");
|
|
71
|
+
|
|
72
|
+
// Extract a title from the oneLiner or taskId
|
|
73
|
+
const title = params.oneLiner || params.taskId;
|
|
74
|
+
|
|
75
|
+
return `---
|
|
76
|
+
id: ${params.taskId}
|
|
77
|
+
parent: ${params.sliceId}
|
|
78
|
+
milestone: ${params.milestoneId}
|
|
79
|
+
key_files:
|
|
80
|
+
${keyFilesYaml}
|
|
81
|
+
key_decisions:
|
|
82
|
+
${keyDecisionsYaml}
|
|
83
|
+
duration: ""
|
|
84
|
+
verification_result: ${verificationResult}
|
|
85
|
+
completed_at: ${now}
|
|
86
|
+
blocker_discovered: ${params.blockerDiscovered}
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
# ${params.taskId}: ${title}
|
|
90
|
+
|
|
91
|
+
**${params.oneLiner}**
|
|
92
|
+
|
|
93
|
+
## What Happened
|
|
94
|
+
|
|
95
|
+
${params.narrative}
|
|
96
|
+
|
|
97
|
+
## Verification
|
|
98
|
+
|
|
99
|
+
${params.verification}
|
|
100
|
+
|
|
101
|
+
## Verification Evidence
|
|
102
|
+
|
|
103
|
+
${evidenceTable}
|
|
104
|
+
|
|
105
|
+
## Deviations
|
|
106
|
+
|
|
107
|
+
${params.deviations || "None."}
|
|
108
|
+
|
|
109
|
+
## Known Issues
|
|
110
|
+
|
|
111
|
+
${params.knownIssues || "None."}
|
|
112
|
+
|
|
113
|
+
## Files Created/Modified
|
|
114
|
+
|
|
115
|
+
${params.keyFiles.map(f => `- \`${f}\``).join("\n") || "None."}
|
|
116
|
+
`;
|
|
78
117
|
}
|
|
79
118
|
|
|
80
119
|
/**
|
|
@@ -179,9 +218,8 @@ export async function handleCompleteTask(
|
|
|
179
218
|
// If disk render fails, roll back the DB status so deriveState() and
|
|
180
219
|
// verifyExpectedArtifact() stay consistent (both say "not done").
|
|
181
220
|
|
|
182
|
-
// Render summary markdown
|
|
183
|
-
const
|
|
184
|
-
const summaryMd = renderSummaryContent(taskRow, params.sliceId, params.milestoneId, params.verificationEvidence);
|
|
221
|
+
// Render summary markdown
|
|
222
|
+
const summaryMd = renderSummaryMarkdown(params);
|
|
185
223
|
|
|
186
224
|
// Resolve and write summary to disk
|
|
187
225
|
let summaryPath: string;
|
|
@@ -4,7 +4,6 @@ import { isNonEmptyString, validateStringArray } from "../validation.js";
|
|
|
4
4
|
import {
|
|
5
5
|
transaction,
|
|
6
6
|
getMilestone,
|
|
7
|
-
getMilestoneSlices,
|
|
8
7
|
insertMilestone,
|
|
9
8
|
insertSlice,
|
|
10
9
|
upsertMilestonePlanning,
|
|
@@ -190,17 +189,6 @@ export async function handlePlanMilestone(
|
|
|
190
189
|
return;
|
|
191
190
|
}
|
|
192
191
|
|
|
193
|
-
// Guard: refuse to re-plan a milestone that has completed slices (#2960).
|
|
194
|
-
// INSERT OR IGNORE on slices won't overwrite existing rows, but a full
|
|
195
|
-
// re-plan after worktree recreation or DB resync can create new slice rows
|
|
196
|
-
// that shadow completed work. Block early when any slice is already done.
|
|
197
|
-
const existingSlices = getMilestoneSlices(params.milestoneId);
|
|
198
|
-
const completedSlices = existingSlices.filter(s => isClosedStatus(s.status));
|
|
199
|
-
if (completedSlices.length > 0) {
|
|
200
|
-
guardError = `cannot re-plan milestone ${params.milestoneId}: ${completedSlices.length} slice(s) already completed (${completedSlices.map(s => s.id).join(", ")}). Use gsd_reassess_roadmap to modify the roadmap.`;
|
|
201
|
-
return;
|
|
202
|
-
}
|
|
203
|
-
|
|
204
192
|
// Validate depends_on: all dependencies must exist and be complete
|
|
205
193
|
if (params.dependsOn && params.dependsOn.length > 0) {
|
|
206
194
|
for (const depId of params.dependsOn) {
|
|
@@ -235,7 +223,7 @@ export async function handlePlanMilestone(
|
|
|
235
223
|
definitionOfDone: params.definitionOfDone,
|
|
236
224
|
requirementCoverage: params.requirementCoverage,
|
|
237
225
|
boundaryMapMarkdown: params.boundaryMapMarkdown,
|
|
238
|
-
}
|
|
226
|
+
});
|
|
239
227
|
|
|
240
228
|
for (const slice of params.slices) {
|
|
241
229
|
insertSlice({
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { join } from "node:path";
|
|
2
|
-
import { existsSync, unlinkSync } from "node:fs";
|
|
3
2
|
import { clearParseCache } from "../files.js";
|
|
4
3
|
import { isClosedStatus } from "../status-guards.js";
|
|
5
4
|
import { isNonEmptyString } from "../validation.js";
|
|
@@ -11,7 +10,6 @@ import {
|
|
|
11
10
|
insertSlice,
|
|
12
11
|
updateSliceFields,
|
|
13
12
|
insertAssessment,
|
|
14
|
-
deleteAssessmentByScope,
|
|
15
13
|
deleteSlice,
|
|
16
14
|
} from "../gsd-db.js";
|
|
17
15
|
import { invalidateStateCache } from "../state.js";
|
|
@@ -202,21 +200,6 @@ export async function handleReassessRoadmap(
|
|
|
202
200
|
for (const removedId of params.sliceChanges.removed) {
|
|
203
201
|
deleteSlice(params.milestoneId, removedId);
|
|
204
202
|
}
|
|
205
|
-
|
|
206
|
-
// ── Invalidate stale milestone validation (#2957) ──────────────
|
|
207
|
-
// When roadmap structure changes (slices added/modified/removed),
|
|
208
|
-
// any prior milestone-validation verdict is stale. Delete the DB
|
|
209
|
-
// row so deriveState() returns phase: 'validating-milestone' once
|
|
210
|
-
// the new slices complete, rather than advancing directly to
|
|
211
|
-
// 'completing-milestone' with a stale needs-remediation verdict.
|
|
212
|
-
const hasStructuralChanges =
|
|
213
|
-
params.sliceChanges.added.length > 0 ||
|
|
214
|
-
params.sliceChanges.modified.length > 0 ||
|
|
215
|
-
params.sliceChanges.removed.length > 0;
|
|
216
|
-
|
|
217
|
-
if (hasStructuralChanges) {
|
|
218
|
-
deleteAssessmentByScope(params.milestoneId, "milestone-validation");
|
|
219
|
-
}
|
|
220
203
|
});
|
|
221
204
|
} catch (err) {
|
|
222
205
|
return { error: `db write failed: ${(err as Error).message}` };
|
|
@@ -235,25 +218,6 @@ export async function handleReassessRoadmap(
|
|
|
235
218
|
completedSliceId: params.completedSliceId,
|
|
236
219
|
});
|
|
237
220
|
|
|
238
|
-
// ── Remove stale VALIDATION file from disk (#2957) ────────────
|
|
239
|
-
const hasStructuralChanges =
|
|
240
|
-
params.sliceChanges.added.length > 0 ||
|
|
241
|
-
params.sliceChanges.modified.length > 0 ||
|
|
242
|
-
params.sliceChanges.removed.length > 0;
|
|
243
|
-
|
|
244
|
-
if (hasStructuralChanges) {
|
|
245
|
-
const validationFile = join(
|
|
246
|
-
basePath, ".gsd", "milestones", params.milestoneId,
|
|
247
|
-
`${params.milestoneId}-VALIDATION.md`,
|
|
248
|
-
);
|
|
249
|
-
try {
|
|
250
|
-
if (existsSync(validationFile)) unlinkSync(validationFile);
|
|
251
|
-
} catch {
|
|
252
|
-
// Best-effort: DB row is already deleted, so state derivation
|
|
253
|
-
// will not see the file-based verdict as authoritative.
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
|
|
257
221
|
// ── Invalidate caches ─────────────────────────────────────────
|
|
258
222
|
invalidateStateCache();
|
|
259
223
|
clearParseCache();
|
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* validate-milestone handler — the core operation behind gsd_validate_milestone.
|
|
3
3
|
*
|
|
4
|
-
* Persists milestone validation results to the assessments table
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* #2945 Bug 4: Previously only wrote to assessments — quality_gates records
|
|
8
|
-
* were never persisted, causing M002+ milestones to have zero gate records
|
|
9
|
-
* despite passing validation.
|
|
4
|
+
* Persists milestone validation results to the assessments table,
|
|
5
|
+
* renders VALIDATION.md to disk, and invalidates caches.
|
|
10
6
|
*/
|
|
11
7
|
|
|
12
8
|
import { join } from "node:path";
|
|
@@ -15,13 +11,11 @@ import {
|
|
|
15
11
|
transaction,
|
|
16
12
|
insertAssessment,
|
|
17
13
|
deleteAssessmentByScope,
|
|
18
|
-
getMilestoneSlices,
|
|
19
14
|
} from "../gsd-db.js";
|
|
20
15
|
import { resolveMilestonePath, clearPathCache } from "../paths.js";
|
|
21
16
|
import { saveFile, clearParseCache } from "../files.js";
|
|
22
17
|
import { invalidateStateCache } from "../state.js";
|
|
23
18
|
import { VALIDATION_VERDICTS, isValidMilestoneVerdict } from "../verdict-parser.js";
|
|
24
|
-
import { insertMilestoneValidationGates } from "../milestone-validation-gates.js";
|
|
25
19
|
|
|
26
20
|
export interface ValidateMilestoneParams {
|
|
27
21
|
milestoneId: string;
|
|
@@ -118,18 +112,6 @@ export async function handleValidateMilestone(
|
|
|
118
112
|
scope: 'milestone-validation',
|
|
119
113
|
fullContent: validationMd,
|
|
120
114
|
});
|
|
121
|
-
|
|
122
|
-
// #2945 Bug 4: persist quality_gates records alongside the assessment.
|
|
123
|
-
// Previously only the assessment was written, leaving M002+ milestones
|
|
124
|
-
// with zero quality_gate records despite passing validation.
|
|
125
|
-
const slices = getMilestoneSlices(params.milestoneId);
|
|
126
|
-
const sliceId = slices.length > 0 ? slices[0].id : "_milestone";
|
|
127
|
-
insertMilestoneValidationGates(
|
|
128
|
-
params.milestoneId,
|
|
129
|
-
sliceId,
|
|
130
|
-
params.verdict,
|
|
131
|
-
validatedAt,
|
|
132
|
-
);
|
|
133
115
|
});
|
|
134
116
|
|
|
135
117
|
// ── Filesystem render (outside transaction) ────────────────────────────
|
|
@@ -22,7 +22,6 @@ import {
|
|
|
22
22
|
loadActionableCaptures,
|
|
23
23
|
markCaptureResolved,
|
|
24
24
|
markCaptureExecuted,
|
|
25
|
-
stampCaptureMilestone,
|
|
26
25
|
} from "./captures.js";
|
|
27
26
|
|
|
28
27
|
// ─── Resolution Executors ─────────────────────────────────────────────────────
|
|
@@ -272,15 +271,11 @@ export function buildQuickTaskPrompt(capture: CaptureEntry): string {
|
|
|
272
271
|
``,
|
|
273
272
|
`## Instructions`,
|
|
274
273
|
``,
|
|
275
|
-
`1.
|
|
276
|
-
`
|
|
277
|
-
`
|
|
278
|
-
`
|
|
279
|
-
`
|
|
280
|
-
`3. Do NOT modify any \`.gsd/\` plan files — this is a one-off, not a planned task.`,
|
|
281
|
-
`4. Commit your changes with a descriptive message.`,
|
|
282
|
-
`5. Keep changes minimal and focused on the capture text.`,
|
|
283
|
-
`6. When done, say: "Quick task complete."`,
|
|
274
|
+
`1. Execute this task as a small, self-contained change.`,
|
|
275
|
+
`2. Do NOT modify any \`.gsd/\` plan files — this is a one-off, not a planned task.`,
|
|
276
|
+
`3. Commit your changes with a descriptive message.`,
|
|
277
|
+
`4. Keep changes minimal and focused on the capture text.`,
|
|
278
|
+
`5. When done, say: "Quick task complete."`,
|
|
284
279
|
].join("\n");
|
|
285
280
|
}
|
|
286
281
|
|
|
@@ -329,19 +324,7 @@ export function executeTriageResolutions(
|
|
|
329
324
|
actions: [],
|
|
330
325
|
};
|
|
331
326
|
|
|
332
|
-
const actionable = loadActionableCaptures(basePath
|
|
333
|
-
|
|
334
|
-
// Reconciliation: stamp actionable captures that are missing the Milestone field
|
|
335
|
-
// with the current milestone ID. This covers captures resolved by the triage LLM
|
|
336
|
-
// before the prompt included the Milestone instruction, and acts as a safety net
|
|
337
|
-
// when the LLM omits the field (#2872).
|
|
338
|
-
if (mid) {
|
|
339
|
-
for (const capture of actionable) {
|
|
340
|
-
if (!capture.resolvedInMilestone) {
|
|
341
|
-
stampCaptureMilestone(basePath, capture.id, mid);
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
}
|
|
327
|
+
const actionable = loadActionableCaptures(basePath);
|
|
345
328
|
|
|
346
329
|
// Also process deferred captures that target milestone IDs — create
|
|
347
330
|
// milestone directories so deriveState() discovers them.
|
|
@@ -249,8 +249,6 @@ export interface GSDState {
|
|
|
249
249
|
slices?: { done: number; total: number };
|
|
250
250
|
tasks?: { done: number; total: number };
|
|
251
251
|
};
|
|
252
|
-
/** When phase=complete, holds the last completed milestone (instead of activeMilestone). */
|
|
253
|
-
lastCompletedMilestone?: ActiveRef | null;
|
|
254
252
|
}
|
|
255
253
|
|
|
256
254
|
// ─── Post-Unit Hook Types ─────────────────────────────────────────────────
|
|
@@ -565,8 +563,8 @@ export interface CompleteSliceParams {
|
|
|
565
563
|
|
|
566
564
|
// ─── Quality Gates ───────────────────────────────────────────────────────
|
|
567
565
|
|
|
568
|
-
export type GateId = "Q3" | "Q4" | "Q5" | "Q6" | "Q7" | "Q8"
|
|
569
|
-
export type GateScope = "slice" | "task"
|
|
566
|
+
export type GateId = "Q3" | "Q4" | "Q5" | "Q6" | "Q7" | "Q8";
|
|
567
|
+
export type GateScope = "slice" | "task";
|
|
570
568
|
export type GateStatus = "pending" | "complete" | "omitted";
|
|
571
569
|
export type GateVerdict = "pass" | "flag" | "omitted" | "";
|
|
572
570
|
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
import type { ExtensionCommandContext, ExtensionAPI } from "@gsd/pi-coding-agent";
|
|
7
7
|
import { existsSync, readFileSync, writeFileSync, unlinkSync, readdirSync } from "node:fs";
|
|
8
|
-
import { join
|
|
8
|
+
import { join } from "node:path";
|
|
9
9
|
import { nativeRevertCommit, nativeRevertAbort } from "./native-git-bridge.js";
|
|
10
10
|
import { parseUnitId } from "./unit-id.js";
|
|
11
11
|
import { deriveState } from "./state.js";
|
|
@@ -133,7 +133,7 @@ export async function handleUndo(args: string, ctx: ExtensionCommandContext, _pi
|
|
|
133
133
|
}
|
|
134
134
|
|
|
135
135
|
ctx.ui.notify(results.join("\n"), "success");
|
|
136
|
-
sendDesktopNotification("GSD", `Undone: ${unitType} (${unitId})`, "info", "complete"
|
|
136
|
+
sendDesktopNotification("GSD", `Undone: ${unitType} (${unitId})`, "info", "complete");
|
|
137
137
|
}
|
|
138
138
|
|
|
139
139
|
// ─── Targeted State Reset ────────────────────────────────────────────────────
|