@within-7/minto 0.0.5-dev.1

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 (701) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +1097 -0
  3. package/README.zh-CN.md +1097 -0
  4. package/cli.js +59 -0
  5. package/dist/Tool.js +1 -0
  6. package/dist/Tool.js.map +7 -0
  7. package/dist/commands/agents.js +2086 -0
  8. package/dist/commands/agents.js.map +7 -0
  9. package/dist/commands/approvedTools.js +36 -0
  10. package/dist/commands/approvedTools.js.map +7 -0
  11. package/dist/commands/bug.js +21 -0
  12. package/dist/commands/bug.js.map +7 -0
  13. package/dist/commands/build.js +74 -0
  14. package/dist/commands/build.js.map +7 -0
  15. package/dist/commands/clear.js +37 -0
  16. package/dist/commands/clear.js.map +7 -0
  17. package/dist/commands/compact.js +82 -0
  18. package/dist/commands/compact.js.map +7 -0
  19. package/dist/commands/compression.js +57 -0
  20. package/dist/commands/compression.js.map +7 -0
  21. package/dist/commands/config.js +20 -0
  22. package/dist/commands/config.js.map +7 -0
  23. package/dist/commands/cost.js +19 -0
  24. package/dist/commands/cost.js.map +7 -0
  25. package/dist/commands/ctx_viz.js +152 -0
  26. package/dist/commands/ctx_viz.js.map +7 -0
  27. package/dist/commands/doctor.js +25 -0
  28. package/dist/commands/doctor.js.map +7 -0
  29. package/dist/commands/help.js +20 -0
  30. package/dist/commands/help.js.map +7 -0
  31. package/dist/commands/init.js +38 -0
  32. package/dist/commands/init.js.map +7 -0
  33. package/dist/commands/listen.js +37 -0
  34. package/dist/commands/listen.js.map +7 -0
  35. package/dist/commands/login.js +37 -0
  36. package/dist/commands/login.js.map +7 -0
  37. package/dist/commands/logout.js +33 -0
  38. package/dist/commands/logout.js.map +7 -0
  39. package/dist/commands/mcp-interactive.js +267 -0
  40. package/dist/commands/mcp-interactive.js.map +7 -0
  41. package/dist/commands/mcp.js +40 -0
  42. package/dist/commands/mcp.js.map +7 -0
  43. package/dist/commands/mcp_refresh.js +40 -0
  44. package/dist/commands/mcp_refresh.js.map +7 -0
  45. package/dist/commands/model.js +41 -0
  46. package/dist/commands/model.js.map +7 -0
  47. package/dist/commands/modelstatus.js +21 -0
  48. package/dist/commands/modelstatus.js.map +7 -0
  49. package/dist/commands/onboarding.js +36 -0
  50. package/dist/commands/onboarding.js.map +7 -0
  51. package/dist/commands/plugin/AddMarketplaceForm.js +62 -0
  52. package/dist/commands/plugin/AddMarketplaceForm.js.map +7 -0
  53. package/dist/commands/plugin/ConfirmDialog.js +71 -0
  54. package/dist/commands/plugin/ConfirmDialog.js.map +7 -0
  55. package/dist/commands/plugin/ErrorView.js +33 -0
  56. package/dist/commands/plugin/ErrorView.js.map +7 -0
  57. package/dist/commands/plugin/InstalledPluginsByMarketplace.js +135 -0
  58. package/dist/commands/plugin/InstalledPluginsByMarketplace.js.map +7 -0
  59. package/dist/commands/plugin/InstalledPluginsManager.js +99 -0
  60. package/dist/commands/plugin/InstalledPluginsManager.js.map +7 -0
  61. package/dist/commands/plugin/LoadingView.js +14 -0
  62. package/dist/commands/plugin/LoadingView.js.map +7 -0
  63. package/dist/commands/plugin/MainMenu.js +57 -0
  64. package/dist/commands/plugin/MainMenu.js.map +7 -0
  65. package/dist/commands/plugin/MarketplaceManager.js +155 -0
  66. package/dist/commands/plugin/MarketplaceManager.js.map +7 -0
  67. package/dist/commands/plugin/MarketplaceSelector.js +119 -0
  68. package/dist/commands/plugin/MarketplaceSelector.js.map +7 -0
  69. package/dist/commands/plugin/PlaceholderScreen.js +16 -0
  70. package/dist/commands/plugin/PlaceholderScreen.js.map +7 -0
  71. package/dist/commands/plugin/PluginBrowser.js +180 -0
  72. package/dist/commands/plugin/PluginBrowser.js.map +7 -0
  73. package/dist/commands/plugin/PluginDetailsInstall.js +152 -0
  74. package/dist/commands/plugin/PluginDetailsInstall.js.map +7 -0
  75. package/dist/commands/plugin/PluginDetailsManage.js +200 -0
  76. package/dist/commands/plugin/PluginDetailsManage.js.map +7 -0
  77. package/dist/commands/plugin/components.js +16 -0
  78. package/dist/commands/plugin/components.js.map +7 -0
  79. package/dist/commands/plugin/example-usage.js +63 -0
  80. package/dist/commands/plugin/example-usage.js.map +7 -0
  81. package/dist/commands/plugin/types.js +1 -0
  82. package/dist/commands/plugin/types.js.map +7 -0
  83. package/dist/commands/plugin/utils.js +77 -0
  84. package/dist/commands/plugin/utils.js.map +7 -0
  85. package/dist/commands/plugin-interactive.js +446 -0
  86. package/dist/commands/plugin-interactive.js.map +7 -0
  87. package/dist/commands/plugin.js +523 -0
  88. package/dist/commands/plugin.js.map +7 -0
  89. package/dist/commands/pr_comments.js +61 -0
  90. package/dist/commands/pr_comments.js.map +7 -0
  91. package/dist/commands/quit.js +16 -0
  92. package/dist/commands/quit.js.map +7 -0
  93. package/dist/commands/refreshCommands.js +43 -0
  94. package/dist/commands/refreshCommands.js.map +7 -0
  95. package/dist/commands/release-notes.js +30 -0
  96. package/dist/commands/release-notes.js.map +7 -0
  97. package/dist/commands/resume.js +35 -0
  98. package/dist/commands/resume.js.map +7 -0
  99. package/dist/commands/review.js +51 -0
  100. package/dist/commands/review.js.map +7 -0
  101. package/dist/commands/terminalSetup.js +164 -0
  102. package/dist/commands/terminalSetup.js.map +7 -0
  103. package/dist/commands.js +104 -0
  104. package/dist/commands.js.map +7 -0
  105. package/dist/components/AgentResponseBlock.js +41 -0
  106. package/dist/components/AgentResponseBlock.js.map +7 -0
  107. package/dist/components/AgentThinkingBlock.js +40 -0
  108. package/dist/components/AgentThinkingBlock.js.map +7 -0
  109. package/dist/components/AsciiLogo.js +19 -0
  110. package/dist/components/AsciiLogo.js.map +7 -0
  111. package/dist/components/BackgroundTasksPanel.js +124 -0
  112. package/dist/components/BackgroundTasksPanel.js.map +7 -0
  113. package/dist/components/Bug.js +147 -0
  114. package/dist/components/Bug.js.map +7 -0
  115. package/dist/components/Config.js +166 -0
  116. package/dist/components/Config.js.map +7 -0
  117. package/dist/components/ConsoleOAuthFlow.js +178 -0
  118. package/dist/components/ConsoleOAuthFlow.js.map +7 -0
  119. package/dist/components/Cost.js +13 -0
  120. package/dist/components/Cost.js.map +7 -0
  121. package/dist/components/CostThresholdDialog.js +38 -0
  122. package/dist/components/CostThresholdDialog.js.map +7 -0
  123. package/dist/components/CustomSelect/option-map.js +32 -0
  124. package/dist/components/CustomSelect/option-map.js.map +7 -0
  125. package/dist/components/CustomSelect/select-option.js +34 -0
  126. package/dist/components/CustomSelect/select-option.js.map +7 -0
  127. package/dist/components/CustomSelect/select.js +64 -0
  128. package/dist/components/CustomSelect/select.js.map +7 -0
  129. package/dist/components/CustomSelect/theme.js +1 -0
  130. package/dist/components/CustomSelect/theme.js.map +7 -0
  131. package/dist/components/CustomSelect/use-select-state.js +220 -0
  132. package/dist/components/CustomSelect/use-select-state.js.map +7 -0
  133. package/dist/components/CustomSelect/use-select.js +21 -0
  134. package/dist/components/CustomSelect/use-select.js.map +7 -0
  135. package/dist/components/FallbackToolUseRejectedMessage.js +11 -0
  136. package/dist/components/FallbackToolUseRejectedMessage.js.map +7 -0
  137. package/dist/components/FileEditToolUpdatedMessage.js +32 -0
  138. package/dist/components/FileEditToolUpdatedMessage.js.map +7 -0
  139. package/dist/components/HeaderBar.js +57 -0
  140. package/dist/components/HeaderBar.js.map +7 -0
  141. package/dist/components/Help.js +46 -0
  142. package/dist/components/Help.js.map +7 -0
  143. package/dist/components/HighlightedCode.js +30 -0
  144. package/dist/components/HighlightedCode.js.map +7 -0
  145. package/dist/components/HistorySearchOverlay.js +48 -0
  146. package/dist/components/HistorySearchOverlay.js.map +7 -0
  147. package/dist/components/InteractionRoundBlock.js +56 -0
  148. package/dist/components/InteractionRoundBlock.js.map +7 -0
  149. package/dist/components/InvalidConfigDialog.js +83 -0
  150. package/dist/components/InvalidConfigDialog.js.map +7 -0
  151. package/dist/components/Link.js +18 -0
  152. package/dist/components/Link.js.map +7 -0
  153. package/dist/components/LogSelector.js +50 -0
  154. package/dist/components/LogSelector.js.map +7 -0
  155. package/dist/components/Logo.js +96 -0
  156. package/dist/components/Logo.js.map +7 -0
  157. package/dist/components/MCPServerApprovalDialog.js +79 -0
  158. package/dist/components/MCPServerApprovalDialog.js.map +7 -0
  159. package/dist/components/MCPServerDialogCopy.js +11 -0
  160. package/dist/components/MCPServerDialogCopy.js.map +7 -0
  161. package/dist/components/MCPServerMultiselectDialog.js +80 -0
  162. package/dist/components/MCPServerMultiselectDialog.js.map +7 -0
  163. package/dist/components/Message.js +146 -0
  164. package/dist/components/Message.js.map +7 -0
  165. package/dist/components/MessageResponse.js +9 -0
  166. package/dist/components/MessageResponse.js.map +7 -0
  167. package/dist/components/MessageSelector.js +125 -0
  168. package/dist/components/MessageSelector.js.map +7 -0
  169. package/dist/components/ModeIndicator.js +38 -0
  170. package/dist/components/ModeIndicator.js.map +7 -0
  171. package/dist/components/ModelConfig.js +208 -0
  172. package/dist/components/ModelConfig.js.map +7 -0
  173. package/dist/components/ModelListManager.js +140 -0
  174. package/dist/components/ModelListManager.js.map +7 -0
  175. package/dist/components/ModelSelector.js +2062 -0
  176. package/dist/components/ModelSelector.js.map +7 -0
  177. package/dist/components/ModelStatusDisplay.js +87 -0
  178. package/dist/components/ModelStatusDisplay.js.map +7 -0
  179. package/dist/components/Onboarding.js +153 -0
  180. package/dist/components/Onboarding.js.map +7 -0
  181. package/dist/components/PressEnterToContinue.js +10 -0
  182. package/dist/components/PressEnterToContinue.js.map +7 -0
  183. package/dist/components/ProjectOnboarding.js +99 -0
  184. package/dist/components/ProjectOnboarding.js.map +7 -0
  185. package/dist/components/PromptInput.js +755 -0
  186. package/dist/components/PromptInput.js.map +7 -0
  187. package/dist/components/QuitSummary.js +81 -0
  188. package/dist/components/QuitSummary.js.map +7 -0
  189. package/dist/components/SentryErrorBoundary.js +27 -0
  190. package/dist/components/SentryErrorBoundary.js.map +7 -0
  191. package/dist/components/Spinner.js +101 -0
  192. package/dist/components/Spinner.js.map +7 -0
  193. package/dist/components/SpinnerSymbol.js +78 -0
  194. package/dist/components/SpinnerSymbol.js.map +7 -0
  195. package/dist/components/StreamingBashOutput.js +70 -0
  196. package/dist/components/StreamingBashOutput.js.map +7 -0
  197. package/dist/components/StructuredDiff.js +148 -0
  198. package/dist/components/StructuredDiff.js.map +7 -0
  199. package/dist/components/SubagentBlock.js +157 -0
  200. package/dist/components/SubagentBlock.js.map +7 -0
  201. package/dist/components/SubagentManager.js +65 -0
  202. package/dist/components/SubagentManager.js.map +7 -0
  203. package/dist/components/SubagentProgress.js +109 -0
  204. package/dist/components/SubagentProgress.js.map +7 -0
  205. package/dist/components/SubagentStatusMarker.js +37 -0
  206. package/dist/components/SubagentStatusMarker.js.map +7 -0
  207. package/dist/components/TaskCard.js +170 -0
  208. package/dist/components/TaskCard.js.map +7 -0
  209. package/dist/components/TextInput.js +100 -0
  210. package/dist/components/TextInput.js.map +7 -0
  211. package/dist/components/TimelineRenderer.js +31 -0
  212. package/dist/components/TimelineRenderer.js.map +7 -0
  213. package/dist/components/TodoChangeBlock.js +29 -0
  214. package/dist/components/TodoChangeBlock.js.map +7 -0
  215. package/dist/components/TodoChangeLine.js +22 -0
  216. package/dist/components/TodoChangeLine.js.map +7 -0
  217. package/dist/components/TodoItem.js +35 -0
  218. package/dist/components/TodoItem.js.map +7 -0
  219. package/dist/components/TodoPanel.js +55 -0
  220. package/dist/components/TodoPanel.js.map +7 -0
  221. package/dist/components/TokenWarning.js +19 -0
  222. package/dist/components/TokenWarning.js.map +7 -0
  223. package/dist/components/ToolExecutionBlock.js +18 -0
  224. package/dist/components/ToolExecutionBlock.js.map +7 -0
  225. package/dist/components/ToolUseLoader.js +24 -0
  226. package/dist/components/ToolUseLoader.js.map +7 -0
  227. package/dist/components/TrustDialog.js +71 -0
  228. package/dist/components/TrustDialog.js.map +7 -0
  229. package/dist/components/UserQueryBlock.js +12 -0
  230. package/dist/components/UserQueryBlock.js.map +7 -0
  231. package/dist/components/binary-feedback/BinaryFeedback.js +50 -0
  232. package/dist/components/binary-feedback/BinaryFeedback.js.map +7 -0
  233. package/dist/components/binary-feedback/BinaryFeedbackOption.js +94 -0
  234. package/dist/components/binary-feedback/BinaryFeedbackOption.js.map +7 -0
  235. package/dist/components/binary-feedback/BinaryFeedbackView.js +139 -0
  236. package/dist/components/binary-feedback/BinaryFeedbackView.js.map +7 -0
  237. package/dist/components/binary-feedback/utils.js +108 -0
  238. package/dist/components/binary-feedback/utils.js.map +7 -0
  239. package/dist/components/messages/AssistantBashOutputMessage.js +23 -0
  240. package/dist/components/messages/AssistantBashOutputMessage.js.map +7 -0
  241. package/dist/components/messages/AssistantLocalCommandOutputMessage.js +36 -0
  242. package/dist/components/messages/AssistantLocalCommandOutputMessage.js.map +7 -0
  243. package/dist/components/messages/AssistantRedactedThinkingMessage.js +12 -0
  244. package/dist/components/messages/AssistantRedactedThinkingMessage.js.map +7 -0
  245. package/dist/components/messages/AssistantTextMessage.js +78 -0
  246. package/dist/components/messages/AssistantTextMessage.js.map +7 -0
  247. package/dist/components/messages/AssistantThinkingMessage.js +27 -0
  248. package/dist/components/messages/AssistantThinkingMessage.js.map +7 -0
  249. package/dist/components/messages/AssistantToolUseMessage.js +91 -0
  250. package/dist/components/messages/AssistantToolUseMessage.js.map +7 -0
  251. package/dist/components/messages/TaskProgressMessage.js +11 -0
  252. package/dist/components/messages/TaskProgressMessage.js.map +7 -0
  253. package/dist/components/messages/TaskToolMessage.js +39 -0
  254. package/dist/components/messages/TaskToolMessage.js.map +7 -0
  255. package/dist/components/messages/UserBashInputMessage.js +18 -0
  256. package/dist/components/messages/UserBashInputMessage.js.map +7 -0
  257. package/dist/components/messages/UserCommandMessage.js +20 -0
  258. package/dist/components/messages/UserCommandMessage.js.map +7 -0
  259. package/dist/components/messages/UserKodingInputMessage.js +18 -0
  260. package/dist/components/messages/UserKodingInputMessage.js.map +7 -0
  261. package/dist/components/messages/UserPromptMessage.js +20 -0
  262. package/dist/components/messages/UserPromptMessage.js.map +7 -0
  263. package/dist/components/messages/UserTextMessage.js +25 -0
  264. package/dist/components/messages/UserTextMessage.js.map +7 -0
  265. package/dist/components/messages/UserToolResultMessage/UserToolCanceledMessage.js +10 -0
  266. package/dist/components/messages/UserToolResultMessage/UserToolCanceledMessage.js.map +7 -0
  267. package/dist/components/messages/UserToolResultMessage/UserToolErrorMessage.js +15 -0
  268. package/dist/components/messages/UserToolResultMessage/UserToolErrorMessage.js.map +7 -0
  269. package/dist/components/messages/UserToolResultMessage/UserToolRejectMessage.js +25 -0
  270. package/dist/components/messages/UserToolResultMessage/UserToolRejectMessage.js.map +7 -0
  271. package/dist/components/messages/UserToolResultMessage/UserToolResultMessage.js +47 -0
  272. package/dist/components/messages/UserToolResultMessage/UserToolResultMessage.js.map +7 -0
  273. package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js +23 -0
  274. package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js.map +7 -0
  275. package/dist/components/messages/UserToolResultMessage/utils.js +50 -0
  276. package/dist/components/messages/UserToolResultMessage/utils.js.map +7 -0
  277. package/dist/components/permissions/BashPermissionRequest/BashPermissionRequest.js +112 -0
  278. package/dist/components/permissions/BashPermissionRequest/BashPermissionRequest.js.map +7 -0
  279. package/dist/components/permissions/FallbackPermissionRequest.js +131 -0
  280. package/dist/components/permissions/FallbackPermissionRequest.js.map +7 -0
  281. package/dist/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.js +159 -0
  282. package/dist/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.js.map +7 -0
  283. package/dist/components/permissions/FileEditPermissionRequest/FileEditToolDiff.js +58 -0
  284. package/dist/components/permissions/FileEditPermissionRequest/FileEditToolDiff.js.map +7 -0
  285. package/dist/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.js +153 -0
  286. package/dist/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.js.map +7 -0
  287. package/dist/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.js +70 -0
  288. package/dist/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.js.map +7 -0
  289. package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js +212 -0
  290. package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js.map +7 -0
  291. package/dist/components/permissions/PermissionRequest.js +70 -0
  292. package/dist/components/permissions/PermissionRequest.js.map +7 -0
  293. package/dist/components/permissions/PermissionRequestTitle.js +52 -0
  294. package/dist/components/permissions/PermissionRequestTitle.js.map +7 -0
  295. package/dist/components/permissions/hooks.js +23 -0
  296. package/dist/components/permissions/hooks.js.map +7 -0
  297. package/dist/components/permissions/toolUseOptions.js +46 -0
  298. package/dist/components/permissions/toolUseOptions.js.map +7 -0
  299. package/dist/components/permissions/utils.js +21 -0
  300. package/dist/components/permissions/utils.js.map +7 -0
  301. package/dist/constants/claude-asterisk-ascii-art.js +242 -0
  302. package/dist/constants/claude-asterisk-ascii-art.js.map +7 -0
  303. package/dist/constants/colors.js +126 -0
  304. package/dist/constants/colors.js.map +7 -0
  305. package/dist/constants/compressionPrompts.js +73 -0
  306. package/dist/constants/compressionPrompts.js.map +7 -0
  307. package/dist/constants/figures.js +6 -0
  308. package/dist/constants/figures.js.map +7 -0
  309. package/dist/constants/macros.js +11 -0
  310. package/dist/constants/macros.js.map +7 -0
  311. package/dist/constants/modelCapabilities.js +154 -0
  312. package/dist/constants/modelCapabilities.js.map +7 -0
  313. package/dist/constants/models.js +1034 -0
  314. package/dist/constants/models.js.map +7 -0
  315. package/dist/constants/oauth.js +18 -0
  316. package/dist/constants/oauth.js.map +7 -0
  317. package/dist/constants/product.js +26 -0
  318. package/dist/constants/product.js.map +7 -0
  319. package/dist/constants/prompts.js +168 -0
  320. package/dist/constants/prompts.js.map +7 -0
  321. package/dist/constants/releaseNotes.js +9 -0
  322. package/dist/constants/releaseNotes.js.map +7 -0
  323. package/dist/constants/symbols.js +50 -0
  324. package/dist/constants/symbols.js.map +7 -0
  325. package/dist/context/PermissionContext.js +111 -0
  326. package/dist/context/PermissionContext.js.map +7 -0
  327. package/dist/context.js +278 -0
  328. package/dist/context.js.map +7 -0
  329. package/dist/cost-tracker.js +76 -0
  330. package/dist/cost-tracker.js.map +7 -0
  331. package/dist/entrypoints/cli-wrapper.js +61 -0
  332. package/dist/entrypoints/cli-wrapper.js.map +7 -0
  333. package/dist/entrypoints/cli.js +1115 -0
  334. package/dist/entrypoints/cli.js.map +7 -0
  335. package/dist/entrypoints/mcp.js +150 -0
  336. package/dist/entrypoints/mcp.js.map +7 -0
  337. package/dist/history.js +25 -0
  338. package/dist/history.js.map +7 -0
  339. package/dist/hooks/useApiKeyVerification.js +12 -0
  340. package/dist/hooks/useApiKeyVerification.js.map +7 -0
  341. package/dist/hooks/useArrowKeyHistory.js +50 -0
  342. package/dist/hooks/useArrowKeyHistory.js.map +7 -0
  343. package/dist/hooks/useCanUseTool.js +87 -0
  344. package/dist/hooks/useCanUseTool.js.map +7 -0
  345. package/dist/hooks/useCancelRequest.js +28 -0
  346. package/dist/hooks/useCancelRequest.js.map +7 -0
  347. package/dist/hooks/useDoublePress.js +31 -0
  348. package/dist/hooks/useDoublePress.js.map +7 -0
  349. package/dist/hooks/useExitOnCtrlCD.js +26 -0
  350. package/dist/hooks/useExitOnCtrlCD.js.map +7 -0
  351. package/dist/hooks/useHistorySearch.js +62 -0
  352. package/dist/hooks/useHistorySearch.js.map +7 -0
  353. package/dist/hooks/useInterval.js +18 -0
  354. package/dist/hooks/useInterval.js.map +7 -0
  355. package/dist/hooks/useLogMessages.js +14 -0
  356. package/dist/hooks/useLogMessages.js.map +7 -0
  357. package/dist/hooks/useLogStartupTime.js +10 -0
  358. package/dist/hooks/useLogStartupTime.js.map +7 -0
  359. package/dist/hooks/useNotifyAfterTimeout.js +42 -0
  360. package/dist/hooks/useNotifyAfterTimeout.js.map +7 -0
  361. package/dist/hooks/usePermissionRequestLogging.js +23 -0
  362. package/dist/hooks/usePermissionRequestLogging.js.map +7 -0
  363. package/dist/hooks/useTerminalSize.js +38 -0
  364. package/dist/hooks/useTerminalSize.js.map +7 -0
  365. package/dist/hooks/useTextInput.js +252 -0
  366. package/dist/hooks/useTextInput.js.map +7 -0
  367. package/dist/hooks/useUnifiedCompletion.js +929 -0
  368. package/dist/hooks/useUnifiedCompletion.js.map +7 -0
  369. package/dist/index.js +5 -0
  370. package/dist/index.js.map +7 -0
  371. package/dist/messages.js +33 -0
  372. package/dist/messages.js.map +7 -0
  373. package/dist/package.json +4 -0
  374. package/dist/permissions.js +194 -0
  375. package/dist/permissions.js.map +7 -0
  376. package/dist/query.js +499 -0
  377. package/dist/query.js.map +7 -0
  378. package/dist/screens/Doctor.js +22 -0
  379. package/dist/screens/Doctor.js.map +7 -0
  380. package/dist/screens/LogList.js +55 -0
  381. package/dist/screens/LogList.js.map +7 -0
  382. package/dist/screens/REPL.js +671 -0
  383. package/dist/screens/REPL.js.map +7 -0
  384. package/dist/screens/ResumeConversation.js +56 -0
  385. package/dist/screens/ResumeConversation.js.map +7 -0
  386. package/dist/services/adapters/base.js +29 -0
  387. package/dist/services/adapters/base.js.map +7 -0
  388. package/dist/services/adapters/chatCompletions.js +69 -0
  389. package/dist/services/adapters/chatCompletions.js.map +7 -0
  390. package/dist/services/adapters/responsesAPI.js +126 -0
  391. package/dist/services/adapters/responsesAPI.js.map +7 -0
  392. package/dist/services/claude.js +1573 -0
  393. package/dist/services/claude.js.map +7 -0
  394. package/dist/services/compressionService.js +210 -0
  395. package/dist/services/compressionService.js.map +7 -0
  396. package/dist/services/customCommands.js +437 -0
  397. package/dist/services/customCommands.js.map +7 -0
  398. package/dist/services/fileFreshness.js +275 -0
  399. package/dist/services/fileFreshness.js.map +7 -0
  400. package/dist/services/gpt5ConnectionTest.js +248 -0
  401. package/dist/services/gpt5ConnectionTest.js.map +7 -0
  402. package/dist/services/hookExecutor.js +276 -0
  403. package/dist/services/hookExecutor.js.map +7 -0
  404. package/dist/services/mainAgentCompressor.js +84 -0
  405. package/dist/services/mainAgentCompressor.js.map +7 -0
  406. package/dist/services/mcpClient.js +449 -0
  407. package/dist/services/mcpClient.js.map +7 -0
  408. package/dist/services/mcpServerApproval.js +55 -0
  409. package/dist/services/mcpServerApproval.js.map +7 -0
  410. package/dist/services/mentionProcessor.js +201 -0
  411. package/dist/services/mentionProcessor.js.map +7 -0
  412. package/dist/services/modelAdapterFactory.js +47 -0
  413. package/dist/services/modelAdapterFactory.js.map +7 -0
  414. package/dist/services/notifier.js +35 -0
  415. package/dist/services/notifier.js.map +7 -0
  416. package/dist/services/oauth.js +247 -0
  417. package/dist/services/oauth.js.map +7 -0
  418. package/dist/services/openai.js +995 -0
  419. package/dist/services/openai.js.map +7 -0
  420. package/dist/services/responseStateManager.js +68 -0
  421. package/dist/services/responseStateManager.js.map +7 -0
  422. package/dist/services/sentry.js +9 -0
  423. package/dist/services/sentry.js.map +7 -0
  424. package/dist/services/subagentAbortManager.js +95 -0
  425. package/dist/services/subagentAbortManager.js.map +7 -0
  426. package/dist/services/subagentCompressor.js +146 -0
  427. package/dist/services/subagentCompressor.js.map +7 -0
  428. package/dist/services/systemReminder.js +335 -0
  429. package/dist/services/systemReminder.js.map +7 -0
  430. package/dist/services/vcr.js +133 -0
  431. package/dist/services/vcr.js.map +7 -0
  432. package/dist/tools/ArchitectTool/ArchitectTool.js +119 -0
  433. package/dist/tools/ArchitectTool/ArchitectTool.js.map +7 -0
  434. package/dist/tools/ArchitectTool/prompt.js +18 -0
  435. package/dist/tools/ArchitectTool/prompt.js.map +7 -0
  436. package/dist/tools/AskExpertModelTool/AskExpertModelTool.js +423 -0
  437. package/dist/tools/AskExpertModelTool/AskExpertModelTool.js.map +7 -0
  438. package/dist/tools/BashOutputTool/BashOutputTool.js +120 -0
  439. package/dist/tools/BashOutputTool/BashOutputTool.js.map +7 -0
  440. package/dist/tools/BashOutputTool/BashOutputToolResultMessage.js +11 -0
  441. package/dist/tools/BashOutputTool/BashOutputToolResultMessage.js.map +7 -0
  442. package/dist/tools/BashOutputTool/prompt.js +13 -0
  443. package/dist/tools/BashOutputTool/prompt.js.map +7 -0
  444. package/dist/tools/BashTool/BashTool.js +209 -0
  445. package/dist/tools/BashTool/BashTool.js.map +7 -0
  446. package/dist/tools/BashTool/BashToolResultMessage.js +21 -0
  447. package/dist/tools/BashTool/BashToolResultMessage.js.map +7 -0
  448. package/dist/tools/BashTool/OutputLine.js +30 -0
  449. package/dist/tools/BashTool/OutputLine.js.map +7 -0
  450. package/dist/tools/BashTool/prompt.js +180 -0
  451. package/dist/tools/BashTool/prompt.js.map +7 -0
  452. package/dist/tools/BashTool/utils.js +51 -0
  453. package/dist/tools/BashTool/utils.js.map +7 -0
  454. package/dist/tools/FileEditTool/FileEditTool.js +226 -0
  455. package/dist/tools/FileEditTool/FileEditTool.js.map +7 -0
  456. package/dist/tools/FileEditTool/prompt.js +54 -0
  457. package/dist/tools/FileEditTool/prompt.js.map +7 -0
  458. package/dist/tools/FileEditTool/utils.js +42 -0
  459. package/dist/tools/FileEditTool/utils.js.map +7 -0
  460. package/dist/tools/FileReadTool/FileReadTool.js +272 -0
  461. package/dist/tools/FileReadTool/FileReadTool.js.map +7 -0
  462. package/dist/tools/FileReadTool/prompt.js +10 -0
  463. package/dist/tools/FileReadTool/prompt.js.map +7 -0
  464. package/dist/tools/FileWriteTool/FileWriteTool.js +202 -0
  465. package/dist/tools/FileWriteTool/FileWriteTool.js.map +7 -0
  466. package/dist/tools/FileWriteTool/prompt.js +14 -0
  467. package/dist/tools/FileWriteTool/prompt.js.map +7 -0
  468. package/dist/tools/GlobTool/GlobTool.js +88 -0
  469. package/dist/tools/GlobTool/GlobTool.js.map +7 -0
  470. package/dist/tools/GlobTool/prompt.js +12 -0
  471. package/dist/tools/GlobTool/prompt.js.map +7 -0
  472. package/dist/tools/GrepTool/GrepTool.js +107 -0
  473. package/dist/tools/GrepTool/GrepTool.js.map +7 -0
  474. package/dist/tools/GrepTool/prompt.js +15 -0
  475. package/dist/tools/GrepTool/prompt.js.map +7 -0
  476. package/dist/tools/KillShellTool/KillShellTool.js +92 -0
  477. package/dist/tools/KillShellTool/KillShellTool.js.map +7 -0
  478. package/dist/tools/KillShellTool/KillShellToolResultMessage.js +11 -0
  479. package/dist/tools/KillShellTool/KillShellToolResultMessage.js.map +7 -0
  480. package/dist/tools/KillShellTool/prompt.js +12 -0
  481. package/dist/tools/KillShellTool/prompt.js.map +7 -0
  482. package/dist/tools/MCPTool/MCPTool.js +90 -0
  483. package/dist/tools/MCPTool/MCPTool.js.map +7 -0
  484. package/dist/tools/MCPTool/prompt.js +7 -0
  485. package/dist/tools/MCPTool/prompt.js.map +7 -0
  486. package/dist/tools/MemoryReadTool/MemoryReadTool.js +103 -0
  487. package/dist/tools/MemoryReadTool/MemoryReadTool.js.map +7 -0
  488. package/dist/tools/MemoryReadTool/prompt.js +7 -0
  489. package/dist/tools/MemoryReadTool/prompt.js.map +7 -0
  490. package/dist/tools/MemoryWriteTool/MemoryWriteTool.js +77 -0
  491. package/dist/tools/MemoryWriteTool/MemoryWriteTool.js.map +7 -0
  492. package/dist/tools/MemoryWriteTool/prompt.js +7 -0
  493. package/dist/tools/MemoryWriteTool/prompt.js.map +7 -0
  494. package/dist/tools/MultiEditTool/MultiEditTool.js +301 -0
  495. package/dist/tools/MultiEditTool/MultiEditTool.js.map +7 -0
  496. package/dist/tools/MultiEditTool/prompt.js +48 -0
  497. package/dist/tools/MultiEditTool/prompt.js.map +7 -0
  498. package/dist/tools/NotebookEditTool/NotebookEditTool.js +238 -0
  499. package/dist/tools/NotebookEditTool/NotebookEditTool.js.map +7 -0
  500. package/dist/tools/NotebookEditTool/prompt.js +7 -0
  501. package/dist/tools/NotebookEditTool/prompt.js.map +7 -0
  502. package/dist/tools/NotebookReadTool/NotebookReadTool.js +212 -0
  503. package/dist/tools/NotebookReadTool/NotebookReadTool.js.map +7 -0
  504. package/dist/tools/NotebookReadTool/prompt.js +7 -0
  505. package/dist/tools/NotebookReadTool/prompt.js.map +7 -0
  506. package/dist/tools/SkillTool/SkillTool.js +209 -0
  507. package/dist/tools/SkillTool/SkillTool.js.map +7 -0
  508. package/dist/tools/SkillTool/prompt.js +81 -0
  509. package/dist/tools/SkillTool/prompt.js.map +7 -0
  510. package/dist/tools/TaskTool/TaskTool.js +381 -0
  511. package/dist/tools/TaskTool/TaskTool.js.map +7 -0
  512. package/dist/tools/TaskTool/constants.js +5 -0
  513. package/dist/tools/TaskTool/constants.js.map +7 -0
  514. package/dist/tools/TaskTool/prompt.js +111 -0
  515. package/dist/tools/TaskTool/prompt.js.map +7 -0
  516. package/dist/tools/ThinkTool/ThinkTool.js +40 -0
  517. package/dist/tools/ThinkTool/ThinkTool.js.map +7 -0
  518. package/dist/tools/ThinkTool/prompt.js +16 -0
  519. package/dist/tools/ThinkTool/prompt.js.map +7 -0
  520. package/dist/tools/TodoWriteTool/TodoWriteTool.js +243 -0
  521. package/dist/tools/TodoWriteTool/TodoWriteTool.js.map +7 -0
  522. package/dist/tools/TodoWriteTool/prompt.js +66 -0
  523. package/dist/tools/TodoWriteTool/prompt.js.map +7 -0
  524. package/dist/tools/URLFetcherTool/URLFetcherTool.js +137 -0
  525. package/dist/tools/URLFetcherTool/URLFetcherTool.js.map +7 -0
  526. package/dist/tools/URLFetcherTool/cache.js +45 -0
  527. package/dist/tools/URLFetcherTool/cache.js.map +7 -0
  528. package/dist/tools/URLFetcherTool/htmlToMarkdown.js +42 -0
  529. package/dist/tools/URLFetcherTool/htmlToMarkdown.js.map +7 -0
  530. package/dist/tools/URLFetcherTool/prompt.js +22 -0
  531. package/dist/tools/URLFetcherTool/prompt.js.map +7 -0
  532. package/dist/tools/WebSearchTool/WebSearchTool.js +86 -0
  533. package/dist/tools/WebSearchTool/WebSearchTool.js.map +7 -0
  534. package/dist/tools/WebSearchTool/prompt.js +17 -0
  535. package/dist/tools/WebSearchTool/prompt.js.map +7 -0
  536. package/dist/tools/WebSearchTool/searchProviders.js +48 -0
  537. package/dist/tools/WebSearchTool/searchProviders.js.map +7 -0
  538. package/dist/tools/lsTool/lsTool.js +201 -0
  539. package/dist/tools/lsTool/lsTool.js.map +7 -0
  540. package/dist/tools/lsTool/prompt.js +5 -0
  541. package/dist/tools/lsTool/prompt.js.map +7 -0
  542. package/dist/tools.js +70 -0
  543. package/dist/tools.js.map +7 -0
  544. package/dist/types/PermissionMode.js +82 -0
  545. package/dist/types/PermissionMode.js.map +7 -0
  546. package/dist/types/RequestContext.js +47 -0
  547. package/dist/types/RequestContext.js.map +7 -0
  548. package/dist/types/common.d.js +1 -0
  549. package/dist/types/common.d.js.map +7 -0
  550. package/dist/types/conversation.js +1 -0
  551. package/dist/types/conversation.js.map +7 -0
  552. package/dist/types/hooks.js +38 -0
  553. package/dist/types/hooks.js.map +7 -0
  554. package/dist/types/interactionRound.js +1 -0
  555. package/dist/types/interactionRound.js.map +7 -0
  556. package/dist/types/logs.js +1 -0
  557. package/dist/types/logs.js.map +7 -0
  558. package/dist/types/marketplace.js +101 -0
  559. package/dist/types/marketplace.js.map +7 -0
  560. package/dist/types/modelCapabilities.js +1 -0
  561. package/dist/types/modelCapabilities.js.map +7 -0
  562. package/dist/types/notebook.js +1 -0
  563. package/dist/types/notebook.js.map +7 -0
  564. package/dist/types/plugin.js +83 -0
  565. package/dist/types/plugin.js.map +7 -0
  566. package/dist/types/subagent.js +1 -0
  567. package/dist/types/subagent.js.map +7 -0
  568. package/dist/utils/BackgroundShellManager.js +215 -0
  569. package/dist/utils/BackgroundShellManager.js.map +7 -0
  570. package/dist/utils/Cursor.js +315 -0
  571. package/dist/utils/Cursor.js.map +7 -0
  572. package/dist/utils/PersistentShell.js +371 -0
  573. package/dist/utils/PersistentShell.js.map +7 -0
  574. package/dist/utils/advancedFuzzyMatcher.js +206 -0
  575. package/dist/utils/advancedFuzzyMatcher.js.map +7 -0
  576. package/dist/utils/agentLoader.js +244 -0
  577. package/dist/utils/agentLoader.js.map +7 -0
  578. package/dist/utils/agentStorage.js +59 -0
  579. package/dist/utils/agentStorage.js.map +7 -0
  580. package/dist/utils/array.js +7 -0
  581. package/dist/utils/array.js.map +7 -0
  582. package/dist/utils/ask.js +77 -0
  583. package/dist/utils/ask.js.map +7 -0
  584. package/dist/utils/auth.js +11 -0
  585. package/dist/utils/auth.js.map +7 -0
  586. package/dist/utils/autoCompactCore.js +126 -0
  587. package/dist/utils/autoCompactCore.js.map +7 -0
  588. package/dist/utils/autoUpdater.js +107 -0
  589. package/dist/utils/autoUpdater.js.map +7 -0
  590. package/dist/utils/browser.js +15 -0
  591. package/dist/utils/browser.js.map +7 -0
  592. package/dist/utils/cleanup.js +54 -0
  593. package/dist/utils/cleanup.js.map +7 -0
  594. package/dist/utils/commands.js +207 -0
  595. package/dist/utils/commands.js.map +7 -0
  596. package/dist/utils/commonUnixCommands.js +687 -0
  597. package/dist/utils/commonUnixCommands.js.map +7 -0
  598. package/dist/utils/compressionMode.js +47 -0
  599. package/dist/utils/compressionMode.js.map +7 -0
  600. package/dist/utils/config.js +651 -0
  601. package/dist/utils/config.js.map +7 -0
  602. package/dist/utils/conversationRecovery.js +35 -0
  603. package/dist/utils/conversationRecovery.js.map +7 -0
  604. package/dist/utils/debugLogger.js +889 -0
  605. package/dist/utils/debugLogger.js.map +7 -0
  606. package/dist/utils/diff.js +32 -0
  607. package/dist/utils/diff.js.map +7 -0
  608. package/dist/utils/env.js +44 -0
  609. package/dist/utils/env.js.map +7 -0
  610. package/dist/utils/errors.js +23 -0
  611. package/dist/utils/errors.js.map +7 -0
  612. package/dist/utils/execFileNoThrow.js +44 -0
  613. package/dist/utils/execFileNoThrow.js.map +7 -0
  614. package/dist/utils/expertChatStorage.js +78 -0
  615. package/dist/utils/expertChatStorage.js.map +7 -0
  616. package/dist/utils/file.js +282 -0
  617. package/dist/utils/file.js.map +7 -0
  618. package/dist/utils/fileRecoveryCore.js +41 -0
  619. package/dist/utils/fileRecoveryCore.js.map +7 -0
  620. package/dist/utils/format.js +41 -0
  621. package/dist/utils/format.js.map +7 -0
  622. package/dist/utils/fuzzyMatcher.js +252 -0
  623. package/dist/utils/fuzzyMatcher.js.map +7 -0
  624. package/dist/utils/generators.js +46 -0
  625. package/dist/utils/generators.js.map +7 -0
  626. package/dist/utils/git.js +83 -0
  627. package/dist/utils/git.js.map +7 -0
  628. package/dist/utils/hookManager.js +238 -0
  629. package/dist/utils/hookManager.js.map +7 -0
  630. package/dist/utils/http.js +7 -0
  631. package/dist/utils/http.js.map +7 -0
  632. package/dist/utils/imagePaste.js +29 -0
  633. package/dist/utils/imagePaste.js.map +7 -0
  634. package/dist/utils/json.js +16 -0
  635. package/dist/utils/json.js.map +7 -0
  636. package/dist/utils/log.js +329 -0
  637. package/dist/utils/log.js.map +7 -0
  638. package/dist/utils/markdown.js +187 -0
  639. package/dist/utils/markdown.js.map +7 -0
  640. package/dist/utils/marketplaceManager.js +474 -0
  641. package/dist/utils/marketplaceManager.js.map +7 -0
  642. package/dist/utils/messageContextManager.js +195 -0
  643. package/dist/utils/messageContextManager.js.map +7 -0
  644. package/dist/utils/messages.js +650 -0
  645. package/dist/utils/messages.js.map +7 -0
  646. package/dist/utils/model.js +677 -0
  647. package/dist/utils/model.js.map +7 -0
  648. package/dist/utils/permissions/filesystem.js +80 -0
  649. package/dist/utils/permissions/filesystem.js.map +7 -0
  650. package/dist/utils/pluginInstaller.js +491 -0
  651. package/dist/utils/pluginInstaller.js.map +7 -0
  652. package/dist/utils/pluginLoader.js +582 -0
  653. package/dist/utils/pluginLoader.js.map +7 -0
  654. package/dist/utils/pluginRegistry.js +111 -0
  655. package/dist/utils/pluginRegistry.js.map +7 -0
  656. package/dist/utils/pluginValidator.js +774 -0
  657. package/dist/utils/pluginValidator.js.map +7 -0
  658. package/dist/utils/ptyCompat.js +125 -0
  659. package/dist/utils/ptyCompat.js.map +7 -0
  660. package/dist/utils/replStateMachine.js +145 -0
  661. package/dist/utils/replStateMachine.js.map +7 -0
  662. package/dist/utils/ripgrep.js +131 -0
  663. package/dist/utils/ripgrep.js.map +7 -0
  664. package/dist/utils/roundConverter.js +262 -0
  665. package/dist/utils/roundConverter.js.map +7 -0
  666. package/dist/utils/secureFile.js +483 -0
  667. package/dist/utils/secureFile.js.map +7 -0
  668. package/dist/utils/sessionState.js +22 -0
  669. package/dist/utils/sessionState.js.map +7 -0
  670. package/dist/utils/skillLoader.js +79 -0
  671. package/dist/utils/skillLoader.js.map +7 -0
  672. package/dist/utils/state.js +24 -0
  673. package/dist/utils/state.js.map +7 -0
  674. package/dist/utils/style.js +31 -0
  675. package/dist/utils/style.js.map +7 -0
  676. package/dist/utils/terminal.js +47 -0
  677. package/dist/utils/terminal.js.map +7 -0
  678. package/dist/utils/theme.js +102 -0
  679. package/dist/utils/theme.js.map +7 -0
  680. package/dist/utils/thinking.js +59 -0
  681. package/dist/utils/thinking.js.map +7 -0
  682. package/dist/utils/todoChangeCalculator.js +64 -0
  683. package/dist/utils/todoChangeCalculator.js.map +7 -0
  684. package/dist/utils/todoStorage.js +291 -0
  685. package/dist/utils/todoStorage.js.map +7 -0
  686. package/dist/utils/tokens.js +30 -0
  687. package/dist/utils/tokens.js.map +7 -0
  688. package/dist/utils/toolExecutionController.js +109 -0
  689. package/dist/utils/toolExecutionController.js.map +7 -0
  690. package/dist/utils/unaryLogging.js +6 -0
  691. package/dist/utils/unaryLogging.js.map +7 -0
  692. package/dist/utils/user.js +40 -0
  693. package/dist/utils/user.js.map +7 -0
  694. package/dist/utils/validate.js +132 -0
  695. package/dist/utils/validate.js.map +7 -0
  696. package/dist/version.js +7 -0
  697. package/dist/version.js.map +7 -0
  698. package/dist/yoga.wasm +0 -0
  699. package/package.json +113 -0
  700. package/scripts/postinstall.js +18 -0
  701. package/yoga.wasm +0 -0
@@ -0,0 +1,995 @@
1
+ import { getGlobalConfig } from "../utils/config.js";
2
+ import { ProxyAgent, fetch } from "undici";
3
+ import { setSessionState, getSessionState } from "../utils/sessionState.js";
4
+ import { debug as debugLogger, getCurrentRequest, logAPIError } from "../utils/debugLogger.js";
5
+ const RETRY_CONFIG = {
6
+ BASE_DELAY_MS: 1e3,
7
+ MAX_DELAY_MS: 32e3,
8
+ MAX_SERVER_DELAY_MS: 6e4,
9
+ JITTER_FACTOR: 0.1
10
+ };
11
+ function getRetryDelay(attempt, retryAfter) {
12
+ if (retryAfter) {
13
+ const retryAfterMs = parseInt(retryAfter) * 1e3;
14
+ if (!isNaN(retryAfterMs) && retryAfterMs > 0) {
15
+ return Math.min(retryAfterMs, RETRY_CONFIG.MAX_SERVER_DELAY_MS);
16
+ }
17
+ }
18
+ const delay = RETRY_CONFIG.BASE_DELAY_MS * Math.pow(2, attempt - 1);
19
+ const jitter = Math.random() * RETRY_CONFIG.JITTER_FACTOR * delay;
20
+ return Math.min(delay + jitter, RETRY_CONFIG.MAX_DELAY_MS);
21
+ }
22
+ function abortableDelay(delayMs, signal) {
23
+ return new Promise((resolve, reject) => {
24
+ if (signal?.aborted) {
25
+ reject(new Error("Request was aborted"));
26
+ return;
27
+ }
28
+ const timeoutId = setTimeout(() => {
29
+ resolve();
30
+ }, delayMs);
31
+ if (signal) {
32
+ const abortHandler = () => {
33
+ clearTimeout(timeoutId);
34
+ reject(new Error("Request was aborted"));
35
+ };
36
+ signal.addEventListener("abort", abortHandler, { once: true });
37
+ }
38
+ });
39
+ }
40
+ var ModelErrorType = /* @__PURE__ */ ((ModelErrorType2) => {
41
+ ModelErrorType2["MaxLength"] = "1024";
42
+ ModelErrorType2["MaxCompletionTokens"] = "max_completion_tokens";
43
+ ModelErrorType2["TemperatureRestriction"] = "temperature_restriction";
44
+ ModelErrorType2["StreamOptions"] = "stream_options";
45
+ ModelErrorType2["Citations"] = "citations";
46
+ ModelErrorType2["RateLimit"] = "rate_limit";
47
+ return ModelErrorType2;
48
+ })(ModelErrorType || {});
49
+ function getModelErrorKey(baseURL, model, type) {
50
+ return `${baseURL}:${model}:${type}`;
51
+ }
52
+ function hasModelError(baseURL, model, type) {
53
+ return !!getSessionState("modelErrors")[getModelErrorKey(baseURL, model, type)];
54
+ }
55
+ function setModelError(baseURL, model, type, error) {
56
+ setSessionState("modelErrors", {
57
+ [getModelErrorKey(baseURL, model, type)]: error
58
+ });
59
+ }
60
+ const GPT5_ERROR_HANDLERS = [
61
+ {
62
+ type: "max_completion_tokens" /* MaxCompletionTokens */,
63
+ detect: (errMsg) => {
64
+ const lowerMsg = errMsg.toLowerCase();
65
+ return (
66
+ // Exact OpenAI GPT-5 error message
67
+ lowerMsg.includes("unsupported parameter: 'max_tokens'") && lowerMsg.includes("'max_completion_tokens'") || // Generic max_tokens error patterns
68
+ lowerMsg.includes("max_tokens") && lowerMsg.includes("max_completion_tokens") || lowerMsg.includes("max_tokens") && lowerMsg.includes("not supported") || lowerMsg.includes("max_tokens") && lowerMsg.includes("use max_completion_tokens") || // Additional patterns for various providers
69
+ lowerMsg.includes("invalid parameter") && lowerMsg.includes("max_tokens") || lowerMsg.includes("parameter error") && lowerMsg.includes("max_tokens")
70
+ );
71
+ },
72
+ fix: async (opts) => {
73
+ console.log(`\u{1F527} GPT-5 Fix: Converting max_tokens (${opts.max_tokens}) to max_completion_tokens`);
74
+ if ("max_tokens" in opts) {
75
+ opts.max_completion_tokens = opts.max_tokens;
76
+ delete opts.max_tokens;
77
+ }
78
+ }
79
+ },
80
+ {
81
+ type: "temperature_restriction" /* TemperatureRestriction */,
82
+ detect: (errMsg) => {
83
+ const lowerMsg = errMsg.toLowerCase();
84
+ return lowerMsg.includes("temperature") && (lowerMsg.includes("only supports") || lowerMsg.includes("must be 1") || lowerMsg.includes("invalid temperature"));
85
+ },
86
+ fix: async (opts) => {
87
+ console.log(`\u{1F527} GPT-5 Fix: Adjusting temperature from ${opts.temperature} to 1`);
88
+ opts.temperature = 1;
89
+ }
90
+ }
91
+ // Add more GPT-5 specific handlers as needed
92
+ ];
93
+ const ERROR_HANDLERS = [
94
+ {
95
+ type: "1024" /* MaxLength */,
96
+ detect: (errMsg) => errMsg.includes("Expected a string with maximum length 1024"),
97
+ fix: async (opts) => {
98
+ const toolDescriptions = {};
99
+ for (const tool of opts.tools || []) {
100
+ if (tool.function.description.length <= 1024) continue;
101
+ let str = "";
102
+ let remainder = "";
103
+ for (let line of tool.function.description.split("\n")) {
104
+ if (str.length + line.length < 1024) {
105
+ str += line + "\n";
106
+ } else {
107
+ remainder += line + "\n";
108
+ }
109
+ }
110
+ tool.function.description = str;
111
+ toolDescriptions[tool.function.name] = remainder;
112
+ }
113
+ if (Object.keys(toolDescriptions).length > 0) {
114
+ let content = "<additional-tool-usage-instructions>\n\n";
115
+ for (const [name, description] of Object.entries(toolDescriptions)) {
116
+ content += `<${name}>
117
+ ${description}
118
+ </${name}>
119
+
120
+ `;
121
+ }
122
+ content += "</additional-tool-usage-instructions>";
123
+ for (let i = opts.messages.length - 1; i >= 0; i--) {
124
+ if (opts.messages[i].role === "system") {
125
+ opts.messages.splice(i + 1, 0, {
126
+ role: "system",
127
+ content
128
+ });
129
+ break;
130
+ }
131
+ }
132
+ }
133
+ }
134
+ },
135
+ {
136
+ type: "max_completion_tokens" /* MaxCompletionTokens */,
137
+ detect: (errMsg) => errMsg.includes("Use 'max_completion_tokens'"),
138
+ fix: async (opts) => {
139
+ opts.max_completion_tokens = opts.max_tokens;
140
+ delete opts.max_tokens;
141
+ }
142
+ },
143
+ {
144
+ type: "stream_options" /* StreamOptions */,
145
+ detect: (errMsg) => errMsg.includes("stream_options"),
146
+ fix: async (opts) => {
147
+ delete opts.stream_options;
148
+ }
149
+ },
150
+ {
151
+ type: "citations" /* Citations */,
152
+ detect: (errMsg) => errMsg.includes("Extra inputs are not permitted") && errMsg.includes("citations"),
153
+ fix: async (opts) => {
154
+ if (!opts.messages) return;
155
+ for (const message of opts.messages) {
156
+ if (!message) continue;
157
+ if (Array.isArray(message.content)) {
158
+ for (const item of message.content) {
159
+ if (item && typeof item === "object") {
160
+ const itemObj = item;
161
+ if ("citations" in itemObj) {
162
+ delete itemObj.citations;
163
+ }
164
+ }
165
+ }
166
+ } else if (message.content && typeof message.content === "object") {
167
+ const contentObj = message.content;
168
+ if ("citations" in contentObj) {
169
+ delete contentObj.citations;
170
+ }
171
+ }
172
+ }
173
+ }
174
+ }
175
+ ];
176
+ function isRateLimitError(errMsg) {
177
+ if (!errMsg) return false;
178
+ const lowerMsg = errMsg.toLowerCase();
179
+ return lowerMsg.includes("rate limit") || lowerMsg.includes("too many requests") || lowerMsg.includes("429");
180
+ }
181
+ const MODEL_FEATURES = {
182
+ // OpenAI thinking models
183
+ o1: { usesMaxCompletionTokens: true },
184
+ "o1-preview": { usesMaxCompletionTokens: true },
185
+ "o1-mini": { usesMaxCompletionTokens: true },
186
+ "o1-pro": { usesMaxCompletionTokens: true },
187
+ "o3-mini": { usesMaxCompletionTokens: true },
188
+ // GPT-5 models
189
+ "gpt-5": {
190
+ usesMaxCompletionTokens: true,
191
+ supportsResponsesAPI: true,
192
+ requiresTemperatureOne: true,
193
+ supportsVerbosityControl: true,
194
+ supportsCustomTools: true,
195
+ supportsAllowedTools: true
196
+ },
197
+ "gpt-5-mini": {
198
+ usesMaxCompletionTokens: true,
199
+ supportsResponsesAPI: true,
200
+ requiresTemperatureOne: true,
201
+ supportsVerbosityControl: true,
202
+ supportsCustomTools: true,
203
+ supportsAllowedTools: true
204
+ },
205
+ "gpt-5-nano": {
206
+ usesMaxCompletionTokens: true,
207
+ supportsResponsesAPI: true,
208
+ requiresTemperatureOne: true,
209
+ supportsVerbosityControl: true,
210
+ supportsCustomTools: true,
211
+ supportsAllowedTools: true
212
+ },
213
+ "gpt-5-chat-latest": {
214
+ usesMaxCompletionTokens: true,
215
+ supportsResponsesAPI: false,
216
+ // Uses Chat Completions only
217
+ requiresTemperatureOne: true,
218
+ supportsVerbosityControl: true
219
+ }
220
+ };
221
+ function getModelFeatures(modelName) {
222
+ if (!modelName || typeof modelName !== "string") {
223
+ return { usesMaxCompletionTokens: false };
224
+ }
225
+ if (MODEL_FEATURES[modelName]) {
226
+ return MODEL_FEATURES[modelName];
227
+ }
228
+ if (modelName.toLowerCase().includes("gpt-5")) {
229
+ return {
230
+ usesMaxCompletionTokens: true,
231
+ supportsResponsesAPI: true,
232
+ requiresTemperatureOne: true,
233
+ supportsVerbosityControl: true,
234
+ supportsCustomTools: true,
235
+ supportsAllowedTools: true
236
+ };
237
+ }
238
+ for (const [key, features] of Object.entries(MODEL_FEATURES)) {
239
+ if (modelName.includes(key)) {
240
+ return features;
241
+ }
242
+ }
243
+ return { usesMaxCompletionTokens: false };
244
+ }
245
+ function applyModelSpecificTransformations(opts) {
246
+ if (!opts.model || typeof opts.model !== "string") {
247
+ return;
248
+ }
249
+ const features = getModelFeatures(opts.model);
250
+ const isGPT5 = opts.model.toLowerCase().includes("gpt-5");
251
+ if (isGPT5 || features.usesMaxCompletionTokens) {
252
+ if ("max_tokens" in opts && !("max_completion_tokens" in opts)) {
253
+ console.log(`\u{1F527} Transforming max_tokens (${opts.max_tokens}) to max_completion_tokens for ${opts.model}`);
254
+ opts.max_completion_tokens = opts.max_tokens;
255
+ delete opts.max_tokens;
256
+ }
257
+ if (features.requiresTemperatureOne && "temperature" in opts) {
258
+ if (opts.temperature !== 1 && opts.temperature !== void 0) {
259
+ console.log(
260
+ `\u{1F527} GPT-5 temperature constraint: Adjusting temperature from ${opts.temperature} to 1 for ${opts.model}`
261
+ );
262
+ opts.temperature = 1;
263
+ }
264
+ }
265
+ if (isGPT5) {
266
+ delete opts.frequency_penalty;
267
+ delete opts.presence_penalty;
268
+ delete opts.logit_bias;
269
+ delete opts.user;
270
+ if (!opts.reasoning_effort && features.supportsVerbosityControl) {
271
+ opts.reasoning_effort = "medium";
272
+ }
273
+ }
274
+ } else {
275
+ if (features.usesMaxCompletionTokens && "max_tokens" in opts && !("max_completion_tokens" in opts)) {
276
+ opts.max_completion_tokens = opts.max_tokens;
277
+ delete opts.max_tokens;
278
+ }
279
+ }
280
+ }
281
+ async function applyModelErrorFixes(opts, baseURL) {
282
+ const isGPT5 = opts.model.startsWith("gpt-5");
283
+ const handlers = isGPT5 ? [...GPT5_ERROR_HANDLERS, ...ERROR_HANDLERS] : ERROR_HANDLERS;
284
+ for (const handler of handlers) {
285
+ if (hasModelError(baseURL, opts.model, handler.type)) {
286
+ await handler.fix(opts);
287
+ return;
288
+ }
289
+ }
290
+ }
291
+ async function tryWithEndpointFallback(baseURL, opts, headers, provider, proxy, signal) {
292
+ const endpointsToTry = [];
293
+ if (provider === "minimax") {
294
+ endpointsToTry.push("/text/chatcompletion_v2", "/chat/completions");
295
+ } else {
296
+ endpointsToTry.push("/chat/completions");
297
+ }
298
+ let lastError = null;
299
+ for (const endpoint of endpointsToTry) {
300
+ try {
301
+ const response = await fetch(`${baseURL}${endpoint}`, {
302
+ method: "POST",
303
+ headers,
304
+ body: JSON.stringify(opts.stream ? { ...opts, stream: true } : opts),
305
+ dispatcher: proxy,
306
+ signal
307
+ // 🔧 Connect AbortSignal to fetch call
308
+ });
309
+ if (response.ok) {
310
+ return { response, endpoint };
311
+ }
312
+ if (response.status === 404 && endpointsToTry.length > 1) {
313
+ console.log(
314
+ `Endpoint ${endpoint} returned 404, trying next endpoint...`
315
+ );
316
+ continue;
317
+ }
318
+ return { response, endpoint };
319
+ } catch (error) {
320
+ lastError = error;
321
+ if (endpointsToTry.indexOf(endpoint) < endpointsToTry.length - 1) {
322
+ console.log(`Network error on ${endpoint}, trying next endpoint...`);
323
+ continue;
324
+ }
325
+ }
326
+ }
327
+ throw lastError || new Error("All endpoints failed");
328
+ }
329
+ async function getCompletionWithProfile(modelProfile, opts, attempt = 0, maxAttempts = 10, signal) {
330
+ if (attempt >= maxAttempts) {
331
+ throw new Error("Max attempts reached");
332
+ }
333
+ const provider = modelProfile?.provider || "anthropic";
334
+ const baseURL = modelProfile?.baseURL;
335
+ const apiKey = modelProfile?.apiKey;
336
+ const proxy = getGlobalConfig().proxy ? new ProxyAgent(getGlobalConfig().proxy) : void 0;
337
+ const headers = {
338
+ "Content-Type": "application/json"
339
+ };
340
+ if (apiKey) {
341
+ if (provider === "azure") {
342
+ headers["api-key"] = apiKey;
343
+ } else {
344
+ headers["Authorization"] = `Bearer ${apiKey}`;
345
+ }
346
+ }
347
+ applyModelSpecificTransformations(opts);
348
+ await applyModelErrorFixes(opts, baseURL || "");
349
+ debugLogger.api("OPENAI_API_CALL_START", {
350
+ endpoint: baseURL || "DEFAULT_OPENAI",
351
+ model: opts.model,
352
+ provider,
353
+ apiKeyConfigured: !!apiKey,
354
+ apiKeyPrefix: apiKey ? apiKey.substring(0, 8) : null,
355
+ maxTokens: opts.max_tokens,
356
+ temperature: opts.temperature,
357
+ messageCount: opts.messages?.length || 0,
358
+ streamMode: opts.stream,
359
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
360
+ modelProfileModelName: modelProfile?.modelName,
361
+ modelProfileName: modelProfile?.name
362
+ });
363
+ opts.messages = opts.messages.map((msg) => {
364
+ if (msg.role === "tool") {
365
+ if (Array.isArray(msg.content)) {
366
+ return {
367
+ ...msg,
368
+ content: msg.content.map((c) => c.text || "").filter(Boolean).join("\n\n") || "(empty content)"
369
+ };
370
+ } else if (typeof msg.content !== "string") {
371
+ return {
372
+ ...msg,
373
+ content: typeof msg.content === "undefined" ? "(empty content)" : JSON.stringify(msg.content)
374
+ };
375
+ }
376
+ }
377
+ return msg;
378
+ });
379
+ const azureApiVersion = "2024-06-01";
380
+ let endpoint = "/chat/completions";
381
+ if (provider === "azure") {
382
+ endpoint = `/chat/completions?api-version=${azureApiVersion}`;
383
+ } else if (provider === "minimax") {
384
+ endpoint = "/text/chatcompletion_v2";
385
+ }
386
+ try {
387
+ if (opts.stream) {
388
+ const isOpenAICompatible2 = [
389
+ "minimax",
390
+ "kimi",
391
+ "deepseek",
392
+ "siliconflow",
393
+ "qwen",
394
+ "glm",
395
+ "baidu-qianfan",
396
+ "openai",
397
+ "mistral",
398
+ "xai",
399
+ "groq",
400
+ "custom-openai"
401
+ ].includes(provider);
402
+ let response2;
403
+ let usedEndpoint2;
404
+ if (isOpenAICompatible2 && provider !== "azure") {
405
+ const result = await tryWithEndpointFallback(
406
+ baseURL,
407
+ opts,
408
+ headers,
409
+ provider,
410
+ proxy,
411
+ signal
412
+ // 🔧 Pass AbortSignal to endpoint fallback
413
+ );
414
+ response2 = result.response;
415
+ usedEndpoint2 = result.endpoint;
416
+ } else {
417
+ response2 = await fetch(`${baseURL}${endpoint}`, {
418
+ method: "POST",
419
+ headers,
420
+ body: JSON.stringify({ ...opts, stream: true }),
421
+ dispatcher: proxy,
422
+ signal
423
+ // 🔧 CRITICAL FIX: Connect AbortSignal to fetch call
424
+ });
425
+ usedEndpoint2 = endpoint;
426
+ }
427
+ if (!response2.ok) {
428
+ if (signal?.aborted) {
429
+ throw new Error("Request cancelled by user");
430
+ }
431
+ try {
432
+ const errorData = await response2.json();
433
+ const hasError = (data) => {
434
+ return typeof data === "object" && data !== null;
435
+ };
436
+ const errorMessage = hasError(errorData) ? errorData.error?.message || errorData.message || `HTTP ${response2.status}` : `HTTP ${response2.status}`;
437
+ const isGPT5 = opts.model.startsWith("gpt-5");
438
+ const handlers = isGPT5 ? [...GPT5_ERROR_HANDLERS, ...ERROR_HANDLERS] : ERROR_HANDLERS;
439
+ for (const handler of handlers) {
440
+ if (handler.detect(errorMessage)) {
441
+ console.log(`\u{1F527} Detected ${handler.type} error for ${opts.model}: ${errorMessage}`);
442
+ setModelError(baseURL || "", opts.model, handler.type, errorMessage);
443
+ await handler.fix(opts);
444
+ console.log(`\u{1F527} Applied fix for ${handler.type}, retrying...`);
445
+ return getCompletionWithProfile(
446
+ modelProfile,
447
+ opts,
448
+ attempt + 1,
449
+ maxAttempts,
450
+ signal
451
+ );
452
+ }
453
+ }
454
+ console.log(`\u26A0\uFE0F Unhandled API error (${response2.status}): ${errorMessage}`);
455
+ logAPIError({
456
+ model: opts.model,
457
+ endpoint: `${baseURL}${endpoint}`,
458
+ status: response2.status,
459
+ error: errorMessage,
460
+ request: opts,
461
+ response: errorData,
462
+ provider
463
+ });
464
+ } catch (parseError) {
465
+ console.log(`\u26A0\uFE0F Could not parse error response (${response2.status})`);
466
+ logAPIError({
467
+ model: opts.model,
468
+ endpoint: `${baseURL}${endpoint}`,
469
+ status: response2.status,
470
+ error: `Could not parse error response: ${parseError.message}`,
471
+ request: opts,
472
+ response: { parseError: parseError.message },
473
+ provider
474
+ });
475
+ }
476
+ const delayMs = getRetryDelay(attempt);
477
+ console.log(
478
+ ` \u23BF API error (${response2.status}), retrying in ${Math.round(delayMs / 1e3)}s... (attempt ${attempt + 1}/${maxAttempts})`
479
+ );
480
+ try {
481
+ await abortableDelay(delayMs, signal);
482
+ } catch (error) {
483
+ if (error.message === "Request was aborted") {
484
+ throw new Error("Request cancelled by user");
485
+ }
486
+ throw error;
487
+ }
488
+ return getCompletionWithProfile(
489
+ modelProfile,
490
+ opts,
491
+ attempt + 1,
492
+ maxAttempts,
493
+ signal
494
+ // 🔧 Pass AbortSignal to recursive call
495
+ );
496
+ }
497
+ const stream = createStreamProcessor(response2.body, signal);
498
+ return stream;
499
+ }
500
+ const isOpenAICompatible = [
501
+ "minimax",
502
+ "kimi",
503
+ "deepseek",
504
+ "siliconflow",
505
+ "qwen",
506
+ "glm",
507
+ "baidu-qianfan",
508
+ "openai",
509
+ "mistral",
510
+ "xai",
511
+ "groq",
512
+ "custom-openai"
513
+ ].includes(provider);
514
+ let response;
515
+ let usedEndpoint;
516
+ if (isOpenAICompatible && provider !== "azure") {
517
+ const result = await tryWithEndpointFallback(
518
+ baseURL,
519
+ opts,
520
+ headers,
521
+ provider,
522
+ proxy,
523
+ signal
524
+ // 🔧 Pass AbortSignal to endpoint fallback
525
+ );
526
+ response = result.response;
527
+ usedEndpoint = result.endpoint;
528
+ } else {
529
+ response = await fetch(`${baseURL}${endpoint}`, {
530
+ method: "POST",
531
+ headers,
532
+ body: JSON.stringify(opts),
533
+ dispatcher: proxy,
534
+ signal
535
+ // 🔧 CRITICAL FIX: Connect AbortSignal to non-streaming fetch call
536
+ });
537
+ usedEndpoint = endpoint;
538
+ }
539
+ if (!response.ok) {
540
+ if (signal?.aborted) {
541
+ throw new Error("Request cancelled by user");
542
+ }
543
+ try {
544
+ const errorData = await response.json();
545
+ const hasError = (data) => {
546
+ return typeof data === "object" && data !== null;
547
+ };
548
+ const errorMessage = hasError(errorData) ? errorData.error?.message || errorData.message || `HTTP ${response.status}` : `HTTP ${response.status}`;
549
+ const isGPT5 = opts.model.startsWith("gpt-5");
550
+ const handlers = isGPT5 ? [...GPT5_ERROR_HANDLERS, ...ERROR_HANDLERS] : ERROR_HANDLERS;
551
+ for (const handler of handlers) {
552
+ if (handler.detect(errorMessage)) {
553
+ console.log(`\u{1F527} Detected ${handler.type} error for ${opts.model}: ${errorMessage}`);
554
+ setModelError(baseURL || "", opts.model, handler.type, errorMessage);
555
+ await handler.fix(opts);
556
+ console.log(`\u{1F527} Applied fix for ${handler.type}, retrying...`);
557
+ return getCompletionWithProfile(
558
+ modelProfile,
559
+ opts,
560
+ attempt + 1,
561
+ maxAttempts,
562
+ signal
563
+ );
564
+ }
565
+ }
566
+ console.log(`\u26A0\uFE0F Unhandled API error (${response.status}): ${errorMessage}`);
567
+ } catch (parseError) {
568
+ console.log(`\u26A0\uFE0F Could not parse error response (${response.status})`);
569
+ }
570
+ const delayMs = getRetryDelay(attempt);
571
+ console.log(
572
+ ` \u23BF API error (${response.status}), retrying in ${Math.round(delayMs / 1e3)}s... (attempt ${attempt + 1}/${maxAttempts})`
573
+ );
574
+ try {
575
+ await abortableDelay(delayMs, signal);
576
+ } catch (error) {
577
+ if (error.message === "Request was aborted") {
578
+ throw new Error("Request cancelled by user");
579
+ }
580
+ throw error;
581
+ }
582
+ return getCompletionWithProfile(
583
+ modelProfile,
584
+ opts,
585
+ attempt + 1,
586
+ maxAttempts,
587
+ signal
588
+ // 🔧 Pass AbortSignal to recursive call
589
+ );
590
+ }
591
+ const responseData = await response.json();
592
+ return responseData;
593
+ } catch (error) {
594
+ if (signal?.aborted) {
595
+ throw new Error("Request cancelled by user");
596
+ }
597
+ if (attempt < maxAttempts) {
598
+ if (signal?.aborted) {
599
+ throw new Error("Request cancelled by user");
600
+ }
601
+ const delayMs = getRetryDelay(attempt);
602
+ console.log(
603
+ ` \u23BF Network error, retrying in ${Math.round(delayMs / 1e3)}s... (attempt ${attempt + 1}/${maxAttempts})`
604
+ );
605
+ try {
606
+ await abortableDelay(delayMs, signal);
607
+ } catch (error2) {
608
+ if (error2.message === "Request was aborted") {
609
+ throw new Error("Request cancelled by user");
610
+ }
611
+ throw error2;
612
+ }
613
+ return getCompletionWithProfile(
614
+ modelProfile,
615
+ opts,
616
+ attempt + 1,
617
+ maxAttempts,
618
+ signal
619
+ // 🔧 Pass AbortSignal to recursive call
620
+ );
621
+ }
622
+ throw error;
623
+ }
624
+ }
625
+ function createStreamProcessor(stream, signal) {
626
+ if (!stream) {
627
+ throw new Error("Stream is null or undefined");
628
+ }
629
+ return (async function* () {
630
+ const reader = stream.getReader();
631
+ const decoder = new TextDecoder("utf-8");
632
+ let buffer = "";
633
+ try {
634
+ while (true) {
635
+ if (signal?.aborted) {
636
+ break;
637
+ }
638
+ let readResult;
639
+ try {
640
+ readResult = await reader.read();
641
+ } catch (e) {
642
+ if (signal?.aborted) {
643
+ break;
644
+ }
645
+ console.error("Error reading from stream:", e);
646
+ break;
647
+ }
648
+ const { done, value } = readResult;
649
+ if (done) {
650
+ break;
651
+ }
652
+ const chunk = decoder.decode(value, { stream: true });
653
+ buffer += chunk;
654
+ let lineEnd = buffer.indexOf("\n");
655
+ while (lineEnd !== -1) {
656
+ const line = buffer.substring(0, lineEnd).trim();
657
+ buffer = buffer.substring(lineEnd + 1);
658
+ if (line === "data: [DONE]") {
659
+ continue;
660
+ }
661
+ if (line.startsWith("data: ")) {
662
+ const data = line.slice(6).trim();
663
+ if (!data) continue;
664
+ try {
665
+ const parsed = JSON.parse(data);
666
+ yield parsed;
667
+ } catch (e) {
668
+ console.error("Error parsing JSON:", data, e);
669
+ }
670
+ }
671
+ lineEnd = buffer.indexOf("\n");
672
+ }
673
+ }
674
+ if (buffer.trim()) {
675
+ const lines = buffer.trim().split("\n");
676
+ for (const line of lines) {
677
+ if (line.startsWith("data: ") && line !== "data: [DONE]") {
678
+ const data = line.slice(6).trim();
679
+ if (!data) continue;
680
+ try {
681
+ const parsed = JSON.parse(data);
682
+ yield parsed;
683
+ } catch (e) {
684
+ console.error("Error parsing final JSON:", data, e);
685
+ }
686
+ }
687
+ }
688
+ }
689
+ } catch (e) {
690
+ console.error("Unexpected error in stream processing:", e);
691
+ } finally {
692
+ try {
693
+ reader.releaseLock();
694
+ } catch (e) {
695
+ console.error("Error releasing reader lock:", e);
696
+ }
697
+ }
698
+ })();
699
+ }
700
+ function streamCompletion(stream, signal) {
701
+ return createStreamProcessor(stream, signal);
702
+ }
703
+ async function callGPT5ResponsesAPI(modelProfile, opts, signal) {
704
+ const baseURL = modelProfile?.baseURL || "https://api.openai.com/v1";
705
+ const apiKey = modelProfile?.apiKey;
706
+ const proxy = getGlobalConfig().proxy ? new ProxyAgent(getGlobalConfig().proxy) : void 0;
707
+ const headers = {
708
+ "Content-Type": "application/json",
709
+ Authorization: `Bearer ${apiKey}`
710
+ };
711
+ const responsesParams = {
712
+ model: opts.model,
713
+ input: opts.messages
714
+ // Responses API uses 'input' instead of 'messages'
715
+ };
716
+ if (opts.max_completion_tokens) {
717
+ responsesParams.max_completion_tokens = opts.max_completion_tokens;
718
+ } else if (opts.max_tokens) {
719
+ responsesParams.max_completion_tokens = opts.max_tokens;
720
+ }
721
+ if (opts.temperature === 1) {
722
+ responsesParams.temperature = 1;
723
+ }
724
+ const reasoningEffort = opts.reasoning_effort || "medium";
725
+ responsesParams.reasoning = {
726
+ effort: reasoningEffort,
727
+ // 🚀 Enable reasoning summaries for transparency in coding tasks
728
+ generate_summary: true
729
+ };
730
+ if (opts.tools && opts.tools.length > 0) {
731
+ responsesParams.tools = opts.tools;
732
+ if (opts.tool_choice) {
733
+ responsesParams.tool_choice = opts.tool_choice;
734
+ }
735
+ }
736
+ const systemMessages = opts.messages.filter((msg) => msg.role === "system");
737
+ const nonSystemMessages = opts.messages.filter((msg) => msg.role !== "system");
738
+ if (systemMessages.length > 0) {
739
+ responsesParams.instructions = systemMessages.map((msg) => msg.content).join("\n\n");
740
+ responsesParams.input = nonSystemMessages;
741
+ }
742
+ const features = getModelFeatures(opts.model);
743
+ if (features.supportsVerbosityControl) {
744
+ responsesParams.text = {
745
+ verbosity: "high"
746
+ };
747
+ }
748
+ if (opts.model.startsWith("gpt-5")) {
749
+ if (!responsesParams.reasoning) {
750
+ responsesParams.reasoning = {
751
+ effort: "medium"
752
+ // Balanced for most coding tasks
753
+ };
754
+ }
755
+ if (!responsesParams.instructions) {
756
+ responsesParams.instructions = `You are an expert programmer working in a terminal-based coding environment. Follow these guidelines:
757
+ - Provide clear, concise code solutions
758
+ - Use proper error handling and validation
759
+ - Follow coding best practices and patterns
760
+ - Explain complex logic when necessary
761
+ - Focus on maintainable, readable code`;
762
+ }
763
+ }
764
+ try {
765
+ const response = await fetch(`${baseURL}/responses`, {
766
+ method: "POST",
767
+ headers,
768
+ body: JSON.stringify(responsesParams),
769
+ dispatcher: proxy,
770
+ signal
771
+ });
772
+ if (!response.ok) {
773
+ throw new Error(`GPT-5 Responses API error: ${response.status} ${response.statusText}`);
774
+ }
775
+ const responseData = await response.json();
776
+ return convertResponsesAPIToChatCompletion(responseData);
777
+ } catch (error) {
778
+ if (signal?.aborted) {
779
+ throw new Error("Request cancelled by user");
780
+ }
781
+ throw error;
782
+ }
783
+ }
784
+ function convertResponsesAPIToChatCompletion(responsesData) {
785
+ let outputText = responsesData.output_text || "";
786
+ const usage = responsesData.usage || {};
787
+ if (responsesData.output && Array.isArray(responsesData.output)) {
788
+ const reasoningItems = responsesData.output.filter((item) => item.type === "reasoning" && item.summary);
789
+ const messageItems = responsesData.output.filter((item) => item.type === "message");
790
+ if (reasoningItems.length > 0 && messageItems.length > 0) {
791
+ const reasoningSummary = reasoningItems.map((item) => item.summary?.map((s) => s.text).join("\n")).filter(Boolean).join("\n\n");
792
+ const mainContent = messageItems.map((item) => item.content?.map((c) => c.text).join("\n")).filter(Boolean).join("\n\n");
793
+ if (reasoningSummary) {
794
+ outputText = `**\u{1F9E0} Reasoning Process:**
795
+ ${reasoningSummary}
796
+
797
+ **\u{1F4DD} Response:**
798
+ ${mainContent}`;
799
+ } else {
800
+ outputText = mainContent;
801
+ }
802
+ }
803
+ }
804
+ return {
805
+ id: responsesData.id || `chatcmpl-${Date.now()}`,
806
+ object: "chat.completion",
807
+ created: Math.floor(Date.now() / 1e3),
808
+ model: responsesData.model || "",
809
+ choices: [
810
+ {
811
+ index: 0,
812
+ message: {
813
+ role: "assistant",
814
+ content: outputText,
815
+ // 🚀 Include reasoning metadata if available
816
+ ...responsesData.reasoning && {
817
+ reasoning: {
818
+ effort: responsesData.reasoning.effort,
819
+ summary: responsesData.reasoning.summary
820
+ }
821
+ }
822
+ },
823
+ finish_reason: responsesData.status === "completed" ? "stop" : "length"
824
+ }
825
+ ],
826
+ usage: {
827
+ prompt_tokens: usage.input_tokens || 0,
828
+ completion_tokens: usage.output_tokens || 0,
829
+ total_tokens: (usage.input_tokens || 0) + (usage.output_tokens || 0),
830
+ // 🔧 GPT-5 Enhanced Usage Details
831
+ prompt_tokens_details: {
832
+ cached_tokens: usage.input_tokens_details?.cached_tokens || 0
833
+ },
834
+ completion_tokens_details: {
835
+ reasoning_tokens: usage.output_tokens_details?.reasoning_tokens || 0
836
+ }
837
+ }
838
+ };
839
+ }
840
+ async function getGPT5CompletionWithProfile(modelProfile, opts, attempt = 0, maxAttempts = 10, signal) {
841
+ const features = getModelFeatures(opts.model);
842
+ const isOfficialOpenAI = !modelProfile.baseURL || modelProfile.baseURL.includes("api.openai.com");
843
+ if (features.supportsResponsesAPI && !opts.stream && isOfficialOpenAI) {
844
+ try {
845
+ debugLogger.api("ATTEMPTING_GPT5_RESPONSES_API", {
846
+ model: opts.model,
847
+ baseURL: modelProfile.baseURL || "official",
848
+ provider: modelProfile.provider,
849
+ stream: opts.stream,
850
+ requestId: getCurrentRequest()?.id
851
+ });
852
+ const result = await callGPT5ResponsesAPI(modelProfile, opts, signal);
853
+ debugLogger.api("GPT5_RESPONSES_API_SUCCESS", {
854
+ model: opts.model,
855
+ baseURL: modelProfile.baseURL || "official",
856
+ requestId: getCurrentRequest()?.id
857
+ });
858
+ return result;
859
+ } catch (error) {
860
+ debugLogger.api("GPT5_RESPONSES_API_FALLBACK", {
861
+ model: opts.model,
862
+ error: error.message,
863
+ baseURL: modelProfile.baseURL || "official",
864
+ requestId: getCurrentRequest()?.id
865
+ });
866
+ console.warn(
867
+ `\u{1F504} GPT-5 Responses API failed, falling back to Chat Completions: ${error.message}`
868
+ );
869
+ }
870
+ } else if (!isOfficialOpenAI) {
871
+ debugLogger.api("GPT5_THIRD_PARTY_PROVIDER", {
872
+ model: opts.model,
873
+ baseURL: modelProfile.baseURL,
874
+ provider: modelProfile.provider,
875
+ supportsResponsesAPI: features.supportsResponsesAPI,
876
+ requestId: getCurrentRequest()?.id
877
+ });
878
+ console.log(`\u{1F310} Using GPT-5 via third-party provider: ${modelProfile.provider} (${modelProfile.baseURL})`);
879
+ if (modelProfile.provider === "azure") {
880
+ delete opts.reasoning_effort;
881
+ } else if (modelProfile.provider === "custom-openai") {
882
+ console.log(`\u{1F527} Applying OpenAI-compatible optimizations for custom provider`);
883
+ }
884
+ } else if (opts.stream) {
885
+ debugLogger.api("GPT5_STREAMING_MODE", {
886
+ model: opts.model,
887
+ baseURL: modelProfile.baseURL || "official",
888
+ reason: "responses_api_no_streaming",
889
+ requestId: getCurrentRequest()?.id
890
+ });
891
+ console.log(`\u{1F504} Using Chat Completions for streaming (Responses API streaming not available)`);
892
+ }
893
+ debugLogger.api("USING_CHAT_COMPLETIONS_FOR_GPT5", {
894
+ model: opts.model,
895
+ baseURL: modelProfile.baseURL || "official",
896
+ provider: modelProfile.provider,
897
+ reason: isOfficialOpenAI ? "streaming_or_fallback" : "third_party_provider",
898
+ requestId: getCurrentRequest()?.id
899
+ });
900
+ return await getCompletionWithProfile(
901
+ modelProfile,
902
+ opts,
903
+ attempt,
904
+ maxAttempts,
905
+ signal
906
+ );
907
+ }
908
+ async function fetchCustomModels(baseURL, apiKey) {
909
+ try {
910
+ const hasVersionNumber = /\/v\d+/.test(baseURL);
911
+ const cleanBaseURL = baseURL.replace(/\/+$/, "");
912
+ const modelsURL = hasVersionNumber ? `${cleanBaseURL}/models` : `${cleanBaseURL}/v1/models`;
913
+ const response = await fetch(modelsURL, {
914
+ method: "GET",
915
+ headers: {
916
+ Authorization: `Bearer ${apiKey}`,
917
+ "Content-Type": "application/json"
918
+ }
919
+ });
920
+ if (!response.ok) {
921
+ if (response.status === 401) {
922
+ throw new Error(
923
+ "Invalid API key. Please check your API key and try again."
924
+ );
925
+ } else if (response.status === 403) {
926
+ throw new Error(
927
+ "API key does not have permission to access models. Please check your API key permissions."
928
+ );
929
+ } else if (response.status === 404) {
930
+ throw new Error(
931
+ "API endpoint not found. Please check if the base URL is correct and supports the /models endpoint."
932
+ );
933
+ } else if (response.status === 429) {
934
+ throw new Error(
935
+ "Too many requests. Please wait a moment and try again."
936
+ );
937
+ } else if (response.status >= 500) {
938
+ throw new Error(
939
+ "API service is temporarily unavailable. Please try again later."
940
+ );
941
+ } else {
942
+ throw new Error(
943
+ `Unable to connect to API (${response.status}). Please check your base URL, API key, and internet connection.`
944
+ );
945
+ }
946
+ }
947
+ const data = await response.json();
948
+ const hasDataArray = (obj) => {
949
+ return typeof obj === "object" && obj !== null && "data" in obj && Array.isArray(obj.data);
950
+ };
951
+ const hasModelsArray = (obj) => {
952
+ return typeof obj === "object" && obj !== null && "models" in obj && Array.isArray(obj.models);
953
+ };
954
+ let models = [];
955
+ if (hasDataArray(data)) {
956
+ models = data.data;
957
+ } else if (Array.isArray(data)) {
958
+ models = data;
959
+ } else if (hasModelsArray(data)) {
960
+ models = data.models;
961
+ } else {
962
+ throw new Error(
963
+ 'API returned unexpected response format. Expected an array of models or an object with a "data" or "models" array.'
964
+ );
965
+ }
966
+ if (!Array.isArray(models)) {
967
+ throw new Error("API response format error: models data is not an array.");
968
+ }
969
+ return models;
970
+ } catch (error) {
971
+ if (error instanceof Error && (error.message.includes("API key") || error.message.includes("API endpoint") || error.message.includes("API service") || error.message.includes("response format"))) {
972
+ throw error;
973
+ }
974
+ console.error("Failed to fetch custom API models:", error);
975
+ if (error instanceof Error && error.message.includes("fetch")) {
976
+ throw new Error(
977
+ "Unable to connect to the API. Please check the base URL and your internet connection."
978
+ );
979
+ }
980
+ throw new Error(
981
+ "Failed to fetch models from custom API. Please check your configuration and try again."
982
+ );
983
+ }
984
+ }
985
+ export {
986
+ applyModelSpecificTransformations,
987
+ callGPT5ResponsesAPI,
988
+ createStreamProcessor,
989
+ fetchCustomModels,
990
+ getCompletionWithProfile,
991
+ getGPT5CompletionWithProfile,
992
+ getModelFeatures,
993
+ streamCompletion
994
+ };
995
+ //# sourceMappingURL=openai.js.map