@opengsd/gsd-pi 1.1.1-dev.74e8dd1 → 1.1.1-dev.75048e7
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/cli.js +3 -2
- package/dist/help-text.js +10 -6
- package/dist/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/extensions/browser-tools/engine/managed-gsd-browser.js +495 -0
- package/dist/resources/extensions/browser-tools/engine/selection.js +16 -0
- package/dist/resources/extensions/browser-tools/extension-manifest.json +2 -2
- package/dist/resources/extensions/browser-tools/index.js +57 -9
- package/dist/resources/extensions/browser-tools/package.json +5 -1
- package/dist/resources/extensions/gsd/auto/orchestrator.js +0 -1
- package/dist/resources/extensions/gsd/auto-dashboard.js +77 -13
- package/dist/resources/extensions/gsd/auto-dispatch.js +16 -0
- package/dist/resources/extensions/gsd/auto-post-unit.js +21 -3
- package/dist/resources/extensions/gsd/auto-prompts.js +63 -22
- package/dist/resources/extensions/gsd/auto-recovery.js +3 -4
- package/dist/resources/extensions/gsd/auto-runtime-state.js +3 -0
- package/dist/resources/extensions/gsd/auto-tool-tracking.js +1 -1
- package/dist/resources/extensions/gsd/auto-unit-tool-scope.js +18 -66
- package/dist/resources/extensions/gsd/auto-worktree.js +18 -5
- package/dist/resources/extensions/gsd/auto.js +9 -2
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +20 -14
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +28 -13
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +18 -29
- package/dist/resources/extensions/gsd/browser-evidence.js +29 -2
- package/dist/resources/extensions/gsd/closeout-consistency-gate.js +61 -0
- package/dist/resources/extensions/gsd/commands/handlers/ops.js +2 -2
- package/dist/resources/extensions/gsd/commands-handlers.js +76 -11
- package/dist/resources/extensions/gsd/commands-mcp-status.js +2 -1
- package/dist/resources/extensions/gsd/dashboard-overlay.js +21 -7
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +8 -0
- package/dist/resources/extensions/gsd/doctor-runtime-checks.js +2 -2
- package/dist/resources/extensions/gsd/escalation.js +4 -4
- package/dist/resources/extensions/gsd/forensics.js +74 -2
- package/dist/resources/extensions/gsd/gsd-db.js +5 -2
- package/dist/resources/extensions/gsd/guided-flow.js +118 -175
- package/dist/resources/extensions/gsd/mcp-project-config.js +9 -76
- package/dist/resources/extensions/gsd/memory-store.js +4 -1
- package/dist/resources/extensions/gsd/milestone-closeout.js +3 -1
- package/dist/resources/extensions/gsd/pending-auto-start.js +0 -1
- package/dist/resources/extensions/gsd/post-unit-hooks.js +9 -0
- package/dist/resources/extensions/gsd/preferences-validation.js +39 -0
- package/dist/resources/extensions/gsd/prompt-loader.js +7 -0
- package/dist/resources/extensions/gsd/prompts/forensics.md +61 -1
- package/dist/resources/extensions/gsd/prompts/gate-evaluate.md +3 -1
- package/dist/resources/extensions/gsd/prompts/parallel-research-slices.md +3 -1
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/reactive-execute.md +3 -1
- package/dist/resources/extensions/gsd/prompts/run-uat.md +25 -21
- package/dist/resources/extensions/gsd/prompts/validate-milestone.md +3 -3
- package/dist/resources/extensions/gsd/recovery-classification.js +20 -0
- package/dist/resources/extensions/gsd/rule-registry.js +428 -52
- package/dist/resources/extensions/gsd/state.js +2 -2
- package/dist/resources/extensions/gsd/templates/plan.md +3 -1
- package/dist/resources/extensions/gsd/tool-contract.js +5 -0
- package/dist/resources/extensions/gsd/tool-presentation-plan.js +30 -7
- package/dist/resources/extensions/gsd/tools/complete-slice.js +15 -1
- package/dist/resources/extensions/gsd/tools/complete-task.js +11 -1
- package/dist/resources/extensions/gsd/tools/validate-milestone.js +46 -16
- package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +132 -18
- package/dist/resources/extensions/gsd/unit-tool-contracts.js +169 -0
- package/dist/resources/extensions/gsd/verdict-parser.js +59 -15
- package/dist/resources/extensions/gsd/verification-gate.js +72 -1
- package/dist/resources/extensions/gsd/workflow-mcp.js +3 -75
- package/dist/resources/extensions/shared/gsd-browser-cli.js +145 -0
- package/dist/rtk.d.ts +7 -1
- package/dist/rtk.js +27 -11
- package/dist/update-check.d.ts +15 -1
- package/dist/update-check.js +87 -12
- package/dist/update-cmd.d.ts +1 -0
- package/dist/update-cmd.js +53 -2
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +8 -8
- package/dist/web/standalone/.next/build-manifest.json +2 -2
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +8 -8
- package/dist/web/standalone/.next/server/chunks/8357.js +1 -1
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/.next/server/pages/500.html +1 -1
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/package.json +4 -2
- package/packages/cloud-mcp-gateway/package.json +2 -2
- package/packages/contracts/package.json +1 -1
- package/packages/daemon/package.json +4 -4
- package/packages/gsd-agent-core/dist/agent-session.d.ts +9 -0
- package/packages/gsd-agent-core/dist/agent-session.d.ts.map +1 -1
- package/packages/gsd-agent-core/dist/agent-session.js +32 -0
- package/packages/gsd-agent-core/dist/agent-session.js.map +1 -1
- package/packages/gsd-agent-core/dist/index.d.ts +1 -0
- package/packages/gsd-agent-core/dist/index.d.ts.map +1 -1
- package/packages/gsd-agent-core/dist/index.js +1 -0
- package/packages/gsd-agent-core/dist/index.js.map +1 -1
- package/packages/gsd-agent-core/dist/session/agent-session-compaction.d.ts +2 -0
- package/packages/gsd-agent-core/dist/session/agent-session-compaction.d.ts.map +1 -1
- package/packages/gsd-agent-core/dist/session/agent-session-compaction.js +8 -2
- package/packages/gsd-agent-core/dist/session/agent-session-compaction.js.map +1 -1
- package/packages/gsd-agent-core/dist/session/agent-session-host.d.ts +7 -0
- package/packages/gsd-agent-core/dist/session/agent-session-host.d.ts.map +1 -1
- package/packages/gsd-agent-core/dist/session/agent-session-host.js.map +1 -1
- package/packages/gsd-agent-core/dist/session/agent-session-prompt.d.ts.map +1 -1
- package/packages/gsd-agent-core/dist/session/agent-session-prompt.js +69 -1
- package/packages/gsd-agent-core/dist/session/agent-session-prompt.js.map +1 -1
- package/packages/gsd-agent-core/dist/turn-latency.d.ts +47 -0
- package/packages/gsd-agent-core/dist/turn-latency.d.ts.map +1 -0
- package/packages/gsd-agent-core/dist/turn-latency.js +123 -0
- package/packages/gsd-agent-core/dist/turn-latency.js.map +1 -0
- package/packages/gsd-agent-core/package.json +6 -6
- package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.d.ts +21 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.js +213 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js +5 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js +20 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js +7 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-command-handlers.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-command-handlers.js +6 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-command-handlers.js.map +1 -1
- package/packages/gsd-agent-modes/package.json +7 -7
- package/packages/mcp-server/dist/remote-questions.d.ts.map +1 -1
- package/packages/mcp-server/dist/remote-questions.js +23 -9
- package/packages/mcp-server/dist/remote-questions.js.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +2 -2
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/package.json +3 -3
- package/packages/native/package.json +1 -1
- package/packages/pi-agent-core/dist/agent-loop.js +42 -3
- package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/packages/pi-agent-core/dist/agent.d.ts +5 -1
- package/packages/pi-agent-core/dist/agent.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/agent.js +2 -0
- package/packages/pi-agent-core/dist/agent.js.map +1 -1
- package/packages/pi-agent-core/dist/harness/agent-harness.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/harness/agent-harness.js +3 -1
- package/packages/pi-agent-core/dist/harness/agent-harness.js.map +1 -1
- package/packages/pi-agent-core/dist/harness/types.d.ts +1 -0
- package/packages/pi-agent-core/dist/harness/types.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/harness/types.js.map +1 -1
- package/packages/pi-agent-core/dist/types.d.ts +6 -1
- package/packages/pi-agent-core/dist/types.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/types.js.map +1 -1
- package/packages/pi-agent-core/package.json +1 -1
- package/packages/pi-ai/dist/api-registry.d.ts +2 -0
- package/packages/pi-ai/dist/api-registry.d.ts.map +1 -1
- package/packages/pi-ai/dist/api-registry.js +23 -0
- package/packages/pi-ai/dist/api-registry.js.map +1 -1
- package/packages/pi-ai/dist/models.generated.d.ts +74 -23
- package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
- package/packages/pi-ai/dist/models.generated.js +82 -31
- package/packages/pi-ai/dist/models.generated.js.map +1 -1
- package/packages/pi-ai/dist/stream.js +6 -6
- package/packages/pi-ai/dist/stream.js.map +1 -1
- package/packages/pi-ai/package.json +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-upstream-types.d.ts +3 -0
- package/packages/pi-coding-agent/dist/core/extensions/extension-upstream-types.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-upstream-types.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry.js +2 -2
- package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/bash.js +2 -2
- package/packages/pi-coding-agent/dist/core/tools/bash.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/edit.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/edit.js +3 -2
- package/packages/pi-coding-agent/dist/core/tools/edit.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/render-utils.d.ts +1 -0
- package/packages/pi-coding-agent/dist/core/tools/render-utils.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/render-utils.js +6 -0
- package/packages/pi-coding-agent/dist/core/tools/render-utils.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/write.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/write.js +3 -2
- package/packages/pi-coding-agent/dist/core/tools/write.js.map +1 -1
- package/packages/pi-coding-agent/package.json +7 -7
- package/packages/pi-tui/package.json +1 -1
- package/packages/rpc-client/package.json +2 -2
- package/pkg/package.json +1 -1
- package/src/resources/extensions/browser-tools/engine/managed-gsd-browser.ts +579 -0
- package/src/resources/extensions/browser-tools/engine/selection.ts +19 -0
- package/src/resources/extensions/browser-tools/extension-manifest.json +2 -2
- package/src/resources/extensions/browser-tools/index.ts +60 -9
- package/src/resources/extensions/browser-tools/package.json +5 -1
- package/src/resources/extensions/browser-tools/tests/browser-engine-selection.test.mjs +35 -0
- package/src/resources/extensions/browser-tools/tests/managed-gsd-browser-tools.test.mjs +33 -0
- package/src/resources/extensions/gsd/auto/orchestrator.ts +0 -1
- package/src/resources/extensions/gsd/auto-dashboard.ts +82 -14
- package/src/resources/extensions/gsd/auto-dispatch.ts +19 -0
- package/src/resources/extensions/gsd/auto-post-unit.ts +28 -2
- package/src/resources/extensions/gsd/auto-prompts.ts +97 -15
- package/src/resources/extensions/gsd/auto-recovery.ts +3 -3
- package/src/resources/extensions/gsd/auto-runtime-state.ts +4 -0
- package/src/resources/extensions/gsd/auto-tool-tracking.ts +1 -1
- package/src/resources/extensions/gsd/auto-unit-tool-scope.ts +43 -74
- package/src/resources/extensions/gsd/auto-worktree.ts +23 -5
- package/src/resources/extensions/gsd/auto.ts +12 -2
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +20 -14
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +32 -13
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +50 -54
- package/src/resources/extensions/gsd/browser-evidence.ts +26 -2
- package/src/resources/extensions/gsd/closeout-consistency-gate.ts +137 -0
- package/src/resources/extensions/gsd/commands/handlers/ops.ts +2 -2
- package/src/resources/extensions/gsd/commands-handlers.ts +76 -11
- package/src/resources/extensions/gsd/commands-mcp-status.ts +2 -1
- package/src/resources/extensions/gsd/dashboard-overlay.ts +28 -7
- package/src/resources/extensions/gsd/docs/preferences-reference.md +8 -0
- package/src/resources/extensions/gsd/doctor-runtime-checks.ts +2 -2
- package/src/resources/extensions/gsd/escalation.ts +4 -4
- package/src/resources/extensions/gsd/forensics.ts +99 -5
- package/src/resources/extensions/gsd/gsd-db.ts +5 -2
- package/src/resources/extensions/gsd/guided-flow.ts +214 -216
- package/src/resources/extensions/gsd/mcp-project-config.ts +13 -78
- package/src/resources/extensions/gsd/memory-store.ts +4 -1
- package/src/resources/extensions/gsd/milestone-closeout.ts +3 -1
- package/src/resources/extensions/gsd/pending-auto-start.ts +0 -2
- package/src/resources/extensions/gsd/post-unit-hooks.ts +14 -1
- package/src/resources/extensions/gsd/preferences-validation.ts +36 -0
- package/src/resources/extensions/gsd/prompt-loader.ts +8 -0
- package/src/resources/extensions/gsd/prompts/forensics.md +61 -1
- package/src/resources/extensions/gsd/prompts/gate-evaluate.md +3 -1
- package/src/resources/extensions/gsd/prompts/parallel-research-slices.md +3 -1
- package/src/resources/extensions/gsd/prompts/plan-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/reactive-execute.md +3 -1
- package/src/resources/extensions/gsd/prompts/run-uat.md +25 -21
- package/src/resources/extensions/gsd/prompts/validate-milestone.md +3 -3
- package/src/resources/extensions/gsd/recovery-classification.ts +20 -0
- package/src/resources/extensions/gsd/rule-registry.ts +558 -58
- package/src/resources/extensions/gsd/rule-types.ts +2 -0
- package/src/resources/extensions/gsd/state.ts +2 -2
- package/src/resources/extensions/gsd/templates/plan.md +3 -1
- package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +105 -4
- package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +37 -0
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +10 -2
- package/src/resources/extensions/gsd/tests/auto-start-bootstrap-await-3420.test.ts +4 -1
- package/src/resources/extensions/gsd/tests/auto-warning-noise-regression.test.ts +12 -2
- package/src/resources/extensions/gsd/tests/browser-evidence.test.ts +142 -0
- package/src/resources/extensions/gsd/tests/check-auto-start-pending-gate.test.ts +9 -15
- package/src/resources/extensions/gsd/tests/check-auto-start-ready-guard.test.ts +26 -16
- package/src/resources/extensions/gsd/tests/commands-dispatcher-unmerged-milestone.test.ts +21 -0
- package/src/resources/extensions/gsd/tests/complete-milestone-excerpt.test.ts +30 -0
- package/src/resources/extensions/gsd/tests/complete-slice-verification-gate.test.ts +42 -0
- package/src/resources/extensions/gsd/tests/dashboard-overlay.test.ts +45 -0
- package/src/resources/extensions/gsd/tests/deep-planning-mode-dispatch.test.ts +53 -0
- package/src/resources/extensions/gsd/tests/discuss-milestone-structured-questions.test.ts +31 -0
- package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +40 -1
- package/src/resources/extensions/gsd/tests/doctor-runtime-checks.test.ts +27 -0
- package/src/resources/extensions/gsd/tests/escalation.test.ts +16 -27
- package/src/resources/extensions/gsd/tests/forensics-issue-routing.test.ts +20 -0
- package/src/resources/extensions/gsd/tests/forensics-prompt-rendering.test.ts +3 -0
- package/src/resources/extensions/gsd/tests/forensics-tool-scope.test.ts +69 -0
- package/src/resources/extensions/gsd/tests/gate-1b-orphan-discrimination.test.ts +31 -79
- package/src/resources/extensions/gsd/tests/guided-discuss-milestone-prompt-rendering.test.ts +40 -1
- package/src/resources/extensions/gsd/tests/guided-dispatch-root.test.ts +86 -0
- package/src/resources/extensions/gsd/tests/guided-flow-session-isolation.test.ts +5 -3
- package/src/resources/extensions/gsd/tests/guided-flow-state-rebuild.test.ts +40 -4
- package/src/resources/extensions/gsd/tests/guided-flow.test.ts +12 -9
- package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +4 -4
- package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +8 -0
- package/src/resources/extensions/gsd/tests/integration/parallel-merge.test.ts +16 -0
- package/src/resources/extensions/gsd/tests/integration/run-uat.test.ts +72 -10
- package/src/resources/extensions/gsd/tests/mcp-project-config.test.ts +32 -0
- package/src/resources/extensions/gsd/tests/mcp-status.test.ts +2 -0
- package/src/resources/extensions/gsd/tests/memory-maintenance.test.ts +39 -8
- package/src/resources/extensions/gsd/tests/merge-closeout-consistency-gate.test.ts +63 -0
- package/src/resources/extensions/gsd/tests/merge-db-cycle.test.ts +10 -1
- package/src/resources/extensions/gsd/tests/milestone-closeout.test.ts +9 -1
- package/src/resources/extensions/gsd/tests/new-milestone-discuss-routing.test.ts +3 -3
- package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +9 -0
- package/src/resources/extensions/gsd/tests/post-unit-hooks.test.ts +157 -0
- package/src/resources/extensions/gsd/tests/post-unit-retry-on-orchestrator-bridge.test.ts +179 -0
- package/src/resources/extensions/gsd/tests/preferences.test.ts +29 -0
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +73 -1
- package/src/resources/extensions/gsd/tests/prompt-loader-extension-dir.test.ts +14 -0
- package/src/resources/extensions/gsd/tests/queued-discuss-fast-path.test.ts +7 -8
- package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/rule-registry.test.ts +75 -0
- package/src/resources/extensions/gsd/tests/run-uat-composer.test.ts +4 -0
- package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +36 -0
- package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +100 -0
- package/src/resources/extensions/gsd/tests/state-reconciliation-drift.test.ts +139 -0
- package/src/resources/extensions/gsd/tests/token-tool-gating.test.ts +4 -4
- package/src/resources/extensions/gsd/tests/tool-invocation-error-loop-break.test.ts +19 -0
- package/src/resources/extensions/gsd/tests/tool-param-optionality.test.ts +7 -1
- package/src/resources/extensions/gsd/tests/validate-milestone-prompt-verification-classes.test.ts +6 -3
- package/src/resources/extensions/gsd/tests/validate-milestone-write-order.test.ts +133 -0
- package/src/resources/extensions/gsd/tests/verification-gate.test.ts +51 -0
- package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +410 -0
- package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +15 -0
- package/src/resources/extensions/gsd/tool-contract.ts +6 -0
- package/src/resources/extensions/gsd/tool-presentation-plan.ts +63 -7
- package/src/resources/extensions/gsd/tools/complete-slice.ts +14 -1
- package/src/resources/extensions/gsd/tools/complete-task.ts +20 -2
- package/src/resources/extensions/gsd/tools/validate-milestone.ts +46 -15
- package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +163 -20
- package/src/resources/extensions/gsd/types.ts +69 -5
- package/src/resources/extensions/gsd/unit-tool-contracts.ts +186 -0
- package/src/resources/extensions/gsd/verdict-parser.ts +54 -13
- package/src/resources/extensions/gsd/verification-gate.ts +87 -1
- package/src/resources/extensions/gsd/workflow-mcp.ts +3 -75
- package/src/resources/extensions/shared/gsd-browser-cli.ts +172 -0
- package/src/resources/extensions/gsd/tests/gate-1b-recovery-bound-corrections.test.ts +0 -246
- package/src/resources/extensions/gsd/tests/gate-1b-recovery-bound.test.ts +0 -218
- /package/dist/web/standalone/.next/static/{eRWf-RI9bzbrwEurm_3uI → h4TGni4xJzlZjGkxaT6uU}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{eRWf-RI9bzbrwEurm_3uI → h4TGni4xJzlZjGkxaT6uU}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input-controller.js","sourceRoot":"","sources":["../../../../src/modes/interactive/controllers/input-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ImageContent } from \"@gsd/pi-ai\";\nimport { dispatchSlashCommand } from \"../slash-command-handlers.js\";\nimport type { InteractiveModeStateHost } from \"../interactive-mode-state.js\";\nimport type { ContextualTips } from \"@gsd/agent-core\";\n\n/**\n * Consume and clear any pending pasted images from the host.\n * Returns undefined if there are no pending images.\n */\nfunction consumePendingImages(host: InteractiveModeStateHost): ImageContent[] | undefined {\n\tif (host.pendingImages.length === 0) return undefined;\n\tconst images = [...host.pendingImages];\n\thost.pendingImages.length = 0;\n\treturn images;\n}\n\nexport function setupEditorSubmitHandler(host: InteractiveModeStateHost & {\n\tgetSlashCommandContext: () => any;\n\thandleBashCommand: (command: string, excludeFromContext?: boolean) => Promise<void>;\n\tshowWarning: (message: string) => void;\n\tshowError: (message: string) => void;\n\tshowTip: (message: string) => void;\n\tupdateEditorBorderColor: () => void;\n\tisExtensionCommand: (text: string) => boolean;\n\tisKnownSlashCommand: (text: string) => boolean;\n\tqueueCompactionMessage: (text: string, mode: \"steer\" | \"followUp\") => void;\n\tupdatePendingMessagesDisplay: () => void;\n\tflushPendingBashComponents: () => void;\n\tcontextualTips: ContextualTips;\n\tgetContextPercent: () => number | undefined;\n\toptions?: { submitPromptsDirectly?: boolean };\n}): void {\n\thost.defaultEditor.onSubmit = async (text: string) => {\n\t\ttext = text.trim();\n\t\tif (!text) return;\n\n\t\tif (text.startsWith(\"/\") && !looksLikeFilePath(text)) {\n\t\t\tconst handled = await dispatchSlashCommand(text, host.getSlashCommandContext());\n\t\t\tif (handled) {\n\t\t\t\thost.editor.setText(\"\");\n\t\t\t\tconsumePendingImages(host); // discard images on slash command\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!host.isKnownSlashCommand(text)) {\n\t\t\t\tconst command = text.split(/\\s/)[0];\n\t\t\t\thost.showError(`Unknown command: ${command}. Use slash autocomplete to see available commands.`);\n\t\t\t\thost.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (text.startsWith(\"!\")) {\n\t\t\tconst isExcluded = text.startsWith(\"!!\");\n\t\t\tconst command = isExcluded ? text.slice(2).trim() : text.slice(1).trim();\n\t\t\tif (command) {\n\t\t\t\tif (host.session.isBashRunning) {\n\t\t\t\t\thost.showWarning(\"A bash command is already running. Press Esc to cancel it first.\");\n\t\t\t\t\thost.editor.setText(text);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Track included bash commands for double-bang tip\n\t\t\t\tif (!isExcluded) {\n\t\t\t\t\thost.contextualTips.recordBashIncluded();\n\t\t\t\t}\n\t\t\t\thost.editor.addToHistory?.(text);\n\t\t\t\tawait host.handleBashCommand(command, isExcluded);\n\t\t\t\thost.isBashMode = false;\n\t\t\t\thost.updateEditorBorderColor();\n\t\t\t\tconsumePendingImages(host); // discard images on bash command\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// Evaluate contextual tips before sending to agent\n\t\tconst tip = host.contextualTips.evaluate({\n\t\t\tinput: text,\n\t\t\tisStreaming: host.session.isStreaming,\n\t\t\tthinkingLevel: host.session.thinkingLevel,\n\t\t\tcontextPercent: host.getContextPercent(),\n\t\t});\n\t\tif (tip) {\n\t\t\thost.showTip(tip);\n\t\t}\n\n\t\tif (host.onInputCallback) {\n\t\t\thost.onInputCallback(text);\n\t\t\thost.editor.addToHistory?.(text);\n\t\t\treturn;\n\t\t}\n\n\t\t// Consume pending images for prompt submissions\n\t\tconst images = consumePendingImages(host);\n\n\t\tif (host.session.isCompacting) {\n\t\t\tif (host.isExtensionCommand(text)) {\n\t\t\t\thost.editor.addToHistory?.(text);\n\t\t\t\thost.editor.setText(\"\");\n\t\t\t\ttry {\n\t\t\t\t\tawait host.session.prompt(text, { images });\n\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\tconst errorMessage = error instanceof Error ? error.message : \"Unknown error occurred\";\n\t\t\t\t\thost.showError(errorMessage);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\thost.queueCompactionMessage(text, \"steer\");\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (host.session.isStreaming) {\n\t\t\thost.editor.addToHistory?.(text);\n\t\t\thost.editor.setText(\"\");\n\t\t\tawait host.session.prompt(text, { streamingBehavior: \"steer\", images });\n\t\t\thost.updatePendingMessagesDisplay();\n\t\t\thost.ui.requestRender();\n\t\t\treturn;\n\t\t}\n\n\t\thost.flushPendingBashComponents();\n\n\t\tif (host.options?.submitPromptsDirectly) {\n\t\t\thost.editor.addToHistory?.(text);\n\t\t\ttry {\n\t\t\t\tawait host.session.prompt(text, { images });\n\t\t\t} catch (error: unknown) {\n\t\t\t\tconst errorMessage = error instanceof Error ? error.message : \"Unknown error occurred\";\n\t\t\t\thost.showError(errorMessage);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\thost.editor.addToHistory?.(text);\n\t\t// submitPromptsDirectly is false — still dispatch via session.prompt so user input\n\t\t// is not silently discarded.\n\t\ttry {\n\t\t\tawait host.session.prompt(text, { images });\n\t\t} catch (error: unknown) {\n\t\t\tconst errorMessage = error instanceof Error ? error.message : \"Unknown error occurred\";\n\t\t\thost.showError(errorMessage);\n\t\t}\n\t};\n}\n\n/**\n * Distinguish absolute file paths from slash commands (#3478).\n * Drag-and-drop inserts paths like \"/Users/name/Desktop/file.png\" which\n * should be treated as plain text input, not a /Users command.\n *\n * Heuristic: a slash command is a single token like \"/help\" or \"/gsd auto\".\n * File paths have a second \"/\" within the first token (e.g., \"/Users/...\").\n */\nfunction looksLikeFilePath(text: string): boolean {\n\tconst firstToken = text.split(/\\s/)[0];\n\t// Slash commands: /help, /gsd, /commit — single \"/\" at start only.\n\t// File paths: /Users/name/file, /home/user/file, /tmp/x — contain \"/\" after position 0.\n\treturn firstToken.indexOf(\"/\", 1) !== -1;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"input-controller.js","sourceRoot":"","sources":["../../../../src/modes/interactive/controllers/input-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ImageContent } from \"@gsd/pi-ai\";\nimport { dispatchSlashCommand } from \"../slash-command-handlers.js\";\nimport type { InteractiveModeStateHost } from \"../interactive-mode-state.js\";\nimport type { ContextualTips } from \"@gsd/agent-core\";\n\n/**\n * Consume and clear any pending pasted images from the host.\n * Returns undefined if there are no pending images.\n */\nfunction consumePendingImages(host: InteractiveModeStateHost): ImageContent[] | undefined {\n\tif (host.pendingImages.length === 0) return undefined;\n\tconst images = [...host.pendingImages];\n\thost.pendingImages.length = 0;\n\treturn images;\n}\n\nfunction markEditorSubmitLatency(host: InteractiveModeStateHost, images: ImageContent[] | undefined): void {\n\thost.session.beginTurnLatency?.({ source: \"tui\", trigger: \"editor_submit\" });\n\thost.session.markTurnLatency?.(\"tui.editor_submit\", { images: images?.length ?? 0 });\n}\n\nexport function setupEditorSubmitHandler(host: InteractiveModeStateHost & {\n\tgetSlashCommandContext: () => any;\n\thandleBashCommand: (command: string, excludeFromContext?: boolean) => Promise<void>;\n\tshowWarning: (message: string) => void;\n\tshowError: (message: string) => void;\n\tshowTip: (message: string) => void;\n\tupdateEditorBorderColor: () => void;\n\tisExtensionCommand: (text: string) => boolean;\n\tisKnownSlashCommand: (text: string) => boolean;\n\tqueueCompactionMessage: (text: string, mode: \"steer\" | \"followUp\") => void;\n\tupdatePendingMessagesDisplay: () => void;\n\tflushPendingBashComponents: () => void;\n\tcontextualTips: ContextualTips;\n\tgetContextPercent: () => number | undefined;\n\toptions?: { submitPromptsDirectly?: boolean };\n}): void {\n\thost.defaultEditor.onSubmit = async (text: string) => {\n\t\ttext = text.trim();\n\t\tif (!text) return;\n\n\t\tif (text.startsWith(\"/\") && !looksLikeFilePath(text)) {\n\t\t\tconst handled = await dispatchSlashCommand(text, host.getSlashCommandContext());\n\t\t\tif (handled) {\n\t\t\t\thost.editor.setText(\"\");\n\t\t\t\tconsumePendingImages(host); // discard images on slash command\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!host.isKnownSlashCommand(text)) {\n\t\t\t\tconst command = text.split(/\\s/)[0];\n\t\t\t\thost.showError(`Unknown command: ${command}. Use slash autocomplete to see available commands.`);\n\t\t\t\thost.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (text.startsWith(\"!\")) {\n\t\t\tconst isExcluded = text.startsWith(\"!!\");\n\t\t\tconst command = isExcluded ? text.slice(2).trim() : text.slice(1).trim();\n\t\t\tif (command) {\n\t\t\t\tif (host.session.isBashRunning) {\n\t\t\t\t\thost.showWarning(\"A bash command is already running. Press Esc to cancel it first.\");\n\t\t\t\t\thost.editor.setText(text);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Track included bash commands for double-bang tip\n\t\t\t\tif (!isExcluded) {\n\t\t\t\t\thost.contextualTips.recordBashIncluded();\n\t\t\t\t}\n\t\t\t\thost.editor.addToHistory?.(text);\n\t\t\t\tawait host.handleBashCommand(command, isExcluded);\n\t\t\t\thost.isBashMode = false;\n\t\t\t\thost.updateEditorBorderColor();\n\t\t\t\tconsumePendingImages(host); // discard images on bash command\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// Evaluate contextual tips before sending to agent\n\t\tconst tip = host.contextualTips.evaluate({\n\t\t\tinput: text,\n\t\t\tisStreaming: host.session.isStreaming,\n\t\t\tthinkingLevel: host.session.thinkingLevel,\n\t\t\tcontextPercent: host.getContextPercent(),\n\t\t});\n\t\tif (tip) {\n\t\t\thost.showTip(tip);\n\t\t}\n\n\t\tif (host.onInputCallback) {\n\t\t\thost.onInputCallback(text);\n\t\t\thost.editor.addToHistory?.(text);\n\t\t\treturn;\n\t\t}\n\n\t\t// Consume pending images for prompt submissions\n\t\tconst images = consumePendingImages(host);\n\n\t\tif (host.session.isCompacting) {\n\t\t\tif (host.isExtensionCommand(text)) {\n\t\t\t\thost.editor.addToHistory?.(text);\n\t\t\t\thost.editor.setText(\"\");\n\t\t\t\ttry {\n\t\t\t\t\tawait host.session.prompt(text, { images });\n\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\tconst errorMessage = error instanceof Error ? error.message : \"Unknown error occurred\";\n\t\t\t\t\thost.showError(errorMessage);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\thost.queueCompactionMessage(text, \"steer\");\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (host.session.isStreaming) {\n\t\t\thost.editor.addToHistory?.(text);\n\t\t\thost.editor.setText(\"\");\n\t\t\tawait host.session.prompt(text, { streamingBehavior: \"steer\", images });\n\t\t\thost.updatePendingMessagesDisplay();\n\t\t\thost.ui.requestRender();\n\t\t\treturn;\n\t\t}\n\n\t\thost.flushPendingBashComponents();\n\n\t\tif (host.options?.submitPromptsDirectly) {\n\t\t\thost.editor.addToHistory?.(text);\n\t\t\ttry {\n\t\t\t\tmarkEditorSubmitLatency(host, images);\n\t\t\t\tawait host.session.prompt(text, { images });\n\t\t\t} catch (error: unknown) {\n\t\t\t\tconst errorMessage = error instanceof Error ? error.message : \"Unknown error occurred\";\n\t\t\t\thost.showError(errorMessage);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\thost.editor.addToHistory?.(text);\n\t\t// submitPromptsDirectly is false; still dispatch via session.prompt so user input\n\t\t// is not silently discarded.\n\t\ttry {\n\t\t\tmarkEditorSubmitLatency(host, images);\n\t\t\tawait host.session.prompt(text, { images });\n\t\t} catch (error: unknown) {\n\t\t\tconst errorMessage = error instanceof Error ? error.message : \"Unknown error occurred\";\n\t\t\thost.showError(errorMessage);\n\t\t}\n\t};\n}\n\n/**\n * Distinguish absolute file paths from slash commands (#3478).\n * Drag-and-drop inserts paths like \"/Users/name/Desktop/file.png\" which\n * should be treated as plain text input, not a /Users command.\n *\n * Heuristic: a slash command is a single token like \"/help\" or \"/gsd auto\".\n * File paths have a second \"/\" within the first token (e.g., \"/Users/...\").\n */\nfunction looksLikeFilePath(text: string): boolean {\n\tconst firstToken = text.split(/\\s/)[0];\n\t// Slash commands: /help, /gsd, /commit — single \"/\" at start only.\n\t// File paths: /Users/name/file, /home/user/file, /tmp/x — contain \"/\" after position 0.\n\treturn firstToken.indexOf(\"/\", 1) !== -1;\n}\n"]}
|
package/packages/gsd-agent-modes/dist/modes/interactive/interactive-command-handlers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive-command-handlers.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-command-handlers.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAU5E,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAEvF,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAsEzF;AAEF,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BxF;AAEF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,2BAA2B,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"interactive-command-handlers.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-command-handlers.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAU5E,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAEvF,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAsEzF;AAEF,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BxF;AAEF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,2BAA2B,GAAG,IAAI,CAqC1E;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,2BAA2B,GAAG,IAAI,CAIpE;AAEF,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,2BAA2B,EAAE,KAAK,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAIrH;AAEF,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,2BAA2B,EAAE,OAAO,EAAE,MAAM,EAAE,kBAAkB,UAAQ,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAwFnL;AAEF,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,2BAA2B,EAAE,kBAAkB,CAAC,EAAE,MAAM,EAAE,MAAM,UAAQ,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAsD5J"}
|
|
@@ -108,12 +108,18 @@ export function handleDebugCommand(host) {
|
|
|
108
108
|
const width = host.ui.terminal.columns;
|
|
109
109
|
const height = host.ui.terminal.rows;
|
|
110
110
|
const allLines = host.ui.render(width);
|
|
111
|
+
const turnLatency = typeof host.session.formatTurnLatencyRecords === "function"
|
|
112
|
+
? host.session.formatTurnLatencyRecords()
|
|
113
|
+
: "TUI turn latency records unavailable.";
|
|
111
114
|
const debugLogPath = getDebugLogPath();
|
|
112
115
|
const debugData = [
|
|
113
116
|
`Debug output at ${new Date().toISOString()}`,
|
|
114
117
|
`Terminal: ${width}x${height}`,
|
|
115
118
|
`Total lines: ${allLines.length}`,
|
|
116
119
|
"",
|
|
120
|
+
"=== TUI turn latency ===",
|
|
121
|
+
turnLatency,
|
|
122
|
+
"",
|
|
117
123
|
"=== All rendered lines with visible widths ===",
|
|
118
124
|
...allLines.map((line, idx) => {
|
|
119
125
|
const vw = visibleWidth(line);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive-command-handlers.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-command-handlers.ts"],"names":[],"mappings":"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","sourcesContent":["// Project/App: gsd-pi\n// File Purpose: Extracted from interactive-mode.ts (Phase E2 seam remediation).\n// @ts-nocheck\n\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { CompactionResult } from \"@gsd/agent-core/compaction/index.js\";\nimport { createCompactionSummaryMessage } from \"@gsd/pi-coding-agent/core/messages.js\";\nimport type { TruncationResult } from \"@gsd/pi-coding-agent/core/tools/truncate.js\";\nimport { getDebugLogPath } from \"@gsd/pi-coding-agent/config.js\";\nimport { Loader, Spacer, Text, visibleWidth, type Component } from \"@gsd/pi-tui\";\nimport { setRegisteredThemes, setTheme, theme } from \"@gsd/pi-coding-agent/theme/theme.js\";\nimport { appKey } from \"./components/keybinding-hints.js\";\nimport { BashExecutionComponent } from \"./components/bash-execution.js\";\nimport { BorderedLoader } from \"./components/bordered-loader.js\";\nimport { DaxnutsComponent } from \"./components/daxnuts.js\";\nimport type { InteractiveModeDelegateHost } from \"./interactive-mode-delegate-host.js\";\n\nexport async function handleReloadCommand(host: InteractiveModeDelegateHost): Promise<void> {\n\t\tif (host.session.isStreaming) {\n\t\t\thost.showWarning(\"Wait for the current response to finish before reloading.\");\n\t\t\treturn;\n\t\t}\n\t\tif (host.session.isCompacting) {\n\t\t\thost.showWarning(\"Wait for compaction to finish before reloading.\");\n\t\t\treturn;\n\t\t}\n\n\t\thost.resetExtensionUI();\n\n\t\tconst loader = new BorderedLoader(host.ui, theme, \"Reloading extensions, skills, prompts, themes...\", {\n\t\t\tcancellable: false,\n\t\t});\n\t\tconst previousEditor = host.editor;\n\t\thost.editorContainer.clear();\n\t\thost.editorContainer.addChild(loader);\n\t\thost.ui.setFocus(loader);\n\t\thost.ui.requestRender();\n\n\t\tconst dismissLoader = (editor: Component) => {\n\t\t\tloader.dispose();\n\t\t\thost.editorContainer.clear();\n\t\t\thost.editorContainer.addChild(editor);\n\t\t\thost.ui.setFocus(editor);\n\t\t\thost.ui.requestRender();\n\t\t};\n\n\t\ttry {\n\t\t\tawait host.session.reload();\n\t\t\tsetRegisteredThemes(host.session.resourceLoader.getThemes().themes);\n\t\t\thost.hideThinkingBlock = host.settingsManager.getHideThinkingBlock();\n\t\t\tconst themeName = host.settingsManager.getTheme();\n\t\t\tconst themeResult = themeName ? setTheme(themeName, true) : { success: true };\n\t\t\thost.clearMarkdownThemeCache();\n\t\t\tif (!themeResult.success) {\n\t\t\t\thost.showError(`Failed to load theme \"${themeName}\": ${themeResult.error}\\nFell back to dark theme.`);\n\t\t\t}\n\t\t\tconst editorPaddingX = host.settingsManager.getEditorPaddingX();\n\t\t\tconst autocompleteMaxVisible = host.settingsManager.getAutocompleteMaxVisible();\n\t\t\thost.defaultEditor.setPaddingX(editorPaddingX);\n\t\t\thost.defaultEditor.setAutocompleteMaxVisible(autocompleteMaxVisible);\n\t\t\tif (host.editor !== host.defaultEditor) {\n\t\t\t\thost.editor.setPaddingX?.(editorPaddingX);\n\t\t\t\thost.editor.setAutocompleteMaxVisible?.(autocompleteMaxVisible);\n\t\t\t}\n\t\t\thost.ui.setShowHardwareCursor(host.settingsManager.getShowHardwareCursor());\n\t\t\thost.ui.setClearOnShrink(host.settingsManager.getClearOnShrink());\n\t\t\thost.setupAutocomplete();\n\t\t\tconst runner = host.session.extensionRunner;\n\t\t\tif (runner) {\n\t\t\t\thost.setupExtensionShortcuts(runner);\n\t\t\t}\n\t\t\thost.rebuildChatFromMessages();\n\t\t\tdismissLoader(host.editor as Component);\n\t\t\thost.showLoadedResources({\n\t\t\t\textensionPaths: runner?.getExtensionPaths() ?? [],\n\t\t\t\tforce: false,\n\t\t\t\tshowDiagnosticsWhenQuiet: true,\n\t\t\t});\n\t\t\tconst modelsJsonError = host.session.modelRegistry.getError();\n\t\t\tif (modelsJsonError) {\n\t\t\t\thost.showError(`models.json error: ${modelsJsonError}`);\n\t\t\t}\n\t\t\thost.showStatus(\"Reloaded extensions, skills, prompts, themes\");\n\t\t} catch (error) {\n\t\t\tdismissLoader(previousEditor as Component);\n\t\t\thost.showError(`Reload failed: ${error instanceof Error ? error.message : String(error)}`);\n\t\t}\n\t}\n\nexport async function handleClearCommand(host: InteractiveModeDelegateHost): Promise<void> {\n\t\t// Stop loading animation\n\t\tif (host.loadingAnimation) {\n\t\t\thost.loadingAnimation.stop();\n\t\t\thost.loadingAnimation = undefined;\n\t\t}\n\t\thost.statusContainer.clear();\n\n\t\t// New session via session (emits extension session events)\n\t\tawait host.session.newSession();\n\n\t\t// Clear UI state\n\t\thost.headerContainer.clear();\n\t\thost.chatContainer.clear();\n\t\thost.pendingMessagesContainer.clear();\n\t\thost.compactionQueuedMessages = [];\n\t\thost.streamingComponent = undefined;\n\t\thost.streamingMessage = undefined;\n\t\thost.pendingTools.clear();\n\t\thost.pendingImages.length = 0;\n\t\thost.clearBlockingError();\n\n\t\t// Reset contextual tips for the new session\n\t\thost.contextualTips.reset();\n\n\t\thost.chatContainer.addChild(new Spacer(1));\n\t\thost.chatContainer.addChild(new Text(`${theme.fg(\"accent\", \"✓ New session started\")}`, 1, 1));\n\t\thost.ui.requestRender();\n\t}\n\nexport function handleDebugCommand(host: InteractiveModeDelegateHost): void {\n\t\tconst width = host.ui.terminal.columns;\n\t\tconst height = host.ui.terminal.rows;\n\t\tconst allLines = host.ui.render(width);\n\n\t\tconst debugLogPath = getDebugLogPath();\n\t\tconst debugData = [\n\t\t\t`Debug output at ${new Date().toISOString()}`,\n\t\t\t`Terminal: ${width}x${height}`,\n\t\t\t`Total lines: ${allLines.length}`,\n\t\t\t\"\",\n\t\t\t\"=== All rendered lines with visible widths ===\",\n\t\t\t...allLines.map((line, idx) => {\n\t\t\t\tconst vw = visibleWidth(line);\n\t\t\t\tconst escaped = JSON.stringify(line);\n\t\t\t\treturn `[${idx}] (w=${vw}) ${escaped}`;\n\t\t\t}),\n\t\t\t\"\",\n\t\t\t\"=== Agent messages (JSONL) ===\",\n\t\t\t...host.session.messages.map((msg) => JSON.stringify(msg)),\n\t\t\t\"\",\n\t\t].join(\"\\n\");\n\n\t\tfs.mkdirSync(path.dirname(debugLogPath), { recursive: true });\n\t\tfs.writeFileSync(debugLogPath, debugData);\n\n\t\thost.chatContainer.addChild(new Spacer(1));\n\t\thost.chatContainer.addChild(\n\t\t\tnew Text(`${theme.fg(\"accent\", \"✓ Debug log written\")}\\n${theme.fg(\"muted\", debugLogPath)}`, 1, 1),\n\t\t);\n\t\thost.ui.requestRender();\n\t}\n\nexport function handleDaxnuts(host: InteractiveModeDelegateHost): void {\n\t\thost.chatContainer.addChild(new Spacer(1));\n\t\thost.chatContainer.addChild(new DaxnutsComponent(host.ui));\n\t\thost.ui.requestRender();\n\t}\n\nexport function checkDaxnutsEasterEgg(host: InteractiveModeDelegateHost, model: { provider: string; id: string }): void {\n\t\tif (model.provider === \"opencode\" && model.id.toLowerCase().includes(\"kimi-k2.5\")) {\n\t\t\thost.handleDaxnuts();\n\t\t}\n\t}\n\nexport async function handleBashCommand(host: InteractiveModeDelegateHost, command: string, excludeFromContext = false, displayCommand?: string, loginShell?: boolean): Promise<void> {\n\t\tconst extensionRunner = host.session.extensionRunner;\n\t\tconst label = displayCommand || command;\n\n\t\t// Emit user_bash event to let extensions intercept\n\t\tconst eventResult = extensionRunner\n\t\t\t? await extensionRunner.emitUserBash({\n\t\t\t\t\ttype: \"user_bash\",\n\t\t\t\t\tcommand,\n\t\t\t\t\texcludeFromContext,\n\t\t\t\t\tcwd: process.cwd(),\n\t\t\t\t})\n\t\t\t: undefined;\n\n\t\t// If extension returned a full result, use it directly\n\t\tif (eventResult?.result) {\n\t\t\tconst result = eventResult.result;\n\n\t\t\t// Create UI component for display\n\t\t\thost.bashComponent = new BashExecutionComponent(label, host.ui, excludeFromContext);\n\t\t\tif (host.session.isStreaming) {\n\t\t\t\thost.pendingMessagesContainer.addChild(host.bashComponent);\n\t\t\t\thost.pendingBashComponents.push(host.bashComponent);\n\t\t\t} else {\n\t\t\t\thost.chatContainer.addChild(host.bashComponent);\n\t\t\t}\n\n\t\t\t// Show output and complete\n\t\t\tif (result.output) {\n\t\t\t\thost.bashComponent.appendOutput(result.output);\n\t\t\t}\n\t\t\thost.bashComponent.setComplete(\n\t\t\t\tresult.exitCode,\n\t\t\t\tresult.cancelled,\n\t\t\t\tresult.truncated ? ({ truncated: true, content: result.output } as TruncationResult) : undefined,\n\t\t\t\tresult.fullOutputPath,\n\t\t\t);\n\n\t\t\t// Record the result in session\n\t\t\thost.session.recordBashResult(command, result, { excludeFromContext });\n\t\t\thost.bashComponent = undefined;\n\t\t\thost.ui.requestRender();\n\t\t\treturn;\n\t\t}\n\n\t\t// Normal execution path (possibly with custom operations)\n\t\tconst isDeferred = host.session.isStreaming;\n\t\thost.bashComponent = new BashExecutionComponent(label, host.ui, excludeFromContext);\n\n\t\tif (isDeferred) {\n\t\t\t// Show in pending area when agent is streaming\n\t\t\thost.pendingMessagesContainer.addChild(host.bashComponent);\n\t\t\thost.pendingBashComponents.push(host.bashComponent);\n\t\t} else {\n\t\t\t// Show in chat immediately when agent is idle\n\t\t\thost.chatContainer.addChild(host.bashComponent);\n\t\t}\n\t\thost.ui.requestRender();\n\n\t\ttry {\n\t\t\tconst result = await host.session.executeBash(\n\t\t\t\tcommand,\n\t\t\t\t(chunk) => {\n\t\t\t\t\tif (host.bashComponent) {\n\t\t\t\t\t\thost.bashComponent.appendOutput(chunk);\n\t\t\t\t\t\thost.ui.requestRender();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ excludeFromContext, operations: eventResult?.operations, loginShell },\n\t\t\t);\n\n\t\t\tif (host.bashComponent) {\n\t\t\t\thost.bashComponent.setComplete(\n\t\t\t\t\tresult.exitCode,\n\t\t\t\t\tresult.cancelled,\n\t\t\t\t\tresult.truncated ? ({ truncated: true, content: result.output } as TruncationResult) : undefined,\n\t\t\t\t\tresult.fullOutputPath,\n\t\t\t\t);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (host.bashComponent) {\n\t\t\t\thost.bashComponent.setComplete(undefined, false);\n\t\t\t}\n\t\t\thost.showError(`Bash command failed: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n\t\t}\n\n\t\thost.bashComponent = undefined;\n\t\thost.ui.requestRender();\n\t}\n\nexport async function executeCompaction(host: InteractiveModeDelegateHost, customInstructions?: string, isAuto = false): Promise<CompactionResult | undefined> {\n\t\t// Stop loading animation\n\t\tif (host.loadingAnimation) {\n\t\t\thost.loadingAnimation.stop();\n\t\t\thost.loadingAnimation = undefined;\n\t\t}\n\t\thost.statusContainer.clear();\n\n\t\t// Set up escape handler during compaction\n\t\tconst originalOnEscape = host.defaultEditor.onEscape;\n\t\thost.defaultEditor.onEscape = () => {\n\t\t\thost.session.abortCompaction();\n\t\t};\n\n\t\t// Show compacting status\n\t\thost.chatContainer.addChild(new Spacer(1));\n\t\tconst cancelHint = `(${appKey(host.keybindings, \"interrupt\")} to cancel)`;\n\t\tconst label = isAuto ? `Auto-compacting context... ${cancelHint}` : `Compacting context... ${cancelHint}`;\n\t\tconst compactingLoader = new Loader(\n\t\t\thost.ui,\n\t\t\t(spinner) => theme.fg(\"accent\", spinner),\n\t\t\t(text) => theme.fg(\"muted\", text),\n\t\t\tlabel,\n\t\t);\n\t\thost.statusContainer.addChild(compactingLoader);\n\t\thost.ui.requestRender();\n\n\t\tlet result: CompactionResult | undefined;\n\n\t\ttry {\n\t\t\tresult = await host.session.compact(customInstructions);\n\n\t\t\t// Rebuild UI\n\t\t\thost.rebuildChatFromMessages();\n\n\t\t\t// Add compaction component at bottom so user sees it without scrolling\n\t\t\tconst msg = createCompactionSummaryMessage(result.summary, result.tokensBefore, new Date().toISOString());\n\t\t\thost.addMessageToChat(msg);\n\n\t\t\thost.footer.invalidate();\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tif (message === \"Compaction cancelled\" || (error instanceof Error && error.name === \"AbortError\")) {\n\t\t\t\thost.showError(\"Compaction cancelled\");\n\t\t\t} else {\n\t\t\t\thost.showError(`Compaction failed: ${message}`);\n\t\t\t}\n\t\t} finally {\n\t\t\tcompactingLoader.stop();\n\t\t\thost.statusContainer.clear();\n\t\t\thost.defaultEditor.onEscape = originalOnEscape;\n\t\t}\n\t\tvoid host.flushCompactionQueue({ willRetry: false });\n\t\treturn result;\n\t}\n"]}
|
|
1
|
+
{"version":3,"file":"interactive-command-handlers.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-command-handlers.ts"],"names":[],"mappings":"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","sourcesContent":["// Project/App: gsd-pi\n// File Purpose: Extracted from interactive-mode.ts (Phase E2 seam remediation).\n// @ts-nocheck\n\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { CompactionResult } from \"@gsd/agent-core/compaction/index.js\";\nimport { createCompactionSummaryMessage } from \"@gsd/pi-coding-agent/core/messages.js\";\nimport type { TruncationResult } from \"@gsd/pi-coding-agent/core/tools/truncate.js\";\nimport { getDebugLogPath } from \"@gsd/pi-coding-agent/config.js\";\nimport { Loader, Spacer, Text, visibleWidth, type Component } from \"@gsd/pi-tui\";\nimport { setRegisteredThemes, setTheme, theme } from \"@gsd/pi-coding-agent/theme/theme.js\";\nimport { appKey } from \"./components/keybinding-hints.js\";\nimport { BashExecutionComponent } from \"./components/bash-execution.js\";\nimport { BorderedLoader } from \"./components/bordered-loader.js\";\nimport { DaxnutsComponent } from \"./components/daxnuts.js\";\nimport type { InteractiveModeDelegateHost } from \"./interactive-mode-delegate-host.js\";\n\nexport async function handleReloadCommand(host: InteractiveModeDelegateHost): Promise<void> {\n\t\tif (host.session.isStreaming) {\n\t\t\thost.showWarning(\"Wait for the current response to finish before reloading.\");\n\t\t\treturn;\n\t\t}\n\t\tif (host.session.isCompacting) {\n\t\t\thost.showWarning(\"Wait for compaction to finish before reloading.\");\n\t\t\treturn;\n\t\t}\n\n\t\thost.resetExtensionUI();\n\n\t\tconst loader = new BorderedLoader(host.ui, theme, \"Reloading extensions, skills, prompts, themes...\", {\n\t\t\tcancellable: false,\n\t\t});\n\t\tconst previousEditor = host.editor;\n\t\thost.editorContainer.clear();\n\t\thost.editorContainer.addChild(loader);\n\t\thost.ui.setFocus(loader);\n\t\thost.ui.requestRender();\n\n\t\tconst dismissLoader = (editor: Component) => {\n\t\t\tloader.dispose();\n\t\t\thost.editorContainer.clear();\n\t\t\thost.editorContainer.addChild(editor);\n\t\t\thost.ui.setFocus(editor);\n\t\t\thost.ui.requestRender();\n\t\t};\n\n\t\ttry {\n\t\t\tawait host.session.reload();\n\t\t\tsetRegisteredThemes(host.session.resourceLoader.getThemes().themes);\n\t\t\thost.hideThinkingBlock = host.settingsManager.getHideThinkingBlock();\n\t\t\tconst themeName = host.settingsManager.getTheme();\n\t\t\tconst themeResult = themeName ? setTheme(themeName, true) : { success: true };\n\t\t\thost.clearMarkdownThemeCache();\n\t\t\tif (!themeResult.success) {\n\t\t\t\thost.showError(`Failed to load theme \"${themeName}\": ${themeResult.error}\\nFell back to dark theme.`);\n\t\t\t}\n\t\t\tconst editorPaddingX = host.settingsManager.getEditorPaddingX();\n\t\t\tconst autocompleteMaxVisible = host.settingsManager.getAutocompleteMaxVisible();\n\t\t\thost.defaultEditor.setPaddingX(editorPaddingX);\n\t\t\thost.defaultEditor.setAutocompleteMaxVisible(autocompleteMaxVisible);\n\t\t\tif (host.editor !== host.defaultEditor) {\n\t\t\t\thost.editor.setPaddingX?.(editorPaddingX);\n\t\t\t\thost.editor.setAutocompleteMaxVisible?.(autocompleteMaxVisible);\n\t\t\t}\n\t\t\thost.ui.setShowHardwareCursor(host.settingsManager.getShowHardwareCursor());\n\t\t\thost.ui.setClearOnShrink(host.settingsManager.getClearOnShrink());\n\t\t\thost.setupAutocomplete();\n\t\t\tconst runner = host.session.extensionRunner;\n\t\t\tif (runner) {\n\t\t\t\thost.setupExtensionShortcuts(runner);\n\t\t\t}\n\t\t\thost.rebuildChatFromMessages();\n\t\t\tdismissLoader(host.editor as Component);\n\t\t\thost.showLoadedResources({\n\t\t\t\textensionPaths: runner?.getExtensionPaths() ?? [],\n\t\t\t\tforce: false,\n\t\t\t\tshowDiagnosticsWhenQuiet: true,\n\t\t\t});\n\t\t\tconst modelsJsonError = host.session.modelRegistry.getError();\n\t\t\tif (modelsJsonError) {\n\t\t\t\thost.showError(`models.json error: ${modelsJsonError}`);\n\t\t\t}\n\t\t\thost.showStatus(\"Reloaded extensions, skills, prompts, themes\");\n\t\t} catch (error) {\n\t\t\tdismissLoader(previousEditor as Component);\n\t\t\thost.showError(`Reload failed: ${error instanceof Error ? error.message : String(error)}`);\n\t\t}\n\t}\n\nexport async function handleClearCommand(host: InteractiveModeDelegateHost): Promise<void> {\n\t\t// Stop loading animation\n\t\tif (host.loadingAnimation) {\n\t\t\thost.loadingAnimation.stop();\n\t\t\thost.loadingAnimation = undefined;\n\t\t}\n\t\thost.statusContainer.clear();\n\n\t\t// New session via session (emits extension session events)\n\t\tawait host.session.newSession();\n\n\t\t// Clear UI state\n\t\thost.headerContainer.clear();\n\t\thost.chatContainer.clear();\n\t\thost.pendingMessagesContainer.clear();\n\t\thost.compactionQueuedMessages = [];\n\t\thost.streamingComponent = undefined;\n\t\thost.streamingMessage = undefined;\n\t\thost.pendingTools.clear();\n\t\thost.pendingImages.length = 0;\n\t\thost.clearBlockingError();\n\n\t\t// Reset contextual tips for the new session\n\t\thost.contextualTips.reset();\n\n\t\thost.chatContainer.addChild(new Spacer(1));\n\t\thost.chatContainer.addChild(new Text(`${theme.fg(\"accent\", \"✓ New session started\")}`, 1, 1));\n\t\thost.ui.requestRender();\n\t}\n\nexport function handleDebugCommand(host: InteractiveModeDelegateHost): void {\n\tconst width = host.ui.terminal.columns;\n\tconst height = host.ui.terminal.rows;\n\tconst allLines = host.ui.render(width);\n\tconst turnLatency = typeof host.session.formatTurnLatencyRecords === \"function\"\n\t\t? host.session.formatTurnLatencyRecords()\n\t\t: \"TUI turn latency records unavailable.\";\n\n\tconst debugLogPath = getDebugLogPath();\n\tconst debugData = [\n\t\t`Debug output at ${new Date().toISOString()}`,\n\t\t`Terminal: ${width}x${height}`,\n\t\t`Total lines: ${allLines.length}`,\n\t\t\"\",\n\t\t\"=== TUI turn latency ===\",\n\t\tturnLatency,\n\t\t\"\",\n\t\t\"=== All rendered lines with visible widths ===\",\n\t\t...allLines.map((line, idx) => {\n\t\t\tconst vw = visibleWidth(line);\n\t\t\tconst escaped = JSON.stringify(line);\n\t\t\treturn `[${idx}] (w=${vw}) ${escaped}`;\n\t\t}),\n\t\t\"\",\n\t\t\"=== Agent messages (JSONL) ===\",\n\t\t...host.session.messages.map((msg) => JSON.stringify(msg)),\n\t\t\"\",\n\t].join(\"\\n\");\n\n\tfs.mkdirSync(path.dirname(debugLogPath), { recursive: true });\n\tfs.writeFileSync(debugLogPath, debugData);\n\n\thost.chatContainer.addChild(new Spacer(1));\n\thost.chatContainer.addChild(\n\t\tnew Text(`${theme.fg(\"accent\", \"✓ Debug log written\")}\\n${theme.fg(\"muted\", debugLogPath)}`, 1, 1),\n\t);\n\thost.ui.requestRender();\n}\n\nexport function handleDaxnuts(host: InteractiveModeDelegateHost): void {\n\t\thost.chatContainer.addChild(new Spacer(1));\n\t\thost.chatContainer.addChild(new DaxnutsComponent(host.ui));\n\t\thost.ui.requestRender();\n\t}\n\nexport function checkDaxnutsEasterEgg(host: InteractiveModeDelegateHost, model: { provider: string; id: string }): void {\n\t\tif (model.provider === \"opencode\" && model.id.toLowerCase().includes(\"kimi-k2.5\")) {\n\t\t\thost.handleDaxnuts();\n\t\t}\n\t}\n\nexport async function handleBashCommand(host: InteractiveModeDelegateHost, command: string, excludeFromContext = false, displayCommand?: string, loginShell?: boolean): Promise<void> {\n\t\tconst extensionRunner = host.session.extensionRunner;\n\t\tconst label = displayCommand || command;\n\n\t\t// Emit user_bash event to let extensions intercept\n\t\tconst eventResult = extensionRunner\n\t\t\t? await extensionRunner.emitUserBash({\n\t\t\t\t\ttype: \"user_bash\",\n\t\t\t\t\tcommand,\n\t\t\t\t\texcludeFromContext,\n\t\t\t\t\tcwd: process.cwd(),\n\t\t\t\t})\n\t\t\t: undefined;\n\n\t\t// If extension returned a full result, use it directly\n\t\tif (eventResult?.result) {\n\t\t\tconst result = eventResult.result;\n\n\t\t\t// Create UI component for display\n\t\t\thost.bashComponent = new BashExecutionComponent(label, host.ui, excludeFromContext);\n\t\t\tif (host.session.isStreaming) {\n\t\t\t\thost.pendingMessagesContainer.addChild(host.bashComponent);\n\t\t\t\thost.pendingBashComponents.push(host.bashComponent);\n\t\t\t} else {\n\t\t\t\thost.chatContainer.addChild(host.bashComponent);\n\t\t\t}\n\n\t\t\t// Show output and complete\n\t\t\tif (result.output) {\n\t\t\t\thost.bashComponent.appendOutput(result.output);\n\t\t\t}\n\t\t\thost.bashComponent.setComplete(\n\t\t\t\tresult.exitCode,\n\t\t\t\tresult.cancelled,\n\t\t\t\tresult.truncated ? ({ truncated: true, content: result.output } as TruncationResult) : undefined,\n\t\t\t\tresult.fullOutputPath,\n\t\t\t);\n\n\t\t\t// Record the result in session\n\t\t\thost.session.recordBashResult(command, result, { excludeFromContext });\n\t\t\thost.bashComponent = undefined;\n\t\t\thost.ui.requestRender();\n\t\t\treturn;\n\t\t}\n\n\t\t// Normal execution path (possibly with custom operations)\n\t\tconst isDeferred = host.session.isStreaming;\n\t\thost.bashComponent = new BashExecutionComponent(label, host.ui, excludeFromContext);\n\n\t\tif (isDeferred) {\n\t\t\t// Show in pending area when agent is streaming\n\t\t\thost.pendingMessagesContainer.addChild(host.bashComponent);\n\t\t\thost.pendingBashComponents.push(host.bashComponent);\n\t\t} else {\n\t\t\t// Show in chat immediately when agent is idle\n\t\t\thost.chatContainer.addChild(host.bashComponent);\n\t\t}\n\t\thost.ui.requestRender();\n\n\t\ttry {\n\t\t\tconst result = await host.session.executeBash(\n\t\t\t\tcommand,\n\t\t\t\t(chunk) => {\n\t\t\t\t\tif (host.bashComponent) {\n\t\t\t\t\t\thost.bashComponent.appendOutput(chunk);\n\t\t\t\t\t\thost.ui.requestRender();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ excludeFromContext, operations: eventResult?.operations, loginShell },\n\t\t\t);\n\n\t\t\tif (host.bashComponent) {\n\t\t\t\thost.bashComponent.setComplete(\n\t\t\t\t\tresult.exitCode,\n\t\t\t\t\tresult.cancelled,\n\t\t\t\t\tresult.truncated ? ({ truncated: true, content: result.output } as TruncationResult) : undefined,\n\t\t\t\t\tresult.fullOutputPath,\n\t\t\t\t);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (host.bashComponent) {\n\t\t\t\thost.bashComponent.setComplete(undefined, false);\n\t\t\t}\n\t\t\thost.showError(`Bash command failed: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n\t\t}\n\n\t\thost.bashComponent = undefined;\n\t\thost.ui.requestRender();\n\t}\n\nexport async function executeCompaction(host: InteractiveModeDelegateHost, customInstructions?: string, isAuto = false): Promise<CompactionResult | undefined> {\n\t\t// Stop loading animation\n\t\tif (host.loadingAnimation) {\n\t\t\thost.loadingAnimation.stop();\n\t\t\thost.loadingAnimation = undefined;\n\t\t}\n\t\thost.statusContainer.clear();\n\n\t\t// Set up escape handler during compaction\n\t\tconst originalOnEscape = host.defaultEditor.onEscape;\n\t\thost.defaultEditor.onEscape = () => {\n\t\t\thost.session.abortCompaction();\n\t\t};\n\n\t\t// Show compacting status\n\t\thost.chatContainer.addChild(new Spacer(1));\n\t\tconst cancelHint = `(${appKey(host.keybindings, \"interrupt\")} to cancel)`;\n\t\tconst label = isAuto ? `Auto-compacting context... ${cancelHint}` : `Compacting context... ${cancelHint}`;\n\t\tconst compactingLoader = new Loader(\n\t\t\thost.ui,\n\t\t\t(spinner) => theme.fg(\"accent\", spinner),\n\t\t\t(text) => theme.fg(\"muted\", text),\n\t\t\tlabel,\n\t\t);\n\t\thost.statusContainer.addChild(compactingLoader);\n\t\thost.ui.requestRender();\n\n\t\tlet result: CompactionResult | undefined;\n\n\t\ttry {\n\t\t\tresult = await host.session.compact(customInstructions);\n\n\t\t\t// Rebuild UI\n\t\t\thost.rebuildChatFromMessages();\n\n\t\t\t// Add compaction component at bottom so user sees it without scrolling\n\t\t\tconst msg = createCompactionSummaryMessage(result.summary, result.tokensBefore, new Date().toISOString());\n\t\t\thost.addMessageToChat(msg);\n\n\t\t\thost.footer.invalidate();\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tif (message === \"Compaction cancelled\" || (error instanceof Error && error.name === \"AbortError\")) {\n\t\t\t\thost.showError(\"Compaction cancelled\");\n\t\t\t} else {\n\t\t\t\thost.showError(`Compaction failed: ${message}`);\n\t\t\t}\n\t\t} finally {\n\t\t\tcompactingLoader.stop();\n\t\t\thost.statusContainer.clear();\n\t\t\thost.defaultEditor.onEscape = originalOnEscape;\n\t\t}\n\t\tvoid host.flushCompactionQueue({ willRetry: false });\n\t\treturn result;\n\t}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gsd/agent-modes",
|
|
3
|
-
"version": "1.1.1-dev.
|
|
3
|
+
"version": "1.1.1-dev.75048e7",
|
|
4
4
|
"description": "GSD run modes and CLI layer",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"gsd": {
|
|
@@ -25,12 +25,12 @@
|
|
|
25
25
|
"test": "node --import ../../src/resources/extensions/gsd/tests/resolve-ts.mjs --experimental-strip-types --test src/**/*.test.ts"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@gsd/agent-core": "^1.1.1-dev.
|
|
29
|
-
"@gsd/pi-agent-core": "^1.1.1-dev.
|
|
30
|
-
"@gsd/pi-ai": "^1.1.1-dev.
|
|
31
|
-
"@gsd/pi-coding-agent": "^1.1.1-dev.
|
|
32
|
-
"@gsd/pi-tui": "^1.1.1-dev.
|
|
33
|
-
"@opengsd/contracts": "^1.1.1-dev.
|
|
28
|
+
"@gsd/agent-core": "^1.1.1-dev.75048e7",
|
|
29
|
+
"@gsd/pi-agent-core": "^1.1.1-dev.75048e7",
|
|
30
|
+
"@gsd/pi-ai": "^1.1.1-dev.75048e7",
|
|
31
|
+
"@gsd/pi-coding-agent": "^1.1.1-dev.75048e7",
|
|
32
|
+
"@gsd/pi-tui": "^1.1.1-dev.75048e7",
|
|
33
|
+
"@opengsd/contracts": "^1.1.1-dev.75048e7",
|
|
34
34
|
"chalk": "^5.5.0"
|
|
35
35
|
}
|
|
36
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote-questions.d.ts","sourceRoot":"","sources":["../src/remote-questions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAaH,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAqBD,UAAU,YAAY;IACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpE;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAgJD;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;
|
|
1
|
+
{"version":3,"file":"remote-questions.d.ts","sourceRoot":"","sources":["../src/remote-questions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAaH,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAqBD,UAAU,YAAY;IACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpE;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAgJD;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AA2nBD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,cAAc,EAAE,GAC1B;IACD,YAAY,EAAE,KAAK,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACzE,CAYA;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,cAAc,EAAE,EAC3B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAwFlC"}
|
|
@@ -152,24 +152,38 @@ async function apiRequest(url, method, body, authScheme, authToken, errorLabel)
|
|
|
152
152
|
const headers = {
|
|
153
153
|
Authorization: `${authScheme} ${authToken}`,
|
|
154
154
|
};
|
|
155
|
+
// Use setTimeout + clearTimeout instead of AbortSignal.timeout() so the
|
|
156
|
+
// timer is always cancelled after the request and response body settle.
|
|
157
|
+
// AbortSignal.timeout() leaves a lingering libuv async handle on Windows that
|
|
158
|
+
// causes an assertion failure during process exit when requests complete
|
|
159
|
+
// before the timeout fires.
|
|
160
|
+
const controller = new AbortController();
|
|
161
|
+
const timeoutId = setTimeout(() => {
|
|
162
|
+
controller.abort(new Error(`${errorLabel} timed out`));
|
|
163
|
+
}, PER_REQUEST_TIMEOUT_MS);
|
|
155
164
|
const init = {
|
|
156
165
|
method,
|
|
157
166
|
headers,
|
|
158
|
-
signal:
|
|
167
|
+
signal: controller.signal,
|
|
159
168
|
};
|
|
160
169
|
if (body !== undefined) {
|
|
161
170
|
headers['Content-Type'] = 'application/json';
|
|
162
171
|
init.body = JSON.stringify(body);
|
|
163
172
|
}
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
173
|
+
try {
|
|
174
|
+
const response = await fetch(url, init);
|
|
175
|
+
if (response.status === 204)
|
|
176
|
+
return {};
|
|
177
|
+
if (!response.ok) {
|
|
178
|
+
const text = await response.text().catch(() => '');
|
|
179
|
+
const safeText = text.length > 200 ? text.slice(0, 200) + '\u2026' : text;
|
|
180
|
+
throw new Error(`${errorLabel} HTTP ${response.status}: ${safeText}`);
|
|
181
|
+
}
|
|
182
|
+
return await response.json();
|
|
183
|
+
}
|
|
184
|
+
finally {
|
|
185
|
+
clearTimeout(timeoutId);
|
|
171
186
|
}
|
|
172
|
-
return response.json();
|
|
173
187
|
}
|
|
174
188
|
// ---------------------------------------------------------------------------
|
|
175
189
|
// Payload formatting
|