@qduc/term2 0.18.0 → 0.20.0

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 (316) hide show
  1. package/dist/agent.d.ts +9 -0
  2. package/dist/agent.d.ts.map +1 -1
  3. package/dist/agent.js +7 -1
  4. package/dist/agent.js.map +1 -1
  5. package/dist/app.d.ts.map +1 -1
  6. package/dist/app.js +3 -2
  7. package/dist/app.js.map +1 -1
  8. package/dist/cli.js +9 -5
  9. package/dist/cli.js.map +1 -1
  10. package/dist/commands/retry-failed-turn-command.d.ts +6 -0
  11. package/dist/commands/retry-failed-turn-command.d.ts.map +1 -0
  12. package/dist/commands/retry-failed-turn-command.js +12 -0
  13. package/dist/commands/retry-failed-turn-command.js.map +1 -0
  14. package/dist/components/layout/BackgroundTaskManager.d.ts.map +1 -1
  15. package/dist/components/layout/BackgroundTaskManager.js +4 -0
  16. package/dist/components/layout/BackgroundTaskManager.js.map +1 -1
  17. package/dist/components/layout/BackgroundTasksPanel.d.ts.map +1 -1
  18. package/dist/components/layout/BackgroundTasksPanel.js +11 -1
  19. package/dist/components/layout/BackgroundTasksPanel.js.map +1 -1
  20. package/dist/components/layout/BottomArea.d.ts +6 -0
  21. package/dist/components/layout/BottomArea.d.ts.map +1 -1
  22. package/dist/components/layout/BottomArea.js +15 -5
  23. package/dist/components/layout/BottomArea.js.map +1 -1
  24. package/dist/components/layout/StatusBar.d.ts +6 -0
  25. package/dist/components/layout/StatusBar.d.ts.map +1 -1
  26. package/dist/components/layout/StatusBar.js +17 -4
  27. package/dist/components/layout/StatusBar.js.map +1 -1
  28. package/dist/components/message/CommandGroupSummary.js +4 -5
  29. package/dist/components/message/CommandGroupSummary.js.map +1 -1
  30. package/dist/components/message/MessageList.d.ts.map +1 -1
  31. package/dist/components/message/MessageList.js +33 -10
  32. package/dist/components/message/MessageList.js.map +1 -1
  33. package/dist/components/message/command-grouping.d.ts +7 -6
  34. package/dist/components/message/command-grouping.d.ts.map +1 -1
  35. package/dist/components/message/command-grouping.js +35 -15
  36. package/dist/components/message/command-grouping.js.map +1 -1
  37. package/dist/components/message/command-message-helpers.d.ts +5 -5
  38. package/dist/contracts/conversation.d.ts +2 -0
  39. package/dist/contracts/conversation.d.ts.map +1 -1
  40. package/dist/contracts/conversation.js.map +1 -1
  41. package/dist/contracts/run-termination.d.ts +7 -0
  42. package/dist/contracts/run-termination.d.ts.map +1 -0
  43. package/dist/contracts/run-termination.js +2 -0
  44. package/dist/contracts/run-termination.js.map +1 -0
  45. package/dist/contracts/streamed-model-turn.d.ts +4 -0
  46. package/dist/contracts/streamed-model-turn.d.ts.map +1 -1
  47. package/dist/hooks/conversation-ui-reducer.d.ts +7 -0
  48. package/dist/hooks/conversation-ui-reducer.d.ts.map +1 -1
  49. package/dist/hooks/conversation-ui-reducer.js +6 -0
  50. package/dist/hooks/conversation-ui-reducer.js.map +1 -1
  51. package/dist/hooks/settings-completion-config.d.ts.map +1 -1
  52. package/dist/hooks/settings-completion-config.js +0 -2
  53. package/dist/hooks/settings-completion-config.js.map +1 -1
  54. package/dist/hooks/use-app-commands.d.ts +2 -1
  55. package/dist/hooks/use-app-commands.d.ts.map +1 -1
  56. package/dist/hooks/use-app-commands.js +4 -1
  57. package/dist/hooks/use-app-commands.js.map +1 -1
  58. package/dist/hooks/use-conversation.d.ts +5 -0
  59. package/dist/hooks/use-conversation.d.ts.map +1 -1
  60. package/dist/hooks/use-conversation.js +29 -4
  61. package/dist/hooks/use-conversation.js.map +1 -1
  62. package/dist/hooks/use-model-selection.d.ts +2 -0
  63. package/dist/hooks/use-model-selection.d.ts.map +1 -1
  64. package/dist/hooks/use-model-selection.js +3 -3
  65. package/dist/hooks/use-model-selection.js.map +1 -1
  66. package/dist/lib/agent-client.d.ts +18 -0
  67. package/dist/lib/agent-client.d.ts.map +1 -1
  68. package/dist/lib/agent-client.js +68 -23
  69. package/dist/lib/agent-client.js.map +1 -1
  70. package/dist/lib/agent-configuration.d.ts +8 -0
  71. package/dist/lib/agent-configuration.d.ts.map +1 -1
  72. package/dist/lib/agent-configuration.js +6 -0
  73. package/dist/lib/agent-configuration.js.map +1 -1
  74. package/dist/lib/agent-factory.d.ts +8 -0
  75. package/dist/lib/agent-factory.d.ts.map +1 -1
  76. package/dist/lib/agent-factory.js +2 -0
  77. package/dist/lib/agent-factory.js.map +1 -1
  78. package/dist/providers/aborted-stream-recorder.d.ts +26 -1
  79. package/dist/providers/aborted-stream-recorder.d.ts.map +1 -1
  80. package/dist/providers/aborted-stream-recorder.js +133 -0
  81. package/dist/providers/aborted-stream-recorder.js.map +1 -1
  82. package/dist/providers/ai-sdk-streamed-model.d.ts +5 -0
  83. package/dist/providers/ai-sdk-streamed-model.d.ts.map +1 -1
  84. package/dist/providers/ai-sdk-streamed-model.js +90 -1
  85. package/dist/providers/ai-sdk-streamed-model.js.map +1 -1
  86. package/dist/providers/codex-compact.d.ts +5 -4
  87. package/dist/providers/codex-compact.d.ts.map +1 -1
  88. package/dist/providers/codex-compact.js +5 -4
  89. package/dist/providers/codex-compact.js.map +1 -1
  90. package/dist/providers/codex-responses-model.d.ts.map +1 -1
  91. package/dist/providers/codex-responses-model.js +103 -20
  92. package/dist/providers/codex-responses-model.js.map +1 -1
  93. package/dist/providers/codex.provider.d.ts +1 -0
  94. package/dist/providers/codex.provider.d.ts.map +1 -1
  95. package/dist/providers/codex.provider.js +59 -3
  96. package/dist/providers/codex.provider.js.map +1 -1
  97. package/dist/providers/fetch/logging-middleware.d.ts +1 -0
  98. package/dist/providers/fetch/logging-middleware.d.ts.map +1 -1
  99. package/dist/providers/fetch/logging-middleware.js +24 -1
  100. package/dist/providers/fetch/logging-middleware.js.map +1 -1
  101. package/dist/providers/openai-chat-completions-model.d.ts.map +1 -1
  102. package/dist/providers/openai-chat-completions-model.js +99 -2
  103. package/dist/providers/openai-chat-completions-model.js.map +1 -1
  104. package/dist/providers/openai-responses-model.d.ts.map +1 -1
  105. package/dist/providers/openai-responses-model.js +21 -13
  106. package/dist/providers/openai-responses-model.js.map +1 -1
  107. package/dist/providers/retrying-model.d.ts +5 -1
  108. package/dist/providers/retrying-model.d.ts.map +1 -1
  109. package/dist/providers/retrying-model.js +29 -6
  110. package/dist/providers/retrying-model.js.map +1 -1
  111. package/dist/providers/websocket-abort-race.d.ts +13 -0
  112. package/dist/providers/websocket-abort-race.d.ts.map +1 -0
  113. package/dist/providers/websocket-abort-race.js +34 -0
  114. package/dist/providers/websocket-abort-race.js.map +1 -0
  115. package/dist/services/agent-runtime/application-run-loop.d.ts +7 -2
  116. package/dist/services/agent-runtime/application-run-loop.d.ts.map +1 -1
  117. package/dist/services/agent-runtime/application-run-loop.js +48 -8
  118. package/dist/services/agent-runtime/application-run-loop.js.map +1 -1
  119. package/dist/services/agent-runtime/context-compaction/context-milestone-reminder.js +3 -3
  120. package/dist/services/agent-runtime/context-compaction/context-milestone-reminder.js.map +1 -1
  121. package/dist/services/agent-runtime/executor.d.ts.map +1 -1
  122. package/dist/services/agent-runtime/executor.js +2 -0
  123. package/dist/services/agent-runtime/executor.js.map +1 -1
  124. package/dist/services/agent-runtime/types.d.ts +2 -2
  125. package/dist/services/agent-runtime/types.d.ts.map +1 -1
  126. package/dist/services/agent-stream.d.ts +13 -0
  127. package/dist/services/agent-stream.d.ts.map +1 -1
  128. package/dist/services/agent-stream.js +56 -0
  129. package/dist/services/agent-stream.js.map +1 -1
  130. package/dist/services/background-task-activity.d.ts +7 -0
  131. package/dist/services/background-task-activity.d.ts.map +1 -1
  132. package/dist/services/background-task-activity.js +17 -0
  133. package/dist/services/background-task-activity.js.map +1 -1
  134. package/dist/services/conversation/conversation-events.d.ts +36 -3
  135. package/dist/services/conversation/conversation-events.d.ts.map +1 -1
  136. package/dist/services/conversation/conversation-events.js +30 -1
  137. package/dist/services/conversation/conversation-events.js.map +1 -1
  138. package/dist/services/conversation/conversation-orchestrator.d.ts +2 -0
  139. package/dist/services/conversation/conversation-orchestrator.d.ts.map +1 -1
  140. package/dist/services/conversation/conversation-orchestrator.js +39 -1
  141. package/dist/services/conversation/conversation-orchestrator.js.map +1 -1
  142. package/dist/services/conversation/conversation-orchestrator.types.d.ts +4 -0
  143. package/dist/services/conversation/conversation-orchestrator.types.d.ts.map +1 -1
  144. package/dist/services/conversation/conversation-result-builder.d.ts.map +1 -1
  145. package/dist/services/conversation/conversation-result-builder.js +9 -5
  146. package/dist/services/conversation/conversation-result-builder.js.map +1 -1
  147. package/dist/services/conversation/conversation-service.d.ts +2 -0
  148. package/dist/services/conversation/conversation-service.d.ts.map +1 -1
  149. package/dist/services/conversation/conversation-service.js +14 -2
  150. package/dist/services/conversation/conversation-service.js.map +1 -1
  151. package/dist/services/conversation/session-browser.d.ts +3 -0
  152. package/dist/services/conversation/session-browser.d.ts.map +1 -1
  153. package/dist/services/conversation/session-browser.js +42 -40
  154. package/dist/services/conversation/session-browser.js.map +1 -1
  155. package/dist/services/conversation-agent-client.d.ts +3 -0
  156. package/dist/services/conversation-agent-client.d.ts.map +1 -1
  157. package/dist/services/logging/provider-traffic.d.ts +6 -1
  158. package/dist/services/logging/provider-traffic.d.ts.map +1 -1
  159. package/dist/services/logging/provider-traffic.js +29 -4
  160. package/dist/services/logging/provider-traffic.js.map +1 -1
  161. package/dist/services/memory/memory-store.d.ts.map +1 -1
  162. package/dist/services/memory/memory-store.js +3 -1
  163. package/dist/services/memory/memory-store.js.map +1 -1
  164. package/dist/services/models/model-catalog-session.d.ts +1 -2
  165. package/dist/services/models/model-catalog-session.d.ts.map +1 -1
  166. package/dist/services/retry/committed-tool-continuation.d.ts +4 -0
  167. package/dist/services/retry/committed-tool-continuation.d.ts.map +1 -0
  168. package/dist/services/retry/committed-tool-continuation.js +12 -0
  169. package/dist/services/retry/committed-tool-continuation.js.map +1 -0
  170. package/dist/services/retry/in-loop-model-retry.d.ts.map +1 -1
  171. package/dist/services/retry/in-loop-model-retry.js +9 -0
  172. package/dist/services/retry/in-loop-model-retry.js.map +1 -1
  173. package/dist/services/retry/provider-failure-classification.d.ts +12 -0
  174. package/dist/services/retry/provider-failure-classification.d.ts.map +1 -0
  175. package/dist/services/retry/provider-failure-classification.js +55 -0
  176. package/dist/services/retry/provider-failure-classification.js.map +1 -0
  177. package/dist/services/retry/retry-classifier.d.ts.map +1 -1
  178. package/dist/services/retry/retry-classifier.js +68 -0
  179. package/dist/services/retry/retry-classifier.js.map +1 -1
  180. package/dist/services/retry/retry-contracts.d.ts +24 -3
  181. package/dist/services/retry/retry-contracts.d.ts.map +1 -1
  182. package/dist/services/retry/retry-event-presenter.d.ts.map +1 -1
  183. package/dist/services/retry/retry-event-presenter.js +14 -4
  184. package/dist/services/retry/retry-event-presenter.js.map +1 -1
  185. package/dist/services/retry/retry-recovery-budget.d.ts +51 -0
  186. package/dist/services/retry/retry-recovery-budget.d.ts.map +1 -0
  187. package/dist/services/retry/retry-recovery-budget.js +84 -0
  188. package/dist/services/retry/retry-recovery-budget.js.map +1 -0
  189. package/dist/services/service-interfaces.d.ts +67 -3
  190. package/dist/services/service-interfaces.d.ts.map +1 -1
  191. package/dist/services/session/background-check-in-scheduler.d.ts +20 -4
  192. package/dist/services/session/background-check-in-scheduler.d.ts.map +1 -1
  193. package/dist/services/session/background-check-in-scheduler.js +108 -8
  194. package/dist/services/session/background-check-in-scheduler.js.map +1 -1
  195. package/dist/services/session/continuation-recovery-handler.d.ts +1 -0
  196. package/dist/services/session/continuation-recovery-handler.d.ts.map +1 -1
  197. package/dist/services/session/continuation-recovery-handler.js +42 -0
  198. package/dist/services/session/continuation-recovery-handler.js.map +1 -1
  199. package/dist/services/session/continuation-state.d.ts +4 -1
  200. package/dist/services/session/continuation-state.d.ts.map +1 -1
  201. package/dist/services/session/continuation-state.js +5 -1
  202. package/dist/services/session/continuation-state.js.map +1 -1
  203. package/dist/services/session/initial-turn-recovery-handler.d.ts +3 -0
  204. package/dist/services/session/initial-turn-recovery-handler.d.ts.map +1 -1
  205. package/dist/services/session/initial-turn-recovery-handler.js +70 -0
  206. package/dist/services/session/initial-turn-recovery-handler.js.map +1 -1
  207. package/dist/services/session/session-composition.d.ts.map +1 -1
  208. package/dist/services/session/session-composition.js +5 -1
  209. package/dist/services/session/session-composition.js.map +1 -1
  210. package/dist/services/session/session-tool-tracker.d.ts +6 -0
  211. package/dist/services/session/session-tool-tracker.d.ts.map +1 -1
  212. package/dist/services/session/session-tool-tracker.js +17 -0
  213. package/dist/services/session/session-tool-tracker.js.map +1 -1
  214. package/dist/services/session/terminal-result-collector.d.ts.map +1 -1
  215. package/dist/services/session/terminal-result-collector.js +3 -0
  216. package/dist/services/session/terminal-result-collector.js.map +1 -1
  217. package/dist/services/session/turn-attempt-factory.d.ts +2 -0
  218. package/dist/services/session/turn-attempt-factory.d.ts.map +1 -1
  219. package/dist/services/session/turn-attempt-factory.js +1 -0
  220. package/dist/services/session/turn-attempt-factory.js.map +1 -1
  221. package/dist/services/session/turn-attempt.d.ts +6 -0
  222. package/dist/services/session/turn-attempt.d.ts.map +1 -1
  223. package/dist/services/session/turn-attempt.js +16 -0
  224. package/dist/services/session/turn-attempt.js.map +1 -1
  225. package/dist/services/session/turn-workflow.d.ts +1 -1
  226. package/dist/services/session/turn-workflow.d.ts.map +1 -1
  227. package/dist/services/session/turn-workflow.js +83 -19
  228. package/dist/services/session/turn-workflow.js.map +1 -1
  229. package/dist/services/settings/settings-schema.d.ts +0 -4
  230. package/dist/services/settings/settings-schema.d.ts.map +1 -1
  231. package/dist/services/settings/settings-schema.js +1 -5
  232. package/dist/services/settings/settings-schema.js.map +1 -1
  233. package/dist/services/settings/settings-sources.d.ts.map +1 -1
  234. package/dist/services/settings/settings-sources.js +0 -1
  235. package/dist/services/settings/settings-sources.js.map +1 -1
  236. package/dist/services/settings/test-helpers/settings-consumer-inventory.d.ts +1 -1
  237. package/dist/services/settings/test-helpers/settings-consumer-inventory.d.ts.map +1 -1
  238. package/dist/services/settings/test-helpers/settings-consumer-inventory.js +0 -1
  239. package/dist/services/settings/test-helpers/settings-consumer-inventory.js.map +1 -1
  240. package/dist/services/subagents/execution-runner.d.ts.map +1 -1
  241. package/dist/services/subagents/execution-runner.js +39 -4
  242. package/dist/services/subagents/execution-runner.js.map +1 -1
  243. package/dist/services/subagents/nested-runner.d.ts.map +1 -1
  244. package/dist/services/subagents/nested-runner.js +23 -7
  245. package/dist/services/subagents/nested-runner.js.map +1 -1
  246. package/dist/services/subagents/subagent-async-registry.d.ts.map +1 -1
  247. package/dist/services/subagents/subagent-async-registry.js +28 -2
  248. package/dist/services/subagents/subagent-async-registry.js.map +1 -1
  249. package/dist/services/subagents/subagent-notification-store.d.ts +2 -2
  250. package/dist/services/subagents/subagent-notification-store.d.ts.map +1 -1
  251. package/dist/services/subagents/subagent-notification-store.js +3 -2
  252. package/dist/services/subagents/subagent-notification-store.js.map +1 -1
  253. package/dist/services/subagents/types.d.ts +31 -8
  254. package/dist/services/subagents/types.d.ts.map +1 -1
  255. package/dist/services/subagents/types.js +11 -0
  256. package/dist/services/subagents/types.js.map +1 -1
  257. package/dist/services/subagents/utils.d.ts.map +1 -1
  258. package/dist/services/subagents/utils.js +3 -0
  259. package/dist/services/subagents/utils.js.map +1 -1
  260. package/dist/test-helpers/terminal-e2e.d.ts +2 -0
  261. package/dist/test-helpers/terminal-e2e.d.ts.map +1 -1
  262. package/dist/test-helpers/terminal-e2e.js +13 -6
  263. package/dist/test-helpers/terminal-e2e.js.map +1 -1
  264. package/dist/test-helpers/vitest-network-guard.d.ts +2 -0
  265. package/dist/test-helpers/vitest-network-guard.d.ts.map +1 -0
  266. package/dist/test-helpers/vitest-network-guard.js +24 -0
  267. package/dist/test-helpers/vitest-network-guard.js.map +1 -0
  268. package/dist/tools/agent/configure-task-check-in.d.ts +17 -0
  269. package/dist/tools/agent/configure-task-check-in.d.ts.map +1 -0
  270. package/dist/tools/agent/configure-task-check-in.js +74 -0
  271. package/dist/tools/agent/configure-task-check-in.js.map +1 -0
  272. package/dist/tools/agent/run-subagent-async.d.ts +12 -2
  273. package/dist/tools/agent/run-subagent-async.d.ts.map +1 -1
  274. package/dist/tools/agent/run-subagent-async.js +47 -5
  275. package/dist/tools/agent/run-subagent-async.js.map +1 -1
  276. package/dist/tools/agent/run-subagent.d.ts +15 -0
  277. package/dist/tools/agent/run-subagent.d.ts.map +1 -1
  278. package/dist/tools/agent/run-subagent.js +24 -2
  279. package/dist/tools/agent/run-subagent.js.map +1 -1
  280. package/dist/tools/file/read-file.d.ts.map +1 -1
  281. package/dist/tools/file/read-file.js +48 -0
  282. package/dist/tools/file/read-file.js.map +1 -1
  283. package/dist/tools/format-helpers.d.ts.map +1 -1
  284. package/dist/tools/format-helpers.js +7 -0
  285. package/dist/tools/format-helpers.js.map +1 -1
  286. package/dist/tools/memory/memory-tools.js +1 -1
  287. package/dist/tools/memory/memory-tools.js.map +1 -1
  288. package/dist/tools/session-rollover/session-rollover-tool.d.ts.map +1 -1
  289. package/dist/tools/session-rollover/session-rollover-tool.js +1 -0
  290. package/dist/tools/session-rollover/session-rollover-tool.js.map +1 -1
  291. package/dist/tools/system/shell.d.ts +12 -0
  292. package/dist/tools/system/shell.d.ts.map +1 -1
  293. package/dist/tools/system/shell.js +22 -2
  294. package/dist/tools/system/shell.js.map +1 -1
  295. package/dist/tools/types.d.ts +4 -0
  296. package/dist/tools/types.d.ts.map +1 -1
  297. package/dist/tools/types.js.map +1 -1
  298. package/dist/utils/ai/token-usage.d.ts +5 -0
  299. package/dist/utils/ai/token-usage.d.ts.map +1 -1
  300. package/dist/utils/ai/token-usage.js +37 -0
  301. package/dist/utils/ai/token-usage.js.map +1 -1
  302. package/dist/utils/conversation/conversation-event-handler.d.ts.map +1 -1
  303. package/dist/utils/conversation/conversation-event-handler.js +23 -1
  304. package/dist/utils/conversation/conversation-event-handler.js.map +1 -1
  305. package/dist/utils/settings-command.d.ts.map +1 -1
  306. package/dist/utils/settings-command.js +0 -5
  307. package/dist/utils/settings-command.js.map +1 -1
  308. package/dist/utils/streaming/streaming-session-factory.d.ts +7 -0
  309. package/dist/utils/streaming/streaming-session-factory.d.ts.map +1 -1
  310. package/dist/utils/streaming/streaming-session-factory.js +65 -9
  311. package/dist/utils/streaming/streaming-session-factory.js.map +1 -1
  312. package/dist/utils/streaming/streaming-speed-tracker.d.ts +125 -0
  313. package/dist/utils/streaming/streaming-speed-tracker.d.ts.map +1 -0
  314. package/dist/utils/streaming/streaming-speed-tracker.js +265 -0
  315. package/dist/utils/streaming/streaming-speed-tracker.js.map +1 -0
  316. package/package.json +1 -1
@@ -4,6 +4,10 @@ import { classifyUpstreamRetryableError } from './upstream-retry-policy.js';
4
4
  import { AmbiguousModelOutcomeError, ConversationStateNoProgressError } from './retry-errors.js';
5
5
  import { extractHistoryLength } from '../stream-snapshot.js';
6
6
  import { isMissingChainedToolOutputError, isOrphanedChainedToolOutputError } from '../../lib/chained-input-filter.js';
7
+ import { isRetryRecoveryBudgetExhaustedError } from './retry-recovery-budget.js';
8
+ import { streamHasCommittedOutput } from '../agent-stream.js';
9
+ import { UnsentWebSocketRequestError } from '../../providers/websocket-request-dispatch.js';
10
+ import { isSettledCommittedToolContinuation } from './committed-tool-continuation.js';
7
11
  const TRANSIENT_BASE_DELAY_MS = 500;
8
12
  const TRANSIENT_MAX_DELAY_MS = 30_000;
9
13
  const MAX_TRANSPORT_DOWNGRADES = 1;
@@ -22,6 +26,68 @@ export class DefaultRetryClassifier {
22
26
  }
23
27
  classify(context) {
24
28
  const { error, retryCounts, stream, maxTransientRetries, maxModelRetries } = context;
29
+ // The shared transport/session recovery envelope already gave up (90s
30
+ // deadline, 3 physical attempts, or 1 automatic replay). Retrying again at
31
+ // this layer would just re-enter RetryingModel, which claims against the
32
+ // same exhausted budget and throws this same error immediately -- an
33
+ // unproductive bounce between layers instead of a clean stop.
34
+ if (isRetryRecoveryBudgetExhaustedError(error)) {
35
+ return { kind: 'unrecoverable' };
36
+ }
37
+ // Once the application has emitted any model event, the request may have
38
+ // produced user-visible or externally meaningful work. Never replay that
39
+ // partial turn automatically; the recovery executor still settles its tool
40
+ // ledger truthfully before termination.
41
+ //
42
+ // streamHasCommittedOutput (not a bare length check) matters here: a run
43
+ // that fails before producing anything can still leave a run_budget
44
+ // evidence item or a context_compaction_* lifecycle item in
45
+ // stream.output/newItems -- pure bookkeeping pushed unconditionally by
46
+ // outputPush() in application-run-loop.ts, unrelated to whether any real
47
+ // model output or tool effect occurred. A bare `.length > 0` check
48
+ // treated that as "committed" and forced 'unrecoverable' on an otherwise
49
+ // safely recoverable failure.
50
+ //
51
+ // Exception: a recoverable connection drop after every live-turn tool is
52
+ // completed and already in reconciled history is not a replay. It severs
53
+ // the dead chain and continues from those pairs. Open or unknown calls,
54
+ // missing pairs, and committed text with no completed tools stay closed.
55
+ if (context.hasCommittedOutput || (stream && streamHasCommittedOutput(stream))) {
56
+ if (isSettledCommittedToolContinuation(context.committedToolContinuation)) {
57
+ const connectionInterrupted = error instanceof UnsentWebSocketRequestError ||
58
+ (error instanceof AmbiguousModelOutcomeError && isRecoverableIncompleteStreamClose(error)) ||
59
+ isRecoverableIncompleteStreamClose(error);
60
+ if (connectionInterrupted) {
61
+ const nextAttempt = retryCounts.transientRetryCount + 1;
62
+ if (nextAttempt > maxTransientRetries) {
63
+ return { kind: 'unrecoverable' };
64
+ }
65
+ return {
66
+ kind: 'chain_recovery',
67
+ attempt: nextAttempt,
68
+ delayMs: computeTransientDelayMs(nextAttempt, this.random),
69
+ cause: 'connection_interrupted',
70
+ };
71
+ }
72
+ }
73
+ return { kind: 'unrecoverable' };
74
+ }
75
+ // The provider has positive send-path evidence that no request frame left
76
+ // the socket. Rebuild from durable full history rather than treating this
77
+ // as an ordinary transient retry; subagent sessions disable fresh-start
78
+ // retries but can safely take this non-replaying recovery path.
79
+ if (error instanceof UnsentWebSocketRequestError) {
80
+ const nextAttempt = retryCounts.transientRetryCount + 1;
81
+ if (nextAttempt > maxTransientRetries) {
82
+ return { kind: 'unrecoverable' };
83
+ }
84
+ return {
85
+ kind: 'chain_recovery',
86
+ attempt: nextAttempt,
87
+ delayMs: computeTransientDelayMs(nextAttempt, this.random),
88
+ cause: 'connection_interrupted',
89
+ };
90
+ }
25
91
  const hallucinationDecision = decideRetry(error, retryCounts.modelRetryCount, Boolean(stream), extractHistoryLength(stream), maxModelRetries);
26
92
  if (hallucinationDecision.kind === 'retry') {
27
93
  return {
@@ -47,6 +113,7 @@ export class DefaultRetryClassifier {
47
113
  kind: 'chain_recovery',
48
114
  attempt: nextAttempt,
49
115
  delayMs: computeTransientDelayMs(nextAttempt, this.random),
116
+ cause: 'provider_state_rejected',
50
117
  };
51
118
  }
52
119
  // A stream cut before its terminal event is wrapped as ambiguous because it
@@ -64,6 +131,7 @@ export class DefaultRetryClassifier {
64
131
  kind: 'chain_recovery',
65
132
  attempt: nextAttempt,
66
133
  delayMs: computeTransientDelayMs(nextAttempt, this.random),
134
+ cause: 'connection_interrupted',
67
135
  };
68
136
  }
69
137
  return { kind: 'unrecoverable' };
@@ -1 +1 @@
1
- {"version":3,"file":"retry-classifier.js","sourceRoot":"","sources":["../../../source/services/retry/retry-classifier.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"retry-classifier.js","sourceRoot":"","sources":["../../../source/services/retry/retry-classifier.ts"],"names":[],"mappings":"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"}
@@ -8,14 +8,22 @@ export type ClassifiedFailure = {
8
8
  delayMs: number;
9
9
  }
10
10
  /**
11
- * The provider rejected conversation continuity (for example, because a
12
- * chained tool result is missing). Rebuild from full history, but charge it
13
- * against the normal bounded transient-retry budget.
11
+ * Rebuild from full history, charged against the normal bounded
12
+ * transient-retry budget. `cause` distinguishes two different underlying
13
+ * events that share this recovery mechanism but must not share a
14
+ * presentation:
15
+ * - 'provider_state_rejected': the provider actively rejected conversation
16
+ * continuity (e.g. `previous_response_not_found`, a missing/orphaned
17
+ * chained tool result).
18
+ * - 'connection_interrupted': the connection dropped before a terminal
19
+ * response event (e.g. WebSocket close code 1006); the provider made no
20
+ * rejection claim at all.
14
21
  */
15
22
  | {
16
23
  kind: 'chain_recovery';
17
24
  attempt: number;
18
25
  delayMs: number;
26
+ cause: 'provider_state_rejected' | 'connection_interrupted';
19
27
  } | {
20
28
  kind: 'service_tier_fallback';
21
29
  } | {
@@ -52,10 +60,23 @@ export type RetryCounts = {
52
60
  modelRetryCount: number;
53
61
  transportDowngradeCount: number;
54
62
  };
63
+ export type CommittedToolContinuation = {
64
+ completedToolCount: number;
65
+ allToolsCompleted: boolean;
66
+ completedPairsPresentInHistory: boolean;
67
+ };
55
68
  export type ClassificationContext = {
56
69
  error: unknown;
57
70
  retryCounts: RetryCounts;
58
71
  stream: AgentStream | null;
72
+ /** True once a model event has crossed the session stream boundary. */
73
+ hasCommittedOutput?: boolean;
74
+ /**
75
+ * Live-turn tool settlement observed by the session ledger. Required to
76
+ * admit chain recovery after committed output: completed pairs already in
77
+ * history can continue, but open or unknown calls cannot.
78
+ */
79
+ committedToolContinuation?: CommittedToolContinuation;
59
80
  maxTransientRetries: number;
60
81
  maxModelRetries?: number;
61
82
  };
@@ -1 +1 @@
1
- {"version":3,"file":"retry-contracts.d.ts","sourceRoot":"","sources":["../../../source/services/retry/retry-contracts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"retry-contracts.d.ts","sourceRoot":"","sources":["../../../source/services/retry/retry-contracts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AAI1F,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE;AACzD;;;;;;;;;;;GAWG;GACD;IACE,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,yBAAyB,GAAG,wBAAwB,CAAC;CAC7D,GACD;IAAE,IAAI,EAAE,uBAAuB,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,qBAAqB,CAAA;CAAE,GAC/B;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,wCAAwC,EAAE,iBAAiB,CAAC;CACjF,GACD;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,CAAC;AAI9B,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,KAAK,EAAE,kBAAkB,CAAC;IAAC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACvF;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,SAAS,EAAE,cAAc,CAAC;IAAC,mBAAmB,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GACvG;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,EAAE,OAAO,GAAG,cAAc,CAAC;IACpC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,uFAAuF;IACvF,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC,GACD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,iBAAiB,EAAE,CAAA;CAAE,CAAC;AAIvD,MAAM,MAAM,WAAW,GAAG;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,wBAAwB,EAAE,MAAM,CAAC;IACjC,eAAe,EAAE,MAAM,CAAC;IACxB,uBAAuB,EAAE,MAAM,CAAC;CACjC,CAAC;AAIF,MAAM,MAAM,yBAAyB,GAAG;IACtC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,8BAA8B,EAAE,OAAO,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B,uEAAuE;IACvE,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;;OAIG;IACH,yBAAyB,CAAC,EAAE,yBAAyB,CAAC;IACtD,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAIF,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,WAAW,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,wBAAwB,EAAE,OAAO,CAAC;CACnC,CAAC;AAIF,MAAM,MAAM,aAAa,GAAG;IAC1B,oFAAoF;IACpF,eAAe,EAAE,4BAA4B,EAAE,CAAC;IAChD,gBAAgB,EAAE,OAAO,CAAC;IAC1B,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;CAC5B,CAAC;AAIF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,eAAe,EAAE,OAAO,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,wBAAwB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC,CAAC;AAIF,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,cAAc,GACtB,CAAC;IACC,IAAI,EAAE,KAAK,CAAC;IACZ,WAAW,EAAE,kBAAkB,CAAC;IAChC,MAAM,EAAE,iBAAiB,EAAE,CAAC;CAC7B,GAAG,oBAAoB,CAAC,GACzB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,iBAAiB,EAAE,CAAA;CAAE,CAAC;AAExD,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,aAAa,CAAC;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAIF,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,qBAAqB,GAAG,iBAAiB,CAAC;CAC7D;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,CAAC,OAAO,EAAE,eAAe,GAAG,YAAY,CAAC;CAC9C;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,KAAK,EAAE,qBAAqB,GAAG,cAAc,CAAC;CACrD"}
@@ -1 +1 @@
1
- {"version":3,"file":"retry-event-presenter.d.ts","sourceRoot":"","sources":["../../../source/services/retry/retry-event-presenter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAGhF,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,SAAS,GAAG,cAAc,CAAC;IACnC,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,iBAAiB,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC,CAAC;AAEF,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,KAAK,EAAE,wBAAwB,GAAG,iBAAiB,CAsI1D;CACF"}
1
+ {"version":3,"file":"retry-event-presenter.d.ts","sourceRoot":"","sources":["../../../source/services/retry/retry-event-presenter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAIhF,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,SAAS,GAAG,cAAc,CAAC;IACnC,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,iBAAiB,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC,CAAC;AAEF,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,KAAK,EAAE,wBAAwB,GAAG,iBAAiB,CA+I1D;CACF"}
@@ -1,4 +1,5 @@
1
1
  import { describeError } from '../../utils/error-helpers.js';
2
+ import { classifyProviderFailure } from './provider-failure-classification.js';
2
3
  export class RetryEventPresenter {
3
4
  present(input) {
4
5
  const { failure, maxTransientRetries, maxModelRetries, source, error } = input;
@@ -26,6 +27,7 @@ export class RetryEventPresenter {
26
27
  return { event, logMessage, logFields };
27
28
  }
28
29
  case 'transient': {
30
+ const providerFailure = classifyProviderFailure(error);
29
31
  const toolName = source === 'continuation' ? 'continuation' : 'turn';
30
32
  const event = {
31
33
  type: 'retry',
@@ -34,6 +36,9 @@ export class RetryEventPresenter {
34
36
  maxRetries: maxTransientRetries,
35
37
  errorMessage,
36
38
  retryType: 'upstream',
39
+ errorKind: providerFailure.errorKind,
40
+ delayMs: failure.delayMs,
41
+ ...(providerFailure.retryAfterMs !== undefined ? { retryAfterMs: providerFailure.retryAfterMs } : {}),
37
42
  };
38
43
  const logMessage = source === 'continuation'
39
44
  ? 'Transient error in continuation, retrying'
@@ -44,23 +49,28 @@ export class RetryEventPresenter {
44
49
  retryAttempt: failure.attempt,
45
50
  maxRetries: maxTransientRetries,
46
51
  errorMessage,
52
+ errorKind: providerFailure.errorKind,
47
53
  delayMs: failure.delayMs,
48
54
  };
49
55
  return { event, logMessage, logFields };
50
56
  }
51
57
  case 'chain_recovery': {
58
+ const isConnectionInterrupted = failure.cause === 'connection_interrupted';
59
+ const retryType = isConnectionInterrupted ? 'connection_interrupted' : 'conversation_state';
52
60
  const event = {
53
61
  type: 'retry',
54
62
  toolName: 'conversation',
55
63
  attempt: failure.attempt,
56
64
  maxRetries: maxTransientRetries,
57
65
  errorMessage,
58
- retryType: 'conversation_state',
66
+ retryType,
59
67
  };
60
- const logMessage = 'Provider rejected conversation continuity, rebuilding full history';
68
+ const logMessage = isConnectionInterrupted
69
+ ? 'Connection interrupted before a terminal response event, rebuilding full history'
70
+ : 'Provider rejected conversation continuity, rebuilding full history';
61
71
  const logFields = {
62
- eventType: 'retry.conversation_state',
63
- retryType: 'conversation_state',
72
+ eventType: isConnectionInterrupted ? 'retry.connection_interrupted' : 'retry.conversation_state',
73
+ retryType,
64
74
  retryAttempt: failure.attempt,
65
75
  maxRetries: maxTransientRetries,
66
76
  errorMessage,
@@ -1 +1 @@
1
- {"version":3,"file":"retry-event-presenter.js","sourceRoot":"","sources":["../../../source/services/retry/retry-event-presenter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"retry-event-presenter.js","sourceRoot":"","sources":["../../../source/services/retry/retry-event-presenter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * One bounded capability shared by provider transport retries and session
3
+ * recovery. The owner is deliberately the retry/session layer: providers can
4
+ * consume claims, but cannot extend or reset the envelope.
5
+ */
6
+ export declare const RETRY_RECOVERY_LIMITS: {
7
+ readonly maxRecoveryTimeMs: 90000;
8
+ readonly maxPhysicalAttempts: 3;
9
+ readonly maxAutomaticReplays: 1;
10
+ };
11
+ export type RetryRecoveryBudgetOptions = {
12
+ now?: () => number;
13
+ maxRecoveryTimeMs?: number;
14
+ maxPhysicalAttempts?: number;
15
+ maxAutomaticReplays?: number;
16
+ };
17
+ export declare class RetryRecoveryBudget {
18
+ #private;
19
+ readonly maxRecoveryTimeMs: number;
20
+ readonly maxPhysicalAttempts: number;
21
+ readonly maxAutomaticReplays: number;
22
+ constructor(options?: RetryRecoveryBudgetOptions);
23
+ get startedAt(): number | undefined;
24
+ get physicalAttempts(): number;
25
+ get automaticReplays(): number;
26
+ get elapsedMs(): number;
27
+ /** Starts the recovery clock only after a retryable failure is observed. */
28
+ noteRetryableFailure(): void;
29
+ get deadlineExceeded(): boolean;
30
+ /**
31
+ * Claim one physical dispatch made because recovery is in progress.
32
+ * Ordinary first attempts and successful tool-loop continuations are not
33
+ * recovery work; their callers must not spend this budget on them.
34
+ */
35
+ claimPhysicalAttempt(): boolean;
36
+ /** Claim exactly once before an automatic full-history turn replay. */
37
+ claimAutomaticReplay(): boolean;
38
+ remainingMs(): number | undefined;
39
+ }
40
+ /**
41
+ * Raised when a provider wrapper tried to start another physical request after
42
+ * the shared recovery envelope was exhausted. Keeping the triggering failure
43
+ * as a cause lets the classifier retain its useful provider/status details
44
+ * without making the budget error itself look like a new provider failure.
45
+ */
46
+ export declare class RetryRecoveryBudgetExhaustedError extends Error {
47
+ readonly cause: unknown;
48
+ constructor(cause?: unknown);
49
+ }
50
+ export declare const isRetryRecoveryBudgetExhaustedError: (error: unknown) => error is RetryRecoveryBudgetExhaustedError;
51
+ //# sourceMappingURL=retry-recovery-budget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry-recovery-budget.d.ts","sourceRoot":"","sources":["../../../source/services/retry/retry-recovery-budget.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,qBAAqB;aAChC,iBAAiB,EAAE,KAAM;aACzB,mBAAmB,EAAE,CAAC;aACtB,mBAAmB,EAAE,CAAC;CACd,CAAC;AAEX,MAAM,MAAM,0BAA0B,GAAG;IACvC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,qBAAa,mBAAmB;;IAC9B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IAMrC,YAAY,OAAO,GAAE,0BAA+B,EAKnD;IAED,IAAI,SAAS,IAAI,MAAM,GAAG,SAAS,CAElC;IAED,IAAI,gBAAgB,IAAI,MAAM,CAE7B;IAED,IAAI,gBAAgB,IAAI,MAAM,CAE7B;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,4EAA4E;IAC5E,oBAAoB,IAAI,IAAI,CAE3B;IAED,IAAI,gBAAgB,IAAI,OAAO,CAE9B;IAED;;;;OAIG;IACH,oBAAoB,IAAI,OAAO,CAI9B;IAED,uEAAuE;IACvE,oBAAoB,IAAI,OAAO,CAI9B;IAED,WAAW,IAAI,MAAM,GAAG,SAAS,CAGhC;CACF;AAED;;;;;GAKG;AACH,qBAAa,iCAAkC,SAAQ,KAAK;IAC1D,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAExB,YAAY,KAAK,CAAC,EAAE,OAAO,EAI1B;CACF;AAED,eAAO,MAAM,mCAAmC,UAAW,OAAO,KAAG,KAAK,IAAI,iCAC1B,CAAC"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * One bounded capability shared by provider transport retries and session
3
+ * recovery. The owner is deliberately the retry/session layer: providers can
4
+ * consume claims, but cannot extend or reset the envelope.
5
+ */
6
+ export const RETRY_RECOVERY_LIMITS = {
7
+ maxRecoveryTimeMs: 90_000,
8
+ maxPhysicalAttempts: 3,
9
+ maxAutomaticReplays: 1,
10
+ };
11
+ export class RetryRecoveryBudget {
12
+ maxRecoveryTimeMs;
13
+ maxPhysicalAttempts;
14
+ maxAutomaticReplays;
15
+ #now;
16
+ #startedAt;
17
+ #physicalAttempts = 0;
18
+ #automaticReplays = 0;
19
+ constructor(options = {}) {
20
+ this.#now = options.now ?? (() => performance.now());
21
+ this.maxRecoveryTimeMs = options.maxRecoveryTimeMs ?? RETRY_RECOVERY_LIMITS.maxRecoveryTimeMs;
22
+ this.maxPhysicalAttempts = options.maxPhysicalAttempts ?? RETRY_RECOVERY_LIMITS.maxPhysicalAttempts;
23
+ this.maxAutomaticReplays = options.maxAutomaticReplays ?? RETRY_RECOVERY_LIMITS.maxAutomaticReplays;
24
+ }
25
+ get startedAt() {
26
+ return this.#startedAt;
27
+ }
28
+ get physicalAttempts() {
29
+ return this.#physicalAttempts;
30
+ }
31
+ get automaticReplays() {
32
+ return this.#automaticReplays;
33
+ }
34
+ get elapsedMs() {
35
+ return this.#startedAt === undefined ? 0 : Math.max(0, this.#now() - this.#startedAt);
36
+ }
37
+ /** Starts the recovery clock only after a retryable failure is observed. */
38
+ noteRetryableFailure() {
39
+ if (this.#startedAt === undefined)
40
+ this.#startedAt = this.#now();
41
+ }
42
+ get deadlineExceeded() {
43
+ return this.#startedAt !== undefined && this.elapsedMs >= this.maxRecoveryTimeMs;
44
+ }
45
+ /**
46
+ * Claim one physical dispatch made because recovery is in progress.
47
+ * Ordinary first attempts and successful tool-loop continuations are not
48
+ * recovery work; their callers must not spend this budget on them.
49
+ */
50
+ claimPhysicalAttempt() {
51
+ if (this.#physicalAttempts >= this.maxPhysicalAttempts || this.deadlineExceeded)
52
+ return false;
53
+ this.#physicalAttempts++;
54
+ return true;
55
+ }
56
+ /** Claim exactly once before an automatic full-history turn replay. */
57
+ claimAutomaticReplay() {
58
+ if (this.#automaticReplays >= this.maxAutomaticReplays || this.deadlineExceeded)
59
+ return false;
60
+ this.#automaticReplays++;
61
+ return true;
62
+ }
63
+ remainingMs() {
64
+ if (this.#startedAt === undefined)
65
+ return undefined;
66
+ return Math.max(0, this.maxRecoveryTimeMs - this.elapsedMs);
67
+ }
68
+ }
69
+ /**
70
+ * Raised when a provider wrapper tried to start another physical request after
71
+ * the shared recovery envelope was exhausted. Keeping the triggering failure
72
+ * as a cause lets the classifier retain its useful provider/status details
73
+ * without making the budget error itself look like a new provider failure.
74
+ */
75
+ export class RetryRecoveryBudgetExhaustedError extends Error {
76
+ cause;
77
+ constructor(cause) {
78
+ super('Retry recovery budget exhausted', { cause });
79
+ this.name = 'RetryRecoveryBudgetExhaustedError';
80
+ this.cause = cause;
81
+ }
82
+ }
83
+ export const isRetryRecoveryBudgetExhaustedError = (error) => error instanceof RetryRecoveryBudgetExhaustedError;
84
+ //# sourceMappingURL=retry-recovery-budget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry-recovery-budget.js","sourceRoot":"","sources":["../../../source/services/retry/retry-recovery-budget.ts"],"names":[],"mappings":"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"}
@@ -74,26 +74,80 @@ export interface ProviderTrafficClosedResponse {
74
74
  requestId: string;
75
75
  provider: string;
76
76
  model: string;
77
- outcome: 'consumer_closed' | 'aborted';
77
+ /**
78
+ * `'failed'` is a stream that ended because a raw transport `error`/`close`
79
+ * frame was observed before any terminal response event — distinct from
80
+ * `'consumer_closed'`, which is this application choosing to stop reading a
81
+ * still-live stream. Without the distinction, an abnormal WebSocket close
82
+ * (e.g. close code 1006) is indistinguishable from ordinary cleanup.
83
+ */
84
+ outcome: 'consumer_closed' | 'aborted' | 'failed';
78
85
  eventCount: number;
79
86
  modelClass?: string;
80
87
  modelWrapperClass?: string;
81
88
  /**
82
89
  * A stream that ends without a terminal event leaves no payload to
83
90
  * summarize, so the retained transcript and its timings are the only record
84
- * of what the model was doing when it was cut off.
91
+ * of what the model was doing when it was cut off. Bounded (no raw event
92
+ * payload) for `'failed'`, since a transport failure is not the deliberate
93
+ * client abort that full transcript retention is for.
85
94
  */
86
- diagnostics?: ProviderTrafficStreamDiagnostics;
95
+ diagnostics?: ProviderTrafficStreamDiagnostics | ProviderTrafficBoundedStreamDiagnostics;
87
96
  }
97
+ /**
98
+ * Fixed, bounded classification of a Responses WebSocket frame's progress
99
+ * kind. Closed union on purpose — see `aborted-stream-recorder.ts`.
100
+ */
101
+ export type ProviderTrafficProgressCategory = 'text' | 'reasoning' | 'tool' | 'usage' | 'heartbeat_or_unknown';
88
102
  export interface ProviderTrafficStreamDiagnostics {
89
103
  durationMs: number;
90
104
  firstEventMs?: number;
91
105
  lastEventMs?: number;
92
106
  maxGapMs?: number;
93
107
  responseId?: string;
108
+ /** Present only when a raw transport `close` frame was observed. */
109
+ closeCode?: number;
110
+ closeReason?: string;
94
111
  eventTypeCounts: Record<string, number>;
112
+ progressCategoryCounts: Record<ProviderTrafficProgressCategory, number>;
113
+ /** Content-free count of raw tool-argument delta frames. */
114
+ toolArgumentDeltaFrames: number;
115
+ /** Sum of raw tool-argument delta string lengths. */
116
+ toolArgumentDeltaCharacters: number;
117
+ /** Raw function-call item starts observed before argument deltas. */
118
+ toolCallStartFrames: number;
95
119
  events: unknown[];
96
120
  }
121
+ /**
122
+ * A mechanically fixed-size/fixed-cardinality view of stream progress,
123
+ * distinct from {@link ProviderTrafficStreamDiagnostics}: every field here is
124
+ * either a single number (including content-free tool-argument growth counts)
125
+ * or a `Record` with a closed, hard-coded key set
126
+ * (`progressCategoryCounts`), so its serialized size cannot grow no matter
127
+ * how many frames, or how novel/hostile their `type` strings, a stream sends.
128
+ *
129
+ * This is why it is a distinct interface rather than
130
+ * `Omit<ProviderTrafficStreamDiagnostics, 'events'>`: that would still expose
131
+ * `eventTypeCounts` (keyed by raw, provider-supplied `type` strings with no
132
+ * enforced vocabulary — unbounded key cardinality) and `closeReason` (free
133
+ * text the server chooses). Used where the caller must retain progress
134
+ * evidence about a stream without retaining anything unbounded or
135
+ * provider-authored — in particular a genuine transport failure, which is not
136
+ * a deliberate client abort and can carry an unbounded number of frames.
137
+ */
138
+ export interface ProviderTrafficBoundedStreamDiagnostics {
139
+ durationMs: number;
140
+ firstEventMs?: number;
141
+ lastEventMs?: number;
142
+ maxGapMs?: number;
143
+ /** Numeric WebSocket close code (RFC 6455 §7.4); never free text. */
144
+ closeCode?: number;
145
+ eventCount: number;
146
+ progressCategoryCounts: Record<ProviderTrafficProgressCategory, number>;
147
+ toolArgumentDeltaFrames: number;
148
+ toolArgumentDeltaCharacters: number;
149
+ toolCallStartFrames: number;
150
+ }
97
151
  /**
98
152
  * What a transport-liveness guard observed while receiving a response, in the
99
153
  * same clock it judges expiry with.
@@ -124,6 +178,16 @@ export interface IProviderTraffic {
124
178
  wsAttempt?: number;
125
179
  wsMaxAttempts?: number;
126
180
  receiveTiming?: ProviderTrafficReceiveTiming;
181
+ host?: string;
182
+ timeoutMs?: number;
183
+ phase?: string;
184
+ physicalAttempt?: number;
185
+ /**
186
+ * Bounded category/counter/timing evidence of stream progress observed
187
+ * before the failure, when a stream had already started delivering
188
+ * frames. Absent when the failure happened before any frame arrived.
189
+ */
190
+ diagnostics?: ProviderTrafficBoundedStreamDiagnostics;
127
191
  }): void;
128
192
  }
129
193
  export interface ISessionContextService {
@@ -1 +1 @@
1
- {"version":3,"file":"service-interfaces.d.ts","sourceRoot":"","sources":["../../source/services/service-interfaces.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service-interfaces.d.ts","sourceRoot":"","sources":["../../source/services/service-interfaces.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,11 @@ import type { BackgroundShellJob } from '../shell/background-shell-registry.js';
6
6
  export interface BackgroundCheckInSettings {
7
7
  enabled: boolean;
8
8
  intervalMs: number;
9
- maxCheckInsPerTask: number;
9
+ }
10
+ export interface TaskCheckInPolicy {
11
+ enabled?: boolean;
12
+ intervalMs?: number;
13
+ nextDueAt?: number;
10
14
  }
11
15
  export interface BackgroundCheckInSchedulerDeps {
12
16
  /** Snapshot of currently tracked background tasks, unified across executors. */
@@ -34,14 +38,26 @@ export interface BackgroundCheckInSchedulerDeps {
34
38
  * notification pipeline (see docs/plans/background-work-control/agent-checkin.md).
35
39
  *
36
40
  * Owns no execution state of its own — `getRunningTasks` reads the unified
37
- * task snapshot the notification store already maintains. Per-task due time
38
- * and check-in count live only here, keyed by `${kind}:${id}`, and are
39
- * dropped the moment a task leaves the running snapshot (settled or evicted),
41
+ * task snapshot the notification store already maintains. Per-task due time,
42
+ * policy overrides, and check-in count live only here, keyed by `${kind}:${id}`,
43
+ * and are dropped the moment a task leaves the running snapshot (settled or evicted),
40
44
  * so a reused id after a task's lifecycle epoch bumps starts a fresh count.
41
45
  */
42
46
  export declare class BackgroundCheckInScheduler {
43
47
  #private;
44
48
  constructor(deps: BackgroundCheckInSchedulerDeps);
49
+ setTaskPolicy(target: BackgroundCheckInDueEvent['target'], policy: TaskCheckInPolicy): void;
50
+ getTaskPolicy(target: BackgroundCheckInDueEvent['target']): TaskCheckInPolicy | undefined;
51
+ resolveTarget(targetNameOrId: string): BackgroundCheckInDueEvent['target'] | undefined;
52
+ configureTaskCheckIn(targetNameOrId: string, options: {
53
+ enabled?: boolean;
54
+ intervalMs?: number;
55
+ nextDueInMs?: number;
56
+ }): {
57
+ ok: boolean;
58
+ message?: string;
59
+ error?: string;
60
+ };
45
61
  /** Exposed for tests; production callers rely on the internal timer. */
46
62
  tick(): void;
47
63
  dispose(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"background-check-in-scheduler.d.ts","sourceRoot":"","sources":["../../../source/services/session/background-check-in-scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAC;AACxF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAClF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAGhF,+EAA+E;AAC/E,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,8BAA8B;IAC7C,gFAAgF;IAChF,eAAe,EAAE,MAAM,SAAS,cAAc,EAAE,CAAC;IACjD,sFAAsF;IACtF,IAAI,EAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,IAAI,CAAC;IACjD,WAAW,EAAE,MAAM,yBAAyB,CAAC;IAC7C,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,iBAAiB,GAAG,SAAS,CAAC;IACrE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,kBAAkB,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;IACzE,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAC9E,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;IACtF,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,KAAK,IAAI,CAAC;IAChE;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAoED;;;;;;;;;;;GAWG;AACH,qBAAa,0BAA0B;;IAYrC,YAAY,IAAI,EAAE,8BAA8B,EAY/C;IAED,wEAAwE;IACxE,IAAI,IAAI,IAAI,CA+BX;IAED,OAAO,IAAI,IAAI,CAId;CACF"}
1
+ {"version":3,"file":"background-check-in-scheduler.d.ts","sourceRoot":"","sources":["../../../source/services/session/background-check-in-scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAC;AACxF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAClF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAQhF,+EAA+E;AAC/E,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,8BAA8B;IAC7C,gFAAgF;IAChF,eAAe,EAAE,MAAM,SAAS,cAAc,EAAE,CAAC;IACjD,sFAAsF;IACtF,IAAI,EAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,IAAI,CAAC;IACjD,WAAW,EAAE,MAAM,yBAAyB,CAAC;IAC7C,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,iBAAiB,GAAG,SAAS,CAAC;IACrE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,kBAAkB,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;IACzE,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAC9E,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;IACtF,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,KAAK,IAAI,CAAC;IAChE;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAuGD;;;;;;;;;;;GAWG;AACH,qBAAa,0BAA0B;;IAarC,YAAY,IAAI,EAAE,8BAA8B,EAY/C;IAED,aAAa,CAAC,MAAM,EAAE,yBAAyB,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAO1F;IAED,aAAa,CAAC,MAAM,EAAE,yBAAyB,CAAC,QAAQ,CAAC,GAAG,iBAAiB,GAAG,SAAS,CAExF;IAED,aAAa,CAAC,cAAc,EAAE,MAAM,GAAG,yBAAyB,CAAC,QAAQ,CAAC,GAAG,SAAS,CAerF;IAED,oBAAoB,CAClB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GACxE;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAyBnD;IAED,wEAAwE;IACxE,IAAI,IAAI,IAAI,CA+CX;IAED,OAAO,IAAI,IAAI,CAId;CACF"}