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
|
@@ -4,12 +4,14 @@
|
|
|
4
4
|
* for the agent to fix gaps before proceeding with the unit.
|
|
5
5
|
*/
|
|
6
6
|
import { validatePlanBoundary, validateExecuteBoundary, validateCompleteBoundary, formatValidationIssues, } from "./observability-validator.js";
|
|
7
|
-
import { parseUnitId } from "./unit-id.js";
|
|
8
7
|
export async function collectObservabilityWarnings(ctx, basePath, unitType, unitId) {
|
|
9
8
|
// Hook units have custom artifacts — skip standard observability checks
|
|
10
9
|
if (unitType.startsWith("hook/"))
|
|
11
10
|
return [];
|
|
12
|
-
const
|
|
11
|
+
const parts = unitId.split("/");
|
|
12
|
+
const mid = parts[0];
|
|
13
|
+
const sid = parts[1];
|
|
14
|
+
const tid = parts[2];
|
|
13
15
|
if (!mid || !sid)
|
|
14
16
|
return [];
|
|
15
17
|
let issues = [];
|
|
@@ -17,38 +17,19 @@ import { resolveSliceFile, resolveTaskFile, resolveMilestoneFile, } from "./path
|
|
|
17
17
|
import { invalidateAllCaches } from "./cache.js";
|
|
18
18
|
import { closeoutUnit } from "./auto-unit-closeout.js";
|
|
19
19
|
import { autoCommitCurrentBranch, } from "./worktree.js";
|
|
20
|
-
import { verifyExpectedArtifact,
|
|
20
|
+
import { verifyExpectedArtifact, } from "./auto-recovery.js";
|
|
21
21
|
import { writeUnitRuntimeRecord, clearUnitRuntimeRecord } from "./unit-runtime.js";
|
|
22
|
-
import { resolveAutoSupervisorConfig } from "./preferences.js";
|
|
23
22
|
import { runGSDDoctor, rebuildState, summarizeDoctorIssues } from "./doctor.js";
|
|
24
|
-
import { COMPLETION_TRANSITION_CODES } from "./doctor-types.js";
|
|
25
23
|
import { recordHealthSnapshot, checkHealEscalation } from "./doctor-proactive.js";
|
|
24
|
+
import { syncStateToProjectRoot } from "./auto-worktree-sync.js";
|
|
26
25
|
import { resetRewriteCircuitBreaker } from "./auto-dispatch.js";
|
|
27
26
|
import { isDbAvailable } from "./gsd-db.js";
|
|
28
27
|
import { consumeSignal } from "./session-status-io.js";
|
|
29
|
-
import { checkPostUnitHooks,
|
|
28
|
+
import { checkPostUnitHooks, isRetryPending, consumeRetryTrigger, persistHookState, } from "./post-unit-hooks.js";
|
|
30
29
|
import { hasPendingCaptures, loadPendingCaptures } from "./captures.js";
|
|
31
|
-
import {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Initialize a unit dispatch: stamp the current time, set `s.currentUnit`,
|
|
36
|
-
* and persist the initial runtime record. Returns `startedAt` for callers
|
|
37
|
-
* that need the timestamp.
|
|
38
|
-
*/
|
|
39
|
-
function dispatchUnit(s, basePath, unitType, unitId) {
|
|
40
|
-
const startedAt = Date.now();
|
|
41
|
-
s.currentUnit = { type: unitType, id: unitId, startedAt };
|
|
42
|
-
writeUnitRuntimeRecord(basePath, unitType, unitId, startedAt, {
|
|
43
|
-
phase: "dispatched",
|
|
44
|
-
wrapupWarningSent: false,
|
|
45
|
-
timeoutAt: null,
|
|
46
|
-
lastProgressAt: startedAt,
|
|
47
|
-
progressCount: 0,
|
|
48
|
-
lastProgressKind: "dispatch",
|
|
49
|
-
});
|
|
50
|
-
return startedAt;
|
|
51
|
-
}
|
|
30
|
+
import { debugLog } from "./debug-logger.js";
|
|
31
|
+
/** Throttle STATE.md rebuilds — at most once per 30 seconds */
|
|
32
|
+
const STATE_REBUILD_MIN_INTERVAL_MS = 30_000;
|
|
52
33
|
/**
|
|
53
34
|
* Pre-verification processing: parallel worker signal check, cache invalidation,
|
|
54
35
|
* auto-commit, doctor run, state rebuild, worktree sync, artifact verification.
|
|
@@ -81,7 +62,8 @@ export async function postUnitPreVerification(pctx) {
|
|
|
81
62
|
try {
|
|
82
63
|
let taskContext;
|
|
83
64
|
if (s.currentUnit.type === "execute-task") {
|
|
84
|
-
const
|
|
65
|
+
const parts = s.currentUnit.id.split("/");
|
|
66
|
+
const [mid, sid, tid] = parts;
|
|
85
67
|
if (mid && sid && tid) {
|
|
86
68
|
const summaryPath = resolveTaskFile(s.basePath, mid, sid, tid, "SUMMARY");
|
|
87
69
|
if (summaryPath) {
|
|
@@ -113,24 +95,20 @@ export async function postUnitPreVerification(pctx) {
|
|
|
113
95
|
}
|
|
114
96
|
// Doctor: fix mechanical bookkeeping
|
|
115
97
|
try {
|
|
116
|
-
const
|
|
117
|
-
const doctorScope =
|
|
98
|
+
const scopeParts = s.currentUnit.id.split("/").slice(0, 2);
|
|
99
|
+
const doctorScope = scopeParts.join("/");
|
|
118
100
|
const sliceTerminalUnits = new Set(["complete-slice", "run-uat"]);
|
|
119
101
|
const effectiveFixLevel = sliceTerminalUnits.has(s.currentUnit.type) ? "all" : "task";
|
|
120
102
|
const report = await runGSDDoctor(s.basePath, { fix: true, scope: doctorScope, fixLevel: effectiveFixLevel });
|
|
121
103
|
if (report.fixesApplied.length > 0) {
|
|
122
104
|
ctx.ui.notify(`Post-hook: applied ${report.fixesApplied.length} fix(es).`, "info");
|
|
123
105
|
}
|
|
124
|
-
// Proactive health tracking
|
|
125
|
-
|
|
126
|
-
const issuesForHealth = effectiveFixLevel === "task"
|
|
127
|
-
? report.issues.filter(i => !COMPLETION_TRANSITION_CODES.has(i.code))
|
|
128
|
-
: report.issues;
|
|
129
|
-
const summary = summarizeDoctorIssues(issuesForHealth);
|
|
106
|
+
// Proactive health tracking
|
|
107
|
+
const summary = summarizeDoctorIssues(report.issues);
|
|
130
108
|
recordHealthSnapshot(summary.errors, summary.warnings, report.fixesApplied.length);
|
|
131
109
|
// Check if we should escalate to LLM-assisted heal
|
|
132
110
|
if (summary.errors > 0) {
|
|
133
|
-
const unresolvedErrors =
|
|
111
|
+
const unresolvedErrors = report.issues
|
|
134
112
|
.filter(i => i.severity === "error" && !i.fixable)
|
|
135
113
|
.map(i => ({ code: i.code, message: i.message, unitId: i.unitId }));
|
|
136
114
|
const escalation = checkHealEscalation(summary.errors, unresolvedErrors);
|
|
@@ -165,17 +143,23 @@ export async function postUnitPreVerification(pctx) {
|
|
|
165
143
|
// Non-fatal
|
|
166
144
|
}
|
|
167
145
|
}
|
|
168
|
-
// Prune dead bg-shell processes
|
|
169
|
-
// Without killing live processes between units, dev servers spawned during
|
|
170
|
-
// one task keep ports bound, causing conflicts in subsequent tasks (#1209).
|
|
146
|
+
// Prune dead bg-shell processes
|
|
171
147
|
try {
|
|
172
|
-
const { pruneDeadProcesses
|
|
148
|
+
const { pruneDeadProcesses } = await import("../bg-shell/process-manager.js");
|
|
173
149
|
pruneDeadProcesses();
|
|
174
|
-
killSessionProcesses();
|
|
175
150
|
}
|
|
176
151
|
catch {
|
|
177
152
|
// Non-fatal
|
|
178
153
|
}
|
|
154
|
+
// Sync worktree state back to project root
|
|
155
|
+
if (s.originalBasePath && s.originalBasePath !== s.basePath) {
|
|
156
|
+
try {
|
|
157
|
+
syncStateToProjectRoot(s.basePath, s.originalBasePath, s.currentMilestoneId);
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
// Non-fatal
|
|
161
|
+
}
|
|
162
|
+
}
|
|
179
163
|
// Rewrite-docs completion
|
|
180
164
|
if (s.currentUnit.type === "rewrite-docs") {
|
|
181
165
|
try {
|
|
@@ -217,17 +201,12 @@ export async function postUnitPreVerification(pctx) {
|
|
|
217
201
|
process.stderr.write(`gsd-triage: resolution execution failed: ${err.message}\n`);
|
|
218
202
|
}
|
|
219
203
|
}
|
|
220
|
-
// Artifact verification
|
|
204
|
+
// Artifact verification
|
|
221
205
|
let triggerArtifactVerified = false;
|
|
222
206
|
if (!s.currentUnit.type.startsWith("hook/")) {
|
|
223
207
|
try {
|
|
224
208
|
triggerArtifactVerified = verifyExpectedArtifact(s.currentUnit.type, s.currentUnit.id, s.basePath);
|
|
225
209
|
if (triggerArtifactVerified) {
|
|
226
|
-
const completionKey = `${s.currentUnit.type}/${s.currentUnit.id}`;
|
|
227
|
-
if (!s.completedKeySet.has(completionKey)) {
|
|
228
|
-
persistCompletedKey(s.basePath, completionKey);
|
|
229
|
-
s.completedKeySet.add(completionKey);
|
|
230
|
-
}
|
|
231
210
|
invalidateAllCaches();
|
|
232
211
|
}
|
|
233
212
|
}
|
|
@@ -256,9 +235,11 @@ export async function postUnitPreVerification(pctx) {
|
|
|
256
235
|
* Post-verification processing: DB dual-write, post-unit hooks, triage
|
|
257
236
|
* capture dispatch, quick-task dispatch.
|
|
258
237
|
*
|
|
238
|
+
* Sidecar work (hooks, triage, quick-tasks) is enqueued on `s.sidecarQueue`
|
|
239
|
+
* for the main loop to drain via `runUnit()`.
|
|
240
|
+
*
|
|
259
241
|
* Returns:
|
|
260
|
-
* - "
|
|
261
|
-
* - "continue" — proceed to normal dispatchNextUnit
|
|
242
|
+
* - "continue" — proceed to sidecar drain / normal dispatch
|
|
262
243
|
* - "step-wizard" — step mode, show wizard instead
|
|
263
244
|
* - "stopped" — stopAuto was called
|
|
264
245
|
*/
|
|
@@ -274,44 +255,6 @@ export async function postUnitPostVerification(pctx) {
|
|
|
274
255
|
process.stderr.write(`gsd-db: re-import failed: ${err.message}\n`);
|
|
275
256
|
}
|
|
276
257
|
}
|
|
277
|
-
// ── Mechanical completion (ADR-003) ──
|
|
278
|
-
// After task execution, attempt mechanical slice and milestone completion
|
|
279
|
-
// instead of dispatching LLM sessions for complete-slice / validate-milestone.
|
|
280
|
-
if (s.currentUnit?.type === "execute-task" && !s.stepMode) {
|
|
281
|
-
try {
|
|
282
|
-
const { milestone: mid, slice: sid } = parseUnitId(s.currentUnit.id);
|
|
283
|
-
if (mid && sid) {
|
|
284
|
-
const state = await deriveState(s.basePath);
|
|
285
|
-
if (state.phase === "summarizing" && state.activeSlice?.id === sid) {
|
|
286
|
-
const { mechanicalSliceCompletion } = await import("./mechanical-completion.js");
|
|
287
|
-
const ok = await mechanicalSliceCompletion(s.basePath, mid, sid);
|
|
288
|
-
if (ok) {
|
|
289
|
-
invalidateAllCaches();
|
|
290
|
-
autoCommitCurrentBranch(s.basePath, "mechanical-completion", `${mid}/${sid}`);
|
|
291
|
-
ctx.ui.notify(`Mechanical completion: ${sid} summary + roadmap updated.`, "info");
|
|
292
|
-
// Re-derive state — check if milestone is now ready for validation
|
|
293
|
-
invalidateAllCaches();
|
|
294
|
-
const postSliceState = await deriveState(s.basePath);
|
|
295
|
-
if (postSliceState.phase === "validating-milestone" || postSliceState.phase === "completing-milestone") {
|
|
296
|
-
const { aggregateMilestoneVerification, generateMilestoneSummary } = await import("./mechanical-completion.js");
|
|
297
|
-
const validation = await aggregateMilestoneVerification(s.basePath, mid);
|
|
298
|
-
if (validation.verdict !== "failed") {
|
|
299
|
-
await generateMilestoneSummary(s.basePath, mid);
|
|
300
|
-
invalidateAllCaches();
|
|
301
|
-
autoCommitCurrentBranch(s.basePath, "mechanical-milestone-completion", mid);
|
|
302
|
-
ctx.ui.notify(`Mechanical completion: ${mid} validation + summary written.`, "info");
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
// If !ok, summarizing phase persists → dispatch rule fires as LLM fallback
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
catch (err) {
|
|
311
|
-
process.stderr.write(`gsd-mechanical: completion failed: ${err.message}\n`);
|
|
312
|
-
// Non-fatal — fall through to normal dispatch
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
258
|
// ── Post-unit hooks ──
|
|
316
259
|
if (s.currentUnit && !s.stepMode) {
|
|
317
260
|
const hookUnit = checkPostUnitHooks(s.currentUnit.type, s.currentUnit.id, s.basePath);
|
|
@@ -319,62 +262,29 @@ export async function postUnitPostVerification(pctx) {
|
|
|
319
262
|
if (s.currentUnit) {
|
|
320
263
|
await closeoutUnit(ctx, s.basePath, s.currentUnit.type, s.currentUnit.id, s.currentUnit.startedAt, buildSnapshotOpts(s.currentUnit.type, s.currentUnit.id));
|
|
321
264
|
}
|
|
322
|
-
dispatchUnit(s, s.basePath, hookUnit.unitType, hookUnit.unitId);
|
|
323
|
-
const state = await deriveState(s.basePath);
|
|
324
|
-
updateProgressWidget(ctx, hookUnit.unitType, hookUnit.unitId, state);
|
|
325
|
-
const hookState = getActiveHook();
|
|
326
|
-
ctx.ui.notify(`Running post-unit hook: ${hookUnit.hookName} (cycle ${hookState?.cycle ?? 1})`, "info");
|
|
327
|
-
// Switch model if the hook specifies one
|
|
328
|
-
if (hookUnit.model) {
|
|
329
|
-
const availableModels = ctx.modelRegistry.getAvailable();
|
|
330
|
-
const match = availableModels.find(m => m.id === hookUnit.model || `${m.provider}/${m.id}` === hookUnit.model);
|
|
331
|
-
if (match) {
|
|
332
|
-
try {
|
|
333
|
-
await pi.setModel(match);
|
|
334
|
-
}
|
|
335
|
-
catch { /* non-fatal */ }
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
const result = await s.cmdCtx.newSession();
|
|
339
|
-
if (result.cancelled) {
|
|
340
|
-
resetHookState();
|
|
341
|
-
await stopAuto(ctx, pi, "Hook session cancelled");
|
|
342
|
-
return "stopped";
|
|
343
|
-
}
|
|
344
|
-
const sessionFile = ctx.sessionManager.getSessionFile();
|
|
345
|
-
writeLock(lockBase(), hookUnit.unitType, hookUnit.unitId, s.completedUnits.length, sessionFile);
|
|
346
265
|
persistHookState(s.basePath);
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
await pauseAuto(ctx, pi);
|
|
363
|
-
}, hookHardTimeoutMs);
|
|
364
|
-
if (!s.active)
|
|
365
|
-
return "stopped";
|
|
366
|
-
pi.sendMessage({ customType: "gsd-auto", content: hookUnit.prompt, display: s.verbose }, { triggerTurn: true });
|
|
367
|
-
return "dispatched";
|
|
266
|
+
s.sidecarQueue.push({
|
|
267
|
+
kind: "hook",
|
|
268
|
+
unitType: hookUnit.unitType,
|
|
269
|
+
unitId: hookUnit.unitId,
|
|
270
|
+
prompt: hookUnit.prompt,
|
|
271
|
+
model: hookUnit.model,
|
|
272
|
+
});
|
|
273
|
+
debugLog("postUnitPostVerification", {
|
|
274
|
+
phase: "sidecar-enqueue",
|
|
275
|
+
kind: "hook",
|
|
276
|
+
unitType: hookUnit.unitType,
|
|
277
|
+
unitId: hookUnit.unitId,
|
|
278
|
+
hookName: hookUnit.hookName,
|
|
279
|
+
});
|
|
280
|
+
return "continue";
|
|
368
281
|
}
|
|
369
282
|
// Check if a hook requested a retry of the trigger unit
|
|
370
283
|
if (isRetryPending()) {
|
|
371
284
|
const trigger = consumeRetryTrigger();
|
|
372
285
|
if (trigger) {
|
|
373
|
-
const triggerKey = `${trigger.unitType}/${trigger.unitId}`;
|
|
374
|
-
s.completedKeySet.delete(triggerKey);
|
|
375
|
-
removePersistedKey(s.basePath, triggerKey);
|
|
376
286
|
ctx.ui.notify(`Hook requested retry of ${trigger.unitType} ${trigger.unitId}.`, "info");
|
|
377
|
-
// Fall through to normal dispatch
|
|
287
|
+
// Fall through to normal dispatch — deriveState will re-derive the unit
|
|
378
288
|
}
|
|
379
289
|
}
|
|
380
290
|
}
|
|
@@ -406,34 +316,24 @@ export async function postUnitPostVerification(pctx) {
|
|
|
406
316
|
currentPlan: currentPlan || "(no active slice plan)",
|
|
407
317
|
roadmapContext: roadmapContext || "(no active roadmap)",
|
|
408
318
|
});
|
|
409
|
-
ctx.ui.notify(`Triaging ${pending.length} pending capture${pending.length === 1 ? "" : "s"}...`, "info");
|
|
410
319
|
if (s.currentUnit) {
|
|
411
320
|
await closeoutUnit(ctx, s.basePath, s.currentUnit.type, s.currentUnit.id, s.currentUnit.startedAt);
|
|
412
321
|
}
|
|
413
|
-
const triageUnitType = "triage-captures";
|
|
414
322
|
const triageUnitId = `${mid}/${sid}/triage`;
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
return;
|
|
430
|
-
ctx.ui.notify(`Triage unit exceeded timeout. Pausing auto-mode.`, "warning");
|
|
431
|
-
await pauseAuto(ctx, pi);
|
|
432
|
-
}, triageTimeoutMs);
|
|
433
|
-
if (!s.active)
|
|
434
|
-
return "stopped";
|
|
435
|
-
pi.sendMessage({ customType: "gsd-auto", content: prompt, display: s.verbose }, { triggerTurn: true });
|
|
436
|
-
return "dispatched";
|
|
323
|
+
s.sidecarQueue.push({
|
|
324
|
+
kind: "triage",
|
|
325
|
+
unitType: "triage-captures",
|
|
326
|
+
unitId: triageUnitId,
|
|
327
|
+
prompt,
|
|
328
|
+
});
|
|
329
|
+
debugLog("postUnitPostVerification", {
|
|
330
|
+
phase: "sidecar-enqueue",
|
|
331
|
+
kind: "triage",
|
|
332
|
+
unitId: triageUnitId,
|
|
333
|
+
pendingCount: pending.length,
|
|
334
|
+
});
|
|
335
|
+
ctx.ui.notify(`Triaging ${pending.length} pending capture${pending.length === 1 ? "" : "s"}...`, "info");
|
|
336
|
+
return "continue";
|
|
437
337
|
}
|
|
438
338
|
}
|
|
439
339
|
}
|
|
@@ -452,36 +352,26 @@ export async function postUnitPostVerification(pctx) {
|
|
|
452
352
|
const { buildQuickTaskPrompt } = await import("./triage-resolution.js");
|
|
453
353
|
const { markCaptureExecuted } = await import("./captures.js");
|
|
454
354
|
const prompt = buildQuickTaskPrompt(capture);
|
|
455
|
-
ctx.ui.notify(`Executing quick-task: ${capture.id} — "${capture.text}"`, "info");
|
|
456
355
|
if (s.currentUnit) {
|
|
457
356
|
await closeoutUnit(ctx, s.basePath, s.currentUnit.type, s.currentUnit.id, s.currentUnit.startedAt);
|
|
458
357
|
}
|
|
459
|
-
const qtUnitType = "quick-task";
|
|
460
|
-
const qtUnitId = `${s.currentMilestoneId}/${capture.id}`;
|
|
461
|
-
dispatchUnit(s, s.basePath, qtUnitType, qtUnitId);
|
|
462
|
-
const state = await deriveState(s.basePath);
|
|
463
|
-
updateProgressWidget(ctx, qtUnitType, qtUnitId, state);
|
|
464
|
-
const result = await s.cmdCtx.newSession();
|
|
465
|
-
if (result.cancelled) {
|
|
466
|
-
await stopAuto(ctx, pi);
|
|
467
|
-
return "stopped";
|
|
468
|
-
}
|
|
469
|
-
const sessionFile = ctx.sessionManager.getSessionFile();
|
|
470
|
-
writeLock(lockBase(), qtUnitType, qtUnitId, s.completedUnits.length, sessionFile);
|
|
471
358
|
markCaptureExecuted(s.basePath, capture.id);
|
|
472
|
-
const
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
359
|
+
const qtUnitId = `${s.currentMilestoneId}/${capture.id}`;
|
|
360
|
+
s.sidecarQueue.push({
|
|
361
|
+
kind: "quick-task",
|
|
362
|
+
unitType: "quick-task",
|
|
363
|
+
unitId: qtUnitId,
|
|
364
|
+
prompt,
|
|
365
|
+
captureId: capture.id,
|
|
366
|
+
});
|
|
367
|
+
debugLog("postUnitPostVerification", {
|
|
368
|
+
phase: "sidecar-enqueue",
|
|
369
|
+
kind: "quick-task",
|
|
370
|
+
unitId: qtUnitId,
|
|
371
|
+
captureId: capture.id,
|
|
372
|
+
});
|
|
373
|
+
ctx.ui.notify(`Executing quick-task: ${capture.id} — "${capture.text}"`, "info");
|
|
374
|
+
return "continue";
|
|
485
375
|
}
|
|
486
376
|
catch {
|
|
487
377
|
// Non-fatal — proceed to normal dispatch
|