@qduc/term2 0.14.0 → 0.15.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 (903) hide show
  1. package/dist/agent.d.ts +2 -0
  2. package/dist/agent.d.ts.map +1 -1
  3. package/dist/agent.js +17 -7
  4. package/dist/agent.js.map +1 -1
  5. package/dist/app-helpers.d.ts +4 -0
  6. package/dist/app-helpers.d.ts.map +1 -1
  7. package/dist/app-helpers.js +6 -0
  8. package/dist/app-helpers.js.map +1 -1
  9. package/dist/app.d.ts +1 -1
  10. package/dist/app.d.ts.map +1 -1
  11. package/dist/app.js +141 -13
  12. package/dist/app.js.map +1 -1
  13. package/dist/cli.js +112 -28
  14. package/dist/cli.js.map +1 -1
  15. package/dist/commands/auto-approve-command.js +3 -3
  16. package/dist/commands/auto-approve-command.js.map +1 -1
  17. package/dist/commands/guarded-settings-command.d.ts +3 -1
  18. package/dist/commands/guarded-settings-command.d.ts.map +1 -1
  19. package/dist/commands/guarded-settings-command.js +21 -5
  20. package/dist/commands/guarded-settings-command.js.map +1 -1
  21. package/dist/commands/mode-commands.d.ts +9 -2
  22. package/dist/commands/mode-commands.d.ts.map +1 -1
  23. package/dist/commands/mode-commands.js +12 -3
  24. package/dist/commands/mode-commands.js.map +1 -1
  25. package/dist/commands/usage-command.d.ts +10 -1
  26. package/dist/commands/usage-command.d.ts.map +1 -1
  27. package/dist/commands/usage-command.js +11 -1
  28. package/dist/commands/usage-command.js.map +1 -1
  29. package/dist/components/InputBox.js +14 -1
  30. package/dist/components/InputBox.js.map +1 -1
  31. package/dist/components/input/FirstRunSetupPrompt.js +1 -1
  32. package/dist/components/input/FirstRunSetupPrompt.js.map +1 -1
  33. package/dist/components/input/PendingQueueList.d.ts.map +1 -1
  34. package/dist/components/input/PendingQueueList.js +22 -5
  35. package/dist/components/input/PendingQueueList.js.map +1 -1
  36. package/dist/components/input/ProviderMenuSession.d.ts.map +1 -1
  37. package/dist/components/input/ProviderMenuSession.js +1 -0
  38. package/dist/components/input/ProviderMenuSession.js.map +1 -1
  39. package/dist/components/input/SettingsValueMenuSession.d.ts.map +1 -1
  40. package/dist/components/input/SettingsValueMenuSession.js +6 -0
  41. package/dist/components/input/SettingsValueMenuSession.js.map +1 -1
  42. package/dist/components/layout/BackgroundTaskManager.d.ts +2 -0
  43. package/dist/components/layout/BackgroundTaskManager.d.ts.map +1 -1
  44. package/dist/components/layout/BackgroundTaskManager.js +156 -64
  45. package/dist/components/layout/BackgroundTaskManager.js.map +1 -1
  46. package/dist/components/layout/BackgroundTasksPanel.d.ts +10 -1
  47. package/dist/components/layout/BackgroundTasksPanel.d.ts.map +1 -1
  48. package/dist/components/layout/BackgroundTasksPanel.js +193 -59
  49. package/dist/components/layout/BackgroundTasksPanel.js.map +1 -1
  50. package/dist/components/layout/BottomArea.d.ts +11 -1
  51. package/dist/components/layout/BottomArea.d.ts.map +1 -1
  52. package/dist/components/layout/BottomArea.js +30 -13
  53. package/dist/components/layout/BottomArea.js.map +1 -1
  54. package/dist/components/layout/StatusBar.d.ts +5 -0
  55. package/dist/components/layout/StatusBar.d.ts.map +1 -1
  56. package/dist/components/layout/StatusBar.js +45 -3
  57. package/dist/components/layout/StatusBar.js.map +1 -1
  58. package/dist/components/layout/live-task-rows.d.ts +16 -0
  59. package/dist/components/layout/live-task-rows.d.ts.map +1 -0
  60. package/dist/components/layout/live-task-rows.js +28 -0
  61. package/dist/components/layout/live-task-rows.js.map +1 -0
  62. package/dist/components/layout/terminal-text-budget.d.ts +4 -0
  63. package/dist/components/layout/terminal-text-budget.d.ts.map +1 -0
  64. package/dist/components/layout/terminal-text-budget.js +18 -0
  65. package/dist/components/layout/terminal-text-budget.js.map +1 -0
  66. package/dist/components/menu/ModelSelectionMenu.d.ts.map +1 -1
  67. package/dist/components/menu/ModelSelectionMenu.js +18 -5
  68. package/dist/components/menu/ModelSelectionMenu.js.map +1 -1
  69. package/dist/components/menu/ProviderSelectionMenu.d.ts.map +1 -1
  70. package/dist/components/menu/ProviderSelectionMenu.js +27 -2
  71. package/dist/components/menu/ProviderSelectionMenu.js.map +1 -1
  72. package/dist/components/menu/SettingsSelectionMenu.d.ts.map +1 -1
  73. package/dist/components/menu/SettingsSelectionMenu.js +5 -0
  74. package/dist/components/menu/SettingsSelectionMenu.js.map +1 -1
  75. package/dist/components/message/CommandGroupSummary.d.ts +9 -0
  76. package/dist/components/message/CommandGroupSummary.d.ts.map +1 -0
  77. package/dist/components/message/CommandGroupSummary.js +31 -0
  78. package/dist/components/message/CommandGroupSummary.js.map +1 -0
  79. package/dist/components/message/CommandMessage.d.ts +8 -0
  80. package/dist/components/message/CommandMessage.d.ts.map +1 -1
  81. package/dist/components/message/CommandMessage.js +54 -25
  82. package/dist/components/message/CommandMessage.js.map +1 -1
  83. package/dist/components/message/MessageList.d.ts +6 -2
  84. package/dist/components/message/MessageList.d.ts.map +1 -1
  85. package/dist/components/message/MessageList.js +64 -10
  86. package/dist/components/message/MessageList.js.map +1 -1
  87. package/dist/components/message/SubagentActivityMessage.js +4 -2
  88. package/dist/components/message/SubagentActivityMessage.js.map +1 -1
  89. package/dist/components/message/command-grouping.d.ts +43 -0
  90. package/dist/components/message/command-grouping.d.ts.map +1 -0
  91. package/dist/components/message/command-grouping.js +142 -0
  92. package/dist/components/message/command-grouping.js.map +1 -0
  93. package/dist/components/message/command-message-helpers.d.ts +6 -5
  94. package/dist/components/message/command-message-helpers.d.ts.map +1 -1
  95. package/dist/components/message/command-message-helpers.js +36 -0
  96. package/dist/components/message/command-message-helpers.js.map +1 -1
  97. package/dist/components/prompt/ApprovalPrompt.d.ts +1 -1
  98. package/dist/components/prompt/ApprovalPrompt.d.ts.map +1 -1
  99. package/dist/components/prompt/ApprovalPrompt.js +136 -90
  100. package/dist/components/prompt/ApprovalPrompt.js.map +1 -1
  101. package/dist/components/prompt/ModeSwitchConfirmationPrompt.d.ts +11 -0
  102. package/dist/components/prompt/ModeSwitchConfirmationPrompt.d.ts.map +1 -0
  103. package/dist/components/prompt/ModeSwitchConfirmationPrompt.js +50 -0
  104. package/dist/components/prompt/ModeSwitchConfirmationPrompt.js.map +1 -0
  105. package/dist/components/prompt/QueuePausedPrompt.d.ts.map +1 -1
  106. package/dist/components/prompt/QueuePausedPrompt.js +14 -8
  107. package/dist/components/prompt/QueuePausedPrompt.js.map +1 -1
  108. package/dist/contracts/application-stream.d.ts +7 -0
  109. package/dist/contracts/application-stream.d.ts.map +1 -1
  110. package/dist/contracts/conversation.d.ts +24 -1
  111. package/dist/contracts/conversation.d.ts.map +1 -1
  112. package/dist/contracts/conversation.js +8 -0
  113. package/dist/contracts/conversation.js.map +1 -1
  114. package/dist/contracts/streamed-model-turn.d.ts +22 -1
  115. package/dist/contracts/streamed-model-turn.d.ts.map +1 -1
  116. package/dist/core/index.d.ts +9 -0
  117. package/dist/core/index.d.ts.map +1 -0
  118. package/dist/core/index.js +8 -0
  119. package/dist/core/index.js.map +1 -0
  120. package/dist/core/session-runtime.d.ts +10 -0
  121. package/dist/core/session-runtime.d.ts.map +1 -0
  122. package/dist/core/session-runtime.js +9 -0
  123. package/dist/core/session-runtime.js.map +1 -0
  124. package/dist/gateway/assertion.d.ts +38 -0
  125. package/dist/gateway/assertion.d.ts.map +1 -0
  126. package/dist/gateway/assertion.js +146 -0
  127. package/dist/gateway/assertion.js.map +1 -0
  128. package/dist/gateway/contracts.d.ts +124 -0
  129. package/dist/gateway/contracts.d.ts.map +1 -0
  130. package/dist/gateway/contracts.js +13 -0
  131. package/dist/gateway/contracts.js.map +1 -0
  132. package/dist/gateway/gateway.d.ts +72 -0
  133. package/dist/gateway/gateway.d.ts.map +1 -0
  134. package/dist/gateway/gateway.js +1277 -0
  135. package/dist/gateway/gateway.js.map +1 -0
  136. package/dist/gateway/index.d.ts +22 -0
  137. package/dist/gateway/index.d.ts.map +1 -0
  138. package/dist/gateway/index.js +22 -0
  139. package/dist/gateway/index.js.map +1 -0
  140. package/dist/gateway/interaction-protocol.d.ts +76 -0
  141. package/dist/gateway/interaction-protocol.d.ts.map +1 -0
  142. package/dist/gateway/interaction-protocol.js +548 -0
  143. package/dist/gateway/interaction-protocol.js.map +1 -0
  144. package/dist/gateway/launcher.d.ts +8 -0
  145. package/dist/gateway/launcher.d.ts.map +1 -0
  146. package/dist/gateway/launcher.js +20 -0
  147. package/dist/gateway/launcher.js.map +1 -0
  148. package/dist/gateway/lifecycle.d.ts +12 -0
  149. package/dist/gateway/lifecycle.d.ts.map +1 -0
  150. package/dist/gateway/lifecycle.js +38 -0
  151. package/dist/gateway/lifecycle.js.map +1 -0
  152. package/dist/gateway/persistence/admission-persistence.d.ts +82 -0
  153. package/dist/gateway/persistence/admission-persistence.d.ts.map +1 -0
  154. package/dist/gateway/persistence/admission-persistence.js +215 -0
  155. package/dist/gateway/persistence/admission-persistence.js.map +1 -0
  156. package/dist/gateway/persistence/contracts.d.ts +94 -0
  157. package/dist/gateway/persistence/contracts.d.ts.map +1 -0
  158. package/dist/gateway/persistence/contracts.js +32 -0
  159. package/dist/gateway/persistence/contracts.js.map +1 -0
  160. package/dist/gateway/persistence/coordinator.d.ts +25 -0
  161. package/dist/gateway/persistence/coordinator.d.ts.map +1 -0
  162. package/dist/gateway/persistence/coordinator.js +181 -0
  163. package/dist/gateway/persistence/coordinator.js.map +1 -0
  164. package/dist/gateway/persistence/event-journal.d.ts +31 -0
  165. package/dist/gateway/persistence/event-journal.d.ts.map +1 -0
  166. package/dist/gateway/persistence/event-journal.js +378 -0
  167. package/dist/gateway/persistence/event-journal.js.map +1 -0
  168. package/dist/gateway/persistence/interaction-checkpoint.d.ts +17 -0
  169. package/dist/gateway/persistence/interaction-checkpoint.d.ts.map +1 -0
  170. package/dist/gateway/persistence/interaction-checkpoint.js +75 -0
  171. package/dist/gateway/persistence/interaction-checkpoint.js.map +1 -0
  172. package/dist/gateway/persistence/projection.d.ts +53 -0
  173. package/dist/gateway/persistence/projection.d.ts.map +1 -0
  174. package/dist/gateway/persistence/projection.js +226 -0
  175. package/dist/gateway/persistence/projection.js.map +1 -0
  176. package/dist/gateway/persistence/retention.d.ts +16 -0
  177. package/dist/gateway/persistence/retention.d.ts.map +1 -0
  178. package/dist/gateway/persistence/retention.js +93 -0
  179. package/dist/gateway/persistence/retention.js.map +1 -0
  180. package/dist/gateway/persistence/session-index.d.ts +34 -0
  181. package/dist/gateway/persistence/session-index.d.ts.map +1 -0
  182. package/dist/gateway/persistence/session-index.js +348 -0
  183. package/dist/gateway/persistence/session-index.js.map +1 -0
  184. package/dist/gateway/persistence/session-persistence.d.ts +68 -0
  185. package/dist/gateway/persistence/session-persistence.d.ts.map +1 -0
  186. package/dist/gateway/persistence/session-persistence.js +165 -0
  187. package/dist/gateway/persistence/session-persistence.js.map +1 -0
  188. package/dist/gateway/persistence/storage.d.ts +13 -0
  189. package/dist/gateway/persistence/storage.d.ts.map +1 -0
  190. package/dist/gateway/persistence/storage.js +87 -0
  191. package/dist/gateway/persistence/storage.js.map +1 -0
  192. package/dist/gateway/replay-ledger.d.ts +30 -0
  193. package/dist/gateway/replay-ledger.d.ts.map +1 -0
  194. package/dist/gateway/replay-ledger.js +83 -0
  195. package/dist/gateway/replay-ledger.js.map +1 -0
  196. package/dist/gateway/runtime-factory.d.ts +84 -0
  197. package/dist/gateway/runtime-factory.d.ts.map +1 -0
  198. package/dist/gateway/runtime-factory.js +213 -0
  199. package/dist/gateway/runtime-factory.js.map +1 -0
  200. package/dist/gateway/safe-log.d.ts +15 -0
  201. package/dist/gateway/safe-log.d.ts.map +1 -0
  202. package/dist/gateway/safe-log.js +89 -0
  203. package/dist/gateway/safe-log.js.map +1 -0
  204. package/dist/gateway/server-session.d.ts +65 -0
  205. package/dist/gateway/server-session.d.ts.map +1 -0
  206. package/dist/gateway/server-session.js +252 -0
  207. package/dist/gateway/server-session.js.map +1 -0
  208. package/dist/gateway/server.d.ts +42 -0
  209. package/dist/gateway/server.d.ts.map +1 -0
  210. package/dist/gateway/server.js +126 -0
  211. package/dist/gateway/server.js.map +1 -0
  212. package/dist/gateway/worker-boundary.d.ts +40 -0
  213. package/dist/gateway/worker-boundary.d.ts.map +1 -0
  214. package/dist/gateway/worker-boundary.js +149 -0
  215. package/dist/gateway/worker-boundary.js.map +1 -0
  216. package/dist/gateway/workspace-admission.d.ts +37 -0
  217. package/dist/gateway/workspace-admission.d.ts.map +1 -0
  218. package/dist/gateway/workspace-admission.js +285 -0
  219. package/dist/gateway/workspace-admission.js.map +1 -0
  220. package/dist/hooks/conversation-ui-reducer.d.ts +6 -0
  221. package/dist/hooks/conversation-ui-reducer.d.ts.map +1 -1
  222. package/dist/hooks/conversation-ui-reducer.js +3 -0
  223. package/dist/hooks/conversation-ui-reducer.js.map +1 -1
  224. package/dist/hooks/settings-completion-config.d.ts.map +1 -1
  225. package/dist/hooks/settings-completion-config.js +30 -2
  226. package/dist/hooks/settings-completion-config.js.map +1 -1
  227. package/dist/hooks/use-app-commands.d.ts +4 -1
  228. package/dist/hooks/use-app-commands.d.ts.map +1 -1
  229. package/dist/hooks/use-app-commands.js +14 -3
  230. package/dist/hooks/use-app-commands.js.map +1 -1
  231. package/dist/hooks/use-app-keyboard-shortcuts.d.ts +5 -0
  232. package/dist/hooks/use-app-keyboard-shortcuts.d.ts.map +1 -1
  233. package/dist/hooks/use-app-keyboard-shortcuts.js +11 -0
  234. package/dist/hooks/use-app-keyboard-shortcuts.js.map +1 -1
  235. package/dist/hooks/use-conversation.d.ts +1 -0
  236. package/dist/hooks/use-conversation.d.ts.map +1 -1
  237. package/dist/hooks/use-conversation.js +14 -3
  238. package/dist/hooks/use-conversation.js.map +1 -1
  239. package/dist/hooks/use-grok-credit-usage.d.ts +20 -0
  240. package/dist/hooks/use-grok-credit-usage.d.ts.map +1 -0
  241. package/dist/hooks/use-grok-credit-usage.js +48 -0
  242. package/dist/hooks/use-grok-credit-usage.js.map +1 -0
  243. package/dist/hooks/use-provider-selection.d.ts +10 -0
  244. package/dist/hooks/use-provider-selection.d.ts.map +1 -1
  245. package/dist/hooks/use-provider-selection.js +105 -6
  246. package/dist/hooks/use-provider-selection.js.map +1 -1
  247. package/dist/hooks/use-settings-value-completion.d.ts.map +1 -1
  248. package/dist/hooks/use-settings-value-completion.js +10 -2
  249. package/dist/hooks/use-settings-value-completion.js.map +1 -1
  250. package/dist/lib/agent-client.d.ts +10 -3
  251. package/dist/lib/agent-client.d.ts.map +1 -1
  252. package/dist/lib/agent-client.js +115 -23
  253. package/dist/lib/agent-client.js.map +1 -1
  254. package/dist/lib/agent-configuration.d.ts +2 -0
  255. package/dist/lib/agent-configuration.d.ts.map +1 -1
  256. package/dist/lib/agent-configuration.js +6 -2
  257. package/dist/lib/agent-configuration.js.map +1 -1
  258. package/dist/lib/agent-factory.d.ts +2 -0
  259. package/dist/lib/agent-factory.d.ts.map +1 -1
  260. package/dist/lib/agent-factory.js +28 -10
  261. package/dist/lib/agent-factory.js.map +1 -1
  262. package/dist/lib/editor-impl.d.ts.map +1 -1
  263. package/dist/lib/editor-impl.js +14 -17
  264. package/dist/lib/editor-impl.js.map +1 -1
  265. package/dist/lib/harness-input-idle.d.ts +16 -0
  266. package/dist/lib/harness-input-idle.d.ts.map +1 -0
  267. package/dist/lib/harness-input-idle.js +51 -0
  268. package/dist/lib/harness-input-idle.js.map +1 -0
  269. package/dist/lib/input-owner.d.ts +3 -0
  270. package/dist/lib/input-owner.d.ts.map +1 -1
  271. package/dist/lib/input-owner.js +2 -0
  272. package/dist/lib/input-owner.js.map +1 -1
  273. package/dist/lib/subagent-bridge.d.ts +3 -3
  274. package/dist/lib/subagent-bridge.d.ts.map +1 -1
  275. package/dist/lib/subagent-bridge.js +16 -9
  276. package/dist/lib/subagent-bridge.js.map +1 -1
  277. package/dist/lib/tool-invoke.d.ts +2 -0
  278. package/dist/lib/tool-invoke.d.ts.map +1 -1
  279. package/dist/lib/tool-invoke.js +3 -0
  280. package/dist/lib/tool-invoke.js.map +1 -1
  281. package/dist/non-interactive.d.ts.map +1 -1
  282. package/dist/non-interactive.js +5 -0
  283. package/dist/non-interactive.js.map +1 -1
  284. package/dist/prompts/explorer-delegation-contract.test.ts +22 -0
  285. package/dist/prompts/gpt-5.6.md +1 -1
  286. package/dist/prompts/kimi.md +1 -1
  287. package/dist/prompts/orchestrator.md +10 -1
  288. package/dist/prompts/plan-mode-info.md +3 -3
  289. package/dist/prompts/plan-mode-stub.md +7 -0
  290. package/dist/prompts/prefix-quality.test.ts +102 -0
  291. package/dist/prompts/prompt-constructor.d.ts.map +1 -1
  292. package/dist/prompts/prompt-constructor.js +4 -1
  293. package/dist/prompts/prompt-constructor.js.map +1 -1
  294. package/dist/prompts/prompt-constructor.test.ts +12 -4
  295. package/dist/prompts/prompt-constructor.ts +4 -1
  296. package/dist/prompts/subagents/explorer.md +7 -1
  297. package/dist/prompts/subagents/librarian.md +2 -0
  298. package/dist/prompts/subagents/mentor.md +2 -0
  299. package/dist/prompts/subagents/worker.md +2 -0
  300. package/dist/providers/ai-sdk-streamed-model.d.ts +5 -0
  301. package/dist/providers/ai-sdk-streamed-model.d.ts.map +1 -1
  302. package/dist/providers/ai-sdk-streamed-model.js +64 -1
  303. package/dist/providers/ai-sdk-streamed-model.js.map +1 -1
  304. package/dist/providers/chained-wire-state.d.ts +6 -0
  305. package/dist/providers/chained-wire-state.d.ts.map +1 -1
  306. package/dist/providers/chained-wire-state.js +1 -3
  307. package/dist/providers/chained-wire-state.js.map +1 -1
  308. package/dist/providers/codex-auth.d.ts +73 -2
  309. package/dist/providers/codex-auth.d.ts.map +1 -1
  310. package/dist/providers/codex-auth.js +166 -2
  311. package/dist/providers/codex-auth.js.map +1 -1
  312. package/dist/providers/codex-responses-model.d.ts +3 -0
  313. package/dist/providers/codex-responses-model.d.ts.map +1 -1
  314. package/dist/providers/codex-responses-model.js +295 -162
  315. package/dist/providers/codex-responses-model.js.map +1 -1
  316. package/dist/providers/codex-turn-converter.d.ts.map +1 -1
  317. package/dist/providers/codex-turn-converter.js +7 -1
  318. package/dist/providers/codex-turn-converter.js.map +1 -1
  319. package/dist/providers/codex.provider.d.ts +25 -2
  320. package/dist/providers/codex.provider.d.ts.map +1 -1
  321. package/dist/providers/codex.provider.js +83 -71
  322. package/dist/providers/codex.provider.js.map +1 -1
  323. package/dist/providers/common/provider-errors.d.ts +20 -0
  324. package/dist/providers/common/provider-errors.d.ts.map +1 -1
  325. package/dist/providers/common/provider-errors.js +35 -0
  326. package/dist/providers/common/provider-errors.js.map +1 -1
  327. package/dist/providers/grok-auth.d.ts +105 -0
  328. package/dist/providers/grok-auth.d.ts.map +1 -0
  329. package/dist/providers/grok-auth.js +316 -0
  330. package/dist/providers/grok-auth.js.map +1 -0
  331. package/dist/providers/grok-credit-usage.d.ts +53 -0
  332. package/dist/providers/grok-credit-usage.d.ts.map +1 -0
  333. package/dist/providers/grok-credit-usage.js +108 -0
  334. package/dist/providers/grok-credit-usage.js.map +1 -0
  335. package/dist/providers/grok.provider.d.ts +24 -0
  336. package/dist/providers/grok.provider.d.ts.map +1 -0
  337. package/dist/providers/grok.provider.js +153 -0
  338. package/dist/providers/grok.provider.js.map +1 -0
  339. package/dist/providers/index.d.ts +1 -0
  340. package/dist/providers/index.d.ts.map +1 -1
  341. package/dist/providers/index.js +1 -0
  342. package/dist/providers/index.js.map +1 -1
  343. package/dist/providers/jwt-claims.d.ts +12 -0
  344. package/dist/providers/jwt-claims.d.ts.map +1 -0
  345. package/dist/providers/jwt-claims.js +25 -0
  346. package/dist/providers/jwt-claims.js.map +1 -0
  347. package/dist/providers/luna-responses-lite-wire-protocol.d.ts +1 -0
  348. package/dist/providers/luna-responses-lite-wire-protocol.d.ts.map +1 -1
  349. package/dist/providers/luna-responses-lite-wire-protocol.js +19 -0
  350. package/dist/providers/luna-responses-lite-wire-protocol.js.map +1 -1
  351. package/dist/providers/model-catalog/catalog.generated.d.ts +360 -232
  352. package/dist/providers/model-catalog/catalog.generated.d.ts.map +1 -1
  353. package/dist/providers/model-catalog/catalog.generated.js +360 -232
  354. package/dist/providers/model-catalog/catalog.generated.js.map +1 -1
  355. package/dist/providers/model-catalog/generate-catalog.d.ts.map +1 -1
  356. package/dist/providers/model-catalog/generate-catalog.js +21 -1
  357. package/dist/providers/model-catalog/generate-catalog.js.map +1 -1
  358. package/dist/providers/oauth-account-store.d.ts +84 -0
  359. package/dist/providers/oauth-account-store.d.ts.map +1 -0
  360. package/dist/providers/oauth-account-store.js +142 -0
  361. package/dist/providers/oauth-account-store.js.map +1 -0
  362. package/dist/providers/oauth-accounts.d.ts +24 -0
  363. package/dist/providers/oauth-accounts.d.ts.map +1 -0
  364. package/dist/providers/oauth-accounts.js +37 -0
  365. package/dist/providers/oauth-accounts.js.map +1 -0
  366. package/dist/providers/oauth-pkce.d.ts +53 -0
  367. package/dist/providers/oauth-pkce.d.ts.map +1 -0
  368. package/dist/providers/oauth-pkce.js +200 -0
  369. package/dist/providers/oauth-pkce.js.map +1 -0
  370. package/dist/providers/oauth-session-account.d.ts +5 -0
  371. package/dist/providers/oauth-session-account.d.ts.map +1 -0
  372. package/dist/providers/oauth-session-account.js +24 -0
  373. package/dist/providers/oauth-session-account.js.map +1 -0
  374. package/dist/providers/openai-chat-completions-model.d.ts.map +1 -1
  375. package/dist/providers/openai-chat-completions-model.js +37 -16
  376. package/dist/providers/openai-chat-completions-model.js.map +1 -1
  377. package/dist/providers/openai-compatible-lazy.js.map +1 -1
  378. package/dist/providers/openai-compatible.provider.d.ts +5 -0
  379. package/dist/providers/openai-compatible.provider.d.ts.map +1 -1
  380. package/dist/providers/openai-compatible.provider.js +32 -2
  381. package/dist/providers/openai-compatible.provider.js.map +1 -1
  382. package/dist/providers/openai-responses-model.d.ts +13 -3
  383. package/dist/providers/openai-responses-model.d.ts.map +1 -1
  384. package/dist/providers/openai-responses-model.js +92 -39
  385. package/dist/providers/openai-responses-model.js.map +1 -1
  386. package/dist/providers/openai.provider.d.ts.map +1 -1
  387. package/dist/providers/openai.provider.js +23 -2
  388. package/dist/providers/openai.provider.js.map +1 -1
  389. package/dist/providers/opencode-routing.d.ts +2 -0
  390. package/dist/providers/opencode-routing.d.ts.map +1 -1
  391. package/dist/providers/opencode-routing.js +12 -6
  392. package/dist/providers/opencode-routing.js.map +1 -1
  393. package/dist/providers/opencode-transport-discovery.d.ts +18 -0
  394. package/dist/providers/opencode-transport-discovery.d.ts.map +1 -0
  395. package/dist/providers/opencode-transport-discovery.js +115 -0
  396. package/dist/providers/opencode-transport-discovery.js.map +1 -0
  397. package/dist/providers/openrouter.provider.js.map +1 -1
  398. package/dist/providers/provider-opaque-compatibility.d.ts +58 -0
  399. package/dist/providers/provider-opaque-compatibility.d.ts.map +1 -0
  400. package/dist/providers/provider-opaque-compatibility.js +80 -0
  401. package/dist/providers/provider-opaque-compatibility.js.map +1 -0
  402. package/dist/providers/provider-service.d.ts +1 -1
  403. package/dist/providers/provider-service.d.ts.map +1 -1
  404. package/dist/providers/provider-service.js.map +1 -1
  405. package/dist/providers/registry.d.ts +10 -1
  406. package/dist/providers/registry.d.ts.map +1 -1
  407. package/dist/providers/registry.js.map +1 -1
  408. package/dist/providers/responses-websocket-sessions.d.ts +25 -0
  409. package/dist/providers/responses-websocket-sessions.d.ts.map +1 -0
  410. package/dist/providers/responses-websocket-sessions.js +102 -0
  411. package/dist/providers/responses-websocket-sessions.js.map +1 -0
  412. package/dist/providers/websocket-close-evidence.d.ts +45 -0
  413. package/dist/providers/websocket-close-evidence.d.ts.map +1 -0
  414. package/dist/providers/websocket-close-evidence.js +78 -0
  415. package/dist/providers/websocket-close-evidence.js.map +1 -0
  416. package/dist/providers/websocket-receive-watchdog.d.ts +9 -1
  417. package/dist/providers/websocket-receive-watchdog.d.ts.map +1 -1
  418. package/dist/providers/websocket-receive-watchdog.js +27 -1
  419. package/dist/providers/websocket-receive-watchdog.js.map +1 -1
  420. package/dist/providers/websocket-request-dispatch.d.ts +35 -0
  421. package/dist/providers/websocket-request-dispatch.d.ts.map +1 -0
  422. package/dist/providers/websocket-request-dispatch.js +23 -0
  423. package/dist/providers/websocket-request-dispatch.js.map +1 -0
  424. package/dist/scripts/eval-context-compaction/runner.js +1 -1
  425. package/dist/scripts/eval-context-compaction/runner.js.map +1 -1
  426. package/dist/services/agent-runtime/agent-handle.d.ts.map +1 -1
  427. package/dist/services/agent-runtime/agent-handle.js +8 -5
  428. package/dist/services/agent-runtime/agent-handle.js.map +1 -1
  429. package/dist/services/agent-runtime/agent-runtime.d.ts +1 -1
  430. package/dist/services/agent-runtime/agent-runtime.js +1 -1
  431. package/dist/services/agent-runtime/application-run-loop.d.ts +33 -9
  432. package/dist/services/agent-runtime/application-run-loop.d.ts.map +1 -1
  433. package/dist/services/agent-runtime/application-run-loop.js +300 -87
  434. package/dist/services/agent-runtime/application-run-loop.js.map +1 -1
  435. package/dist/services/agent-runtime/context-compaction/local-context-compactor.d.ts +6 -1
  436. package/dist/services/agent-runtime/context-compaction/local-context-compactor.d.ts.map +1 -1
  437. package/dist/services/agent-runtime/context-compaction/local-context-compactor.js +72 -4
  438. package/dist/services/agent-runtime/context-compaction/local-context-compactor.js.map +1 -1
  439. package/dist/services/agent-runtime/executor.d.ts +1 -1
  440. package/dist/services/agent-runtime/executor.d.ts.map +1 -1
  441. package/dist/services/agent-runtime/executor.js +5 -5
  442. package/dist/services/agent-runtime/executor.js.map +1 -1
  443. package/dist/services/agent-runtime/generation-guard.d.ts +2 -1
  444. package/dist/services/agent-runtime/generation-guard.d.ts.map +1 -1
  445. package/dist/services/agent-runtime/generation-guard.js +7 -2
  446. package/dist/services/agent-runtime/generation-guard.js.map +1 -1
  447. package/dist/services/agent-runtime/run-budget.d.ts +131 -0
  448. package/dist/services/agent-runtime/run-budget.d.ts.map +1 -0
  449. package/dist/services/agent-runtime/run-budget.js +268 -0
  450. package/dist/services/agent-runtime/run-budget.js.map +1 -0
  451. package/dist/services/agent-runtime/tool-invocation-context.d.ts +12 -0
  452. package/dist/services/agent-runtime/tool-invocation-context.d.ts.map +1 -1
  453. package/dist/services/agent-runtime/tool-invocation-context.js.map +1 -1
  454. package/dist/services/agent-runtime/types.d.ts +5 -4
  455. package/dist/services/agent-runtime/types.d.ts.map +1 -1
  456. package/dist/services/agent-stream.d.ts.map +1 -1
  457. package/dist/services/agent-stream.js +2 -1
  458. package/dist/services/agent-stream.js.map +1 -1
  459. package/dist/services/approval/approval-decision-executor.d.ts +6 -1
  460. package/dist/services/approval/approval-decision-executor.d.ts.map +1 -1
  461. package/dist/services/approval/approval-decision-executor.js +15 -3
  462. package/dist/services/approval/approval-decision-executor.js.map +1 -1
  463. package/dist/services/approval/approval-decision-policy.d.ts.map +1 -1
  464. package/dist/services/approval/approval-decision-policy.js +3 -0
  465. package/dist/services/approval/approval-decision-policy.js.map +1 -1
  466. package/dist/services/approval/approval-flow-coordinator.d.ts +2 -0
  467. package/dist/services/approval/approval-flow-coordinator.d.ts.map +1 -1
  468. package/dist/services/approval/approval-flow-coordinator.js +14 -2
  469. package/dist/services/approval/approval-flow-coordinator.js.map +1 -1
  470. package/dist/services/approval/background-subagent-approval-controller.d.ts +3 -1
  471. package/dist/services/approval/background-subagent-approval-controller.d.ts.map +1 -1
  472. package/dist/services/approval/background-subagent-approval-controller.js +7 -4
  473. package/dist/services/approval/background-subagent-approval-controller.js.map +1 -1
  474. package/dist/services/approval/shell-auto-approval-resolver.d.ts +5 -0
  475. package/dist/services/approval/shell-auto-approval-resolver.d.ts.map +1 -1
  476. package/dist/services/approval/shell-auto-approval-resolver.js +8 -0
  477. package/dist/services/approval/shell-auto-approval-resolver.js.map +1 -1
  478. package/dist/services/approval/tool-approval-batch-coordinator.d.ts.map +1 -1
  479. package/dist/services/approval/tool-approval-batch-coordinator.js +20 -11
  480. package/dist/services/approval/tool-approval-batch-coordinator.js.map +1 -1
  481. package/dist/services/approval/tool-ownership-registry.d.ts +5 -1
  482. package/dist/services/approval/tool-ownership-registry.d.ts.map +1 -1
  483. package/dist/services/approval/tool-ownership-registry.js +5 -22
  484. package/dist/services/approval/tool-ownership-registry.js.map +1 -1
  485. package/dist/services/background-task-activity.d.ts +79 -0
  486. package/dist/services/background-task-activity.d.ts.map +1 -0
  487. package/dist/services/background-task-activity.js +34 -0
  488. package/dist/services/background-task-activity.js.map +1 -0
  489. package/dist/services/command-message-streaming.d.ts +4 -2
  490. package/dist/services/command-message-streaming.d.ts.map +1 -1
  491. package/dist/services/command-message-streaming.js +2 -2
  492. package/dist/services/command-message-streaming.js.map +1 -1
  493. package/dist/services/conversation/conversation-adapter-factory.d.ts +6 -2
  494. package/dist/services/conversation/conversation-adapter-factory.d.ts.map +1 -1
  495. package/dist/services/conversation/conversation-adapter-factory.js +5 -1
  496. package/dist/services/conversation/conversation-adapter-factory.js.map +1 -1
  497. package/dist/services/conversation/conversation-adapter.d.ts +41 -9
  498. package/dist/services/conversation/conversation-adapter.d.ts.map +1 -1
  499. package/dist/services/conversation/conversation-adapter.js +218 -37
  500. package/dist/services/conversation/conversation-adapter.js.map +1 -1
  501. package/dist/services/conversation/conversation-decoder.d.ts.map +1 -1
  502. package/dist/services/conversation/conversation-decoder.js +4 -0
  503. package/dist/services/conversation/conversation-decoder.js.map +1 -1
  504. package/dist/services/conversation/conversation-events.d.ts +55 -2
  505. package/dist/services/conversation/conversation-events.d.ts.map +1 -1
  506. package/dist/services/conversation/conversation-orchestrator.d.ts.map +1 -1
  507. package/dist/services/conversation/conversation-orchestrator.js +103 -11
  508. package/dist/services/conversation/conversation-orchestrator.js.map +1 -1
  509. package/dist/services/conversation/conversation-orchestrator.types.d.ts +3 -0
  510. package/dist/services/conversation/conversation-orchestrator.types.d.ts.map +1 -1
  511. package/dist/services/conversation/conversation-persistence.d.ts +38 -2
  512. package/dist/services/conversation/conversation-persistence.d.ts.map +1 -1
  513. package/dist/services/conversation/conversation-persistence.js +160 -16
  514. package/dist/services/conversation/conversation-persistence.js.map +1 -1
  515. package/dist/services/conversation/conversation-replay.d.ts.map +1 -1
  516. package/dist/services/conversation/conversation-replay.js +27 -0
  517. package/dist/services/conversation/conversation-replay.js.map +1 -1
  518. package/dist/services/conversation/conversation-result-builder.d.ts +6 -2
  519. package/dist/services/conversation/conversation-result-builder.d.ts.map +1 -1
  520. package/dist/services/conversation/conversation-result-builder.js +60 -1
  521. package/dist/services/conversation/conversation-result-builder.js.map +1 -1
  522. package/dist/services/conversation/conversation-runtime-factory.d.ts +9 -1
  523. package/dist/services/conversation/conversation-runtime-factory.d.ts.map +1 -1
  524. package/dist/services/conversation/conversation-runtime-factory.js +5 -1
  525. package/dist/services/conversation/conversation-runtime-factory.js.map +1 -1
  526. package/dist/services/conversation/conversation-service.d.ts +32 -3
  527. package/dist/services/conversation/conversation-service.d.ts.map +1 -1
  528. package/dist/services/conversation/conversation-service.js +82 -8
  529. package/dist/services/conversation/conversation-service.js.map +1 -1
  530. package/dist/services/conversation/conversation-state-projector.d.ts +2 -1
  531. package/dist/services/conversation/conversation-state-projector.d.ts.map +1 -1
  532. package/dist/services/conversation/conversation-state-projector.js +31 -3
  533. package/dist/services/conversation/conversation-state-projector.js.map +1 -1
  534. package/dist/services/conversation/run-item-normalizer.d.ts.map +1 -1
  535. package/dist/services/conversation/run-item-normalizer.js +24 -1
  536. package/dist/services/conversation/run-item-normalizer.js.map +1 -1
  537. package/dist/services/conversation-agent-client.d.ts +21 -2
  538. package/dist/services/conversation-agent-client.d.ts.map +1 -1
  539. package/dist/services/cost/model-cost.d.ts +13 -1
  540. package/dist/services/cost/model-cost.d.ts.map +1 -1
  541. package/dist/services/cost/model-cost.js +59 -0
  542. package/dist/services/cost/model-cost.js.map +1 -1
  543. package/dist/services/cost/subscription-providers.d.ts +2 -0
  544. package/dist/services/cost/subscription-providers.d.ts.map +1 -0
  545. package/dist/services/cost/subscription-providers.js +14 -0
  546. package/dist/services/cost/subscription-providers.js.map +1 -0
  547. package/dist/services/grok/grok-credit-usage-service.d.ts +62 -0
  548. package/dist/services/grok/grok-credit-usage-service.d.ts.map +1 -0
  549. package/dist/services/grok/grok-credit-usage-service.js +137 -0
  550. package/dist/services/grok/grok-credit-usage-service.js.map +1 -0
  551. package/dist/services/history-service.d.ts +9 -0
  552. package/dist/services/history-service.d.ts.map +1 -1
  553. package/dist/services/history-service.js +49 -2
  554. package/dist/services/history-service.js.map +1 -1
  555. package/dist/services/hooks/hook-composition.d.ts +17 -0
  556. package/dist/services/hooks/hook-composition.d.ts.map +1 -0
  557. package/dist/services/hooks/hook-composition.js +19 -0
  558. package/dist/services/hooks/hook-composition.js.map +1 -0
  559. package/dist/services/logging/conversation-log-events.d.ts +35 -1
  560. package/dist/services/logging/conversation-log-events.d.ts.map +1 -1
  561. package/dist/services/logging/conversation-log-events.js +17 -0
  562. package/dist/services/logging/conversation-log-events.js.map +1 -1
  563. package/dist/services/logging/conversation-log-writer.d.ts +8 -1
  564. package/dist/services/logging/conversation-log-writer.d.ts.map +1 -1
  565. package/dist/services/logging/conversation-log-writer.js +145 -10
  566. package/dist/services/logging/conversation-log-writer.js.map +1 -1
  567. package/dist/services/logging/conversation-logger.d.ts.map +1 -1
  568. package/dist/services/logging/conversation-logger.js +18 -0
  569. package/dist/services/logging/conversation-logger.js.map +1 -1
  570. package/dist/services/logging/logging-service.d.ts +6 -6
  571. package/dist/services/logging/logging-service.d.ts.map +1 -1
  572. package/dist/services/logging/logging-service.js.map +1 -1
  573. package/dist/services/logging/provider-traffic.d.ts +17 -1
  574. package/dist/services/logging/provider-traffic.d.ts.map +1 -1
  575. package/dist/services/logging/provider-traffic.js +283 -139
  576. package/dist/services/logging/provider-traffic.js.map +1 -1
  577. package/dist/services/memory/memory-capabilities.d.ts.map +1 -1
  578. package/dist/services/memory/memory-capabilities.js +20 -1
  579. package/dist/services/memory/memory-capabilities.js.map +1 -1
  580. package/dist/services/mode-notices.d.ts +1 -6
  581. package/dist/services/mode-notices.d.ts.map +1 -1
  582. package/dist/services/mode-notices.js +16 -3
  583. package/dist/services/mode-notices.js.map +1 -1
  584. package/dist/services/model-service.d.ts +2 -2
  585. package/dist/services/model-service.d.ts.map +1 -1
  586. package/dist/services/model-service.js.map +1 -1
  587. package/dist/services/queue/queue-controller.d.ts +1 -1
  588. package/dist/services/queue/queue-controller.d.ts.map +1 -1
  589. package/dist/services/queue/queue-controller.js +19 -5
  590. package/dist/services/queue/queue-controller.js.map +1 -1
  591. package/dist/services/retry/chain-recovery-fingerprint.d.ts +10 -0
  592. package/dist/services/retry/chain-recovery-fingerprint.d.ts.map +1 -0
  593. package/dist/services/retry/chain-recovery-fingerprint.js +23 -0
  594. package/dist/services/retry/chain-recovery-fingerprint.js.map +1 -0
  595. package/dist/services/retry/recovery-executor.d.ts.map +1 -1
  596. package/dist/services/retry/recovery-executor.js +2 -0
  597. package/dist/services/retry/recovery-executor.js.map +1 -1
  598. package/dist/services/retry/recovery-policy.d.ts.map +1 -1
  599. package/dist/services/retry/recovery-policy.js +4 -0
  600. package/dist/services/retry/recovery-policy.js.map +1 -1
  601. package/dist/services/retry/retry-classifier.d.ts.map +1 -1
  602. package/dist/services/retry/retry-classifier.js +34 -2
  603. package/dist/services/retry/retry-classifier.js.map +1 -1
  604. package/dist/services/retry/retry-contracts.d.ts +14 -0
  605. package/dist/services/retry/retry-contracts.d.ts.map +1 -1
  606. package/dist/services/retry/retry-error-classification.d.ts +17 -3
  607. package/dist/services/retry/retry-error-classification.d.ts.map +1 -1
  608. package/dist/services/retry/retry-error-classification.js +48 -7
  609. package/dist/services/retry/retry-error-classification.js.map +1 -1
  610. package/dist/services/retry/retry-errors.d.ts +4 -0
  611. package/dist/services/retry/retry-errors.d.ts.map +1 -1
  612. package/dist/services/retry/retry-errors.js +7 -0
  613. package/dist/services/retry/retry-errors.js.map +1 -1
  614. package/dist/services/retry/retry-event-presenter.d.ts.map +1 -1
  615. package/dist/services/retry/retry-event-presenter.js +20 -0
  616. package/dist/services/retry/retry-event-presenter.js.map +1 -1
  617. package/dist/services/runtime-setting-router.d.ts.map +1 -1
  618. package/dist/services/runtime-setting-router.js +6 -0
  619. package/dist/services/runtime-setting-router.js.map +1 -1
  620. package/dist/services/service-interfaces.d.ts +96 -13
  621. package/dist/services/service-interfaces.d.ts.map +1 -1
  622. package/dist/services/session/background-task-control.d.ts +6 -0
  623. package/dist/services/session/background-task-control.d.ts.map +1 -1
  624. package/dist/services/session/background-task-control.js +31 -6
  625. package/dist/services/session/background-task-control.js.map +1 -1
  626. package/dist/services/session/background-task-liveness.d.ts +2 -18
  627. package/dist/services/session/background-task-liveness.d.ts.map +1 -1
  628. package/dist/services/session/background-task-liveness.js +7 -22
  629. package/dist/services/session/background-task-liveness.js.map +1 -1
  630. package/dist/services/session/continuation-plan-applier.d.ts.map +1 -1
  631. package/dist/services/session/continuation-plan-applier.js +23 -0
  632. package/dist/services/session/continuation-plan-applier.js.map +1 -1
  633. package/dist/services/session/continuation-recovery-handler.d.ts +2 -0
  634. package/dist/services/session/continuation-recovery-handler.d.ts.map +1 -1
  635. package/dist/services/session/continuation-recovery-handler.js +7 -1
  636. package/dist/services/session/continuation-recovery-handler.js.map +1 -1
  637. package/dist/services/session/initial-turn-recovery-handler.d.ts +1 -0
  638. package/dist/services/session/initial-turn-recovery-handler.d.ts.map +1 -1
  639. package/dist/services/session/initial-turn-recovery-handler.js +12 -2
  640. package/dist/services/session/initial-turn-recovery-handler.js.map +1 -1
  641. package/dist/services/session/session-client-factory.d.ts +3 -1
  642. package/dist/services/session/session-client-factory.d.ts.map +1 -1
  643. package/dist/services/session/session-client-factory.js +2 -2
  644. package/dist/services/session/session-client-factory.js.map +1 -1
  645. package/dist/services/session/session-composition.d.ts +3 -0
  646. package/dist/services/session/session-composition.d.ts.map +1 -1
  647. package/dist/services/session/session-composition.js +52 -8
  648. package/dist/services/session/session-composition.js.map +1 -1
  649. package/dist/services/session/session-stream-processor.d.ts +2 -0
  650. package/dist/services/session/session-stream-processor.d.ts.map +1 -1
  651. package/dist/services/session/session-stream-processor.js +4 -0
  652. package/dist/services/session/session-stream-processor.js.map +1 -1
  653. package/dist/services/session/terminal-result-collector.d.ts +2 -2
  654. package/dist/services/session/terminal-result-collector.d.ts.map +1 -1
  655. package/dist/services/session/terminal-result-collector.js +2 -1
  656. package/dist/services/session/terminal-result-collector.js.map +1 -1
  657. package/dist/services/session/turn-attempt-factory.d.ts +1 -0
  658. package/dist/services/session/turn-attempt-factory.d.ts.map +1 -1
  659. package/dist/services/session/turn-attempt-factory.js.map +1 -1
  660. package/dist/services/session/turn-coordinator.d.ts +1 -1
  661. package/dist/services/session/turn-coordinator.d.ts.map +1 -1
  662. package/dist/services/session/turn-coordinator.js +31 -6
  663. package/dist/services/session/turn-coordinator.js.map +1 -1
  664. package/dist/services/session/turn-workflow.d.ts +4 -1
  665. package/dist/services/session/turn-workflow.d.ts.map +1 -1
  666. package/dist/services/session/turn-workflow.js +48 -7
  667. package/dist/services/session/turn-workflow.js.map +1 -1
  668. package/dist/services/settings/settings-persistence.d.ts +33 -0
  669. package/dist/services/settings/settings-persistence.d.ts.map +1 -1
  670. package/dist/services/settings/settings-persistence.js +102 -4
  671. package/dist/services/settings/settings-persistence.js.map +1 -1
  672. package/dist/services/settings/settings-schema.d.ts +70 -2
  673. package/dist/services/settings/settings-schema.d.ts.map +1 -1
  674. package/dist/services/settings/settings-schema.js +92 -6
  675. package/dist/services/settings/settings-schema.js.map +1 -1
  676. package/dist/services/settings/settings-service.d.ts +57 -3
  677. package/dist/services/settings/settings-service.d.ts.map +1 -1
  678. package/dist/services/settings/settings-service.js +171 -28
  679. package/dist/services/settings/settings-service.js.map +1 -1
  680. package/dist/services/settings/settings-service.mock.d.ts +1 -1
  681. package/dist/services/settings/settings-service.mock.d.ts.map +1 -1
  682. package/dist/services/settings/settings-service.mock.js +3 -6
  683. package/dist/services/settings/settings-service.mock.js.map +1 -1
  684. package/dist/services/settings/settings-sources.d.ts.map +1 -1
  685. package/dist/services/settings/settings-sources.js +16 -0
  686. package/dist/services/settings/settings-sources.js.map +1 -1
  687. package/dist/services/settings/test-helpers/settings-consumer-inventory.d.ts +27 -0
  688. package/dist/services/settings/test-helpers/settings-consumer-inventory.d.ts.map +1 -0
  689. package/dist/services/settings/test-helpers/settings-consumer-inventory.js +165 -0
  690. package/dist/services/settings/test-helpers/settings-consumer-inventory.js.map +1 -0
  691. package/dist/services/shell/background-shell-registry.d.ts +10 -0
  692. package/dist/services/shell/background-shell-registry.d.ts.map +1 -1
  693. package/dist/services/shell/background-shell-registry.js +9 -1
  694. package/dist/services/shell/background-shell-registry.js.map +1 -1
  695. package/dist/services/shell/background-shell-watches.d.ts +28 -3
  696. package/dist/services/shell/background-shell-watches.d.ts.map +1 -1
  697. package/dist/services/shell/background-shell-watches.js +41 -9
  698. package/dist/services/shell/background-shell-watches.js.map +1 -1
  699. package/dist/services/ssh-service.d.ts +81 -9
  700. package/dist/services/ssh-service.d.ts.map +1 -1
  701. package/dist/services/ssh-service.js +211 -37
  702. package/dist/services/ssh-service.js.map +1 -1
  703. package/dist/services/stream-event-processor.d.ts +2 -0
  704. package/dist/services/stream-event-processor.d.ts.map +1 -1
  705. package/dist/services/stream-event-processor.js +17 -7
  706. package/dist/services/stream-event-processor.js.map +1 -1
  707. package/dist/services/subagents/execution-runner.d.ts +1 -1
  708. package/dist/services/subagents/execution-runner.d.ts.map +1 -1
  709. package/dist/services/subagents/execution-runner.js +34 -22
  710. package/dist/services/subagents/execution-runner.js.map +1 -1
  711. package/dist/services/subagents/foreground-subagent-lease.d.ts +11 -1
  712. package/dist/services/subagents/foreground-subagent-lease.d.ts.map +1 -1
  713. package/dist/services/subagents/foreground-subagent-lease.js +10 -1
  714. package/dist/services/subagents/foreground-subagent-lease.js.map +1 -1
  715. package/dist/services/subagents/mentor-runner.d.ts +1 -1
  716. package/dist/services/subagents/mentor-runner.d.ts.map +1 -1
  717. package/dist/services/subagents/mentor-runner.js +10 -3
  718. package/dist/services/subagents/mentor-runner.js.map +1 -1
  719. package/dist/services/subagents/nested-runner.d.ts +11 -1
  720. package/dist/services/subagents/nested-runner.d.ts.map +1 -1
  721. package/dist/services/subagents/nested-runner.js +45 -10
  722. package/dist/services/subagents/nested-runner.js.map +1 -1
  723. package/dist/services/subagents/runtime.d.ts.map +1 -1
  724. package/dist/services/subagents/runtime.js +7 -0
  725. package/dist/services/subagents/runtime.js.map +1 -1
  726. package/dist/services/subagents/subagent-async-registry.d.ts +4 -0
  727. package/dist/services/subagents/subagent-async-registry.d.ts.map +1 -1
  728. package/dist/services/subagents/subagent-async-registry.js +80 -16
  729. package/dist/services/subagents/subagent-async-registry.js.map +1 -1
  730. package/dist/services/subagents/subagent-manager.d.ts +1 -1
  731. package/dist/services/subagents/subagent-manager.d.ts.map +1 -1
  732. package/dist/services/subagents/subagent-manager.js +4 -4
  733. package/dist/services/subagents/subagent-manager.js.map +1 -1
  734. package/dist/services/subagents/subagent-notification-store.d.ts +19 -1
  735. package/dist/services/subagents/subagent-notification-store.d.ts.map +1 -1
  736. package/dist/services/subagents/subagent-notification-store.js +22 -0
  737. package/dist/services/subagents/subagent-notification-store.js.map +1 -1
  738. package/dist/services/subagents/subagent-run-control.d.ts +9 -1
  739. package/dist/services/subagents/subagent-run-control.d.ts.map +1 -1
  740. package/dist/services/subagents/subagent-run-control.js +12 -13
  741. package/dist/services/subagents/subagent-run-control.js.map +1 -1
  742. package/dist/services/subagents/tool-policy.d.ts.map +1 -1
  743. package/dist/services/subagents/tool-policy.js +11 -3
  744. package/dist/services/subagents/tool-policy.js.map +1 -1
  745. package/dist/services/subagents/types.d.ts +25 -2
  746. package/dist/services/subagents/types.d.ts.map +1 -1
  747. package/dist/services/subagents/types.js.map +1 -1
  748. package/dist/services/subagents/utils.d.ts +3 -1
  749. package/dist/services/subagents/utils.d.ts.map +1 -1
  750. package/dist/services/subagents/utils.js +4 -2
  751. package/dist/services/subagents/utils.js.map +1 -1
  752. package/dist/services/workspace/active-workspace-root.d.ts +6 -0
  753. package/dist/services/workspace/active-workspace-root.d.ts.map +1 -1
  754. package/dist/services/workspace/active-workspace-root.js +22 -0
  755. package/dist/services/workspace/active-workspace-root.js.map +1 -1
  756. package/dist/test-helpers/ink-testing.d.ts.map +1 -1
  757. package/dist/test-helpers/ink-testing.js +4 -1
  758. package/dist/test-helpers/ink-testing.js.map +1 -1
  759. package/dist/test-helpers/terminal-e2e.d.ts.map +1 -1
  760. package/dist/test-helpers/terminal-e2e.js +12 -2
  761. package/dist/test-helpers/terminal-e2e.js.map +1 -1
  762. package/dist/tools/agent/activate-skill.d.ts.map +1 -1
  763. package/dist/tools/agent/activate-skill.js +2 -2
  764. package/dist/tools/agent/activate-skill.js.map +1 -1
  765. package/dist/tools/agent/ask-mentor.d.ts.map +1 -1
  766. package/dist/tools/agent/ask-mentor.js +2 -2
  767. package/dist/tools/agent/ask-mentor.js.map +1 -1
  768. package/dist/tools/agent/ask-user-constants.d.ts +2 -2
  769. package/dist/tools/agent/ask-user-constants.d.ts.map +1 -1
  770. package/dist/tools/agent/ask-user-constants.js +1 -1
  771. package/dist/tools/agent/ask-user-constants.js.map +1 -1
  772. package/dist/tools/agent/run-subagent-async.d.ts +2 -11
  773. package/dist/tools/agent/run-subagent-async.d.ts.map +1 -1
  774. package/dist/tools/agent/run-subagent-async.js +8 -2
  775. package/dist/tools/agent/run-subagent-async.js.map +1 -1
  776. package/dist/tools/agent/run-subagent.d.ts.map +1 -1
  777. package/dist/tools/agent/run-subagent.js +8 -9
  778. package/dist/tools/agent/run-subagent.js.map +1 -1
  779. package/dist/tools/file/apply-patch.d.ts +2 -0
  780. package/dist/tools/file/apply-patch.d.ts.map +1 -1
  781. package/dist/tools/file/apply-patch.js +58 -14
  782. package/dist/tools/file/apply-patch.js.map +1 -1
  783. package/dist/tools/file/code-context.d.ts +5 -0
  784. package/dist/tools/file/code-context.d.ts.map +1 -1
  785. package/dist/tools/file/code-context.js +18 -6
  786. package/dist/tools/file/code-context.js.map +1 -1
  787. package/dist/tools/file/create-file.d.ts.map +1 -1
  788. package/dist/tools/file/create-file.js +11 -5
  789. package/dist/tools/file/create-file.js.map +1 -1
  790. package/dist/tools/file/edit-healing.d.ts +7 -0
  791. package/dist/tools/file/edit-healing.d.ts.map +1 -1
  792. package/dist/tools/file/edit-healing.js +7 -7
  793. package/dist/tools/file/edit-healing.js.map +1 -1
  794. package/dist/tools/file/glob.d.ts +3 -0
  795. package/dist/tools/file/glob.d.ts.map +1 -1
  796. package/dist/tools/file/glob.js +9 -3
  797. package/dist/tools/file/glob.js.map +1 -1
  798. package/dist/tools/file/grep.d.ts +5 -0
  799. package/dist/tools/file/grep.d.ts.map +1 -1
  800. package/dist/tools/file/grep.js +10 -6
  801. package/dist/tools/file/grep.js.map +1 -1
  802. package/dist/tools/file/patch-healing.d.ts +31 -0
  803. package/dist/tools/file/patch-healing.d.ts.map +1 -0
  804. package/dist/tools/file/patch-healing.js +231 -0
  805. package/dist/tools/file/patch-healing.js.map +1 -0
  806. package/dist/tools/file/read-file.d.ts +3 -0
  807. package/dist/tools/file/read-file.d.ts.map +1 -1
  808. package/dist/tools/file/read-file.js +9 -3
  809. package/dist/tools/file/read-file.js.map +1 -1
  810. package/dist/tools/file/search-replace.d.ts.map +1 -1
  811. package/dist/tools/file/search-replace.js +24 -6
  812. package/dist/tools/file/search-replace.js.map +1 -1
  813. package/dist/tools/format-helpers.d.ts +6 -0
  814. package/dist/tools/format-helpers.d.ts.map +1 -1
  815. package/dist/tools/format-helpers.js +23 -0
  816. package/dist/tools/format-helpers.js.map +1 -1
  817. package/dist/tools/memory/memory-tools.d.ts.map +1 -1
  818. package/dist/tools/memory/memory-tools.js +2 -2
  819. package/dist/tools/memory/memory-tools.js.map +1 -1
  820. package/dist/tools/system/shell.d.ts +16 -1
  821. package/dist/tools/system/shell.d.ts.map +1 -1
  822. package/dist/tools/system/shell.js +90 -25
  823. package/dist/tools/system/shell.js.map +1 -1
  824. package/dist/tools/types.d.ts +4 -0
  825. package/dist/tools/types.d.ts.map +1 -1
  826. package/dist/tools/types.js.map +1 -1
  827. package/dist/tools/web/web-fetch.d.ts.map +1 -1
  828. package/dist/tools/web/web-fetch.js +2 -2
  829. package/dist/tools/web/web-fetch.js.map +1 -1
  830. package/dist/tools/web/web-search.d.ts.map +1 -1
  831. package/dist/tools/web/web-search.js +2 -2
  832. package/dist/tools/web/web-search.js.map +1 -1
  833. package/dist/types/message.d.ts +1 -1
  834. package/dist/types/message.d.ts.map +1 -1
  835. package/dist/utils/ai/provider-credentials.d.ts +1 -1
  836. package/dist/utils/ai/provider-credentials.d.ts.map +1 -1
  837. package/dist/utils/ai/provider-credentials.js +18 -2
  838. package/dist/utils/ai/provider-credentials.js.map +1 -1
  839. package/dist/utils/ai/token-usage.d.ts +3 -1
  840. package/dist/utils/ai/token-usage.d.ts.map +1 -1
  841. package/dist/utils/ai/token-usage.js +7 -2
  842. package/dist/utils/ai/token-usage.js.map +1 -1
  843. package/dist/utils/apply-diff.d.ts.map +1 -1
  844. package/dist/utils/apply-diff.js +8 -0
  845. package/dist/utils/apply-diff.js.map +1 -1
  846. package/dist/utils/conversation/conversation-event-handler.d.ts.map +1 -1
  847. package/dist/utils/conversation/conversation-event-handler.js +60 -2
  848. package/dist/utils/conversation/conversation-event-handler.js.map +1 -1
  849. package/dist/utils/error-helpers.d.ts.map +1 -1
  850. package/dist/utils/error-helpers.js +8 -0
  851. package/dist/utils/error-helpers.js.map +1 -1
  852. package/dist/utils/inject-warning-into-tool-output.d.ts +30 -0
  853. package/dist/utils/inject-warning-into-tool-output.d.ts.map +1 -1
  854. package/dist/utils/inject-warning-into-tool-output.js +39 -0
  855. package/dist/utils/inject-warning-into-tool-output.js.map +1 -1
  856. package/dist/utils/output/tty-osc.d.ts +1 -1
  857. package/dist/utils/output/tty-osc.js +1 -1
  858. package/dist/utils/settings-command.d.ts.map +1 -1
  859. package/dist/utils/settings-command.js +105 -6
  860. package/dist/utils/settings-command.js.map +1 -1
  861. package/dist/utils/shell/execute-shell.d.ts +8 -0
  862. package/dist/utils/shell/execute-shell.d.ts.map +1 -1
  863. package/dist/utils/shell/execute-shell.js +36 -30
  864. package/dist/utils/shell/execute-shell.js.map +1 -1
  865. package/dist/utils/shell/sandbox/sandbox-env.d.ts +1 -0
  866. package/dist/utils/shell/sandbox/sandbox-env.d.ts.map +1 -1
  867. package/dist/utils/shell/sandbox/sandbox-env.js +2 -0
  868. package/dist/utils/shell/sandbox/sandbox-env.js.map +1 -1
  869. package/dist/utils/shell/sandbox/sandbox-policy.d.ts +2 -0
  870. package/dist/utils/shell/sandbox/sandbox-policy.d.ts.map +1 -1
  871. package/dist/utils/shell/sandbox/sandbox-policy.js +1 -1
  872. package/dist/utils/shell/sandbox/sandbox-policy.js.map +1 -1
  873. package/dist/utils/shell/sandbox/shell-sandbox-runner.d.ts.map +1 -1
  874. package/dist/utils/shell/sandbox/shell-sandbox-runner.js +1 -2
  875. package/dist/utils/shell/sandbox/shell-sandbox-runner.js.map +1 -1
  876. package/dist/utils/shell/shell-child-registry.d.ts +11 -0
  877. package/dist/utils/shell/shell-child-registry.d.ts.map +1 -0
  878. package/dist/utils/shell/shell-child-registry.js +40 -0
  879. package/dist/utils/shell/shell-child-registry.js.map +1 -0
  880. package/dist/utils/shell/shell-output.d.ts.map +1 -1
  881. package/dist/utils/shell/shell-output.js +10 -6
  882. package/dist/utils/shell/shell-output.js.map +1 -1
  883. package/dist/utils/shell/temp-sweep.d.ts +28 -0
  884. package/dist/utils/shell/temp-sweep.d.ts.map +1 -0
  885. package/dist/utils/shell/temp-sweep.js +140 -0
  886. package/dist/utils/shell/temp-sweep.js.map +1 -0
  887. package/dist/utils/streaming/extract-command-messages.d.ts +12 -5
  888. package/dist/utils/streaming/extract-command-messages.d.ts.map +1 -1
  889. package/dist/utils/streaming/extract-command-messages.js +29 -33
  890. package/dist/utils/streaming/extract-command-messages.js.map +1 -1
  891. package/dist/utils/streaming/streaming-session-factory.d.ts +8 -0
  892. package/dist/utils/streaming/streaming-session-factory.d.ts.map +1 -1
  893. package/dist/utils/streaming/streaming-session-factory.js +3 -0
  894. package/dist/utils/streaming/streaming-session-factory.js.map +1 -1
  895. package/dist/utils/value-suggestions.d.ts +8 -0
  896. package/dist/utils/value-suggestions.d.ts.map +1 -1
  897. package/dist/utils/value-suggestions.js +71 -0
  898. package/dist/utils/value-suggestions.js.map +1 -1
  899. package/package.json +14 -10
  900. package/dist/utils/output/synchronized-output.d.ts +0 -35
  901. package/dist/utils/output/synchronized-output.d.ts.map +0 -1
  902. package/dist/utils/output/synchronized-output.js +0 -66
  903. package/dist/utils/output/synchronized-output.js.map +0 -1
@@ -0,0 +1,75 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { GatewayPersistenceError } from './contracts.js';
4
+ import { fsyncDirectory } from './storage.js';
5
+ import { sanitizePendingInteractionDto } from '../interaction-protocol.js';
6
+ export class InteractionCheckpointStore {
7
+ #path;
8
+ #checkpoint = null;
9
+ constructor(directory) {
10
+ this.#path = path.join(directory, 'interaction-checkpoint.json');
11
+ if (fs.existsSync(this.#path)) {
12
+ try {
13
+ const value = JSON.parse(fs.readFileSync(this.#path, 'utf8'));
14
+ if (!value.turnId || !value.generation || !value.interaction)
15
+ throw new Error();
16
+ this.#checkpoint = Object.freeze({
17
+ ...value,
18
+ interaction: sanitizePendingInteractionDto(value.interaction),
19
+ });
20
+ }
21
+ catch {
22
+ throw new GatewayPersistenceError('corrupt', 'interaction checkpoint is corrupt');
23
+ }
24
+ }
25
+ }
26
+ get current() {
27
+ return this.#checkpoint;
28
+ }
29
+ save(checkpoint) {
30
+ const safeCheckpoint = {
31
+ ...checkpoint,
32
+ interaction: sanitizePendingInteractionDto(checkpoint.interaction),
33
+ };
34
+ const temporary = `${this.#path}.${process.pid}.tmp`;
35
+ fs.writeFileSync(temporary, JSON.stringify(safeCheckpoint) + '\n', { mode: 0o600 });
36
+ const fd = fs.openSync(temporary, 'r');
37
+ try {
38
+ fs.fsyncSync(fd);
39
+ }
40
+ finally {
41
+ fs.closeSync(fd);
42
+ }
43
+ fs.renameSync(temporary, this.#path);
44
+ fsyncDirectory(path.dirname(this.#path));
45
+ this.#checkpoint = Object.freeze({
46
+ ...safeCheckpoint,
47
+ });
48
+ }
49
+ clear() {
50
+ try {
51
+ fs.unlinkSync(this.#path);
52
+ }
53
+ catch (error) {
54
+ if (error.code !== 'ENOENT')
55
+ throw error;
56
+ }
57
+ this.#checkpoint = null;
58
+ }
59
+ async recover(journal) {
60
+ const checkpoint = this.#checkpoint;
61
+ if (!checkpoint)
62
+ return;
63
+ await journal.append({
64
+ sessionId: journal.sessionId,
65
+ type: 'interaction_recovered',
66
+ payload: {
67
+ turnId: checkpoint.turnId,
68
+ interaction: sanitizePendingInteractionDto(checkpoint.interaction),
69
+ reason: 'daemon_restart',
70
+ },
71
+ }, { durability: 'critical' });
72
+ this.clear();
73
+ }
74
+ }
75
+ //# sourceMappingURL=interaction-checkpoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interaction-checkpoint.js","sourceRoot":"","sources":["../../../source/gateway/persistence/interaction-checkpoint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,6BAA6B,EAA8B,MAAM,4BAA4B,CAAC;AASvG,MAAM,OAAO,0BAA0B;IAC5B,KAAK,CAAS;IACvB,WAAW,GAAiC,IAAI,CAAC;IAEjD,YAAY,SAAiB;QAC3B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,6BAA6B,CAAC,CAAC;QACjE,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAA0B,CAAC;gBACvF,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,WAAW;oBAAE,MAAM,IAAI,KAAK,EAAE,CAAC;gBAChF,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;oBAC/B,GAAG,KAAK;oBACR,WAAW,EAAE,6BAA6B,CAAC,KAAK,CAAC,WAAW,CAAC;iBAC9D,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,IAAI,uBAAuB,CAAC,SAAS,EAAE,mCAAmC,CAAC,CAAC;YACpF,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,IAAI,CAAC,UAAiC;QACpC,MAAM,cAAc,GAA0B;YAC5C,GAAG,UAAU;YACb,WAAW,EAAE,6BAA6B,CAAC,UAAU,CAAC,WAAW,CAAC;SACnE,CAAC;QACF,MAAM,SAAS,GAAG,GAAG,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,MAAM,CAAC;QACrD,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACpF,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC;YACH,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACnB,CAAC;gBAAS,CAAC;YACT,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACnB,CAAC;QACD,EAAE,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;YAC/B,GAAG,cAAc;SAClB,CAAC,CAAC;IACL,CAAC;IAED,KAAK;QACH,IAAI,CAAC;YACH,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,MAAM,KAAK,CAAC;QACtE,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAgC;QAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,UAAU;YAAE,OAAO;QACxB,MAAM,OAAO,CAAC,MAAM,CAClB;YACE,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE;gBACP,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,WAAW,EAAE,6BAA6B,CAAC,UAAU,CAAC,WAAW,CAAC;gBAClE,MAAM,EAAE,gBAAgB;aACzB;SACF,EACD,EAAE,UAAU,EAAE,UAAU,EAAE,CAC3B,CAAC;QACF,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;CACF"}
@@ -0,0 +1,53 @@
1
+ import { type RestoredState } from '../../services/conversation/conversation-replay.js';
2
+ import type { ConversationService } from '../../services/conversation/conversation-service.js';
3
+ import { type AgentEventEnvelope, type GatewaySessionRecord, type ReplayLiveSubscription } from './contracts.js';
4
+ import { GatewayEventJournalImpl } from './event-journal.js';
5
+ import { GatewaySessionIndex } from './session-index.js';
6
+ import { type GatewayStorageLayout } from './storage.js';
7
+ import type { PendingInteractionDto } from '../interaction-protocol.js';
8
+ export type { PendingInteractionDto } from '../interaction-protocol.js';
9
+ export type ProjectionCommandStatus = 'completed' | 'failed' | 'aborted' | 'unknown';
10
+ export type ProjectionCommand = Readonly<{
11
+ callId: string;
12
+ toolName: string;
13
+ status: ProjectionCommandStatus;
14
+ }>;
15
+ export type InteractionProjection = null | {
16
+ readonly state: 'pending';
17
+ readonly interaction: PendingInteractionDto;
18
+ readonly turnId: string;
19
+ } | {
20
+ readonly state: 'recovered';
21
+ readonly interaction: PendingInteractionDto;
22
+ readonly turnId: string;
23
+ readonly resolvable: false;
24
+ readonly reason: 'daemon_restart' | 'forced_shutdown' | 'persistence_recovery';
25
+ };
26
+ export type SessionProjectionSource = {
27
+ readonly session: GatewaySessionRecord;
28
+ readonly latestSequence: number;
29
+ readonly earliestReplayableSequence: number;
30
+ /** Cursor covered by the hydrated transcript; never below the replay floor. */
31
+ readonly projectionSequence: number;
32
+ /** Journal-sourced terminal tool state, keyed by the owning turn ID. */
33
+ readonly journalCommands: ReadonlyMap<string, readonly ProjectionCommand[]>;
34
+ readonly transcript: RestoredState | null;
35
+ readonly interaction: InteractionProjection;
36
+ readonly resolvedInteractionIds: ReadonlySet<string>;
37
+ subscribeFrom(after: number | null, listener: (event: AgentEventEnvelope) => void): ReplayLiveSubscription;
38
+ };
39
+ export declare function hydrateTranscript(directory: string, expectedSessionId?: string): RestoredState | null;
40
+ export declare function hydrateConversationService(service: ConversationService, directory: string, expectedSessionId?: string): RestoredState | null;
41
+ export declare function createSessionProjectionSource(options: {
42
+ index: GatewaySessionIndex;
43
+ layout: GatewayStorageLayout;
44
+ ownerUserId: string;
45
+ sessionId: string;
46
+ journal: GatewayEventJournalImpl;
47
+ liveInteraction?: () => Promise<{
48
+ state: 'pending';
49
+ interaction: PendingInteractionDto;
50
+ turnId: string;
51
+ } | null> | null;
52
+ }): Promise<SessionProjectionSource>;
53
+ //# sourceMappingURL=projection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../../../source/gateway/persistence/projection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,226 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { decodeLogEnvelope } from '../../services/conversation/conversation-decoder.js';
4
+ import { replayEvents } from '../../services/conversation/conversation-replay.js';
5
+ import { GatewayPersistenceError, } from './contracts.js';
6
+ import { fsyncDirectory } from './storage.js';
7
+ function quarantine(pathname, bytes, suffix) {
8
+ const directory = path.join(path.dirname(pathname), 'corruption');
9
+ fs.mkdirSync(directory, { recursive: true, mode: 0o700 });
10
+ fs.writeFileSync(path.join(directory, `${path.basename(pathname)}.${Date.now()}.${suffix}`), bytes, { mode: 0o600 });
11
+ }
12
+ function rewriteAndSync(pathname, content) {
13
+ fs.writeFileSync(pathname, content, { mode: 0o600 });
14
+ const fd = fs.openSync(pathname, 'r');
15
+ try {
16
+ fs.fsyncSync(fd);
17
+ }
18
+ finally {
19
+ fs.closeSync(fd);
20
+ }
21
+ fsyncDirectory(path.dirname(pathname));
22
+ }
23
+ function decodeLines(pathname, repairFinalTail) {
24
+ const data = fs.readFileSync(pathname, 'utf8');
25
+ const lines = data.split('\n');
26
+ const envelopes = [];
27
+ for (let index = 0; index < lines.length; index += 1) {
28
+ const line = lines[index];
29
+ const isLastWithoutNewline = index === lines.length - 1 && line.length > 0;
30
+ if (!line.trim())
31
+ continue;
32
+ try {
33
+ const envelope = decodeLogEnvelope(JSON.parse(line));
34
+ if (!envelope || !Number.isSafeInteger(envelope.seq) || envelope.seq <= 0) {
35
+ throw new GatewayPersistenceError('corrupt', 'term2 transcript contains an invalid sequence');
36
+ }
37
+ envelopes.push(envelope);
38
+ }
39
+ catch (error) {
40
+ if (repairFinalTail && isLastWithoutNewline) {
41
+ quarantine(pathname, Buffer.from(line, 'utf8'), 'tail');
42
+ const valid = envelopes.map((envelope) => JSON.stringify(envelope) + '\n').join('');
43
+ rewriteAndSync(pathname, valid);
44
+ return { envelopes, warning: `${path.basename(pathname)} torn tail quarantined and repaired` };
45
+ }
46
+ throw error instanceof GatewayPersistenceError
47
+ ? error
48
+ : new GatewayPersistenceError('corrupt', `${path.basename(pathname)} contains invalid JSON`);
49
+ }
50
+ }
51
+ return { envelopes, warning: null };
52
+ }
53
+ function readTerm2Envelopes(directory, expectedSessionId) {
54
+ const canonicalPath = path.join(directory, 'term2.jsonl');
55
+ if (!fs.existsSync(canonicalPath))
56
+ return [];
57
+ const canonical = decodeLines(canonicalPath, true);
58
+ const all = [...canonical.envelopes];
59
+ const deltaPath = path.join(directory, 'term2.deltas');
60
+ if (fs.existsSync(deltaPath)) {
61
+ try {
62
+ all.push(...decodeLines(deltaPath, false).envelopes);
63
+ }
64
+ catch (error) {
65
+ if (error instanceof GatewayPersistenceError) {
66
+ quarantine(deltaPath, fs.readFileSync(deltaPath), 'corrupt');
67
+ // A corrupt sidecar only loses an unsettled turn. The canonical prefix remains replayable.
68
+ }
69
+ else {
70
+ throw new GatewayPersistenceError('corrupt', 'term2 delta sidecar is corrupt');
71
+ }
72
+ }
73
+ }
74
+ all.sort((a, b) => a.seq - b.seq);
75
+ let previous = 0;
76
+ for (const envelope of all) {
77
+ if (envelope.seq <= previous)
78
+ throw new GatewayPersistenceError('corrupt', 'term2 transcript sequence is duplicated');
79
+ previous = envelope.seq;
80
+ if (expectedSessionId &&
81
+ envelope.event.type === 'session_init' &&
82
+ 'id' in envelope.event &&
83
+ envelope.event.id !== expectedSessionId) {
84
+ throw new GatewayPersistenceError('corrupt', 'term2 transcript belongs to another session');
85
+ }
86
+ }
87
+ return all;
88
+ }
89
+ function commandsFromJournal(events) {
90
+ const commandsByTurn = new Map();
91
+ const statusByTerminalEvent = new Map([
92
+ ['turn_completed', 'completed'],
93
+ ['turn_failed', 'failed'],
94
+ ['turn_aborted', 'aborted'],
95
+ ]);
96
+ for (const event of events) {
97
+ if (event.type === 'tool_started') {
98
+ const turnId = typeof event.payload.turnId === 'string' ? event.payload.turnId : null;
99
+ const callId = typeof event.payload.callId === 'string' ? event.payload.callId : null;
100
+ const toolName = typeof event.payload.toolName === 'string' ? event.payload.toolName : null;
101
+ if (!turnId || !callId || !toolName)
102
+ continue;
103
+ const commands = commandsByTurn.get(turnId) ?? [];
104
+ if (!commands.some((command) => command.callId === callId) && commands.length < 64) {
105
+ commands.push({ callId, toolName, status: 'unknown' });
106
+ }
107
+ commandsByTurn.set(turnId, commands);
108
+ continue;
109
+ }
110
+ const status = statusByTerminalEvent.get(event.type);
111
+ const turnId = typeof event.payload.turnId === 'string' ? event.payload.turnId : null;
112
+ if (!status || !turnId)
113
+ continue;
114
+ const commands = commandsByTurn.get(turnId);
115
+ if (!commands)
116
+ continue;
117
+ commandsByTurn.set(turnId, commands.map((command) => ({ ...command, status })));
118
+ }
119
+ return commandsByTurn;
120
+ }
121
+ function interactionFromJournal(journal) {
122
+ let projection = null;
123
+ const resolvedInteractionIds = new Set();
124
+ for (const event of journal.events()) {
125
+ if (event.type === 'interaction_resolved' && typeof event.payload.interactionId === 'string') {
126
+ resolvedInteractionIds.add(event.payload.interactionId);
127
+ }
128
+ if (event.type === 'approval_required' || event.type === 'interaction_updated') {
129
+ projection = {
130
+ state: 'recovered',
131
+ interaction: event.payload.interaction && typeof event.payload.interaction === 'object'
132
+ ? event.payload.interaction
133
+ : {},
134
+ turnId: String(event.payload.turnId),
135
+ resolvable: false,
136
+ reason: 'daemon_restart',
137
+ };
138
+ }
139
+ const recoveredInteractionId = event.type === 'interaction_recovered' &&
140
+ event.payload.interaction &&
141
+ typeof event.payload.interaction === 'object' &&
142
+ typeof event.payload.interaction.interactionId === 'string'
143
+ ? event.payload.interaction.interactionId
144
+ : null;
145
+ if (event.type === 'interaction_recovered' && !resolvedInteractionIds.has(recoveredInteractionId ?? '')) {
146
+ projection = {
147
+ state: 'recovered',
148
+ interaction: event.payload.interaction && typeof event.payload.interaction === 'object'
149
+ ? event.payload.interaction
150
+ : {},
151
+ turnId: String(event.payload.turnId),
152
+ resolvable: false,
153
+ reason: event.payload.reason === 'forced_shutdown' || event.payload.reason === 'persistence_recovery'
154
+ ? event.payload.reason
155
+ : 'daemon_restart',
156
+ };
157
+ }
158
+ if (event.type === 'interaction_resolved' ||
159
+ event.type === 'turn_completed' ||
160
+ event.type === 'turn_aborted' ||
161
+ event.type === 'turn_failed') {
162
+ projection = null;
163
+ }
164
+ }
165
+ return projection;
166
+ }
167
+ export function hydrateTranscript(directory, expectedSessionId) {
168
+ const envelopes = readTerm2Envelopes(directory, expectedSessionId);
169
+ if (envelopes.length === 0)
170
+ return null;
171
+ return replayEvents(envelopes);
172
+ }
173
+ export function hydrateConversationService(service, directory, expectedSessionId) {
174
+ const restored = hydrateTranscript(directory, expectedSessionId);
175
+ if (!restored)
176
+ return null;
177
+ service.importState({
178
+ history: restored.history,
179
+ previousResponseId: restored.previousResponseId,
180
+ toolLedger: restored.toolLedger,
181
+ updatedAt: restored.updatedAt,
182
+ });
183
+ return restored;
184
+ }
185
+ export async function createSessionProjectionSource(options) {
186
+ const session = options.index.getForOwner(options.ownerUserId, options.sessionId);
187
+ const highWater = options.journal.highWater();
188
+ const journalEvents = options.journal.events();
189
+ const journalCommands = commandsFromJournal(journalEvents);
190
+ // The transcript is hydrated from the durable log, so it covers every
191
+ // published journal event. Report that coverage rather than the journal's
192
+ // optional checkpoint, which may still be zero after restart/compaction.
193
+ const projectionSequence = Math.max(highWater.lastPublishedSequence, highWater.firstRetainedEventSequence, highWater.projectionSequence);
194
+ let interaction = interactionFromJournal(options.journal);
195
+ const resolvedInteractionIds = new Set();
196
+ for (const event of journalEvents) {
197
+ if (event.type === 'interaction_resolved' && typeof event.payload.interactionId === 'string') {
198
+ resolvedInteractionIds.add(event.payload.interactionId);
199
+ }
200
+ }
201
+ if (options.liveInteraction) {
202
+ try {
203
+ const live = await options.liveInteraction();
204
+ if (live)
205
+ interaction = live;
206
+ }
207
+ catch {
208
+ // A disposed runtime is represented by the non-resolvable recovery projection.
209
+ }
210
+ }
211
+ const directory = options.layout.existingSessionPath(session.ownerUserId, session.workspaceId, session.id);
212
+ if (!directory)
213
+ throw new GatewayPersistenceError('not_found', 'session persistence directory not found');
214
+ return {
215
+ session,
216
+ latestSequence: highWater.lastPublishedSequence,
217
+ earliestReplayableSequence: highWater.firstRetainedEventSequence,
218
+ projectionSequence,
219
+ journalCommands,
220
+ transcript: hydrateTranscript(directory, session.id),
221
+ interaction,
222
+ resolvedInteractionIds,
223
+ subscribeFrom: (after, listener) => options.journal.subscribeFrom(after, listener, session.transcriptGeneration),
224
+ };
225
+ }
226
+ //# sourceMappingURL=projection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projection.js","sourceRoot":"","sources":["../../../source/gateway/persistence/projection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { type GatewaySessionRecord } from './contracts.js';
2
+ import { GatewaySessionIndex } from './session-index.js';
3
+ import { type GatewayStorageLayout } from './storage.js';
4
+ export type RetentionPolicy = {
5
+ readonly closedRetentionMs: number;
6
+ readonly maxSessionBytes: number;
7
+ readonly maxGlobalBytes: number;
8
+ };
9
+ export declare const DEFAULT_RETENTION_POLICY: RetentionPolicy;
10
+ export declare class GatewayRetentionManager {
11
+ #private;
12
+ constructor(index: GatewaySessionIndex, layout: GatewayStorageLayout, policy?: Partial<RetentionPolicy>);
13
+ sessionBytes(record: GatewaySessionRecord): number;
14
+ evictEligible(now?: number, limit?: number): string[];
15
+ }
16
+ //# sourceMappingURL=retention.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retention.d.ts","sourceRoot":"","sources":["../../../source/gateway/persistence/retention.ts"],"names":[],"mappings":"AAEA,OAAO,EAA2B,KAAK,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAkB,KAAK,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEzE,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,eAIrC,CAAC;AA+BH,qBAAa,uBAAuB;;IAKlC,YAAY,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM,EAO1G;IAED,YAAY,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CAGjD;IAED,aAAa,CAAC,GAAG,SAAa,EAAE,KAAK,SAAM,GAAG,MAAM,EAAE,CAgCrD;CACF"}
@@ -0,0 +1,93 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { GatewayPersistenceError } from './contracts.js';
4
+ import { fsyncDirectory } from './storage.js';
5
+ export const DEFAULT_RETENTION_POLICY = Object.freeze({
6
+ closedRetentionMs: 30 * 24 * 60 * 60 * 1000,
7
+ maxSessionBytes: 128 * 1024 * 1024,
8
+ maxGlobalBytes: 2 * 1024 * 1024 * 1024,
9
+ });
10
+ function directorySize(directory) {
11
+ let total = 0;
12
+ for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {
13
+ const pathname = path.join(directory, entry.name);
14
+ if (entry.isDirectory())
15
+ total += directorySize(pathname);
16
+ else
17
+ total += fs.statSync(pathname).size;
18
+ }
19
+ return total;
20
+ }
21
+ function acquireSessionLock(directory) {
22
+ const lockPath = path.join(directory, 'term2.lock');
23
+ try {
24
+ const fd = fs.openSync(lockPath, 'wx', 0o600);
25
+ try {
26
+ fs.writeSync(fd, JSON.stringify({ pid: process.pid, purpose: 'retention' }));
27
+ fs.fsyncSync(fd);
28
+ }
29
+ finally {
30
+ fs.closeSync(fd);
31
+ }
32
+ return lockPath;
33
+ }
34
+ catch (error) {
35
+ throw new GatewayPersistenceError('storage_capacity', error instanceof Error ? `session lock unavailable: ${error.message}` : 'session lock unavailable');
36
+ }
37
+ }
38
+ export class GatewayRetentionManager {
39
+ #index;
40
+ #layout;
41
+ #policy;
42
+ constructor(index, layout, policy = {}) {
43
+ this.#index = index;
44
+ this.#layout = layout;
45
+ this.#policy = Object.freeze({ ...DEFAULT_RETENTION_POLICY, ...policy });
46
+ if (Object.values(this.#policy).some((value) => !Number.isSafeInteger(value) || value <= 0)) {
47
+ throw new GatewayPersistenceError('storage_capacity', 'retention policy must be finite and positive');
48
+ }
49
+ }
50
+ sessionBytes(record) {
51
+ const directory = this.#layout.existingSessionPath(record.ownerUserId, record.workspaceId, record.id);
52
+ return directory ? directorySize(directory) : 0;
53
+ }
54
+ evictEligible(now = Date.now(), limit = 100) {
55
+ const evicted = [];
56
+ // retentionEligibleAt is written as close-time + the single policy window;
57
+ // the query receives the actual current time and does not apply it again.
58
+ for (const record of this.#index.listEvictionCandidates(new Date(now).toISOString(), limit)) {
59
+ if (record.status !== 'closed')
60
+ continue;
61
+ const directory = this.#layout.existingSessionPath(record.ownerUserId, record.workspaceId, record.id);
62
+ if (!directory)
63
+ continue;
64
+ this.#index.tombstone(record.id);
65
+ let lockPath;
66
+ try {
67
+ lockPath = acquireSessionLock(directory);
68
+ fs.rmSync(directory, { recursive: true, force: false });
69
+ // The removed entry lives below the workspace hash directory.
70
+ fsyncDirectory(path.dirname(directory));
71
+ this.#index.removeTombstoned(record.id);
72
+ evicted.push(record.id);
73
+ }
74
+ catch (error) {
75
+ throw error instanceof GatewayPersistenceError
76
+ ? error
77
+ : new GatewayPersistenceError('storage_capacity', 'session deletion failed');
78
+ }
79
+ finally {
80
+ if (lockPath) {
81
+ try {
82
+ fs.unlinkSync(lockPath);
83
+ }
84
+ catch {
85
+ // The directory may have been removed with the lock inside it.
86
+ }
87
+ }
88
+ }
89
+ }
90
+ return evicted;
91
+ }
92
+ }
93
+ //# sourceMappingURL=retention.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retention.js","sourceRoot":"","sources":["../../../source/gateway/persistence/retention.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { type AdmissionRecord, type GatewaySessionRecord, type SessionListPage } from './contracts.js';
2
+ import type { GatewayStorageLayout } from './storage.js';
3
+ export declare class GatewaySessionIndex {
4
+ #private;
5
+ constructor(layout: GatewayStorageLayout, options?: {
6
+ closedRetentionMs?: number;
7
+ });
8
+ get readonly(): boolean;
9
+ assertHealthy(): void;
10
+ assertIntegrity(): void;
11
+ create(record: Omit<GatewaySessionRecord, 'lastAppendedSequence' | 'lastPublishedSequence' | 'firstRetainedEventSequence' | 'projectionSequence' | 'transcriptGeneration'> & Partial<Pick<GatewaySessionRecord, 'lastAppendedSequence' | 'lastPublishedSequence' | 'firstRetainedEventSequence' | 'projectionSequence' | 'transcriptGeneration'>>): GatewaySessionRecord;
12
+ get(sessionId: string): GatewaySessionRecord | null;
13
+ getForOwner(ownerUserId: string, sessionId: string): GatewaySessionRecord;
14
+ list(ownerUserId: string, options?: {
15
+ limit?: number;
16
+ cursor?: string;
17
+ }): SessionListPage;
18
+ update(sessionId: string, patch: Partial<Pick<GatewaySessionRecord, 'status' | 'updatedAt' | 'lastAppendedSequence' | 'lastPublishedSequence' | 'firstRetainedEventSequence' | 'projectionSequence' | 'transcriptGeneration'>> & {
19
+ activeTurnId?: string | null;
20
+ interruptedAt?: string | null;
21
+ recoveryWarning?: string | null;
22
+ retentionEligibleAt?: string | null;
23
+ }): GatewaySessionRecord;
24
+ listEvictionCandidates(now?: string, limit?: number): GatewaySessionRecord[];
25
+ removeTombstoned(sessionId: string): void;
26
+ tombstone(sessionId: string): void;
27
+ admission(ownerUserId: string, sessionId: string, clientRequestId: string): AdmissionRecord | null;
28
+ insertAdmission(record: AdmissionRecord): void;
29
+ updateAdmission(ownerUserId: string, sessionId: string, clientRequestId: string, patch: Partial<Pick<AdmissionRecord, 'state' | 'result' | 'phase' | 'transcriptChecksum' | 'journalChecksum'>>): AdmissionRecord;
30
+ deleteAdmission(ownerUserId: string, sessionId: string, clientRequestId: string): void;
31
+ listAdmissions(ownerUserId: string, sessionId: string): AdmissionRecord[];
32
+ close(): void;
33
+ }
34
+ //# sourceMappingURL=session-index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-index.d.ts","sourceRoot":"","sources":["../../../source/gateway/persistence/session-index.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,oBAAoB,EAEzB,KAAK,eAAe,EACrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAkEzD,qBAAa,mBAAmB;;IAM9B,YAAY,MAAM,EAAE,oBAAoB,EAAE,OAAO,GAAE;QAAE,iBAAiB,CAAC,EAAE,MAAM,CAAA;KAAO,EA0DrF;IAmBD,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,aAAa,IAAI,IAAI,CAGpB;IAED,eAAe,IAAI,IAAI,CAMtB;IAED,MAAM,CACJ,MAAM,EAAE,IAAI,CACV,oBAAoB,EAClB,sBAAsB,GACtB,uBAAuB,GACvB,4BAA4B,GAC5B,oBAAoB,GACpB,sBAAsB,CACzB,GACC,OAAO,CACL,IAAI,CACF,oBAAoB,EAClB,sBAAsB,GACtB,uBAAuB,GACvB,4BAA4B,GAC5B,oBAAoB,GACpB,sBAAsB,CACzB,CACF,GACF,oBAAoB,CAuCtB;IAED,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI,CAMlD;IAED,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,oBAAoB,CAKxE;IAED,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,eAAe,CAwC5F;IAED,MAAM,CACJ,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,OAAO,CACZ,IAAI,CACF,oBAAoB,EAClB,QAAQ,GACR,WAAW,GACX,sBAAsB,GACtB,uBAAuB,GACvB,4BAA4B,GAC5B,oBAAoB,GACpB,sBAAsB,CACzB,CACF,GAAG;QACF,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAChC,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACrC,GACA,oBAAoB,CA6CtB;IAED,sBAAsB,CAAC,GAAG,SAA2B,EAAE,KAAK,SAAM,GAAG,oBAAoB,EAAE,CAS1F;IAED,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAIxC;IAED,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAWjC;IAED,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAKjG;IAED,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CA8B7C;IAED,eAAe,CACb,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,EACvB,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,oBAAoB,GAAG,iBAAiB,CAAC,CAAC,GAC7G,eAAe,CAqBjB;IAED,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI,CAOrF;IAED,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,eAAe,EAAE,CAOxE;IAED,KAAK,IAAI,IAAI,CAIZ;CACF"}