@calliopelabs/cli 0.8.20 → 2.0.2

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 (402) hide show
  1. package/dist/agents/agent-config-loader.d.ts +60 -0
  2. package/dist/agents/agent-config-loader.d.ts.map +1 -0
  3. package/dist/agents/agent-config-loader.js +402 -0
  4. package/dist/agents/agent-config-loader.js.map +1 -0
  5. package/dist/agents/agent-config-presets.d.ts +10 -0
  6. package/dist/agents/agent-config-presets.d.ts.map +1 -0
  7. package/dist/agents/agent-config-presets.js +940 -0
  8. package/dist/agents/agent-config-presets.js.map +1 -0
  9. package/dist/agents/agent-config-types.d.ts +145 -0
  10. package/dist/agents/agent-config-types.d.ts.map +1 -0
  11. package/dist/agents/agent-config-types.js +12 -0
  12. package/dist/agents/agent-config-types.js.map +1 -0
  13. package/dist/{agterm → agents}/agent-detection.d.ts +1 -1
  14. package/dist/{agterm → agents}/agent-detection.d.ts.map +1 -1
  15. package/dist/{agterm → agents}/agent-detection.js +21 -5
  16. package/dist/agents/agent-detection.js.map +1 -0
  17. package/dist/agents/aggregator.d.ts +19 -0
  18. package/dist/agents/aggregator.d.ts.map +1 -0
  19. package/dist/agents/aggregator.js +141 -0
  20. package/dist/agents/aggregator.js.map +1 -0
  21. package/dist/{agterm → agents}/cli-backend.d.ts +1 -1
  22. package/dist/{agterm → agents}/cli-backend.d.ts.map +1 -1
  23. package/dist/{agterm → agents}/cli-backend.js +90 -12
  24. package/dist/agents/cli-backend.js.map +1 -0
  25. package/dist/agents/council-types.d.ts +113 -0
  26. package/dist/agents/council-types.d.ts.map +1 -0
  27. package/dist/agents/council-types.js +81 -0
  28. package/dist/agents/council-types.js.map +1 -0
  29. package/dist/agents/council.d.ts +107 -0
  30. package/dist/agents/council.d.ts.map +1 -0
  31. package/dist/agents/council.js +586 -0
  32. package/dist/agents/council.js.map +1 -0
  33. package/dist/agents/decomposer.d.ts +33 -0
  34. package/dist/agents/decomposer.d.ts.map +1 -0
  35. package/dist/agents/decomposer.js +138 -0
  36. package/dist/agents/decomposer.js.map +1 -0
  37. package/dist/agents/dynamic-tools.d.ts +52 -0
  38. package/dist/agents/dynamic-tools.d.ts.map +1 -0
  39. package/dist/agents/dynamic-tools.js +395 -0
  40. package/dist/agents/dynamic-tools.js.map +1 -0
  41. package/dist/agents/index.d.ts +29 -0
  42. package/dist/agents/index.d.ts.map +1 -0
  43. package/dist/agents/index.js +29 -0
  44. package/dist/agents/index.js.map +1 -0
  45. package/dist/agents/installer.d.ts +39 -0
  46. package/dist/agents/installer.d.ts.map +1 -0
  47. package/dist/agents/installer.js +205 -0
  48. package/dist/agents/installer.js.map +1 -0
  49. package/dist/{agterm → agents}/orchestrator.d.ts +7 -2
  50. package/dist/agents/orchestrator.d.ts.map +1 -0
  51. package/dist/{agterm → agents}/orchestrator.js +22 -2
  52. package/dist/agents/orchestrator.js.map +1 -0
  53. package/dist/agents/sdk-backend.d.ts +63 -0
  54. package/dist/agents/sdk-backend.d.ts.map +1 -0
  55. package/dist/agents/sdk-backend.js +489 -0
  56. package/dist/agents/sdk-backend.js.map +1 -0
  57. package/dist/agents/swarm-types.d.ts +83 -0
  58. package/dist/agents/swarm-types.d.ts.map +1 -0
  59. package/dist/agents/swarm-types.js +20 -0
  60. package/dist/agents/swarm-types.js.map +1 -0
  61. package/dist/agents/swarm.d.ts +74 -0
  62. package/dist/agents/swarm.d.ts.map +1 -0
  63. package/dist/agents/swarm.js +307 -0
  64. package/dist/agents/swarm.js.map +1 -0
  65. package/dist/{agterm → agents}/tools.d.ts +7 -5
  66. package/dist/agents/tools.d.ts.map +1 -0
  67. package/dist/agents/tools.js +776 -0
  68. package/dist/agents/tools.js.map +1 -0
  69. package/dist/{agterm → agents}/types.d.ts +14 -2
  70. package/dist/agents/types.d.ts.map +1 -0
  71. package/dist/{agterm → agents}/types.js +2 -2
  72. package/dist/agents/types.js.map +1 -0
  73. package/dist/api-server.d.ts +26 -0
  74. package/dist/api-server.d.ts.map +1 -0
  75. package/dist/api-server.js +230 -0
  76. package/dist/api-server.js.map +1 -0
  77. package/dist/auto-checkpoint.d.ts +35 -0
  78. package/dist/auto-checkpoint.d.ts.map +1 -0
  79. package/dist/auto-checkpoint.js +143 -0
  80. package/dist/auto-checkpoint.js.map +1 -0
  81. package/dist/auto-compressor.d.ts +44 -0
  82. package/dist/auto-compressor.d.ts.map +1 -0
  83. package/dist/auto-compressor.js +145 -0
  84. package/dist/auto-compressor.js.map +1 -0
  85. package/dist/background-jobs.d.ts +45 -0
  86. package/dist/background-jobs.d.ts.map +1 -0
  87. package/dist/background-jobs.js +122 -0
  88. package/dist/background-jobs.js.map +1 -0
  89. package/dist/bin.d.ts +6 -2
  90. package/dist/bin.d.ts.map +1 -1
  91. package/dist/bin.js +127 -24
  92. package/dist/bin.js.map +1 -1
  93. package/dist/checkpoint.d.ts +49 -0
  94. package/dist/checkpoint.d.ts.map +1 -0
  95. package/dist/checkpoint.js +219 -0
  96. package/dist/checkpoint.js.map +1 -0
  97. package/dist/circuit-breaker/breaker.d.ts +80 -0
  98. package/dist/circuit-breaker/breaker.d.ts.map +1 -0
  99. package/dist/circuit-breaker/breaker.js +408 -0
  100. package/dist/circuit-breaker/breaker.js.map +1 -0
  101. package/dist/circuit-breaker/defaults.d.ts +8 -0
  102. package/dist/circuit-breaker/defaults.d.ts.map +1 -0
  103. package/dist/circuit-breaker/defaults.js +35 -0
  104. package/dist/circuit-breaker/defaults.js.map +1 -0
  105. package/dist/circuit-breaker/index.d.ts +9 -0
  106. package/dist/circuit-breaker/index.d.ts.map +1 -0
  107. package/dist/circuit-breaker/index.js +8 -0
  108. package/dist/circuit-breaker/index.js.map +1 -0
  109. package/dist/circuit-breaker/types.d.ts +77 -0
  110. package/dist/circuit-breaker/types.d.ts.map +1 -0
  111. package/dist/circuit-breaker/types.js +8 -0
  112. package/dist/circuit-breaker/types.js.map +1 -0
  113. package/dist/circuit-breaker.d.ts +8 -0
  114. package/dist/circuit-breaker.d.ts.map +1 -0
  115. package/dist/circuit-breaker.js +7 -0
  116. package/dist/circuit-breaker.js.map +1 -0
  117. package/dist/cli/agent.d.ts +9 -0
  118. package/dist/cli/agent.d.ts.map +1 -0
  119. package/dist/cli/agent.js +262 -0
  120. package/dist/cli/agent.js.map +1 -0
  121. package/dist/cli/commands.d.ts +12 -0
  122. package/dist/cli/commands.d.ts.map +1 -0
  123. package/dist/{cli.js → cli/commands.js} +285 -422
  124. package/dist/cli/commands.js.map +1 -0
  125. package/dist/cli/index.d.ts +8 -0
  126. package/dist/cli/index.d.ts.map +1 -0
  127. package/dist/cli/index.js +222 -0
  128. package/dist/cli/index.js.map +1 -0
  129. package/dist/cli/types.d.ts +30 -0
  130. package/dist/cli/types.d.ts.map +1 -0
  131. package/dist/cli/types.js +20 -0
  132. package/dist/cli/types.js.map +1 -0
  133. package/dist/companions.d.ts +54 -0
  134. package/dist/companions.d.ts.map +1 -0
  135. package/dist/companions.js +440 -0
  136. package/dist/companions.js.map +1 -0
  137. package/dist/config.d.ts +23 -1
  138. package/dist/config.d.ts.map +1 -1
  139. package/dist/config.js +95 -22
  140. package/dist/config.js.map +1 -1
  141. package/dist/diff.d.ts +27 -0
  142. package/dist/diff.d.ts.map +1 -1
  143. package/dist/diff.js +415 -10
  144. package/dist/diff.js.map +1 -1
  145. package/dist/errors.d.ts.map +1 -1
  146. package/dist/errors.js +20 -11
  147. package/dist/errors.js.map +1 -1
  148. package/dist/git-status.d.ts +23 -0
  149. package/dist/git-status.d.ts.map +1 -0
  150. package/dist/git-status.js +92 -0
  151. package/dist/git-status.js.map +1 -0
  152. package/dist/headless.d.ts +25 -0
  153. package/dist/headless.d.ts.map +1 -0
  154. package/dist/headless.js +182 -0
  155. package/dist/headless.js.map +1 -0
  156. package/dist/hud/api.d.ts +35 -0
  157. package/dist/hud/api.d.ts.map +1 -0
  158. package/dist/hud/api.js +448 -0
  159. package/dist/hud/api.js.map +1 -0
  160. package/dist/hud/palettes.d.ts +9 -0
  161. package/dist/hud/palettes.d.ts.map +1 -0
  162. package/dist/hud/palettes.js +280 -0
  163. package/dist/hud/palettes.js.map +1 -0
  164. package/dist/hud/skins.d.ts +12 -0
  165. package/dist/hud/skins.d.ts.map +1 -0
  166. package/dist/hud/skins.js +365 -0
  167. package/dist/hud/skins.js.map +1 -0
  168. package/dist/hud/theme-packs/api.d.ts +51 -0
  169. package/dist/hud/theme-packs/api.d.ts.map +1 -0
  170. package/dist/hud/theme-packs/api.js +145 -0
  171. package/dist/hud/theme-packs/api.js.map +1 -0
  172. package/dist/hud/theme-packs/index.d.ts +18 -0
  173. package/dist/hud/theme-packs/index.d.ts.map +1 -0
  174. package/dist/hud/theme-packs/index.js +38 -0
  175. package/dist/hud/theme-packs/index.js.map +1 -0
  176. package/dist/hud/theme-packs/types.d.ts +29 -0
  177. package/dist/hud/theme-packs/types.d.ts.map +1 -0
  178. package/dist/hud/theme-packs/types.js +9 -0
  179. package/dist/hud/theme-packs/types.js.map +1 -0
  180. package/dist/hud/types.d.ts +182 -0
  181. package/dist/hud/types.d.ts.map +1 -0
  182. package/dist/hud/types.js +7 -0
  183. package/dist/hud/types.js.map +1 -0
  184. package/dist/idle-eviction.d.ts +34 -0
  185. package/dist/idle-eviction.d.ts.map +1 -0
  186. package/dist/idle-eviction.js +78 -0
  187. package/dist/idle-eviction.js.map +1 -0
  188. package/dist/index.d.ts +9 -3
  189. package/dist/index.d.ts.map +1 -1
  190. package/dist/index.js +9 -3
  191. package/dist/index.js.map +1 -1
  192. package/dist/iteration-ledger.d.ts +105 -0
  193. package/dist/iteration-ledger.d.ts.map +1 -0
  194. package/dist/iteration-ledger.js +237 -0
  195. package/dist/iteration-ledger.js.map +1 -0
  196. package/dist/markdown.d.ts.map +1 -1
  197. package/dist/markdown.js +1 -27
  198. package/dist/markdown.js.map +1 -1
  199. package/dist/mcp.d.ts +35 -0
  200. package/dist/mcp.d.ts.map +1 -1
  201. package/dist/mcp.js +291 -7
  202. package/dist/mcp.js.map +1 -1
  203. package/dist/memory.d.ts.map +1 -1
  204. package/dist/memory.js +12 -2
  205. package/dist/memory.js.map +1 -1
  206. package/dist/model-detection.d.ts +5 -0
  207. package/dist/model-detection.d.ts.map +1 -1
  208. package/dist/model-detection.js +278 -10
  209. package/dist/model-detection.js.map +1 -1
  210. package/dist/model-router.d.ts.map +1 -1
  211. package/dist/model-router.js +33 -11
  212. package/dist/model-router.js.map +1 -1
  213. package/dist/plugins.d.ts +8 -0
  214. package/dist/plugins.d.ts.map +1 -1
  215. package/dist/plugins.js +97 -6
  216. package/dist/plugins.js.map +1 -1
  217. package/dist/providers/anthropic.d.ts +10 -0
  218. package/dist/providers/anthropic.d.ts.map +1 -0
  219. package/dist/providers/anthropic.js +221 -0
  220. package/dist/providers/anthropic.js.map +1 -0
  221. package/dist/providers/bedrock.d.ts +17 -0
  222. package/dist/providers/bedrock.d.ts.map +1 -0
  223. package/dist/providers/bedrock.js +574 -0
  224. package/dist/providers/bedrock.js.map +1 -0
  225. package/dist/providers/compat.d.ts +13 -0
  226. package/dist/providers/compat.d.ts.map +1 -0
  227. package/dist/providers/compat.js +202 -0
  228. package/dist/providers/compat.js.map +1 -0
  229. package/dist/providers/google.d.ts +10 -0
  230. package/dist/providers/google.d.ts.map +1 -0
  231. package/dist/providers/google.js +203 -0
  232. package/dist/providers/google.js.map +1 -0
  233. package/dist/providers/index.d.ts +23 -0
  234. package/dist/providers/index.d.ts.map +1 -0
  235. package/dist/providers/index.js +145 -0
  236. package/dist/providers/index.js.map +1 -0
  237. package/dist/providers/ollama.d.ts +17 -0
  238. package/dist/providers/ollama.d.ts.map +1 -0
  239. package/dist/providers/ollama.js +289 -0
  240. package/dist/providers/ollama.js.map +1 -0
  241. package/dist/providers/openai.d.ts +121 -0
  242. package/dist/providers/openai.d.ts.map +1 -0
  243. package/dist/providers/openai.js +485 -0
  244. package/dist/providers/openai.js.map +1 -0
  245. package/dist/providers/types.d.ts +63 -0
  246. package/dist/providers/types.d.ts.map +1 -0
  247. package/dist/providers/types.js +164 -0
  248. package/dist/providers/types.js.map +1 -0
  249. package/dist/sandbox-native.d.ts +59 -0
  250. package/dist/sandbox-native.d.ts.map +1 -0
  251. package/dist/sandbox-native.js +292 -0
  252. package/dist/sandbox-native.js.map +1 -0
  253. package/dist/sandbox.d.ts +2 -2
  254. package/dist/sandbox.d.ts.map +1 -1
  255. package/dist/sandbox.js +59 -13
  256. package/dist/sandbox.js.map +1 -1
  257. package/dist/scope.d.ts +3 -1
  258. package/dist/scope.d.ts.map +1 -1
  259. package/dist/scope.js +13 -1
  260. package/dist/scope.js.map +1 -1
  261. package/dist/session-timeout.d.ts +31 -0
  262. package/dist/session-timeout.d.ts.map +1 -0
  263. package/dist/session-timeout.js +100 -0
  264. package/dist/session-timeout.js.map +1 -0
  265. package/dist/setup.d.ts.map +1 -1
  266. package/dist/setup.js +29 -17
  267. package/dist/setup.js.map +1 -1
  268. package/dist/smart-router.d.ts +73 -0
  269. package/dist/smart-router.d.ts.map +1 -0
  270. package/dist/smart-router.js +332 -0
  271. package/dist/smart-router.js.map +1 -0
  272. package/dist/storage.d.ts +19 -0
  273. package/dist/storage.d.ts.map +1 -1
  274. package/dist/storage.js +164 -1
  275. package/dist/storage.js.map +1 -1
  276. package/dist/streaming.d.ts +4 -0
  277. package/dist/streaming.d.ts.map +1 -1
  278. package/dist/streaming.js +12 -0
  279. package/dist/streaming.js.map +1 -1
  280. package/dist/styles.d.ts +32 -0
  281. package/dist/styles.d.ts.map +1 -1
  282. package/dist/styles.js +91 -0
  283. package/dist/styles.js.map +1 -1
  284. package/dist/summarization.d.ts +1 -1
  285. package/dist/summarization.js +4 -4
  286. package/dist/summarization.js.map +1 -1
  287. package/dist/terminal-image.d.ts +115 -0
  288. package/dist/terminal-image.d.ts.map +1 -0
  289. package/dist/terminal-image.js +766 -0
  290. package/dist/terminal-image.js.map +1 -0
  291. package/dist/terminal-recording.d.ts +55 -0
  292. package/dist/terminal-recording.d.ts.map +1 -0
  293. package/dist/terminal-recording.js +182 -0
  294. package/dist/terminal-recording.js.map +1 -0
  295. package/dist/themes.d.ts +19 -35
  296. package/dist/themes.d.ts.map +1 -1
  297. package/dist/themes.js +101 -210
  298. package/dist/themes.js.map +1 -1
  299. package/dist/tmux.d.ts +35 -0
  300. package/dist/tmux.d.ts.map +1 -0
  301. package/dist/tmux.js +106 -0
  302. package/dist/tmux.js.map +1 -0
  303. package/dist/tools.d.ts +3 -3
  304. package/dist/tools.d.ts.map +1 -1
  305. package/dist/tools.js +587 -45
  306. package/dist/tools.js.map +1 -1
  307. package/dist/trust.d.ts +53 -0
  308. package/dist/trust.d.ts.map +1 -0
  309. package/dist/trust.js +154 -0
  310. package/dist/trust.js.map +1 -0
  311. package/dist/types.d.ts +7 -3
  312. package/dist/types.d.ts.map +1 -1
  313. package/dist/types.js +70 -32
  314. package/dist/types.js.map +1 -1
  315. package/dist/ui/agent.d.ts +61 -0
  316. package/dist/ui/agent.d.ts.map +1 -0
  317. package/dist/ui/agent.js +768 -0
  318. package/dist/ui/agent.js.map +1 -0
  319. package/dist/ui/chat-input.d.ts +32 -0
  320. package/dist/ui/chat-input.d.ts.map +1 -0
  321. package/dist/ui/chat-input.js +355 -0
  322. package/dist/ui/chat-input.js.map +1 -0
  323. package/dist/ui/commands.d.ts +92 -0
  324. package/dist/ui/commands.d.ts.map +1 -0
  325. package/dist/ui/commands.js +3006 -0
  326. package/dist/ui/commands.js.map +1 -0
  327. package/dist/ui/completions.d.ts +22 -0
  328. package/dist/ui/completions.d.ts.map +1 -0
  329. package/dist/ui/completions.js +215 -0
  330. package/dist/ui/completions.js.map +1 -0
  331. package/dist/ui/components.d.ts +38 -0
  332. package/dist/ui/components.d.ts.map +1 -0
  333. package/dist/ui/components.js +422 -0
  334. package/dist/ui/components.js.map +1 -0
  335. package/dist/ui/context.d.ts +12 -0
  336. package/dist/ui/context.d.ts.map +1 -0
  337. package/dist/ui/context.js +102 -0
  338. package/dist/ui/context.js.map +1 -0
  339. package/dist/ui/error-boundary.d.ts +33 -0
  340. package/dist/ui/error-boundary.d.ts.map +1 -0
  341. package/dist/ui/error-boundary.js +94 -0
  342. package/dist/ui/error-boundary.js.map +1 -0
  343. package/dist/ui/frame.d.ts +13 -0
  344. package/dist/ui/frame.d.ts.map +1 -0
  345. package/dist/ui/frame.js +89 -0
  346. package/dist/ui/frame.js.map +1 -0
  347. package/dist/ui/index.d.ts +12 -0
  348. package/dist/ui/index.d.ts.map +1 -0
  349. package/dist/ui/index.js +928 -0
  350. package/dist/ui/index.js.map +1 -0
  351. package/dist/ui/messages.d.ts +19 -0
  352. package/dist/ui/messages.d.ts.map +1 -0
  353. package/dist/ui/messages.js +181 -0
  354. package/dist/ui/messages.js.map +1 -0
  355. package/dist/ui/modals.d.ts +52 -0
  356. package/dist/ui/modals.d.ts.map +1 -0
  357. package/dist/ui/modals.js +204 -0
  358. package/dist/ui/modals.js.map +1 -0
  359. package/dist/ui/pack-picker.d.ts +12 -0
  360. package/dist/ui/pack-picker.d.ts.map +1 -0
  361. package/dist/ui/pack-picker.js +101 -0
  362. package/dist/ui/pack-picker.js.map +1 -0
  363. package/dist/ui/status-bar.d.ts +20 -0
  364. package/dist/ui/status-bar.d.ts.map +1 -0
  365. package/dist/ui/status-bar.js +41 -0
  366. package/dist/ui/status-bar.js.map +1 -0
  367. package/dist/ui/theme-picker.d.ts +24 -0
  368. package/dist/ui/theme-picker.d.ts.map +1 -0
  369. package/dist/ui/theme-picker.js +190 -0
  370. package/dist/ui/theme-picker.js.map +1 -0
  371. package/dist/ui/types.d.ts +62 -0
  372. package/dist/ui/types.d.ts.map +1 -0
  373. package/dist/ui/types.js +7 -0
  374. package/dist/ui/types.js.map +1 -0
  375. package/dist/version-check.d.ts.map +1 -1
  376. package/dist/version-check.js +1 -9
  377. package/dist/version-check.js.map +1 -1
  378. package/package.json +8 -3
  379. package/dist/agterm/agent-detection.js.map +0 -1
  380. package/dist/agterm/cli-backend.js.map +0 -1
  381. package/dist/agterm/index.d.ts +0 -12
  382. package/dist/agterm/index.d.ts.map +0 -1
  383. package/dist/agterm/index.js +0 -15
  384. package/dist/agterm/index.js.map +0 -1
  385. package/dist/agterm/orchestrator.d.ts.map +0 -1
  386. package/dist/agterm/orchestrator.js.map +0 -1
  387. package/dist/agterm/tools.d.ts.map +0 -1
  388. package/dist/agterm/tools.js +0 -278
  389. package/dist/agterm/tools.js.map +0 -1
  390. package/dist/agterm/types.d.ts.map +0 -1
  391. package/dist/agterm/types.js.map +0 -1
  392. package/dist/cli.d.ts +0 -14
  393. package/dist/cli.d.ts.map +0 -1
  394. package/dist/cli.js.map +0 -1
  395. package/dist/providers.d.ts +0 -51
  396. package/dist/providers.d.ts.map +0 -1
  397. package/dist/providers.js +0 -1146
  398. package/dist/providers.js.map +0 -1
  399. package/dist/ui-cli.d.ts +0 -17
  400. package/dist/ui-cli.d.ts.map +0 -1
  401. package/dist/ui-cli.js +0 -3730
  402. package/dist/ui-cli.js.map +0 -1
@@ -0,0 +1,485 @@
1
+ /**
2
+ * OpenAI Provider (Chat Completions + Responses API)
3
+ *
4
+ * Handles both the standard Chat Completions API and the newer Responses API
5
+ * for reasoning models (o3, o4-mini, gpt-5, etc.).
6
+ *
7
+ * Also exports shared OpenAI format converters used by the compat provider.
8
+ */
9
+ import OpenAI from 'openai';
10
+ import * as config from '../config.js';
11
+ import { calculateMaxTokens, debugLog } from './types.js';
12
+ // ============================================================================
13
+ // Shared OpenAI Format Converters (also used by compat provider)
14
+ // ============================================================================
15
+ /**
16
+ * Convert MessageContent to OpenAI content format
17
+ */
18
+ export function toOpenAIContent(content) {
19
+ if (typeof content === 'string') {
20
+ return content;
21
+ }
22
+ return content.map(block => {
23
+ if (block.type === 'text') {
24
+ return { type: 'text', text: block.text };
25
+ }
26
+ else if (block.type === 'image') {
27
+ return {
28
+ type: 'image_url',
29
+ image_url: {
30
+ url: `data:${block.mediaType};base64,${block.data}`,
31
+ },
32
+ };
33
+ }
34
+ return { type: 'text', text: '' };
35
+ });
36
+ }
37
+ /**
38
+ * Convert messages to OpenAI format
39
+ */
40
+ export function toOpenAIMessages(messages) {
41
+ return messages.map(m => {
42
+ if (m.role === 'tool') {
43
+ return {
44
+ role: 'tool',
45
+ tool_call_id: m.toolCallId || '',
46
+ content: typeof m.content === 'string' ? m.content : JSON.stringify(m.content),
47
+ };
48
+ }
49
+ if (m.toolCalls && m.toolCalls.length > 0) {
50
+ return {
51
+ role: 'assistant',
52
+ content: typeof m.content === 'string' ? m.content : (m.content ? JSON.stringify(m.content) : null),
53
+ tool_calls: m.toolCalls.map(tc => ({
54
+ id: tc.id,
55
+ type: 'function',
56
+ function: {
57
+ name: tc.name,
58
+ arguments: JSON.stringify(tc.arguments),
59
+ },
60
+ })),
61
+ };
62
+ }
63
+ // Handle multi-modal content for user messages
64
+ if (m.role === 'user' && Array.isArray(m.content)) {
65
+ return {
66
+ role: 'user',
67
+ content: toOpenAIContent(m.content),
68
+ };
69
+ }
70
+ return {
71
+ role: m.role,
72
+ content: typeof m.content === 'string' ? m.content : JSON.stringify(m.content),
73
+ };
74
+ });
75
+ }
76
+ /**
77
+ * Convert tools to OpenAI format
78
+ */
79
+ export function toOpenAITools(tools) {
80
+ return tools.map(t => ({
81
+ type: 'function',
82
+ function: {
83
+ name: t.name,
84
+ description: t.description,
85
+ parameters: t.parameters,
86
+ },
87
+ }));
88
+ }
89
+ /**
90
+ * Parse tool calls from OpenAI response
91
+ */
92
+ export function parseOpenAIToolCalls(toolCalls) {
93
+ if (!toolCalls)
94
+ return [];
95
+ const result = [];
96
+ for (const tc of toolCalls) {
97
+ let parsedArgs = {};
98
+ try {
99
+ parsedArgs = JSON.parse(tc.function.arguments);
100
+ }
101
+ catch (error) {
102
+ const parseError = error instanceof SyntaxError ? error.message : 'Unknown parse error';
103
+ throw new Error(`Invalid tool arguments from LLM: ${parseError}. Raw: ${tc.function.arguments.substring(0, 200)}`);
104
+ }
105
+ result.push({
106
+ id: tc.id,
107
+ name: tc.function.name,
108
+ arguments: parsedArgs,
109
+ });
110
+ }
111
+ return result;
112
+ }
113
+ // ============================================================================
114
+ // Responses API Helpers
115
+ // ============================================================================
116
+ /**
117
+ * Models that require the Responses API instead of Chat Completions
118
+ * These are OpenAI's newer reasoning models that only work with /v1/responses
119
+ */
120
+ const RESPONSES_API_MODELS = [
121
+ 'o3',
122
+ 'o3-mini',
123
+ 'o3-pro',
124
+ 'o4-mini',
125
+ 'gpt-5',
126
+ ];
127
+ /**
128
+ * Check if a model requires the Responses API
129
+ */
130
+ export function requiresResponsesAPI(model) {
131
+ return RESPONSES_API_MODELS.some(m => model.startsWith(m));
132
+ }
133
+ /**
134
+ * Convert messages to Responses API input format
135
+ */
136
+ export function toResponsesInput(messages) {
137
+ const input = [];
138
+ for (const m of messages) {
139
+ if (m.role === 'system') {
140
+ // System messages become developer messages in Responses API
141
+ input.push({
142
+ role: 'developer',
143
+ content: typeof m.content === 'string' ? m.content : JSON.stringify(m.content),
144
+ });
145
+ }
146
+ else if (m.role === 'tool') {
147
+ // Tool results become function_call_output items
148
+ input.push({
149
+ type: 'function_call_output',
150
+ call_id: m.toolCallId || '',
151
+ output: typeof m.content === 'string' ? m.content : JSON.stringify(m.content),
152
+ });
153
+ }
154
+ else if (m.role === 'assistant') {
155
+ // Assistant messages with tool calls
156
+ if (m.toolCalls && m.toolCalls.length > 0) {
157
+ // First add any text content as a message
158
+ const textContent = typeof m.content === 'string' ? m.content :
159
+ (Array.isArray(m.content) ? m.content.filter(b => b.type === 'text').map(b => b.text).join('\n') : '');
160
+ if (textContent) {
161
+ input.push({
162
+ role: 'assistant',
163
+ content: textContent,
164
+ });
165
+ }
166
+ // Then add each tool call as a function_call item
167
+ for (const tc of m.toolCalls) {
168
+ input.push({
169
+ type: 'function_call',
170
+ call_id: tc.id,
171
+ name: tc.name,
172
+ arguments: JSON.stringify(tc.arguments),
173
+ });
174
+ }
175
+ }
176
+ else {
177
+ input.push({
178
+ role: 'assistant',
179
+ content: typeof m.content === 'string' ? m.content : JSON.stringify(m.content),
180
+ });
181
+ }
182
+ }
183
+ else if (m.role === 'user') {
184
+ // Handle multi-modal content for user messages
185
+ if (Array.isArray(m.content)) {
186
+ const parts = [];
187
+ for (const block of m.content) {
188
+ if (block.type === 'text') {
189
+ parts.push({ type: 'input_text', text: block.text });
190
+ }
191
+ else if (block.type === 'image') {
192
+ parts.push({
193
+ type: 'input_image',
194
+ image_url: { url: `data:${block.mediaType};base64,${block.data}` },
195
+ });
196
+ }
197
+ }
198
+ input.push({ role: 'user', content: parts });
199
+ }
200
+ else {
201
+ input.push({
202
+ role: 'user',
203
+ content: m.content,
204
+ });
205
+ }
206
+ }
207
+ }
208
+ return input;
209
+ }
210
+ /**
211
+ * Convert tools to Responses API format
212
+ */
213
+ export function toResponsesTools(tools) {
214
+ return tools.map(t => ({
215
+ type: 'function',
216
+ name: t.name,
217
+ description: t.description,
218
+ parameters: t.parameters,
219
+ strict: false,
220
+ }));
221
+ }
222
+ // Type guards for Responses API events
223
+ function isTextDeltaEvent(event) {
224
+ return event.type === 'response.output_text.delta';
225
+ }
226
+ function isFunctionCallDoneEvent(event) {
227
+ return event.type === 'response.function_call_arguments.done';
228
+ }
229
+ function isCompletedEvent(event) {
230
+ return event.type === 'response.completed';
231
+ }
232
+ function isFunctionCallOutput(item) {
233
+ return item.type === 'function_call';
234
+ }
235
+ // ============================================================================
236
+ // Provider Implementations
237
+ // ============================================================================
238
+ /**
239
+ * Chat with OpenAI using the Responses API (for o3, o4-mini, etc.)
240
+ */
241
+ async function chatOpenAIResponses(messages, tools, model, onToken) {
242
+ const apiKey = config.getApiKey('openai');
243
+ if (!apiKey)
244
+ throw new Error('OpenAI API key not configured');
245
+ const client = new OpenAI({ apiKey });
246
+ const responsesInput = toResponsesInput(messages);
247
+ const responsesTools = toResponsesTools(tools);
248
+ // Calculate dynamic max_tokens based on available context space
249
+ const dynamicMaxTokens = calculateMaxTokens('openai', model, messages, tools);
250
+ debugLog(`OpenAI Responses API request: model=${model}, max_tokens=${dynamicMaxTokens}`);
251
+ // Use streaming if callback provided
252
+ if (onToken) {
253
+ let content = '';
254
+ const toolCalls = [];
255
+ let finishReason = 'stop';
256
+ let inputTokens = 0;
257
+ let outputTokens = 0;
258
+ try {
259
+ // Note: OpenAI SDK types don't fully match Responses API yet
260
+ // We use our own type definitions and cast through unknown for SDK interop
261
+ const streamParams = {
262
+ model,
263
+ input: responsesInput,
264
+ tools: responsesTools.length > 0 ? responsesTools : undefined,
265
+ max_output_tokens: dynamicMaxTokens,
266
+ };
267
+ const stream = client.responses.stream(streamParams);
268
+ for await (const event of stream) {
269
+ const typedEvent = event;
270
+ if (isTextDeltaEvent(typedEvent)) {
271
+ content += typedEvent.delta;
272
+ onToken(typedEvent.delta);
273
+ }
274
+ else if (isFunctionCallDoneEvent(typedEvent)) {
275
+ let parsedArgs = {};
276
+ try {
277
+ parsedArgs = JSON.parse(typedEvent.arguments || '{}');
278
+ }
279
+ catch {
280
+ debugLog(`Failed to parse Responses API tool call arguments for ${typedEvent.name}: ${typedEvent.arguments?.substring(0, 200)}`);
281
+ }
282
+ toolCalls.push({
283
+ id: typedEvent.call_id || `call_${Date.now()}`,
284
+ name: typedEvent.name,
285
+ arguments: parsedArgs,
286
+ });
287
+ finishReason = 'tool_use';
288
+ }
289
+ else if (isCompletedEvent(typedEvent)) {
290
+ const response = typedEvent.response;
291
+ if (response?.usage) {
292
+ inputTokens = response.usage.input_tokens || 0;
293
+ outputTokens = response.usage.output_tokens || 0;
294
+ }
295
+ if (response?.status === 'incomplete') {
296
+ finishReason = 'length';
297
+ }
298
+ }
299
+ }
300
+ return {
301
+ content,
302
+ toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
303
+ finishReason,
304
+ usage: { inputTokens, outputTokens },
305
+ };
306
+ }
307
+ catch (streamError) {
308
+ // Surface the streaming failure and re-throw so withRetry handles it
309
+ const errMsg = streamError instanceof Error ? streamError.message : String(streamError);
310
+ debugLog('OpenAI Responses API streaming failed:', errMsg);
311
+ onToken(`\n[Streaming error: ${errMsg}]\n`);
312
+ throw streamError;
313
+ }
314
+ }
315
+ // Non-streaming request
316
+ const createParams = {
317
+ model,
318
+ input: responsesInput,
319
+ tools: responsesTools.length > 0 ? responsesTools : undefined,
320
+ max_output_tokens: dynamicMaxTokens,
321
+ };
322
+ const response = await client.responses.create(createParams);
323
+ // Extract content and tool calls from response
324
+ let content = response.output_text || '';
325
+ const toolCalls = [];
326
+ // Process output items for tool calls
327
+ for (const item of response.output) {
328
+ if (isFunctionCallOutput(item)) {
329
+ toolCalls.push({
330
+ id: item.call_id || item.id || `call_${Date.now()}`,
331
+ name: item.name,
332
+ arguments: typeof item.arguments === 'string'
333
+ ? JSON.parse(item.arguments)
334
+ : item.arguments,
335
+ });
336
+ }
337
+ }
338
+ // Determine finish reason
339
+ let finishReason = 'stop';
340
+ if (toolCalls.length > 0) {
341
+ finishReason = 'tool_use';
342
+ }
343
+ else if (response.status === 'incomplete') {
344
+ finishReason = 'length';
345
+ }
346
+ return {
347
+ content,
348
+ toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
349
+ finishReason,
350
+ usage: response.usage ? {
351
+ inputTokens: response.usage.input_tokens,
352
+ outputTokens: response.usage.output_tokens,
353
+ } : undefined,
354
+ };
355
+ }
356
+ /**
357
+ * Chat with OpenAI
358
+ */
359
+ export async function chatOpenAI(messages, tools, model, onToken) {
360
+ // Route to Responses API for models that require it (o3, o4-mini, etc.)
361
+ if (requiresResponsesAPI(model)) {
362
+ return chatOpenAIResponses(messages, tools, model, onToken);
363
+ }
364
+ const apiKey = config.getApiKey('openai');
365
+ if (!apiKey)
366
+ throw new Error('OpenAI API key not configured');
367
+ const client = new OpenAI({ apiKey });
368
+ const openaiMessages = toOpenAIMessages(messages);
369
+ const openaiTools = toOpenAITools(tools);
370
+ // Calculate dynamic max_tokens based on available context space
371
+ const dynamicMaxTokens = calculateMaxTokens('openai', model, messages, tools);
372
+ debugLog(`OpenAI request: model=${model}, max_tokens=${dynamicMaxTokens}`);
373
+ // Use streaming if callback provided
374
+ // Stream text content while collecting tool calls
375
+ if (onToken) {
376
+ let content = '';
377
+ let toolCallDeltas = {};
378
+ let finishReason = 'stop';
379
+ try {
380
+ const stream = await client.chat.completions.create({
381
+ model,
382
+ messages: openaiMessages,
383
+ tools: openaiTools.length > 0 ? openaiTools : undefined,
384
+ max_tokens: dynamicMaxTokens,
385
+ stream: true,
386
+ });
387
+ for await (const chunk of stream) {
388
+ const choice = chunk.choices[0];
389
+ if (!choice)
390
+ continue;
391
+ // Handle text content
392
+ const textDelta = choice.delta?.content;
393
+ if (textDelta) {
394
+ content += textDelta;
395
+ onToken(textDelta);
396
+ }
397
+ // Handle tool calls (collect deltas)
398
+ const toolCallDelta = choice.delta?.tool_calls;
399
+ if (toolCallDelta) {
400
+ for (const tc of toolCallDelta) {
401
+ if (!toolCallDeltas[tc.index]) {
402
+ toolCallDeltas[tc.index] = { id: '', name: '', arguments: '' };
403
+ }
404
+ if (tc.id)
405
+ toolCallDeltas[tc.index].id = tc.id;
406
+ if (tc.function?.name)
407
+ toolCallDeltas[tc.index].name = tc.function.name;
408
+ if (tc.function?.arguments)
409
+ toolCallDeltas[tc.index].arguments += tc.function.arguments;
410
+ }
411
+ }
412
+ // Track finish reason
413
+ if (choice.finish_reason === 'tool_calls') {
414
+ finishReason = 'tool_use';
415
+ }
416
+ else if (choice.finish_reason === 'length') {
417
+ finishReason = 'length';
418
+ }
419
+ }
420
+ // Convert tool call deltas to tool calls
421
+ const toolCalls = Object.values(toolCallDeltas)
422
+ .filter(tc => tc.id && tc.name)
423
+ .map(tc => {
424
+ let parsedArgs = {};
425
+ try {
426
+ parsedArgs = JSON.parse(tc.arguments || '{}');
427
+ }
428
+ catch {
429
+ debugLog(`Failed to parse streaming tool call arguments for ${tc.name}: ${tc.arguments?.substring(0, 200)}`);
430
+ }
431
+ return {
432
+ id: tc.id,
433
+ name: tc.name,
434
+ arguments: parsedArgs,
435
+ };
436
+ });
437
+ if (toolCalls.length > 0) {
438
+ finishReason = 'tool_use';
439
+ }
440
+ return {
441
+ content,
442
+ toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
443
+ finishReason,
444
+ };
445
+ }
446
+ catch (streamError) {
447
+ // Surface the streaming failure and re-throw so withRetry handles it
448
+ const errMsg = streamError instanceof Error ? streamError.message : String(streamError);
449
+ debugLog('OpenAI streaming failed:', errMsg);
450
+ onToken(`\n[Streaming error: ${errMsg}]\n`);
451
+ throw streamError;
452
+ }
453
+ }
454
+ // Non-streaming request
455
+ const response = await client.chat.completions.create({
456
+ model,
457
+ messages: openaiMessages,
458
+ tools: openaiTools.length > 0 ? openaiTools : undefined,
459
+ max_tokens: dynamicMaxTokens,
460
+ });
461
+ if (!response.choices || response.choices.length === 0) {
462
+ throw new Error('Empty response from OpenAI API');
463
+ }
464
+ const choice = response.choices[0];
465
+ const message = choice.message;
466
+ const toolCalls = parseOpenAIToolCalls(message.tool_calls);
467
+ // Map OpenAI finish reasons
468
+ let finishReason = 'stop';
469
+ if (choice.finish_reason === 'tool_calls') {
470
+ finishReason = 'tool_use';
471
+ }
472
+ else if (choice.finish_reason === 'length') {
473
+ finishReason = 'length';
474
+ }
475
+ return {
476
+ content: message.content || '',
477
+ toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
478
+ finishReason,
479
+ usage: response.usage ? {
480
+ inputTokens: response.usage.prompt_tokens,
481
+ outputTokens: response.usage.completion_tokens,
482
+ } : undefined,
483
+ };
484
+ }
485
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Provider Shared Types & Utilities
3
+ *
4
+ * Constants, token estimation, context health, validation, and shared helpers.
5
+ */
6
+ import type { Message, Tool, LLMResponse, LLMProvider } from '../types.js';
7
+ export declare const MAX_TOKENS = 8192;
8
+ export declare const MIN_OUTPUT_TOKENS = 1024;
9
+ export declare const CONTEXT_BUFFER_PERCENT = 0.08;
10
+ export declare const CONTEXT_BUFFER_MIN = 1024;
11
+ /** Maximum allowed content length (1MB) to prevent memory issues */
12
+ export declare const MAX_CONTENT_LENGTH: number;
13
+ export declare function debugLog(message: string, ...args: unknown[]): void;
14
+ /**
15
+ * Streaming callback type
16
+ */
17
+ export type StreamCallback = (token: string) => void;
18
+ /**
19
+ * Retry callback type for UI updates
20
+ */
21
+ export type RetryCallback = (attempt: number, error: Error, delayMs: number) => void;
22
+ /**
23
+ * Extract text from MessageContent
24
+ */
25
+ export declare function getTextContent(content: Message['content']): string;
26
+ /**
27
+ * Estimate tokens from messages (conservative: ~3 chars per token)
28
+ * Uses conservative estimation to avoid context overflow
29
+ */
30
+ export declare function estimateInputTokens(messages: Message[], tools: Tool[]): number;
31
+ /**
32
+ * Calculate dynamic max_tokens based on available context space
33
+ */
34
+ export declare function calculateMaxTokens(provider: LLMProvider, model: string, messages: Message[], tools: Tool[]): number;
35
+ /**
36
+ * Check if context needs summarization based on actual token usage
37
+ * Call this with the input_tokens from the last API response
38
+ */
39
+ export declare function needsSummarization(provider: LLMProvider, model: string, actualInputTokens: number): boolean;
40
+ /**
41
+ * Get context health info
42
+ */
43
+ export declare function getContextHealth(provider: LLMProvider, model: string, actualInputTokens: number): {
44
+ limit: number;
45
+ used: number;
46
+ percent: number;
47
+ needsSummarization: boolean;
48
+ };
49
+ /**
50
+ * Estimate context usage before making a request (for pre-request summarization)
51
+ * Uses conservative estimation since we don't have actual token counts yet
52
+ */
53
+ export declare function estimateContextUsage(provider: LLMProvider, model: string, messages: Message[], tools: Tool[]): {
54
+ estimated: number;
55
+ limit: number;
56
+ percent: number;
57
+ needsSummarization: boolean;
58
+ };
59
+ /**
60
+ * Validate and sanitize LLM response
61
+ */
62
+ export declare function validateLLMResponse(response: LLMResponse): LLMResponse;
63
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAe,MAAM,aAAa,CAAC;AAGxF,eAAO,MAAM,UAAU,OAAO,CAAC;AAC/B,eAAO,MAAM,iBAAiB,OAAO,CAAC;AACtC,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAC3C,eAAO,MAAM,kBAAkB,OAAO,CAAC;AAEvC,oEAAoE;AACpE,eAAO,MAAM,kBAAkB,QAAc,CAAC;AAI9C,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAElE;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AAErD;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAErF;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,MAAM,CAQlE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,CAiC9E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,WAAW,EACrB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,EAAE,IAAI,EAAE,GACZ,MAAM,CAgBR;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,WAAW,EACrB,KAAK,EAAE,MAAM,EACb,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAIT;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,WAAW,EACrB,KAAK,EAAE,MAAM,EACb,iBAAiB,EAAE,MAAM,GACxB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,OAAO,CAAA;CAAE,CAS/E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,WAAW,EACrB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,EAAE,IAAI,EAAE,GACZ;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,OAAO,CAAA;CAAE,CAUpF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,WAAW,GAAG,WAAW,CA0CtE"}