@qduc/term2 0.1.4 → 0.1.6

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 (575) hide show
  1. package/dist/agent.d.ts.map +1 -1
  2. package/dist/agent.js +4 -24
  3. package/dist/agent.js.map +1 -1
  4. package/dist/app.d.ts.map +1 -1
  5. package/dist/app.js +12 -33
  6. package/dist/app.js.map +1 -1
  7. package/dist/app.parseInput.test.js +4 -4
  8. package/dist/app.parseInput.test.js.map +1 -1
  9. package/dist/cli.js +44 -29
  10. package/dist/cli.js.map +1 -1
  11. package/dist/components/ApprovalPrompt.d.ts.map +1 -1
  12. package/dist/components/ApprovalPrompt.js +14 -11
  13. package/dist/components/ApprovalPrompt.js.map +1 -1
  14. package/dist/components/Banner.d.ts.map +1 -1
  15. package/dist/components/Banner.js +4 -12
  16. package/dist/components/Banner.js.map +1 -1
  17. package/dist/components/BottomArea.d.ts +2 -0
  18. package/dist/components/BottomArea.d.ts.map +1 -1
  19. package/dist/components/BottomArea.js +6 -9
  20. package/dist/components/BottomArea.js.map +1 -1
  21. package/dist/components/BottomArea.test.js +4 -6
  22. package/dist/components/BottomArea.test.js.map +1 -1
  23. package/dist/components/ChatMessage.d.ts.map +1 -1
  24. package/dist/components/ChatMessage.js.map +1 -1
  25. package/dist/components/CommandMessage.d.ts.map +1 -1
  26. package/dist/components/CommandMessage.js +19 -30
  27. package/dist/components/CommandMessage.js.map +1 -1
  28. package/dist/components/CommandMessage.test.js +2 -2
  29. package/dist/components/CommandMessage.test.js.map +1 -1
  30. package/dist/components/ErrorBoundary.d.ts.map +1 -1
  31. package/dist/components/ErrorBoundary.js +3 -9
  32. package/dist/components/ErrorBoundary.js.map +1 -1
  33. package/dist/components/ErrorBoundary.test.js +2 -2
  34. package/dist/components/ErrorBoundary.test.js.map +1 -1
  35. package/dist/components/Input/PopupManager.d.ts.map +1 -1
  36. package/dist/components/Input/PopupManager.js.map +1 -1
  37. package/dist/components/InputBox.d.ts.map +1 -1
  38. package/dist/components/InputBox.js +15 -33
  39. package/dist/components/InputBox.js.map +1 -1
  40. package/dist/components/InputBox.menu-logic.test.js +6 -7
  41. package/dist/components/InputBox.menu-logic.test.js.map +1 -1
  42. package/dist/components/InputBox.test.js +7 -9
  43. package/dist/components/InputBox.test.js.map +1 -1
  44. package/dist/components/LiveResponse.d.ts.map +1 -1
  45. package/dist/components/LiveResponse.js.map +1 -1
  46. package/dist/components/MarkdownRenderer.d.ts.map +1 -1
  47. package/dist/components/MarkdownRenderer.js +12 -12
  48. package/dist/components/MarkdownRenderer.js.map +1 -1
  49. package/dist/components/MessageList.d.ts.map +1 -1
  50. package/dist/components/MessageList.js.map +1 -1
  51. package/dist/components/MessageList.test.js +1 -1
  52. package/dist/components/MessageList.test.js.map +1 -1
  53. package/dist/components/ModelSelectionMenu.d.ts.map +1 -1
  54. package/dist/components/ModelSelectionMenu.js +35 -31
  55. package/dist/components/ModelSelectionMenu.js.map +1 -1
  56. package/dist/components/ModelSelectionMenu.test.js +9 -9
  57. package/dist/components/ModelSelectionMenu.test.js.map +1 -1
  58. package/dist/components/PathSelectionMenu.d.ts.map +1 -1
  59. package/dist/components/PathSelectionMenu.js +1 -1
  60. package/dist/components/PathSelectionMenu.js.map +1 -1
  61. package/dist/components/SettingsSelectionMenu.d.ts.map +1 -1
  62. package/dist/components/SettingsSelectionMenu.js +1 -1
  63. package/dist/components/SettingsSelectionMenu.js.map +1 -1
  64. package/dist/components/SettingsSelectionMenu.test.js +4 -4
  65. package/dist/components/SettingsSelectionMenu.test.js.map +1 -1
  66. package/dist/components/SettingsValueSelectionMenu.d.ts.map +1 -1
  67. package/dist/components/SettingsValueSelectionMenu.js +5 -6
  68. package/dist/components/SettingsValueSelectionMenu.js.map +1 -1
  69. package/dist/components/SettingsValueSelectionMenu.test.js +5 -5
  70. package/dist/components/SettingsValueSelectionMenu.test.js.map +1 -1
  71. package/dist/components/SlashCommandMenu.d.ts.map +1 -1
  72. package/dist/components/SlashCommandMenu.js +1 -1
  73. package/dist/components/SlashCommandMenu.js.map +1 -1
  74. package/dist/components/StatusBar.d.ts +2 -0
  75. package/dist/components/StatusBar.d.ts.map +1 -1
  76. package/dist/components/StatusBar.js +45 -41
  77. package/dist/components/StatusBar.js.map +1 -1
  78. package/dist/components/StatusBar.test.d.ts +2 -0
  79. package/dist/components/StatusBar.test.d.ts.map +1 -0
  80. package/dist/components/StatusBar.test.js +19 -0
  81. package/dist/components/StatusBar.test.js.map +1 -0
  82. package/dist/context/InputContext.d.ts.map +1 -1
  83. package/dist/context/InputContext.js.map +1 -1
  84. package/dist/context/InputContext.stability.test.js +1 -1
  85. package/dist/context/InputContext.stability.test.js.map +1 -1
  86. package/dist/context/InputContext.test.js +15 -15
  87. package/dist/context/InputContext.test.js.map +1 -1
  88. package/dist/hooks/use-conversation.d.ts +5 -13
  89. package/dist/hooks/use-conversation.d.ts.map +1 -1
  90. package/dist/hooks/use-conversation.js +40 -148
  91. package/dist/hooks/use-conversation.js.map +1 -1
  92. package/dist/hooks/use-input-history.d.ts.map +1 -1
  93. package/dist/hooks/use-input-history.js +1 -3
  94. package/dist/hooks/use-input-history.js.map +1 -1
  95. package/dist/hooks/use-model-selection.d.ts.map +1 -1
  96. package/dist/hooks/use-model-selection.js +9 -35
  97. package/dist/hooks/use-model-selection.js.map +1 -1
  98. package/dist/hooks/use-path-completion.d.ts.map +1 -1
  99. package/dist/hooks/use-path-completion.js +6 -6
  100. package/dist/hooks/use-path-completion.js.map +1 -1
  101. package/dist/hooks/use-setting.d.ts.map +1 -1
  102. package/dist/hooks/use-setting.js +3 -6
  103. package/dist/hooks/use-setting.js.map +1 -1
  104. package/dist/hooks/use-settings-completion.d.ts.map +1 -1
  105. package/dist/hooks/use-settings-completion.js +10 -12
  106. package/dist/hooks/use-settings-completion.js.map +1 -1
  107. package/dist/hooks/use-settings-completion.test.js +46 -46
  108. package/dist/hooks/use-settings-completion.test.js.map +1 -1
  109. package/dist/hooks/use-settings-value-completion.d.ts.map +1 -1
  110. package/dist/hooks/use-settings-value-completion.js +13 -43
  111. package/dist/hooks/use-settings-value-completion.js.map +1 -1
  112. package/dist/hooks/use-settings-value-completion.test.js +12 -18
  113. package/dist/hooks/use-settings-value-completion.test.js.map +1 -1
  114. package/dist/hooks/use-slash-commands.d.ts +1 -1
  115. package/dist/hooks/use-slash-commands.d.ts.map +1 -1
  116. package/dist/hooks/use-slash-commands.js +6 -11
  117. package/dist/hooks/use-slash-commands.js.map +1 -1
  118. package/dist/hooks/use-slash-commands.test.js +24 -24
  119. package/dist/hooks/use-slash-commands.test.js.map +1 -1
  120. package/dist/lib/editor-impl.d.ts.map +1 -1
  121. package/dist/lib/editor-impl.js +6 -16
  122. package/dist/lib/editor-impl.js.map +1 -1
  123. package/dist/lib/editor-impl.test.js.map +1 -1
  124. package/dist/lib/mentor-client.d.ts +41 -0
  125. package/dist/lib/mentor-client.d.ts.map +1 -0
  126. package/dist/lib/mentor-client.js +146 -0
  127. package/dist/lib/mentor-client.js.map +1 -0
  128. package/dist/lib/mentor-client.test.d.ts +2 -0
  129. package/dist/lib/mentor-client.test.d.ts.map +1 -0
  130. package/dist/lib/mentor-client.test.js +440 -0
  131. package/dist/lib/mentor-client.test.js.map +1 -0
  132. package/dist/lib/openai-agent-client.chat.test.js +33 -8
  133. package/dist/lib/openai-agent-client.chat.test.js.map +1 -1
  134. package/dist/lib/openai-agent-client.d.ts.map +1 -1
  135. package/dist/lib/openai-agent-client.flex-tier.test.js +5 -5
  136. package/dist/lib/openai-agent-client.flex-tier.test.js.map +1 -1
  137. package/dist/lib/openai-agent-client.js +99 -88
  138. package/dist/lib/openai-agent-client.js.map +1 -1
  139. package/dist/lib/openai-agent-client.public-methods.test.js +186 -12
  140. package/dist/lib/openai-agent-client.public-methods.test.js.map +1 -1
  141. package/dist/lib/openai-agent-client.test.js +17 -17
  142. package/dist/lib/openai-agent-client.test.js.map +1 -1
  143. package/dist/lib/retry-strategy.d.ts +43 -0
  144. package/dist/lib/retry-strategy.d.ts.map +1 -0
  145. package/dist/lib/retry-strategy.js +93 -0
  146. package/dist/lib/retry-strategy.js.map +1 -0
  147. package/dist/lib/retry-strategy.test.d.ts +2 -0
  148. package/dist/lib/retry-strategy.test.d.ts.map +1 -0
  149. package/dist/lib/retry-strategy.test.js +200 -0
  150. package/dist/lib/retry-strategy.test.js.map +1 -0
  151. package/dist/lib/tool-invoke.d.ts.map +1 -1
  152. package/dist/lib/tool-invoke.js.map +1 -1
  153. package/dist/lib/tool-invoke.test.js.map +1 -1
  154. package/dist/no-singleton-imports.test.js +1 -1
  155. package/dist/no-singleton-imports.test.js.map +1 -1
  156. package/dist/non-interactive.d.ts +20 -0
  157. package/dist/non-interactive.d.ts.map +1 -0
  158. package/dist/non-interactive.js +86 -0
  159. package/dist/non-interactive.js.map +1 -0
  160. package/dist/non-interactive.test.d.ts +2 -0
  161. package/dist/non-interactive.test.d.ts.map +1 -0
  162. package/dist/non-interactive.test.js +213 -0
  163. package/dist/non-interactive.test.js.map +1 -0
  164. package/dist/prompts/anthropic.md +11 -11
  165. package/dist/prompts/codex.md +63 -63
  166. package/dist/prompts/gpt-5.md +95 -95
  167. package/dist/prompts/mentor-addon.md +6 -5
  168. package/dist/prompts/prompt-selector.d.ts +8 -0
  169. package/dist/prompts/prompt-selector.d.ts.map +1 -0
  170. package/dist/prompts/prompt-selector.js +21 -0
  171. package/dist/prompts/prompt-selector.js.map +1 -0
  172. package/dist/prompts/prompt-selector.test.d.ts +2 -0
  173. package/dist/prompts/prompt-selector.test.d.ts.map +1 -0
  174. package/dist/prompts/prompt-selector.test.js +21 -0
  175. package/dist/prompts/prompt-selector.test.js.map +1 -0
  176. package/dist/prompts/prompt-selector.test.ts +32 -0
  177. package/dist/prompts/prompt-selector.ts +30 -0
  178. package/dist/prompts/simple.md +58 -58
  179. package/dist/providers/index.d.ts.map +1 -1
  180. package/dist/providers/index.js.map +1 -1
  181. package/dist/providers/openai-compatible/api.d.ts.map +1 -1
  182. package/dist/providers/openai-compatible/api.js.map +1 -1
  183. package/dist/providers/openai-compatible/model.d.ts.map +1 -1
  184. package/dist/providers/openai-compatible/model.js +19 -53
  185. package/dist/providers/openai-compatible/model.js.map +1 -1
  186. package/dist/providers/openai-compatible/provider.d.ts.map +1 -1
  187. package/dist/providers/openai-compatible/provider.js.map +1 -1
  188. package/dist/providers/openai-compatible/reasoning-content.test.js +2 -2
  189. package/dist/providers/openai-compatible/reasoning-content.test.js.map +1 -1
  190. package/dist/providers/openai-compatible/utils.d.ts.map +1 -1
  191. package/dist/providers/openai-compatible/utils.js.map +1 -1
  192. package/dist/providers/openai-compatible.provider.d.ts.map +1 -1
  193. package/dist/providers/openai-compatible.provider.js +5 -1
  194. package/dist/providers/openai-compatible.provider.js.map +1 -1
  195. package/dist/providers/openai.provider.js +4 -0
  196. package/dist/providers/openai.provider.js.map +1 -1
  197. package/dist/providers/openrouter/api.d.ts.map +1 -1
  198. package/dist/providers/openrouter/api.js +5 -13
  199. package/dist/providers/openrouter/api.js.map +1 -1
  200. package/dist/providers/openrouter/converters.d.ts.map +1 -1
  201. package/dist/providers/openrouter/converters.js +9 -28
  202. package/dist/providers/openrouter/converters.js.map +1 -1
  203. package/dist/providers/openrouter/converters.test.js +7 -11
  204. package/dist/providers/openrouter/converters.test.js.map +1 -1
  205. package/dist/providers/openrouter/index.d.ts.map +1 -1
  206. package/dist/providers/openrouter/index.js.map +1 -1
  207. package/dist/providers/openrouter/model.d.ts.map +1 -1
  208. package/dist/providers/openrouter/model.js +19 -55
  209. package/dist/providers/openrouter/model.js.map +1 -1
  210. package/dist/providers/openrouter/provider.d.ts.map +1 -1
  211. package/dist/providers/openrouter/provider.js.map +1 -1
  212. package/dist/providers/openrouter/reasoning-content.test.js +1 -1
  213. package/dist/providers/openrouter/reasoning-content.test.js.map +1 -1
  214. package/dist/providers/openrouter/utils.d.ts.map +1 -1
  215. package/dist/providers/openrouter/utils.js +2 -3
  216. package/dist/providers/openrouter/utils.js.map +1 -1
  217. package/dist/providers/openrouter.api.retry.test.js.map +1 -1
  218. package/dist/providers/openrouter.provider.createRunner.test.js +1 -1
  219. package/dist/providers/openrouter.provider.createRunner.test.js.map +1 -1
  220. package/dist/providers/openrouter.provider.js +6 -4
  221. package/dist/providers/openrouter.provider.js.map +1 -1
  222. package/dist/providers/openrouter.test.js +13 -17
  223. package/dist/providers/openrouter.test.js.map +1 -1
  224. package/dist/providers/registry.d.ts +5 -0
  225. package/dist/providers/registry.d.ts.map +1 -1
  226. package/dist/providers/registry.js.map +1 -1
  227. package/dist/providers/registry.test.js +11 -11
  228. package/dist/providers/registry.test.js.map +1 -1
  229. package/dist/providers/web-search/index.d.ts +1 -1
  230. package/dist/providers/web-search/index.d.ts.map +1 -1
  231. package/dist/providers/web-search/index.js.map +1 -1
  232. package/dist/providers/web-search/registry.d.ts.map +1 -1
  233. package/dist/providers/web-search/registry.js.map +1 -1
  234. package/dist/providers/web-search/registry.test.js +14 -14
  235. package/dist/providers/web-search/registry.test.js.map +1 -1
  236. package/dist/providers/web-search/tavily.provider.d.ts.map +1 -1
  237. package/dist/providers/web-search/tavily.provider.js +4 -4
  238. package/dist/providers/web-search/tavily.provider.js.map +1 -1
  239. package/dist/providers/web-search/tavily.provider.test.js +7 -7
  240. package/dist/providers/web-search/tavily.provider.test.js.map +1 -1
  241. package/dist/providers/web-search/types.d.ts.map +1 -1
  242. package/dist/scripts/extract-provider-traffic.d.ts +3 -0
  243. package/dist/scripts/extract-provider-traffic.d.ts.map +1 -0
  244. package/dist/scripts/extract-provider-traffic.js +32 -0
  245. package/dist/scripts/extract-provider-traffic.js.map +1 -0
  246. package/dist/services/approval-state.d.ts +24 -0
  247. package/dist/services/approval-state.d.ts.map +1 -0
  248. package/dist/services/approval-state.js +41 -0
  249. package/dist/services/approval-state.js.map +1 -0
  250. package/dist/services/approval-state.test.d.ts +2 -0
  251. package/dist/services/approval-state.test.d.ts.map +1 -0
  252. package/dist/services/approval-state.test.js +59 -0
  253. package/dist/services/approval-state.test.js.map +1 -0
  254. package/dist/services/command-message-streaming.d.ts +12 -0
  255. package/dist/services/command-message-streaming.d.ts.map +1 -0
  256. package/dist/services/command-message-streaming.js +68 -0
  257. package/dist/services/command-message-streaming.js.map +1 -0
  258. package/dist/services/command-message-streaming.test.d.ts +2 -0
  259. package/dist/services/command-message-streaming.test.d.ts.map +1 -0
  260. package/dist/services/command-message-streaming.test.js +78 -0
  261. package/dist/services/command-message-streaming.test.js.map +1 -0
  262. package/dist/services/conversation-events.d.ts +5 -13
  263. package/dist/services/conversation-events.d.ts.map +1 -1
  264. package/dist/services/conversation-integration.test.d.ts +2 -0
  265. package/dist/services/conversation-integration.test.d.ts.map +1 -0
  266. package/dist/services/conversation-integration.test.js +155 -0
  267. package/dist/services/conversation-integration.test.js.map +1 -0
  268. package/dist/services/conversation-result-builder.d.ts +41 -0
  269. package/dist/services/conversation-result-builder.d.ts.map +1 -0
  270. package/dist/services/conversation-result-builder.js +110 -0
  271. package/dist/services/conversation-result-builder.js.map +1 -0
  272. package/dist/services/conversation-result-builder.test.d.ts +2 -0
  273. package/dist/services/conversation-result-builder.test.d.ts.map +1 -0
  274. package/dist/services/conversation-result-builder.test.js +76 -0
  275. package/dist/services/conversation-result-builder.test.js.map +1 -0
  276. package/dist/services/conversation-service.d.ts +1 -1
  277. package/dist/services/conversation-service.d.ts.map +1 -1
  278. package/dist/services/conversation-service.js.map +1 -1
  279. package/dist/services/conversation-session-reasoning.test.js +3 -3
  280. package/dist/services/conversation-session-reasoning.test.js.map +1 -1
  281. package/dist/services/conversation-session.d.ts +7 -17
  282. package/dist/services/conversation-session.d.ts.map +1 -1
  283. package/dist/services/conversation-session.js +290 -278
  284. package/dist/services/conversation-session.js.map +1 -1
  285. package/dist/services/conversation-session.usage.test.d.ts +2 -0
  286. package/dist/services/conversation-session.usage.test.d.ts.map +1 -0
  287. package/dist/services/conversation-session.usage.test.js +59 -0
  288. package/dist/services/conversation-session.usage.test.js.map +1 -0
  289. package/dist/services/conversation-store.d.ts.map +1 -1
  290. package/dist/services/conversation-store.js +3 -9
  291. package/dist/services/conversation-store.js.map +1 -1
  292. package/dist/services/conversation-store.test.js +17 -14
  293. package/dist/services/conversation-store.test.js.map +1 -1
  294. package/dist/services/execution-context.d.ts.map +1 -1
  295. package/dist/services/execution-context.js.map +1 -1
  296. package/dist/services/execution-context.test.js +7 -7
  297. package/dist/services/execution-context.test.js.map +1 -1
  298. package/dist/services/file-service.d.ts.map +1 -1
  299. package/dist/services/file-service.js +5 -9
  300. package/dist/services/file-service.js.map +1 -1
  301. package/dist/services/history-service.d.ts.map +1 -1
  302. package/dist/services/history-service.js +3 -7
  303. package/dist/services/history-service.js.map +1 -1
  304. package/dist/services/logging-contract.d.ts +74 -0
  305. package/dist/services/logging-contract.d.ts.map +1 -0
  306. package/dist/services/logging-contract.js +157 -0
  307. package/dist/services/logging-contract.js.map +1 -0
  308. package/dist/services/logging-contract.test.d.ts +2 -0
  309. package/dist/services/logging-contract.test.d.ts.map +1 -0
  310. package/dist/services/logging-contract.test.js +66 -0
  311. package/dist/services/logging-contract.test.js.map +1 -0
  312. package/dist/services/logging-service.d.ts +5 -0
  313. package/dist/services/logging-service.d.ts.map +1 -1
  314. package/dist/services/logging-service.js +93 -21
  315. package/dist/services/logging-service.js.map +1 -1
  316. package/dist/services/model-service.d.ts.map +1 -1
  317. package/dist/services/model-service.js +2 -2
  318. package/dist/services/model-service.js.map +1 -1
  319. package/dist/services/model-service.test.js +6 -6
  320. package/dist/services/model-service.test.js.map +1 -1
  321. package/dist/services/service-interfaces.d.ts.map +1 -1
  322. package/dist/services/settings-env.d.ts +9 -0
  323. package/dist/services/settings-env.d.ts.map +1 -0
  324. package/dist/services/settings-env.js +75 -0
  325. package/dist/services/settings-env.js.map +1 -0
  326. package/dist/services/settings-env.test.d.ts +2 -0
  327. package/dist/services/settings-env.test.d.ts.map +1 -0
  328. package/dist/services/settings-env.test.js +32 -0
  329. package/dist/services/settings-env.test.js.map +1 -0
  330. package/dist/services/settings-merger.d.ts +26 -0
  331. package/dist/services/settings-merger.d.ts.map +1 -0
  332. package/dist/services/settings-merger.js +122 -0
  333. package/dist/services/settings-merger.js.map +1 -0
  334. package/dist/services/settings-merger.test.d.ts +2 -0
  335. package/dist/services/settings-merger.test.d.ts.map +1 -0
  336. package/dist/services/settings-merger.test.js +26 -0
  337. package/dist/services/settings-merger.test.js.map +1 -0
  338. package/dist/services/settings-persistence.d.ts +32 -0
  339. package/dist/services/settings-persistence.d.ts.map +1 -0
  340. package/dist/services/settings-persistence.js +134 -0
  341. package/dist/services/settings-persistence.js.map +1 -0
  342. package/dist/services/settings-persistence.test.d.ts +2 -0
  343. package/dist/services/settings-persistence.test.d.ts.map +1 -0
  344. package/dist/services/settings-persistence.test.js +51 -0
  345. package/dist/services/settings-persistence.test.js.map +1 -0
  346. package/dist/services/settings-schema.d.ts +320 -0
  347. package/dist/services/settings-schema.d.ts.map +1 -0
  348. package/dist/services/settings-schema.js +272 -0
  349. package/dist/services/settings-schema.js.map +1 -0
  350. package/dist/services/settings-service.d.ts +4 -248
  351. package/dist/services/settings-service.d.ts.map +1 -1
  352. package/dist/services/settings-service.js +45 -641
  353. package/dist/services/settings-service.js.map +1 -1
  354. package/dist/services/settings-service.mock.d.ts.map +1 -1
  355. package/dist/services/settings-service.mock.js.map +1 -1
  356. package/dist/services/singleton-deprecation.test.js +2 -2
  357. package/dist/services/singleton-deprecation.test.js.map +1 -1
  358. package/dist/services/ssh-service.d.ts.map +1 -1
  359. package/dist/services/ssh-service.js +8 -7
  360. package/dist/services/ssh-service.js.map +1 -1
  361. package/dist/services/ssh-service.test.js +15 -13
  362. package/dist/services/ssh-service.test.js.map +1 -1
  363. package/dist/services/stream-event-parsing.d.ts +4 -0
  364. package/dist/services/stream-event-parsing.d.ts.map +1 -0
  365. package/dist/services/stream-event-parsing.js +76 -0
  366. package/dist/services/stream-event-parsing.js.map +1 -0
  367. package/dist/services/stream-event-parsing.test.d.ts +2 -0
  368. package/dist/services/stream-event-parsing.test.d.ts.map +1 -0
  369. package/dist/services/stream-event-parsing.test.js +59 -0
  370. package/dist/services/stream-event-parsing.test.js.map +1 -0
  371. package/dist/services/stream-event-processor.d.ts +32 -0
  372. package/dist/services/stream-event-processor.d.ts.map +1 -0
  373. package/dist/services/stream-event-processor.js +344 -0
  374. package/dist/services/stream-event-processor.js.map +1 -0
  375. package/dist/services/stream-event-processor.test.d.ts +2 -0
  376. package/dist/services/stream-event-processor.test.d.ts.map +1 -0
  377. package/dist/services/stream-event-processor.test.js +117 -0
  378. package/dist/services/stream-event-processor.test.js.map +1 -0
  379. package/dist/tools/apply-patch.d.ts.map +1 -1
  380. package/dist/tools/apply-patch.js +45 -35
  381. package/dist/tools/apply-patch.js.map +1 -1
  382. package/dist/tools/apply-patch.test.js +23 -0
  383. package/dist/tools/apply-patch.test.js.map +1 -1
  384. package/dist/tools/ask-mentor.d.ts.map +1 -1
  385. package/dist/tools/ask-mentor.js +5 -15
  386. package/dist/tools/ask-mentor.js.map +1 -1
  387. package/dist/tools/ask-mentor.test.js +1 -1
  388. package/dist/tools/ask-mentor.test.js.map +1 -1
  389. package/dist/tools/create-file.d.ts.map +1 -1
  390. package/dist/tools/create-file.js +2 -2
  391. package/dist/tools/create-file.js.map +1 -1
  392. package/dist/tools/create-file.test.js.map +1 -1
  393. package/dist/tools/edit-healing.d.ts.map +1 -1
  394. package/dist/tools/edit-healing.js +5 -4
  395. package/dist/tools/edit-healing.js.map +1 -1
  396. package/dist/tools/edit-healing.test.js.map +1 -1
  397. package/dist/tools/find-files.d.ts +1 -0
  398. package/dist/tools/find-files.d.ts.map +1 -1
  399. package/dist/tools/find-files.js +93 -24
  400. package/dist/tools/find-files.js.map +1 -1
  401. package/dist/tools/find-files.test.js +46 -2
  402. package/dist/tools/find-files.test.js.map +1 -1
  403. package/dist/tools/format-helpers.d.ts.map +1 -1
  404. package/dist/tools/format-helpers.js +2 -6
  405. package/dist/tools/format-helpers.js.map +1 -1
  406. package/dist/tools/grep.d.ts +1 -1
  407. package/dist/tools/grep.d.ts.map +1 -1
  408. package/dist/tools/grep.js +6 -21
  409. package/dist/tools/grep.js.map +1 -1
  410. package/dist/tools/read-file.d.ts.map +1 -1
  411. package/dist/tools/read-file.js +3 -7
  412. package/dist/tools/read-file.js.map +1 -1
  413. package/dist/tools/read-file.test.js.map +1 -1
  414. package/dist/tools/search-replace.d.ts.map +1 -1
  415. package/dist/tools/search-replace.js +14 -31
  416. package/dist/tools/search-replace.js.map +1 -1
  417. package/dist/tools/search-replace.test.js.map +1 -1
  418. package/dist/tools/search.d.ts +1 -1
  419. package/dist/tools/search.d.ts.map +1 -1
  420. package/dist/tools/search.js +6 -16
  421. package/dist/tools/search.js.map +1 -1
  422. package/dist/tools/shell.d.ts +1 -1
  423. package/dist/tools/shell.d.ts.map +1 -1
  424. package/dist/tools/shell.js +25 -51
  425. package/dist/tools/shell.js.map +1 -1
  426. package/dist/tools/shell.test.d.ts +2 -0
  427. package/dist/tools/shell.test.d.ts.map +1 -0
  428. package/dist/tools/shell.test.js +70 -0
  429. package/dist/tools/shell.test.js.map +1 -0
  430. package/dist/tools/tool-names.d.ts +3 -0
  431. package/dist/tools/tool-names.d.ts.map +1 -0
  432. package/dist/tools/tool-names.js +3 -0
  433. package/dist/tools/tool-names.js.map +1 -0
  434. package/dist/tools/tool-names.test.d.ts +2 -0
  435. package/dist/tools/tool-names.test.d.ts.map +1 -0
  436. package/dist/tools/tool-names.test.js +7 -0
  437. package/dist/tools/tool-names.test.js.map +1 -0
  438. package/dist/tools/types.d.ts.map +1 -1
  439. package/dist/tools/utils.d.ts.map +1 -1
  440. package/dist/tools/utils.js +3 -8
  441. package/dist/tools/utils.js.map +1 -1
  442. package/dist/tools/web-fetch.d.ts +4 -4
  443. package/dist/tools/web-fetch.d.ts.map +1 -1
  444. package/dist/tools/web-fetch.js +32 -249
  445. package/dist/tools/web-fetch.js.map +1 -1
  446. package/dist/tools/web-fetch.test.js +3 -3
  447. package/dist/tools/web-fetch.test.js.map +1 -1
  448. package/dist/tools/web-search.d.ts.map +1 -1
  449. package/dist/tools/web-search.js +6 -10
  450. package/dist/tools/web-search.js.map +1 -1
  451. package/dist/tools/web-search.test.js +12 -14
  452. package/dist/tools/web-search.test.js.map +1 -1
  453. package/dist/types/messages.d.ts +29 -0
  454. package/dist/types/messages.d.ts.map +1 -0
  455. package/dist/types/messages.js +2 -0
  456. package/dist/types/messages.js.map +1 -0
  457. package/dist/utils/command-logger.d.ts.map +1 -1
  458. package/dist/utils/command-logger.js.map +1 -1
  459. package/dist/utils/command-safety/constants.d.ts.map +1 -1
  460. package/dist/utils/command-safety/constants.js +1 -9
  461. package/dist/utils/command-safety/constants.js.map +1 -1
  462. package/dist/utils/command-safety/find-helpers.d.ts.map +1 -1
  463. package/dist/utils/command-safety/find-helpers.js +4 -9
  464. package/dist/utils/command-safety/find-helpers.js.map +1 -1
  465. package/dist/utils/command-safety/handlers/find-handler.d.ts.map +1 -1
  466. package/dist/utils/command-safety/handlers/find-handler.js +3 -10
  467. package/dist/utils/command-safety/handlers/find-handler.js.map +1 -1
  468. package/dist/utils/command-safety/handlers/git-handler.d.ts.map +1 -1
  469. package/dist/utils/command-safety/handlers/git-handler.js +2 -4
  470. package/dist/utils/command-safety/handlers/git-handler.js.map +1 -1
  471. package/dist/utils/command-safety/handlers/index.d.ts +1 -1
  472. package/dist/utils/command-safety/handlers/index.d.ts.map +1 -1
  473. package/dist/utils/command-safety/handlers/index.js.map +1 -1
  474. package/dist/utils/command-safety/handlers/sed-handler.d.ts.map +1 -1
  475. package/dist/utils/command-safety/handlers/sed-handler.js.map +1 -1
  476. package/dist/utils/command-safety/handlers/types.d.ts.map +1 -1
  477. package/dist/utils/command-safety/index.d.ts.map +1 -1
  478. package/dist/utils/command-safety/index.js +4 -10
  479. package/dist/utils/command-safety/index.js.map +1 -1
  480. package/dist/utils/command-safety/path-analysis.d.ts.map +1 -1
  481. package/dist/utils/command-safety/path-analysis.js +9 -20
  482. package/dist/utils/command-safety/path-analysis.js.map +1 -1
  483. package/dist/utils/command-safety/utils.d.ts.map +1 -1
  484. package/dist/utils/command-safety/utils.js +1 -3
  485. package/dist/utils/command-safety/utils.js.map +1 -1
  486. package/dist/utils/command-safety.find.test.js +44 -87
  487. package/dist/utils/command-safety.find.test.js.map +1 -1
  488. package/dist/utils/command-safety.path.test.js +32 -67
  489. package/dist/utils/command-safety.path.test.js.map +1 -1
  490. package/dist/utils/conversation-event-handler.d.ts +4 -16
  491. package/dist/utils/conversation-event-handler.d.ts.map +1 -1
  492. package/dist/utils/conversation-event-handler.js +4 -8
  493. package/dist/utils/conversation-event-handler.js.map +1 -1
  494. package/dist/utils/conversation-event-handler.test.js +16 -18
  495. package/dist/utils/conversation-event-handler.test.js.map +1 -1
  496. package/dist/utils/conversation-utils.d.ts.map +1 -1
  497. package/dist/utils/conversation-utils.js +5 -8
  498. package/dist/utils/conversation-utils.js.map +1 -1
  499. package/dist/utils/conversation-utils.test.js +45 -44
  500. package/dist/utils/conversation-utils.test.js.map +1 -1
  501. package/dist/utils/diff.d.ts.map +1 -1
  502. package/dist/utils/diff.js +2 -4
  503. package/dist/utils/diff.js.map +1 -1
  504. package/dist/utils/diff.test.js +12 -12
  505. package/dist/utils/diff.test.js.map +1 -1
  506. package/dist/utils/error-helpers.d.ts.map +1 -1
  507. package/dist/utils/error-helpers.js +2 -6
  508. package/dist/utils/error-helpers.js.map +1 -1
  509. package/dist/utils/error-helpers.test.js +32 -32
  510. package/dist/utils/error-helpers.test.js.map +1 -1
  511. package/dist/utils/execute-shell.d.ts.map +1 -1
  512. package/dist/utils/execute-shell.js.map +1 -1
  513. package/dist/utils/execute-shell.test.js.map +1 -1
  514. package/dist/utils/extract-command-messages.d.ts.map +1 -1
  515. package/dist/utils/extract-command-messages.js +16 -21
  516. package/dist/utils/extract-command-messages.js.map +1 -1
  517. package/dist/utils/ink-render-options.d.ts.map +1 -1
  518. package/dist/utils/ink-render-options.js.map +1 -1
  519. package/dist/utils/log-viewer-filters.d.ts +29 -0
  520. package/dist/utils/log-viewer-filters.d.ts.map +1 -0
  521. package/dist/utils/log-viewer-filters.js +49 -0
  522. package/dist/utils/log-viewer-filters.js.map +1 -0
  523. package/dist/utils/log-viewer-filters.test.d.ts +2 -0
  524. package/dist/utils/log-viewer-filters.test.d.ts.map +1 -0
  525. package/dist/utils/log-viewer-filters.test.js +48 -0
  526. package/dist/utils/log-viewer-filters.test.js.map +1 -0
  527. package/dist/utils/message-buffer.d.ts.map +1 -1
  528. package/dist/utils/message-buffer.js.map +1 -1
  529. package/dist/utils/message-buffer.test.js +4 -4
  530. package/dist/utils/message-buffer.test.js.map +1 -1
  531. package/dist/utils/output-trim.d.ts.map +1 -1
  532. package/dist/utils/output-trim.js.map +1 -1
  533. package/dist/utils/provider-credentials.d.ts.map +1 -1
  534. package/dist/utils/provider-credentials.js +1 -1
  535. package/dist/utils/provider-credentials.js.map +1 -1
  536. package/dist/utils/provider-traffic-extractor.d.ts +18 -0
  537. package/dist/utils/provider-traffic-extractor.d.ts.map +1 -0
  538. package/dist/utils/provider-traffic-extractor.js +121 -0
  539. package/dist/utils/provider-traffic-extractor.js.map +1 -0
  540. package/dist/utils/provider-traffic-extractor.test.d.ts +2 -0
  541. package/dist/utils/provider-traffic-extractor.test.d.ts.map +1 -0
  542. package/dist/utils/provider-traffic-extractor.test.js +84 -0
  543. package/dist/utils/provider-traffic-extractor.test.js.map +1 -0
  544. package/dist/utils/settings-command.d.ts.map +1 -1
  545. package/dist/utils/settings-command.js +5 -12
  546. package/dist/utils/settings-command.js.map +1 -1
  547. package/dist/utils/ssh-config-parser.d.ts.map +1 -1
  548. package/dist/utils/ssh-config-parser.js.map +1 -1
  549. package/dist/utils/ssh-config-parser.test.js.map +1 -1
  550. package/dist/utils/streaming-session-factory.d.ts +33 -0
  551. package/dist/utils/streaming-session-factory.d.ts.map +1 -0
  552. package/dist/utils/streaming-session-factory.js +75 -0
  553. package/dist/utils/streaming-session-factory.js.map +1 -0
  554. package/dist/utils/streaming-session-factory.test.d.ts +2 -0
  555. package/dist/utils/streaming-session-factory.test.d.ts.map +1 -0
  556. package/dist/utils/streaming-session-factory.test.js +74 -0
  557. package/dist/utils/streaming-session-factory.test.js.map +1 -0
  558. package/dist/utils/streaming-updater.d.ts.map +1 -1
  559. package/dist/utils/streaming-updater.js.map +1 -1
  560. package/dist/utils/throttle.d.ts.map +1 -1
  561. package/dist/utils/throttle.js.map +1 -1
  562. package/dist/utils/token-usage.d.ts +16 -0
  563. package/dist/utils/token-usage.d.ts.map +1 -0
  564. package/dist/utils/token-usage.js +109 -0
  565. package/dist/utils/token-usage.js.map +1 -0
  566. package/dist/utils/token-usage.test.d.ts +2 -0
  567. package/dist/utils/token-usage.test.d.ts.map +1 -0
  568. package/dist/utils/token-usage.test.js +38 -0
  569. package/dist/utils/token-usage.test.js.map +1 -0
  570. package/dist/utils/trim-tool-output.d.ts +2 -0
  571. package/dist/utils/trim-tool-output.d.ts.map +1 -0
  572. package/dist/utils/trim-tool-output.js +52 -0
  573. package/dist/utils/trim-tool-output.js.map +1 -0
  574. package/package.json +117 -110
  575. package/{README.md → readme.md} +208 -136
@@ -0,0 +1,155 @@
1
+ import test from 'ava';
2
+ import { ModelBehaviorError } from '@openai/agents';
3
+ import { ConversationService } from './conversation-service.js';
4
+ const mockLogger = {
5
+ info: () => { },
6
+ warn: () => { },
7
+ error: () => { },
8
+ debug: () => { },
9
+ security: () => { },
10
+ setCorrelationId: () => { },
11
+ getCorrelationId: () => { },
12
+ clearCorrelationId: () => { },
13
+ };
14
+ class MockStream {
15
+ events;
16
+ completed;
17
+ lastResponseId;
18
+ interruptions;
19
+ state;
20
+ newItems;
21
+ history;
22
+ finalOutput;
23
+ constructor(events) {
24
+ this.events = events;
25
+ this.completed = Promise.resolve();
26
+ this.lastResponseId = 'resp_test';
27
+ this.interruptions = [];
28
+ this.state = {};
29
+ this.newItems = [];
30
+ this.history = [];
31
+ this.finalOutput = '';
32
+ }
33
+ async *[Symbol.asyncIterator]() {
34
+ for (const event of this.events) {
35
+ yield event;
36
+ }
37
+ }
38
+ }
39
+ test('integration: streamed response emits deltas and final output', async (t) => {
40
+ const stream = new MockStream([
41
+ { type: 'response.output_text.delta', delta: 'Hello' },
42
+ { type: 'response.output_text.delta', delta: ' world' },
43
+ ]);
44
+ stream.finalOutput = 'Hello world';
45
+ const service = new ConversationService({
46
+ agentClient: {
47
+ async startStream() {
48
+ return stream;
49
+ },
50
+ },
51
+ deps: { logger: mockLogger },
52
+ });
53
+ const chunks = [];
54
+ const events = [];
55
+ const result = await service.sendMessage('hi', {
56
+ onTextChunk(full, chunk) {
57
+ chunks.push({ full, chunk });
58
+ },
59
+ onEvent(event) {
60
+ events.push(event.type);
61
+ },
62
+ });
63
+ t.deepEqual(chunks, [
64
+ { full: 'Hello', chunk: 'Hello' },
65
+ { full: 'Hello world', chunk: ' world' },
66
+ ]);
67
+ t.deepEqual(events, ['text_delta', 'text_delta', 'final']);
68
+ t.is(result.type, 'response');
69
+ if (result.type === 'response') {
70
+ t.is(result.finalText, 'Hello world');
71
+ }
72
+ });
73
+ test('integration: approval round-trip (approval_required -> continue -> final)', async (t) => {
74
+ const interruption = {
75
+ name: 'shell',
76
+ agent: { name: 'CLI Agent' },
77
+ arguments: JSON.stringify({ command: 'echo hi' }),
78
+ callId: 'call-approval-1',
79
+ };
80
+ const approvalState = {
81
+ approved: [],
82
+ rejected: [],
83
+ approve(arg) {
84
+ this.approved.push(arg);
85
+ },
86
+ reject(arg) {
87
+ this.rejected.push(arg);
88
+ },
89
+ };
90
+ const initialStream = new MockStream([]);
91
+ initialStream.interruptions = [interruption];
92
+ initialStream.state = approvalState;
93
+ initialStream.lastResponseId = 'resp-before-approval';
94
+ const continuationStream = new MockStream([{ type: 'response.output_text.delta', delta: 'Approved run' }]);
95
+ continuationStream.finalOutput = 'Approved run';
96
+ continuationStream.lastResponseId = 'resp-after-approval';
97
+ let continueOptions = null;
98
+ const service = new ConversationService({
99
+ agentClient: {
100
+ async startStream() {
101
+ return initialStream;
102
+ },
103
+ async continueRunStream(state, options) {
104
+ t.is(state, approvalState);
105
+ continueOptions = options;
106
+ return continuationStream;
107
+ },
108
+ },
109
+ deps: { logger: mockLogger },
110
+ });
111
+ const first = await service.sendMessage('run command');
112
+ t.is(first.type, 'approval_required');
113
+ if (first.type === 'approval_required') {
114
+ t.is(first.approval.toolName, 'shell');
115
+ t.is(first.approval.argumentsText, 'echo hi');
116
+ }
117
+ const final = await service.handleApprovalDecision('y');
118
+ t.truthy(final);
119
+ t.is(final?.type, 'response');
120
+ t.is(final?.type === 'response' ? final.finalText : '', 'Approved run');
121
+ t.deepEqual(approvalState.approved, [interruption]);
122
+ t.deepEqual(approvalState.rejected, []);
123
+ t.deepEqual(continueOptions, { previousResponseId: 'resp-before-approval' });
124
+ });
125
+ test('integration: hallucination retry retries once and succeeds', async (t) => {
126
+ let startCalls = 0;
127
+ const successfulStream = new MockStream([{ type: 'response.output_text.delta', delta: 'Retried successfully' }]);
128
+ successfulStream.finalOutput = 'Retried successfully';
129
+ const emittedEvents = [];
130
+ const service = new ConversationService({
131
+ agentClient: {
132
+ async startStream() {
133
+ startCalls++;
134
+ if (startCalls === 1) {
135
+ throw new ModelBehaviorError('Tool imaginary_tool not found in agent Terminal Assistant.');
136
+ }
137
+ return successfulStream;
138
+ },
139
+ },
140
+ deps: { logger: mockLogger },
141
+ });
142
+ const result = await service.sendMessage('do something', {
143
+ onEvent(event) {
144
+ emittedEvents.push(event.type);
145
+ },
146
+ });
147
+ t.is(startCalls, 2);
148
+ t.true(emittedEvents.includes('retry'));
149
+ t.true(emittedEvents.includes('final'));
150
+ t.is(result.type, 'response');
151
+ if (result.type === 'response') {
152
+ t.is(result.finalText, 'Retried successfully');
153
+ }
154
+ });
155
+ //# sourceMappingURL=conversation-integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-integration.test.js","sourceRoot":"","sources":["../../source/services/conversation-integration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import type { CommandMessage } from '../tools/types.js';
2
+ import { type NormalizedUsage } from '../utils/token-usage.js';
3
+ interface ApprovalResult {
4
+ type: 'approval_required';
5
+ approval: {
6
+ agentName: string;
7
+ toolName: string;
8
+ argumentsText: string;
9
+ rawInterruption: any;
10
+ callId?: string;
11
+ };
12
+ }
13
+ interface ResponseResult {
14
+ type: 'response';
15
+ commandMessages: CommandMessage[];
16
+ finalText: string;
17
+ reasoningText?: string;
18
+ usage?: NormalizedUsage;
19
+ }
20
+ export type ConversationResult = ApprovalResult | ResponseResult;
21
+ export interface PendingApprovalContext {
22
+ state: any;
23
+ interruption: any;
24
+ emittedCommandIds: Set<string>;
25
+ toolCallArgumentsById: Map<string, unknown>;
26
+ }
27
+ interface BuildConversationResultParams {
28
+ result: any;
29
+ finalOutputOverride?: string;
30
+ reasoningOutputOverride?: string;
31
+ emittedCommandIds?: Set<string>;
32
+ usage?: NormalizedUsage;
33
+ getToolCallArgumentsSnapshot?: () => Map<string, unknown>;
34
+ }
35
+ export declare const getCommandFromArgs: (args: unknown) => string;
36
+ export declare const buildConversationResult: ({ result, finalOutputOverride, reasoningOutputOverride, emittedCommandIds, usage, getToolCallArgumentsSnapshot, }: BuildConversationResultParams) => {
37
+ conversationResult: ConversationResult;
38
+ pendingApprovalContext: PendingApprovalContext | null;
39
+ };
40
+ export {};
41
+ //# sourceMappingURL=conversation-result-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-result-builder.d.ts","sourceRoot":"","sources":["../../source/services/conversation-result-builder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAgB,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE7E,UAAU,cAAc;IACtB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,EAAE,MAAM,CAAC;QACtB,eAAe,EAAE,GAAG,CAAC;QACrB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,UAAU,cAAc;IACtB,IAAI,EAAE,UAAU,CAAC;IACjB,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,eAAe,CAAC;CACzB;AAED,MAAM,MAAM,kBAAkB,GAAG,cAAc,GAAG,cAAc,CAAC;AAEjE,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,GAAG,CAAC;IACX,YAAY,EAAE,GAAG,CAAC;IAClB,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,qBAAqB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7C;AAED,UAAU,6BAA6B;IACrC,MAAM,EAAE,GAAG,CAAC;IACZ,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAChC,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,4BAA4B,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC3D;AAED,eAAO,MAAM,kBAAkB,GAAI,MAAM,OAAO,KAAG,MA8ClD,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,mHAOrC,6BAA6B,KAAG;IACjC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,sBAAsB,EAAE,sBAAsB,GAAG,IAAI,CAAC;CAoEvD,CAAC"}
@@ -0,0 +1,110 @@
1
+ import { extractCommandMessages } from '../utils/extract-command-messages.js';
2
+ import { extractUsage } from '../utils/token-usage.js';
3
+ export const getCommandFromArgs = (args) => {
4
+ if (!args) {
5
+ return '';
6
+ }
7
+ if (typeof args === 'string') {
8
+ try {
9
+ const parsed = JSON.parse(args);
10
+ // Handle shell tool's command parameter
11
+ if (parsed?.command) {
12
+ return parsed.command;
13
+ }
14
+ // Fallback for old 'commands' array format
15
+ if (Array.isArray(parsed?.commands)) {
16
+ return parsed.commands.join('\n');
17
+ }
18
+ return JSON.stringify(parsed);
19
+ }
20
+ catch {
21
+ return args;
22
+ }
23
+ }
24
+ if (typeof args === 'object') {
25
+ // Handle shell tool's command parameter
26
+ const cmdFromObject = 'command' in args ? String(args.command) : undefined;
27
+ // Fallback for old 'commands' array format
28
+ if ('commands' in args && Array.isArray(args.commands)) {
29
+ return args.commands.join('\n');
30
+ }
31
+ let argsFromObject;
32
+ if ('arguments' in args) {
33
+ const rawArguments = args.arguments;
34
+ if (typeof rawArguments === 'string') {
35
+ try {
36
+ argsFromObject = JSON.stringify(JSON.parse(rawArguments));
37
+ }
38
+ catch {
39
+ argsFromObject = String(rawArguments);
40
+ }
41
+ }
42
+ else if (rawArguments !== undefined) {
43
+ argsFromObject = String(rawArguments);
44
+ }
45
+ }
46
+ return cmdFromObject ?? argsFromObject ?? JSON.stringify(args);
47
+ }
48
+ return String(args);
49
+ };
50
+ export const buildConversationResult = ({ result, finalOutputOverride, reasoningOutputOverride, emittedCommandIds, usage, getToolCallArgumentsSnapshot, }) => {
51
+ if (result.interruptions && result.interruptions.length > 0) {
52
+ const interruption = result.interruptions[0];
53
+ const pendingApprovalContext = {
54
+ state: result.state,
55
+ interruption,
56
+ emittedCommandIds: emittedCommandIds ?? new Set(),
57
+ toolCallArgumentsById: getToolCallArgumentsSnapshot?.() ?? new Map(),
58
+ };
59
+ let argumentsText = '';
60
+ const toolName = interruption.name;
61
+ // For shell_call (built-in shell tool), extract commands from action
62
+ // For function tools (bash, shell), extract from arguments
63
+ if (interruption.type === 'shell_call') {
64
+ if (interruption.action?.commands) {
65
+ argumentsText = Array.isArray(interruption.action.commands)
66
+ ? interruption.action.commands.join('\n')
67
+ : String(interruption.action.commands);
68
+ }
69
+ }
70
+ else {
71
+ argumentsText = getCommandFromArgs(interruption.arguments);
72
+ }
73
+ const callId = interruption?.rawItem?.callId ??
74
+ interruption?.callId ??
75
+ interruption?.call_id ??
76
+ interruption?.tool_call_id ??
77
+ interruption?.toolCallId ??
78
+ interruption?.id;
79
+ return {
80
+ conversationResult: {
81
+ type: 'approval_required',
82
+ approval: {
83
+ agentName: interruption.agent?.name ?? 'Agent',
84
+ toolName: toolName ?? 'Unknown Tool',
85
+ argumentsText,
86
+ rawInterruption: interruption,
87
+ ...(callId ? { callId: String(callId) } : {}),
88
+ },
89
+ },
90
+ pendingApprovalContext,
91
+ };
92
+ }
93
+ const allCommandMessages = extractCommandMessages(result.newItems || result.history || []);
94
+ // Filter out commands that were already emitted in real-time
95
+ const commandMessages = emittedCommandIds
96
+ ? allCommandMessages.filter((msg) => !emittedCommandIds.has(msg.id))
97
+ : allCommandMessages;
98
+ const visibleCommandMessages = commandMessages.filter((msg) => !msg.isApprovalRejection);
99
+ return {
100
+ conversationResult: {
101
+ type: 'response',
102
+ commandMessages: visibleCommandMessages,
103
+ finalText: finalOutputOverride ?? result.finalOutput ?? 'Done.',
104
+ reasoningText: reasoningOutputOverride,
105
+ usage: usage ?? extractUsage(result),
106
+ },
107
+ pendingApprovalContext: null,
108
+ };
109
+ };
110
+ //# sourceMappingURL=conversation-result-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-result-builder.js","sourceRoot":"","sources":["../../source/services/conversation-result-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=conversation-result-builder.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-result-builder.test.d.ts","sourceRoot":"","sources":["../../source/services/conversation-result-builder.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,76 @@
1
+ import test from 'ava';
2
+ import { buildConversationResult, getCommandFromArgs } from './conversation-result-builder.js';
3
+ import { clearApprovalRejectionMarkers, markToolCallAsApprovalRejection } from '../utils/extract-command-messages.js';
4
+ test('getCommandFromArgs: handles nullish inputs', (t) => {
5
+ t.is(getCommandFromArgs(undefined), '');
6
+ t.is(getCommandFromArgs(null), '');
7
+ });
8
+ test('getCommandFromArgs: prefers command from JSON string', (t) => {
9
+ t.is(getCommandFromArgs('{"command":"ls -la"}'), 'ls -la');
10
+ });
11
+ test('getCommandFromArgs: joins commands array from JSON string', (t) => {
12
+ t.is(getCommandFromArgs('{"commands":["one","two"]}'), 'one\ntwo');
13
+ });
14
+ test('getCommandFromArgs: returns invalid JSON string as-is', (t) => {
15
+ t.is(getCommandFromArgs('not json'), 'not json');
16
+ });
17
+ test('getCommandFromArgs: extracts from object arguments', (t) => {
18
+ t.is(getCommandFromArgs({ command: 'pwd' }), 'pwd');
19
+ t.is(getCommandFromArgs({ commands: ['a', 'b'] }), 'a\nb');
20
+ t.is(getCommandFromArgs({ arguments: '{"foo":"bar"}' }), '{"foo":"bar"}');
21
+ });
22
+ test('buildConversationResult: returns approval_required for interruptions', (t) => {
23
+ const toolArgs = new Map([['call-1', { command: 'ls' }]]);
24
+ const { conversationResult, pendingApprovalContext } = buildConversationResult({
25
+ result: {
26
+ interruptions: [
27
+ {
28
+ type: 'shell_call',
29
+ name: 'shell',
30
+ action: { commands: ['ls', 'pwd'] },
31
+ agent: { name: 'Agent Smith' },
32
+ rawItem: { callId: 'call-1' },
33
+ },
34
+ ],
35
+ state: { id: 'state' },
36
+ },
37
+ emittedCommandIds: new Set(['already-emitted']),
38
+ getToolCallArgumentsSnapshot: () => toolArgs,
39
+ });
40
+ t.is(conversationResult.type, 'approval_required');
41
+ const approval = conversationResult.approval;
42
+ t.is(approval.argumentsText, 'ls\npwd');
43
+ t.is(approval.toolName, 'shell');
44
+ t.is(approval.agentName, 'Agent Smith');
45
+ t.is(approval.callId, 'call-1');
46
+ t.is(pendingApprovalContext?.toolCallArgumentsById.get('call-1'), toolArgs.get('call-1'));
47
+ });
48
+ test('buildConversationResult: filters emitted and approval rejection messages', (t) => {
49
+ clearApprovalRejectionMarkers();
50
+ const items = [
51
+ { type: 'function_call', name: 'shell', arguments: { command: 'echo one' }, callId: 'call-1' },
52
+ { type: 'function_call_result', name: 'shell', output: 'exit 0\none', callId: 'call-1' },
53
+ { type: 'function_call', name: 'shell', arguments: { command: 'echo two' }, callId: 'call-2' },
54
+ { type: 'function_call_result', name: 'shell', output: 'exit 1\ntwo', callId: 'call-2' },
55
+ { type: 'function_call', name: 'shell', arguments: { command: 'echo three' }, callId: 'call-3' },
56
+ { type: 'function_call_result', name: 'shell', output: 'exit 0\nthree', callId: 'call-3' },
57
+ ];
58
+ markToolCallAsApprovalRejection('call-2');
59
+ const { conversationResult, pendingApprovalContext } = buildConversationResult({
60
+ result: { history: items, finalOutput: 'Done.' },
61
+ emittedCommandIds: new Set(['call-1-0']),
62
+ reasoningOutputOverride: 'Because.',
63
+ usage: { total_tokens: 3 },
64
+ });
65
+ t.is(pendingApprovalContext, null);
66
+ t.is(conversationResult.type, 'response');
67
+ const response = conversationResult;
68
+ t.is(response.finalText, 'Done.');
69
+ t.is(response.reasoningText, 'Because.');
70
+ t.deepEqual(response.usage, { total_tokens: 3 });
71
+ t.is(response.commandMessages.length, 1);
72
+ t.is(response.commandMessages[0].command, 'echo three');
73
+ t.is(response.commandMessages[0].callId, 'call-3');
74
+ clearApprovalRejectionMarkers();
75
+ });
76
+ //# sourceMappingURL=conversation-result-builder.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-result-builder.test.js","sourceRoot":"","sources":["../../source/services/conversation-result-builder.test.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import type { OpenAIAgentClient } from '../lib/openai-agent-client.js';
2
2
  import type { ILoggingService } from './service-interfaces.js';
3
3
  import { ConversationSession } from './conversation-session.js';
4
- export type { ConversationResult, CommandMessage, } from './conversation-session.js';
4
+ export type { ConversationResult, CommandMessage } from './conversation-session.js';
5
5
  /**
6
6
  * Backward-compatible facade for the CLI.
7
7
  *
@@ -1 +1 @@
1
- {"version":3,"file":"conversation-service.d.ts","sourceRoot":"","sources":["../../source/services/conversation-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAC,mBAAmB,EAAC,MAAM,2BAA2B,CAAC;AAE9D,YAAY,EACR,kBAAkB,EAClB,cAAc,GACjB,MAAM,2BAA2B,CAAC;AAEnC;;;;GAIG;AACH,qBAAa,mBAAmB;;gBAGhB,EACR,WAAW,EACX,IAAI,EACJ,SAAqB,GACxB,EAAE;QACC,WAAW,EAAE,iBAAiB,CAAC;QAC/B,IAAI,EAAE;YAAC,MAAM,EAAE,eAAe,CAAA;SAAC,CAAC;QAChC,SAAS,CAAC,EAAE,MAAM,CAAC;KACtB;IAID,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,KAAK,IAAI,IAAI;IAIb,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI7B,kBAAkB,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI;IAIrC,cAAc,CAAC,WAAW,EAAE,GAAG,GAAG,IAAI;IAItC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAInC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAI5C,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAI1C,KAAK,IAAI,IAAI;IAIb,WAAW,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;IAInE,sBAAsB,CAClB,GAAG,IAAI,EAAE,UAAU,CAAC,mBAAmB,CAAC,wBAAwB,CAAC,CAAC;CAIzE"}
1
+ {"version":3,"file":"conversation-service.d.ts","sourceRoot":"","sources":["../../source/services/conversation-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEpF;;;;GAIG;AACH,qBAAa,mBAAmB;;gBAGlB,EACV,WAAW,EACX,IAAI,EACJ,SAAqB,GACtB,EAAE;QACD,WAAW,EAAE,iBAAiB,CAAC;QAC/B,IAAI,EAAE;YAAE,MAAM,EAAE,eAAe,CAAA;SAAE,CAAC;QAClC,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB;IAID,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,KAAK,IAAI,IAAI;IAIb,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI7B,kBAAkB,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI;IAIrC,cAAc,CAAC,WAAW,EAAE,GAAG,GAAG,IAAI;IAItC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAInC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAI5C,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAI1C,KAAK,IAAI,IAAI;IAIb,WAAW,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;IAInE,sBAAsB,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,mBAAmB,CAAC,wBAAwB,CAAC,CAAC;CAG1F"}
@@ -1 +1 @@
1
- {"version":3,"file":"conversation-service.js","sourceRoot":"","sources":["../../source/services/conversation-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,mBAAmB,EAAC,MAAM,2BAA2B,CAAC;AAO9D;;;;GAIG;AACH,MAAM,OAAO,mBAAmB;IACnB,QAAQ,CAAsB;IAEvC,YAAY,EACR,WAAW,EACX,IAAI,EACJ,SAAS,GAAG,SAAS,GAKxB;QACG,IAAI,CAAC,QAAQ,GAAG,IAAI,mBAAmB,CAAC,SAAS,EAAE,EAAC,WAAW,EAAE,IAAI,EAAC,CAAC,CAAC;IAC5E,CAAC;IAED,IAAI,SAAS;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK;QACD,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAED,QAAQ,CAAC,KAAa;QAClB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,kBAAkB,CAAC,MAAW;QAC1B,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC;IAED,cAAc,CAAC,WAAgB;QAC1B,IAAI,CAAC,QAAgB,CAAC,cAAc,EAAE,CAAC,WAAW,CAAC,CAAC;IACzD,CAAC;IAED,WAAW,CAAC,QAAgB;QACxB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,gBAAgB,CAAC,QAAoB;QACjC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAED,eAAe,CAAC,WAAmB;QAC/B,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK;QACD,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAED,WAAW,CAAC,GAAG,IAAoD;QAC/D,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,sBAAsB,CAClB,GAAG,IAA+D;QAElE,OAAO,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,GAAG,IAAI,CAAC,CAAC;IACzD,CAAC;CACJ"}
1
+ {"version":3,"file":"conversation-service.js","sourceRoot":"","sources":["../../source/services/conversation-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAIhE;;;;GAIG;AACH,MAAM,OAAO,mBAAmB;IACrB,QAAQ,CAAsB;IAEvC,YAAY,EACV,WAAW,EACX,IAAI,EACJ,SAAS,GAAG,SAAS,GAKtB;QACC,IAAI,CAAC,QAAQ,GAAG,IAAI,mBAAmB,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC1B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;IAED,QAAQ,CAAC,KAAa;QACpB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,kBAAkB,CAAC,MAAW;QAC5B,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED,cAAc,CAAC,WAAgB;QAC5B,IAAI,CAAC,QAAgB,CAAC,cAAc,EAAE,CAAC,WAAW,CAAC,CAAC;IACvD,CAAC;IAED,WAAW,CAAC,QAAgB;QAC1B,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED,gBAAgB,CAAC,QAAoB;QACnC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAED,eAAe,CAAC,WAAmB;QACjC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK;QACH,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;IAED,WAAW,CAAC,GAAG,IAAoD;QACjE,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED,sBAAsB,CAAC,GAAG,IAA+D;QACvF,OAAO,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,GAAG,IAAI,CAAC,CAAC;IACvD,CAAC;CACF"}
@@ -15,7 +15,7 @@ test('ConversationSession extracts reasoning_content from stream', async (t) =>
15
15
  delta: {
16
16
  reasoning_content: 'think',
17
17
  },
18
- }
18
+ },
19
19
  ],
20
20
  },
21
21
  },
@@ -29,7 +29,7 @@ test('ConversationSession extracts reasoning_content from stream', async (t) =>
29
29
  delta: {
30
30
  reasoning_content: 'ing',
31
31
  },
32
- }
32
+ },
33
33
  ],
34
34
  },
35
35
  },
@@ -53,7 +53,7 @@ test('ConversationSession extracts reasoning_content from stream', async (t) =>
53
53
  for await (const event of session.run('hi')) {
54
54
  events.push(event);
55
55
  }
56
- const reasoningEvents = events.filter(e => e.type === 'reasoning_delta');
56
+ const reasoningEvents = events.filter((e) => e.type === 'reasoning_delta');
57
57
  t.is(reasoningEvents.length, 2);
58
58
  t.is(reasoningEvents[0].delta, 'think');
59
59
  t.is(reasoningEvents[1].delta, 'ing');
@@ -1 +1 @@
1
- {"version":3,"file":"conversation-session-reasoning.test.js","sourceRoot":"","sources":["../../source/services/conversation-session-reasoning.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,KAAK,CAAC;AACvB,OAAO,EAAC,mBAAmB,EAAC,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAC,cAAc,EAAC,MAAM,sBAAsB,CAAC;AAEpD,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,EAAC,cAAc,EAAE,IAAI,EAAC,CAAC,CAAC;AAE1D,IAAI,CAAC,4DAA4D,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACzE,MAAM,eAAe,GAAQ;QACzB,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;YACtB,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,KAAK,SAAS,CAAC;gBACnC,MAAM;oBACF,IAAI,EAAE;wBACF,IAAI,EAAE,OAAO;wBACb,KAAK,EAAE;4BACH,OAAO,EAAE;gCACL;oCACI,KAAK,EAAE;wCACH,iBAAiB,EAAE,OAAO;qCAC7B;iCACJ;6BACJ;yBACJ;qBACJ;iBACJ,CAAC;gBACF,MAAM;oBACF,IAAI,EAAE;wBACF,IAAI,EAAE,OAAO;wBACb,KAAK,EAAE;4BACH,OAAO,EAAE;gCACL;oCACI,KAAK,EAAE;wCACH,iBAAiB,EAAE,KAAK;qCAC3B;iCACJ;6BACJ;yBACJ;qBACJ;iBACJ,CAAC;gBACF,MAAM;oBACF,IAAI,EAAE,YAAY;oBAClB,KAAK,EAAE,IAAI;iBACd,CAAC;gBACF,MAAM;oBACF,IAAI,EAAE,OAAO;iBAChB,CAAC;YACN,CAAC;YACD,cAAc,EAAE,QAAQ;SAC3B,CAAC;KACL,CAAC;IAEF,MAAM,OAAO,GAAG,IAAI,mBAAmB,CAAC,cAAc,EAAE;QACpD,WAAW,EAAE,eAAe;QAC5B,IAAI,EAAE,EAAC,MAAM,EAAC;KACV,CAAC,CAAC;IAEV,MAAM,MAAM,GAAU,EAAE,CAAC;IACzB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC;IACzE,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AAClD,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"conversation-session-reasoning.test.js","sourceRoot":"","sources":["../../source/services/conversation-session-reasoning.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,KAAK,CAAC;AACvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;AAE5D,IAAI,CAAC,4DAA4D,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC7E,MAAM,eAAe,GAAQ;QAC3B,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;YACxB,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,KAAK,SAAS,CAAC;gBACrC,MAAM;oBACJ,IAAI,EAAE;wBACJ,IAAI,EAAE,OAAO;wBACb,KAAK,EAAE;4BACL,OAAO,EAAE;gCACP;oCACE,KAAK,EAAE;wCACL,iBAAiB,EAAE,OAAO;qCAC3B;iCACF;6BACF;yBACF;qBACF;iBACF,CAAC;gBACF,MAAM;oBACJ,IAAI,EAAE;wBACJ,IAAI,EAAE,OAAO;wBACb,KAAK,EAAE;4BACL,OAAO,EAAE;gCACP;oCACE,KAAK,EAAE;wCACL,iBAAiB,EAAE,KAAK;qCACzB;iCACF;6BACF;yBACF;qBACF;iBACF,CAAC;gBACF,MAAM;oBACJ,IAAI,EAAE,YAAY;oBAClB,KAAK,EAAE,IAAI;iBACZ,CAAC;gBACF,MAAM;oBACJ,IAAI,EAAE,OAAO;iBACd,CAAC;YACJ,CAAC;YACD,cAAc,EAAE,QAAQ;SACzB,CAAC;KACH,CAAC;IAEF,MAAM,OAAO,GAAG,IAAI,mBAAmB,CAAC,cAAc,EAAE;QACtD,WAAW,EAAE,eAAe;QAC5B,IAAI,EAAE,EAAE,MAAM,EAAE;KACV,CAAC,CAAC;IAEV,MAAM,MAAM,GAAU,EAAE,CAAC;IACzB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IAED,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC;IAC3E,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AAChD,CAAC,CAAC,CAAC"}
@@ -1,6 +1,9 @@
1
1
  import type { OpenAIAgentClient } from '../lib/openai-agent-client.js';
2
2
  import type { ILoggingService } from './service-interfaces.js';
3
3
  import type { ConversationEvent } from './conversation-events.js';
4
+ import type { CommandMessage } from '../tools/types.js';
5
+ import { type NormalizedUsage } from '../utils/token-usage.js';
6
+ export type { CommandMessage };
4
7
  interface ApprovalResult {
5
8
  type: 'approval_required';
6
9
  approval: {
@@ -11,24 +14,12 @@ interface ApprovalResult {
11
14
  callId?: string;
12
15
  };
13
16
  }
14
- export interface CommandMessage {
15
- id: string;
16
- sender: 'command';
17
- status: 'pending' | 'running' | 'completed' | 'failed';
18
- command: string;
19
- output: string;
20
- success?: boolean;
21
- failureReason?: string;
22
- isApprovalRejection?: boolean;
23
- callId?: string;
24
- toolName?: string;
25
- toolArgs?: any;
26
- }
27
17
  interface ResponseResult {
28
18
  type: 'response';
29
19
  commandMessages: CommandMessage[];
30
20
  finalText: string;
31
21
  reasoningText?: string;
22
+ usage?: NormalizedUsage;
32
23
  }
33
24
  export type ConversationResult = ApprovalResult | ResponseResult;
34
25
  export declare class ConversationSession {
@@ -38,15 +29,15 @@ export declare class ConversationSession {
38
29
  private logger;
39
30
  private conversationStore;
40
31
  private previousResponseId;
41
- private pendingApprovalContext;
42
- private abortedApprovalContext;
32
+ private approvalState;
43
33
  private textDeltaCount;
44
34
  private reasoningDeltaCount;
45
35
  private toolCallArgumentsById;
46
36
  private lastEventType;
47
37
  private eventTypeCount;
38
+ private emittedInvalidToolCallPackets;
48
39
  private flushStreamEventLog;
49
- constructor(id: string, { agentClient, deps, }: {
40
+ constructor(id: string, { agentClient, deps }: {
50
41
  agentClient: OpenAIAgentClient;
51
42
  deps: {
52
43
  logger: ILoggingService;
@@ -95,5 +86,4 @@ export declare class ConversationSession {
95
86
  onEvent?: (event: ConversationEvent) => void;
96
87
  }): Promise<ConversationResult | null>;
97
88
  }
98
- export {};
99
89
  //# sourceMappingURL=conversation-session.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"conversation-session.d.ts","sourceRoot":"","sources":["../../source/services/conversation-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"conversation-session.d.ts","sourceRoot":"","sources":["../../source/services/conversation-session.ts"],"names":[],"mappings":"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"}