gsd-pi 2.33.1-dev.ee47f1b → 2.34.0-dev.0150ae9
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/dist/bundled-resource-path.d.ts +8 -0
- package/dist/bundled-resource-path.js +14 -0
- package/dist/headless-query.js +6 -6
- package/dist/resources/extensions/gsd/auto/session.js +27 -32
- package/dist/resources/extensions/gsd/auto-dashboard.js +29 -109
- package/dist/resources/extensions/gsd/auto-direct-dispatch.js +6 -1
- package/dist/resources/extensions/gsd/auto-dispatch.js +52 -81
- package/dist/resources/extensions/gsd/auto-loop.js +956 -0
- package/dist/resources/extensions/gsd/auto-observability.js +4 -2
- package/dist/resources/extensions/gsd/auto-post-unit.js +75 -185
- package/dist/resources/extensions/gsd/auto-prompts.js +133 -101
- package/dist/resources/extensions/gsd/auto-recovery.js +59 -97
- package/dist/resources/extensions/gsd/auto-start.js +330 -309
- package/dist/resources/extensions/gsd/auto-supervisor.js +5 -11
- package/dist/resources/extensions/gsd/auto-timeout-recovery.js +7 -7
- package/dist/resources/extensions/gsd/auto-timers.js +3 -4
- package/dist/resources/extensions/gsd/auto-verification.js +35 -73
- package/dist/resources/extensions/gsd/auto-worktree-sync.js +167 -0
- package/dist/resources/extensions/gsd/auto-worktree.js +291 -126
- package/dist/resources/extensions/gsd/auto.js +283 -1013
- package/dist/resources/extensions/gsd/captures.js +10 -4
- package/dist/resources/extensions/gsd/dispatch-guard.js +7 -8
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +25 -18
- package/dist/resources/extensions/gsd/doctor-checks.js +3 -4
- package/dist/resources/extensions/gsd/git-service.js +1 -1
- package/dist/resources/extensions/gsd/gsd-db.js +296 -151
- package/dist/resources/extensions/gsd/index.js +92 -228
- package/dist/resources/extensions/gsd/post-unit-hooks.js +13 -13
- package/dist/resources/extensions/gsd/progress-score.js +61 -156
- package/dist/resources/extensions/gsd/quick.js +98 -122
- package/dist/resources/extensions/gsd/session-lock.js +13 -0
- package/dist/resources/extensions/gsd/templates/preferences.md +1 -0
- package/dist/resources/extensions/gsd/undo.js +43 -48
- package/dist/resources/extensions/gsd/unit-runtime.js +16 -15
- package/dist/resources/extensions/gsd/verification-evidence.js +0 -1
- package/dist/resources/extensions/gsd/verification-gate.js +6 -35
- package/dist/resources/extensions/gsd/worktree-command.js +30 -24
- package/dist/resources/extensions/gsd/worktree-manager.js +2 -3
- package/dist/resources/extensions/gsd/worktree-resolver.js +344 -0
- package/dist/resources/extensions/gsd/worktree.js +7 -44
- package/dist/resources/extensions/mcp-client/index.js +2 -1
- package/dist/tool-bootstrap.js +59 -11
- package/dist/worktree-cli.js +7 -7
- package/package.json +1 -1
- package/packages/native/dist/native.d.ts +0 -2
- package/packages/native/dist/native.js +0 -2
- package/packages/native/src/native.ts +0 -3
- package/packages/pi-agent-core/dist/proxy.d.ts +1 -25
- package/packages/pi-agent-core/dist/proxy.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/proxy.js +1 -1
- package/packages/pi-agent-core/dist/proxy.js.map +1 -1
- package/packages/pi-agent-core/src/proxy.ts +1 -1
- package/packages/pi-ai/dist/api-registry.d.ts +0 -2
- package/packages/pi-ai/dist/api-registry.d.ts.map +1 -1
- package/packages/pi-ai/dist/api-registry.js +0 -10
- package/packages/pi-ai/dist/api-registry.js.map +1 -1
- package/packages/pi-ai/dist/models.generated.d.ts +3630 -5483
- package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
- package/packages/pi-ai/dist/models.generated.js +735 -2588
- package/packages/pi-ai/dist/models.generated.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.d.ts +0 -8
- package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.js +1 -1
- package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
- package/packages/pi-ai/dist/providers/github-copilot-headers.d.ts +0 -1
- package/packages/pi-ai/dist/providers/github-copilot-headers.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/github-copilot-headers.js +1 -1
- package/packages/pi-ai/dist/providers/github-copilot-headers.js.map +1 -1
- package/packages/pi-ai/dist/providers/google-gemini-cli.d.ts +1 -43
- package/packages/pi-ai/dist/providers/google-gemini-cli.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/google-gemini-cli.js +2 -2
- package/packages/pi-ai/dist/providers/google-gemini-cli.js.map +1 -1
- package/packages/pi-ai/dist/providers/google-shared.d.ts +0 -4
- package/packages/pi-ai/dist/providers/google-shared.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/google-shared.js +1 -1
- package/packages/pi-ai/dist/providers/google-shared.js.map +1 -1
- package/packages/pi-ai/dist/providers/register-builtins.d.ts +0 -1
- package/packages/pi-ai/dist/providers/register-builtins.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/register-builtins.js +1 -1
- package/packages/pi-ai/dist/providers/register-builtins.js.map +1 -1
- package/packages/pi-ai/dist/utils/event-stream.d.ts +0 -2
- package/packages/pi-ai/dist/utils/event-stream.d.ts.map +1 -1
- package/packages/pi-ai/dist/utils/event-stream.js +0 -4
- package/packages/pi-ai/dist/utils/event-stream.js.map +1 -1
- package/packages/pi-ai/dist/utils/overflow.d.ts +0 -4
- package/packages/pi-ai/dist/utils/overflow.d.ts.map +1 -1
- package/packages/pi-ai/dist/utils/overflow.js +0 -6
- package/packages/pi-ai/dist/utils/overflow.js.map +1 -1
- package/packages/pi-ai/dist/utils/validation.d.ts +0 -8
- package/packages/pi-ai/dist/utils/validation.d.ts.map +1 -1
- package/packages/pi-ai/dist/utils/validation.js +0 -14
- package/packages/pi-ai/dist/utils/validation.js.map +1 -1
- package/packages/pi-ai/src/api-registry.ts +0 -12
- package/packages/pi-ai/src/models.generated.ts +1039 -2892
- package/packages/pi-ai/src/providers/anthropic.ts +1 -1
- package/packages/pi-ai/src/providers/github-copilot-headers.ts +1 -1
- package/packages/pi-ai/src/providers/google-gemini-cli.ts +2 -2
- package/packages/pi-ai/src/providers/google-shared.ts +1 -1
- package/packages/pi-ai/src/providers/register-builtins.ts +1 -1
- package/packages/pi-ai/src/utils/event-stream.ts +0 -5
- package/packages/pi-ai/src/utils/overflow.ts +1 -8
- package/packages/pi-ai/src/utils/validation.ts +0 -15
- package/packages/pi-coding-agent/dist/config.d.ts +0 -9
- package/packages/pi-coding-agent/dist/config.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/config.js +4 -8
- package/packages/pi-coding-agent/dist/config.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.d.ts +0 -4
- package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.js +1 -1
- package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +0 -5
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.js +0 -13
- package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/keybindings.d.ts +0 -8
- package/packages/pi-coding-agent/dist/core/keybindings.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/keybindings.js +2 -2
- package/packages/pi-coding-agent/dist/core/keybindings.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/client.d.ts +0 -17
- package/packages/pi-coding-agent/dist/core/lsp/client.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/client.js +3 -62
- package/packages/pi-coding-agent/dist/core/lsp/client.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/config.d.ts +0 -2
- package/packages/pi-coding-agent/dist/core/lsp/config.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/config.js +0 -7
- package/packages/pi-coding-agent/dist/core/lsp/config.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/edits.d.ts +0 -5
- package/packages/pi-coding-agent/dist/core/lsp/edits.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/edits.js +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/edits.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts +0 -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 +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/lspmux.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/utils.d.ts +1 -6
- package/packages/pi-coding-agent/dist/core/lsp/utils.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/utils.js +1 -28
- package/packages/pi-coding-agent/dist/core/lsp/utils.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/messages.d.ts +0 -8
- package/packages/pi-coding-agent/dist/core/messages.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/messages.js +5 -5
- package/packages/pi-coding-agent/dist/core/messages.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry.d.ts +0 -3
- package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry.js +1 -3
- package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-resolver.d.ts +1 -26
- package/packages/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-resolver.js +3 -59
- package/packages/pi-coding-agent/dist/core/model-resolver.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/prompt-templates.d.ts +0 -17
- package/packages/pi-coding-agent/dist/core/prompt-templates.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/prompt-templates.js +2 -2
- package/packages/pi-coding-agent/dist/core/prompt-templates.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager.d.ts +0 -4
- package/packages/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager.js +2 -4
- package/packages/pi-coding-agent/dist/core/session-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +0 -12
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.js +2 -2
- package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/migrations.d.ts +0 -16
- package/packages/pi-coding-agent/dist/migrations.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/migrations.js +2 -2
- package/packages/pi-coding-agent/dist/migrations.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.d.ts +0 -2
- package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.js +2 -2
- package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +1 -24
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +50 -512
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts +71 -0
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js +514 -0
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +65 -4
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +6 -23
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts +12 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +175 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -0
- package/packages/pi-coding-agent/dist/utils/changelog.d.ts +0 -4
- package/packages/pi-coding-agent/dist/utils/changelog.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/utils/changelog.js +1 -1
- package/packages/pi-coding-agent/dist/utils/changelog.js.map +1 -1
- package/packages/pi-coding-agent/dist/utils/clipboard-image.d.ts +0 -1
- package/packages/pi-coding-agent/dist/utils/clipboard-image.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/utils/clipboard-image.js +1 -1
- package/packages/pi-coding-agent/dist/utils/clipboard-image.js.map +1 -1
- package/packages/pi-coding-agent/dist/utils/photon.d.ts +0 -19
- package/packages/pi-coding-agent/dist/utils/photon.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/utils/photon.js +1 -120
- package/packages/pi-coding-agent/dist/utils/photon.js.map +1 -1
- package/packages/pi-coding-agent/dist/utils/tools-manager.d.ts +0 -1
- package/packages/pi-coding-agent/dist/utils/tools-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/utils/tools-manager.js +1 -1
- package/packages/pi-coding-agent/dist/utils/tools-manager.js.map +1 -1
- package/packages/pi-coding-agent/package.json +1 -1
- package/packages/pi-coding-agent/src/config.ts +5 -10
- package/packages/pi-coding-agent/src/core/export-html/ansi-to-html.ts +1 -1
- package/packages/pi-coding-agent/src/core/extensions/runner.ts +0 -13
- package/packages/pi-coding-agent/src/core/keybindings.ts +2 -2
- package/packages/pi-coding-agent/src/core/lsp/client.ts +3 -73
- package/packages/pi-coding-agent/src/core/lsp/config.ts +0 -11
- package/packages/pi-coding-agent/src/core/lsp/edits.ts +1 -1
- package/packages/pi-coding-agent/src/core/lsp/lspmux.ts +1 -1
- package/packages/pi-coding-agent/src/core/lsp/utils.ts +1 -33
- package/packages/pi-coding-agent/src/core/messages.ts +5 -5
- package/packages/pi-coding-agent/src/core/model-registry.ts +0 -2
- package/packages/pi-coding-agent/src/core/model-resolver.ts +3 -77
- package/packages/pi-coding-agent/src/core/prompt-templates.ts +2 -2
- package/packages/pi-coding-agent/src/core/session-manager.ts +2 -4
- package/packages/pi-coding-agent/src/core/settings-manager.ts +2 -2
- package/packages/pi-coding-agent/src/migrations.ts +2 -2
- package/packages/pi-coding-agent/src/modes/interactive/components/session-selector-search.ts +2 -2
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +50 -561
- package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.ts +653 -0
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +7 -26
- package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +196 -0
- package/packages/pi-coding-agent/src/utils/changelog.ts +1 -1
- package/packages/pi-coding-agent/src/utils/clipboard-image.ts +1 -1
- package/packages/pi-coding-agent/src/utils/photon.ts +0 -137
- package/packages/pi-coding-agent/src/utils/tools-manager.ts +1 -1
- package/packages/pi-tui/dist/components/editor.d.ts +0 -10
- package/packages/pi-tui/dist/components/editor.d.ts.map +1 -1
- package/packages/pi-tui/dist/components/editor.js +1 -1
- package/packages/pi-tui/dist/components/editor.js.map +1 -1
- package/packages/pi-tui/dist/overlay-layout.d.ts +55 -0
- package/packages/pi-tui/dist/overlay-layout.d.ts.map +1 -0
- package/packages/pi-tui/dist/overlay-layout.js +288 -0
- package/packages/pi-tui/dist/overlay-layout.js.map +1 -0
- package/packages/pi-tui/dist/tui.d.ts +0 -22
- package/packages/pi-tui/dist/tui.d.ts.map +1 -1
- package/packages/pi-tui/dist/tui.js +6 -272
- package/packages/pi-tui/dist/tui.js.map +1 -1
- package/packages/pi-tui/dist/utils.d.ts +0 -7
- package/packages/pi-tui/dist/utils.d.ts.map +1 -1
- package/packages/pi-tui/dist/utils.js +0 -44
- package/packages/pi-tui/dist/utils.js.map +1 -1
- package/packages/pi-tui/src/components/editor.ts +1 -1
- package/packages/pi-tui/src/overlay-layout.ts +372 -0
- package/packages/pi-tui/src/tui.ts +11 -312
- package/packages/pi-tui/src/utils.ts +0 -43
- package/pkg/dist/core/export-html/ansi-to-html.d.ts +0 -4
- package/pkg/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
- package/pkg/dist/core/export-html/ansi-to-html.js +1 -1
- package/pkg/dist/core/export-html/ansi-to-html.js.map +1 -1
- package/pkg/dist/modes/interactive/theme/theme.d.ts +65 -4
- package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/theme.js +6 -23
- package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
- package/pkg/dist/modes/interactive/theme/themes.d.ts +12 -0
- package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -0
- package/pkg/dist/modes/interactive/theme/themes.js +175 -0
- package/pkg/dist/modes/interactive/theme/themes.js.map +1 -0
- package/pkg/package.json +1 -1
- package/src/resources/extensions/gsd/auto/session.ts +47 -30
- package/src/resources/extensions/gsd/auto-dashboard.ts +28 -131
- package/src/resources/extensions/gsd/auto-direct-dispatch.ts +6 -1
- package/src/resources/extensions/gsd/auto-dispatch.ts +135 -91
- package/src/resources/extensions/gsd/auto-loop.ts +1665 -0
- package/src/resources/extensions/gsd/auto-observability.ts +4 -2
- package/src/resources/extensions/gsd/auto-post-unit.ts +85 -228
- package/src/resources/extensions/gsd/auto-prompts.ts +138 -109
- package/src/resources/extensions/gsd/auto-recovery.ts +124 -118
- package/src/resources/extensions/gsd/auto-start.ts +440 -354
- package/src/resources/extensions/gsd/auto-supervisor.ts +5 -12
- package/src/resources/extensions/gsd/auto-timeout-recovery.ts +8 -8
- package/src/resources/extensions/gsd/auto-timers.ts +3 -4
- package/src/resources/extensions/gsd/auto-verification.ts +76 -90
- package/src/resources/extensions/gsd/auto-worktree-sync.ts +204 -0
- package/src/resources/extensions/gsd/auto-worktree.ts +389 -141
- package/src/resources/extensions/gsd/auto.ts +515 -1199
- package/src/resources/extensions/gsd/captures.ts +10 -4
- package/src/resources/extensions/gsd/dispatch-guard.ts +13 -9
- package/src/resources/extensions/gsd/docs/preferences-reference.md +25 -18
- package/src/resources/extensions/gsd/doctor-checks.ts +3 -4
- package/src/resources/extensions/gsd/git-service.ts +8 -1
- package/src/resources/extensions/gsd/gitignore.ts +4 -2
- package/src/resources/extensions/gsd/gsd-db.ts +375 -180
- package/src/resources/extensions/gsd/index.ts +104 -263
- package/src/resources/extensions/gsd/post-unit-hooks.ts +13 -13
- package/src/resources/extensions/gsd/progress-score.ts +65 -200
- package/src/resources/extensions/gsd/quick.ts +121 -125
- package/src/resources/extensions/gsd/session-lock.ts +11 -0
- package/src/resources/extensions/gsd/templates/preferences.md +1 -0
- package/src/resources/extensions/gsd/tests/agent-end-retry.test.ts +32 -59
- package/src/resources/extensions/gsd/tests/all-milestones-complete-merge.test.ts +75 -27
- package/src/resources/extensions/gsd/tests/auto-budget-alerts.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-lock-creation.test.ts +37 -0
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +1458 -0
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +8 -162
- package/src/resources/extensions/gsd/tests/auto-secrets-gate.test.ts +2 -108
- package/src/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +1 -3
- package/src/resources/extensions/gsd/tests/auto-worktree-milestone-merge.test.ts +0 -3
- package/src/resources/extensions/gsd/tests/auto-worktree.test.ts +58 -0
- package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +0 -55
- package/src/resources/extensions/gsd/tests/headless-query.test.ts +22 -0
- package/src/resources/extensions/gsd/tests/milestone-transition-worktree.test.ts +8 -11
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +4 -6
- package/src/resources/extensions/gsd/tests/run-uat.test.ts +3 -3
- package/src/resources/extensions/gsd/tests/session-lock-regression.test.ts +64 -0
- package/src/resources/extensions/gsd/tests/sidecar-queue.test.ts +181 -0
- package/src/resources/extensions/gsd/tests/stale-worktree-cwd.test.ts +0 -3
- package/src/resources/extensions/gsd/tests/token-profile.test.ts +6 -6
- package/src/resources/extensions/gsd/tests/triage-dispatch.test.ts +6 -6
- package/src/resources/extensions/gsd/tests/undo.test.ts +6 -0
- package/src/resources/extensions/gsd/tests/verification-evidence.test.ts +24 -26
- package/src/resources/extensions/gsd/tests/verification-gate.test.ts +7 -201
- package/src/resources/extensions/gsd/tests/worktree-db-integration.test.ts +205 -0
- package/src/resources/extensions/gsd/tests/worktree-db.test.ts +442 -0
- package/src/resources/extensions/gsd/tests/worktree-e2e.test.ts +0 -3
- package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +705 -0
- package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +57 -106
- package/src/resources/extensions/gsd/tests/worktree.test.ts +5 -1
- package/src/resources/extensions/gsd/tests/write-gate.test.ts +43 -132
- package/src/resources/extensions/gsd/types.ts +90 -81
- package/src/resources/extensions/gsd/undo.ts +42 -46
- package/src/resources/extensions/gsd/unit-runtime.ts +14 -18
- package/src/resources/extensions/gsd/verification-evidence.ts +1 -3
- package/src/resources/extensions/gsd/verification-gate.ts +6 -39
- package/src/resources/extensions/gsd/worktree-command.ts +36 -24
- package/src/resources/extensions/gsd/worktree-manager.ts +2 -3
- package/src/resources/extensions/gsd/worktree-resolver.ts +485 -0
- package/src/resources/extensions/gsd/worktree.ts +7 -44
- package/src/resources/extensions/mcp-client/index.ts +2 -1
- package/dist/resources/extensions/gsd/auto-constants.js +0 -5
- package/dist/resources/extensions/gsd/auto-idempotency.js +0 -106
- package/dist/resources/extensions/gsd/auto-stuck-detection.js +0 -165
- package/dist/resources/extensions/gsd/mechanical-completion.js +0 -351
- package/packages/pi-coding-agent/dist/modes/interactive/theme/dark.json +0 -85
- package/packages/pi-coding-agent/dist/modes/interactive/theme/light.json +0 -84
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.json +0 -335
- package/packages/pi-coding-agent/src/modes/interactive/theme/dark.json +0 -85
- package/packages/pi-coding-agent/src/modes/interactive/theme/light.json +0 -84
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme-schema.json +0 -335
- package/pkg/dist/modes/interactive/theme/dark.json +0 -85
- package/pkg/dist/modes/interactive/theme/light.json +0 -84
- package/pkg/dist/modes/interactive/theme/theme-schema.json +0 -335
- package/src/resources/extensions/gsd/auto-constants.ts +0 -6
- package/src/resources/extensions/gsd/auto-idempotency.ts +0 -151
- package/src/resources/extensions/gsd/auto-stuck-detection.ts +0 -221
- package/src/resources/extensions/gsd/mechanical-completion.ts +0 -430
- package/src/resources/extensions/gsd/tests/auto-dispatch-loop.test.ts +0 -691
- package/src/resources/extensions/gsd/tests/auto-reentrancy-guard.test.ts +0 -127
- package/src/resources/extensions/gsd/tests/auto-skip-loop.test.ts +0 -123
- package/src/resources/extensions/gsd/tests/dispatch-stall-guard.test.ts +0 -126
- package/src/resources/extensions/gsd/tests/loop-regression.test.ts +0 -874
- package/src/resources/extensions/gsd/tests/mechanical-completion.test.ts +0 -356
- package/src/resources/extensions/gsd/tests/progress-score.test.ts +0 -206
- package/src/resources/extensions/gsd/tests/session-lock.test.ts +0 -434
|
@@ -1,27 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Auto-mode Recovery — artifact resolution, verification, blocker placeholders,
|
|
3
|
-
* skip artifacts,
|
|
3
|
+
* skip artifacts, merge state reconciliation,
|
|
4
4
|
* self-heal runtime records, and loop remediation steps.
|
|
5
5
|
*
|
|
6
6
|
* Pure functions that receive all needed state as parameters — no module-level
|
|
7
7
|
* globals or AutoContext dependency.
|
|
8
8
|
*/
|
|
9
|
-
import { clearUnitRuntimeRecord
|
|
9
|
+
import { clearUnitRuntimeRecord } from "./unit-runtime.js";
|
|
10
10
|
import { clearParseCache, parseRoadmap, parsePlan } from "./files.js";
|
|
11
|
-
import { nativeConflictFiles, nativeCommit, nativeCheckoutTheirs, nativeAddPaths, nativeMergeAbort, nativeResetHard, } from "./native-git-bridge.js";
|
|
12
|
-
import { resolveMilestonePath, resolveSlicePath, resolveSliceFile, resolveTasksDir, relMilestoneFile, relSliceFile, relSlicePath, relTaskFile, buildMilestoneFileName, buildSliceFileName, buildTaskFileName, resolveMilestoneFile, clearPathCache, resolveGsdRootFile, gsdRoot, } from "./paths.js";
|
|
13
11
|
import { isValidationTerminal } from "./state.js";
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
12
|
+
import { nativeConflictFiles, nativeCommit, nativeCheckoutTheirs, nativeAddPaths, nativeMergeAbort, nativeResetHard, } from "./native-git-bridge.js";
|
|
13
|
+
import { resolveMilestonePath, resolveSlicePath, resolveSliceFile, resolveTasksDir, relMilestoneFile, relSliceFile, relSlicePath, relTaskFile, buildMilestoneFileName, buildSliceFileName, buildTaskFileName, resolveMilestoneFile, clearPathCache, resolveGsdRootFile, } from "./paths.js";
|
|
14
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync, unlinkSync, } from "node:fs";
|
|
17
15
|
import { dirname, join } from "node:path";
|
|
18
|
-
import { parseUnitId } from "./unit-id.js";
|
|
19
16
|
// ─── Artifact Resolution & Verification ───────────────────────────────────────
|
|
20
17
|
/**
|
|
21
18
|
* Resolve the expected artifact for a unit to an absolute path.
|
|
22
19
|
*/
|
|
23
20
|
export function resolveExpectedArtifactPath(unitType, unitId, base) {
|
|
24
|
-
const
|
|
21
|
+
const parts = unitId.split("/");
|
|
22
|
+
const mid = parts[0];
|
|
23
|
+
const sid = parts[1];
|
|
25
24
|
switch (unitType) {
|
|
26
25
|
case "research-milestone": {
|
|
27
26
|
const dir = resolveMilestonePath(base, mid);
|
|
@@ -48,8 +47,11 @@ export function resolveExpectedArtifactPath(unitType, unitId, base) {
|
|
|
48
47
|
return dir ? join(dir, buildSliceFileName(sid, "UAT-RESULT")) : null;
|
|
49
48
|
}
|
|
50
49
|
case "execute-task": {
|
|
50
|
+
const tid = parts[2];
|
|
51
51
|
const dir = resolveSlicePath(base, mid, sid);
|
|
52
|
-
return dir && tid
|
|
52
|
+
return dir && tid
|
|
53
|
+
? join(dir, "tasks", buildTaskFileName(tid, "SUMMARY"))
|
|
54
|
+
: null;
|
|
53
55
|
}
|
|
54
56
|
case "complete-slice": {
|
|
55
57
|
const dir = resolveSlicePath(base, mid, sid);
|
|
@@ -108,21 +110,10 @@ export function verifyExpectedArtifact(unitType, unitId, base) {
|
|
|
108
110
|
return false;
|
|
109
111
|
if (!existsSync(absPath))
|
|
110
112
|
return false;
|
|
111
|
-
// validate-milestone must have a VALIDATION file with a terminal verdict
|
|
112
|
-
// (pass, needs-attention, or needs-remediation). Without this check, a
|
|
113
|
-
// VALIDATION file with missing/malformed frontmatter or an unrecognized
|
|
114
|
-
// verdict is treated as "complete" by the artifact check but deriveState
|
|
115
|
-
// still returns phase:"validating-milestone" (because isValidationTerminal
|
|
116
|
-
// returns false), creating an infinite skip loop that hits the lifetime cap.
|
|
117
113
|
if (unitType === "validate-milestone") {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
if (!isValidationTerminal(validationContent))
|
|
121
|
-
return false;
|
|
122
|
-
}
|
|
123
|
-
catch {
|
|
114
|
+
const validationContent = readFileSync(absPath, "utf-8");
|
|
115
|
+
if (!isValidationTerminal(validationContent))
|
|
124
116
|
return false;
|
|
125
|
-
}
|
|
126
117
|
}
|
|
127
118
|
// plan-slice must produce a plan with actual task entries, not just a scaffold.
|
|
128
119
|
// The plan file may exist from a prior discussion/context step with only headings
|
|
@@ -136,7 +127,10 @@ export function verifyExpectedArtifact(unitType, unitId, base) {
|
|
|
136
127
|
}
|
|
137
128
|
// execute-task must also have its checkbox marked [x] in the slice plan
|
|
138
129
|
if (unitType === "execute-task") {
|
|
139
|
-
const
|
|
130
|
+
const parts = unitId.split("/");
|
|
131
|
+
const mid = parts[0];
|
|
132
|
+
const sid = parts[1];
|
|
133
|
+
const tid = parts[2];
|
|
140
134
|
if (mid && sid && tid) {
|
|
141
135
|
const planAbs = resolveSliceFile(base, mid, sid, "PLAN");
|
|
142
136
|
if (planAbs && existsSync(planAbs)) {
|
|
@@ -153,7 +147,9 @@ export function verifyExpectedArtifact(unitType, unitId, base) {
|
|
|
153
147
|
// but omitted T{tid}-PLAN.md files would be marked complete, causing execute-task
|
|
154
148
|
// to dispatch with a missing task plan (see issue #739).
|
|
155
149
|
if (unitType === "plan-slice") {
|
|
156
|
-
const
|
|
150
|
+
const parts = unitId.split("/");
|
|
151
|
+
const mid = parts[0];
|
|
152
|
+
const sid = parts[1];
|
|
157
153
|
if (mid && sid) {
|
|
158
154
|
try {
|
|
159
155
|
const planContent = readFileSync(absPath, "utf-8");
|
|
@@ -178,7 +174,9 @@ export function verifyExpectedArtifact(unitType, unitId, base) {
|
|
|
178
174
|
// state machine keeps returning the same complete-slice unit (roadmap still shows
|
|
179
175
|
// the slice incomplete), so dispatchNextUnit recurses forever.
|
|
180
176
|
if (unitType === "complete-slice") {
|
|
181
|
-
const
|
|
177
|
+
const parts = unitId.split("/");
|
|
178
|
+
const mid = parts[0];
|
|
179
|
+
const sid = parts[1];
|
|
182
180
|
if (mid && sid) {
|
|
183
181
|
const dir = resolveSlicePath(base, mid, sid);
|
|
184
182
|
if (dir) {
|
|
@@ -193,7 +191,7 @@ export function verifyExpectedArtifact(unitType, unitId, base) {
|
|
|
193
191
|
try {
|
|
194
192
|
const roadmapContent = readFileSync(roadmapFile, "utf-8");
|
|
195
193
|
const roadmap = parseRoadmap(roadmapContent);
|
|
196
|
-
const slice =
|
|
194
|
+
const slice = roadmap.slices.find((s) => s.id === sid);
|
|
197
195
|
if (slice && !slice.done)
|
|
198
196
|
return false;
|
|
199
197
|
}
|
|
@@ -233,7 +231,9 @@ export function writeBlockerPlaceholder(unitType, unitId, base, reason) {
|
|
|
233
231
|
return diagnoseExpectedArtifact(unitType, unitId, base);
|
|
234
232
|
}
|
|
235
233
|
export function diagnoseExpectedArtifact(unitType, unitId, base) {
|
|
236
|
-
const
|
|
234
|
+
const parts = unitId.split("/");
|
|
235
|
+
const mid = parts[0];
|
|
236
|
+
const sid = parts[1];
|
|
237
237
|
switch (unitType) {
|
|
238
238
|
case "research-milestone":
|
|
239
239
|
return `${relMilestoneFile(base, mid, "RESEARCH")} (milestone research)`;
|
|
@@ -244,6 +244,7 @@ export function diagnoseExpectedArtifact(unitType, unitId, base) {
|
|
|
244
244
|
case "plan-slice":
|
|
245
245
|
return `${relSliceFile(base, mid, sid, "PLAN")} (slice plan)`;
|
|
246
246
|
case "execute-task": {
|
|
247
|
+
const tid = parts[2];
|
|
247
248
|
return `Task ${tid} marked [x] in ${relSliceFile(base, mid, sid, "PLAN")} + summary written`;
|
|
248
249
|
}
|
|
249
250
|
case "complete-slice":
|
|
@@ -310,44 +311,6 @@ export function skipExecuteTask(base, mid, sid, tid, status, reason, maxAttempts
|
|
|
310
311
|
}
|
|
311
312
|
return true;
|
|
312
313
|
}
|
|
313
|
-
// ─── Disk-backed completed-unit helpers ───────────────────────────────────────
|
|
314
|
-
function isStringArray(data) {
|
|
315
|
-
return Array.isArray(data) && data.every(item => typeof item === "string");
|
|
316
|
-
}
|
|
317
|
-
/** Path to the persisted completed-unit keys file. */
|
|
318
|
-
export function completedKeysPath(base) {
|
|
319
|
-
return join(gsdRoot(base), "completed-units.json");
|
|
320
|
-
}
|
|
321
|
-
/** Write a completed unit key to disk (read-modify-write append to set). */
|
|
322
|
-
export function persistCompletedKey(base, key) {
|
|
323
|
-
const file = completedKeysPath(base);
|
|
324
|
-
const keys = loadJsonFileOrNull(file, isStringArray) ?? [];
|
|
325
|
-
const keySet = new Set(keys);
|
|
326
|
-
if (!keySet.has(key)) {
|
|
327
|
-
keys.push(key);
|
|
328
|
-
atomicWriteSync(file, JSON.stringify(keys));
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
/** Remove a stale completed unit key from disk. */
|
|
332
|
-
export function removePersistedKey(base, key) {
|
|
333
|
-
const file = completedKeysPath(base);
|
|
334
|
-
const keys = loadJsonFileOrNull(file, isStringArray);
|
|
335
|
-
if (!keys)
|
|
336
|
-
return;
|
|
337
|
-
const filtered = keys.filter(k => k !== key);
|
|
338
|
-
if (filtered.length !== keys.length) {
|
|
339
|
-
atomicWriteSync(file, JSON.stringify(filtered));
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
/** Load all completed unit keys from disk into the in-memory set. */
|
|
343
|
-
export function loadPersistedKeys(base, target) {
|
|
344
|
-
const file = completedKeysPath(base);
|
|
345
|
-
const keys = loadJsonFileOrNull(file, isStringArray);
|
|
346
|
-
if (keys) {
|
|
347
|
-
for (const k of keys)
|
|
348
|
-
target.add(k);
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
314
|
// ─── Merge State Reconciliation ───────────────────────────────────────────────
|
|
352
315
|
/**
|
|
353
316
|
* Detect leftover merge state from a prior session and reconcile it.
|
|
@@ -377,8 +340,8 @@ export function reconcileMergeState(basePath, ctx) {
|
|
|
377
340
|
}
|
|
378
341
|
else {
|
|
379
342
|
// Still conflicted — try auto-resolving .gsd/ state file conflicts (#530)
|
|
380
|
-
const gsdConflicts = conflictedFiles.filter(f => f.startsWith(".gsd/"));
|
|
381
|
-
const codeConflicts = conflictedFiles.filter(f => !f.startsWith(".gsd/"));
|
|
343
|
+
const gsdConflicts = conflictedFiles.filter((f) => f.startsWith(".gsd/"));
|
|
344
|
+
const codeConflicts = conflictedFiles.filter((f) => !f.startsWith(".gsd/"));
|
|
382
345
|
if (gsdConflicts.length > 0 && codeConflicts.length === 0) {
|
|
383
346
|
// All conflicts are in .gsd/ state files — auto-resolve by accepting theirs
|
|
384
347
|
let resolved = true;
|
|
@@ -403,18 +366,24 @@ export function reconcileMergeState(basePath, ctx) {
|
|
|
403
366
|
try {
|
|
404
367
|
nativeMergeAbort(basePath);
|
|
405
368
|
}
|
|
406
|
-
catch {
|
|
369
|
+
catch {
|
|
370
|
+
/* best-effort */
|
|
371
|
+
}
|
|
407
372
|
}
|
|
408
373
|
else if (hasSquashMsg) {
|
|
409
374
|
try {
|
|
410
375
|
unlinkSync(squashMsgPath);
|
|
411
376
|
}
|
|
412
|
-
catch {
|
|
377
|
+
catch {
|
|
378
|
+
/* best-effort */
|
|
379
|
+
}
|
|
413
380
|
}
|
|
414
381
|
try {
|
|
415
382
|
nativeResetHard(basePath);
|
|
416
383
|
}
|
|
417
|
-
catch {
|
|
384
|
+
catch {
|
|
385
|
+
/* best-effort */
|
|
386
|
+
}
|
|
418
387
|
ctx.ui.notify("Detected leftover merge state — auto-resolve failed, cleaned up. Re-deriving state.", "warning");
|
|
419
388
|
}
|
|
420
389
|
}
|
|
@@ -424,18 +393,24 @@ export function reconcileMergeState(basePath, ctx) {
|
|
|
424
393
|
try {
|
|
425
394
|
nativeMergeAbort(basePath);
|
|
426
395
|
}
|
|
427
|
-
catch {
|
|
396
|
+
catch {
|
|
397
|
+
/* best-effort */
|
|
398
|
+
}
|
|
428
399
|
}
|
|
429
400
|
else if (hasSquashMsg) {
|
|
430
401
|
try {
|
|
431
402
|
unlinkSync(squashMsgPath);
|
|
432
403
|
}
|
|
433
|
-
catch {
|
|
404
|
+
catch {
|
|
405
|
+
/* best-effort */
|
|
406
|
+
}
|
|
434
407
|
}
|
|
435
408
|
try {
|
|
436
409
|
nativeResetHard(basePath);
|
|
437
410
|
}
|
|
438
|
-
catch {
|
|
411
|
+
catch {
|
|
412
|
+
/* best-effort */
|
|
413
|
+
}
|
|
439
414
|
ctx.ui.notify("Detected leftover merge state with unresolved conflicts — cleaned up. Re-deriving state.", "warning");
|
|
440
415
|
}
|
|
441
416
|
}
|
|
@@ -443,11 +418,12 @@ export function reconcileMergeState(basePath, ctx) {
|
|
|
443
418
|
}
|
|
444
419
|
// ─── Self-Heal Runtime Records ────────────────────────────────────────────────
|
|
445
420
|
/**
|
|
446
|
-
* Self-heal: scan runtime records in .gsd/ and clear
|
|
447
|
-
*
|
|
448
|
-
*
|
|
421
|
+
* Self-heal: scan runtime records in .gsd/ and clear stale ones.
|
|
422
|
+
* Clears dispatched records older than 1 hour (process crashed before
|
|
423
|
+
* completing the unit). deriveState() handles re-derivation — no need
|
|
424
|
+
* for completion key persistence here.
|
|
449
425
|
*/
|
|
450
|
-
export async function selfHealRuntimeRecords(base, ctx
|
|
426
|
+
export async function selfHealRuntimeRecords(base, ctx) {
|
|
451
427
|
try {
|
|
452
428
|
const { listUnitRuntimeRecords } = await import("./unit-runtime.js");
|
|
453
429
|
const records = listUnitRuntimeRecords(base);
|
|
@@ -456,24 +432,7 @@ export async function selfHealRuntimeRecords(base, ctx, completedKeySet) {
|
|
|
456
432
|
const now = Date.now();
|
|
457
433
|
for (const record of records) {
|
|
458
434
|
const { unitType, unitId } = record;
|
|
459
|
-
|
|
460
|
-
// Case 1: Artifact exists — unit completed but closeout didn't finish.
|
|
461
|
-
// Use verifyExpectedArtifact (not just existsSync) so that execute-task
|
|
462
|
-
// also checks the plan checkbox is marked [x]. Without this, a task
|
|
463
|
-
// whose summary exists but checkbox is unchecked would be incorrectly
|
|
464
|
-
// marked as completed, causing deriveState to re-dispatch it endlessly.
|
|
465
|
-
if (artifactPath && existsSync(artifactPath) && verifyExpectedArtifact(unitType, unitId, base)) {
|
|
466
|
-
clearUnitRuntimeRecord(base, unitType, unitId);
|
|
467
|
-
// Also persist completion key if missing
|
|
468
|
-
const key = `${unitType}/${unitId}`;
|
|
469
|
-
if (!completedKeySet.has(key)) {
|
|
470
|
-
persistCompletedKey(base, key);
|
|
471
|
-
completedKeySet.add(key);
|
|
472
|
-
}
|
|
473
|
-
healed++;
|
|
474
|
-
continue;
|
|
475
|
-
}
|
|
476
|
-
// Case 2: No artifact but record is stale (dispatched > 1h ago, process crashed)
|
|
435
|
+
// Clear stale dispatched records (dispatched > 1h ago, process crashed)
|
|
477
436
|
const age = now - (record.startedAt ?? 0);
|
|
478
437
|
if (record.phase === "dispatched" && age > STALE_THRESHOLD_MS) {
|
|
479
438
|
clearUnitRuntimeRecord(base, unitType, unitId);
|
|
@@ -496,7 +455,10 @@ export async function selfHealRuntimeRecords(base, ctx, completedKeySet) {
|
|
|
496
455
|
* These are shown when automatic reconciliation is not possible.
|
|
497
456
|
*/
|
|
498
457
|
export function buildLoopRemediationSteps(unitType, unitId, base) {
|
|
499
|
-
const
|
|
458
|
+
const parts = unitId.split("/");
|
|
459
|
+
const mid = parts[0];
|
|
460
|
+
const sid = parts[1];
|
|
461
|
+
const tid = parts[2];
|
|
500
462
|
switch (unitType) {
|
|
501
463
|
case "execute-task": {
|
|
502
464
|
if (!mid || !sid || !tid)
|