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
|
@@ -113,6 +113,14 @@ export function registerDbTools(pi) {
|
|
|
113
113
|
};
|
|
114
114
|
}
|
|
115
115
|
try {
|
|
116
|
+
const db = await import("../gsd-db.js");
|
|
117
|
+
const existing = db.getRequirementById(params.id);
|
|
118
|
+
if (!existing) {
|
|
119
|
+
return {
|
|
120
|
+
content: [{ type: "text", text: `Error: Requirement ${params.id} not found.` }],
|
|
121
|
+
details: { operation: "update_requirement", id: params.id, error: "not_found" },
|
|
122
|
+
};
|
|
123
|
+
}
|
|
116
124
|
const { updateRequirementInDb } = await import("../db-writer.js");
|
|
117
125
|
const updates = {};
|
|
118
126
|
if (params.status !== undefined)
|
|
@@ -185,86 +193,6 @@ export function registerDbTools(pi) {
|
|
|
185
193
|
};
|
|
186
194
|
pi.registerTool(requirementUpdateTool);
|
|
187
195
|
registerAlias(pi, requirementUpdateTool, "gsd_update_requirement", "gsd_requirement_update");
|
|
188
|
-
// ─── gsd_requirement_save ─────────────────────────────────────────────
|
|
189
|
-
const requirementSaveExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
|
|
190
|
-
const dbAvailable = await ensureDbOpen();
|
|
191
|
-
if (!dbAvailable) {
|
|
192
|
-
return {
|
|
193
|
-
content: [{ type: "text", text: "Error: GSD database is not available. Cannot save requirement." }],
|
|
194
|
-
details: { operation: "save_requirement", error: "db_unavailable" },
|
|
195
|
-
};
|
|
196
|
-
}
|
|
197
|
-
try {
|
|
198
|
-
const { saveRequirementToDb } = await import("../db-writer.js");
|
|
199
|
-
const result = await saveRequirementToDb({
|
|
200
|
-
class: params.class,
|
|
201
|
-
status: params.status,
|
|
202
|
-
description: params.description,
|
|
203
|
-
why: params.why,
|
|
204
|
-
source: params.source,
|
|
205
|
-
primary_owner: params.primary_owner,
|
|
206
|
-
supporting_slices: params.supporting_slices,
|
|
207
|
-
validation: params.validation,
|
|
208
|
-
notes: params.notes,
|
|
209
|
-
}, process.cwd());
|
|
210
|
-
return {
|
|
211
|
-
content: [{ type: "text", text: `Saved requirement ${result.id}` }],
|
|
212
|
-
details: { operation: "save_requirement", id: result.id },
|
|
213
|
-
};
|
|
214
|
-
}
|
|
215
|
-
catch (err) {
|
|
216
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
217
|
-
logError("tool", `gsd_requirement_save tool failed: ${msg}`, { tool: "gsd_requirement_save", error: String(err) });
|
|
218
|
-
return {
|
|
219
|
-
content: [{ type: "text", text: `Error saving requirement: ${msg}` }],
|
|
220
|
-
details: { operation: "save_requirement", error: msg },
|
|
221
|
-
};
|
|
222
|
-
}
|
|
223
|
-
};
|
|
224
|
-
const requirementSaveTool = {
|
|
225
|
-
name: "gsd_requirement_save",
|
|
226
|
-
label: "Save Requirement",
|
|
227
|
-
description: "Record a new requirement to the GSD database and regenerate REQUIREMENTS.md. " +
|
|
228
|
-
"Requirement IDs are auto-assigned — never provide an ID manually.",
|
|
229
|
-
promptSnippet: "Record a new GSD requirement to the database (auto-assigns ID, regenerates REQUIREMENTS.md)",
|
|
230
|
-
promptGuidelines: [
|
|
231
|
-
"Use gsd_requirement_save when recording a new functional, non-functional, or operational requirement.",
|
|
232
|
-
"Requirement IDs are auto-assigned (R001, R002, ...) — never guess or provide an ID.",
|
|
233
|
-
"class, description, why, and source are required. All other fields are optional.",
|
|
234
|
-
"The tool writes to the DB and regenerates .gsd/REQUIREMENTS.md automatically.",
|
|
235
|
-
],
|
|
236
|
-
parameters: Type.Object({
|
|
237
|
-
class: Type.String({ description: "Requirement class (e.g. 'functional', 'non-functional', 'operational')" }),
|
|
238
|
-
description: Type.String({ description: "Short description of the requirement" }),
|
|
239
|
-
why: Type.String({ description: "Why this requirement matters" }),
|
|
240
|
-
source: Type.String({ description: "Origin of the requirement (e.g. 'user-research', 'design', 'M001')" }),
|
|
241
|
-
status: Type.Optional(Type.String({ description: "Status (default: 'active')" })),
|
|
242
|
-
primary_owner: Type.Optional(Type.String({ description: "Primary owning slice" })),
|
|
243
|
-
supporting_slices: Type.Optional(Type.String({ description: "Supporting slices" })),
|
|
244
|
-
validation: Type.Optional(Type.String({ description: "Validation criteria" })),
|
|
245
|
-
notes: Type.Optional(Type.String({ description: "Additional notes" })),
|
|
246
|
-
}),
|
|
247
|
-
execute: requirementSaveExecute,
|
|
248
|
-
renderCall(args, theme) {
|
|
249
|
-
let text = theme.fg("toolTitle", theme.bold("requirement_save "));
|
|
250
|
-
if (args.class)
|
|
251
|
-
text += theme.fg("accent", `[${args.class}] `);
|
|
252
|
-
if (args.description)
|
|
253
|
-
text += theme.fg("muted", args.description);
|
|
254
|
-
return new Text(text, 0, 0);
|
|
255
|
-
},
|
|
256
|
-
renderResult(result, _options, theme) {
|
|
257
|
-
const d = result.details;
|
|
258
|
-
if (result.isError || d?.error) {
|
|
259
|
-
return new Text(theme.fg("error", `Error: ${d?.error ?? "unknown"}`), 0, 0);
|
|
260
|
-
}
|
|
261
|
-
let text = theme.fg("success", `Requirement ${d?.id ?? ""} saved`);
|
|
262
|
-
text += theme.fg("dim", ` → REQUIREMENTS.md`);
|
|
263
|
-
return new Text(text, 0, 0);
|
|
264
|
-
},
|
|
265
|
-
};
|
|
266
|
-
pi.registerTool(requirementSaveTool);
|
|
267
|
-
registerAlias(pi, requirementSaveTool, "gsd_save_requirement", "gsd_requirement_save");
|
|
268
196
|
// ─── gsd_summary_save (formerly gsd_save_summary) ──────────────────────
|
|
269
197
|
const summarySaveExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
|
|
270
198
|
const dbAvailable = await ensureDbOpen();
|
|
@@ -26,29 +26,6 @@ export function resolveProjectRootDbPath(basePath) {
|
|
|
26
26
|
const projectRoot = basePath.slice(0, fwdIdx);
|
|
27
27
|
return join(projectRoot, ".gsd", "gsd.db");
|
|
28
28
|
}
|
|
29
|
-
// Symlink-resolved layout: /.gsd/projects/<hash>/worktrees/M001/...
|
|
30
|
-
// The project root is everything before /.gsd/projects/ (#2517)
|
|
31
|
-
const symlinkMarker = `${sep}.gsd${sep}projects${sep}`;
|
|
32
|
-
const symlinkIdx = basePath.indexOf(symlinkMarker);
|
|
33
|
-
if (symlinkIdx !== -1) {
|
|
34
|
-
const afterProjects = basePath.slice(symlinkIdx + symlinkMarker.length);
|
|
35
|
-
// Expect: <hash>/worktrees/...
|
|
36
|
-
const worktreeSeg = `${sep}worktrees${sep}`;
|
|
37
|
-
if (afterProjects.includes(worktreeSeg)) {
|
|
38
|
-
const projectRoot = basePath.slice(0, symlinkIdx);
|
|
39
|
-
return join(projectRoot, ".gsd", "gsd.db");
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
// Forward-slash variant for symlink-resolved layout
|
|
43
|
-
const fwdSymlinkMarker = "/.gsd/projects/";
|
|
44
|
-
const fwdSymlinkIdx = basePath.indexOf(fwdSymlinkMarker);
|
|
45
|
-
if (fwdSymlinkIdx !== -1) {
|
|
46
|
-
const afterProjects = basePath.slice(fwdSymlinkIdx + fwdSymlinkMarker.length);
|
|
47
|
-
if (afterProjects.includes("/worktrees/")) {
|
|
48
|
-
const projectRoot = basePath.slice(0, fwdSymlinkIdx);
|
|
49
|
-
return join(projectRoot, ".gsd", "gsd.db");
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
29
|
return join(basePath, ".gsd", "gsd.db");
|
|
53
30
|
}
|
|
54
31
|
export async function ensureDbOpen() {
|
|
@@ -93,17 +70,9 @@ export async function ensureDbOpen() {
|
|
|
93
70
|
setLogBasePath(projectRoot);
|
|
94
71
|
return opened;
|
|
95
72
|
}
|
|
96
|
-
process.stderr.write(`gsd-db: ensureDbOpen failed — no .gsd directory found (resolvedPath=${resolveProjectRootDbPath(basePath)}, cwd=${basePath})\n`);
|
|
97
73
|
return false;
|
|
98
74
|
}
|
|
99
|
-
catch
|
|
100
|
-
const basePath = process.cwd();
|
|
101
|
-
const diagnostic = {
|
|
102
|
-
resolvedPath: resolveProjectRootDbPath(basePath),
|
|
103
|
-
cwd: basePath,
|
|
104
|
-
error: err.message ?? String(err),
|
|
105
|
-
};
|
|
106
|
-
process.stderr.write(`gsd-db: ensureDbOpen failed — ${JSON.stringify(diagnostic)}\n`);
|
|
75
|
+
catch {
|
|
107
76
|
return false;
|
|
108
77
|
}
|
|
109
78
|
}
|
|
@@ -3,9 +3,8 @@ import { isToolCallEventType } from "@gsd/pi-coding-agent";
|
|
|
3
3
|
import { buildMilestoneFileName, resolveMilestonePath, resolveSliceFile, resolveSlicePath } from "../paths.js";
|
|
4
4
|
import { buildBeforeAgentStartResult } from "./system-context.js";
|
|
5
5
|
import { handleAgentEnd } from "./agent-end-recovery.js";
|
|
6
|
-
import { clearDiscussionFlowState, isDepthVerified, isQueuePhaseActive, markDepthVerified, resetWriteGateState, shouldBlockContextWrite
|
|
6
|
+
import { clearDiscussionFlowState, isDepthVerified, isQueuePhaseActive, markDepthVerified, resetWriteGateState, shouldBlockContextWrite } from "./write-gate.js";
|
|
7
7
|
import { isBlockedStateFile, isBashWriteToStateFile, BLOCKED_WRITE_ERROR } from "../write-intercept.js";
|
|
8
|
-
import { cleanupQuickBranch } from "../quick.js";
|
|
9
8
|
import { getDiscussionMilestoneId } from "../guided-flow.js";
|
|
10
9
|
import { loadToolApiKeys } from "../commands-config.js";
|
|
11
10
|
import { loadFile, saveFile, formatContinue } from "../files.js";
|
|
@@ -14,6 +13,8 @@ import { getAutoDashboardData, isAutoActive, isAutoPaused, markToolEnd, markTool
|
|
|
14
13
|
import { isParallelActive, shutdownParallel } from "../parallel-orchestrator.js";
|
|
15
14
|
import { checkToolCallLoop, resetToolCallLoopGuard } from "./tool-call-loop-guard.js";
|
|
16
15
|
import { saveActivityLog } from "../activity-log.js";
|
|
16
|
+
import { startRtkStatusUpdates, stopRtkStatusUpdates } from "../rtk-status.js";
|
|
17
|
+
import { rewriteCommandWithRtk } from "../../shared/rtk.js";
|
|
17
18
|
// Skip the welcome screen on the very first session_start — cli.ts already
|
|
18
19
|
// printed it before the TUI launched. Only re-print on /clear (subsequent sessions).
|
|
19
20
|
let isFirstSession = true;
|
|
@@ -22,10 +23,19 @@ async function syncServiceTierStatus(ctx) {
|
|
|
22
23
|
ctx.ui.setStatus("gsd-fast", formatServiceTierFooterStatus(getEffectiveServiceTier(), ctx.model?.id));
|
|
23
24
|
}
|
|
24
25
|
export function registerHooks(pi) {
|
|
26
|
+
// Route all agent bash tool commands through RTK rewrite when opted in.
|
|
27
|
+
// This is a no-op when RTK is disabled or not installed.
|
|
28
|
+
pi.on("bash_transform", async (event) => {
|
|
29
|
+
const rewritten = rewriteCommandWithRtk(event.command);
|
|
30
|
+
if (rewritten === event.command)
|
|
31
|
+
return undefined;
|
|
32
|
+
return { command: rewritten };
|
|
33
|
+
});
|
|
25
34
|
pi.on("session_start", async (_event, ctx) => {
|
|
26
35
|
resetWriteGateState();
|
|
27
36
|
resetToolCallLoopGuard();
|
|
28
37
|
await syncServiceTierStatus(ctx);
|
|
38
|
+
startRtkStatusUpdates(ctx);
|
|
29
39
|
// Apply show_token_cost preference (#1515)
|
|
30
40
|
try {
|
|
31
41
|
const { loadEffectiveGSDPreferences } = await import("../preferences.js");
|
|
@@ -70,6 +80,10 @@ export function registerHooks(pi) {
|
|
|
70
80
|
clearDiscussionFlowState();
|
|
71
81
|
await syncServiceTierStatus(ctx);
|
|
72
82
|
loadToolApiKeys();
|
|
83
|
+
startRtkStatusUpdates(ctx);
|
|
84
|
+
});
|
|
85
|
+
pi.on("session_fork", async (_event, ctx) => {
|
|
86
|
+
startRtkStatusUpdates(ctx);
|
|
73
87
|
});
|
|
74
88
|
pi.on("before_agent_start", async (event, ctx) => {
|
|
75
89
|
return buildBeforeAgentStartResult(event, ctx);
|
|
@@ -78,17 +92,6 @@ export function registerHooks(pi) {
|
|
|
78
92
|
resetToolCallLoopGuard();
|
|
79
93
|
await handleAgentEnd(pi, event, ctx);
|
|
80
94
|
});
|
|
81
|
-
// Squash-merge quick-task branch back to the original branch after the
|
|
82
|
-
// agent turn completes (#2668). cleanupQuickBranch is a no-op when no
|
|
83
|
-
// quick-return state is pending, so this is safe to call on every turn.
|
|
84
|
-
pi.on("turn_end", async () => {
|
|
85
|
-
try {
|
|
86
|
-
cleanupQuickBranch();
|
|
87
|
-
}
|
|
88
|
-
catch {
|
|
89
|
-
// Best-effort: don't break the turn lifecycle if cleanup fails.
|
|
90
|
-
}
|
|
91
|
-
});
|
|
92
95
|
pi.on("session_before_compact", async () => {
|
|
93
96
|
if (isAutoActive() || isAutoPaused()) {
|
|
94
97
|
return { cancel: true };
|
|
@@ -127,6 +130,7 @@ export function registerHooks(pi) {
|
|
|
127
130
|
}));
|
|
128
131
|
});
|
|
129
132
|
pi.on("session_shutdown", async (_event, ctx) => {
|
|
133
|
+
stopRtkStatusUpdates(ctx);
|
|
130
134
|
if (isParallelActive()) {
|
|
131
135
|
try {
|
|
132
136
|
await shutdownParallel(process.cwd());
|
|
@@ -148,25 +152,6 @@ export function registerHooks(pi) {
|
|
|
148
152
|
if (loopCheck.block) {
|
|
149
153
|
return { block: true, reason: loopCheck.reason };
|
|
150
154
|
}
|
|
151
|
-
// ── Queue-mode execution guard (#2545): block source-code mutations ──
|
|
152
|
-
// When /gsd queue is active, the agent should only create milestones,
|
|
153
|
-
// not execute work. Block write/edit to non-.gsd/ paths and bash commands
|
|
154
|
-
// that would modify files.
|
|
155
|
-
if (isQueuePhaseActive()) {
|
|
156
|
-
let queueInput = "";
|
|
157
|
-
if (isToolCallEventType("write", event)) {
|
|
158
|
-
queueInput = event.input.path;
|
|
159
|
-
}
|
|
160
|
-
else if (isToolCallEventType("edit", event)) {
|
|
161
|
-
queueInput = event.input.path;
|
|
162
|
-
}
|
|
163
|
-
else if (isToolCallEventType("bash", event)) {
|
|
164
|
-
queueInput = event.input.command;
|
|
165
|
-
}
|
|
166
|
-
const queueGuard = shouldBlockQueueExecution(event.toolName, queueInput, true);
|
|
167
|
-
if (queueGuard.block)
|
|
168
|
-
return queueGuard;
|
|
169
|
-
}
|
|
170
155
|
// ── Single-writer engine: block direct writes to STATE.md ──────────
|
|
171
156
|
// Covers write, edit, and bash tools to prevent bypass vectors.
|
|
172
157
|
if (isToolCallEventType("write", event)) {
|
|
@@ -242,7 +227,7 @@ export function registerHooks(pi) {
|
|
|
242
227
|
pi.on("tool_execution_start", async (event) => {
|
|
243
228
|
if (!isAutoActive())
|
|
244
229
|
return;
|
|
245
|
-
markToolStart(event.toolCallId);
|
|
230
|
+
markToolStart(event.toolCallId, event.toolName);
|
|
246
231
|
});
|
|
247
232
|
pi.on("tool_execution_end", async (event) => {
|
|
248
233
|
markToolEnd(event.toolCallId);
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { existsSync, readFileSync
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
2
|
import { homedir } from "node:os";
|
|
3
3
|
import { join } from "node:path";
|
|
4
4
|
import { debugTime } from "../debug-logger.js";
|
|
5
5
|
import { loadPrompt } from "../prompt-loader.js";
|
|
6
|
-
import { readForensicsMarker } from "../forensics.js";
|
|
7
6
|
import { resolveAllSkillReferences, renderPreferencesForSystemPrompt, loadEffectiveGSDPreferences } from "../preferences.js";
|
|
8
7
|
import { resolveGsdRootFile, resolveSliceFile, resolveSlicePath, resolveTaskFile, resolveTaskFiles, resolveTasksDir, relSliceFile, relSlicePath, relTaskFile } from "../paths.js";
|
|
9
8
|
import { hasSkillSnapshot, detectNewSkills, formatSkillsXml } from "../skill-discovery.js";
|
|
@@ -73,25 +72,25 @@ export async function buildBeforeAgentStartResult(event, ctx) {
|
|
|
73
72
|
}
|
|
74
73
|
warnDeprecatedAgentInstructions();
|
|
75
74
|
const injection = await buildGuidedExecuteContextInjection(event.prompt, process.cwd());
|
|
76
|
-
// Re-inject forensics context on follow-up turns (#2941)
|
|
77
|
-
const forensicsInjection = !injection ? buildForensicsContextInjection(process.cwd()) : null;
|
|
78
75
|
const worktreeBlock = buildWorktreeContextBlock();
|
|
79
76
|
const fullSystem = `${event.systemPrompt}\n\n[SYSTEM CONTEXT — GSD]\n\n${systemContent}${preferenceBlock}${knowledgeBlock}${memoryBlock}${newSkillsBlock}${worktreeBlock}`;
|
|
80
77
|
stopContextTimer({
|
|
81
78
|
systemPromptSize: fullSystem.length,
|
|
82
|
-
injectionSize: injection?.length ??
|
|
79
|
+
injectionSize: injection?.length ?? 0,
|
|
83
80
|
hasPreferences: preferenceBlock.length > 0,
|
|
84
81
|
hasNewSkills: newSkillsBlock.length > 0,
|
|
85
82
|
});
|
|
86
|
-
// Determine which context message to inject (guided execute takes priority)
|
|
87
|
-
const contextMessage = injection
|
|
88
|
-
? { customType: "gsd-guided-context", content: injection, display: false }
|
|
89
|
-
: forensicsInjection
|
|
90
|
-
? { customType: "gsd-forensics", content: forensicsInjection, display: false }
|
|
91
|
-
: null;
|
|
92
83
|
return {
|
|
93
84
|
systemPrompt: fullSystem,
|
|
94
|
-
...(
|
|
85
|
+
...(injection
|
|
86
|
+
? {
|
|
87
|
+
message: {
|
|
88
|
+
customType: "gsd-guided-context",
|
|
89
|
+
content: injection,
|
|
90
|
+
display: false,
|
|
91
|
+
},
|
|
92
|
+
}
|
|
93
|
+
: {}),
|
|
95
94
|
};
|
|
96
95
|
}
|
|
97
96
|
export function loadKnowledgeBlock(gsdHomeDir, cwd) {
|
|
@@ -333,35 +332,3 @@ function escapeRegExp(value) {
|
|
|
333
332
|
function oneLine(text) {
|
|
334
333
|
return text.replace(/\s+/g, " ").trim();
|
|
335
334
|
}
|
|
336
|
-
// ─── Forensics Context Re-injection (#2941) ──────────────────────────────────
|
|
337
|
-
/**
|
|
338
|
-
* Check for an active forensics session and return the prompt content
|
|
339
|
-
* so it can be re-injected on follow-up turns.
|
|
340
|
-
*/
|
|
341
|
-
function buildForensicsContextInjection(basePath) {
|
|
342
|
-
const marker = readForensicsMarker(basePath);
|
|
343
|
-
if (!marker)
|
|
344
|
-
return null;
|
|
345
|
-
// Expire markers older than 2 hours to avoid stale context
|
|
346
|
-
const age = Date.now() - new Date(marker.createdAt).getTime();
|
|
347
|
-
if (age > 2 * 60 * 60 * 1000) {
|
|
348
|
-
clearForensicsMarker(basePath);
|
|
349
|
-
return null;
|
|
350
|
-
}
|
|
351
|
-
return marker.promptContent;
|
|
352
|
-
}
|
|
353
|
-
/**
|
|
354
|
-
* Remove the active forensics marker file, e.g. when the investigation
|
|
355
|
-
* is complete or the session expires.
|
|
356
|
-
*/
|
|
357
|
-
export function clearForensicsMarker(basePath) {
|
|
358
|
-
const markerPath = join(basePath, ".gsd", "runtime", "active-forensics.json");
|
|
359
|
-
if (existsSync(markerPath)) {
|
|
360
|
-
try {
|
|
361
|
-
unlinkSync(markerPath);
|
|
362
|
-
}
|
|
363
|
-
catch {
|
|
364
|
-
// non-fatal
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
}
|
|
@@ -1,27 +1,4 @@
|
|
|
1
1
|
const MILESTONE_CONTEXT_RE = /M\d+(?:-[a-z0-9]{6})?-CONTEXT\.md$/;
|
|
2
|
-
/**
|
|
3
|
-
* Path segment that identifies .gsd/ planning artifacts.
|
|
4
|
-
* Writes to these paths are allowed during queue mode.
|
|
5
|
-
*/
|
|
6
|
-
const GSD_DIR_RE = /(^|[/\\])\.gsd([/\\]|$)/;
|
|
7
|
-
/**
|
|
8
|
-
* Read-only tool names that are always safe during queue mode.
|
|
9
|
-
*/
|
|
10
|
-
const QUEUE_SAFE_TOOLS = new Set([
|
|
11
|
-
"read", "grep", "find", "ls", "glob",
|
|
12
|
-
// Discussion & planning tools
|
|
13
|
-
"ask_user_questions",
|
|
14
|
-
"gsd_milestone_generate_id",
|
|
15
|
-
"gsd_summary_save",
|
|
16
|
-
// Web research tools used during queue discussion
|
|
17
|
-
"search-the-web", "resolve_library", "get_library_docs", "fetch_page",
|
|
18
|
-
"search_and_read",
|
|
19
|
-
]);
|
|
20
|
-
/**
|
|
21
|
-
* Bash commands that are read-only / investigative — safe during queue mode.
|
|
22
|
-
* Matches the leading command in a bash invocation.
|
|
23
|
-
*/
|
|
24
|
-
const BASH_READ_ONLY_RE = /^\s*(cat|head|tail|less|more|wc|file|stat|du|df|which|type|echo|printf|ls|find|grep|rg|awk|sed\b(?!.*-i)|sort|uniq|diff|comm|tr|cut|tee\s+-a\s+\/dev\/null|git\s+(log|show|diff|status|branch|tag|remote|rev-parse|ls-files|blame|shortlog|describe|stash\s+list|config\s+--get|cat-file)|gh\s+(issue|pr|api|repo|release)\s+(view|list|diff|status|checks)|mkdir\s+-p\s+\.gsd|rtk\s)/;
|
|
25
2
|
let depthVerificationDone = false;
|
|
26
3
|
let activeQueuePhase = false;
|
|
27
4
|
export function isDepthVerified() {
|
|
@@ -59,47 +36,3 @@ export function shouldBlockContextWrite(toolName, inputPath, milestoneId, depthV
|
|
|
59
36
|
reason: `Blocked: Cannot write to milestone CONTEXT.md during discussion phase without depth verification. Call ask_user_questions with question id "depth_verification" first to confirm discussion depth before writing context.`,
|
|
60
37
|
};
|
|
61
38
|
}
|
|
62
|
-
/**
|
|
63
|
-
* Queue-mode execution guard (#2545).
|
|
64
|
-
*
|
|
65
|
-
* When the queue phase is active, the agent should only create planning
|
|
66
|
-
* artifacts (milestones, CONTEXT.md, QUEUE.md, etc.) — never execute work.
|
|
67
|
-
* This function blocks write/edit/bash tool calls that would modify source
|
|
68
|
-
* code outside of .gsd/.
|
|
69
|
-
*
|
|
70
|
-
* @param toolName The tool being called (write, edit, bash, etc.)
|
|
71
|
-
* @param input For write/edit: the file path. For bash: the command string.
|
|
72
|
-
* @param queuePhaseActive Whether the queue phase is currently active.
|
|
73
|
-
* @returns { block, reason } — block=true if the call should be rejected.
|
|
74
|
-
*/
|
|
75
|
-
export function shouldBlockQueueExecution(toolName, input, queuePhaseActive) {
|
|
76
|
-
if (!queuePhaseActive)
|
|
77
|
-
return { block: false };
|
|
78
|
-
// Always-safe tools (read-only, discussion, planning)
|
|
79
|
-
if (QUEUE_SAFE_TOOLS.has(toolName))
|
|
80
|
-
return { block: false };
|
|
81
|
-
// write/edit — allow if targeting .gsd/ planning artifacts
|
|
82
|
-
if (toolName === "write" || toolName === "edit") {
|
|
83
|
-
if (GSD_DIR_RE.test(input))
|
|
84
|
-
return { block: false };
|
|
85
|
-
return {
|
|
86
|
-
block: true,
|
|
87
|
-
reason: `Blocked: /gsd queue is a planning tool — it creates milestones, not executes work. ` +
|
|
88
|
-
`Cannot ${toolName} to "${input}" during queue mode. ` +
|
|
89
|
-
`Write CONTEXT.md files and update PROJECT.md/QUEUE.md instead.`,
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
// bash — allow read-only/investigative commands, block everything else
|
|
93
|
-
if (toolName === "bash") {
|
|
94
|
-
if (BASH_READ_ONLY_RE.test(input))
|
|
95
|
-
return { block: false };
|
|
96
|
-
return {
|
|
97
|
-
block: true,
|
|
98
|
-
reason: `Blocked: /gsd queue is a planning tool — it creates milestones, not executes work. ` +
|
|
99
|
-
`Cannot run "${input.slice(0, 80)}${input.length > 80 ? "…" : ""}" during queue mode. ` +
|
|
100
|
-
`Use read-only commands (cat, grep, git log, etc.) to investigate, then write planning artifacts.`,
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
// Unknown tools — allow by default (custom extension tools, etc.)
|
|
104
|
-
return { block: false };
|
|
105
|
-
}
|
|
@@ -134,7 +134,7 @@ export function countPendingCaptures(basePath) {
|
|
|
134
134
|
* Mark a capture as resolved with classification and rationale.
|
|
135
135
|
* Rewrites the entry in place, preserving other entries.
|
|
136
136
|
*/
|
|
137
|
-
export function markCaptureResolved(basePath, captureId, classification, resolution, rationale
|
|
137
|
+
export function markCaptureResolved(basePath, captureId, classification, resolution, rationale) {
|
|
138
138
|
const filePath = resolveCapturesPath(basePath);
|
|
139
139
|
if (!existsSync(filePath))
|
|
140
140
|
return;
|
|
@@ -155,16 +155,12 @@ export function markCaptureResolved(basePath, captureId, classification, resolut
|
|
|
155
155
|
`**Rationale:** ${rationale}`,
|
|
156
156
|
`**Resolved:** ${resolvedAt}`,
|
|
157
157
|
];
|
|
158
|
-
|
|
159
|
-
newFields.push(`**Milestone:** ${milestoneId}`);
|
|
160
|
-
}
|
|
161
|
-
// Remove any existing classification/resolution/rationale/resolved/milestone fields
|
|
158
|
+
// Remove any existing classification/resolution/rationale/resolved fields
|
|
162
159
|
// (in case of re-triage)
|
|
163
160
|
section = section.replace(/\*\*Classification:\*\*\s*.+\n?/g, "");
|
|
164
161
|
section = section.replace(/\*\*Resolution:\*\*\s*.+\n?/g, "");
|
|
165
162
|
section = section.replace(/\*\*Rationale:\*\*\s*.+\n?/g, "");
|
|
166
163
|
section = section.replace(/\*\*Resolved:\*\*\s*.+\n?/g, "");
|
|
167
|
-
section = section.replace(/\*\*Milestone:\*\*\s*.+\n?/g, "");
|
|
168
164
|
// Add new fields after Status line
|
|
169
165
|
section = section.trimEnd() + "\n" + newFields.join("\n") + "\n";
|
|
170
166
|
const updated = content.replace(sectionRegex, section);
|
|
@@ -196,59 +192,13 @@ export function markCaptureExecuted(basePath, captureId) {
|
|
|
196
192
|
* Load resolved captures that have actionable classifications (inject, replan,
|
|
197
193
|
* quick-task) but have NOT yet been executed.
|
|
198
194
|
* These are captures whose resolutions need to be carried out.
|
|
199
|
-
*
|
|
200
|
-
* When `currentMilestoneId` is provided, captures resolved in a *different*
|
|
201
|
-
* milestone are treated as stale and excluded. This prevents quick-task
|
|
202
|
-
* captures from a prior milestone re-executing after the underlying issues
|
|
203
|
-
* were already fixed by planned milestone work (#2872).
|
|
204
|
-
*
|
|
205
|
-
* Captures that have no `resolvedInMilestone` (legacy captures resolved before
|
|
206
|
-
* this field was introduced) are always included for backward compatibility.
|
|
207
195
|
*/
|
|
208
|
-
export function loadActionableCaptures(basePath
|
|
196
|
+
export function loadActionableCaptures(basePath) {
|
|
209
197
|
return loadAllCaptures(basePath).filter(c => c.status === "resolved" &&
|
|
210
198
|
!c.executed &&
|
|
211
199
|
(c.classification === "inject" ||
|
|
212
200
|
c.classification === "replan" ||
|
|
213
|
-
c.classification === "quick-task")
|
|
214
|
-
// Staleness gate: exclude captures resolved in a different milestone (#2872)
|
|
215
|
-
(!currentMilestoneId ||
|
|
216
|
-
!c.resolvedInMilestone ||
|
|
217
|
-
c.resolvedInMilestone === currentMilestoneId));
|
|
218
|
-
}
|
|
219
|
-
/**
|
|
220
|
-
* Retroactively stamp a capture with a milestone ID.
|
|
221
|
-
*
|
|
222
|
-
* Used by executeTriageResolutions() as a safety net when the triage LLM
|
|
223
|
-
* resolves a capture without writing the **Milestone:** field. This ensures
|
|
224
|
-
* the staleness gate in loadActionableCaptures() works correctly even for
|
|
225
|
-
* captures resolved before the prompt was updated (#2872).
|
|
226
|
-
*/
|
|
227
|
-
export function stampCaptureMilestone(basePath, captureId, milestoneId) {
|
|
228
|
-
const filePath = resolveCapturesPath(basePath);
|
|
229
|
-
if (!existsSync(filePath))
|
|
230
|
-
return;
|
|
231
|
-
const content = readFileSync(filePath, "utf-8");
|
|
232
|
-
const sectionRegex = new RegExp(`(### ${escapeRegex(captureId)}\\n(?:(?!### ).)*?)(?=### |$)`, "s");
|
|
233
|
-
const match = sectionRegex.exec(content);
|
|
234
|
-
if (!match)
|
|
235
|
-
return;
|
|
236
|
-
let section = match[1];
|
|
237
|
-
// Only stamp if not already present
|
|
238
|
-
if (/\*\*Milestone:\*\*/.test(section))
|
|
239
|
-
return;
|
|
240
|
-
// Insert after the Resolved field (or at end of section)
|
|
241
|
-
const resolvedFieldEnd = section.search(/\*\*Resolved:\*\*\s*.+\n?/);
|
|
242
|
-
if (resolvedFieldEnd !== -1) {
|
|
243
|
-
const resolvedMatch = section.match(/\*\*Resolved:\*\*\s*.+\n?/);
|
|
244
|
-
const insertPos = resolvedFieldEnd + (resolvedMatch?.[0]?.length ?? 0);
|
|
245
|
-
section = section.slice(0, insertPos) + `**Milestone:** ${milestoneId}\n` + section.slice(insertPos);
|
|
246
|
-
}
|
|
247
|
-
else {
|
|
248
|
-
section = section.trimEnd() + "\n" + `**Milestone:** ${milestoneId}` + "\n";
|
|
249
|
-
}
|
|
250
|
-
const updated = content.replace(sectionRegex, section);
|
|
251
|
-
writeFileSync(filePath, updated, "utf-8");
|
|
201
|
+
c.classification === "quick-task"));
|
|
252
202
|
}
|
|
253
203
|
// ─── Parser ───────────────────────────────────────────────────────────────────
|
|
254
204
|
/**
|
|
@@ -271,7 +221,6 @@ function parseCapturesContent(content) {
|
|
|
271
221
|
const resolution = extractBoldField(body, "Resolution");
|
|
272
222
|
const rationale = extractBoldField(body, "Rationale");
|
|
273
223
|
const resolvedAt = extractBoldField(body, "Resolved");
|
|
274
|
-
const milestoneId = extractBoldField(body, "Milestone");
|
|
275
224
|
const executedAt = extractBoldField(body, "Executed");
|
|
276
225
|
if (!text || !timestamp)
|
|
277
226
|
continue;
|
|
@@ -287,7 +236,6 @@ function parseCapturesContent(content) {
|
|
|
287
236
|
...(resolution ? { resolution } : {}),
|
|
288
237
|
...(rationale ? { rationale } : {}),
|
|
289
238
|
...(resolvedAt ? { resolvedAt } : {}),
|
|
290
|
-
...(milestoneId ? { resolvedInMilestone: milestoneId } : {}),
|
|
291
239
|
...(executedAt ? { executed: true } : {}),
|
|
292
240
|
});
|
|
293
241
|
}
|