@bastani/atomic 0.9.45 → 0.9.46-alpha.1

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.
Files changed (166) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/dist/builtin/intercom/CHANGELOG.md +11 -0
  3. package/dist/builtin/intercom/broker/broker.ts +124 -10
  4. package/dist/builtin/intercom/broker/client.ts +177 -25
  5. package/dist/builtin/intercom/broker/multinode-router.ts +228 -27
  6. package/dist/builtin/intercom/broker/multinode-state-store.ts +10 -0
  7. package/dist/builtin/intercom/broker/recipient-receipts.ts +38 -4
  8. package/dist/builtin/intercom/broker/send-handler.ts +9 -2
  9. package/dist/builtin/intercom/broker/sql-outbox-store.ts +29 -4
  10. package/dist/builtin/intercom/group.ts +25 -0
  11. package/dist/builtin/intercom/index.bundle.mjs +177 -35
  12. package/dist/builtin/intercom/package.json +1 -1
  13. package/dist/builtin/intercom/retry-policy.ts +7 -0
  14. package/dist/builtin/intercom/types.ts +21 -0
  15. package/dist/builtin/mcp/package.json +1 -1
  16. package/dist/builtin/subagents/CHANGELOG.md +10 -0
  17. package/dist/builtin/subagents/package.json +1 -1
  18. package/dist/builtin/subagents/src/extension/index.bundle.mjs +150 -54
  19. package/dist/builtin/web-access/package.json +1 -1
  20. package/dist/builtin/workflows/CHANGELOG.md +39 -0
  21. package/dist/builtin/workflows/builtin/{chunk-6901nsd6.js → chunk-6jpwc09k.js} +1 -1
  22. package/dist/builtin/workflows/builtin/{chunk-vwx023ge.js → chunk-qhm35ntx.js} +1 -1
  23. package/dist/builtin/workflows/builtin/{chunk-jvna28mq.js → chunk-zhyqnf5g.js} +331 -68
  24. package/dist/builtin/workflows/builtin/goal.js +2 -2
  25. package/dist/builtin/workflows/builtin/index.js +3 -3
  26. package/dist/builtin/workflows/builtin/ralph.js +2 -2
  27. package/dist/builtin/workflows/package.json +1 -1
  28. package/dist/builtin/workflows/skills/prompt-engineer/SKILL.md +1 -0
  29. package/dist/builtin/workflows/skills/prompt-engineer/references/gpt_6.md +2 -2
  30. package/dist/builtin/workflows/skills/prompt-engineer/references/gpt_6_1_sol.md +2 -2
  31. package/dist/builtin/workflows/skills/prompt-engineer/references/gpt_6_1_terra.md +77 -0
  32. package/dist/builtin/workflows/src/authoring.d.ts +1 -1
  33. package/dist/builtin/workflows/src/durable/journal/internal.d.ts +2 -0
  34. package/dist/builtin/workflows/src/extension/index.bundle.mjs +7076 -3386
  35. package/dist/builtin/workflows/src/extension/local-worker-entry.mjs +11075 -7261
  36. package/dist/builtin/workflows/src/index.js +6768 -3605
  37. package/dist/builtin/workflows/src/local-worker-entry.mjs +11075 -7261
  38. package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +19 -0
  39. package/dist/core/agent-session-boundaries.d.ts.map +1 -1
  40. package/dist/core/agent-session-boundaries.js +1 -0
  41. package/dist/core/agent-session-boundaries.js.map +1 -1
  42. package/dist/core/agent-session-events.d.ts.map +1 -1
  43. package/dist/core/agent-session-events.js +2 -1
  44. package/dist/core/agent-session-events.js.map +1 -1
  45. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  46. package/dist/core/agent-session-extension-bindings.js +15 -2
  47. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  48. package/dist/core/agent-session-methods.d.ts +3 -2
  49. package/dist/core/agent-session-methods.d.ts.map +1 -1
  50. package/dist/core/agent-session-methods.js.map +1 -1
  51. package/dist/core/agent-session-prompt.d.ts +4 -2
  52. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  53. package/dist/core/agent-session-prompt.js +13 -8
  54. package/dist/core/agent-session-prompt.js.map +1 -1
  55. package/dist/core/agent-session-recovery.d.ts.map +1 -1
  56. package/dist/core/agent-session-recovery.js +92 -1
  57. package/dist/core/agent-session-recovery.js.map +1 -1
  58. package/dist/core/agent-session-transfer.d.ts.map +1 -1
  59. package/dist/core/agent-session-transfer.js +5 -0
  60. package/dist/core/agent-session-transfer.js.map +1 -1
  61. package/dist/core/agent-session.d.ts +2 -0
  62. package/dist/core/agent-session.d.ts.map +1 -1
  63. package/dist/core/agent-session.js +2 -0
  64. package/dist/core/agent-session.js.map +1 -1
  65. package/dist/core/copilot-errors.d.ts +6 -0
  66. package/dist/core/copilot-errors.d.ts.map +1 -0
  67. package/dist/core/copilot-errors.js +17 -0
  68. package/dist/core/copilot-errors.js.map +1 -0
  69. package/dist/core/execution-model-router.d.ts.map +1 -1
  70. package/dist/core/execution-model-router.js +12 -2
  71. package/dist/core/execution-model-router.js.map +1 -1
  72. package/dist/core/extensions/context-types.d.ts +7 -0
  73. package/dist/core/extensions/context-types.d.ts.map +1 -1
  74. package/dist/core/extensions/context-types.js.map +1 -1
  75. package/dist/core/extensions/runner-context.d.ts.map +1 -1
  76. package/dist/core/extensions/runner-context.js +6 -0
  77. package/dist/core/extensions/runner-context.js.map +1 -1
  78. package/dist/core/extensions/workflow-activity-hub.d.ts +4 -0
  79. package/dist/core/extensions/workflow-activity-hub.d.ts.map +1 -1
  80. package/dist/core/extensions/workflow-activity-hub.js +26 -5
  81. package/dist/core/extensions/workflow-activity-hub.js.map +1 -1
  82. package/dist/core/extensions/workflow-events.d.ts +5 -0
  83. package/dist/core/extensions/workflow-events.d.ts.map +1 -1
  84. package/dist/core/extensions/workflow-events.js.map +1 -1
  85. package/dist/core/messages.d.ts +5 -0
  86. package/dist/core/messages.d.ts.map +1 -1
  87. package/dist/core/messages.js +1 -1
  88. package/dist/core/messages.js.map +1 -1
  89. package/dist/core/model-fallback-failures.d.ts +1 -1
  90. package/dist/core/model-fallback-failures.d.ts.map +1 -1
  91. package/dist/core/model-fallback-failures.js +37 -3
  92. package/dist/core/model-fallback-failures.js.map +1 -1
  93. package/dist/core/model-runtime-streaming.js +2 -2
  94. package/dist/core/model-runtime-streaming.js.map +1 -1
  95. package/dist/core/provider-composer.d.ts.map +1 -1
  96. package/dist/core/provider-composer.js +19 -11
  97. package/dist/core/provider-composer.js.map +1 -1
  98. package/dist/core/provider-rate-limits.d.ts +55 -6
  99. package/dist/core/provider-rate-limits.d.ts.map +1 -1
  100. package/dist/core/provider-rate-limits.js +182 -29
  101. package/dist/core/provider-rate-limits.js.map +1 -1
  102. package/dist/core/provider-request-admission.d.ts.map +1 -1
  103. package/dist/core/provider-request-admission.js +42 -18
  104. package/dist/core/provider-request-admission.js.map +1 -1
  105. package/dist/core/storage/node-sqlite.d.ts.map +1 -1
  106. package/dist/core/storage/node-sqlite.js +176 -19
  107. package/dist/core/storage/node-sqlite.js.map +1 -1
  108. package/dist/core/storage/provider.d.ts +4 -2
  109. package/dist/core/storage/provider.d.ts.map +1 -1
  110. package/dist/core/storage/provider.js +94 -5
  111. package/dist/core/storage/provider.js.map +1 -1
  112. package/dist/core/structured-output/index.d.ts.map +1 -1
  113. package/dist/core/structured-output/index.js +15 -8
  114. package/dist/core/structured-output/index.js.map +1 -1
  115. package/dist/core/structured-output/provider-failure.d.ts +17 -0
  116. package/dist/core/structured-output/provider-failure.d.ts.map +1 -0
  117. package/dist/core/structured-output/provider-failure.js +28 -0
  118. package/dist/core/structured-output/provider-failure.js.map +1 -0
  119. package/dist/core/tools/bash.d.ts.map +1 -1
  120. package/dist/core/tools/bash.js +13 -7
  121. package/dist/core/tools/bash.js.map +1 -1
  122. package/dist/core/tools/shell-task-render.d.ts +1 -0
  123. package/dist/core/tools/shell-task-render.d.ts.map +1 -1
  124. package/dist/core/tools/shell-task-render.js +7 -2
  125. package/dist/core/tools/shell-task-render.js.map +1 -1
  126. package/dist/extensions/tool-search/tool.d.ts +5 -0
  127. package/dist/extensions/tool-search/tool.d.ts.map +1 -1
  128. package/dist/extensions/tool-search/tool.js +38 -5
  129. package/dist/extensions/tool-search/tool.js.map +1 -1
  130. package/dist/index.d.ts +1 -1
  131. package/dist/index.d.ts.map +1 -1
  132. package/dist/index.js +1 -1
  133. package/dist/index.js.map +1 -1
  134. package/dist/modes/interactive/components/chat-session-host-actions.js +3 -2
  135. package/dist/modes/interactive/components/chat-session-host-actions.js.map +1 -1
  136. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  137. package/dist/modes/interactive/components/login-dialog.js +42 -14
  138. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  139. package/dist/modes/interactive/interactive-extension-context.js +2 -1
  140. package/dist/modes/interactive/interactive-extension-context.js.map +1 -1
  141. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
  142. package/dist/modes/interactive/interactive-startup.js +5 -6
  143. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  144. package/dist/modes/rpc/rpc-client-process.d.ts.map +1 -1
  145. package/dist/modes/rpc/rpc-client-process.js +8 -1
  146. package/dist/modes/rpc/rpc-client-process.js.map +1 -1
  147. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  148. package/dist/modes/rpc/rpc-client.js +7 -1
  149. package/dist/modes/rpc/rpc-client.js.map +1 -1
  150. package/dist/utils/ansi.d.ts +2 -0
  151. package/dist/utils/ansi.d.ts.map +1 -1
  152. package/dist/utils/ansi.js +5 -0
  153. package/dist/utils/ansi.js.map +1 -1
  154. package/docs/codemode.md +1 -1
  155. package/docs/intercom/reference.md +3 -3
  156. package/docs/models/evals.md +31 -12
  157. package/docs/models/reference.md +23 -51
  158. package/docs/models.md +3 -4
  159. package/docs/providers.md +5 -15
  160. package/docs/settings.md +1 -1
  161. package/docs/storage.md +2 -2
  162. package/docs/tools.md +1 -1
  163. package/docs/workflows/api-reference.md +20 -1
  164. package/docs/workflows/operations.md +17 -4
  165. package/npm-shrinkwrap.json +64 -44
  166. package/package.json +4 -4
@@ -319,6 +319,23 @@ export interface ToolNodeSnapshot extends WorkflowSerializableObject {
319
319
  readonly error?: string;
320
320
  readonly attachable: false;
321
321
  }
322
+ /**
323
+ * How a failed run's failure was classified. A parent workflow classifies a failed child from it, so the
324
+ * child's own failure decides whether the parent fails or blocks resumably, never workflow names.
325
+ */
326
+ export interface RunFailureClassification extends WorkflowSerializableObject {
327
+ readonly kind: "auth" | "rate_limit" | "provider" | "cancelled" | "unknown";
328
+ readonly code?: "login_required" | "auth_timeout" | "missing_api_key" | "invalid_api_key" | "forbidden_config" | "unknown_model" | "rate_limited" | "quota_limited" | "provider_unavailable" | "pending_stage_delivery_failed" | "cancelled" | "unknown";
329
+ /** Whether retrying the same work can succeed, as for a rate limit or an outage. */
330
+ readonly retryable: boolean;
331
+ /** Whether the run can be resumed after this failure. */
332
+ readonly resumable: boolean;
333
+ readonly recoverability?: "recoverable" | "non_recoverable" | "unknown";
334
+ /** Absent when the run failed outside any stage. */
335
+ readonly disposition?: "active_blocked" | "terminal_killed" | "terminal_failed";
336
+ /** Server retry hint of a rate limit or outage, in milliseconds. */
337
+ readonly retryAfterMs?: number;
338
+ }
322
339
  export interface RunResult<TOutputs extends WorkflowOutputValues = WorkflowOutputValues> extends WorkflowSerializableObject {
323
340
  readonly runId: string;
324
341
  readonly status: RunStatus;
@@ -329,6 +346,8 @@ export interface RunResult<TOutputs extends WorkflowOutputValues = WorkflowOutpu
329
346
  /** True when the run reached its terminal status through ctx.exit(). */
330
347
  readonly exited?: boolean;
331
348
  readonly exitReason?: string;
349
+ /** How the run's failure was classified, when it failed or blocked on a failure. */
350
+ readonly failure?: RunFailureClassification;
332
351
  readonly stages: readonly StageSnapshot[];
333
352
  readonly toolNodes: readonly ToolNodeSnapshot[];
334
353
  }
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session-boundaries.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-boundaries.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,2BAA2B,IAAI,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAW9F,OAAO,KAAK,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAEhH,OAAO,EAAE,KAAK,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEzE,KAAK,YAAY,GAAG,UAAU,GAAG,qBAAqB,CAAC;AAEvD;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,YAAY,GAAG,YAAY,EAAE,CAE5E;AAkBD,qFAAqF;AACrF,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAOjE;AAED,qFAAqF;AACrF,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAEvD;AAED,6EAA6E;AAC7E,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAoCvE;AAED,yGAAyG;AACzG,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAUnE;AAED,wBAAsB,wBAAwB,CAC7C,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,gBAAgB,EACzB,WAAW,EAAE,iBAAiB,EAAE,EAChC,gBAAgB,UAAQ,GACtB,OAAO,CAAC,OAAO,CAAC,CAsClB;AAiCD,wBAAsB,oBAAoB,CACzC,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,oBAAoB,EAAE,GAC5B,OAAO,CAAC,YAAY,EAAE,CAAC,CAuCzB;AAED,wBAAsB,6BAA6B,CAClD,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,oBAAoB,EAAE,GAC5B,OAAO,CAAC,cAAc,CAAC,CAMzB;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,YAAY,GAAG,YAAY,EAAE,CAE9E;AAED,wBAAsB,qBAAqB,CAC1C,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,oBAAoB,EAAE,EAC9B,QAAQ,EAAE,YAAY,GACpB,OAAO,CAAC,sBAAsB,CAAC,CAqBjC;AAED,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAI7G;AAED,wBAAgB,kCAAkC,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAMhG;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,CAqB1G;AAED,4FAA4F;AAC5F,wBAAsB,oBAAoB,CACzC,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,gBAAgB,EACzB,WAAW,GAAE,YAAY,EAAO,GAC9B,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED;;;;GAIG;AACH,wBAAsB,6BAA6B,CAClD,IAAI,EAAE,YAAY,EAClB,MAAM,GAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAoB,GACzD,OAAO,CAAC,OAAO,CAAC,CAclB;AAED,0FAA0F;AAC1F,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAsBnF;AAED,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;CAiBvC,CAAC;AAEF,YAAY,EAAE,oBAAoB,EAAE,CAAC"}
1
+ {"version":3,"file":"agent-session-boundaries.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-boundaries.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,2BAA2B,IAAI,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAW9F,OAAO,KAAK,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAEhH,OAAO,EAAE,KAAK,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEzE,KAAK,YAAY,GAAG,UAAU,GAAG,qBAAqB,CAAC;AAEvD;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,YAAY,GAAG,YAAY,EAAE,CAE5E;AAmBD,qFAAqF;AACrF,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAOjE;AAED,qFAAqF;AACrF,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAEvD;AAED,6EAA6E;AAC7E,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAoCvE;AAED,yGAAyG;AACzG,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAUnE;AAED,wBAAsB,wBAAwB,CAC7C,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,gBAAgB,EACzB,WAAW,EAAE,iBAAiB,EAAE,EAChC,gBAAgB,UAAQ,GACtB,OAAO,CAAC,OAAO,CAAC,CAsClB;AAiCD,wBAAsB,oBAAoB,CACzC,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,oBAAoB,EAAE,GAC5B,OAAO,CAAC,YAAY,EAAE,CAAC,CAuCzB;AAED,wBAAsB,6BAA6B,CAClD,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,oBAAoB,EAAE,GAC5B,OAAO,CAAC,cAAc,CAAC,CAMzB;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,YAAY,GAAG,YAAY,EAAE,CAE9E;AAED,wBAAsB,qBAAqB,CAC1C,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,oBAAoB,EAAE,EAC9B,QAAQ,EAAE,YAAY,GACpB,OAAO,CAAC,sBAAsB,CAAC,CAqBjC;AAED,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAI7G;AAED,wBAAgB,kCAAkC,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAMhG;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,CAqB1G;AAED,4FAA4F;AAC5F,wBAAsB,oBAAoB,CACzC,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,gBAAgB,EACzB,WAAW,GAAE,YAAY,EAAO,GAC9B,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED;;;;GAIG;AACH,wBAAsB,6BAA6B,CAClD,IAAI,EAAE,YAAY,EAClB,MAAM,GAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAoB,GACzD,OAAO,CAAC,OAAO,CAAC,CAclB;AAED,0FAA0F;AAC1F,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAsBnF;AAED,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;CAiBvC,CAAC;AAEF,YAAY,EAAE,oBAAoB,EAAE,CAAC"}
@@ -32,6 +32,7 @@ function finalizeProjectedMessages(session, messages) {
32
32
  // While a run is active the loop owns pairing for the in-flight tool batch.
33
33
  const repaired = repairOrphanToolResults(deferMessagesInterleavedWithToolBatch(messages), {
34
34
  repairTrailing: !session.isStreaming,
35
+ inFlightToolCallIds: session._reissuedToolCallIds,
35
36
  });
36
37
  return session._contextProjectionTransform ? session._contextProjectionTransform(repaired) : repaired;
37
38
  }
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session-boundaries.js","sourceRoot":"","sources":["../../src/core/agent-session-boundaries.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Canonical session context boundaries.\n *\n * The SessionManager projection is the authoritative model context: every provider\n * request is built from it, recovery paths omit failed attempts through append-only\n * `context_edit` entries instead of slicing agent state, and extensions get two\n * actionable boundaries (`turn_end`, `agent_before_settle`) that may append entries and\n * request one explicit continuation.\n */\n\nimport type { AssistantMessage, ToolResultMessage } from \"@bastani/pi-ai/compat\";\nimport type { AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport type { AgentSessionInternalSurface as AgentSession } from \"./agent-session-methods.ts\";\nimport { COMPACTION_AUTO_QUERY } from \"./compaction/compaction-parameters.js\";\nimport {\n\tDEFAULT_COMPRESSION_RATIO,\n\tDEFAULT_PRESERVE_RECENT,\n\testimateProjectedContextTokens,\n\tserializeConversationForCompaction,\n\tVERBATIM_COMPACTION_PROMPT_VERSION,\n\tVERBATIM_COMPACTION_STRATEGY,\n\ttype VerbatimCompactionDetails,\n} from \"./compaction/index.ts\";\nimport type { AgentActivityOutcome, BoundaryContextPreview, SessionBoundaryDraft } from \"./extensions/index.js\";\nimport { convertToLlm, deferMessagesInterleavedWithToolBatch, repairOrphanToolResults } from \"./messages.ts\";\nimport { type SessionEntry, SessionManager } from \"./session-manager.ts\";\n\ntype BoundaryKind = \"turn_end\" | \"agent_before_settle\";\n\n/**\n * Materialize the canonical projection as finalized context. Atomic repairs tool-call\n * pairing in derived context only (a resumed session may end on a tool call whose engine\n * died before recording its result) and applies the session's configured projection\n * transform; the durable transcript is never rewritten.\n */\nexport function _projectFinalizedMessages(this: AgentSession): AgentMessage[] {\n\treturn finalizeProjectedMessages(this, projectSessionMessages(this));\n}\n\nfunction projectSessionMessages(session: AgentSession): AgentMessage[] {\n\tconst projection = session.sessionManager.buildSessionProjection();\n\tfor (const entry of projection.entries) {\n\t\tfor (const message of entry.messages) session._entryIdsByMessage.set(message, entry.sourceEntry.id);\n\t}\n\treturn projection.messages;\n}\n\nfunction finalizeProjectedMessages(session: AgentSession, messages: AgentMessage[]): AgentMessage[] {\n\t// While a run is active the loop owns pairing for the in-flight tool batch.\n\tconst repaired = repairOrphanToolResults(deferMessagesInterleavedWithToolBatch(messages), {\n\t\trepairTrailing: !session.isStreaming,\n\t});\n\treturn session._contextProjectionTransform ? session._contextProjectionTransform(repaired) : repaired;\n}\n\n/** Refresh the public finalized transcript from the canonical session projection. */\nexport function _refreshFinalizedContext(this: AgentSession): void {\n\tconst unpersisted = this.agent.state.messages.filter((message) => this._messagesAwaitingPersistence.has(message));\n\tconst projected = projectSessionMessages(this);\n\tthis.agent.state.messages = finalizeProjectedMessages(\n\t\tthis,\n\t\tunpersisted.length === 0 ? projected : [...projected, ...unpersisted],\n\t);\n}\n\n/** Refresh the public finalized transcript from the canonical session projection. */\nexport function refreshContext(this: AgentSession): void {\n\tthis._refreshFinalizedContext();\n}\n\n/** Route every provider request through the canonical session projection. */\nexport function _installAgentRequestProjection(this: AgentSession): void {\n\tconst previousPrepareRequest = this.agent.prepareRequest;\n\tthis.agent.prepareRequest = async (request, signal) => {\n\t\t// Session listeners persist messages asynchronously; the projection is canonical\n\t\t// only once every queued event has been applied to the session manager. The whole\n\t\t// queue is the barrier, not just persistence: message_end handlers may replace the\n\t\t// message that gets persisted, and extension dispatch is serialized in event order,\n\t\t// so the last message_end cannot settle before earlier handlers. A failed listener\n\t\t// is reported through the queue's own recovery, never through the request.\n\t\tawait this._agentEventQueue.catch(() => {});\n\t\t// Atomic honors a caller's complete replacement context from prepareNextTurnWithContext\n\t\t// for exactly the request it prepared.\n\t\tconst callerReplaced = this._callerReplacedNextRequestContext;\n\t\tthis._callerReplacedNextRequestContext = false;\n\t\tconst canonicalContext = {\n\t\t\t...request.context,\n\t\t\tmessages: callerReplaced ? request.context.messages : this._projectFinalizedMessages(),\n\t\t\t// Messages declare the provider-visible loadout; context.tools keeps executable implementations.\n\t\t\ttools: this.agent.state.tools.slice(),\n\t\t};\n\t\tconst previous = await previousPrepareRequest?.(\n\t\t\t{\n\t\t\t\t...request,\n\t\t\t\tcontext: canonicalContext,\n\t\t\t\tmodel: this.agent.state.model,\n\t\t\t\tthinkingLevel: this.agent.state.thinkingLevel,\n\t\t\t},\n\t\t\tsignal,\n\t\t);\n\t\treturn {\n\t\t\t...previous,\n\t\t\tcontext: previous?.context ?? canonicalContext,\n\t\t\tmodel: previous?.model ?? this.agent.state.model,\n\t\t\tthinkingLevel: previous?.thinkingLevel ?? this.agent.state.thinkingLevel,\n\t\t};\n\t};\n}\n\n/** Dispatch the actionable `turn_end` boundary from `finishTurn`, before agent-core's own `turn_end`. */\nexport function _installAgentBoundaryHooks(this: AgentSession): void {\n\tconst previousFinishTurn = this.agent.finishTurn;\n\tthis.agent.finishTurn = async (turn, signal) => {\n\t\tthis._boundaryDispatchedMessages.add(turn.message);\n\t\tconst extensionContinue = await this._dispatchTurnEndBoundary(turn.message, turn.toolResults, true);\n\t\tconst previousDecision = await previousFinishTurn?.(turn, signal);\n\t\tif (previousDecision?.action === \"end\") return previousDecision;\n\t\tif (extensionContinue || previousDecision?.action === \"continue\") return { action: \"continue\" };\n\t\treturn undefined;\n\t};\n}\n\nexport async function _dispatchTurnEndBoundary(\n\tthis: AgentSession,\n\tmessage: AssistantMessage,\n\ttoolResults: ToolResultMessage[],\n\tawaitPersistence = false,\n): Promise<boolean> {\n\tthis._lastActivityOutcome =\n\t\tmessage.stopReason === \"aborted\" ? \"aborted\" : message.stopReason === \"error\" ? \"error\" : \"completed\";\n\tif (!this._extensionRunner.hasHandlers(\"turn_end\")) return false;\n\t// The boundary resolves persisted entry IDs. From finishTurn, session listeners may\n\t// still be persisting this turn; from the serialized event queue they already have.\n\tif (awaitPersistence) await this._agentEventQueue.catch(() => {});\n\tconst messageEntryId = this._findPersistedMessageEntryId(message);\n\tif (!messageEntryId) {\n\t\tthis._extensionRunner.emitError({\n\t\t\textensionPath: \"<boundary>\",\n\t\t\tevent: \"turn_end\",\n\t\t\terror: \"turn_end could not resolve the persisted assistant entry ID\",\n\t\t});\n\t\treturn false;\n\t}\n\tconst toolResultEntryIds = toolResults.flatMap((result) => {\n\t\tconst entryId = this._findPersistedMessageEntryId(result);\n\t\treturn entryId ? [entryId] : [];\n\t});\n\tconst boundary = await this._extensionRunner.emitBoundary(\n\t\t{\n\t\t\ttype: \"turn_end\",\n\t\t\tturnIndex: this._turnIndex,\n\t\t\tmessage,\n\t\t\ttoolResults,\n\t\t\tmessageEntryId,\n\t\t\ttoolResultEntryIds,\n\t\t\toutcome: this._lastActivityOutcome,\n\t\t},\n\t\tasync (entries) => await this._buildBoundaryContext(entries, \"turn_end\"),\n\t);\n\tawait this._commitBoundaryDrafts(boundary.entries);\n\tif (boundary.continue && !(await this._buildBoundaryContext([], \"turn_end\")).canContinue) {\n\t\tthis._reportInvalidBoundaryContinuation(\"turn_end\");\n\t\treturn false;\n\t}\n\treturn boundary.continue;\n}\n\nfunction extensionCompactionDetails(\n\tmanager: SessionManager,\n\tsummary: string,\n\ttokensBefore: number,\n): VerbatimCompactionDetails {\n\tconst linesBefore = serializeConversationForCompaction(\n\t\tconvertToLlm(manager.buildSessionProjection().messages),\n\t).split(\"\\n\").length;\n\tconst linesKept = summary.split(\"\\n\").length;\n\tconst tokensAfter = Math.ceil(summary.length / 4);\n\treturn {\n\t\tstrategy: VERBATIM_COMPACTION_STRATEGY,\n\t\tpromptVersion: VERBATIM_COMPACTION_PROMPT_VERSION,\n\t\tparameters: {\n\t\t\tcompression_ratio: DEFAULT_COMPRESSION_RATIO,\n\t\t\tpreserve_recent: DEFAULT_PRESERVE_RECENT,\n\t\t\tquery: COMPACTION_AUTO_QUERY,\n\t\t},\n\t\tstats: {\n\t\t\tlinesBefore,\n\t\t\tlinesDeleted: Math.max(0, linesBefore - linesKept),\n\t\t\tlinesKept,\n\t\t\trangeCount: 0,\n\t\t\ttokensBefore,\n\t\t\ttokensAfter,\n\t\t\tpercentReduction: tokensBefore === 0 ? 0 : Math.round((1 - tokensAfter / tokensBefore) * 1000) / 10,\n\t\t},\n\t\trung: \"extension\",\n\t};\n}\n\nexport async function _applyBoundaryDrafts(\n\tthis: AgentSession,\n\tmanager: SessionManager,\n\tdrafts: SessionBoundaryDraft[],\n): Promise<SessionEntry[]> {\n\tconst appended: SessionEntry[] = [];\n\tfor (const draft of drafts) {\n\t\tlet entryId: string;\n\t\tswitch (draft.type) {\n\t\t\tcase \"custom\":\n\t\t\t\tentryId = await manager.appendCustomEntry(draft.customType, draft.data);\n\t\t\t\tbreak;\n\t\t\tcase \"custom_message\":\n\t\t\t\tentryId = await manager.appendCustomMessageEntry(\n\t\t\t\t\tdraft.customType,\n\t\t\t\t\tdraft.content,\n\t\t\t\t\tdraft.display,\n\t\t\t\t\tdraft.details,\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase \"context_edit\":\n\t\t\t\tentryId = await manager.appendContextEdit(draft.targetId, draft.replacement);\n\t\t\t\tbreak;\n\t\t\tcase \"compaction\": {\n\t\t\t\tif (draft.summary.trim().length === 0) throw new Error(\"Compaction draft summary must not be empty\");\n\t\t\t\tconst tokensBefore = estimateProjectedContextTokens(\n\t\t\t\t\tmanager.buildSessionProjection(),\n\t\t\t\t\tmanager.getBranch(),\n\t\t\t\t).tokens;\n\t\t\t\tentryId = await manager.appendCompaction(\n\t\t\t\t\tdraft.summary,\n\t\t\t\t\tdraft.firstKeptEntryId,\n\t\t\t\t\ttokensBefore,\n\t\t\t\t\textensionCompactionDetails(manager, draft.summary, tokensBefore),\n\t\t\t\t\tdraft.usage,\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tconst entry = manager.getEntry(entryId);\n\t\tif (entry) appended.push(entry);\n\t}\n\treturn appended;\n}\n\nexport async function _createBoundaryPreviewManager(\n\tthis: AgentSession,\n\tdrafts: SessionBoundaryDraft[],\n): Promise<SessionManager> {\n\tconst header = this.sessionManager.getHeader();\n\tif (!header) throw new Error(\"Session header is missing\");\n\tconst manager = SessionManager.inMemory(this._cwd, undefined, [header, ...this.sessionManager.getBranch()]);\n\tawait this._applyBoundaryDrafts(manager, drafts);\n\treturn manager;\n}\n\nexport function _getPendingBoundaryMessages(this: AgentSession): AgentMessage[] {\n\treturn [...this.agent.peekQueuedMessages(), ...this._pendingCustomMessages];\n}\n\nexport async function _buildBoundaryContext(\n\tthis: AgentSession,\n\tdrafts: SessionBoundaryDraft[],\n\tboundary: BoundaryKind,\n): Promise<BoundaryContextPreview> {\n\tconst projection = (await this._createBoundaryPreviewManager(drafts)).buildSessionProjection();\n\tconst contextMessages = finalizeProjectedMessages(this, projection.messages);\n\tconst pendingMessages = this._getPendingBoundaryMessages();\n\tconst llmMessages = convertToLlm(contextMessages);\n\tconst finalRole = llmMessages[llmMessages.length - 1]?.role;\n\tconst hasNonSystemContext = llmMessages.some((message) => message.role !== \"system\");\n\tconst contextCanContinue = hasNonSystemContext && finalRole !== \"assistant\";\n\tconst pendingCustomContext = this._pendingCustomMessages.length > 0;\n\treturn {\n\t\tcontextEntries: projection.entries,\n\t\tcontextMessages,\n\t\tllmMessages,\n\t\tpendingMessages,\n\t\tcanContinue:\n\t\t\tcontextCanContinue ||\n\t\t\tpendingCustomContext ||\n\t\t\t(boundary === \"turn_end\"\n\t\t\t\t? this.agent.hasQueuedMessages()\n\t\t\t\t: finalRole === \"assistant\" && this.agent.hasQueuedMessages()),\n\t};\n}\n\nexport async function _commitBoundaryDrafts(this: AgentSession, drafts: SessionBoundaryDraft[]): Promise<void> {\n\tconst appended = await this._applyBoundaryDrafts(this.sessionManager, drafts);\n\tthis._refreshFinalizedContext();\n\tfor (const entry of appended) this._emit({ type: \"entry_appended\", entry });\n}\n\nexport function _reportInvalidBoundaryContinuation(this: AgentSession, event: BoundaryKind): void {\n\tthis._extensionRunner.emitError({\n\t\textensionPath: \"<boundary>\",\n\t\tevent,\n\t\terror: `${event} requested continuation without runnable model context`,\n\t});\n}\n\nexport function _findPersistedMessageEntryId(this: AgentSession, message: AgentMessage): string | undefined {\n\tconst mapped = this._entryIdsByMessage.get(message);\n\tif (mapped) return mapped;\n\tfor (const entry of [...this.sessionManager.getBranch()].reverse()) {\n\t\tif (entry.type === \"message\" && entry.message === message) return entry.id;\n\t}\n\n\tconst messageIndex = this.agent.state.messages.indexOf(message);\n\tif (messageIndex < 0) return undefined;\n\tconst projection = this.sessionManager.buildSessionProjection();\n\tlet projectedIndex = 0;\n\tfor (const entry of projection.entries) {\n\t\tfor (let i = 0; i < entry.messages.length; i++) {\n\t\t\tif (projectedIndex === messageIndex) {\n\t\t\t\tthis._entryIdsByMessage.set(message, entry.sourceEntry.id);\n\t\t\t\treturn entry.sourceEntry.id;\n\t\t\t}\n\t\t\tprojectedIndex++;\n\t\t}\n\t}\n\treturn undefined;\n}\n\n/** Keep a failed attempt in raw history while durably omitting it from model projection. */\nexport async function _omitRecoveryAttempt(\n\tthis: AgentSession,\n\tmessage: AssistantMessage,\n\ttoolResults: AgentMessage[] = [],\n): Promise<void> {\n\tconst targets = [message, ...toolResults];\n\tconst targetIds = targets.map((target) => this._findPersistedMessageEntryId(target));\n\tconst unresolvedProjectedTarget = targets.some(\n\t\t(target, index) => targetIds[index] === undefined && this.agent.state.messages.includes(target),\n\t);\n\tif (unresolvedProjectedTarget) {\n\t\tthrow new Error(\"Cannot persist recovery omission because a projected message has no source entry\");\n\t}\n\tfor (const targetId of targetIds) {\n\t\tif (!targetId) continue;\n\t\tconst editId = await this.sessionManager.appendContextEdit(targetId, null);\n\t\tconst entry = this.sessionManager.getEntry(editId);\n\t\tif (entry) this._emit({ type: \"entry_appended\", entry });\n\t}\n\tthis._refreshFinalizedContext();\n}\n\n/**\n * Omit the trailing assistant attempt (and any tool results it produced) from model\n * projection when the loop must resume from the preceding input. Returns true when an\n * assistant attempt was omitted.\n */\nexport async function _omitTrailingAssistantAttempt(\n\tthis: AgentSession,\n\taccept: (message: AssistantMessage) => boolean = () => true,\n): Promise<boolean> {\n\tconst messages = this.agent.state.messages;\n\tlet index = messages.length - 1;\n\tconst trailingToolResults: AgentMessage[] = [];\n\twhile (index >= 0 && messages[index]?.role === \"toolResult\") {\n\t\ttrailingToolResults.unshift(messages[index]);\n\t\tindex--;\n\t}\n\tconst candidate = messages[index];\n\tif (candidate?.role !== \"assistant\") return false;\n\tconst assistant = candidate as AssistantMessage;\n\tif (!accept(assistant)) return false;\n\tawait this._omitRecoveryAttempt(assistant, trailingToolResults);\n\treturn true;\n}\n\n/** Run the pre-settlement boundary. Returns true when the run must continue once more. */\nexport async function _runBeforeSettleBoundary(this: AgentSession): Promise<boolean> {\n\tif (!this._extensionRunner.hasHandlers(\"agent_before_settle\")) return false;\n\tthis._isBeforeSettle = true;\n\tthis._abortDuringBeforeSettle = false;\n\ttry {\n\t\tconst result = await this._extensionRunner.emitBoundary(\n\t\t\t{ type: \"agent_before_settle\", outcome: this._lastActivityOutcome },\n\t\t\tasync (entries) => await this._buildBoundaryContext(entries, \"agent_before_settle\"),\n\t\t);\n\t\tawait this._commitBoundaryDrafts(result.entries);\n\t\tawait this._flushPendingCustomMessages();\n\t\tconst finalContext = await this._buildBoundaryContext([], \"agent_before_settle\");\n\t\tif (this._abortDuringBeforeSettle) return false;\n\t\tconst shouldContinue = result.continue || this.agent.hasQueuedMessages();\n\t\tif (shouldContinue && !finalContext.canContinue) {\n\t\t\tif (result.continue) this._reportInvalidBoundaryContinuation(\"agent_before_settle\");\n\t\t\treturn false;\n\t\t}\n\t\treturn shouldContinue;\n\t} finally {\n\t\tthis._isBeforeSettle = false;\n\t}\n}\n\nexport const agentSessionBoundaryMethods = {\n\t_refreshFinalizedContext,\n\t_projectFinalizedMessages,\n\trefreshContext,\n\t_installAgentRequestProjection,\n\t_installAgentBoundaryHooks,\n\t_dispatchTurnEndBoundary,\n\t_applyBoundaryDrafts,\n\t_createBoundaryPreviewManager,\n\t_getPendingBoundaryMessages,\n\t_buildBoundaryContext,\n\t_commitBoundaryDrafts,\n\t_reportInvalidBoundaryContinuation,\n\t_findPersistedMessageEntryId,\n\t_omitRecoveryAttempt,\n\t_omitTrailingAssistantAttempt,\n\t_runBeforeSettleBoundary,\n};\n\nexport type { AgentActivityOutcome };\n"]}
1
+ {"version":3,"file":"agent-session-boundaries.js","sourceRoot":"","sources":["../../src/core/agent-session-boundaries.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Canonical session context boundaries.\n *\n * The SessionManager projection is the authoritative model context: every provider\n * request is built from it, recovery paths omit failed attempts through append-only\n * `context_edit` entries instead of slicing agent state, and extensions get two\n * actionable boundaries (`turn_end`, `agent_before_settle`) that may append entries and\n * request one explicit continuation.\n */\n\nimport type { AssistantMessage, ToolResultMessage } from \"@bastani/pi-ai/compat\";\nimport type { AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport type { AgentSessionInternalSurface as AgentSession } from \"./agent-session-methods.ts\";\nimport { COMPACTION_AUTO_QUERY } from \"./compaction/compaction-parameters.js\";\nimport {\n\tDEFAULT_COMPRESSION_RATIO,\n\tDEFAULT_PRESERVE_RECENT,\n\testimateProjectedContextTokens,\n\tserializeConversationForCompaction,\n\tVERBATIM_COMPACTION_PROMPT_VERSION,\n\tVERBATIM_COMPACTION_STRATEGY,\n\ttype VerbatimCompactionDetails,\n} from \"./compaction/index.ts\";\nimport type { AgentActivityOutcome, BoundaryContextPreview, SessionBoundaryDraft } from \"./extensions/index.js\";\nimport { convertToLlm, deferMessagesInterleavedWithToolBatch, repairOrphanToolResults } from \"./messages.ts\";\nimport { type SessionEntry, SessionManager } from \"./session-manager.ts\";\n\ntype BoundaryKind = \"turn_end\" | \"agent_before_settle\";\n\n/**\n * Materialize the canonical projection as finalized context. Atomic repairs tool-call\n * pairing in derived context only (a resumed session may end on a tool call whose engine\n * died before recording its result) and applies the session's configured projection\n * transform; the durable transcript is never rewritten.\n */\nexport function _projectFinalizedMessages(this: AgentSession): AgentMessage[] {\n\treturn finalizeProjectedMessages(this, projectSessionMessages(this));\n}\n\nfunction projectSessionMessages(session: AgentSession): AgentMessage[] {\n\tconst projection = session.sessionManager.buildSessionProjection();\n\tfor (const entry of projection.entries) {\n\t\tfor (const message of entry.messages) session._entryIdsByMessage.set(message, entry.sourceEntry.id);\n\t}\n\treturn projection.messages;\n}\n\nfunction finalizeProjectedMessages(session: AgentSession, messages: AgentMessage[]): AgentMessage[] {\n\t// While a run is active the loop owns pairing for the in-flight tool batch.\n\tconst repaired = repairOrphanToolResults(deferMessagesInterleavedWithToolBatch(messages), {\n\t\trepairTrailing: !session.isStreaming,\n\t\tinFlightToolCallIds: session._reissuedToolCallIds,\n\t});\n\treturn session._contextProjectionTransform ? session._contextProjectionTransform(repaired) : repaired;\n}\n\n/** Refresh the public finalized transcript from the canonical session projection. */\nexport function _refreshFinalizedContext(this: AgentSession): void {\n\tconst unpersisted = this.agent.state.messages.filter((message) => this._messagesAwaitingPersistence.has(message));\n\tconst projected = projectSessionMessages(this);\n\tthis.agent.state.messages = finalizeProjectedMessages(\n\t\tthis,\n\t\tunpersisted.length === 0 ? projected : [...projected, ...unpersisted],\n\t);\n}\n\n/** Refresh the public finalized transcript from the canonical session projection. */\nexport function refreshContext(this: AgentSession): void {\n\tthis._refreshFinalizedContext();\n}\n\n/** Route every provider request through the canonical session projection. */\nexport function _installAgentRequestProjection(this: AgentSession): void {\n\tconst previousPrepareRequest = this.agent.prepareRequest;\n\tthis.agent.prepareRequest = async (request, signal) => {\n\t\t// Session listeners persist messages asynchronously; the projection is canonical\n\t\t// only once every queued event has been applied to the session manager. The whole\n\t\t// queue is the barrier, not just persistence: message_end handlers may replace the\n\t\t// message that gets persisted, and extension dispatch is serialized in event order,\n\t\t// so the last message_end cannot settle before earlier handlers. A failed listener\n\t\t// is reported through the queue's own recovery, never through the request.\n\t\tawait this._agentEventQueue.catch(() => {});\n\t\t// Atomic honors a caller's complete replacement context from prepareNextTurnWithContext\n\t\t// for exactly the request it prepared.\n\t\tconst callerReplaced = this._callerReplacedNextRequestContext;\n\t\tthis._callerReplacedNextRequestContext = false;\n\t\tconst canonicalContext = {\n\t\t\t...request.context,\n\t\t\tmessages: callerReplaced ? request.context.messages : this._projectFinalizedMessages(),\n\t\t\t// Messages declare the provider-visible loadout; context.tools keeps executable implementations.\n\t\t\ttools: this.agent.state.tools.slice(),\n\t\t};\n\t\tconst previous = await previousPrepareRequest?.(\n\t\t\t{\n\t\t\t\t...request,\n\t\t\t\tcontext: canonicalContext,\n\t\t\t\tmodel: this.agent.state.model,\n\t\t\t\tthinkingLevel: this.agent.state.thinkingLevel,\n\t\t\t},\n\t\t\tsignal,\n\t\t);\n\t\treturn {\n\t\t\t...previous,\n\t\t\tcontext: previous?.context ?? canonicalContext,\n\t\t\tmodel: previous?.model ?? this.agent.state.model,\n\t\t\tthinkingLevel: previous?.thinkingLevel ?? this.agent.state.thinkingLevel,\n\t\t};\n\t};\n}\n\n/** Dispatch the actionable `turn_end` boundary from `finishTurn`, before agent-core's own `turn_end`. */\nexport function _installAgentBoundaryHooks(this: AgentSession): void {\n\tconst previousFinishTurn = this.agent.finishTurn;\n\tthis.agent.finishTurn = async (turn, signal) => {\n\t\tthis._boundaryDispatchedMessages.add(turn.message);\n\t\tconst extensionContinue = await this._dispatchTurnEndBoundary(turn.message, turn.toolResults, true);\n\t\tconst previousDecision = await previousFinishTurn?.(turn, signal);\n\t\tif (previousDecision?.action === \"end\") return previousDecision;\n\t\tif (extensionContinue || previousDecision?.action === \"continue\") return { action: \"continue\" };\n\t\treturn undefined;\n\t};\n}\n\nexport async function _dispatchTurnEndBoundary(\n\tthis: AgentSession,\n\tmessage: AssistantMessage,\n\ttoolResults: ToolResultMessage[],\n\tawaitPersistence = false,\n): Promise<boolean> {\n\tthis._lastActivityOutcome =\n\t\tmessage.stopReason === \"aborted\" ? \"aborted\" : message.stopReason === \"error\" ? \"error\" : \"completed\";\n\tif (!this._extensionRunner.hasHandlers(\"turn_end\")) return false;\n\t// The boundary resolves persisted entry IDs. From finishTurn, session listeners may\n\t// still be persisting this turn; from the serialized event queue they already have.\n\tif (awaitPersistence) await this._agentEventQueue.catch(() => {});\n\tconst messageEntryId = this._findPersistedMessageEntryId(message);\n\tif (!messageEntryId) {\n\t\tthis._extensionRunner.emitError({\n\t\t\textensionPath: \"<boundary>\",\n\t\t\tevent: \"turn_end\",\n\t\t\terror: \"turn_end could not resolve the persisted assistant entry ID\",\n\t\t});\n\t\treturn false;\n\t}\n\tconst toolResultEntryIds = toolResults.flatMap((result) => {\n\t\tconst entryId = this._findPersistedMessageEntryId(result);\n\t\treturn entryId ? [entryId] : [];\n\t});\n\tconst boundary = await this._extensionRunner.emitBoundary(\n\t\t{\n\t\t\ttype: \"turn_end\",\n\t\t\tturnIndex: this._turnIndex,\n\t\t\tmessage,\n\t\t\ttoolResults,\n\t\t\tmessageEntryId,\n\t\t\ttoolResultEntryIds,\n\t\t\toutcome: this._lastActivityOutcome,\n\t\t},\n\t\tasync (entries) => await this._buildBoundaryContext(entries, \"turn_end\"),\n\t);\n\tawait this._commitBoundaryDrafts(boundary.entries);\n\tif (boundary.continue && !(await this._buildBoundaryContext([], \"turn_end\")).canContinue) {\n\t\tthis._reportInvalidBoundaryContinuation(\"turn_end\");\n\t\treturn false;\n\t}\n\treturn boundary.continue;\n}\n\nfunction extensionCompactionDetails(\n\tmanager: SessionManager,\n\tsummary: string,\n\ttokensBefore: number,\n): VerbatimCompactionDetails {\n\tconst linesBefore = serializeConversationForCompaction(\n\t\tconvertToLlm(manager.buildSessionProjection().messages),\n\t).split(\"\\n\").length;\n\tconst linesKept = summary.split(\"\\n\").length;\n\tconst tokensAfter = Math.ceil(summary.length / 4);\n\treturn {\n\t\tstrategy: VERBATIM_COMPACTION_STRATEGY,\n\t\tpromptVersion: VERBATIM_COMPACTION_PROMPT_VERSION,\n\t\tparameters: {\n\t\t\tcompression_ratio: DEFAULT_COMPRESSION_RATIO,\n\t\t\tpreserve_recent: DEFAULT_PRESERVE_RECENT,\n\t\t\tquery: COMPACTION_AUTO_QUERY,\n\t\t},\n\t\tstats: {\n\t\t\tlinesBefore,\n\t\t\tlinesDeleted: Math.max(0, linesBefore - linesKept),\n\t\t\tlinesKept,\n\t\t\trangeCount: 0,\n\t\t\ttokensBefore,\n\t\t\ttokensAfter,\n\t\t\tpercentReduction: tokensBefore === 0 ? 0 : Math.round((1 - tokensAfter / tokensBefore) * 1000) / 10,\n\t\t},\n\t\trung: \"extension\",\n\t};\n}\n\nexport async function _applyBoundaryDrafts(\n\tthis: AgentSession,\n\tmanager: SessionManager,\n\tdrafts: SessionBoundaryDraft[],\n): Promise<SessionEntry[]> {\n\tconst appended: SessionEntry[] = [];\n\tfor (const draft of drafts) {\n\t\tlet entryId: string;\n\t\tswitch (draft.type) {\n\t\t\tcase \"custom\":\n\t\t\t\tentryId = await manager.appendCustomEntry(draft.customType, draft.data);\n\t\t\t\tbreak;\n\t\t\tcase \"custom_message\":\n\t\t\t\tentryId = await manager.appendCustomMessageEntry(\n\t\t\t\t\tdraft.customType,\n\t\t\t\t\tdraft.content,\n\t\t\t\t\tdraft.display,\n\t\t\t\t\tdraft.details,\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase \"context_edit\":\n\t\t\t\tentryId = await manager.appendContextEdit(draft.targetId, draft.replacement);\n\t\t\t\tbreak;\n\t\t\tcase \"compaction\": {\n\t\t\t\tif (draft.summary.trim().length === 0) throw new Error(\"Compaction draft summary must not be empty\");\n\t\t\t\tconst tokensBefore = estimateProjectedContextTokens(\n\t\t\t\t\tmanager.buildSessionProjection(),\n\t\t\t\t\tmanager.getBranch(),\n\t\t\t\t).tokens;\n\t\t\t\tentryId = await manager.appendCompaction(\n\t\t\t\t\tdraft.summary,\n\t\t\t\t\tdraft.firstKeptEntryId,\n\t\t\t\t\ttokensBefore,\n\t\t\t\t\textensionCompactionDetails(manager, draft.summary, tokensBefore),\n\t\t\t\t\tdraft.usage,\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tconst entry = manager.getEntry(entryId);\n\t\tif (entry) appended.push(entry);\n\t}\n\treturn appended;\n}\n\nexport async function _createBoundaryPreviewManager(\n\tthis: AgentSession,\n\tdrafts: SessionBoundaryDraft[],\n): Promise<SessionManager> {\n\tconst header = this.sessionManager.getHeader();\n\tif (!header) throw new Error(\"Session header is missing\");\n\tconst manager = SessionManager.inMemory(this._cwd, undefined, [header, ...this.sessionManager.getBranch()]);\n\tawait this._applyBoundaryDrafts(manager, drafts);\n\treturn manager;\n}\n\nexport function _getPendingBoundaryMessages(this: AgentSession): AgentMessage[] {\n\treturn [...this.agent.peekQueuedMessages(), ...this._pendingCustomMessages];\n}\n\nexport async function _buildBoundaryContext(\n\tthis: AgentSession,\n\tdrafts: SessionBoundaryDraft[],\n\tboundary: BoundaryKind,\n): Promise<BoundaryContextPreview> {\n\tconst projection = (await this._createBoundaryPreviewManager(drafts)).buildSessionProjection();\n\tconst contextMessages = finalizeProjectedMessages(this, projection.messages);\n\tconst pendingMessages = this._getPendingBoundaryMessages();\n\tconst llmMessages = convertToLlm(contextMessages);\n\tconst finalRole = llmMessages[llmMessages.length - 1]?.role;\n\tconst hasNonSystemContext = llmMessages.some((message) => message.role !== \"system\");\n\tconst contextCanContinue = hasNonSystemContext && finalRole !== \"assistant\";\n\tconst pendingCustomContext = this._pendingCustomMessages.length > 0;\n\treturn {\n\t\tcontextEntries: projection.entries,\n\t\tcontextMessages,\n\t\tllmMessages,\n\t\tpendingMessages,\n\t\tcanContinue:\n\t\t\tcontextCanContinue ||\n\t\t\tpendingCustomContext ||\n\t\t\t(boundary === \"turn_end\"\n\t\t\t\t? this.agent.hasQueuedMessages()\n\t\t\t\t: finalRole === \"assistant\" && this.agent.hasQueuedMessages()),\n\t};\n}\n\nexport async function _commitBoundaryDrafts(this: AgentSession, drafts: SessionBoundaryDraft[]): Promise<void> {\n\tconst appended = await this._applyBoundaryDrafts(this.sessionManager, drafts);\n\tthis._refreshFinalizedContext();\n\tfor (const entry of appended) this._emit({ type: \"entry_appended\", entry });\n}\n\nexport function _reportInvalidBoundaryContinuation(this: AgentSession, event: BoundaryKind): void {\n\tthis._extensionRunner.emitError({\n\t\textensionPath: \"<boundary>\",\n\t\tevent,\n\t\terror: `${event} requested continuation without runnable model context`,\n\t});\n}\n\nexport function _findPersistedMessageEntryId(this: AgentSession, message: AgentMessage): string | undefined {\n\tconst mapped = this._entryIdsByMessage.get(message);\n\tif (mapped) return mapped;\n\tfor (const entry of [...this.sessionManager.getBranch()].reverse()) {\n\t\tif (entry.type === \"message\" && entry.message === message) return entry.id;\n\t}\n\n\tconst messageIndex = this.agent.state.messages.indexOf(message);\n\tif (messageIndex < 0) return undefined;\n\tconst projection = this.sessionManager.buildSessionProjection();\n\tlet projectedIndex = 0;\n\tfor (const entry of projection.entries) {\n\t\tfor (let i = 0; i < entry.messages.length; i++) {\n\t\t\tif (projectedIndex === messageIndex) {\n\t\t\t\tthis._entryIdsByMessage.set(message, entry.sourceEntry.id);\n\t\t\t\treturn entry.sourceEntry.id;\n\t\t\t}\n\t\t\tprojectedIndex++;\n\t\t}\n\t}\n\treturn undefined;\n}\n\n/** Keep a failed attempt in raw history while durably omitting it from model projection. */\nexport async function _omitRecoveryAttempt(\n\tthis: AgentSession,\n\tmessage: AssistantMessage,\n\ttoolResults: AgentMessage[] = [],\n): Promise<void> {\n\tconst targets = [message, ...toolResults];\n\tconst targetIds = targets.map((target) => this._findPersistedMessageEntryId(target));\n\tconst unresolvedProjectedTarget = targets.some(\n\t\t(target, index) => targetIds[index] === undefined && this.agent.state.messages.includes(target),\n\t);\n\tif (unresolvedProjectedTarget) {\n\t\tthrow new Error(\"Cannot persist recovery omission because a projected message has no source entry\");\n\t}\n\tfor (const targetId of targetIds) {\n\t\tif (!targetId) continue;\n\t\tconst editId = await this.sessionManager.appendContextEdit(targetId, null);\n\t\tconst entry = this.sessionManager.getEntry(editId);\n\t\tif (entry) this._emit({ type: \"entry_appended\", entry });\n\t}\n\tthis._refreshFinalizedContext();\n}\n\n/**\n * Omit the trailing assistant attempt (and any tool results it produced) from model\n * projection when the loop must resume from the preceding input. Returns true when an\n * assistant attempt was omitted.\n */\nexport async function _omitTrailingAssistantAttempt(\n\tthis: AgentSession,\n\taccept: (message: AssistantMessage) => boolean = () => true,\n): Promise<boolean> {\n\tconst messages = this.agent.state.messages;\n\tlet index = messages.length - 1;\n\tconst trailingToolResults: AgentMessage[] = [];\n\twhile (index >= 0 && messages[index]?.role === \"toolResult\") {\n\t\ttrailingToolResults.unshift(messages[index]);\n\t\tindex--;\n\t}\n\tconst candidate = messages[index];\n\tif (candidate?.role !== \"assistant\") return false;\n\tconst assistant = candidate as AssistantMessage;\n\tif (!accept(assistant)) return false;\n\tawait this._omitRecoveryAttempt(assistant, trailingToolResults);\n\treturn true;\n}\n\n/** Run the pre-settlement boundary. Returns true when the run must continue once more. */\nexport async function _runBeforeSettleBoundary(this: AgentSession): Promise<boolean> {\n\tif (!this._extensionRunner.hasHandlers(\"agent_before_settle\")) return false;\n\tthis._isBeforeSettle = true;\n\tthis._abortDuringBeforeSettle = false;\n\ttry {\n\t\tconst result = await this._extensionRunner.emitBoundary(\n\t\t\t{ type: \"agent_before_settle\", outcome: this._lastActivityOutcome },\n\t\t\tasync (entries) => await this._buildBoundaryContext(entries, \"agent_before_settle\"),\n\t\t);\n\t\tawait this._commitBoundaryDrafts(result.entries);\n\t\tawait this._flushPendingCustomMessages();\n\t\tconst finalContext = await this._buildBoundaryContext([], \"agent_before_settle\");\n\t\tif (this._abortDuringBeforeSettle) return false;\n\t\tconst shouldContinue = result.continue || this.agent.hasQueuedMessages();\n\t\tif (shouldContinue && !finalContext.canContinue) {\n\t\t\tif (result.continue) this._reportInvalidBoundaryContinuation(\"agent_before_settle\");\n\t\t\treturn false;\n\t\t}\n\t\treturn shouldContinue;\n\t} finally {\n\t\tthis._isBeforeSettle = false;\n\t}\n}\n\nexport const agentSessionBoundaryMethods = {\n\t_refreshFinalizedContext,\n\t_projectFinalizedMessages,\n\trefreshContext,\n\t_installAgentRequestProjection,\n\t_installAgentBoundaryHooks,\n\t_dispatchTurnEndBoundary,\n\t_applyBoundaryDrafts,\n\t_createBoundaryPreviewManager,\n\t_getPendingBoundaryMessages,\n\t_buildBoundaryContext,\n\t_commitBoundaryDrafts,\n\t_reportInvalidBoundaryContinuation,\n\t_findPersistedMessageEntryId,\n\t_omitRecoveryAttempt,\n\t_omitTrailingAssistantAttempt,\n\t_runBeforeSettleBoundary,\n};\n\nexport type { AgentActivityOutcome };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session-events.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAe,MAAM,uBAAuB,CAAC;AAEpF,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE9E,OAAO,KAAK,EAAE,2BAA2B,IAAI,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAW9F,OAAO,EACN,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAI9B,MAAM,0BAA0B,CAAC;AAalC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAclE,wBAAgB,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAIxE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAMzD;AAID,4EAA4E;AAE5E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CA0D7F;AAED,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CA6B1F;AAED,wBAAgB,4BAA4B,CAC3C,IAAI,EAAE,YAAY,EAClB,QAAQ,EAAE,YAAY,EAAE,GACtB,gBAAgB,GAAG,SAAS,CAQ9B;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAuM7F;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CA0BvF;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAQvF;AAED,wCAAwC;AAExC,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAMtD;AAED,0CAA0C;AAE1C,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAMhF;AAED,8EAA8E;AAE9E,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,YAAY,GAAG,gBAAgB,GAAG,SAAS,CAS1F;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,GAAG,IAAI,CAchH;AAED,kDAAkD;AAElD,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAwE9F;AAED;;;;GAIG;AAEH,wBAAgB,SAAS,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,yBAAyB,GAAG,MAAM,IAAI,CAU7F;AAED,oDAAoD;AACpD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAK7D;AAWD,gFAAgF;AAChF,wBAAgB,iBAAiB,CAChC,OAAO,EAAE,YAAY,EACrB,KAAK,GAAE,oBAAmE,EAC1E,gBAAgB,CAAC,EAAE,MAAM,IAAI,GAC3B,OAAO,CAAC,IAAI,CAAC,CA4Ff;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAEzD;AAMD,uBAAuB;AAEvB,eAAO,MAAM,yBAAyB;iBACxB,YAAY,SAAS,oBAAoB,qBAAqB,MAAM,IAAI;;;;;;;;;;;;;;;;;CAmBrF,CAAC"}
1
+ {"version":3,"file":"agent-session-events.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAe,MAAM,uBAAuB,CAAC;AAEpF,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE9E,OAAO,KAAK,EAAE,2BAA2B,IAAI,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAW9F,OAAO,EACN,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAI9B,MAAM,0BAA0B,CAAC;AAclC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAclE,wBAAgB,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAIxE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAMzD;AAID,4EAA4E;AAE5E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CA0D7F;AAED,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CA6B1F;AAED,wBAAgB,4BAA4B,CAC3C,IAAI,EAAE,YAAY,EAClB,QAAQ,EAAE,YAAY,EAAE,GACtB,gBAAgB,GAAG,SAAS,CAQ9B;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAuM7F;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CA0BvF;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAWvF;AAED,wCAAwC;AAExC,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAMtD;AAED,0CAA0C;AAE1C,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAMhF;AAED,8EAA8E;AAE9E,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,YAAY,GAAG,gBAAgB,GAAG,SAAS,CAS1F;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,GAAG,IAAI,CAchH;AAED,kDAAkD;AAElD,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAwE9F;AAED;;;;GAIG;AAEH,wBAAgB,SAAS,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,yBAAyB,GAAG,MAAM,IAAI,CAU7F;AAED,oDAAoD;AACpD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAK7D;AAWD,gFAAgF;AAChF,wBAAgB,iBAAiB,CAChC,OAAO,EAAE,YAAY,EACrB,KAAK,GAAE,oBAAmE,EAC1E,gBAAgB,CAAC,EAAE,MAAM,IAAI,GAC3B,OAAO,CAAC,IAAI,CAAC,CA4Ff;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAEzD;AAMD,uBAAuB;AAEvB,eAAO,MAAM,yBAAyB;iBACxB,YAAY,SAAS,oBAAoB,qBAAqB,MAAM,IAAI;;;;;;;;;;;;;;;;;CAmBrF,CAAC"}
@@ -5,6 +5,7 @@ import { isProtectedStreamingCustomMessage, markProtectedStreamingCustomMessageC
5
5
  import { abortCurrentGeneration } from "./agent-session-queue-pause.js";
6
6
  import { customMessageExcludesContext, isSingleGenericAbortTextContent, replacementAbortContent, } from "./agent-session-types.js";
7
7
  import { formatCodexProviderError } from "./codex-errors.js";
8
+ import { formatCopilotProviderError } from "./copilot-errors.js";
8
9
  import { emitSessionShutdownEvent } from "./extensions/runner.js";
9
10
  import { STALE_EXTENSION_CONTEXT_MESSAGE } from "./extensions/stale-context.js";
10
11
  import { normalizeMessageContent } from "./messages.js";
@@ -326,7 +327,7 @@ export function _applyProviderErrorGuidance(event) {
326
327
  const assistantMessage = event.message;
327
328
  if (assistantMessage.stopReason !== "error" || !assistantMessage.errorMessage)
328
329
  return;
329
- assistantMessage.errorMessage = formatCodexProviderError(assistantMessage.provider, assistantMessage.errorMessage);
330
+ assistantMessage.errorMessage = formatCopilotProviderError(assistantMessage.model, formatCodexProviderError(assistantMessage.provider, assistantMessage.errorMessage));
330
331
  }
331
332
  /** Resolve the pending retry promise */
332
333
  export function _resolveRetry() {
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session-events.js","sourceRoot":"","sources":["../../src/core/agent-session-events.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AssistantMessage, Message, TextContent } from \"@bastani/pi-ai/compat\";\nimport { cleanupSessionResources } from \"@bastani/pi-ai/compat\";\nimport type { AgentEvent, AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport { abortBash } from \"./agent-session-bash.ts\";\nimport type { AgentSessionInternalSurface as AgentSession } from \"./agent-session-methods.ts\";\nimport { clearNestedToolCalls, recordNestedToolCalls } from \"./agent-session-nested-tools.js\";\nimport {\n\tisProtectedStreamingCustomMessage,\n\tmarkProtectedStreamingCustomMessageConsumed,\n\tmarkProtectedStreamingCustomMessagePersistenceFailed,\n\tpersistProtectedStreamingCustomMessage,\n\tprepareProtectedStreamingCustomMessagesForDisposal,\n\tretryConsumedProtectedStreamingCustomMessages,\n} from \"./agent-session-persistent-custom-messages.ts\";\nimport { abortCurrentGeneration } from \"./agent-session-queue-pause.ts\";\nimport {\n\ttype AgentSessionEvent,\n\ttype AgentSessionEventListener,\n\tcustomMessageExcludesContext,\n\tisSingleGenericAbortTextContent,\n\treplacementAbortContent,\n} from \"./agent-session-types.js\";\nimport { formatCodexProviderError } from \"./codex-errors.ts\";\nimport type {\n\tMessageEndEvent,\n\tMessageStartEvent,\n\tMessageUpdateEvent,\n\tToolExecutionEndEvent,\n\tToolExecutionStartEvent,\n\tToolExecutionUpdateEvent,\n\tTurnStartEvent,\n} from \"./extensions/index.js\";\nimport { emitSessionShutdownEvent } from \"./extensions/runner.ts\";\nimport { STALE_EXTENSION_CONTEXT_MESSAGE } from \"./extensions/stale-context.ts\";\nimport type { SessionShutdownEvent } from \"./extensions/types.ts\";\nimport type { StageAdmittedCustomMessage } from \"./messages.ts\";\nimport { normalizeMessageContent } from \"./messages.ts\";\nimport {\n\tabortSessionWork,\n\tdrainSessionReload,\n\tdrainSessionWork,\n\thasCallingSessionWork,\n\townedSessionPermits,\n\townedSessionStores,\n} from \"./session-lifecycle-work.ts\";\nimport { assertSettingsWrites, ownedSettingsManagers } from \"./settings-write-ownership.ts\";\nimport { drainTerminalWorkflowSummaries } from \"./workflow-summary-lifecycle.ts\";\n\nexport function _emit(this: AgentSession, event: AgentSessionEvent): void {\n\tfor (const l of this._eventListeners) {\n\t\tl(event);\n\t}\n}\n\nexport function _emitQueueUpdate(this: AgentSession): void {\n\tthis._emit({\n\t\ttype: \"queue_update\",\n\t\tsteering: [...this._steeringMessages],\n\t\tfollowUp: [...this._followUpMessages],\n\t});\n}\n\nconst consumedQueuedMessageEvents = new WeakSet<object>();\n\n/** Internal handler for agent events - shared by subscribe and reconnect */\n\nexport function _handleAgentEvent(this: AgentSession, event: AgentEvent): Promise<void> | void {\n\tif (event.type === \"message_start\" && event.message.role === \"toolResult\")\n\t\trecordNestedToolCalls(this, event.message);\n\telse if (event.type === \"agent_end\") clearNestedToolCalls(this);\n\t// Create retry promise synchronously before queueing async processing.\n\t// Agent.emit() calls this handler synchronously, and prompt() calls waitForRetry()\n\t// as soon as agent.prompt() resolves. If _retryPromise is created only inside\n\t// _processAgentEvent, slow earlier queued events can delay agent_end processing\n\t// and waitForRetry() can miss the in-flight retry.\n\tthis._createRetryPromiseForAgentEnd(event);\n\t// Agent-core has already consumed this message. Reflect admission before an\n\t// Escape/abort can restore it from a stale queue while earlier hooks settle.\n\tif (event.type === \"message_start\" && event.message.role === \"user\") {\n\t\tconst text = this._getUserMessageText(event.message);\n\t\tif (text) {\n\t\t\tconst queue = [this._steeringMessages, this._followUpMessages].find((messages) => messages.includes(text));\n\t\t\tif (queue) {\n\t\t\t\tqueue.splice(queue.indexOf(text), 1);\n\t\t\t\tthis._admittedQueuedMessageAwaitingReply = text;\n\t\t\t\tconsumedQueuedMessageEvents.add(event);\n\t\t\t}\n\t\t}\n\t}\n\tconst awaitProtectedPersistence =\n\t\tevent.type === \"message_end\" && event.message.role === \"custom\"\n\t\t\t? markProtectedStreamingCustomMessageConsumed(this, event.message)\n\t\t\t: false;\n\tif (event.type === \"message_end\") this._messagesAwaitingPersistence.add(event.message);\n\n\tconst processing = this._agentEventQueue.then(\n\t\t() => this._processAgentEvent(event),\n\t\t() => this._processAgentEvent(event),\n\t);\n\tthis._agentEventQueue = processing;\n\n\t// Keep queue alive if an event handler fails. Per event, agent-core awaits only\n\t// protected persistence and fallback reconciliation; other listener work is\n\t// nonblocking for that event. The queue as a whole is still drained before each\n\t// provider request (`prepareRequest` in agent-session-boundaries.ts): message_end\n\t// handlers may replace the message that gets persisted, and the request is built\n\t// from the persisted canonical projection, so every queued handler gates the next\n\t// request rather than only the persistence step.\n\tprocessing.catch((error) => {\n\t\t// #3105: callbacks interrupted by terminal disposal remain observable at shutdown.\n\t\tif (this._disposed) {\n\t\t\tconst failures = shutdownEventFailures.get(this) ?? [];\n\t\t\tfailures.push(error instanceof Error ? error : new Error(String(error)));\n\t\t\tshutdownEventFailures.set(this, failures);\n\t\t}\n\t});\n\tif (\n\t\tawaitProtectedPersistence ||\n\t\t// #3105: only queued custom input needs this boundary; ordinary turn listeners\n\t\t// must remain nonblocking during fallback settlement.\n\t\t(event.type === \"turn_end\" && this._pendingCustomMessages.length > 0) ||\n\t\t(event.type === \"agent_end\" && (this._fallbackModels.length > 0 || this._fallbackOriginModel !== undefined))\n\t)\n\t\treturn processing.catch(() => {});\n}\n\nexport function _createRetryPromiseForAgentEnd(this: AgentSession, event: AgentEvent): void {\n\tif (event.type !== \"agent_end\" || this._retryPromise || this._agentRunAbortRequested) {\n\t\treturn;\n\t}\n\n\tconst settings = this.settingsManager.getRetrySettings();\n\tif (!settings.enabled && this._fallbackModels.length === 0) {\n\t\treturn;\n\t}\n\n\tconst lastAssistant = this._findLastAssistantInMessages(event.messages);\n\tif (!lastAssistant) {\n\t\treturn;\n\t}\n\n\tconst fallbackable =\n\t\ttypeof this._isFallbackableError === \"function\"\n\t\t\t? this._isFallbackableError(lastAssistant)\n\t\t\t: this._isRetryableError(lastAssistant);\n\tconst retryable = this._isRetryableError(lastAssistant);\n\tconst shouldRetry =\n\t\tretryable || fallbackable || this._isEmptyCompletion(lastAssistant) || this._isSafetyRefusal(lastAssistant);\n\tif (!shouldRetry) {\n\t\treturn;\n\t}\n\n\tthis._retryPromise = new Promise((resolve) => {\n\t\tthis._retryResolve = resolve;\n\t});\n}\n\nexport function _findLastAssistantInMessages(\n\tthis: AgentSession,\n\tmessages: AgentMessage[],\n): AssistantMessage | undefined {\n\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\tconst message = messages[i];\n\t\tif (message.role === \"assistant\") {\n\t\t\treturn message as AssistantMessage;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nexport async function _processAgentEvent(this: AgentSession, event: AgentEvent): Promise<void> {\n\tconst protectedMessage =\n\t\tevent.type === \"message_end\" &&\n\t\tevent.message.role === \"custom\" &&\n\t\tisProtectedStreamingCustomMessage(this, event.message)\n\t\t\t? event.message\n\t\t\t: undefined;\n\t// Public notifications remain serialized behind extension events.\n\tif (event.type === \"agent_start\") {\n\t\t// A caller replacement prepared for a turn that never reached its provider\n\t\t// request must not leak into this run's first request. `prepareRequest`\n\t\t// awaits this queue, so the reset lands before the run's first projection.\n\t\tthis._callerReplacedNextRequestContext = false;\n\t}\n\tif (event.type === \"message_start\" && event.message.role === \"user\") {\n\t\tthis._overflowRecoveryAttempted = false;\n\t\tthis._recoverableLengthRecoveryAttempted = false;\n\t\tthis._fallbackAttemptedKeys.clear();\n\t\tthis._fallbackBlockedModels.length = 0;\n\t\tif (consumedQueuedMessageEvents.delete(event)) this._emitQueueUpdate();\n\t}\n\n\tthis._applyInterruptAbortMessage(event);\n\tthis._applyProviderErrorGuidance(event);\n\n\ttry {\n\t\tawait this._emitExtensionEvent(event);\n\t\tif (event.type !== \"message_end\") this._emit(event);\n\t} finally {\n\t\t// Agent-core has consumed this protected input already. Its durability\n\t\t// boundary cannot be skipped by a fallible extension or session listener.\n\t\tif (protectedMessage !== undefined) {\n\t\t\ttry {\n\t\t\t\tawait persistProtectedStreamingCustomMessage(this, protectedMessage);\n\t\t\t} catch {\n\t\t\t\tmarkProtectedStreamingCustomMessagePersistenceFailed(this, protectedMessage);\n\t\t\t}\n\t\t\tawait retryConsumedProtectedStreamingCustomMessages(this);\n\t\t}\n\t}\n\tif (event.type === \"turn_end\") {\n\t\tthis._lastAssistantToolResults = event.toolResults;\n\t\tawait this._flushPendingCustomMessages();\n\t}\n\n\t// Handle session persistence\n\tif (event.type === \"message_end\") {\n\t\tlet entryId: string | undefined;\n\t\t// Check if this is a custom message from extensions\n\t\tif (event.message.role === \"custom\") {\n\t\t\tconst admitted = event.message as StageAdmittedCustomMessage;\n\t\t\tif (protectedMessage === undefined) {\n\t\t\t\tentryId = await this.sessionManager.appendCustomMessageEntry(\n\t\t\t\t\tevent.message.customType,\n\t\t\t\t\tevent.message.content,\n\t\t\t\t\tevent.message.display,\n\t\t\t\t\tevent.message.details,\n\t\t\t\t\tcustomMessageExcludesContext(event.message),\n\t\t\t\t\tundefined,\n\t\t\t\t\tadmitted.stageAdmissionKey,\n\t\t\t\t);\n\t\t\t}\n\t\t} else if (\n\t\t\tevent.message.role === \"system\" ||\n\t\t\tevent.message.role === \"user\" ||\n\t\t\tevent.message.role === \"assistant\" ||\n\t\t\tevent.message.role === \"toolResult\"\n\t\t) {\n\t\t\t// Regular LLM message - persist as SessionMessageEntry\n\t\t\tentryId = await this.sessionManager.appendMessage(event.message);\n\t\t}\n\t\tif (entryId) this._entryIdsByMessage.set(event.message, entryId);\n\t\tif (entryId && event.message.role === \"custom\") {\n\t\t\tconst pendingIndex = this._pendingNextTurnMessages.indexOf(event.message);\n\t\t\tif (pendingIndex >= 0) this._pendingNextTurnMessages.splice(pendingIndex, 1);\n\t\t}\n\t\t// Context refreshes must retain admitted messages until their async append commits.\n\t\tthis._messagesAwaitingPersistence.delete(event.message);\n\t\tthis._emit(event);\n\t\t// Other message types (bashExecution, branchSummary) are persisted elsewhere\n\n\t\t// Track assistant message for auto-compaction (checked on agent_end)\n\t\tif (event.message.role === \"assistant\") {\n\t\t\tthis._lastAssistantMessage = event.message;\n\n\t\t\tconst assistantMsg = event.message as AssistantMessage;\n\t\t\t// A length stop preserves its one-shot recovery budget. Reset both\n\t\t\t// recovery kinds only once a non-truncated response completes.\n\t\t\tconst assistantFailed =\n\t\t\t\tassistantMsg.stopReason === \"error\" ||\n\t\t\t\tthis._isEmptyCompletion(assistantMsg) ||\n\t\t\t\tthis._isSafetyRefusal(assistantMsg);\n\t\t\tif (!assistantFailed && assistantMsg.stopReason !== \"length\") {\n\t\t\t\tthis._overflowRecoveryAttempted = false;\n\t\t\t\tthis._recoverableLengthRecoveryAttempted = false;\n\t\t\t}\n\t\t\tif (!assistantFailed) {\n\t\t\t\tthis._contextOverflowUnresolved = false;\n\t\t\t\tthis._outputBudgetErrorContinuationAttempts = 0;\n\t\t\t}\n\t\t\tif (!assistantFailed && assistantMsg.stopReason === \"stop\") {\n\t\t\t\tthis._fallbackAttemptedKeys.clear();\n\t\t\t\tthis._fallbackBlockedModels.length = 0;\n\t\t\t}\n\n\t\t\t// A non-truncated assistant response means the length-continuation loop\n\t\t\t// made progress (or the turn completed cleanly), so reset the bounded\n\t\t\t// output-cap continuation counter.\n\t\t\tif (assistantMsg.stopReason !== \"length\") {\n\t\t\t\tthis._lengthContinuationAttempts = 0;\n\t\t\t}\n\n\t\t\t// Reset retry counter immediately on successful assistant response\n\t\t\t// This prevents accumulation across multiple LLM calls within a turn\n\t\t\tif (!assistantFailed && this._retryAttempt > 0) {\n\t\t\t\tthis._emit({\n\t\t\t\t\ttype: \"auto_retry_end\",\n\t\t\t\t\tsuccess: true,\n\t\t\t\t\tattempt: this._retryAttempt,\n\t\t\t\t});\n\t\t\t\tthis._retryAttempt = 0;\n\t\t\t}\n\t\t}\n\t}\n\n\t// A transient hidden-reconciliation write failure retries independently of\n\t// provider/card delivery and can never create another visible lifecycle card.\n\tawait retryConsumedProtectedStreamingCustomMessages(this);\n\n\t// Check auto-retry and auto-compaction after agent completes\n\tif (event.type === \"agent_end\" && this._lastAssistantMessage) {\n\t\tconst msg = this._lastAssistantMessage;\n\t\tthis._lastAssistantMessage = undefined;\n\t\tif (this._agentRunAbortRequested) {\n\t\t\tthis._resolveRetry();\n\t\t\treturn;\n\t\t}\n\t\tconst postToolPreflightFailed =\n\t\t\tthis._postToolCompactionPreflightError !== undefined &&\n\t\t\tmsg.errorMessage === this._postToolCompactionPreflightError;\n\n\t\t// Check provider/model failures before compaction. Fallback eligibility is\n\t\t// broader than same-model retry eligibility: auth and request-incompatible\n\t\t// failures advance without re-requesting the failed model.\n\t\tconst fallbackableError =\n\t\t\t!postToolPreflightFailed &&\n\t\t\t(typeof this._isFallbackableError === \"function\"\n\t\t\t\t? this._isFallbackableError(msg)\n\t\t\t\t: this._isRetryableError(msg));\n\t\tconst retryableError = !postToolPreflightFailed && this._isRetryableError(msg);\n\t\tconst emptyCompletion =\n\t\t\t!postToolPreflightFailed && !retryableError && !fallbackableError && this._isEmptyCompletion(msg);\n\t\tconst safetyRefusal =\n\t\t\t!postToolPreflightFailed &&\n\t\t\t!retryableError &&\n\t\t\t!fallbackableError &&\n\t\t\t!emptyCompletion &&\n\t\t\tthis._isSafetyRefusal(msg);\n\t\tconst modelFailure = retryableError || fallbackableError || emptyCompletion || safetyRefusal;\n\t\tlet settleAfterTurn = !modelFailure;\n\t\tif (modelFailure) {\n\t\t\tif (emptyCompletion && !msg.errorMessage) {\n\t\t\t\t// Surface a clear reason in the retry banner; empty completions carry no\n\t\t\t\t// provider error message of their own.\n\t\t\t\tmsg.errorMessage = \"Provider returned an empty completion\";\n\t\t\t} else if (safetyRefusal && !msg.errorMessage) {\n\t\t\t\tmsg.errorMessage = \"Provider returned a canned safety refusal\";\n\t\t\t}\n\t\t\tconst didRetry = await this._handleRetryableError(msg);\n\t\t\tif (didRetry) return; // Retry was initiated, don't proceed to compaction\n\t\t\tsettleAfterTurn = true;\n\t\t}\n\t\tif (this._agentRunAbortRequested) return;\n\n\t\tthis._resolveRetry();\n\t\tthis._contextOverflowUnresolved = false;\n\t\tawait this._checkCompaction(msg);\n\t\tif (this._agentRunAbortRequested) return;\n\n\t\t// Compaction owns context overflow first. Only once it is disabled, fails,\n\t\t// or reports the overflow unresolved may the chain spend a candidate on a\n\t\t// larger-context model, so a compactable first overflow costs nothing.\n\t\tif (this._contextOverflowUnresolved) {\n\t\t\tthis._contextOverflowUnresolved = false;\n\t\t\tif (typeof this._trySwitchToFallbackModel === \"function\" && (await this._trySwitchToFallbackModel(msg)))\n\t\t\t\treturn;\n\t\t\tsettleAfterTurn = true;\n\t\t}\n\t\t// Keep a fallback lifecycle open across the compact-and-continue probe that\n\t\t// belongs to this user turn, then settle it without changing the active model.\n\t\tif (settleAfterTurn && this._pendingPostCompactionContinuation === undefined) {\n\t\t\tif (typeof this._settleFallbackModelScope === \"function\") await this._settleFallbackModelScope();\n\t\t}\n\t\t// Launched last so the fallback lifecycle wins: a switch above returns before\n\t\t// this line. Guarded like the fallback methods above because fallback suites\n\t\t// drive this function on a synthetic session.\n\t\tif (event.type === \"agent_end\" && typeof this._maybeGenerateSessionSummary === \"function\")\n\t\t\tvoid this._maybeGenerateSessionSummary();\n\t}\n}\n\nexport function _applyInterruptAbortMessage(this: AgentSession, event: AgentEvent): void {\n\tconst abortMessage = this._activeInterruptAbortMessage;\n\tif (!abortMessage) return;\n\n\tif (event.type === \"tool_execution_end\" && event.isError && isSingleGenericAbortTextContent(event.result.content)) {\n\t\tevent.result.content = replacementAbortContent(abortMessage);\n\t\treturn;\n\t}\n\n\tif (event.type !== \"message_start\" && event.type !== \"message_end\") return;\n\n\tif (\n\t\tevent.message.role === \"toolResult\" &&\n\t\tevent.message.isError &&\n\t\tisSingleGenericAbortTextContent(event.message.content)\n\t) {\n\t\tevent.message.content = replacementAbortContent(abortMessage);\n\t\treturn;\n\t}\n\n\tif (event.message.role === \"assistant\") {\n\t\tconst assistantMessage = event.message as AssistantMessage;\n\t\tif (assistantMessage.stopReason === \"aborted\") {\n\t\t\tassistantMessage.errorMessage = abortMessage;\n\t\t}\n\t}\n}\n\nexport function _applyProviderErrorGuidance(this: AgentSession, event: AgentEvent): void {\n\tif (event.type !== \"message_start\" && event.type !== \"message_update\" && event.type !== \"message_end\") return;\n\tif (event.message.role !== \"assistant\") return;\n\n\tconst assistantMessage = event.message as AssistantMessage;\n\tif (assistantMessage.stopReason !== \"error\" || !assistantMessage.errorMessage) return;\n\n\tassistantMessage.errorMessage = formatCodexProviderError(assistantMessage.provider, assistantMessage.errorMessage);\n}\n\n/** Resolve the pending retry promise */\n\nexport function _resolveRetry(this: AgentSession): void {\n\tif (this._retryResolve) {\n\t\tthis._retryResolve();\n\t\tthis._retryResolve = undefined;\n\t\tthis._retryPromise = undefined;\n\t}\n}\n\n/** Extract text content from a message */\n\nexport function _getUserMessageText(this: AgentSession, message: Message): string {\n\tif (message.role !== \"user\") return \"\";\n\tconst content = message.content;\n\tif (typeof content === \"string\") return content;\n\tconst textBlocks = content.filter((c) => c.type === \"text\");\n\treturn textBlocks.map((c) => (c as TextContent).text).join(\"\");\n}\n\n/** Find the last assistant message in agent state (including aborted ones) */\n\nexport function _findLastAssistantMessage(this: AgentSession): AssistantMessage | undefined {\n\tconst messages = this.agent.state.messages;\n\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\tconst msg = messages[i];\n\t\tif (msg.role === \"assistant\") {\n\t\t\treturn msg as AssistantMessage;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nexport function _replaceMessageInPlace(this: AgentSession, target: AgentMessage, replacement: AgentMessage): void {\n\t// Agent-core stores the finalized message object in its state before emitting message_end.\n\t// SessionManager persistence happens later in _processAgentEvent() with event.message.\n\t// Mutating this object in place keeps agent state, later turn/agent events, listeners,\n\t// and the eventual SessionManager.appendMessage(event.message) persistence in sync.\n\tif (target === replacement) {\n\t\treturn;\n\t}\n\n\tconst targetRecord = target as unknown as Record<string, unknown>;\n\tfor (const key of Object.keys(targetRecord)) {\n\t\tdelete targetRecord[key];\n\t}\n\tObject.assign(targetRecord, replacement);\n}\n\n/** Emit extension events based on agent events */\n\nexport async function _emitExtensionEvent(this: AgentSession, event: AgentEvent): Promise<void> {\n\tif (event.type === \"agent_start\") {\n\t\tif (this._agentRunAbortRequested && !this._admittedRecoveryTurn) this.agent.abort();\n\t\tthis._turnIndex = 0;\n\t\tawait this._extensionRunner.emit({ type: \"agent_start\" }, undefined, true);\n\t} else if (event.type === \"agent_end\") {\n\t\tawait this._extensionRunner.emit({ type: \"agent_end\", messages: event.messages }, undefined, true);\n\t} else if (event.type === \"turn_start\") {\n\t\tconst extensionEvent: TurnStartEvent = {\n\t\t\ttype: \"turn_start\",\n\t\t\tturnIndex: this._turnIndex,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t\tawait this._extensionRunner.emit(extensionEvent, undefined, true);\n\t} else if (event.type === \"turn_end\") {\n\t\t// finishTurn already dispatched the actionable boundary for loop-driven turns.\n\t\t// Synthetic turns (for example a run that fails before the loop's finishTurn)\n\t\t// still reach extensions here.\n\t\tif (event.message.role === \"assistant\" && !this._boundaryDispatchedMessages.delete(event.message)) {\n\t\t\tawait this._dispatchTurnEndBoundary(event.message, event.toolResults);\n\t\t}\n\t\tthis._turnIndex++;\n\t} else if (event.type === \"message_start\") {\n\t\tconst extensionEvent: MessageStartEvent = {\n\t\t\ttype: \"message_start\",\n\t\t\tmessage: event.message,\n\t\t};\n\t\tawait this._extensionRunner.emit(extensionEvent, undefined, true);\n\t} else if (event.type === \"message_update\") {\n\t\tconst extensionEvent: MessageUpdateEvent = {\n\t\t\ttype: \"message_update\",\n\t\t\tassistantMessageEvent: event.assistantMessageEvent,\n\t\t};\n\t\tawait this._extensionRunner.emit(extensionEvent, undefined, true);\n\t} else if (event.type === \"message_end\") {\n\t\tconst extensionEvent: MessageEndEvent = {\n\t\t\ttype: \"message_end\",\n\t\t\tmessage: event.message,\n\t\t};\n\t\t// Agent-core already completed this message; closing must drain its hooks and persistence.\n\t\tconst replacement = await this._extensionRunner.emitMessageEnd(extensionEvent, true);\n\t\tif (replacement) {\n\t\t\tthis._replaceMessageInPlace(event.message, normalizeMessageContent(replacement));\n\t\t}\n\t} else if (event.type === \"tool_execution_start\") {\n\t\tconst extensionEvent: ToolExecutionStartEvent = {\n\t\t\ttype: \"tool_execution_start\",\n\t\t\ttoolCallId: event.toolCallId,\n\t\t\ttoolName: event.toolName,\n\t\t\targs: event.args,\n\t\t};\n\t\tawait this._extensionRunner.emit(extensionEvent, undefined, true);\n\t} else if (event.type === \"tool_execution_update\") {\n\t\tconst extensionEvent: ToolExecutionUpdateEvent = {\n\t\t\ttype: \"tool_execution_update\",\n\t\t\ttoolCallId: event.toolCallId,\n\t\t\ttoolName: event.toolName,\n\t\t\targs: event.args,\n\t\t\tpartialResult: event.partialResult,\n\t\t};\n\t\tawait this._extensionRunner.emit(extensionEvent, undefined, true);\n\t} else if (event.type === \"tool_execution_end\") {\n\t\tconst extensionEvent: ToolExecutionEndEvent = {\n\t\t\ttype: \"tool_execution_end\",\n\t\t\ttoolCallId: event.toolCallId,\n\t\t\ttoolName: event.toolName,\n\t\t\tresult: event.result,\n\t\t\tisError: event.isError,\n\t\t\t...(event.durationMs === undefined ? {} : { durationMs: event.durationMs }),\n\t\t};\n\t\tawait this._extensionRunner.emit(extensionEvent, undefined, true);\n\t}\n}\n\n/**\n * Subscribe to agent events.\n * Session persistence is handled internally (saves messages on message_end).\n * Multiple listeners can be added. Returns unsubscribe function for this listener.\n */\n\nexport function subscribe(this: AgentSession, listener: AgentSessionEventListener): () => void {\n\tthis._eventListeners.push(listener);\n\n\t// Return unsubscribe function for this specific listener\n\treturn () => {\n\t\tconst index = this._eventListeners.indexOf(listener);\n\t\tif (index !== -1) {\n\t\t\tthis._eventListeners.splice(index, 1);\n\t\t}\n\t};\n}\n\n/** Disconnect from agent events during disposal. */\nexport function _disconnectFromAgent(this: AgentSession): void {\n\tif (this._unsubscribeAgent) {\n\t\tthis._unsubscribeAgent();\n\t\tthis._unsubscribeAgent = undefined;\n\t}\n}\n\n/**\n * Remove all listeners and disconnect from agent.\n * Call this when completely done with the session.\n */\n\nconst shutdownEventFailures = new WeakMap<AgentSession, Error[]>();\nconst sessionClosures = new WeakMap<AgentSession, Promise<void>>();\nconst sessionRetirements = new WeakMap<AgentSession, Promise<void>>();\n\n/** Shared terminal boundary for direct SDK disposal and runtime replacement. */\nexport function closeAgentSession(\n\tsession: AgentSession,\n\tevent: SessionShutdownEvent = { type: \"session_shutdown\", reason: \"quit\" },\n\tbeforeInvalidate?: () => void,\n): Promise<void> {\n\tconst handoff = event.reason !== \"quit\" && hasCallingSessionWork(session);\n\tconst existing = sessionClosures.get(session);\n\tif (existing) return (handoff && sessionRetirements.get(session)) || existing;\n\tlet resolveRetired!: () => void;\n\tlet rejectRetired!: (error: Error) => void;\n\tconst retirement = new Promise<void>((resolve, reject) => {\n\t\tresolveRetired = resolve;\n\t\trejectRetired = reject;\n\t});\n\tconst retired = { promise: retirement, resolve: resolveRetired, reject: rejectRetired };\n\tsession._disposed = true;\n\tsession._cacheWarmer?.cancel();\n\tconst closing = Promise.resolve().then(async () => {\n\t\tconst errors: Error[] = [];\n\t\tconst attempt = async (component: string, cleanup: () => void | Promise<void>) => {\n\t\t\ttry {\n\t\t\t\tawait cleanup();\n\t\t\t} catch (cause) {\n\t\t\t\tif (cause instanceof AggregateError)\n\t\t\t\t\terrors.push(...cause.errors.map((error) => new Error(component, { cause: error })));\n\t\t\t\telse errors.push(new Error(component, { cause }));\n\t\t\t}\n\t\t};\n\t\tawait attempt(\"lifetime\", () => abortSessionWork(session, event.reason === \"quit\"));\n\t\tawait attempt(\"shell abort\", () => abortBash.call(session));\n\t\tawait attempt(\"abort\", () => abortCurrentGeneration.call(session));\n\t\tawait attempt(\"reload rollback\", () => drainSessionReload(session));\n\t\tawait attempt(\"tasks\", () => session.closeSessionTasks());\n\t\tawait attempt(\"summary\", () => session.abortSessionSummary());\n\t\tif (handoff) {\n\t\t\tawait attempt(\"peer work\", () => drainSessionWork(session, true, true));\n\t\t\tawait attempt(\"retired authority\", () => session._extensionRunner.revokeAuthority());\n\t\t\tawait attempt(\"retired presentation\", () => session._extensionRunner.detachPresentation());\n\t\t\t// The successor binds as soon as retirement resolves, so host UI owned by this\n\t\t\t// session must be reset now; a later reset would clear the successor's UI.\n\t\t\tawait attempt(\"host subscriptions\", () => beforeInvalidate?.());\n\t\t\tif (errors.length)\n\t\t\t\tretired.reject(\n\t\t\t\t\tObject.assign(new AggregateError(errors, \"Session retirement failed\"), { code: \"ShutdownFailed\" }),\n\t\t\t\t);\n\t\t\telse retired.resolve();\n\t\t}\n\t\tawait attempt(\"terminal workflow summaries\", () => drainTerminalWorkflowSummaries(session));\n\t\tawait attempt(\"active work\", () => drainSessionWork(session));\n\t\tawait attempt(\"events\", async () => {\n\t\t\tawait session._agentEventQueue.catch(() => {});\n\t\t\tconst failures = shutdownEventFailures.get(session);\n\t\t\tif (failures?.length) throw new AggregateError(failures, \"Session event callbacks failed\");\n\t\t});\n\t\tawait attempt(\"extensions\", async () => {\n\t\t\tawait emitSessionShutdownEvent(session._extensionRunner, event);\n\t\t});\n\t\tawait attempt(\"messages\", () => prepareProtectedStreamingCustomMessagesForDisposal(session));\n\t\tawait attempt(\"shell persistence\", async () => await session._flushPendingBashMessages());\n\t\tawait attempt(\"settings\", async () => {\n\t\t\tawait session.settingsManager.flush();\n\t\t\tassertSettingsWrites(session);\n\t\t});\n\t\tif (ownedSettingsManagers.get(session.settingsManager) === session)\n\t\t\townedSettingsManagers.delete(session.settingsManager);\n\t\tif (!handoff) await attempt(\"host subscriptions\", () => beforeInvalidate?.());\n\t\tawait attempt(\"generation\", () => session._extensionRunner.invalidate(STALE_EXTENSION_CONTEXT_MESSAGE));\n\t\tawait attempt(\"subscriptions\", async () => {\n\t\t\tsession._disconnectFromAgent();\n\t\t\tsession._eventListeners = [];\n\t\t\tawait session._workflows?.disposeObservers(session._extensionRunner.getWorkflowActivitySnapshot());\n\t\t});\n\t\t// Empty stored IDs have no provider cache key; empty-key cleanup would close other sessions' caches.\n\t\tif (session.sessionId !== \"\") await attempt(\"provider\", () => cleanupSessionResources(session.sessionId));\n\t\tawait attempt(\"storage\", () => {\n\t\t\tsession._tempStorageLease?.release();\n\t\t\tsession._tempStorageLease = undefined;\n\t\t});\n\t\tawait attempt(\"session store\", async () => {\n\t\t\tconst store = ownedSessionStores.get(session);\n\t\t\townedSessionStores.delete(session);\n\t\t\tawait store?.close();\n\t\t});\n\t\tconst permit = ownedSessionPermits.get(session);\n\t\townedSessionPermits.delete(session);\n\t\tif (!errors.length) await attempt(\"admission\", () => permit?.());\n\t\tif (errors.length)\n\t\t\tthrow Object.assign(new AggregateError(errors, \"Session shutdown failed\"), { code: \"ShutdownFailed\" });\n\t});\n\tsessionClosures.set(session, closing);\n\tif (handoff) {\n\t\tsessionRetirements.set(session, retired.promise);\n\t\tvoid closing.catch(() => {});\n\t}\n\tsession._extensionRunner.sealHostInput();\n\treturn handoff ? retired.promise : closing;\n}\n\nexport function dispose(this: AgentSession): Promise<void> {\n\treturn closeAgentSession(this);\n}\n\n// =========================================================================\n// Read-only State Access\n// =========================================================================\n\n/** Full agent state */\n\nexport const agentSessionEventsMethods = {\n\t_close(this: AgentSession, event: SessionShutdownEvent, beforeInvalidate?: () => void) {\n\t\treturn closeAgentSession(this, event, beforeInvalidate);\n\t},\n\t_emit,\n\t_emitQueueUpdate,\n\t_handleAgentEvent,\n\t_createRetryPromiseForAgentEnd,\n\t_findLastAssistantInMessages,\n\t_processAgentEvent,\n\t_applyInterruptAbortMessage,\n\t_applyProviderErrorGuidance,\n\t_resolveRetry,\n\t_getUserMessageText,\n\t_findLastAssistantMessage,\n\t_replaceMessageInPlace,\n\t_emitExtensionEvent,\n\tsubscribe,\n\t_disconnectFromAgent,\n\tdispose,\n};\n"]}
1
+ {"version":3,"file":"agent-session-events.js","sourceRoot":"","sources":["../../src/core/agent-session-events.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AssistantMessage, Message, TextContent } from \"@bastani/pi-ai/compat\";\nimport { cleanupSessionResources } from \"@bastani/pi-ai/compat\";\nimport type { AgentEvent, AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport { abortBash } from \"./agent-session-bash.ts\";\nimport type { AgentSessionInternalSurface as AgentSession } from \"./agent-session-methods.ts\";\nimport { clearNestedToolCalls, recordNestedToolCalls } from \"./agent-session-nested-tools.js\";\nimport {\n\tisProtectedStreamingCustomMessage,\n\tmarkProtectedStreamingCustomMessageConsumed,\n\tmarkProtectedStreamingCustomMessagePersistenceFailed,\n\tpersistProtectedStreamingCustomMessage,\n\tprepareProtectedStreamingCustomMessagesForDisposal,\n\tretryConsumedProtectedStreamingCustomMessages,\n} from \"./agent-session-persistent-custom-messages.ts\";\nimport { abortCurrentGeneration } from \"./agent-session-queue-pause.ts\";\nimport {\n\ttype AgentSessionEvent,\n\ttype AgentSessionEventListener,\n\tcustomMessageExcludesContext,\n\tisSingleGenericAbortTextContent,\n\treplacementAbortContent,\n} from \"./agent-session-types.js\";\nimport { formatCodexProviderError } from \"./codex-errors.ts\";\nimport { formatCopilotProviderError } from \"./copilot-errors.ts\";\nimport type {\n\tMessageEndEvent,\n\tMessageStartEvent,\n\tMessageUpdateEvent,\n\tToolExecutionEndEvent,\n\tToolExecutionStartEvent,\n\tToolExecutionUpdateEvent,\n\tTurnStartEvent,\n} from \"./extensions/index.js\";\nimport { emitSessionShutdownEvent } from \"./extensions/runner.ts\";\nimport { STALE_EXTENSION_CONTEXT_MESSAGE } from \"./extensions/stale-context.ts\";\nimport type { SessionShutdownEvent } from \"./extensions/types.ts\";\nimport type { StageAdmittedCustomMessage } from \"./messages.ts\";\nimport { normalizeMessageContent } from \"./messages.ts\";\nimport {\n\tabortSessionWork,\n\tdrainSessionReload,\n\tdrainSessionWork,\n\thasCallingSessionWork,\n\townedSessionPermits,\n\townedSessionStores,\n} from \"./session-lifecycle-work.ts\";\nimport { assertSettingsWrites, ownedSettingsManagers } from \"./settings-write-ownership.ts\";\nimport { drainTerminalWorkflowSummaries } from \"./workflow-summary-lifecycle.ts\";\n\nexport function _emit(this: AgentSession, event: AgentSessionEvent): void {\n\tfor (const l of this._eventListeners) {\n\t\tl(event);\n\t}\n}\n\nexport function _emitQueueUpdate(this: AgentSession): void {\n\tthis._emit({\n\t\ttype: \"queue_update\",\n\t\tsteering: [...this._steeringMessages],\n\t\tfollowUp: [...this._followUpMessages],\n\t});\n}\n\nconst consumedQueuedMessageEvents = new WeakSet<object>();\n\n/** Internal handler for agent events - shared by subscribe and reconnect */\n\nexport function _handleAgentEvent(this: AgentSession, event: AgentEvent): Promise<void> | void {\n\tif (event.type === \"message_start\" && event.message.role === \"toolResult\")\n\t\trecordNestedToolCalls(this, event.message);\n\telse if (event.type === \"agent_end\") clearNestedToolCalls(this);\n\t// Create retry promise synchronously before queueing async processing.\n\t// Agent.emit() calls this handler synchronously, and prompt() calls waitForRetry()\n\t// as soon as agent.prompt() resolves. If _retryPromise is created only inside\n\t// _processAgentEvent, slow earlier queued events can delay agent_end processing\n\t// and waitForRetry() can miss the in-flight retry.\n\tthis._createRetryPromiseForAgentEnd(event);\n\t// Agent-core has already consumed this message. Reflect admission before an\n\t// Escape/abort can restore it from a stale queue while earlier hooks settle.\n\tif (event.type === \"message_start\" && event.message.role === \"user\") {\n\t\tconst text = this._getUserMessageText(event.message);\n\t\tif (text) {\n\t\t\tconst queue = [this._steeringMessages, this._followUpMessages].find((messages) => messages.includes(text));\n\t\t\tif (queue) {\n\t\t\t\tqueue.splice(queue.indexOf(text), 1);\n\t\t\t\tthis._admittedQueuedMessageAwaitingReply = text;\n\t\t\t\tconsumedQueuedMessageEvents.add(event);\n\t\t\t}\n\t\t}\n\t}\n\tconst awaitProtectedPersistence =\n\t\tevent.type === \"message_end\" && event.message.role === \"custom\"\n\t\t\t? markProtectedStreamingCustomMessageConsumed(this, event.message)\n\t\t\t: false;\n\tif (event.type === \"message_end\") this._messagesAwaitingPersistence.add(event.message);\n\n\tconst processing = this._agentEventQueue.then(\n\t\t() => this._processAgentEvent(event),\n\t\t() => this._processAgentEvent(event),\n\t);\n\tthis._agentEventQueue = processing;\n\n\t// Keep queue alive if an event handler fails. Per event, agent-core awaits only\n\t// protected persistence and fallback reconciliation; other listener work is\n\t// nonblocking for that event. The queue as a whole is still drained before each\n\t// provider request (`prepareRequest` in agent-session-boundaries.ts): message_end\n\t// handlers may replace the message that gets persisted, and the request is built\n\t// from the persisted canonical projection, so every queued handler gates the next\n\t// request rather than only the persistence step.\n\tprocessing.catch((error) => {\n\t\t// #3105: callbacks interrupted by terminal disposal remain observable at shutdown.\n\t\tif (this._disposed) {\n\t\t\tconst failures = shutdownEventFailures.get(this) ?? [];\n\t\t\tfailures.push(error instanceof Error ? error : new Error(String(error)));\n\t\t\tshutdownEventFailures.set(this, failures);\n\t\t}\n\t});\n\tif (\n\t\tawaitProtectedPersistence ||\n\t\t// #3105: only queued custom input needs this boundary; ordinary turn listeners\n\t\t// must remain nonblocking during fallback settlement.\n\t\t(event.type === \"turn_end\" && this._pendingCustomMessages.length > 0) ||\n\t\t(event.type === \"agent_end\" && (this._fallbackModels.length > 0 || this._fallbackOriginModel !== undefined))\n\t)\n\t\treturn processing.catch(() => {});\n}\n\nexport function _createRetryPromiseForAgentEnd(this: AgentSession, event: AgentEvent): void {\n\tif (event.type !== \"agent_end\" || this._retryPromise || this._agentRunAbortRequested) {\n\t\treturn;\n\t}\n\n\tconst settings = this.settingsManager.getRetrySettings();\n\tif (!settings.enabled && this._fallbackModels.length === 0) {\n\t\treturn;\n\t}\n\n\tconst lastAssistant = this._findLastAssistantInMessages(event.messages);\n\tif (!lastAssistant) {\n\t\treturn;\n\t}\n\n\tconst fallbackable =\n\t\ttypeof this._isFallbackableError === \"function\"\n\t\t\t? this._isFallbackableError(lastAssistant)\n\t\t\t: this._isRetryableError(lastAssistant);\n\tconst retryable = this._isRetryableError(lastAssistant);\n\tconst shouldRetry =\n\t\tretryable || fallbackable || this._isEmptyCompletion(lastAssistant) || this._isSafetyRefusal(lastAssistant);\n\tif (!shouldRetry) {\n\t\treturn;\n\t}\n\n\tthis._retryPromise = new Promise((resolve) => {\n\t\tthis._retryResolve = resolve;\n\t});\n}\n\nexport function _findLastAssistantInMessages(\n\tthis: AgentSession,\n\tmessages: AgentMessage[],\n): AssistantMessage | undefined {\n\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\tconst message = messages[i];\n\t\tif (message.role === \"assistant\") {\n\t\t\treturn message as AssistantMessage;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nexport async function _processAgentEvent(this: AgentSession, event: AgentEvent): Promise<void> {\n\tconst protectedMessage =\n\t\tevent.type === \"message_end\" &&\n\t\tevent.message.role === \"custom\" &&\n\t\tisProtectedStreamingCustomMessage(this, event.message)\n\t\t\t? event.message\n\t\t\t: undefined;\n\t// Public notifications remain serialized behind extension events.\n\tif (event.type === \"agent_start\") {\n\t\t// A caller replacement prepared for a turn that never reached its provider\n\t\t// request must not leak into this run's first request. `prepareRequest`\n\t\t// awaits this queue, so the reset lands before the run's first projection.\n\t\tthis._callerReplacedNextRequestContext = false;\n\t}\n\tif (event.type === \"message_start\" && event.message.role === \"user\") {\n\t\tthis._overflowRecoveryAttempted = false;\n\t\tthis._recoverableLengthRecoveryAttempted = false;\n\t\tthis._fallbackAttemptedKeys.clear();\n\t\tthis._fallbackBlockedModels.length = 0;\n\t\tif (consumedQueuedMessageEvents.delete(event)) this._emitQueueUpdate();\n\t}\n\n\tthis._applyInterruptAbortMessage(event);\n\tthis._applyProviderErrorGuidance(event);\n\n\ttry {\n\t\tawait this._emitExtensionEvent(event);\n\t\tif (event.type !== \"message_end\") this._emit(event);\n\t} finally {\n\t\t// Agent-core has consumed this protected input already. Its durability\n\t\t// boundary cannot be skipped by a fallible extension or session listener.\n\t\tif (protectedMessage !== undefined) {\n\t\t\ttry {\n\t\t\t\tawait persistProtectedStreamingCustomMessage(this, protectedMessage);\n\t\t\t} catch {\n\t\t\t\tmarkProtectedStreamingCustomMessagePersistenceFailed(this, protectedMessage);\n\t\t\t}\n\t\t\tawait retryConsumedProtectedStreamingCustomMessages(this);\n\t\t}\n\t}\n\tif (event.type === \"turn_end\") {\n\t\tthis._lastAssistantToolResults = event.toolResults;\n\t\tawait this._flushPendingCustomMessages();\n\t}\n\n\t// Handle session persistence\n\tif (event.type === \"message_end\") {\n\t\tlet entryId: string | undefined;\n\t\t// Check if this is a custom message from extensions\n\t\tif (event.message.role === \"custom\") {\n\t\t\tconst admitted = event.message as StageAdmittedCustomMessage;\n\t\t\tif (protectedMessage === undefined) {\n\t\t\t\tentryId = await this.sessionManager.appendCustomMessageEntry(\n\t\t\t\t\tevent.message.customType,\n\t\t\t\t\tevent.message.content,\n\t\t\t\t\tevent.message.display,\n\t\t\t\t\tevent.message.details,\n\t\t\t\t\tcustomMessageExcludesContext(event.message),\n\t\t\t\t\tundefined,\n\t\t\t\t\tadmitted.stageAdmissionKey,\n\t\t\t\t);\n\t\t\t}\n\t\t} else if (\n\t\t\tevent.message.role === \"system\" ||\n\t\t\tevent.message.role === \"user\" ||\n\t\t\tevent.message.role === \"assistant\" ||\n\t\t\tevent.message.role === \"toolResult\"\n\t\t) {\n\t\t\t// Regular LLM message - persist as SessionMessageEntry\n\t\t\tentryId = await this.sessionManager.appendMessage(event.message);\n\t\t}\n\t\tif (entryId) this._entryIdsByMessage.set(event.message, entryId);\n\t\tif (entryId && event.message.role === \"custom\") {\n\t\t\tconst pendingIndex = this._pendingNextTurnMessages.indexOf(event.message);\n\t\t\tif (pendingIndex >= 0) this._pendingNextTurnMessages.splice(pendingIndex, 1);\n\t\t}\n\t\t// Context refreshes must retain admitted messages until their async append commits.\n\t\tthis._messagesAwaitingPersistence.delete(event.message);\n\t\tthis._emit(event);\n\t\t// Other message types (bashExecution, branchSummary) are persisted elsewhere\n\n\t\t// Track assistant message for auto-compaction (checked on agent_end)\n\t\tif (event.message.role === \"assistant\") {\n\t\t\tthis._lastAssistantMessage = event.message;\n\n\t\t\tconst assistantMsg = event.message as AssistantMessage;\n\t\t\t// A length stop preserves its one-shot recovery budget. Reset both\n\t\t\t// recovery kinds only once a non-truncated response completes.\n\t\t\tconst assistantFailed =\n\t\t\t\tassistantMsg.stopReason === \"error\" ||\n\t\t\t\tthis._isEmptyCompletion(assistantMsg) ||\n\t\t\t\tthis._isSafetyRefusal(assistantMsg);\n\t\t\tif (!assistantFailed && assistantMsg.stopReason !== \"length\") {\n\t\t\t\tthis._overflowRecoveryAttempted = false;\n\t\t\t\tthis._recoverableLengthRecoveryAttempted = false;\n\t\t\t}\n\t\t\tif (!assistantFailed) {\n\t\t\t\tthis._contextOverflowUnresolved = false;\n\t\t\t\tthis._outputBudgetErrorContinuationAttempts = 0;\n\t\t\t}\n\t\t\tif (!assistantFailed && assistantMsg.stopReason === \"stop\") {\n\t\t\t\tthis._fallbackAttemptedKeys.clear();\n\t\t\t\tthis._fallbackBlockedModels.length = 0;\n\t\t\t}\n\n\t\t\t// A non-truncated assistant response means the length-continuation loop\n\t\t\t// made progress (or the turn completed cleanly), so reset the bounded\n\t\t\t// output-cap continuation counter.\n\t\t\tif (assistantMsg.stopReason !== \"length\") {\n\t\t\t\tthis._lengthContinuationAttempts = 0;\n\t\t\t}\n\n\t\t\t// Reset retry counter immediately on successful assistant response\n\t\t\t// This prevents accumulation across multiple LLM calls within a turn\n\t\t\tif (!assistantFailed && this._retryAttempt > 0) {\n\t\t\t\tthis._emit({\n\t\t\t\t\ttype: \"auto_retry_end\",\n\t\t\t\t\tsuccess: true,\n\t\t\t\t\tattempt: this._retryAttempt,\n\t\t\t\t});\n\t\t\t\tthis._retryAttempt = 0;\n\t\t\t}\n\t\t}\n\t}\n\n\t// A transient hidden-reconciliation write failure retries independently of\n\t// provider/card delivery and can never create another visible lifecycle card.\n\tawait retryConsumedProtectedStreamingCustomMessages(this);\n\n\t// Check auto-retry and auto-compaction after agent completes\n\tif (event.type === \"agent_end\" && this._lastAssistantMessage) {\n\t\tconst msg = this._lastAssistantMessage;\n\t\tthis._lastAssistantMessage = undefined;\n\t\tif (this._agentRunAbortRequested) {\n\t\t\tthis._resolveRetry();\n\t\t\treturn;\n\t\t}\n\t\tconst postToolPreflightFailed =\n\t\t\tthis._postToolCompactionPreflightError !== undefined &&\n\t\t\tmsg.errorMessage === this._postToolCompactionPreflightError;\n\n\t\t// Check provider/model failures before compaction. Fallback eligibility is\n\t\t// broader than same-model retry eligibility: auth and request-incompatible\n\t\t// failures advance without re-requesting the failed model.\n\t\tconst fallbackableError =\n\t\t\t!postToolPreflightFailed &&\n\t\t\t(typeof this._isFallbackableError === \"function\"\n\t\t\t\t? this._isFallbackableError(msg)\n\t\t\t\t: this._isRetryableError(msg));\n\t\tconst retryableError = !postToolPreflightFailed && this._isRetryableError(msg);\n\t\tconst emptyCompletion =\n\t\t\t!postToolPreflightFailed && !retryableError && !fallbackableError && this._isEmptyCompletion(msg);\n\t\tconst safetyRefusal =\n\t\t\t!postToolPreflightFailed &&\n\t\t\t!retryableError &&\n\t\t\t!fallbackableError &&\n\t\t\t!emptyCompletion &&\n\t\t\tthis._isSafetyRefusal(msg);\n\t\tconst modelFailure = retryableError || fallbackableError || emptyCompletion || safetyRefusal;\n\t\tlet settleAfterTurn = !modelFailure;\n\t\tif (modelFailure) {\n\t\t\tif (emptyCompletion && !msg.errorMessage) {\n\t\t\t\t// Surface a clear reason in the retry banner; empty completions carry no\n\t\t\t\t// provider error message of their own.\n\t\t\t\tmsg.errorMessage = \"Provider returned an empty completion\";\n\t\t\t} else if (safetyRefusal && !msg.errorMessage) {\n\t\t\t\tmsg.errorMessage = \"Provider returned a canned safety refusal\";\n\t\t\t}\n\t\t\tconst didRetry = await this._handleRetryableError(msg);\n\t\t\tif (didRetry) return; // Retry was initiated, don't proceed to compaction\n\t\t\tsettleAfterTurn = true;\n\t\t}\n\t\tif (this._agentRunAbortRequested) return;\n\n\t\tthis._resolveRetry();\n\t\tthis._contextOverflowUnresolved = false;\n\t\tawait this._checkCompaction(msg);\n\t\tif (this._agentRunAbortRequested) return;\n\n\t\t// Compaction owns context overflow first. Only once it is disabled, fails,\n\t\t// or reports the overflow unresolved may the chain spend a candidate on a\n\t\t// larger-context model, so a compactable first overflow costs nothing.\n\t\tif (this._contextOverflowUnresolved) {\n\t\t\tthis._contextOverflowUnresolved = false;\n\t\t\tif (typeof this._trySwitchToFallbackModel === \"function\" && (await this._trySwitchToFallbackModel(msg)))\n\t\t\t\treturn;\n\t\t\tsettleAfterTurn = true;\n\t\t}\n\t\t// Keep a fallback lifecycle open across the compact-and-continue probe that\n\t\t// belongs to this user turn, then settle it without changing the active model.\n\t\tif (settleAfterTurn && this._pendingPostCompactionContinuation === undefined) {\n\t\t\tif (typeof this._settleFallbackModelScope === \"function\") await this._settleFallbackModelScope();\n\t\t}\n\t\t// Launched last so the fallback lifecycle wins: a switch above returns before\n\t\t// this line. Guarded like the fallback methods above because fallback suites\n\t\t// drive this function on a synthetic session.\n\t\tif (event.type === \"agent_end\" && typeof this._maybeGenerateSessionSummary === \"function\")\n\t\t\tvoid this._maybeGenerateSessionSummary();\n\t}\n}\n\nexport function _applyInterruptAbortMessage(this: AgentSession, event: AgentEvent): void {\n\tconst abortMessage = this._activeInterruptAbortMessage;\n\tif (!abortMessage) return;\n\n\tif (event.type === \"tool_execution_end\" && event.isError && isSingleGenericAbortTextContent(event.result.content)) {\n\t\tevent.result.content = replacementAbortContent(abortMessage);\n\t\treturn;\n\t}\n\n\tif (event.type !== \"message_start\" && event.type !== \"message_end\") return;\n\n\tif (\n\t\tevent.message.role === \"toolResult\" &&\n\t\tevent.message.isError &&\n\t\tisSingleGenericAbortTextContent(event.message.content)\n\t) {\n\t\tevent.message.content = replacementAbortContent(abortMessage);\n\t\treturn;\n\t}\n\n\tif (event.message.role === \"assistant\") {\n\t\tconst assistantMessage = event.message as AssistantMessage;\n\t\tif (assistantMessage.stopReason === \"aborted\") {\n\t\t\tassistantMessage.errorMessage = abortMessage;\n\t\t}\n\t}\n}\n\nexport function _applyProviderErrorGuidance(this: AgentSession, event: AgentEvent): void {\n\tif (event.type !== \"message_start\" && event.type !== \"message_update\" && event.type !== \"message_end\") return;\n\tif (event.message.role !== \"assistant\") return;\n\n\tconst assistantMessage = event.message as AssistantMessage;\n\tif (assistantMessage.stopReason !== \"error\" || !assistantMessage.errorMessage) return;\n\n\tassistantMessage.errorMessage = formatCopilotProviderError(\n\t\tassistantMessage.model,\n\t\tformatCodexProviderError(assistantMessage.provider, assistantMessage.errorMessage),\n\t);\n}\n\n/** Resolve the pending retry promise */\n\nexport function _resolveRetry(this: AgentSession): void {\n\tif (this._retryResolve) {\n\t\tthis._retryResolve();\n\t\tthis._retryResolve = undefined;\n\t\tthis._retryPromise = undefined;\n\t}\n}\n\n/** Extract text content from a message */\n\nexport function _getUserMessageText(this: AgentSession, message: Message): string {\n\tif (message.role !== \"user\") return \"\";\n\tconst content = message.content;\n\tif (typeof content === \"string\") return content;\n\tconst textBlocks = content.filter((c) => c.type === \"text\");\n\treturn textBlocks.map((c) => (c as TextContent).text).join(\"\");\n}\n\n/** Find the last assistant message in agent state (including aborted ones) */\n\nexport function _findLastAssistantMessage(this: AgentSession): AssistantMessage | undefined {\n\tconst messages = this.agent.state.messages;\n\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\tconst msg = messages[i];\n\t\tif (msg.role === \"assistant\") {\n\t\t\treturn msg as AssistantMessage;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nexport function _replaceMessageInPlace(this: AgentSession, target: AgentMessage, replacement: AgentMessage): void {\n\t// Agent-core stores the finalized message object in its state before emitting message_end.\n\t// SessionManager persistence happens later in _processAgentEvent() with event.message.\n\t// Mutating this object in place keeps agent state, later turn/agent events, listeners,\n\t// and the eventual SessionManager.appendMessage(event.message) persistence in sync.\n\tif (target === replacement) {\n\t\treturn;\n\t}\n\n\tconst targetRecord = target as unknown as Record<string, unknown>;\n\tfor (const key of Object.keys(targetRecord)) {\n\t\tdelete targetRecord[key];\n\t}\n\tObject.assign(targetRecord, replacement);\n}\n\n/** Emit extension events based on agent events */\n\nexport async function _emitExtensionEvent(this: AgentSession, event: AgentEvent): Promise<void> {\n\tif (event.type === \"agent_start\") {\n\t\tif (this._agentRunAbortRequested && !this._admittedRecoveryTurn) this.agent.abort();\n\t\tthis._turnIndex = 0;\n\t\tawait this._extensionRunner.emit({ type: \"agent_start\" }, undefined, true);\n\t} else if (event.type === \"agent_end\") {\n\t\tawait this._extensionRunner.emit({ type: \"agent_end\", messages: event.messages }, undefined, true);\n\t} else if (event.type === \"turn_start\") {\n\t\tconst extensionEvent: TurnStartEvent = {\n\t\t\ttype: \"turn_start\",\n\t\t\tturnIndex: this._turnIndex,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t\tawait this._extensionRunner.emit(extensionEvent, undefined, true);\n\t} else if (event.type === \"turn_end\") {\n\t\t// finishTurn already dispatched the actionable boundary for loop-driven turns.\n\t\t// Synthetic turns (for example a run that fails before the loop's finishTurn)\n\t\t// still reach extensions here.\n\t\tif (event.message.role === \"assistant\" && !this._boundaryDispatchedMessages.delete(event.message)) {\n\t\t\tawait this._dispatchTurnEndBoundary(event.message, event.toolResults);\n\t\t}\n\t\tthis._turnIndex++;\n\t} else if (event.type === \"message_start\") {\n\t\tconst extensionEvent: MessageStartEvent = {\n\t\t\ttype: \"message_start\",\n\t\t\tmessage: event.message,\n\t\t};\n\t\tawait this._extensionRunner.emit(extensionEvent, undefined, true);\n\t} else if (event.type === \"message_update\") {\n\t\tconst extensionEvent: MessageUpdateEvent = {\n\t\t\ttype: \"message_update\",\n\t\t\tassistantMessageEvent: event.assistantMessageEvent,\n\t\t};\n\t\tawait this._extensionRunner.emit(extensionEvent, undefined, true);\n\t} else if (event.type === \"message_end\") {\n\t\tconst extensionEvent: MessageEndEvent = {\n\t\t\ttype: \"message_end\",\n\t\t\tmessage: event.message,\n\t\t};\n\t\t// Agent-core already completed this message; closing must drain its hooks and persistence.\n\t\tconst replacement = await this._extensionRunner.emitMessageEnd(extensionEvent, true);\n\t\tif (replacement) {\n\t\t\tthis._replaceMessageInPlace(event.message, normalizeMessageContent(replacement));\n\t\t}\n\t} else if (event.type === \"tool_execution_start\") {\n\t\tconst extensionEvent: ToolExecutionStartEvent = {\n\t\t\ttype: \"tool_execution_start\",\n\t\t\ttoolCallId: event.toolCallId,\n\t\t\ttoolName: event.toolName,\n\t\t\targs: event.args,\n\t\t};\n\t\tawait this._extensionRunner.emit(extensionEvent, undefined, true);\n\t} else if (event.type === \"tool_execution_update\") {\n\t\tconst extensionEvent: ToolExecutionUpdateEvent = {\n\t\t\ttype: \"tool_execution_update\",\n\t\t\ttoolCallId: event.toolCallId,\n\t\t\ttoolName: event.toolName,\n\t\t\targs: event.args,\n\t\t\tpartialResult: event.partialResult,\n\t\t};\n\t\tawait this._extensionRunner.emit(extensionEvent, undefined, true);\n\t} else if (event.type === \"tool_execution_end\") {\n\t\tconst extensionEvent: ToolExecutionEndEvent = {\n\t\t\ttype: \"tool_execution_end\",\n\t\t\ttoolCallId: event.toolCallId,\n\t\t\ttoolName: event.toolName,\n\t\t\tresult: event.result,\n\t\t\tisError: event.isError,\n\t\t\t...(event.durationMs === undefined ? {} : { durationMs: event.durationMs }),\n\t\t};\n\t\tawait this._extensionRunner.emit(extensionEvent, undefined, true);\n\t}\n}\n\n/**\n * Subscribe to agent events.\n * Session persistence is handled internally (saves messages on message_end).\n * Multiple listeners can be added. Returns unsubscribe function for this listener.\n */\n\nexport function subscribe(this: AgentSession, listener: AgentSessionEventListener): () => void {\n\tthis._eventListeners.push(listener);\n\n\t// Return unsubscribe function for this specific listener\n\treturn () => {\n\t\tconst index = this._eventListeners.indexOf(listener);\n\t\tif (index !== -1) {\n\t\t\tthis._eventListeners.splice(index, 1);\n\t\t}\n\t};\n}\n\n/** Disconnect from agent events during disposal. */\nexport function _disconnectFromAgent(this: AgentSession): void {\n\tif (this._unsubscribeAgent) {\n\t\tthis._unsubscribeAgent();\n\t\tthis._unsubscribeAgent = undefined;\n\t}\n}\n\n/**\n * Remove all listeners and disconnect from agent.\n * Call this when completely done with the session.\n */\n\nconst shutdownEventFailures = new WeakMap<AgentSession, Error[]>();\nconst sessionClosures = new WeakMap<AgentSession, Promise<void>>();\nconst sessionRetirements = new WeakMap<AgentSession, Promise<void>>();\n\n/** Shared terminal boundary for direct SDK disposal and runtime replacement. */\nexport function closeAgentSession(\n\tsession: AgentSession,\n\tevent: SessionShutdownEvent = { type: \"session_shutdown\", reason: \"quit\" },\n\tbeforeInvalidate?: () => void,\n): Promise<void> {\n\tconst handoff = event.reason !== \"quit\" && hasCallingSessionWork(session);\n\tconst existing = sessionClosures.get(session);\n\tif (existing) return (handoff && sessionRetirements.get(session)) || existing;\n\tlet resolveRetired!: () => void;\n\tlet rejectRetired!: (error: Error) => void;\n\tconst retirement = new Promise<void>((resolve, reject) => {\n\t\tresolveRetired = resolve;\n\t\trejectRetired = reject;\n\t});\n\tconst retired = { promise: retirement, resolve: resolveRetired, reject: rejectRetired };\n\tsession._disposed = true;\n\tsession._cacheWarmer?.cancel();\n\tconst closing = Promise.resolve().then(async () => {\n\t\tconst errors: Error[] = [];\n\t\tconst attempt = async (component: string, cleanup: () => void | Promise<void>) => {\n\t\t\ttry {\n\t\t\t\tawait cleanup();\n\t\t\t} catch (cause) {\n\t\t\t\tif (cause instanceof AggregateError)\n\t\t\t\t\terrors.push(...cause.errors.map((error) => new Error(component, { cause: error })));\n\t\t\t\telse errors.push(new Error(component, { cause }));\n\t\t\t}\n\t\t};\n\t\tawait attempt(\"lifetime\", () => abortSessionWork(session, event.reason === \"quit\"));\n\t\tawait attempt(\"shell abort\", () => abortBash.call(session));\n\t\tawait attempt(\"abort\", () => abortCurrentGeneration.call(session));\n\t\tawait attempt(\"reload rollback\", () => drainSessionReload(session));\n\t\tawait attempt(\"tasks\", () => session.closeSessionTasks());\n\t\tawait attempt(\"summary\", () => session.abortSessionSummary());\n\t\tif (handoff) {\n\t\t\tawait attempt(\"peer work\", () => drainSessionWork(session, true, true));\n\t\t\tawait attempt(\"retired authority\", () => session._extensionRunner.revokeAuthority());\n\t\t\tawait attempt(\"retired presentation\", () => session._extensionRunner.detachPresentation());\n\t\t\t// The successor binds as soon as retirement resolves, so host UI owned by this\n\t\t\t// session must be reset now; a later reset would clear the successor's UI.\n\t\t\tawait attempt(\"host subscriptions\", () => beforeInvalidate?.());\n\t\t\tif (errors.length)\n\t\t\t\tretired.reject(\n\t\t\t\t\tObject.assign(new AggregateError(errors, \"Session retirement failed\"), { code: \"ShutdownFailed\" }),\n\t\t\t\t);\n\t\t\telse retired.resolve();\n\t\t}\n\t\tawait attempt(\"terminal workflow summaries\", () => drainTerminalWorkflowSummaries(session));\n\t\tawait attempt(\"active work\", () => drainSessionWork(session));\n\t\tawait attempt(\"events\", async () => {\n\t\t\tawait session._agentEventQueue.catch(() => {});\n\t\t\tconst failures = shutdownEventFailures.get(session);\n\t\t\tif (failures?.length) throw new AggregateError(failures, \"Session event callbacks failed\");\n\t\t});\n\t\tawait attempt(\"extensions\", async () => {\n\t\t\tawait emitSessionShutdownEvent(session._extensionRunner, event);\n\t\t});\n\t\tawait attempt(\"messages\", () => prepareProtectedStreamingCustomMessagesForDisposal(session));\n\t\tawait attempt(\"shell persistence\", async () => await session._flushPendingBashMessages());\n\t\tawait attempt(\"settings\", async () => {\n\t\t\tawait session.settingsManager.flush();\n\t\t\tassertSettingsWrites(session);\n\t\t});\n\t\tif (ownedSettingsManagers.get(session.settingsManager) === session)\n\t\t\townedSettingsManagers.delete(session.settingsManager);\n\t\tif (!handoff) await attempt(\"host subscriptions\", () => beforeInvalidate?.());\n\t\tawait attempt(\"generation\", () => session._extensionRunner.invalidate(STALE_EXTENSION_CONTEXT_MESSAGE));\n\t\tawait attempt(\"subscriptions\", async () => {\n\t\t\tsession._disconnectFromAgent();\n\t\t\tsession._eventListeners = [];\n\t\t\tawait session._workflows?.disposeObservers(session._extensionRunner.getWorkflowActivitySnapshot());\n\t\t});\n\t\t// Empty stored IDs have no provider cache key; empty-key cleanup would close other sessions' caches.\n\t\tif (session.sessionId !== \"\") await attempt(\"provider\", () => cleanupSessionResources(session.sessionId));\n\t\tawait attempt(\"storage\", () => {\n\t\t\tsession._tempStorageLease?.release();\n\t\t\tsession._tempStorageLease = undefined;\n\t\t});\n\t\tawait attempt(\"session store\", async () => {\n\t\t\tconst store = ownedSessionStores.get(session);\n\t\t\townedSessionStores.delete(session);\n\t\t\tawait store?.close();\n\t\t});\n\t\tconst permit = ownedSessionPermits.get(session);\n\t\townedSessionPermits.delete(session);\n\t\tif (!errors.length) await attempt(\"admission\", () => permit?.());\n\t\tif (errors.length)\n\t\t\tthrow Object.assign(new AggregateError(errors, \"Session shutdown failed\"), { code: \"ShutdownFailed\" });\n\t});\n\tsessionClosures.set(session, closing);\n\tif (handoff) {\n\t\tsessionRetirements.set(session, retired.promise);\n\t\tvoid closing.catch(() => {});\n\t}\n\tsession._extensionRunner.sealHostInput();\n\treturn handoff ? retired.promise : closing;\n}\n\nexport function dispose(this: AgentSession): Promise<void> {\n\treturn closeAgentSession(this);\n}\n\n// =========================================================================\n// Read-only State Access\n// =========================================================================\n\n/** Full agent state */\n\nexport const agentSessionEventsMethods = {\n\t_close(this: AgentSession, event: SessionShutdownEvent, beforeInvalidate?: () => void) {\n\t\treturn closeAgentSession(this, event, beforeInvalidate);\n\t},\n\t_emit,\n\t_emitQueueUpdate,\n\t_handleAgentEvent,\n\t_createRetryPromiseForAgentEnd,\n\t_findLastAssistantInMessages,\n\t_processAgentEvent,\n\t_applyInterruptAbortMessage,\n\t_applyProviderErrorGuidance,\n\t_resolveRetry,\n\t_getUserMessageText,\n\t_findLastAssistantMessage,\n\t_replaceMessageInPlace,\n\t_emitExtensionEvent,\n\tsubscribe,\n\t_disconnectFromAgent,\n\tdispose,\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session-extension-bindings.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-extension-bindings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-session-extension-bindings.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-extension-bindings.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,2BAA2B,IAAI,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE9F,OAAO,EAGN,KAAK,mBAAmB,EAExB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAQ7F,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAYxD,OAAO,KAAK,EAAE,4BAA4B,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAA0B,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAuBnF,cAAM,wBAAwB;IAC7B,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyC;IACjE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAyC;IACtE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAyB;IACvD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,QAAQ,CAAC,mBAAmB,EAAE,4BAA4B,CAAC;IAC3D,OAAO,CAAC,gBAAgB,CAAS;IACjC,QAAQ,CAAC,WAAW,cAAqB;IACzC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,SAAS,CAAS;IAE1B,YACC,cAAc,EAAE,cAAc,EAC9B,MAAM,EAAE,eAAe,EACvB,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,MAAM,OAAO,EACvB,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,EAMrC;IAED,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAE9C;IAED,UAAU,CAAC,MAAM,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAEnD;IAED,WAAW,CAAC,MAAM,EAAE,MAAM,IAAI,GAAG,IAAI,CAgBpC;IAED,eAAe,IAAI,IAAI,CAItB;IAED,mBAAmB,IAAI,IAAI,CAI1B;IAEK,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAEpC;IAEK,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAEtC;IAED,OAAO,IAAI,IAAI,CAKd;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAE7B;YAEa,OAAO;IAYrB,OAAO,CAAC,MAAM;CAOd;AA0GD,wBAAsB,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmCnG;AAED,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9E;AAaD,wBAAsB,6BAA6B,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAOnH;AAED,wBAAgB,2BAA2B,CAC1C,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC,GACrD,KAAK,CAAC;IACR,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,YAAY,CAAC;CACvB,CAAC,CAED;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAOzF;AAgBD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,CAgBzF;AAED,wBAAsB,+BAA+B,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAEvF;AAED,wBAAsB,gCAAgC,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BxF;AAED,wBAAgB,kBAAkB,CACjC,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,eAAe,EACvB,WAAW,CAAC,EAAE,wBAAwB,EACtC,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,EACpC,cAAc,CAAC,EAAE,mBAAmB,GAClC,IAAI,CA4UN;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAKnG;AAiUD,qGAAqG;AACrG,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BhH;AAMD;;;GAGG;AAEH,eAAO,MAAM,oCAAoC;;;;;;;;;;;;CAYhD,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { basename, dirname } from "node:path";
2
2
  import { clampThinkingLevel, resetApiProviders } from "@bastani/pi-ai/compat";
3
+ import { resolveWorkflowStageDeliveryTarget } from "./agent-session-delivery-forwarding.js";
3
4
  import { executeNestedToolCall, getCallableTools } from "./agent-session-nested-tools.js";
4
5
  import { activatesAfterRecordedLoadout, preservesInitialToolLoadout, recordedToolLoadout, } from "./agent-session-state.js";
5
6
  import { replaceSessionTaskOwner } from "./agent-session-tasks.js";
@@ -271,12 +272,24 @@ export function getExtensionSourceLabel(extensionPath) {
271
272
  const name = base.replace(/\.(ts|js)$/, "");
272
273
  return `extension:${name}`;
273
274
  }
275
+ /**
276
+ * Child session defaults from this session's live successor (#3981). A child queued or restored by a workflow stage
277
+ * session can start after model fallback replaced that session; it then inherits the replacement's current model,
278
+ * settings and tool ceiling. A session with no successor (it was not replaced, or it closed for good) answers with its
279
+ * own last state, which is what it had when it admitted the child.
280
+ */
281
+ function liveChildSessionOptions(session) {
282
+ const own = session._childSessionOptions;
283
+ if (!own)
284
+ return undefined;
285
+ return (options) => (resolveWorkflowStageDeliveryTarget(session)._childSessionOptions ?? own)(options);
286
+ }
274
287
  export function _applyExtensionBindings(runner) {
275
288
  runner.setHostBindings(this._extensionHumanInput, this._extensionDiagnosticListener, humanInputBindingRevisions.get(this));
276
289
  runner.setUIPromptObserver(uiPromptBindings.get(this));
277
290
  runner.setUIContext(this._extensionUIContext, this._extensionMode, presentationOnlyBindings.get(this) ?? false);
278
291
  runner.bindCommandContext(this._extensionCommandContextActions);
279
- runner.bindChildSessionOptions(this._childSessionOptions);
292
+ runner.bindChildSessionOptions(liveChildSessionOptions(this));
280
293
  runner.bindWorkflowJournal(this._workflowJournal, this._storageAgentDir);
281
294
  this._extensionErrorUnsubscriber?.();
282
295
  this._extensionErrorUnsubscriber = this._extensionErrorListener
@@ -858,7 +871,7 @@ async function reloadOwnedGeneration(retainedRuntimes, options) {
858
871
  candidateRunner.setHostBindings(this._extensionHumanInput, this._extensionDiagnosticListener, humanInputBindingRevisions.get(this));
859
872
  candidateRunner.setUIContext(this._extensionUIContext, this._extensionMode, presentationOnlyBindings.get(this) ?? false);
860
873
  candidateRunner.bindCommandContext(this._extensionCommandContextActions);
861
- candidateRunner.bindChildSessionOptions(this._childSessionOptions);
874
+ candidateRunner.bindChildSessionOptions(liveChildSessionOptions(this));
862
875
  candidateRunner.bindWorkflowJournal(this._workflowJournal, this._storageAgentDir);
863
876
  if (options?.failOnExtensionErrors && errors.length > 0)
864
877
  throw new Error(`Failed to load extensions: ${errors.map(({ path, error }) => `${path}: ${error}`).join("; ")}`);