@opengsd/gsd-pi 1.1.1-dev.74e8dd1 → 1.1.1-dev.a5a2de8
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 +17 -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 +7 -7
- 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 +7 -7
- 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 -6
- package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
- package/packages/pi-ai/dist/models.generated.js +78 -10
- 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 +69 -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 +61 -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 +351 -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 +38 -8
- 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 → 9y3LeeR2uGr2yRj9RjY3D}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{eRWf-RI9bzbrwEurm_3uI → 9y3LeeR2uGr2yRj9RjY3D}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-session-compaction.js","sourceRoot":"","sources":["../../src/session/agent-session-compaction.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AssistantMessage } from \"@gsd/pi-ai\";\nimport { isContextOverflow, streamSimple } from \"@gsd/pi-ai\";\nimport { formatNoModelSelectedMessage } from \"@gsd/pi-coding-agent/core/auth-guidance.js\";\nimport type { CompactionEntry } from \"@gsd/pi-coding-agent/core/session-manager.js\";\nimport { getLatestCompactionEntry } from \"@gsd/pi-coding-agent/core/session-manager.js\";\nimport type { SessionBeforeCompactResult } from \"@gsd/pi-coding-agent/core/extensions/index.js\";\nimport {\n\ttype CompactionResult,\n\tcalculateContextTokens,\n\tcompact,\n\testimateContextTokens,\n\tprepareCompaction,\n\tshouldCompact,\n} from \"../compaction/index.js\";\nimport type { AgentSessionHost } from \"./agent-session-host.js\";\n\nexport class AgentSessionCompactionModule {\n\tconstructor(readonly host: AgentSessionHost) {}\n\n\tasync compact(customInstructions?: string): Promise<CompactionResult> {\n\t\tthis.host.disconnectFromAgent();\n\t\tawait this.host.abort();\n\t\tthis.host._compactionAbortController = new AbortController();\n\t\tthis.host.emit({ type: \"compaction_start\", reason: \"manual\" });\n\n\t\ttry {\n\t\t\tif (!this.host.model) {\n\t\t\t\tthrow new Error(formatNoModelSelectedMessage());\n\t\t\t}\n\n\t\t\tconst { apiKey, headers } = await this.host.getCompactionRequestAuth(this.host.model);\n\n\t\t\tconst pathEntries = this.host.sessionManager.getBranch();\n\t\t\tconst settings = this.host.settingsManager.getCompactionSettings();\n\n\t\t\tconst preparation = prepareCompaction(pathEntries, settings);\n\t\t\tif (!preparation) {\n\t\t\t\t// Check why we can't compact\n\t\t\t\tconst lastEntry = pathEntries[pathEntries.length - 1];\n\t\t\t\tif (lastEntry?.type === \"compaction\") {\n\t\t\t\t\tthrow new Error(\"Already compacted\");\n\t\t\t\t}\n\t\t\t\tthrow new Error(\"Nothing to compact (session too small)\");\n\t\t\t}\n\n\t\t\tlet extensionCompaction: CompactionResult | undefined;\n\t\t\tlet fromExtension = false;\n\n\t\t\tif (this.host._extensionRunner.hasHandlers(\"session_before_compact\")) {\n\t\t\t\tconst result = (await this.host._extensionRunner.emit({\n\t\t\t\t\ttype: \"session_before_compact\",\n\t\t\t\t\tpreparation,\n\t\t\t\t\tbranchEntries: pathEntries,\n\t\t\t\t\tcustomInstructions,\n\t\t\t\t\tsignal: this.host._compactionAbortController.signal,\n\t\t\t\t})) as SessionBeforeCompactResult | undefined;\n\n\t\t\t\tif (result?.cancel) {\n\t\t\t\t\tthrow new Error(\"Compaction cancelled\");\n\t\t\t\t}\n\n\t\t\t\tif (result?.compaction) {\n\t\t\t\t\textensionCompaction = result.compaction;\n\t\t\t\t\tfromExtension = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet summary: string;\n\t\t\tlet firstKeptEntryId: string;\n\t\t\tlet tokensBefore: number;\n\t\t\tlet details: unknown;\n\n\t\t\tif (extensionCompaction) {\n\t\t\t\t// Extension provided compaction content\n\t\t\t\tsummary = extensionCompaction.summary;\n\t\t\t\tfirstKeptEntryId = extensionCompaction.firstKeptEntryId;\n\t\t\t\ttokensBefore = extensionCompaction.tokensBefore;\n\t\t\t\tdetails = extensionCompaction.details;\n\t\t\t} else {\n\t\t\t\t// Generate compaction result\n\t\t\t\tconst result = await compact(\n\t\t\t\t\tpreparation,\n\t\t\t\t\tthis.host.model,\n\t\t\t\t\tapiKey,\n\t\t\t\t\theaders,\n\t\t\t\t\tcustomInstructions,\n\t\t\t\t\tthis.host._compactionAbortController.signal,\n\t\t\t\t\tthis.host.thinkingLevel,\n\t\t\t\t\tthis.host.agent.streamFn,\n\t\t\t\t);\n\t\t\t\tsummary = result.summary;\n\t\t\t\tfirstKeptEntryId = result.firstKeptEntryId;\n\t\t\t\ttokensBefore = result.tokensBefore;\n\t\t\t\tdetails = result.details;\n\t\t\t}\n\n\t\t\tif (this.host._compactionAbortController.signal.aborted) {\n\t\t\t\tthrow new Error(\"Compaction cancelled\");\n\t\t\t}\n\n\t\t\tthis.host.sessionManager.appendCompaction(summary, firstKeptEntryId, tokensBefore, details, fromExtension);\n\t\t\tconst newEntries = this.host.sessionManager.getEntries();\n\t\t\tconst sessionContext = this.host.sessionManager.buildSessionContext();\n\t\t\tthis.host.agent.state.messages = sessionContext.messages;\n\n\t\t\t// Get the saved compaction entry for the extension event\n\t\t\tconst savedCompactionEntry = newEntries.find((e) => e.type === \"compaction\" && e.summary === summary) as\n\t\t\t\t| CompactionEntry\n\t\t\t\t| undefined;\n\n\t\t\tif (this.host._extensionRunner && savedCompactionEntry) {\n\t\t\t\tawait this.host._extensionRunner.emit({\n\t\t\t\t\ttype: \"session_compact\",\n\t\t\t\t\tcompactionEntry: savedCompactionEntry,\n\t\t\t\t\tfromExtension,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst compactionResult = {\n\t\t\t\tsummary,\n\t\t\t\tfirstKeptEntryId,\n\t\t\t\ttokensBefore,\n\t\t\t\tdetails,\n\t\t\t};\n\t\t\tthis.host.emit({\n\t\t\t\ttype: \"compaction_end\",\n\t\t\t\treason: \"manual\",\n\t\t\t\tresult: compactionResult,\n\t\t\t\taborted: false,\n\t\t\t\twillRetry: false,\n\t\t\t});\n\t\t\treturn compactionResult;\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tconst aborted = message === \"Compaction cancelled\" || (error instanceof Error && error.name === \"AbortError\");\n\t\t\tthis.host.emit({\n\t\t\t\ttype: \"compaction_end\",\n\t\t\t\treason: \"manual\",\n\t\t\t\tresult: undefined,\n\t\t\t\taborted,\n\t\t\t\twillRetry: false,\n\t\t\t\terrorMessage: aborted ? undefined : `Compaction failed: ${message}`,\n\t\t\t});\n\t\t\tthrow error;\n\t\t} finally {\n\t\t\tthis.host._compactionAbortController = undefined;\n\t\t\tthis.host.reconnectToAgent();\n\t\t}\n\t}\n\n\tabortCompaction(): void {\n\t\tthis.host._compactionAbortController?.abort();\n\t\tthis.host._autoCompactionAbortController?.abort();\n\t}\n\n\tabortBranchSummary(): void {\n\t\tthis.host._branchSummaryAbortController?.abort();\n\t}\n\n\tasync checkCompaction(assistantMessage: AssistantMessage, skipAbortedCheck = true): Promise<boolean> {\n\t\tconst settings = this.host.settingsManager.getCompactionSettings();\n\t\tif (!settings.enabled) return false;\n\n\t\t// Skip if message was aborted (user cancelled) - unless skipAbortedCheck is false\n\t\tif (skipAbortedCheck && assistantMessage.stopReason === \"aborted\") return false;\n\n\t\tconst contextWindow = this.host.model?.contextWindow ?? 0;\n\n\t\t// Skip overflow check if the message came from a different model.\n\t\t// This handles the case where user switched from a smaller-context model (e.g. opus)\n\t\t// to a larger-context model (e.g. codex) - the overflow error from the old model\n\t\t// shouldn't trigger compaction for the new model.\n\t\tconst sameModel =\n\t\t\tthis.host.model && assistantMessage.provider === this.host.model.provider && assistantMessage.model === this.host.model.id;\n\n\t\t// Skip compaction checks if this assistant message is older than the latest\n\t\t// compaction boundary. This prevents a stale pre-compaction usage/error\n\t\t// from retriggering compaction on the first prompt after compaction.\n\t\tconst compactionEntry = getLatestCompactionEntry(this.host.sessionManager.getBranch());\n\t\tconst assistantIsFromBeforeCompaction =\n\t\t\tcompactionEntry !== null && assistantMessage.timestamp <= new Date(compactionEntry.timestamp).getTime();\n\t\tif (assistantIsFromBeforeCompaction) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Case 1: Overflow - LLM returned context overflow error\n\t\tif (sameModel && isContextOverflow(assistantMessage, contextWindow)) {\n\t\t\tif (this.host._overflowRecoveryAttempted) {\n\t\t\t\tthis.host.emit({\n\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\treason: \"overflow\",\n\t\t\t\t\tresult: undefined,\n\t\t\t\t\taborted: false,\n\t\t\t\t\twillRetry: false,\n\t\t\t\t\terrorMessage:\n\t\t\t\t\t\t\"Context overflow recovery failed after one compact-and-retry attempt. Try reducing context or switching to a larger-context model.\",\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis.host._overflowRecoveryAttempted = true;\n\t\t\t// Remove the error message from agent state (it IS saved to session for history,\n\t\t\t// but we don't want it in context for the retry)\n\t\t\tconst messages = this.host.agent.state.messages;\n\t\t\tif (messages.length > 0 && messages[messages.length - 1].role === \"assistant\") {\n\t\t\t\tthis.host.agent.state.messages = messages.slice(0, -1);\n\t\t\t}\n\t\t\treturn await this.runAutoCompaction(\"overflow\", true);\n\t\t}\n\n\t\t// Case 2: Threshold - context is getting large\n\t\t// For error messages (no usage data), estimate from last successful response.\n\t\t// This ensures sessions that hit persistent API errors (e.g. 529) can still compact.\n\t\tlet contextTokens: number;\n\t\tif (assistantMessage.stopReason === \"error\") {\n\t\t\tconst messages = this.host.agent.state.messages;\n\t\t\tconst estimate = estimateContextTokens(messages);\n\t\t\tif (estimate.lastUsageIndex === null) return false; // No usage data at all\n\t\t\t// Verify the usage source is post-compaction. Kept pre-compaction messages\n\t\t\t// have stale usage reflecting the old (larger) context and would falsely\n\t\t\t// trigger compaction right after one just finished.\n\t\t\tconst usageMsg = messages[estimate.lastUsageIndex];\n\t\t\tif (\n\t\t\t\tcompactionEntry &&\n\t\t\t\tusageMsg.role === \"assistant\" &&\n\t\t\t\t(usageMsg as AssistantMessage).timestamp <= new Date(compactionEntry.timestamp).getTime()\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tcontextTokens = estimate.tokens;\n\t\t} else {\n\t\t\tcontextTokens = calculateContextTokens(assistantMessage.usage);\n\t\t}\n\t\tif (shouldCompact(contextTokens, contextWindow, settings)) {\n\t\t\treturn await this.runAutoCompaction(\"threshold\", false);\n\t\t}\n\t\treturn false;\n\t}\n\n\tasync runAutoCompaction(reason: \"overflow\" | \"threshold\", willRetry: boolean): Promise<boolean> {\n\t\tconst settings = this.host.settingsManager.getCompactionSettings();\n\n\t\tthis.host.emit({ type: \"compaction_start\", reason });\n\t\tthis.host._autoCompactionAbortController = new AbortController();\n\n\t\ttry {\n\t\t\tif (!this.host.model) {\n\t\t\t\tthis.host.emit({\n\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\treason,\n\t\t\t\t\tresult: undefined,\n\t\t\t\t\taborted: false,\n\t\t\t\t\twillRetry: false,\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tlet apiKey: string | undefined;\n\t\t\tlet headers: Record<string, string> | undefined;\n\t\t\tif (this.host.agent.streamFn === streamSimple) {\n\t\t\t\tconst authResult = await this.host.modelRegistry.getApiKeyAndHeaders(this.host.model);\n\t\t\t\tif (!authResult.ok || !authResult.apiKey) {\n\t\t\t\t\tthis.host.emit({\n\t\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\t\treason,\n\t\t\t\t\t\tresult: undefined,\n\t\t\t\t\t\taborted: false,\n\t\t\t\t\t\twillRetry: false,\n\t\t\t\t\t});\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tapiKey = authResult.apiKey;\n\t\t\t\theaders = authResult.headers;\n\t\t\t} else {\n\t\t\t\t({ apiKey, headers } = await this.host.getCompactionRequestAuth(this.host.model));\n\t\t\t}\n\n\t\t\tconst pathEntries = this.host.sessionManager.getBranch();\n\n\t\t\tconst preparation = prepareCompaction(pathEntries, settings);\n\t\t\tif (!preparation) {\n\t\t\t\tthis.host.emit({\n\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\treason,\n\t\t\t\t\tresult: undefined,\n\t\t\t\t\taborted: false,\n\t\t\t\t\twillRetry: false,\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tlet extensionCompaction: CompactionResult | undefined;\n\t\t\tlet fromExtension = false;\n\n\t\t\tif (this.host._extensionRunner.hasHandlers(\"session_before_compact\")) {\n\t\t\t\tconst extensionResult = (await this.host._extensionRunner.emit({\n\t\t\t\t\ttype: \"session_before_compact\",\n\t\t\t\t\tpreparation,\n\t\t\t\t\tbranchEntries: pathEntries,\n\t\t\t\t\tcustomInstructions: undefined,\n\t\t\t\t\tsignal: this.host._autoCompactionAbortController.signal,\n\t\t\t\t})) as SessionBeforeCompactResult | undefined;\n\n\t\t\t\tif (extensionResult?.cancel) {\n\t\t\t\t\tthis.host.emit({\n\t\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\t\treason,\n\t\t\t\t\t\tresult: undefined,\n\t\t\t\t\t\taborted: true,\n\t\t\t\t\t\twillRetry,\n\t\t\t\t\t});\n\t\t\t\t\tif (willRetry) {\n\t\t\t\t\t\tconst messages = this.host.agent.state.messages;\n\t\t\t\t\t\tconst lastMsg = messages[messages.length - 1];\n\t\t\t\t\t\tif (lastMsg?.role === \"assistant\" && (lastMsg as AssistantMessage).stopReason === \"error\") {\n\t\t\t\t\t\t\tthis.host.agent.state.messages = messages.slice(0, -1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\treturn this.host.agent.hasQueuedMessages();\n\t\t\t\t}\n\n\t\t\t\tif (extensionResult?.compaction) {\n\t\t\t\t\textensionCompaction = extensionResult.compaction;\n\t\t\t\t\tfromExtension = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet summary: string;\n\t\t\tlet firstKeptEntryId: string;\n\t\t\tlet tokensBefore: number;\n\t\t\tlet details: unknown;\n\n\t\t\tif (extensionCompaction) {\n\t\t\t\t// Extension provided compaction content\n\t\t\t\tsummary = extensionCompaction.summary;\n\t\t\t\tfirstKeptEntryId = extensionCompaction.firstKeptEntryId;\n\t\t\t\ttokensBefore = extensionCompaction.tokensBefore;\n\t\t\t\tdetails = extensionCompaction.details;\n\t\t\t} else {\n\t\t\t\t// Generate compaction result\n\t\t\t\tconst compactResult = await compact(\n\t\t\t\t\tpreparation,\n\t\t\t\t\tthis.host.model,\n\t\t\t\t\tapiKey,\n\t\t\t\t\theaders,\n\t\t\t\t\tundefined,\n\t\t\t\t\tthis.host._autoCompactionAbortController.signal,\n\t\t\t\t\tthis.host.thinkingLevel,\n\t\t\t\t\tthis.host.agent.streamFn,\n\t\t\t\t);\n\t\t\t\tsummary = compactResult.summary;\n\t\t\t\tfirstKeptEntryId = compactResult.firstKeptEntryId;\n\t\t\t\ttokensBefore = compactResult.tokensBefore;\n\t\t\t\tdetails = compactResult.details;\n\t\t\t}\n\n\t\t\tif (this.host._autoCompactionAbortController.signal.aborted) {\n\t\t\t\tthis.host.emit({\n\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\treason,\n\t\t\t\t\tresult: undefined,\n\t\t\t\t\taborted: true,\n\t\t\t\t\twillRetry: false,\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis.host.sessionManager.appendCompaction(summary, firstKeptEntryId, tokensBefore, details, fromExtension);\n\t\t\tconst newEntries = this.host.sessionManager.getEntries();\n\t\t\tconst sessionContext = this.host.sessionManager.buildSessionContext();\n\t\t\tthis.host.agent.state.messages = sessionContext.messages;\n\n\t\t\t// Get the saved compaction entry for the extension event\n\t\t\tconst savedCompactionEntry = newEntries.find((e) => e.type === \"compaction\" && e.summary === summary) as\n\t\t\t\t| CompactionEntry\n\t\t\t\t| undefined;\n\n\t\t\tif (this.host._extensionRunner && savedCompactionEntry) {\n\t\t\t\tawait this.host._extensionRunner.emit({\n\t\t\t\t\ttype: \"session_compact\",\n\t\t\t\t\tcompactionEntry: savedCompactionEntry,\n\t\t\t\t\tfromExtension,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst result: CompactionResult = {\n\t\t\t\tsummary,\n\t\t\t\tfirstKeptEntryId,\n\t\t\t\ttokensBefore,\n\t\t\t\tdetails,\n\t\t\t};\n\t\t\tthis.host.emit({ type: \"compaction_end\", reason, result, aborted: false, willRetry });\n\n\t\t\tif (willRetry) {\n\t\t\t\tconst messages = this.host.agent.state.messages;\n\t\t\t\tconst lastMsg = messages[messages.length - 1];\n\t\t\t\tif (lastMsg?.role === \"assistant\" && (lastMsg as AssistantMessage).stopReason === \"error\") {\n\t\t\t\t\tthis.host.agent.state.messages = messages.slice(0, -1);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Auto-compaction can complete while follow-up/steering/custom messages are waiting.\n\t\t\t// Continue once so queued messages are delivered.\n\t\t\treturn this.host.agent.hasQueuedMessages();\n\t\t} catch (error) {\n\t\t\tconst errorMessage = error instanceof Error ? error.message : \"compaction failed\";\n\t\t\tthis.host.emit({\n\t\t\t\ttype: \"compaction_end\",\n\t\t\t\treason,\n\t\t\t\tresult: undefined,\n\t\t\t\taborted: false,\n\t\t\t\twillRetry: false,\n\t\t\t\terrorMessage:\n\t\t\t\t\treason === \"overflow\"\n\t\t\t\t\t\t? `Context overflow recovery failed: ${errorMessage}`\n\t\t\t\t\t\t: `Auto-compaction failed: ${errorMessage}`,\n\t\t\t});\n\t\t\treturn false;\n\t\t} finally {\n\t\t\tthis.host._autoCompactionAbortController = undefined;\n\t\t}\n\t}\n\n\tsetAutoCompactionEnabled(enabled: boolean): void {\n\t\tthis.host.settingsManager.setCompactionEnabled(enabled);\n\t}\n\n\tget autoCompactionEnabled(): boolean {\n\t\treturn this.host.settingsManager.getCompactionEnabled();\n\t}\n\n}\n"]}
|
|
1
|
+
{"version":3,"file":"agent-session-compaction.js","sourceRoot":"","sources":["../../src/session/agent-session-compaction.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,4BAA4B,EAAE,MAAM,4CAA4C,CAAC;AAE1F,OAAO,EAAE,wBAAwB,EAAE,MAAM,8CAA8C,CAAC;AAGxF,OAAO,EAEN,sBAAsB,EACtB,OAAO,EACP,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,GACb,MAAM,wBAAwB,CAAC;AAGhC,MAAM,UAAU,6BAA6B,CAAC,gBAAkC,EAAE,QAAwB;IACzG,MAAM,QAAQ,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IACjD,OAAO,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;AAClF,CAAC;AAED,MAAM,OAAO,4BAA4B;IACnB;IAArB,YAAqB,IAAsB;QAAtB,SAAI,GAAJ,IAAI,CAAkB;IAAG,CAAC;IAE/C,KAAK,CAAC,OAAO,CAAC,kBAA2B;QACxC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAChC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,0BAA0B,GAAG,IAAI,eAAe,EAAE,CAAC;QAC7D,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QAE/D,IAAI,CAAC;YACJ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,4BAA4B,EAAE,CAAC,CAAC;YACjD,CAAC;YAED,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEtF,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;YACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAAE,CAAC;YAEnE,MAAM,WAAW,GAAG,iBAAiB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;YAC7D,IAAI,CAAC,WAAW,EAAE,CAAC;gBAClB,6BAA6B;gBAC7B,MAAM,SAAS,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACtD,IAAI,SAAS,EAAE,IAAI,KAAK,YAAY,EAAE,CAAC;oBACtC,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;gBACtC,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;YAC3D,CAAC;YAED,IAAI,mBAAiD,CAAC;YACtD,IAAI,aAAa,GAAG,KAAK,CAAC;YAE1B,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,wBAAwB,CAAC,EAAE,CAAC;gBACtE,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;oBACrD,IAAI,EAAE,wBAAwB;oBAC9B,WAAW;oBACX,aAAa,EAAE,WAAW;oBAC1B,kBAAkB;oBAClB,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,MAAM;iBACnD,CAAC,CAA2C,CAAC;gBAE9C,IAAI,MAAM,EAAE,MAAM,EAAE,CAAC;oBACpB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;gBACzC,CAAC;gBAED,IAAI,MAAM,EAAE,UAAU,EAAE,CAAC;oBACxB,mBAAmB,GAAG,MAAM,CAAC,UAAU,CAAC;oBACxC,aAAa,GAAG,IAAI,CAAC;gBACtB,CAAC;YACF,CAAC;YAED,IAAI,OAAe,CAAC;YACpB,IAAI,gBAAwB,CAAC;YAC7B,IAAI,YAAoB,CAAC;YACzB,IAAI,OAAgB,CAAC;YAErB,IAAI,mBAAmB,EAAE,CAAC;gBACzB,wCAAwC;gBACxC,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC;gBACtC,gBAAgB,GAAG,mBAAmB,CAAC,gBAAgB,CAAC;gBACxD,YAAY,GAAG,mBAAmB,CAAC,YAAY,CAAC;gBAChD,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACP,6BAA6B;gBAC7B,MAAM,MAAM,GAAG,MAAM,OAAO,CAC3B,WAAW,EACX,IAAI,CAAC,IAAI,CAAC,KAAK,EACf,MAAM,EACN,OAAO,EACP,kBAAkB,EAClB,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,MAAM,EAC3C,IAAI,CAAC,IAAI,CAAC,aAAa,EACvB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CACxB,CAAC;gBACF,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;gBACzB,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;gBAC3C,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;gBACnC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;YAC1B,CAAC;YAED,IAAI,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACzD,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;YACzC,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;YAC3G,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;YACzD,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,mBAAmB,EAAE,CAAC;YACtE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC;YAEzD,yDAAyD;YACzD,MAAM,oBAAoB,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,CAExF,CAAC;YAEb,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,oBAAoB,EAAE,CAAC;gBACxD,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;oBACrC,IAAI,EAAE,iBAAiB;oBACvB,eAAe,EAAE,oBAAoB;oBACrC,aAAa;iBACb,CAAC,CAAC;YACJ,CAAC;YAED,MAAM,gBAAgB,GAAG;gBACxB,OAAO;gBACP,gBAAgB;gBAChB,YAAY;gBACZ,OAAO;aACP,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,gBAAgB;gBACtB,MAAM,EAAE,QAAQ;gBAChB,MAAM,EAAE,gBAAgB;gBACxB,OAAO,EAAE,KAAK;gBACd,SAAS,EAAE,KAAK;aAChB,CAAC,CAAC;YACH,OAAO,gBAAgB,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,MAAM,OAAO,GAAG,OAAO,KAAK,sBAAsB,IAAI,CAAC,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;YAC9G,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,gBAAgB;gBACtB,MAAM,EAAE,QAAQ;gBAChB,MAAM,EAAE,SAAS;gBACjB,OAAO;gBACP,SAAS,EAAE,KAAK;gBAChB,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,sBAAsB,OAAO,EAAE;aACnE,CAAC,CAAC;YACH,MAAM,KAAK,CAAC;QACb,CAAC;gBAAS,CAAC;YACV,IAAI,CAAC,IAAI,CAAC,0BAA0B,GAAG,SAAS,CAAC;YACjD,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC9B,CAAC;IACF,CAAC;IAED,eAAe;QACd,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE,KAAK,EAAE,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,8BAA8B,EAAE,KAAK,EAAE,CAAC;IACnD,CAAC;IAED,kBAAkB;QACjB,IAAI,CAAC,IAAI,CAAC,6BAA6B,EAAE,KAAK,EAAE,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,gBAAkC,EAAE,gBAAgB,GAAG,IAAI;QAChF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAAE,CAAC;QACnE,IAAI,CAAC,QAAQ,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAEpC,kFAAkF;QAClF,IAAI,gBAAgB,IAAI,gBAAgB,CAAC,UAAU,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAEhF,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,IAAI,CAAC,CAAC;QAE1D,kEAAkE;QAClE,qFAAqF;QACrF,iFAAiF;QACjF,kDAAkD;QAClD,MAAM,SAAS,GACd,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,gBAAgB,CAAC,QAAQ,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,gBAAgB,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAE5H,4EAA4E;QAC5E,wEAAwE;QACxE,qEAAqE;QACrE,MAAM,eAAe,GAAG,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC,CAAC;QACvF,MAAM,+BAA+B,GACpC,eAAe,KAAK,IAAI,IAAI,gBAAgB,CAAC,SAAS,IAAI,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;QACzG,IAAI,+BAA+B,EAAE,CAAC;YACrC,OAAO,KAAK,CAAC;QACd,CAAC;QAED,yDAAyD;QACzD,IAAI,SAAS,IAAI,iBAAiB,CAAC,gBAAgB,EAAE,aAAa,CAAC,EAAE,CAAC;YACrE,IAAI,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC;gBAC1C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,gBAAgB;oBACtB,MAAM,EAAE,UAAU;oBAClB,MAAM,EAAE,SAAS;oBACjB,OAAO,EAAE,KAAK;oBACd,SAAS,EAAE,KAAK;oBAChB,YAAY,EACX,oIAAoI;iBACrI,CAAC,CAAC;gBACH,OAAO,KAAK,CAAC;YACd,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC;YAC5C,iFAAiF;YACjF,iDAAiD;YACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;YAChD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC/E,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACxD,CAAC;YACD,OAAO,MAAM,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACvD,CAAC;QAED,gDAAgD;QAChD,sEAAsE;QACtE,uEAAuE;QACvE,8EAA8E;QAC9E,qFAAqF;QACrF,IAAI,aAAqB,CAAC;QAC1B,IAAI,gBAAgB,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;YAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;YAChD,MAAM,QAAQ,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;YACjD,IAAI,QAAQ,CAAC,cAAc,KAAK,IAAI;gBAAE,OAAO,KAAK,CAAC,CAAC,uBAAuB;YAC3E,2EAA2E;YAC3E,yEAAyE;YACzE,oDAAoD;YACpD,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;YACnD,IACC,eAAe;gBACf,QAAQ,CAAC,IAAI,KAAK,WAAW;gBAC5B,QAA6B,CAAC,SAAS,IAAI,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,EACxF,CAAC;gBACF,OAAO,KAAK,CAAC;YACd,CAAC;YACD,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC;QACjC,CAAC;aAAM,CAAC;YACP,aAAa,GAAG,6BAA6B,CAAC,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACjG,CAAC;QACD,IAAI,aAAa,CAAC,aAAa,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,CAAC;YAC3D,OAAO,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,MAAgC,EAAE,SAAkB;QAC3E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAAE,CAAC;QAEnE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,IAAI,CAAC,8BAA8B,GAAG,IAAI,eAAe,EAAE,CAAC;QAEjE,IAAI,CAAC;YACJ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACtB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,gBAAgB;oBACtB,MAAM;oBACN,MAAM,EAAE,SAAS;oBACjB,OAAO,EAAE,KAAK;oBACd,SAAS,EAAE,KAAK;iBAChB,CAAC,CAAC;gBACH,OAAO,KAAK,CAAC;YACd,CAAC;YAED,IAAI,MAA0B,CAAC;YAC/B,IAAI,OAA2C,CAAC;YAChD,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;gBAC/C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACtF,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;oBAC1C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;wBACd,IAAI,EAAE,gBAAgB;wBACtB,MAAM;wBACN,MAAM,EAAE,SAAS;wBACjB,OAAO,EAAE,KAAK;wBACd,SAAS,EAAE,KAAK;qBAChB,CAAC,CAAC;oBACH,OAAO,KAAK,CAAC;gBACd,CAAC;gBACD,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;gBAC3B,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACP,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACnF,CAAC;YAED,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;YAEzD,MAAM,WAAW,GAAG,iBAAiB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;YAC7D,IAAI,CAAC,WAAW,EAAE,CAAC;gBAClB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,gBAAgB;oBACtB,MAAM;oBACN,MAAM,EAAE,SAAS;oBACjB,OAAO,EAAE,KAAK;oBACd,SAAS,EAAE,KAAK;iBAChB,CAAC,CAAC;gBACH,OAAO,KAAK,CAAC;YACd,CAAC;YAED,IAAI,mBAAiD,CAAC;YACtD,IAAI,aAAa,GAAG,KAAK,CAAC;YAE1B,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,wBAAwB,CAAC,EAAE,CAAC;gBACtE,MAAM,eAAe,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;oBAC9D,IAAI,EAAE,wBAAwB;oBAC9B,WAAW;oBACX,aAAa,EAAE,WAAW;oBAC1B,kBAAkB,EAAE,SAAS;oBAC7B,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,8BAA8B,CAAC,MAAM;iBACvD,CAAC,CAA2C,CAAC;gBAE9C,IAAI,eAAe,EAAE,MAAM,EAAE,CAAC;oBAC7B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;wBACd,IAAI,EAAE,gBAAgB;wBACtB,MAAM;wBACN,MAAM,EAAE,SAAS;wBACjB,OAAO,EAAE,IAAI;wBACb,SAAS;qBACT,CAAC,CAAC;oBACH,IAAI,SAAS,EAAE,CAAC;wBACf,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;wBAChD,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;wBAC9C,IAAI,OAAO,EAAE,IAAI,KAAK,WAAW,IAAK,OAA4B,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;4BAC3F,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;wBACxD,CAAC;wBACD,OAAO,IAAI,CAAC;oBACb,CAAC;oBACD,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;gBAC5C,CAAC;gBAED,IAAI,eAAe,EAAE,UAAU,EAAE,CAAC;oBACjC,mBAAmB,GAAG,eAAe,CAAC,UAAU,CAAC;oBACjD,aAAa,GAAG,IAAI,CAAC;gBACtB,CAAC;YACF,CAAC;YAED,IAAI,OAAe,CAAC;YACpB,IAAI,gBAAwB,CAAC;YAC7B,IAAI,YAAoB,CAAC;YACzB,IAAI,OAAgB,CAAC;YAErB,IAAI,mBAAmB,EAAE,CAAC;gBACzB,wCAAwC;gBACxC,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC;gBACtC,gBAAgB,GAAG,mBAAmB,CAAC,gBAAgB,CAAC;gBACxD,YAAY,GAAG,mBAAmB,CAAC,YAAY,CAAC;gBAChD,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACP,6BAA6B;gBAC7B,MAAM,aAAa,GAAG,MAAM,OAAO,CAClC,WAAW,EACX,IAAI,CAAC,IAAI,CAAC,KAAK,EACf,MAAM,EACN,OAAO,EACP,SAAS,EACT,IAAI,CAAC,IAAI,CAAC,8BAA8B,CAAC,MAAM,EAC/C,IAAI,CAAC,IAAI,CAAC,aAAa,EACvB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CACxB,CAAC;gBACF,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC;gBAChC,gBAAgB,GAAG,aAAa,CAAC,gBAAgB,CAAC;gBAClD,YAAY,GAAG,aAAa,CAAC,YAAY,CAAC;gBAC1C,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC;YACjC,CAAC;YAED,IAAI,IAAI,CAAC,IAAI,CAAC,8BAA8B,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC7D,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,gBAAgB;oBACtB,MAAM;oBACN,MAAM,EAAE,SAAS;oBACjB,OAAO,EAAE,IAAI;oBACb,SAAS,EAAE,KAAK;iBAChB,CAAC,CAAC;gBACH,OAAO,KAAK,CAAC;YACd,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;YAC3G,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;YACzD,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,mBAAmB,EAAE,CAAC;YACtE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC;YAEzD,yDAAyD;YACzD,MAAM,oBAAoB,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,CAExF,CAAC;YAEb,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,oBAAoB,EAAE,CAAC;gBACxD,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;oBACrC,IAAI,EAAE,iBAAiB;oBACvB,eAAe,EAAE,oBAAoB;oBACrC,aAAa;iBACb,CAAC,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAqB;gBAChC,OAAO;gBACP,gBAAgB;gBAChB,YAAY;gBACZ,OAAO;aACP,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YAEtF,IAAI,SAAS,EAAE,CAAC;gBACf,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;gBAChD,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC9C,IAAI,OAAO,EAAE,IAAI,KAAK,WAAW,IAAK,OAA4B,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;oBAC3F,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACxD,CAAC;gBACD,OAAO,IAAI,CAAC;YACb,CAAC;YAED,qFAAqF;YACrF,kDAAkD;YAClD,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC5C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC;YAClF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,gBAAgB;gBACtB,MAAM;gBACN,MAAM,EAAE,SAAS;gBACjB,OAAO,EAAE,KAAK;gBACd,SAAS,EAAE,KAAK;gBAChB,YAAY,EACX,MAAM,KAAK,UAAU;oBACpB,CAAC,CAAC,qCAAqC,YAAY,EAAE;oBACrD,CAAC,CAAC,2BAA2B,YAAY,EAAE;aAC7C,CAAC,CAAC;YACH,OAAO,KAAK,CAAC;QACd,CAAC;gBAAS,CAAC;YACV,IAAI,CAAC,IAAI,CAAC,8BAA8B,GAAG,SAAS,CAAC;QACtD,CAAC;IACF,CAAC;IAED,wBAAwB,CAAC,OAAgB;QACxC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,qBAAqB;QACxB,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,oBAAoB,EAAE,CAAC;IACzD,CAAC;CAED","sourcesContent":["import type { AssistantMessage } from \"@gsd/pi-ai\";\nimport { isContextOverflow, streamSimple } from \"@gsd/pi-ai\";\nimport { formatNoModelSelectedMessage } from \"@gsd/pi-coding-agent/core/auth-guidance.js\";\nimport type { CompactionEntry } from \"@gsd/pi-coding-agent/core/session-manager.js\";\nimport { getLatestCompactionEntry } from \"@gsd/pi-coding-agent/core/session-manager.js\";\nimport type { SessionBeforeCompactResult } from \"@gsd/pi-coding-agent/core/extensions/index.js\";\nimport type { AgentMessage } from \"@gsd/pi-agent-core\";\nimport {\n\ttype CompactionResult,\n\tcalculateContextTokens,\n\tcompact,\n\testimateContextTokens,\n\tprepareCompaction,\n\tshouldCompact,\n} from \"../compaction/index.js\";\nimport type { AgentSessionHost } from \"./agent-session-host.js\";\n\nexport function resolveThresholdContextTokens(assistantMessage: AssistantMessage, messages: AgentMessage[]): number {\n\tconst estimate = estimateContextTokens(messages);\n\treturn Math.max(calculateContextTokens(assistantMessage.usage), estimate.tokens);\n}\n\nexport class AgentSessionCompactionModule {\n\tconstructor(readonly host: AgentSessionHost) {}\n\n\tasync compact(customInstructions?: string): Promise<CompactionResult> {\n\t\tthis.host.disconnectFromAgent();\n\t\tawait this.host.abort();\n\t\tthis.host._compactionAbortController = new AbortController();\n\t\tthis.host.emit({ type: \"compaction_start\", reason: \"manual\" });\n\n\t\ttry {\n\t\t\tif (!this.host.model) {\n\t\t\t\tthrow new Error(formatNoModelSelectedMessage());\n\t\t\t}\n\n\t\t\tconst { apiKey, headers } = await this.host.getCompactionRequestAuth(this.host.model);\n\n\t\t\tconst pathEntries = this.host.sessionManager.getBranch();\n\t\t\tconst settings = this.host.settingsManager.getCompactionSettings();\n\n\t\t\tconst preparation = prepareCompaction(pathEntries, settings);\n\t\t\tif (!preparation) {\n\t\t\t\t// Check why we can't compact\n\t\t\t\tconst lastEntry = pathEntries[pathEntries.length - 1];\n\t\t\t\tif (lastEntry?.type === \"compaction\") {\n\t\t\t\t\tthrow new Error(\"Already compacted\");\n\t\t\t\t}\n\t\t\t\tthrow new Error(\"Nothing to compact (session too small)\");\n\t\t\t}\n\n\t\t\tlet extensionCompaction: CompactionResult | undefined;\n\t\t\tlet fromExtension = false;\n\n\t\t\tif (this.host._extensionRunner.hasHandlers(\"session_before_compact\")) {\n\t\t\t\tconst result = (await this.host._extensionRunner.emit({\n\t\t\t\t\ttype: \"session_before_compact\",\n\t\t\t\t\tpreparation,\n\t\t\t\t\tbranchEntries: pathEntries,\n\t\t\t\t\tcustomInstructions,\n\t\t\t\t\tsignal: this.host._compactionAbortController.signal,\n\t\t\t\t})) as SessionBeforeCompactResult | undefined;\n\n\t\t\t\tif (result?.cancel) {\n\t\t\t\t\tthrow new Error(\"Compaction cancelled\");\n\t\t\t\t}\n\n\t\t\t\tif (result?.compaction) {\n\t\t\t\t\textensionCompaction = result.compaction;\n\t\t\t\t\tfromExtension = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet summary: string;\n\t\t\tlet firstKeptEntryId: string;\n\t\t\tlet tokensBefore: number;\n\t\t\tlet details: unknown;\n\n\t\t\tif (extensionCompaction) {\n\t\t\t\t// Extension provided compaction content\n\t\t\t\tsummary = extensionCompaction.summary;\n\t\t\t\tfirstKeptEntryId = extensionCompaction.firstKeptEntryId;\n\t\t\t\ttokensBefore = extensionCompaction.tokensBefore;\n\t\t\t\tdetails = extensionCompaction.details;\n\t\t\t} else {\n\t\t\t\t// Generate compaction result\n\t\t\t\tconst result = await compact(\n\t\t\t\t\tpreparation,\n\t\t\t\t\tthis.host.model,\n\t\t\t\t\tapiKey,\n\t\t\t\t\theaders,\n\t\t\t\t\tcustomInstructions,\n\t\t\t\t\tthis.host._compactionAbortController.signal,\n\t\t\t\t\tthis.host.thinkingLevel,\n\t\t\t\t\tthis.host.agent.streamFn,\n\t\t\t\t);\n\t\t\t\tsummary = result.summary;\n\t\t\t\tfirstKeptEntryId = result.firstKeptEntryId;\n\t\t\t\ttokensBefore = result.tokensBefore;\n\t\t\t\tdetails = result.details;\n\t\t\t}\n\n\t\t\tif (this.host._compactionAbortController.signal.aborted) {\n\t\t\t\tthrow new Error(\"Compaction cancelled\");\n\t\t\t}\n\n\t\t\tthis.host.sessionManager.appendCompaction(summary, firstKeptEntryId, tokensBefore, details, fromExtension);\n\t\t\tconst newEntries = this.host.sessionManager.getEntries();\n\t\t\tconst sessionContext = this.host.sessionManager.buildSessionContext();\n\t\t\tthis.host.agent.state.messages = sessionContext.messages;\n\n\t\t\t// Get the saved compaction entry for the extension event\n\t\t\tconst savedCompactionEntry = newEntries.find((e) => e.type === \"compaction\" && e.summary === summary) as\n\t\t\t\t| CompactionEntry\n\t\t\t\t| undefined;\n\n\t\t\tif (this.host._extensionRunner && savedCompactionEntry) {\n\t\t\t\tawait this.host._extensionRunner.emit({\n\t\t\t\t\ttype: \"session_compact\",\n\t\t\t\t\tcompactionEntry: savedCompactionEntry,\n\t\t\t\t\tfromExtension,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst compactionResult = {\n\t\t\t\tsummary,\n\t\t\t\tfirstKeptEntryId,\n\t\t\t\ttokensBefore,\n\t\t\t\tdetails,\n\t\t\t};\n\t\t\tthis.host.emit({\n\t\t\t\ttype: \"compaction_end\",\n\t\t\t\treason: \"manual\",\n\t\t\t\tresult: compactionResult,\n\t\t\t\taborted: false,\n\t\t\t\twillRetry: false,\n\t\t\t});\n\t\t\treturn compactionResult;\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tconst aborted = message === \"Compaction cancelled\" || (error instanceof Error && error.name === \"AbortError\");\n\t\t\tthis.host.emit({\n\t\t\t\ttype: \"compaction_end\",\n\t\t\t\treason: \"manual\",\n\t\t\t\tresult: undefined,\n\t\t\t\taborted,\n\t\t\t\twillRetry: false,\n\t\t\t\terrorMessage: aborted ? undefined : `Compaction failed: ${message}`,\n\t\t\t});\n\t\t\tthrow error;\n\t\t} finally {\n\t\t\tthis.host._compactionAbortController = undefined;\n\t\t\tthis.host.reconnectToAgent();\n\t\t}\n\t}\n\n\tabortCompaction(): void {\n\t\tthis.host._compactionAbortController?.abort();\n\t\tthis.host._autoCompactionAbortController?.abort();\n\t}\n\n\tabortBranchSummary(): void {\n\t\tthis.host._branchSummaryAbortController?.abort();\n\t}\n\n\tasync checkCompaction(assistantMessage: AssistantMessage, skipAbortedCheck = true): Promise<boolean> {\n\t\tconst settings = this.host.settingsManager.getCompactionSettings();\n\t\tif (!settings.enabled) return false;\n\n\t\t// Skip if message was aborted (user cancelled) - unless skipAbortedCheck is false\n\t\tif (skipAbortedCheck && assistantMessage.stopReason === \"aborted\") return false;\n\n\t\tconst contextWindow = this.host.model?.contextWindow ?? 0;\n\n\t\t// Skip overflow check if the message came from a different model.\n\t\t// This handles the case where user switched from a smaller-context model (e.g. opus)\n\t\t// to a larger-context model (e.g. codex) - the overflow error from the old model\n\t\t// shouldn't trigger compaction for the new model.\n\t\tconst sameModel =\n\t\t\tthis.host.model && assistantMessage.provider === this.host.model.provider && assistantMessage.model === this.host.model.id;\n\n\t\t// Skip compaction checks if this assistant message is older than the latest\n\t\t// compaction boundary. This prevents a stale pre-compaction usage/error\n\t\t// from retriggering compaction on the first prompt after compaction.\n\t\tconst compactionEntry = getLatestCompactionEntry(this.host.sessionManager.getBranch());\n\t\tconst assistantIsFromBeforeCompaction =\n\t\t\tcompactionEntry !== null && assistantMessage.timestamp <= new Date(compactionEntry.timestamp).getTime();\n\t\tif (assistantIsFromBeforeCompaction) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Case 1: Overflow - LLM returned context overflow error\n\t\tif (sameModel && isContextOverflow(assistantMessage, contextWindow)) {\n\t\t\tif (this.host._overflowRecoveryAttempted) {\n\t\t\t\tthis.host.emit({\n\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\treason: \"overflow\",\n\t\t\t\t\tresult: undefined,\n\t\t\t\t\taborted: false,\n\t\t\t\t\twillRetry: false,\n\t\t\t\t\terrorMessage:\n\t\t\t\t\t\t\"Context overflow recovery failed after one compact-and-retry attempt. Try reducing context or switching to a larger-context model.\",\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis.host._overflowRecoveryAttempted = true;\n\t\t\t// Remove the error message from agent state (it IS saved to session for history,\n\t\t\t// but we don't want it in context for the retry)\n\t\t\tconst messages = this.host.agent.state.messages;\n\t\t\tif (messages.length > 0 && messages[messages.length - 1].role === \"assistant\") {\n\t\t\t\tthis.host.agent.state.messages = messages.slice(0, -1);\n\t\t\t}\n\t\t\treturn await this.runAutoCompaction(\"overflow\", true);\n\t\t}\n\n\t\t// Case 2: Threshold - context is getting large.\n\t\t// Use the same session estimate as the footer so trailing tool/custom\n\t\t// messages after the last provider usage can still trigger compaction.\n\t\t// For error messages (no usage data), estimate from last successful response.\n\t\t// This ensures sessions that hit persistent API errors (e.g. 529) can still compact.\n\t\tlet contextTokens: number;\n\t\tif (assistantMessage.stopReason === \"error\") {\n\t\t\tconst messages = this.host.agent.state.messages;\n\t\t\tconst estimate = estimateContextTokens(messages);\n\t\t\tif (estimate.lastUsageIndex === null) return false; // No usage data at all\n\t\t\t// Verify the usage source is post-compaction. Kept pre-compaction messages\n\t\t\t// have stale usage reflecting the old (larger) context and would falsely\n\t\t\t// trigger compaction right after one just finished.\n\t\t\tconst usageMsg = messages[estimate.lastUsageIndex];\n\t\t\tif (\n\t\t\t\tcompactionEntry &&\n\t\t\t\tusageMsg.role === \"assistant\" &&\n\t\t\t\t(usageMsg as AssistantMessage).timestamp <= new Date(compactionEntry.timestamp).getTime()\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tcontextTokens = estimate.tokens;\n\t\t} else {\n\t\t\tcontextTokens = resolveThresholdContextTokens(assistantMessage, this.host.agent.state.messages);\n\t\t}\n\t\tif (shouldCompact(contextTokens, contextWindow, settings)) {\n\t\t\treturn await this.runAutoCompaction(\"threshold\", false);\n\t\t}\n\t\treturn false;\n\t}\n\n\tasync runAutoCompaction(reason: \"overflow\" | \"threshold\", willRetry: boolean): Promise<boolean> {\n\t\tconst settings = this.host.settingsManager.getCompactionSettings();\n\n\t\tthis.host.emit({ type: \"compaction_start\", reason });\n\t\tthis.host._autoCompactionAbortController = new AbortController();\n\n\t\ttry {\n\t\t\tif (!this.host.model) {\n\t\t\t\tthis.host.emit({\n\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\treason,\n\t\t\t\t\tresult: undefined,\n\t\t\t\t\taborted: false,\n\t\t\t\t\twillRetry: false,\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tlet apiKey: string | undefined;\n\t\t\tlet headers: Record<string, string> | undefined;\n\t\t\tif (this.host.agent.streamFn === streamSimple) {\n\t\t\t\tconst authResult = await this.host.modelRegistry.getApiKeyAndHeaders(this.host.model);\n\t\t\t\tif (!authResult.ok || !authResult.apiKey) {\n\t\t\t\t\tthis.host.emit({\n\t\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\t\treason,\n\t\t\t\t\t\tresult: undefined,\n\t\t\t\t\t\taborted: false,\n\t\t\t\t\t\twillRetry: false,\n\t\t\t\t\t});\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tapiKey = authResult.apiKey;\n\t\t\t\theaders = authResult.headers;\n\t\t\t} else {\n\t\t\t\t({ apiKey, headers } = await this.host.getCompactionRequestAuth(this.host.model));\n\t\t\t}\n\n\t\t\tconst pathEntries = this.host.sessionManager.getBranch();\n\n\t\t\tconst preparation = prepareCompaction(pathEntries, settings);\n\t\t\tif (!preparation) {\n\t\t\t\tthis.host.emit({\n\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\treason,\n\t\t\t\t\tresult: undefined,\n\t\t\t\t\taborted: false,\n\t\t\t\t\twillRetry: false,\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tlet extensionCompaction: CompactionResult | undefined;\n\t\t\tlet fromExtension = false;\n\n\t\t\tif (this.host._extensionRunner.hasHandlers(\"session_before_compact\")) {\n\t\t\t\tconst extensionResult = (await this.host._extensionRunner.emit({\n\t\t\t\t\ttype: \"session_before_compact\",\n\t\t\t\t\tpreparation,\n\t\t\t\t\tbranchEntries: pathEntries,\n\t\t\t\t\tcustomInstructions: undefined,\n\t\t\t\t\tsignal: this.host._autoCompactionAbortController.signal,\n\t\t\t\t})) as SessionBeforeCompactResult | undefined;\n\n\t\t\t\tif (extensionResult?.cancel) {\n\t\t\t\t\tthis.host.emit({\n\t\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\t\treason,\n\t\t\t\t\t\tresult: undefined,\n\t\t\t\t\t\taborted: true,\n\t\t\t\t\t\twillRetry,\n\t\t\t\t\t});\n\t\t\t\t\tif (willRetry) {\n\t\t\t\t\t\tconst messages = this.host.agent.state.messages;\n\t\t\t\t\t\tconst lastMsg = messages[messages.length - 1];\n\t\t\t\t\t\tif (lastMsg?.role === \"assistant\" && (lastMsg as AssistantMessage).stopReason === \"error\") {\n\t\t\t\t\t\t\tthis.host.agent.state.messages = messages.slice(0, -1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\treturn this.host.agent.hasQueuedMessages();\n\t\t\t\t}\n\n\t\t\t\tif (extensionResult?.compaction) {\n\t\t\t\t\textensionCompaction = extensionResult.compaction;\n\t\t\t\t\tfromExtension = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet summary: string;\n\t\t\tlet firstKeptEntryId: string;\n\t\t\tlet tokensBefore: number;\n\t\t\tlet details: unknown;\n\n\t\t\tif (extensionCompaction) {\n\t\t\t\t// Extension provided compaction content\n\t\t\t\tsummary = extensionCompaction.summary;\n\t\t\t\tfirstKeptEntryId = extensionCompaction.firstKeptEntryId;\n\t\t\t\ttokensBefore = extensionCompaction.tokensBefore;\n\t\t\t\tdetails = extensionCompaction.details;\n\t\t\t} else {\n\t\t\t\t// Generate compaction result\n\t\t\t\tconst compactResult = await compact(\n\t\t\t\t\tpreparation,\n\t\t\t\t\tthis.host.model,\n\t\t\t\t\tapiKey,\n\t\t\t\t\theaders,\n\t\t\t\t\tundefined,\n\t\t\t\t\tthis.host._autoCompactionAbortController.signal,\n\t\t\t\t\tthis.host.thinkingLevel,\n\t\t\t\t\tthis.host.agent.streamFn,\n\t\t\t\t);\n\t\t\t\tsummary = compactResult.summary;\n\t\t\t\tfirstKeptEntryId = compactResult.firstKeptEntryId;\n\t\t\t\ttokensBefore = compactResult.tokensBefore;\n\t\t\t\tdetails = compactResult.details;\n\t\t\t}\n\n\t\t\tif (this.host._autoCompactionAbortController.signal.aborted) {\n\t\t\t\tthis.host.emit({\n\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\treason,\n\t\t\t\t\tresult: undefined,\n\t\t\t\t\taborted: true,\n\t\t\t\t\twillRetry: false,\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis.host.sessionManager.appendCompaction(summary, firstKeptEntryId, tokensBefore, details, fromExtension);\n\t\t\tconst newEntries = this.host.sessionManager.getEntries();\n\t\t\tconst sessionContext = this.host.sessionManager.buildSessionContext();\n\t\t\tthis.host.agent.state.messages = sessionContext.messages;\n\n\t\t\t// Get the saved compaction entry for the extension event\n\t\t\tconst savedCompactionEntry = newEntries.find((e) => e.type === \"compaction\" && e.summary === summary) as\n\t\t\t\t| CompactionEntry\n\t\t\t\t| undefined;\n\n\t\t\tif (this.host._extensionRunner && savedCompactionEntry) {\n\t\t\t\tawait this.host._extensionRunner.emit({\n\t\t\t\t\ttype: \"session_compact\",\n\t\t\t\t\tcompactionEntry: savedCompactionEntry,\n\t\t\t\t\tfromExtension,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst result: CompactionResult = {\n\t\t\t\tsummary,\n\t\t\t\tfirstKeptEntryId,\n\t\t\t\ttokensBefore,\n\t\t\t\tdetails,\n\t\t\t};\n\t\t\tthis.host.emit({ type: \"compaction_end\", reason, result, aborted: false, willRetry });\n\n\t\t\tif (willRetry) {\n\t\t\t\tconst messages = this.host.agent.state.messages;\n\t\t\t\tconst lastMsg = messages[messages.length - 1];\n\t\t\t\tif (lastMsg?.role === \"assistant\" && (lastMsg as AssistantMessage).stopReason === \"error\") {\n\t\t\t\t\tthis.host.agent.state.messages = messages.slice(0, -1);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Auto-compaction can complete while follow-up/steering/custom messages are waiting.\n\t\t\t// Continue once so queued messages are delivered.\n\t\t\treturn this.host.agent.hasQueuedMessages();\n\t\t} catch (error) {\n\t\t\tconst errorMessage = error instanceof Error ? error.message : \"compaction failed\";\n\t\t\tthis.host.emit({\n\t\t\t\ttype: \"compaction_end\",\n\t\t\t\treason,\n\t\t\t\tresult: undefined,\n\t\t\t\taborted: false,\n\t\t\t\twillRetry: false,\n\t\t\t\terrorMessage:\n\t\t\t\t\treason === \"overflow\"\n\t\t\t\t\t\t? `Context overflow recovery failed: ${errorMessage}`\n\t\t\t\t\t\t: `Auto-compaction failed: ${errorMessage}`,\n\t\t\t});\n\t\t\treturn false;\n\t\t} finally {\n\t\t\tthis.host._autoCompactionAbortController = undefined;\n\t\t}\n\t}\n\n\tsetAutoCompactionEnabled(enabled: boolean): void {\n\t\tthis.host.settingsManager.setCompactionEnabled(enabled);\n\t}\n\n\tget autoCompactionEnabled(): boolean {\n\t\treturn this.host.settingsManager.getCompactionEnabled();\n\t}\n\n}\n"]}
|
|
@@ -13,6 +13,7 @@ import type { BuildSystemPromptOptions } from "../system-prompt.js";
|
|
|
13
13
|
import type { BashOperations } from "@gsd/pi-coding-agent/core/tools/bash.js";
|
|
14
14
|
import type { AgentSessionEvent, AgentSessionEventListener, ModelCycleResult, PromptOptions, ToolDefinitionEntry } from "./agent-session-types.js";
|
|
15
15
|
import type { SessionStartEvent } from "@gsd/pi-coding-agent/core/extensions/index.js";
|
|
16
|
+
import type { BeginTurnLatencyOptions, TurnLatencyRecord, TurnLatencyStatus, TurnLatencyVisibleKind } from "../turn-latency.js";
|
|
16
17
|
/**
|
|
17
18
|
* Internal surface shared by AgentSession submodule classes.
|
|
18
19
|
* AgentSession implements this interface and passes `this` to module constructors.
|
|
@@ -67,6 +68,7 @@ export interface AgentSessionHost {
|
|
|
67
68
|
_baseSystemPrompt: string;
|
|
68
69
|
_baseSystemPromptOptions: BuildSystemPromptOptions;
|
|
69
70
|
_lastAssistantMessage: AssistantMessage | undefined;
|
|
71
|
+
_activeTurnLatency: TurnLatencyRecord | undefined;
|
|
70
72
|
readonly model: Model<any> | undefined;
|
|
71
73
|
readonly thinkingLevel: ThinkingLevel;
|
|
72
74
|
readonly isStreaming: boolean;
|
|
@@ -83,6 +85,11 @@ export interface AgentSessionHost {
|
|
|
83
85
|
readonly pendingMessageCount: number;
|
|
84
86
|
emit(event: AgentSessionEvent): void;
|
|
85
87
|
emitQueueUpdate(): void;
|
|
88
|
+
beginTurnLatency(options?: BeginTurnLatencyOptions): TurnLatencyRecord | undefined;
|
|
89
|
+
markTurnLatency(phase: string, data?: Record<string, unknown>): void;
|
|
90
|
+
markFirstStreamActivity(kind: string, data?: Record<string, unknown>): void;
|
|
91
|
+
markFirstVisibleTurnLatency(kind: TurnLatencyVisibleKind, data?: Record<string, unknown>): void;
|
|
92
|
+
finishTurnLatency(status: TurnLatencyStatus): void;
|
|
86
93
|
disconnectFromAgent(): void;
|
|
87
94
|
reconnectToAgent(): void;
|
|
88
95
|
isRetryableError(message: AssistantMessage): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-session-host.d.ts","sourceRoot":"","sources":["../../src/session/agent-session-host.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,KAAK,EAEL,YAAY,EACZ,UAAU,EACV,SAAS,EACT,aAAa,EACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACrF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EACX,YAAY,EACZ,8BAA8B,EAC9B,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAElB,sBAAsB,EACtB,eAAe,EACf,cAAc,EACd,QAAQ,EACR,MAAM,+CAA+C,CAAC;AACvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACjG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+CAA+C,CAAC;AACpF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAC;AACnF,OAAO,KAAK,EAAsB,cAAc,EAAE,MAAM,8CAA8C,CAAC;AACvG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+CAA+C,CAAC;AACrF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,KAAK,EACX,iBAAiB,EACjB,yBAAyB,EAEzB,gBAAgB,EAChB,aAAa,EAEb,mBAAmB,EACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-session-host.d.ts","sourceRoot":"","sources":["../../src/session/agent-session-host.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-session-host.js","sourceRoot":"","sources":["../../src/session/agent-session-host.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n\tAgent,\n\tAgentEvent,\n\tAgentMessage,\n\tAgentState,\n\tAgentTool,\n\tThinkingLevel,\n} from \"@gsd/pi-agent-core\";\nimport type { AssistantMessage, ImageContent, Model, TextContent } from \"@gsd/pi-ai\";\nimport type { BashResult } from \"../bash-executor.js\";\nimport type { CompactionResult } from \"../compaction/index.js\";\nimport type {\n\tContextUsage,\n\tExtensionCommandContextActions,\n\tExtensionErrorListener,\n\tExtensionRunner,\n\tExtensionUIContext,\n\tInputSource,\n\tReplacedSessionContext,\n\tShutdownHandler,\n\tToolDefinition,\n\tToolInfo,\n} from \"@gsd/pi-coding-agent/core/extensions/index.js\";\nimport type { BashExecutionMessage, CustomMessage } from \"@gsd/pi-coding-agent/core/messages.js\";\nimport type { ModelRegistry } from \"@gsd/pi-coding-agent/core/model-registry.js\";\nimport type { PromptTemplate } from \"@gsd/pi-coding-agent/core/prompt-templates.js\";\nimport type { ResourceLoader } from \"@gsd/pi-coding-agent/core/resource-loader.js\";\nimport type { BranchSummaryEntry, SessionManager } from \"@gsd/pi-coding-agent/core/session-manager.js\";\nimport type { SettingsManager } from \"@gsd/pi-coding-agent/core/settings-manager.js\";\nimport type { BuildSystemPromptOptions } from \"../system-prompt.js\";\nimport type { BashOperations } from \"@gsd/pi-coding-agent/core/tools/bash.js\";\nimport type {\n\tAgentSessionEvent,\n\tAgentSessionEventListener,\n\tExtensionBindings,\n\tModelCycleResult,\n\tPromptOptions,\n\tSessionStats,\n\tToolDefinitionEntry,\n} from \"./agent-session-types.js\";\nimport type { SessionStartEvent } from \"@gsd/pi-coding-agent/core/extensions/index.js\";\n\n/**\n * Internal surface shared by AgentSession submodule classes.\n * AgentSession implements this interface and passes `this` to module constructors.\n */\nexport interface AgentSessionHost {\n\treadonly agent: Agent;\n\treadonly sessionManager: SessionManager;\n\treadonly settingsManager: SettingsManager;\n\treadonly modelRegistry: ModelRegistry;\n\treadonly resourceLoader: ResourceLoader;\n\n\t// Mutable session state accessed across modules\n\t_scopedModels: Array<{ model: Model<any>; thinkingLevel?: ThinkingLevel }>;\n\t_unsubscribeAgent: (() => void) | undefined;\n\t_eventListeners: AgentSessionEventListener[];\n\t_steeringMessages: string[];\n\t_followUpMessages: string[];\n\t_pendingNextTurnMessages: CustomMessage[];\n\t_compactionAbortController: AbortController | undefined;\n\t_autoCompactionAbortController: AbortController | undefined;\n\t_overflowRecoveryAttempted: boolean;\n\t_branchSummaryAbortController: AbortController | undefined;\n\t_retryAbortController: AbortController | undefined;\n\t_retryAttempt: number;\n\t_lastTurnCost: number;\n\t_bashAbortController: AbortController | undefined;\n\t_pendingBashMessages: BashExecutionMessage[];\n\t_extensionRunner: ExtensionRunner;\n\t_turnIndex: number;\n\t_customTools: ToolDefinition[];\n\t_baseToolDefinitions: Map<string, ToolDefinition>;\n\t_cwd: string;\n\t_extensionRunnerRef: { current?: ExtensionRunner } | undefined;\n\t_initialActiveToolNames: string[] | undefined;\n\t_allowedToolNames: Set<string> | undefined;\n\t_baseToolsOverride: Record<string, AgentTool> | undefined;\n\t_sessionStartEvent: SessionStartEvent;\n\t_extensionUIContext: ExtensionUIContext | undefined;\n\t_extensionCommandContextActions: ExtensionCommandContextActions | undefined;\n\t_extensionAbortHandler: (() => void) | undefined;\n\t_extensionShutdownHandler: ShutdownHandler | undefined;\n\t_extensionErrorListener: ExtensionErrorListener | undefined;\n\t_extensionErrorUnsubscriber: (() => void) | undefined;\n\t_visibleSkillNames: string[] | undefined;\n\t_toolRegistry: Map<string, AgentTool>;\n\t_toolDefinitions: Map<string, ToolDefinitionEntry>;\n\t_toolPromptSnippets: Map<string, string>;\n\t_toolPromptGuidelines: Map<string, string[]>;\n\t_baseSystemPrompt: string;\n\t_baseSystemPromptOptions: BuildSystemPromptOptions;\n\t_lastAssistantMessage: AssistantMessage | undefined;\n\n\t// Read-only derived state\n\treadonly model: Model<any> | undefined;\n\treadonly thinkingLevel: ThinkingLevel;\n\treadonly isStreaming: boolean;\n\treadonly systemPrompt: string;\n\treadonly state: AgentState;\n\treadonly messages: AgentMessage[];\n\treadonly steeringMode: \"all\" | \"one-at-a-time\";\n\treadonly followUpMode: \"all\" | \"one-at-a-time\";\n\treadonly sessionFile: string | undefined;\n\treadonly sessionId: string;\n\treadonly sessionName: string | undefined;\n\treadonly promptTemplates: ReadonlyArray<PromptTemplate>;\n\treadonly isCompacting: boolean;\n\treadonly pendingMessageCount: number;\n\n\t// Cross-module internal API\n\temit(event: AgentSessionEvent): void;\n\temitQueueUpdate(): void;\n\tdisconnectFromAgent(): void;\n\treconnectToAgent(): void;\n\tisRetryableError(message: AssistantMessage): boolean;\n\trunAgentPrompt(messages: AgentMessage | AgentMessage[]): Promise<void>;\n\thandlePostAgentRun(): Promise<boolean>;\n\tflushPendingBashMessages(): void;\n\tcheckCompaction(assistantMessage: AssistantMessage, skipAbortedCheck?: boolean): Promise<boolean>;\n\tgetCompactionRequestAuth(model: Model<any>): Promise<{ apiKey?: string; headers?: Record<string, string> }>;\n\tgetRequiredRequestAuth(model: Model<any>): Promise<{ apiKey: string; headers?: Record<string, string> }>;\n\temitModelSelect(\n\t\tnextModel: Model<any>,\n\t\tpreviousModel: Model<any> | undefined,\n\t\tsource: \"set\" | \"cycle\" | \"restore\",\n\t): Promise<void>;\n\tfindLastAssistantMessage(): AssistantMessage | undefined;\n\tsetThinkingLevel(level: ThinkingLevel): void;\n\tgetAvailableThinkingLevels(): ThinkingLevel[];\n\tclampThinkingLevel(level: ThinkingLevel, availableLevels: ThinkingLevel[]): ThinkingLevel;\n\tsupportsThinking(): boolean;\n\tgetActiveToolNames(): string[];\n\tsetActiveToolsByName(toolNames: string[]): void;\n\trebuildSystemPrompt(toolNames: string[]): string;\n\trefreshToolRegistry(options?: {\n\t\tactiveToolNames?: string[];\n\t\tincludeAllExtensionTools?: boolean;\n\t}): void;\n\tbuildRuntime(options: {\n\t\tactiveToolNames?: string[];\n\t\tflagValues?: Map<string, boolean | string>;\n\t\tincludeAllExtensionTools?: boolean;\n\t}): void;\n\tinstallAgentToolHooks(): void;\n\tprompt(text: string, options?: PromptOptions): Promise<void>;\n\tsendCustomMessage<T = unknown>(\n\t\tmessage: Pick<CustomMessage<T>, \"customType\" | \"content\" | \"display\" | \"details\">,\n\t\toptions?: { triggerTurn?: boolean; deliverAs?: \"steer\" | \"followUp\" | \"nextTurn\" },\n\t): Promise<void>;\n\tsendUserMessage(\n\t\tcontent: string | (TextContent | ImageContent)[],\n\t\toptions?: { deliverAs?: \"steer\" | \"followUp\" },\n\t): Promise<void>;\n\tcompact(customInstructions?: string): Promise<CompactionResult>;\n\tabort(): Promise<void>;\n\tabortRetry(): void;\n\tsetSessionName(name: string): void;\n\temitSessionStartWithLegacySwitch(event: SessionStartEvent & { reason: \"new\" | \"resume\" }): Promise<void>;\n\textendResourcesFromExtensions(reason: \"startup\" | \"reload\"): Promise<void>;\n\texecuteBash(\n\t\tcommand: string,\n\t\tonChunk?: (chunk: string) => void,\n\t\toptions?: { excludeFromContext?: boolean; operations?: BashOperations; loginShell?: boolean },\n\t): Promise<BashResult>;\n\trecordBashResult(command: string, result: BashResult, options?: { excludeFromContext?: boolean }): void;\n\tgetContextUsage(): ContextUsage | undefined;\n\tgetToolDefinition(name: string): ToolDefinition | undefined;\n\tgetAllTools(): ToolInfo[];\n\tcreateReplacedSessionContext(): ReplacedSessionContext;\n\n\t// Public methods modules delegate to\n\tsetModel(model: Model<any>): Promise<void>;\n\tcycleModel(direction?: \"forward\" | \"backward\"): Promise<ModelCycleResult | undefined>;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"agent-session-host.js","sourceRoot":"","sources":["../../src/session/agent-session-host.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n\tAgent,\n\tAgentEvent,\n\tAgentMessage,\n\tAgentState,\n\tAgentTool,\n\tThinkingLevel,\n} from \"@gsd/pi-agent-core\";\nimport type { AssistantMessage, ImageContent, Model, TextContent } from \"@gsd/pi-ai\";\nimport type { BashResult } from \"../bash-executor.js\";\nimport type { CompactionResult } from \"../compaction/index.js\";\nimport type {\n\tContextUsage,\n\tExtensionCommandContextActions,\n\tExtensionErrorListener,\n\tExtensionRunner,\n\tExtensionUIContext,\n\tInputSource,\n\tReplacedSessionContext,\n\tShutdownHandler,\n\tToolDefinition,\n\tToolInfo,\n} from \"@gsd/pi-coding-agent/core/extensions/index.js\";\nimport type { BashExecutionMessage, CustomMessage } from \"@gsd/pi-coding-agent/core/messages.js\";\nimport type { ModelRegistry } from \"@gsd/pi-coding-agent/core/model-registry.js\";\nimport type { PromptTemplate } from \"@gsd/pi-coding-agent/core/prompt-templates.js\";\nimport type { ResourceLoader } from \"@gsd/pi-coding-agent/core/resource-loader.js\";\nimport type { BranchSummaryEntry, SessionManager } from \"@gsd/pi-coding-agent/core/session-manager.js\";\nimport type { SettingsManager } from \"@gsd/pi-coding-agent/core/settings-manager.js\";\nimport type { BuildSystemPromptOptions } from \"../system-prompt.js\";\nimport type { BashOperations } from \"@gsd/pi-coding-agent/core/tools/bash.js\";\nimport type {\n\tAgentSessionEvent,\n\tAgentSessionEventListener,\n\tExtensionBindings,\n\tModelCycleResult,\n\tPromptOptions,\n\tSessionStats,\n\tToolDefinitionEntry,\n} from \"./agent-session-types.js\";\nimport type { SessionStartEvent } from \"@gsd/pi-coding-agent/core/extensions/index.js\";\nimport type {\n\tBeginTurnLatencyOptions,\n\tTurnLatencyRecord,\n\tTurnLatencyStatus,\n\tTurnLatencyVisibleKind,\n} from \"../turn-latency.js\";\n\n/**\n * Internal surface shared by AgentSession submodule classes.\n * AgentSession implements this interface and passes `this` to module constructors.\n */\nexport interface AgentSessionHost {\n\treadonly agent: Agent;\n\treadonly sessionManager: SessionManager;\n\treadonly settingsManager: SettingsManager;\n\treadonly modelRegistry: ModelRegistry;\n\treadonly resourceLoader: ResourceLoader;\n\n\t// Mutable session state accessed across modules\n\t_scopedModels: Array<{ model: Model<any>; thinkingLevel?: ThinkingLevel }>;\n\t_unsubscribeAgent: (() => void) | undefined;\n\t_eventListeners: AgentSessionEventListener[];\n\t_steeringMessages: string[];\n\t_followUpMessages: string[];\n\t_pendingNextTurnMessages: CustomMessage[];\n\t_compactionAbortController: AbortController | undefined;\n\t_autoCompactionAbortController: AbortController | undefined;\n\t_overflowRecoveryAttempted: boolean;\n\t_branchSummaryAbortController: AbortController | undefined;\n\t_retryAbortController: AbortController | undefined;\n\t_retryAttempt: number;\n\t_lastTurnCost: number;\n\t_bashAbortController: AbortController | undefined;\n\t_pendingBashMessages: BashExecutionMessage[];\n\t_extensionRunner: ExtensionRunner;\n\t_turnIndex: number;\n\t_customTools: ToolDefinition[];\n\t_baseToolDefinitions: Map<string, ToolDefinition>;\n\t_cwd: string;\n\t_extensionRunnerRef: { current?: ExtensionRunner } | undefined;\n\t_initialActiveToolNames: string[] | undefined;\n\t_allowedToolNames: Set<string> | undefined;\n\t_baseToolsOverride: Record<string, AgentTool> | undefined;\n\t_sessionStartEvent: SessionStartEvent;\n\t_extensionUIContext: ExtensionUIContext | undefined;\n\t_extensionCommandContextActions: ExtensionCommandContextActions | undefined;\n\t_extensionAbortHandler: (() => void) | undefined;\n\t_extensionShutdownHandler: ShutdownHandler | undefined;\n\t_extensionErrorListener: ExtensionErrorListener | undefined;\n\t_extensionErrorUnsubscriber: (() => void) | undefined;\n\t_visibleSkillNames: string[] | undefined;\n\t_toolRegistry: Map<string, AgentTool>;\n\t_toolDefinitions: Map<string, ToolDefinitionEntry>;\n\t_toolPromptSnippets: Map<string, string>;\n\t_toolPromptGuidelines: Map<string, string[]>;\n\t_baseSystemPrompt: string;\n\t_baseSystemPromptOptions: BuildSystemPromptOptions;\n\t_lastAssistantMessage: AssistantMessage | undefined;\n\t_activeTurnLatency: TurnLatencyRecord | undefined;\n\n\t// Read-only derived state\n\treadonly model: Model<any> | undefined;\n\treadonly thinkingLevel: ThinkingLevel;\n\treadonly isStreaming: boolean;\n\treadonly systemPrompt: string;\n\treadonly state: AgentState;\n\treadonly messages: AgentMessage[];\n\treadonly steeringMode: \"all\" | \"one-at-a-time\";\n\treadonly followUpMode: \"all\" | \"one-at-a-time\";\n\treadonly sessionFile: string | undefined;\n\treadonly sessionId: string;\n\treadonly sessionName: string | undefined;\n\treadonly promptTemplates: ReadonlyArray<PromptTemplate>;\n\treadonly isCompacting: boolean;\n\treadonly pendingMessageCount: number;\n\n\t// Cross-module internal API\n\temit(event: AgentSessionEvent): void;\n\temitQueueUpdate(): void;\n\tbeginTurnLatency(options?: BeginTurnLatencyOptions): TurnLatencyRecord | undefined;\n\tmarkTurnLatency(phase: string, data?: Record<string, unknown>): void;\n\tmarkFirstStreamActivity(kind: string, data?: Record<string, unknown>): void;\n\tmarkFirstVisibleTurnLatency(kind: TurnLatencyVisibleKind, data?: Record<string, unknown>): void;\n\tfinishTurnLatency(status: TurnLatencyStatus): void;\n\tdisconnectFromAgent(): void;\n\treconnectToAgent(): void;\n\tisRetryableError(message: AssistantMessage): boolean;\n\trunAgentPrompt(messages: AgentMessage | AgentMessage[]): Promise<void>;\n\thandlePostAgentRun(): Promise<boolean>;\n\tflushPendingBashMessages(): void;\n\tcheckCompaction(assistantMessage: AssistantMessage, skipAbortedCheck?: boolean): Promise<boolean>;\n\tgetCompactionRequestAuth(model: Model<any>): Promise<{ apiKey?: string; headers?: Record<string, string> }>;\n\tgetRequiredRequestAuth(model: Model<any>): Promise<{ apiKey: string; headers?: Record<string, string> }>;\n\temitModelSelect(\n\t\tnextModel: Model<any>,\n\t\tpreviousModel: Model<any> | undefined,\n\t\tsource: \"set\" | \"cycle\" | \"restore\",\n\t): Promise<void>;\n\tfindLastAssistantMessage(): AssistantMessage | undefined;\n\tsetThinkingLevel(level: ThinkingLevel): void;\n\tgetAvailableThinkingLevels(): ThinkingLevel[];\n\tclampThinkingLevel(level: ThinkingLevel, availableLevels: ThinkingLevel[]): ThinkingLevel;\n\tsupportsThinking(): boolean;\n\tgetActiveToolNames(): string[];\n\tsetActiveToolsByName(toolNames: string[]): void;\n\trebuildSystemPrompt(toolNames: string[]): string;\n\trefreshToolRegistry(options?: {\n\t\tactiveToolNames?: string[];\n\t\tincludeAllExtensionTools?: boolean;\n\t}): void;\n\tbuildRuntime(options: {\n\t\tactiveToolNames?: string[];\n\t\tflagValues?: Map<string, boolean | string>;\n\t\tincludeAllExtensionTools?: boolean;\n\t}): void;\n\tinstallAgentToolHooks(): void;\n\tprompt(text: string, options?: PromptOptions): Promise<void>;\n\tsendCustomMessage<T = unknown>(\n\t\tmessage: Pick<CustomMessage<T>, \"customType\" | \"content\" | \"display\" | \"details\">,\n\t\toptions?: { triggerTurn?: boolean; deliverAs?: \"steer\" | \"followUp\" | \"nextTurn\" },\n\t): Promise<void>;\n\tsendUserMessage(\n\t\tcontent: string | (TextContent | ImageContent)[],\n\t\toptions?: { deliverAs?: \"steer\" | \"followUp\" },\n\t): Promise<void>;\n\tcompact(customInstructions?: string): Promise<CompactionResult>;\n\tabort(): Promise<void>;\n\tabortRetry(): void;\n\tsetSessionName(name: string): void;\n\temitSessionStartWithLegacySwitch(event: SessionStartEvent & { reason: \"new\" | \"resume\" }): Promise<void>;\n\textendResourcesFromExtensions(reason: \"startup\" | \"reload\"): Promise<void>;\n\texecuteBash(\n\t\tcommand: string,\n\t\tonChunk?: (chunk: string) => void,\n\t\toptions?: { excludeFromContext?: boolean; operations?: BashOperations; loginShell?: boolean },\n\t): Promise<BashResult>;\n\trecordBashResult(command: string, result: BashResult, options?: { excludeFromContext?: boolean }): void;\n\tgetContextUsage(): ContextUsage | undefined;\n\tgetToolDefinition(name: string): ToolDefinition | undefined;\n\tgetAllTools(): ToolInfo[];\n\tcreateReplacedSessionContext(): ReplacedSessionContext;\n\n\t// Public methods modules delegate to\n\tsetModel(model: Model<any>): Promise<void>;\n\tcycleModel(direction?: \"forward\" | \"backward\"): Promise<ModelCycleResult | undefined>;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-session-prompt.d.ts","sourceRoot":"","sources":["../../src/session/agent-session-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,oBAAoB,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAI3E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,qBAAa,wBAAwB;IACxB,QAAQ,CAAC,IAAI,EAAE,gBAAgB;gBAAtB,IAAI,EAAE,gBAAgB;IAErC,cAAc,CAAC,QAAQ,EAAE,YAAY,GAAG,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-session-prompt.d.ts","sourceRoot":"","sources":["../../src/session/agent-session-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,oBAAoB,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAI3E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,qBAAa,wBAAwB;IACxB,QAAQ,CAAC,IAAI,EAAE,gBAAgB;gBAAtB,IAAI,EAAE,gBAAgB;IAErC,cAAc,CAAC,QAAQ,EAAE,YAAY,GAAG,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBtE,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC;IAwBtC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IA8M5D,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA0BhE,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IA0BlC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAa3D,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAa9D,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAchE,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAczE,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAYrC,iBAAiB,CAAC,CAAC,GAAG,OAAO,EAClC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC,EACjF,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,UAAU,CAAA;KAAE,GAChF,OAAO,CAAC,IAAI,CAAC;IAgCV,eAAe,CACpB,OAAO,EAAE,MAAM,GAAG,CAAC,WAAW,GAAG,YAAY,CAAC,EAAE,EAChD,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,GAAG,UAAU,CAAA;KAAE,GAC5C,OAAO,CAAC,IAAI,CAAC;IA8BhB,UAAU,IAAI;QAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE;IAUxD,mBAAmB,IAAI,SAAS,MAAM,EAAE;IAIxC,mBAAmB,IAAI,SAAS,MAAM,EAAE;IAIlC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO;IAc9C,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAoD/D,UAAU,IAAI,IAAI;IAIlB,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,IAAI,gBAAgB,IAAI,OAAO,CAE9B;IAED,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAI3C,eAAe,CAAC,IAAI,EAAE,KAAK,GAAG,eAAe,GAAG,IAAI;IAKpD,eAAe,CAAC,IAAI,EAAE,KAAK,GAAG,eAAe,GAAG,IAAI;CAKpD"}
|
|
@@ -10,6 +10,16 @@ export class AgentSessionPromptModule {
|
|
|
10
10
|
this.host = host;
|
|
11
11
|
}
|
|
12
12
|
async runAgentPrompt(messages) {
|
|
13
|
+
const previousLatencyMark = this.host.agent.latencyMark;
|
|
14
|
+
this.host.agent.latencyMark = (phase, data) => {
|
|
15
|
+
previousLatencyMark?.(phase, data);
|
|
16
|
+
if (phase === "agent_loop.first_stream_activity") {
|
|
17
|
+
this.host.markFirstStreamActivity(String(data?.eventType ?? "unknown"), data);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
this.host.markTurnLatency(phase, data);
|
|
21
|
+
}
|
|
22
|
+
};
|
|
13
23
|
try {
|
|
14
24
|
await this.host.agent.prompt(messages);
|
|
15
25
|
while (await this.handlePostAgentRun()) {
|
|
@@ -17,6 +27,7 @@ export class AgentSessionPromptModule {
|
|
|
17
27
|
}
|
|
18
28
|
}
|
|
19
29
|
finally {
|
|
30
|
+
this.host.agent.latencyMark = previousLatencyMark;
|
|
20
31
|
this.host.flushPendingBashMessages();
|
|
21
32
|
}
|
|
22
33
|
}
|
|
@@ -41,26 +52,41 @@ export class AgentSessionPromptModule {
|
|
|
41
52
|
return await this.host.checkCompaction(msg);
|
|
42
53
|
}
|
|
43
54
|
async prompt(text, options) {
|
|
55
|
+
const source = options?.source ?? "interactive";
|
|
56
|
+
const latency = this.host.beginTurnLatency({ source, trigger: "session.prompt" });
|
|
57
|
+
let latencyStatus = "completed";
|
|
44
58
|
const expandPromptTemplates = options?.expandPromptTemplates ?? true;
|
|
45
59
|
const preflightResult = options?.preflightResult;
|
|
46
60
|
let messages;
|
|
47
61
|
try {
|
|
62
|
+
this.host.markTurnLatency("session.prompt.enter", {
|
|
63
|
+
source,
|
|
64
|
+
hasImages: !!options?.images?.length,
|
|
65
|
+
expandPromptTemplates,
|
|
66
|
+
});
|
|
48
67
|
// Handle extension commands first (execute immediately, even during streaming)
|
|
49
68
|
// Extension commands manage their own LLM interaction via pi.sendMessage()
|
|
50
69
|
if (expandPromptTemplates && text.startsWith("/")) {
|
|
70
|
+
this.host.markTurnLatency("session.extension_command.start");
|
|
51
71
|
const handled = await this.tryExecuteExtensionCommand(text);
|
|
52
72
|
if (handled) {
|
|
53
73
|
// Extension command executed, no prompt to send
|
|
74
|
+
this.host.markTurnLatency("session.extension_command.handled");
|
|
75
|
+
latencyStatus = "handled";
|
|
54
76
|
preflightResult?.(true);
|
|
55
77
|
return;
|
|
56
78
|
}
|
|
79
|
+
this.host.markTurnLatency("session.extension_command.miss");
|
|
57
80
|
}
|
|
58
81
|
// Emit input event for extension interception (before skill/template expansion)
|
|
59
82
|
let currentText = text;
|
|
60
83
|
let currentImages = options?.images;
|
|
61
84
|
if (this.host._extensionRunner.hasHandlers("input")) {
|
|
85
|
+
this.host.markTurnLatency("session.input_handlers.start");
|
|
62
86
|
const inputResult = await this.host._extensionRunner.emitInput(currentText, currentImages, options?.source ?? "interactive");
|
|
63
87
|
if (inputResult.action === "handled") {
|
|
88
|
+
this.host.markTurnLatency("session.input_handlers.handled");
|
|
89
|
+
latencyStatus = "handled";
|
|
64
90
|
preflightResult?.(true);
|
|
65
91
|
return;
|
|
66
92
|
}
|
|
@@ -68,12 +94,17 @@ export class AgentSessionPromptModule {
|
|
|
68
94
|
currentText = inputResult.text;
|
|
69
95
|
currentImages = inputResult.images ?? currentImages;
|
|
70
96
|
}
|
|
97
|
+
this.host.markTurnLatency("session.input_handlers.end", { action: inputResult.action });
|
|
71
98
|
}
|
|
72
99
|
// Expand skill commands (/skill:name args) and prompt templates (/template args)
|
|
73
100
|
let expandedText = currentText;
|
|
74
101
|
if (expandPromptTemplates) {
|
|
102
|
+
this.host.markTurnLatency("session.prompt_expansion.start");
|
|
75
103
|
expandedText = this.expandSkillCommand(expandedText);
|
|
76
104
|
expandedText = expandPromptTemplate(expandedText, [...this.host.promptTemplates]);
|
|
105
|
+
this.host.markTurnLatency("session.prompt_expansion.end", {
|
|
106
|
+
changed: expandedText !== currentText,
|
|
107
|
+
});
|
|
77
108
|
}
|
|
78
109
|
// If streaming, queue via steer() or followUp() based on option
|
|
79
110
|
if (this.host.isStreaming) {
|
|
@@ -86,12 +117,16 @@ export class AgentSessionPromptModule {
|
|
|
86
117
|
else {
|
|
87
118
|
await this.queueSteer(expandedText, currentImages);
|
|
88
119
|
}
|
|
120
|
+
this.host.markTurnLatency("session.prompt.queued", { mode: options.streamingBehavior });
|
|
121
|
+
latencyStatus = "queued";
|
|
89
122
|
preflightResult?.(true);
|
|
90
123
|
return;
|
|
91
124
|
}
|
|
92
125
|
// Flush any pending bash messages before the new prompt
|
|
93
126
|
this.host.flushPendingBashMessages();
|
|
127
|
+
this.host.markTurnLatency("session.pending_bash_flushed");
|
|
94
128
|
// Validate model
|
|
129
|
+
this.host.markTurnLatency("session.model_auth_check.start");
|
|
95
130
|
if (!this.host.model) {
|
|
96
131
|
throw new Error(formatNoModelSelectedMessage());
|
|
97
132
|
}
|
|
@@ -104,19 +139,27 @@ export class AgentSessionPromptModule {
|
|
|
104
139
|
}
|
|
105
140
|
throw new Error(formatNoApiKeyFoundMessage(this.host.model.provider));
|
|
106
141
|
}
|
|
142
|
+
this.host.markTurnLatency("session.model_auth_check.end", {
|
|
143
|
+
provider: this.host.model.provider,
|
|
144
|
+
model: this.host.model.id,
|
|
145
|
+
});
|
|
107
146
|
// Check if we need to compact before sending (catches aborted responses)
|
|
108
147
|
const lastAssistant = this.host.findLastAssistantMessage();
|
|
148
|
+
this.host.markTurnLatency("session.compaction_check.start", { hasLastAssistant: !!lastAssistant });
|
|
109
149
|
if (lastAssistant && (await this.host.checkCompaction(lastAssistant, false))) {
|
|
110
150
|
try {
|
|
151
|
+
this.host.markTurnLatency("session.compaction_continue.start");
|
|
111
152
|
await this.host.agent.continue();
|
|
112
153
|
while (await this.handlePostAgentRun()) {
|
|
113
154
|
await this.host.agent.continue();
|
|
114
155
|
}
|
|
156
|
+
this.host.markTurnLatency("session.compaction_continue.end");
|
|
115
157
|
}
|
|
116
158
|
finally {
|
|
117
159
|
this.host.flushPendingBashMessages();
|
|
118
160
|
}
|
|
119
161
|
}
|
|
162
|
+
this.host.markTurnLatency("session.compaction_check.end");
|
|
120
163
|
// Build messages array (custom message if any, then user message)
|
|
121
164
|
messages = [];
|
|
122
165
|
// Add user message
|
|
@@ -135,6 +178,7 @@ export class AgentSessionPromptModule {
|
|
|
135
178
|
}
|
|
136
179
|
this.host._pendingNextTurnMessages = [];
|
|
137
180
|
// Emit before_agent_start extension event
|
|
181
|
+
this.host.markTurnLatency("session.before_agent_start.start");
|
|
138
182
|
const result = await this.host._extensionRunner.emitBeforeAgentStart(expandedText, currentImages, this.host._baseSystemPrompt, this.host._baseSystemPromptOptions);
|
|
139
183
|
// Add all custom messages from extensions
|
|
140
184
|
if (result?.messages) {
|
|
@@ -157,16 +201,40 @@ export class AgentSessionPromptModule {
|
|
|
157
201
|
// Ensure we're using the base prompt (in case previous turn had modifications)
|
|
158
202
|
this.host.agent.state.systemPrompt = this.host._baseSystemPrompt;
|
|
159
203
|
}
|
|
204
|
+
this.host.markTurnLatency("session.before_agent_start.end", {
|
|
205
|
+
customMessages: result?.messages?.length ?? 0,
|
|
206
|
+
systemPromptChanged: !!result?.systemPrompt,
|
|
207
|
+
});
|
|
160
208
|
}
|
|
161
209
|
catch (error) {
|
|
210
|
+
latencyStatus = "error";
|
|
162
211
|
preflightResult?.(false);
|
|
163
212
|
throw error;
|
|
164
213
|
}
|
|
214
|
+
finally {
|
|
215
|
+
if (latencyStatus !== "completed" || !messages) {
|
|
216
|
+
this.host.finishTurnLatency(latencyStatus);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
165
219
|
if (!messages) {
|
|
166
220
|
return;
|
|
167
221
|
}
|
|
168
222
|
preflightResult?.(true);
|
|
169
|
-
|
|
223
|
+
try {
|
|
224
|
+
this.host.markTurnLatency("session.agent_run.start", { messages: messages.length });
|
|
225
|
+
await this.runAgentPrompt(messages);
|
|
226
|
+
this.host.markTurnLatency("session.agent_run.end");
|
|
227
|
+
}
|
|
228
|
+
catch (error) {
|
|
229
|
+
latencyStatus = "error";
|
|
230
|
+
this.host.markTurnLatency("session.agent_run.error", {
|
|
231
|
+
error: error instanceof Error ? error.name : typeof error,
|
|
232
|
+
});
|
|
233
|
+
throw error;
|
|
234
|
+
}
|
|
235
|
+
finally {
|
|
236
|
+
this.host.finishTurnLatency(latencyStatus);
|
|
237
|
+
}
|
|
170
238
|
}
|
|
171
239
|
async tryExecuteExtensionCommand(text) {
|
|
172
240
|
// Parse command name and args
|