@within-7/minto 0.3.9 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (383) hide show
  1. package/dist/Tool.js.map +2 -2
  2. package/dist/commands/agents/AgentsCommand.js +461 -657
  3. package/dist/commands/agents/AgentsCommand.js.map +2 -2
  4. package/dist/commands/agents/types.js +1 -0
  5. package/dist/commands/agents/types.js.map +2 -2
  6. package/dist/commands/agents/utils/fileOperations.js +96 -36
  7. package/dist/commands/agents/utils/fileOperations.js.map +3 -3
  8. package/dist/commands/agents/utils/index.js +3 -1
  9. package/dist/commands/agents/utils/index.js.map +2 -2
  10. package/dist/commands/context.js +54 -23
  11. package/dist/commands/context.js.map +2 -2
  12. package/dist/commands/ctx_viz.js +1 -1
  13. package/dist/commands/effort.js +87 -0
  14. package/dist/commands/effort.js.map +7 -0
  15. package/dist/commands/export.js +684 -94
  16. package/dist/commands/export.js.map +2 -2
  17. package/dist/commands/ide.js +18 -0
  18. package/dist/commands/ide.js.map +7 -0
  19. package/dist/commands/language.js +19 -46
  20. package/dist/commands/language.js.map +2 -2
  21. package/dist/commands/mcp-interactive.js +425 -217
  22. package/dist/commands/mcp-interactive.js.map +2 -2
  23. package/dist/commands/memory.js +168 -0
  24. package/dist/commands/memory.js.map +7 -0
  25. package/dist/commands/model.js +457 -65
  26. package/dist/commands/model.js.map +2 -2
  27. package/dist/commands/outputStyle.js +64 -0
  28. package/dist/commands/outputStyle.js.map +7 -0
  29. package/dist/commands/permissions.js +75 -49
  30. package/dist/commands/permissions.js.map +2 -2
  31. package/dist/commands/plugin/utils.js +33 -1
  32. package/dist/commands/plugin/utils.js.map +2 -2
  33. package/dist/commands/plugin.js +891 -185
  34. package/dist/commands/plugin.js.map +3 -3
  35. package/dist/commands/refreshCommands.js +2 -0
  36. package/dist/commands/refreshCommands.js.map +2 -2
  37. package/dist/commands/resume.js +1 -1
  38. package/dist/commands/resume.js.map +1 -1
  39. package/dist/commands/review.js +51 -0
  40. package/dist/commands/review.js.map +7 -0
  41. package/dist/commands/sandbox.js +168 -70
  42. package/dist/commands/sandbox.js.map +2 -2
  43. package/dist/commands/setup.js +593 -107
  44. package/dist/commands/setup.js.map +2 -2
  45. package/dist/commands/stats.js +188 -131
  46. package/dist/commands/stats.js.map +2 -2
  47. package/dist/commands/status.js +75 -13
  48. package/dist/commands/status.js.map +2 -2
  49. package/dist/commands/terminalSetup.js +6 -0
  50. package/dist/commands/terminalSetup.js.map +2 -2
  51. package/dist/commands/undo.js +146 -174
  52. package/dist/commands/undo.js.map +2 -2
  53. package/dist/commands/vim.js +22 -0
  54. package/dist/commands/vim.js.map +7 -0
  55. package/dist/commands.js +12 -0
  56. package/dist/commands.js.map +2 -2
  57. package/dist/components/Help.js +165 -32
  58. package/dist/components/Help.js.map +2 -2
  59. package/dist/components/HighlightedCode.js +1 -0
  60. package/dist/components/HighlightedCode.js.map +2 -2
  61. package/dist/components/InfoPanel/InfoPanel.js +123 -0
  62. package/dist/components/InfoPanel/InfoPanel.js.map +7 -0
  63. package/dist/components/InfoPanel/index.js +5 -0
  64. package/dist/components/InfoPanel/index.js.map +7 -0
  65. package/dist/components/InfoPanel/types.js +1 -0
  66. package/dist/components/InfoPanel/types.js.map +7 -0
  67. package/dist/components/ModelSelector/BrandTextInput.js +43 -0
  68. package/dist/components/ModelSelector/BrandTextInput.js.map +7 -0
  69. package/dist/components/ModelSelector/ModelSelector.js +590 -565
  70. package/dist/components/ModelSelector/ModelSelector.js.map +2 -2
  71. package/dist/components/ModelSelector/WizardContainer.js +45 -0
  72. package/dist/components/ModelSelector/WizardContainer.js.map +7 -0
  73. package/dist/components/ModelSelector/index.js +1 -3
  74. package/dist/components/ModelSelector/index.js.map +2 -2
  75. package/dist/components/PromptInput.js +26 -11
  76. package/dist/components/PromptInput.js.map +2 -2
  77. package/dist/components/PulseLabel.js +44 -0
  78. package/dist/components/PulseLabel.js.map +7 -0
  79. package/dist/components/RequestStatusIndicator.js +1 -1
  80. package/dist/components/RequestStatusIndicator.js.map +1 -1
  81. package/dist/components/SimpleSelector/SimpleSelector.js +154 -0
  82. package/dist/components/SimpleSelector/SimpleSelector.js.map +7 -0
  83. package/dist/components/SimpleSelector/index.js +5 -0
  84. package/dist/components/SimpleSelector/index.js.map +7 -0
  85. package/dist/components/SimpleSelector/types.js +1 -0
  86. package/dist/components/SimpleSelector/types.js.map +7 -0
  87. package/dist/components/Spinner.js +12 -42
  88. package/dist/components/Spinner.js.map +3 -3
  89. package/dist/components/StartupStatus.js +57 -0
  90. package/dist/components/StartupStatus.js.map +7 -0
  91. package/dist/components/StatusOverlayContent.js +21 -0
  92. package/dist/components/StatusOverlayContent.js.map +7 -0
  93. package/dist/components/SubagentBlock.js +43 -6
  94. package/dist/components/SubagentBlock.js.map +2 -2
  95. package/dist/components/TabbedListView/ScrollableList.js +31 -5
  96. package/dist/components/TabbedListView/ScrollableList.js.map +2 -2
  97. package/dist/components/TabbedListView/TabBar.js +13 -8
  98. package/dist/components/TabbedListView/TabBar.js.map +2 -2
  99. package/dist/components/TabbedListView/TabbedListView.js +123 -48
  100. package/dist/components/TabbedListView/TabbedListView.js.map +2 -2
  101. package/dist/components/TodoPanel.js +1 -1
  102. package/dist/components/TodoPanel.js.map +1 -1
  103. package/dist/components/ToolUseLoader.js +5 -0
  104. package/dist/components/ToolUseLoader.js.map +2 -2
  105. package/dist/components/TrustDialog.js +0 -2
  106. package/dist/components/TrustDialog.js.map +2 -2
  107. package/dist/components/messages/TaskInModuleView.js +1 -1
  108. package/dist/components/messages/TaskInModuleView.js.map +2 -2
  109. package/dist/components/messages/TaskToolMessage.js +1 -1
  110. package/dist/components/messages/TaskToolMessage.js.map +2 -2
  111. package/dist/components/messages/UserPromptMessage.js +6 -1
  112. package/dist/components/messages/UserPromptMessage.js.map +2 -2
  113. package/dist/constants/modelCapabilities.js +103 -18
  114. package/dist/constants/modelCapabilities.js.map +2 -2
  115. package/dist/constants/product.js +2 -0
  116. package/dist/constants/product.js.map +2 -2
  117. package/dist/constants/prompts/agentPrompt.js +30 -0
  118. package/dist/constants/prompts/agentPrompt.js.map +7 -0
  119. package/dist/constants/prompts/codeConventions.js +27 -0
  120. package/dist/constants/prompts/codeConventions.js.map +7 -0
  121. package/dist/constants/prompts/doingTasks.js +15 -0
  122. package/dist/constants/prompts/doingTasks.js.map +7 -0
  123. package/dist/constants/prompts/envInfo.js +17 -0
  124. package/dist/constants/prompts/envInfo.js.map +7 -0
  125. package/dist/constants/prompts/executingWithCare.js +17 -0
  126. package/dist/constants/prompts/executingWithCare.js.map +7 -0
  127. package/dist/constants/prompts/identity.js +10 -0
  128. package/dist/constants/prompts/identity.js.map +7 -0
  129. package/dist/constants/prompts/index.js +78 -0
  130. package/dist/constants/prompts/index.js.map +7 -0
  131. package/dist/constants/prompts/taskManagement.js +60 -0
  132. package/dist/constants/prompts/taskManagement.js.map +7 -0
  133. package/dist/constants/prompts/toneAndStyle.js +62 -0
  134. package/dist/constants/prompts/toneAndStyle.js.map +7 -0
  135. package/dist/constants/prompts/toolUsagePolicy.js +38 -0
  136. package/dist/constants/prompts/toolUsagePolicy.js.map +7 -0
  137. package/dist/constants/prompts.js +5 -176
  138. package/dist/constants/prompts.js.map +2 -2
  139. package/dist/constants/providerRegistry.js +235 -0
  140. package/dist/constants/providerRegistry.js.map +7 -0
  141. package/dist/constants/providers.js +35 -0
  142. package/dist/constants/providers.js.map +7 -0
  143. package/dist/context/PermissionContext.js +0 -1
  144. package/dist/context/PermissionContext.js.map +2 -2
  145. package/dist/context.js +87 -31
  146. package/dist/context.js.map +2 -2
  147. package/dist/core/backupHook.js +29 -0
  148. package/dist/core/backupHook.js.map +7 -0
  149. package/dist/core/config/defaults.js +11 -2
  150. package/dist/core/config/defaults.js.map +2 -2
  151. package/dist/core/config/schema.js +21 -3
  152. package/dist/core/config/schema.js.map +2 -2
  153. package/dist/core/costTracker.js +18 -16
  154. package/dist/core/costTracker.js.map +2 -2
  155. package/dist/core/index.js +0 -1
  156. package/dist/core/index.js.map +2 -2
  157. package/dist/core/tokenStatsManager.js +22 -4
  158. package/dist/core/tokenStatsManager.js.map +2 -2
  159. package/dist/cost-tracker.js +0 -16
  160. package/dist/cost-tracker.js.map +2 -2
  161. package/dist/entrypoints/bootstrap.js +3 -1
  162. package/dist/entrypoints/bootstrap.js.map +2 -2
  163. package/dist/entrypoints/cli.js +81 -68
  164. package/dist/entrypoints/cli.js.map +2 -2
  165. package/dist/hooks/useAgentTokenStats.js +1 -1
  166. package/dist/hooks/useAgentTokenStats.js.map +2 -2
  167. package/dist/hooks/useAgentTranscripts.js +2 -1
  168. package/dist/hooks/useAgentTranscripts.js.map +2 -2
  169. package/dist/hooks/useBackgroundShells.js +29 -0
  170. package/dist/hooks/useBackgroundShells.js.map +7 -0
  171. package/dist/hooks/useCanUseTool.js +1 -1
  172. package/dist/hooks/useCanUseTool.js.map +2 -2
  173. package/dist/hooks/useDeferredLoading.js +64 -0
  174. package/dist/hooks/useDeferredLoading.js.map +7 -0
  175. package/dist/hooks/useHookStatus.js +1 -1
  176. package/dist/hooks/useHookStatus.js.map +2 -2
  177. package/dist/hooks/useSessionTracking.js +55 -0
  178. package/dist/hooks/useSessionTracking.js.map +7 -0
  179. package/dist/hooks/useTerminalSize.js +21 -0
  180. package/dist/hooks/useTerminalSize.js.map +2 -2
  181. package/dist/hooks/useTextInput.js +1 -0
  182. package/dist/hooks/useTextInput.js.map +2 -2
  183. package/dist/hooks/useUnifiedCompletion.js +3 -2
  184. package/dist/hooks/useUnifiedCompletion.js.map +2 -2
  185. package/dist/i18n/locales/en.js +299 -1
  186. package/dist/i18n/locales/en.js.map +2 -2
  187. package/dist/i18n/locales/zh-CN.js +300 -2
  188. package/dist/i18n/locales/zh-CN.js.map +2 -2
  189. package/dist/i18n/types.js.map +1 -1
  190. package/dist/messages.js +41 -17
  191. package/dist/messages.js.map +2 -2
  192. package/dist/permissions.js +94 -1
  193. package/dist/permissions.js.map +2 -2
  194. package/dist/query.js +27 -19
  195. package/dist/query.js.map +2 -2
  196. package/dist/screens/REPL.js +83 -74
  197. package/dist/screens/REPL.js.map +2 -2
  198. package/dist/services/adapters/responsesAPI.js +6 -0
  199. package/dist/services/adapters/responsesAPI.js.map +2 -2
  200. package/dist/services/agentTeams/index.js +35 -0
  201. package/dist/services/agentTeams/index.js.map +7 -0
  202. package/dist/services/agentTeams/mailbox.js +114 -0
  203. package/dist/services/agentTeams/mailbox.js.map +7 -0
  204. package/dist/services/agentTeams/teamManager.js +149 -0
  205. package/dist/services/agentTeams/teamManager.js.map +7 -0
  206. package/dist/services/agentTeams/teamTaskStore.js +114 -0
  207. package/dist/services/agentTeams/teamTaskStore.js.map +7 -0
  208. package/dist/services/agentTeams/teammateSpawner.js +80 -0
  209. package/dist/services/agentTeams/teammateSpawner.js.map +7 -0
  210. package/dist/services/checkpointManager.js +16 -3
  211. package/dist/services/checkpointManager.js.map +2 -2
  212. package/dist/services/claude.js +19 -1728
  213. package/dist/services/claude.js.map +3 -3
  214. package/dist/services/customCommands.js +30 -8
  215. package/dist/services/customCommands.js.map +2 -2
  216. package/dist/services/gpt5ConnectionTest.js +4 -2
  217. package/dist/services/gpt5ConnectionTest.js.map +2 -2
  218. package/dist/services/hookExecutor.js +411 -127
  219. package/dist/services/hookExecutor.js.map +2 -2
  220. package/dist/services/llm/anthropicProvider.js +807 -0
  221. package/dist/services/llm/anthropicProvider.js.map +7 -0
  222. package/dist/services/llm/dispatch.js +218 -0
  223. package/dist/services/llm/dispatch.js.map +7 -0
  224. package/dist/services/llm/index.js +44 -0
  225. package/dist/services/llm/index.js.map +7 -0
  226. package/dist/services/llm/mintoContext.js +69 -0
  227. package/dist/services/llm/mintoContext.js.map +7 -0
  228. package/dist/services/llm/openaiProvider.js +622 -0
  229. package/dist/services/llm/openaiProvider.js.map +7 -0
  230. package/dist/services/llm/types.js +157 -0
  231. package/dist/services/llm/types.js.map +7 -0
  232. package/dist/services/mcpClient.js +183 -33
  233. package/dist/services/mcpClient.js.map +2 -2
  234. package/dist/services/notifier.js +14 -0
  235. package/dist/services/notifier.js.map +2 -2
  236. package/dist/services/oauth.js +4 -2
  237. package/dist/services/oauth.js.map +2 -2
  238. package/dist/services/openai.js +66 -56
  239. package/dist/services/openai.js.map +3 -3
  240. package/dist/services/outputStyles.js +102 -21
  241. package/dist/services/outputStyles.js.map +2 -2
  242. package/dist/services/plugins/lspServers.js +1 -1
  243. package/dist/services/plugins/lspServers.js.map +2 -2
  244. package/dist/services/plugins/pluginRuntime.js +2 -1
  245. package/dist/services/plugins/pluginRuntime.js.map +2 -2
  246. package/dist/services/plugins/pluginValidation.js +10 -3
  247. package/dist/services/plugins/pluginValidation.js.map +2 -2
  248. package/dist/services/plugins/skillMarketplace.js +20 -9
  249. package/dist/services/plugins/skillMarketplace.js.map +2 -2
  250. package/dist/services/sentry.js +1 -1
  251. package/dist/services/sentry.js.map +2 -2
  252. package/dist/services/sessionMemory.js +16 -3
  253. package/dist/services/sessionMemory.js.map +2 -2
  254. package/dist/services/systemReminder.js +367 -9
  255. package/dist/services/systemReminder.js.map +2 -2
  256. package/dist/services/taskStore.js +19 -0
  257. package/dist/services/taskStore.js.map +2 -2
  258. package/dist/tools/ArchitectTool/ArchitectTool.js.map +1 -1
  259. package/dist/tools/AskUserQuestionTool/AskUserQuestionTool.js.map +1 -1
  260. package/dist/tools/BashOutputTool/BashOutputTool.js.map +1 -1
  261. package/dist/tools/BashTool/BashTool.js +28 -0
  262. package/dist/tools/BashTool/BashTool.js.map +2 -2
  263. package/dist/tools/FileEditTool/FileEditTool.js +8 -1
  264. package/dist/tools/FileEditTool/FileEditTool.js.map +2 -2
  265. package/dist/tools/FileReadTool/FileReadTool.js +14 -0
  266. package/dist/tools/FileReadTool/FileReadTool.js.map +2 -2
  267. package/dist/tools/FileWriteTool/FileWriteTool.js +10 -1
  268. package/dist/tools/FileWriteTool/FileWriteTool.js.map +2 -2
  269. package/dist/tools/GlobTool/GlobTool.js.map +1 -1
  270. package/dist/tools/GrepTool/GrepTool.js.map +1 -1
  271. package/dist/tools/KillShellTool/KillShellTool.js.map +1 -1
  272. package/dist/tools/ListMcpResourcesTool/ListMcpResourcesTool.js.map +2 -2
  273. package/dist/tools/LspTool/LspTool.js +11 -2
  274. package/dist/tools/LspTool/LspTool.js.map +2 -2
  275. package/dist/tools/MCPTool/MCPTool.js.map +1 -1
  276. package/dist/tools/MemoryReadTool/MemoryReadTool.js +2 -1
  277. package/dist/tools/MemoryReadTool/MemoryReadTool.js.map +2 -2
  278. package/dist/tools/MemoryWriteTool/MemoryWriteTool.js +2 -1
  279. package/dist/tools/MemoryWriteTool/MemoryWriteTool.js.map +2 -2
  280. package/dist/tools/MultiEditTool/MultiEditTool.js +7 -0
  281. package/dist/tools/MultiEditTool/MultiEditTool.js.map +2 -2
  282. package/dist/tools/NotebookEditTool/NotebookEditTool.js +2 -0
  283. package/dist/tools/NotebookEditTool/NotebookEditTool.js.map +2 -2
  284. package/dist/tools/NotebookReadTool/NotebookReadTool.js.map +1 -1
  285. package/dist/tools/PlanModeTool/EnterPlanModeTool.js +8 -2
  286. package/dist/tools/PlanModeTool/EnterPlanModeTool.js.map +2 -2
  287. package/dist/tools/PlanModeTool/ExitPlanModeTool.js +2 -0
  288. package/dist/tools/PlanModeTool/ExitPlanModeTool.js.map +2 -2
  289. package/dist/tools/ReadMcpResourceTool/ReadMcpResourceTool.js.map +1 -1
  290. package/dist/tools/SlashCommandTool/SlashCommandTool.js +174 -18
  291. package/dist/tools/SlashCommandTool/SlashCommandTool.js.map +3 -3
  292. package/dist/tools/TaskCreateTool/TaskCreateTool.js.map +1 -1
  293. package/dist/tools/TaskGetTool/TaskGetTool.js.map +1 -1
  294. package/dist/tools/TaskListTool/TaskListTool.js.map +1 -1
  295. package/dist/tools/TaskOutputTool/TaskOutputTool.js.map +1 -1
  296. package/dist/tools/TaskStopTool/TaskStopTool.js.map +1 -1
  297. package/dist/tools/TaskTool/TaskTool.js +84 -11
  298. package/dist/tools/TaskTool/TaskTool.js.map +2 -2
  299. package/dist/tools/TaskTool/prompt.js +12 -6
  300. package/dist/tools/TaskTool/prompt.js.map +2 -2
  301. package/dist/tools/TaskUpdateTool/TaskUpdateTool.js.map +1 -1
  302. package/dist/tools/ThinkTool/ThinkTool.js.map +1 -1
  303. package/dist/tools/TodoWriteTool/TodoWriteTool.js.map +1 -1
  304. package/dist/tools/URLFetcherTool/URLFetcherTool.js.map +1 -1
  305. package/dist/tools/WebSearchTool/WebSearchTool.js.map +1 -1
  306. package/dist/tools/WebSearchTool/searchProviders.js +2 -1
  307. package/dist/tools/WebSearchTool/searchProviders.js.map +2 -2
  308. package/dist/tools/lsTool/lsTool.js.map +2 -2
  309. package/dist/tools/lsTool/prompt.js.map +1 -1
  310. package/dist/tools.js +14 -3
  311. package/dist/tools.js.map +2 -2
  312. package/dist/types/PermissionMode.js +21 -1
  313. package/dist/types/PermissionMode.js.map +2 -2
  314. package/dist/types/agentTeams.js +1 -0
  315. package/dist/types/agentTeams.js.map +7 -0
  316. package/dist/types/hooks.js +8 -2
  317. package/dist/types/hooks.js.map +2 -2
  318. package/dist/types/plugin.js +3 -5
  319. package/dist/types/plugin.js.map +2 -2
  320. package/dist/utils/agentHookExecutor.js +1 -4
  321. package/dist/utils/agentHookExecutor.js.map +2 -2
  322. package/dist/utils/agentLoader.js +91 -15
  323. package/dist/utils/agentLoader.js.map +2 -2
  324. package/dist/utils/agentMemory.js.map +2 -2
  325. package/dist/utils/animationManager.js +1 -1
  326. package/dist/utils/animationManager.js.map +2 -2
  327. package/dist/utils/ask.js +1 -1
  328. package/dist/utils/async.js +5 -1
  329. package/dist/utils/async.js.map +2 -2
  330. package/dist/utils/autoCompactCore.js +60 -0
  331. package/dist/utils/autoCompactCore.js.map +2 -2
  332. package/dist/utils/claudeCodeSync.js +439 -0
  333. package/dist/utils/claudeCodeSync.js.map +7 -0
  334. package/dist/utils/config.js +27 -151
  335. package/dist/utils/config.js.map +2 -2
  336. package/dist/utils/configSchema.js +227 -0
  337. package/dist/utils/configSchema.js.map +7 -0
  338. package/dist/utils/debugLogger.js.map +2 -2
  339. package/dist/utils/env.js +4 -3
  340. package/dist/utils/env.js.map +2 -2
  341. package/dist/utils/envConfig.js +34 -0
  342. package/dist/utils/envConfig.js.map +3 -3
  343. package/dist/utils/execFileNoThrow.js +2 -1
  344. package/dist/utils/execFileNoThrow.js.map +2 -2
  345. package/dist/utils/gpt5.js +146 -0
  346. package/dist/utils/gpt5.js.map +7 -0
  347. package/dist/utils/hookManager.js +374 -140
  348. package/dist/utils/hookManager.js.map +2 -2
  349. package/dist/utils/markdown.js +47 -0
  350. package/dist/utils/markdown.js.map +2 -2
  351. package/dist/utils/marketplaceManager.js +80 -43
  352. package/dist/utils/marketplaceManager.js.map +2 -2
  353. package/dist/utils/memoizeWithTTL.js +25 -0
  354. package/dist/utils/memoizeWithTTL.js.map +7 -0
  355. package/dist/utils/messages.js +2 -2
  356. package/dist/utils/messages.js.map +2 -2
  357. package/dist/utils/model.js +34 -9
  358. package/dist/utils/model.js.map +2 -2
  359. package/dist/utils/pluginInstaller.js +68 -29
  360. package/dist/utils/pluginInstaller.js.map +2 -2
  361. package/dist/utils/pluginLoader.js +249 -57
  362. package/dist/utils/pluginLoader.js.map +2 -2
  363. package/dist/utils/repoFetcher.js +110 -0
  364. package/dist/utils/repoFetcher.js.map +7 -0
  365. package/dist/utils/safeFetch.js +45 -0
  366. package/dist/utils/safeFetch.js.map +7 -0
  367. package/dist/utils/skillLoader.js +77 -12
  368. package/dist/utils/skillLoader.js.map +2 -2
  369. package/dist/utils/streamingState.js +52 -0
  370. package/dist/utils/streamingState.js.map +7 -0
  371. package/dist/utils/stringSubstitution.js +4 -5
  372. package/dist/utils/stringSubstitution.js.map +2 -2
  373. package/dist/utils/style.js +6 -3
  374. package/dist/utils/style.js.map +2 -2
  375. package/dist/utils/teamConfig.js +162 -16
  376. package/dist/utils/teamConfig.js.map +2 -2
  377. package/dist/utils/terminal.js +1 -1
  378. package/dist/utils/terminal.js.map +2 -2
  379. package/dist/utils/toolRiskClassification.js +0 -6
  380. package/dist/utils/toolRiskClassification.js.map +2 -2
  381. package/dist/version.js +2 -2
  382. package/dist/version.js.map +1 -1
  383. package/package.json +7 -6
@@ -0,0 +1,622 @@
1
+ import { randomUUID } from "crypto";
2
+ import { nanoid } from "nanoid";
3
+ import { getToolDescriptionAsync } from "../../Tool.js";
4
+ import {
5
+ getGlobalConfig
6
+ } from "../../utils/config.js";
7
+ import { isGPT5ModelName as isGPT5Model } from "../../utils/config.js";
8
+ import {
9
+ createAssistantAPIErrorMessage,
10
+ normalizeContentFromAPI
11
+ } from "../../utils/messages.js";
12
+ import {
13
+ debug as debugLogger,
14
+ getCurrentRequest,
15
+ logLLMInteraction,
16
+ logSystemPromptConstruction
17
+ } from "../../utils/debugLogger.js";
18
+ import { getModelManager } from "../../utils/model.js";
19
+ import { zodToJsonSchema } from "zod-to-json-schema";
20
+ import { ModelAdapterFactory } from "../modelAdapterFactory.js";
21
+ import { getCLISyspromptPrefix } from "../../constants/prompts/index.js";
22
+ import { setStreamingState } from "../../utils/streamingState.js";
23
+ import {
24
+ getCompletionWithProfile,
25
+ getGPT5CompletionWithProfile
26
+ } from "../openai.js";
27
+ import { getReasoningEffort } from "../../utils/thinking.js";
28
+ import { addRetryEventToTranscript } from "../../utils/agentTranscripts.js";
29
+ import { generateMintoContext } from "./mintoContext.js";
30
+ import { splitSysPromptPrefix } from "./anthropicProvider.js";
31
+ import {
32
+ API_ERROR_MESSAGE_PREFIX,
33
+ PROMPT_TOO_LONG_ERROR_MESSAGE,
34
+ CREDIT_BALANCE_TOO_LOW_ERROR_MESSAGE,
35
+ INVALID_API_KEY_ERROR_MESSAGE,
36
+ PROMPT_CACHING_ENABLED,
37
+ MAIN_QUERY_TEMPERATURE,
38
+ SONNET_COST_PER_MILLION_INPUT_TOKENS,
39
+ SONNET_COST_PER_MILLION_OUTPUT_TOKENS,
40
+ withRetry,
41
+ getMaxTokensFromProfile,
42
+ getModelInputTokenCostUSD,
43
+ getModelOutputTokenCostUSD,
44
+ addToTotalCost,
45
+ recordTokenUsage,
46
+ logError
47
+ } from "./types.js";
48
+ function convertAnthropicMessagesToOpenAIMessages(messages) {
49
+ const openaiMessages = [];
50
+ const toolResults = {};
51
+ for (const message of messages) {
52
+ let contentBlocks = [];
53
+ if (typeof message.message.content === "string") {
54
+ contentBlocks = [
55
+ {
56
+ type: "text",
57
+ text: message.message.content
58
+ }
59
+ ];
60
+ } else if (!Array.isArray(message.message.content)) {
61
+ contentBlocks = [message.message.content];
62
+ } else {
63
+ contentBlocks = message.message.content;
64
+ }
65
+ for (const block of contentBlocks) {
66
+ if (block.type === "text") {
67
+ openaiMessages.push({
68
+ role: message.message.role,
69
+ content: block.text
70
+ });
71
+ } else if (block.type === "tool_use") {
72
+ openaiMessages.push({
73
+ role: "assistant",
74
+ content: void 0,
75
+ tool_calls: [
76
+ {
77
+ type: "function",
78
+ function: {
79
+ name: block.name,
80
+ arguments: JSON.stringify(block.input)
81
+ },
82
+ id: block.id
83
+ }
84
+ ]
85
+ });
86
+ } else if (block.type === "tool_result") {
87
+ let toolContent = block.content;
88
+ if (typeof toolContent !== "string") {
89
+ toolContent = JSON.stringify(toolContent);
90
+ }
91
+ toolResults[block.tool_use_id] = {
92
+ role: "tool",
93
+ content: toolContent,
94
+ tool_call_id: block.tool_use_id
95
+ };
96
+ }
97
+ }
98
+ }
99
+ const finalMessages = [];
100
+ for (const message of openaiMessages) {
101
+ finalMessages.push(message);
102
+ if ("tool_calls" in message && message.tool_calls) {
103
+ for (const toolCall of message.tool_calls) {
104
+ if (toolResults[toolCall.id]) {
105
+ finalMessages.push(toolResults[toolCall.id]);
106
+ }
107
+ }
108
+ }
109
+ }
110
+ return finalMessages;
111
+ }
112
+ function messageReducer(previous, item) {
113
+ const reduce = (acc, delta) => {
114
+ acc = { ...acc };
115
+ for (const [key, value] of Object.entries(delta)) {
116
+ if (acc[key] === void 0 || acc[key] === null) {
117
+ acc[key] = value;
118
+ if (Array.isArray(acc[key])) {
119
+ for (const arr of acc[key]) {
120
+ delete arr.index;
121
+ }
122
+ }
123
+ } else if (typeof acc[key] === "string" && typeof value === "string") {
124
+ acc[key] += value;
125
+ } else if (typeof acc[key] === "number" && typeof value === "number") {
126
+ acc[key] = value;
127
+ } else if (Array.isArray(acc[key]) && Array.isArray(value)) {
128
+ const accArray = acc[key];
129
+ for (let i = 0; i < value.length; i++) {
130
+ const { index: rawIndex, ...chunkTool } = value[i];
131
+ const index = rawIndex ?? 0;
132
+ if (index - accArray.length > 1) {
133
+ throw new Error(
134
+ `Error: An array has an empty value when tool_calls are constructed. tool_calls: ${accArray}; tool: ${value}`
135
+ );
136
+ }
137
+ accArray[index] = reduce(accArray[index], chunkTool);
138
+ }
139
+ } else if (typeof acc[key] === "object" && typeof value === "object") {
140
+ acc[key] = reduce(acc[key], value);
141
+ }
142
+ }
143
+ return acc;
144
+ };
145
+ const choice = item.choices?.[0];
146
+ if (!choice) {
147
+ return previous;
148
+ }
149
+ return reduce(previous, choice.delta);
150
+ }
151
+ async function handleMessageStream(stream, signal) {
152
+ const streamStartTime = Date.now();
153
+ let ttftMs;
154
+ let chunkCount = 0;
155
+ let errorCount = 0;
156
+ debugLogger.api("OPENAI_STREAM_START", {
157
+ streamStartTime: String(streamStartTime)
158
+ });
159
+ let message = {};
160
+ let id, model, created, object, usage;
161
+ try {
162
+ for await (const chunk of stream) {
163
+ if (signal?.aborted) {
164
+ debugLogger.flow("OPENAI_STREAM_ABORTED", {
165
+ chunkCount,
166
+ timestamp: Date.now()
167
+ });
168
+ throw new Error("Request was cancelled");
169
+ }
170
+ chunkCount++;
171
+ try {
172
+ if (!id) {
173
+ id = chunk.id;
174
+ debugLogger.api("OPENAI_STREAM_ID_RECEIVED", {
175
+ id,
176
+ chunkNumber: String(chunkCount)
177
+ });
178
+ }
179
+ if (!model) {
180
+ model = chunk.model;
181
+ debugLogger.api("OPENAI_STREAM_MODEL_RECEIVED", {
182
+ model,
183
+ chunkNumber: String(chunkCount)
184
+ });
185
+ }
186
+ if (!created) {
187
+ created = chunk.created;
188
+ }
189
+ if (!object) {
190
+ object = chunk.object;
191
+ }
192
+ if (!usage && chunk.usage) {
193
+ usage = chunk.usage;
194
+ setStreamingState({
195
+ inputTokens: chunk.usage.prompt_tokens,
196
+ outputTokens: chunk.usage.completion_tokens
197
+ });
198
+ }
199
+ message = messageReducer(message, chunk);
200
+ if (chunk?.choices?.[0]?.delta?.content) {
201
+ if (!ttftMs) {
202
+ ttftMs = Date.now() - streamStartTime;
203
+ debugLogger.api("OPENAI_STREAM_FIRST_TOKEN", {
204
+ ttftMs: String(ttftMs),
205
+ chunkNumber: String(chunkCount)
206
+ });
207
+ }
208
+ }
209
+ } catch (chunkError) {
210
+ errorCount++;
211
+ debugLogger.error("OPENAI_STREAM_CHUNK_ERROR", {
212
+ chunkNumber: String(chunkCount),
213
+ errorMessage: chunkError instanceof Error ? chunkError.message : String(chunkError),
214
+ errorType: chunkError instanceof Error ? chunkError.constructor.name : typeof chunkError
215
+ });
216
+ }
217
+ }
218
+ debugLogger.api("OPENAI_STREAM_COMPLETE", {
219
+ totalChunks: String(chunkCount),
220
+ errorCount: String(errorCount),
221
+ totalDuration: String(Date.now() - streamStartTime),
222
+ ttftMs: String(ttftMs || 0),
223
+ finalMessageId: id || "undefined"
224
+ });
225
+ } catch (streamError) {
226
+ debugLogger.error("OPENAI_STREAM_FATAL_ERROR", {
227
+ totalChunks: String(chunkCount),
228
+ errorCount: String(errorCount),
229
+ errorMessage: streamError instanceof Error ? streamError.message : String(streamError),
230
+ errorType: streamError instanceof Error ? streamError.constructor.name : typeof streamError
231
+ });
232
+ throw streamError;
233
+ }
234
+ return {
235
+ id,
236
+ created,
237
+ model,
238
+ object,
239
+ choices: [
240
+ {
241
+ index: 0,
242
+ message,
243
+ finish_reason: "stop",
244
+ logprobs: void 0
245
+ }
246
+ ],
247
+ usage
248
+ };
249
+ }
250
+ function convertOpenAIResponseToAnthropic(response, _tools) {
251
+ let contentBlocks = [];
252
+ const message = response.choices?.[0]?.message;
253
+ if (!message) {
254
+ return {
255
+ role: "assistant",
256
+ content: [],
257
+ stop_reason: response.choices?.[0]?.finish_reason,
258
+ type: "message",
259
+ usage: response.usage
260
+ };
261
+ }
262
+ if (message?.tool_calls) {
263
+ for (const toolCall of message.tool_calls) {
264
+ const tool = toolCall.function;
265
+ const toolName = tool?.name;
266
+ let toolArgs = {};
267
+ let parseError = null;
268
+ try {
269
+ toolArgs = tool?.arguments ? JSON.parse(tool.arguments) : {};
270
+ } catch (e) {
271
+ parseError = e instanceof Error ? e.message : String(e);
272
+ debugLogger.warn("TOOL_ARGUMENTS_PARSE_ERROR", {
273
+ toolName,
274
+ rawArguments: tool?.arguments?.substring(0, 200),
275
+ errorMessage: parseError
276
+ });
277
+ }
278
+ if (parseError && Object.keys(toolArgs).length === 0) {
279
+ debugLogger.error("TOOL_CALL_EMPTY_ARGUMENTS", {
280
+ toolName,
281
+ parseError,
282
+ suggestion: "Model may have sent malformed JSON. The tool call will likely fail validation."
283
+ });
284
+ }
285
+ contentBlocks.push({
286
+ type: "tool_use",
287
+ input: toolArgs,
288
+ name: toolName,
289
+ id: toolCall.id?.length > 0 ? toolCall.id : nanoid()
290
+ });
291
+ }
292
+ }
293
+ if (message.reasoning) {
294
+ contentBlocks.push({
295
+ type: "thinking",
296
+ thinking: message.reasoning,
297
+ signature: ""
298
+ });
299
+ }
300
+ if (message.reasoning_content) {
301
+ contentBlocks.push({
302
+ type: "thinking",
303
+ thinking: message.reasoning_content,
304
+ signature: ""
305
+ });
306
+ }
307
+ if (message.content) {
308
+ contentBlocks.push({
309
+ type: "text",
310
+ text: message?.content,
311
+ citations: []
312
+ });
313
+ }
314
+ const finalMessage = {
315
+ role: "assistant",
316
+ content: contentBlocks,
317
+ stop_reason: response.choices?.[0]?.finish_reason,
318
+ type: "message",
319
+ usage: response.usage
320
+ };
321
+ return finalMessage;
322
+ }
323
+ function getAssistantMessageFromError(error) {
324
+ if (error instanceof Error && error.message.includes("prompt is too long")) {
325
+ return createAssistantAPIErrorMessage(PROMPT_TOO_LONG_ERROR_MESSAGE);
326
+ }
327
+ if (error instanceof Error && error.message.includes("Your credit balance is too low")) {
328
+ return createAssistantAPIErrorMessage(CREDIT_BALANCE_TOO_LOW_ERROR_MESSAGE);
329
+ }
330
+ if (error instanceof Error && error.message.toLowerCase().includes("x-api-key")) {
331
+ return createAssistantAPIErrorMessage(INVALID_API_KEY_ERROR_MESSAGE);
332
+ }
333
+ if (error instanceof Error) {
334
+ if (process.env.NODE_ENV === "development") {
335
+ debugLogger.error("OPENAI_API_ERROR", {
336
+ message: error.message,
337
+ stack: error.stack
338
+ });
339
+ }
340
+ return createAssistantAPIErrorMessage(
341
+ `${API_ERROR_MESSAGE_PREFIX}: ${error.message}`
342
+ );
343
+ }
344
+ return createAssistantAPIErrorMessage(API_ERROR_MESSAGE_PREFIX);
345
+ }
346
+ async function queryOpenAI(messages, systemPrompt, maxThinkingTokens, tools, signal, options) {
347
+ const config = getGlobalConfig();
348
+ const modelManager = getModelManager();
349
+ const toolUseContext = options?.toolUseContext;
350
+ const modelProfile = options?.modelProfile || modelManager.getModel("main");
351
+ let model;
352
+ const currentRequest = getCurrentRequest();
353
+ debugLogger.api("MODEL_CONFIG_OPENAI", {
354
+ modelProfileFound: !!modelProfile,
355
+ modelProfileId: modelProfile?.modelName,
356
+ modelProfileName: modelProfile?.name,
357
+ modelProfileModelName: modelProfile?.modelName,
358
+ modelProfileProvider: modelProfile?.provider,
359
+ modelProfileBaseURL: modelProfile?.baseURL,
360
+ modelProfileApiKeyExists: !!modelProfile?.apiKey,
361
+ optionsModel: options?.model,
362
+ requestId: getCurrentRequest()?.id
363
+ });
364
+ if (modelProfile) {
365
+ model = modelProfile.modelName;
366
+ } else {
367
+ model = options?.model || modelProfile?.modelName || "";
368
+ }
369
+ if (options?.prependCLISysprompt) {
370
+ const [firstSyspromptBlock] = splitSysPromptPrefix(systemPrompt);
371
+ systemPrompt = [getCLISyspromptPrefix(), ...systemPrompt];
372
+ }
373
+ const system = splitSysPromptPrefix(systemPrompt).map(
374
+ (_) => ({
375
+ ...PROMPT_CACHING_ENABLED ? { cache_control: { type: "ephemeral" } } : {},
376
+ text: _,
377
+ type: "text"
378
+ })
379
+ );
380
+ const toolSchemas = await Promise.all(
381
+ tools.map(
382
+ async (_) => ({
383
+ type: "function",
384
+ function: {
385
+ name: _.name,
386
+ description: await getToolDescriptionAsync(_),
387
+ parameters: "inputJSONSchema" in _ && _.inputJSONSchema ? _.inputJSONSchema : zodToJsonSchema(_.inputSchema)
388
+ }
389
+ })
390
+ )
391
+ );
392
+ const openaiSystem = system.map(
393
+ (s) => ({
394
+ role: "system",
395
+ content: s.text
396
+ })
397
+ );
398
+ const openaiMessages = convertAnthropicMessagesToOpenAIMessages(messages);
399
+ const startIncludingRetries = Date.now();
400
+ logSystemPromptConstruction({
401
+ basePrompt: systemPrompt.join("\n"),
402
+ mintoContext: generateMintoContext() || "",
403
+ reminders: [],
404
+ finalPrompt: systemPrompt.join("\n")
405
+ });
406
+ let start = Date.now();
407
+ let attemptNumber = 0;
408
+ let response;
409
+ try {
410
+ response = await withRetry(
411
+ async (attempt) => {
412
+ attemptNumber = attempt;
413
+ start = Date.now();
414
+ const maxTokens = getMaxTokensFromProfile(modelProfile);
415
+ const isGPT5 = isGPT5Model(model);
416
+ const isReasoningModel = isGPT5 || model.startsWith("o3") || model.startsWith("o4-mini") || model === "o1" || model === "o1-mini" || model === "o1-preview";
417
+ const opts = {
418
+ model,
419
+ ...isGPT5 ? { max_completion_tokens: maxTokens } : { max_tokens: maxTokens },
420
+ messages: [...openaiSystem, ...openaiMessages],
421
+ // Reasoning models (GPT-5, o3, o4-mini) require temperature to be omitted
422
+ ...!isReasoningModel && { temperature: MAIN_QUERY_TEMPERATURE }
423
+ };
424
+ if (config.stream) {
425
+ ;
426
+ opts.stream = true;
427
+ opts.stream_options = {
428
+ include_usage: true
429
+ };
430
+ }
431
+ if (toolSchemas.length > 0) {
432
+ opts.tools = toolSchemas;
433
+ opts.tool_choice = "auto";
434
+ }
435
+ const reasoningEffort = await getReasoningEffort(modelProfile, messages);
436
+ if (reasoningEffort) {
437
+ opts.reasoning_effort = reasoningEffort;
438
+ }
439
+ if (modelProfile && modelProfile.modelName) {
440
+ debugLogger.api("USING_MODEL_PROFILE_PATH", {
441
+ modelProfileName: modelProfile.modelName,
442
+ modelName: modelProfile.modelName,
443
+ provider: modelProfile.provider,
444
+ baseURL: modelProfile.baseURL,
445
+ apiKeyExists: !!modelProfile.apiKey,
446
+ requestId: getCurrentRequest()?.id
447
+ });
448
+ const USE_NEW_ADAPTER_SYSTEM = process.env.USE_NEW_ADAPTERS !== "false";
449
+ if (USE_NEW_ADAPTER_SYSTEM) {
450
+ const adapter = ModelAdapterFactory.createAdapter(modelProfile);
451
+ const unifiedParams = {
452
+ messages: openaiMessages,
453
+ systemPrompt: openaiSystem.map((s) => s.content),
454
+ tools,
455
+ maxTokens: getMaxTokensFromProfile(modelProfile),
456
+ stream: config.stream,
457
+ reasoningEffort,
458
+ temperature: isGPT5Model(model) || model.startsWith("o3") || model.startsWith("o4-mini") ? void 0 : MAIN_QUERY_TEMPERATURE,
459
+ previousResponseId: toolUseContext?.responseState?.previousResponseId,
460
+ verbosity: "high"
461
+ // High verbosity for coding tasks
462
+ };
463
+ const request = adapter.createRequest(unifiedParams);
464
+ if (ModelAdapterFactory.shouldUseResponsesAPI(modelProfile)) {
465
+ const { callGPT5ResponsesAPI } = await import("../openai.js");
466
+ const response2 = await callGPT5ResponsesAPI(
467
+ modelProfile,
468
+ request,
469
+ signal
470
+ );
471
+ const unifiedResponse = adapter.parseResponse(response2);
472
+ const apiMessage = {
473
+ role: "assistant",
474
+ content: unifiedResponse.content,
475
+ tool_calls: unifiedResponse.toolCalls,
476
+ usage: {
477
+ prompt_tokens: unifiedResponse.usage.promptTokens,
478
+ completion_tokens: unifiedResponse.usage.completionTokens
479
+ }
480
+ };
481
+ const assistantMsg = {
482
+ type: "assistant",
483
+ message: apiMessage,
484
+ costUSD: 0,
485
+ // Will be calculated later
486
+ durationMs: Date.now() - start,
487
+ uuid: `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
488
+ responseId: unifiedResponse.responseId
489
+ // For state management
490
+ };
491
+ return assistantMsg;
492
+ } else {
493
+ const s = await getCompletionWithProfile(
494
+ modelProfile,
495
+ request,
496
+ 0,
497
+ 10,
498
+ signal
499
+ );
500
+ let finalResponse;
501
+ if (config.stream) {
502
+ finalResponse = await handleMessageStream(
503
+ s,
504
+ signal
505
+ );
506
+ } else {
507
+ finalResponse = s;
508
+ }
509
+ const r = convertOpenAIResponseToAnthropic(finalResponse, tools);
510
+ return r;
511
+ }
512
+ } else {
513
+ const completionFunction = isGPT5Model(modelProfile.modelName) ? getGPT5CompletionWithProfile : getCompletionWithProfile;
514
+ const s = await completionFunction(
515
+ modelProfile,
516
+ opts,
517
+ 0,
518
+ 10,
519
+ signal
520
+ );
521
+ let finalResponse;
522
+ if (opts.stream) {
523
+ finalResponse = await handleMessageStream(
524
+ s,
525
+ signal
526
+ );
527
+ } else {
528
+ finalResponse = s;
529
+ }
530
+ const r = convertOpenAIResponseToAnthropic(finalResponse, tools);
531
+ return r;
532
+ }
533
+ } else {
534
+ const errorDetails = {
535
+ modelProfileExists: !!modelProfile,
536
+ modelProfileId: modelProfile?.modelName,
537
+ modelNameExists: !!modelProfile?.modelName,
538
+ requestedModel: model,
539
+ requestId: getCurrentRequest()?.id
540
+ };
541
+ debugLogger.error("NO_VALID_MODEL_PROFILE", errorDetails);
542
+ throw new Error(
543
+ `No valid ModelProfile available for model: ${model}. Please configure model through /model command. Debug: ${JSON.stringify(errorDetails)}`
544
+ );
545
+ }
546
+ },
547
+ {
548
+ signal,
549
+ onRetry: toolUseContext?.agentId ? ({ attempt, maxRetries, error, delayMs }) => {
550
+ addRetryEventToTranscript(toolUseContext.agentId, {
551
+ attempt,
552
+ maxRetries,
553
+ errorMessage: error.message,
554
+ delayMs
555
+ });
556
+ } : void 0
557
+ }
558
+ );
559
+ } catch (error) {
560
+ logError(error);
561
+ return getAssistantMessageFromError(error);
562
+ }
563
+ const durationMs = Date.now() - start;
564
+ const durationMsIncludingRetries = Date.now() - startIncludingRetries;
565
+ const inputTokens = response.usage?.prompt_tokens ?? 0;
566
+ const outputTokens = response.usage?.completion_tokens ?? 0;
567
+ const cacheReadInputTokens = response.usage?.prompt_token_details?.cached_tokens ?? 0;
568
+ const cacheCreationInputTokens = response.usage?.prompt_token_details?.cached_tokens ?? 0;
569
+ const inputCostPerMillion = getModelInputTokenCostUSD(model) * 1e6;
570
+ const outputCostPerMillion = getModelOutputTokenCostUSD(model) * 1e6;
571
+ const costUSD = inputTokens / 1e6 * (inputCostPerMillion || SONNET_COST_PER_MILLION_INPUT_TOKENS) + outputTokens / 1e6 * (outputCostPerMillion || SONNET_COST_PER_MILLION_OUTPUT_TOKENS) + cacheReadInputTokens / 1e6 * (inputCostPerMillion || SONNET_COST_PER_MILLION_INPUT_TOKENS) * 0.1 + cacheCreationInputTokens / 1e6 * (inputCostPerMillion || SONNET_COST_PER_MILLION_INPUT_TOKENS);
572
+ addToTotalCost(costUSD, durationMsIncludingRetries);
573
+ recordTokenUsage(
574
+ {
575
+ inputTokens,
576
+ outputTokens,
577
+ cacheCreationTokens: cacheCreationInputTokens,
578
+ cacheReadTokens: cacheReadInputTokens
579
+ },
580
+ costUSD,
581
+ model,
582
+ toolUseContext ? {
583
+ agentId: toolUseContext.agentId,
584
+ toolUseId: toolUseContext.toolUseId,
585
+ model
586
+ } : void 0
587
+ );
588
+ logLLMInteraction({
589
+ systemPrompt: systemPrompt.join("\n"),
590
+ messages: [...openaiSystem, ...openaiMessages],
591
+ response,
592
+ usage: {
593
+ inputTokens,
594
+ outputTokens
595
+ },
596
+ timing: {
597
+ start,
598
+ end: Date.now()
599
+ },
600
+ apiFormat: "openai"
601
+ });
602
+ return {
603
+ message: {
604
+ ...response,
605
+ content: normalizeContentFromAPI(response.content),
606
+ usage: {
607
+ input_tokens: inputTokens,
608
+ output_tokens: outputTokens,
609
+ cache_read_input_tokens: cacheReadInputTokens,
610
+ cache_creation_input_tokens: 0
611
+ }
612
+ },
613
+ costUSD,
614
+ durationMs,
615
+ type: "assistant",
616
+ uuid: randomUUID()
617
+ };
618
+ }
619
+ export {
620
+ queryOpenAI
621
+ };
622
+ //# sourceMappingURL=openaiProvider.js.map