@within-7/minto 0.1.5 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. package/dist/commands/agents/AgentsCommand.js +2342 -0
  2. package/dist/commands/agents/AgentsCommand.js.map +7 -0
  3. package/dist/commands/agents/constants.js +58 -0
  4. package/dist/commands/agents/constants.js.map +7 -0
  5. package/dist/commands/agents/index.js +37 -0
  6. package/dist/commands/agents/index.js.map +7 -0
  7. package/dist/commands/agents/types.js +10 -0
  8. package/dist/commands/agents/types.js.map +7 -0
  9. package/dist/commands/agents/utils/fileOperations.js +185 -0
  10. package/dist/commands/agents/utils/fileOperations.js.map +7 -0
  11. package/dist/commands/agents/utils/index.js +21 -0
  12. package/dist/commands/agents/utils/index.js.map +7 -0
  13. package/dist/commands/bug.js +2 -2
  14. package/dist/commands/bug.js.map +2 -2
  15. package/dist/commands/compact.js +5 -5
  16. package/dist/commands/compact.js.map +2 -2
  17. package/dist/commands/ctx_viz.js +55 -22
  18. package/dist/commands/ctx_viz.js.map +2 -2
  19. package/dist/commands/mcp-interactive.js +11 -11
  20. package/dist/commands/mcp-interactive.js.map +2 -2
  21. package/dist/commands/model.js +94 -32
  22. package/dist/commands/model.js.map +3 -3
  23. package/dist/commands/plugin/AddMarketplaceForm.js +49 -21
  24. package/dist/commands/plugin/AddMarketplaceForm.js.map +2 -2
  25. package/dist/commands/plugin/ConfirmDialog.js +38 -26
  26. package/dist/commands/plugin/ConfirmDialog.js.map +2 -2
  27. package/dist/commands/plugin/InstalledPluginsByMarketplace.js +24 -8
  28. package/dist/commands/plugin/InstalledPluginsByMarketplace.js.map +2 -2
  29. package/dist/commands/plugin/InstalledPluginsManager.js +3 -1
  30. package/dist/commands/plugin/InstalledPluginsManager.js.map +2 -2
  31. package/dist/commands/plugin/MainMenu.js +16 -7
  32. package/dist/commands/plugin/MainMenu.js.map +2 -2
  33. package/dist/commands/plugin/MarketplaceManager.js +84 -39
  34. package/dist/commands/plugin/MarketplaceManager.js.map +2 -2
  35. package/dist/commands/plugin/MarketplaceSelector.js +7 -3
  36. package/dist/commands/plugin/MarketplaceSelector.js.map +2 -2
  37. package/dist/commands/plugin/PlaceholderScreen.js +16 -2
  38. package/dist/commands/plugin/PlaceholderScreen.js.map +2 -2
  39. package/dist/commands/plugin/PluginBrowser.js +4 -2
  40. package/dist/commands/plugin/PluginBrowser.js.map +2 -2
  41. package/dist/commands/plugin/PluginDetailsInstall.js +12 -6
  42. package/dist/commands/plugin/PluginDetailsInstall.js.map +2 -2
  43. package/dist/commands/plugin/PluginDetailsManage.js +14 -5
  44. package/dist/commands/plugin/PluginDetailsManage.js.map +2 -2
  45. package/dist/commands/plugin/example-usage.js.map +2 -2
  46. package/dist/commands/plugin/utils.js.map +2 -2
  47. package/dist/commands/plugin.js +226 -46
  48. package/dist/commands/plugin.js.map +2 -2
  49. package/dist/commands/refreshCommands.js +6 -3
  50. package/dist/commands/refreshCommands.js.map +2 -2
  51. package/dist/commands/resume.js +2 -1
  52. package/dist/commands/resume.js.map +2 -2
  53. package/dist/commands/setup.js +19 -5
  54. package/dist/commands/setup.js.map +2 -2
  55. package/dist/commands/terminalSetup.js +2 -2
  56. package/dist/commands/terminalSetup.js.map +1 -1
  57. package/dist/commands.js +14 -30
  58. package/dist/commands.js.map +2 -2
  59. package/dist/components/AskUserQuestionDialog/AskUserQuestionDialog.js.map +2 -2
  60. package/dist/components/AskUserQuestionDialog/QuestionView.js +10 -1
  61. package/dist/components/AskUserQuestionDialog/QuestionView.js.map +2 -2
  62. package/dist/components/BackgroundTasksPanel.js +5 -1
  63. package/dist/components/BackgroundTasksPanel.js.map +2 -2
  64. package/dist/components/Config.js +17 -4
  65. package/dist/components/Config.js.map +2 -2
  66. package/dist/components/ConsoleOAuthFlow.js.map +2 -2
  67. package/dist/components/CustomSelect/select-option.js +4 -1
  68. package/dist/components/CustomSelect/select-option.js.map +2 -2
  69. package/dist/components/Help.js +6 -8
  70. package/dist/components/Help.js.map +2 -2
  71. package/dist/components/Logo.js +1 -1
  72. package/dist/components/Logo.js.map +2 -2
  73. package/dist/components/ModelListManager.js.map +2 -2
  74. package/dist/components/ModelSelector/ModelSelector.js +2030 -0
  75. package/dist/components/ModelSelector/ModelSelector.js.map +7 -0
  76. package/dist/components/ModelSelector/ScreenContainer.js +27 -0
  77. package/dist/components/ModelSelector/ScreenContainer.js.map +7 -0
  78. package/dist/components/ModelSelector/constants.js +37 -0
  79. package/dist/components/ModelSelector/constants.js.map +7 -0
  80. package/dist/components/ModelSelector/hooks/index.js +5 -0
  81. package/dist/components/ModelSelector/hooks/index.js.map +7 -0
  82. package/dist/components/ModelSelector/hooks/useEscapeNavigation.js +21 -0
  83. package/dist/components/ModelSelector/hooks/useEscapeNavigation.js.map +7 -0
  84. package/dist/components/ModelSelector/index.js +17 -0
  85. package/dist/components/ModelSelector/index.js.map +7 -0
  86. package/dist/components/ModelSelector/types.js +1 -0
  87. package/dist/components/ModelSelector/types.js.map +7 -0
  88. package/dist/components/PressEnterToContinue.js +1 -1
  89. package/dist/components/PressEnterToContinue.js.map +2 -2
  90. package/dist/components/ProjectOnboarding.js +1 -1
  91. package/dist/components/ProjectOnboarding.js.map +2 -2
  92. package/dist/components/PromptInput.js +88 -37
  93. package/dist/components/PromptInput.js.map +2 -2
  94. package/dist/components/QuitSummary.js +17 -10
  95. package/dist/components/QuitSummary.js.map +2 -2
  96. package/dist/components/SentryErrorBoundary.js.map +2 -2
  97. package/dist/components/StreamingBashOutput.js.map +2 -2
  98. package/dist/components/StructuredDiff.js.map +2 -2
  99. package/dist/components/SubagentProgress.js.map +2 -2
  100. package/dist/components/TaskCard.js.map +2 -2
  101. package/dist/components/TextInput.js.map +1 -1
  102. package/dist/components/TodoItem.js.map +1 -1
  103. package/dist/components/binary-feedback/BinaryFeedbackOption.js +1 -3
  104. package/dist/components/binary-feedback/BinaryFeedbackOption.js.map +2 -2
  105. package/dist/components/messages/AssistantLocalCommandOutputMessage.js.map +1 -1
  106. package/dist/components/messages/AssistantToolUseMessage.js +3 -1
  107. package/dist/components/messages/AssistantToolUseMessage.js.map +2 -2
  108. package/dist/components/messages/TaskProgressMessage.js.map +2 -2
  109. package/dist/components/messages/TaskToolMessage.js.map +2 -2
  110. package/dist/components/messages/UserToolResultMessage/utils.js.map +2 -2
  111. package/dist/components/permissions/FileEditPermissionRequest/FileEditToolDiff.js.map +2 -2
  112. package/dist/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.js.map +2 -2
  113. package/dist/components/permissions/hooks.js.map +2 -2
  114. package/dist/constants/modelCapabilities.js +1 -1
  115. package/dist/constants/modelCapabilities.js.map +2 -2
  116. package/dist/constants/prompts.js.map +1 -1
  117. package/dist/constants/timing.js +34 -0
  118. package/dist/constants/timing.js.map +7 -0
  119. package/dist/entrypoints/cli.js +128 -33
  120. package/dist/entrypoints/cli.js.map +3 -3
  121. package/dist/entrypoints/mcp.js +13 -18
  122. package/dist/entrypoints/mcp.js.map +2 -2
  123. package/dist/hooks/useCanUseTool.js.map +2 -2
  124. package/dist/hooks/useCancelRequest.js.map +1 -1
  125. package/dist/hooks/useHistorySearch.js.map +2 -2
  126. package/dist/hooks/useLogStartupTime.js.map +2 -2
  127. package/dist/hooks/usePermissionRequestLogging.js.map +2 -2
  128. package/dist/hooks/useTextInput.js.map +1 -1
  129. package/dist/hooks/useUnifiedCompletion.js +493 -394
  130. package/dist/hooks/useUnifiedCompletion.js.map +2 -2
  131. package/dist/index.js.map +2 -2
  132. package/dist/permissions.js +4 -7
  133. package/dist/permissions.js.map +2 -2
  134. package/dist/query.js +6 -1
  135. package/dist/query.js.map +2 -2
  136. package/dist/screens/REPL.js +72 -36
  137. package/dist/screens/REPL.js.map +2 -2
  138. package/dist/screens/ResumeConversation.js +2 -1
  139. package/dist/screens/ResumeConversation.js.map +2 -2
  140. package/dist/services/adapters/base.js.map +2 -2
  141. package/dist/services/adapters/chatCompletions.js.map +2 -2
  142. package/dist/services/adapters/responsesAPI.js +3 -1
  143. package/dist/services/adapters/responsesAPI.js.map +2 -2
  144. package/dist/services/claude.js +327 -328
  145. package/dist/services/claude.js.map +2 -2
  146. package/dist/services/customCommands.js +6 -1
  147. package/dist/services/customCommands.js.map +2 -2
  148. package/dist/services/fileFreshness.js.map +2 -2
  149. package/dist/services/gpt5ConnectionTest.js +20 -7
  150. package/dist/services/gpt5ConnectionTest.js.map +2 -2
  151. package/dist/services/hookExecutor.js +6 -12
  152. package/dist/services/hookExecutor.js.map +2 -2
  153. package/dist/services/mcpClient.js +29 -2
  154. package/dist/services/mcpClient.js.map +2 -2
  155. package/dist/services/mentionProcessor.js +23 -10
  156. package/dist/services/mentionProcessor.js.map +2 -2
  157. package/dist/services/modelAdapterFactory.js.map +2 -2
  158. package/dist/services/oauth.js.map +2 -2
  159. package/dist/services/openai.js +109 -72
  160. package/dist/services/openai.js.map +3 -3
  161. package/dist/services/responseStateManager.js.map +2 -2
  162. package/dist/services/systemReminder.js.map +2 -2
  163. package/dist/tools/ArchitectTool/ArchitectTool.js.map +1 -1
  164. package/dist/tools/AskExpertModelTool/AskExpertModelTool.js +14 -8
  165. package/dist/tools/AskExpertModelTool/AskExpertModelTool.js.map +2 -2
  166. package/dist/tools/BashOutputTool/BashOutputTool.js.map +2 -2
  167. package/dist/tools/BashTool/BashTool.js.map +2 -2
  168. package/dist/tools/FileReadTool/FileReadTool.js.map +1 -1
  169. package/dist/tools/FileWriteTool/FileWriteTool.js.map +2 -2
  170. package/dist/tools/GrepTool/GrepTool.js +1 -4
  171. package/dist/tools/GrepTool/GrepTool.js.map +2 -2
  172. package/dist/tools/MultiEditTool/MultiEditTool.js +4 -1
  173. package/dist/tools/MultiEditTool/MultiEditTool.js.map +2 -2
  174. package/dist/tools/NotebookReadTool/NotebookReadTool.js +3 -1
  175. package/dist/tools/NotebookReadTool/NotebookReadTool.js.map +2 -2
  176. package/dist/tools/SkillTool/SkillTool.js +12 -6
  177. package/dist/tools/SkillTool/SkillTool.js.map +2 -2
  178. package/dist/tools/TaskTool/TaskTool.js +14 -5
  179. package/dist/tools/TaskTool/TaskTool.js.map +2 -2
  180. package/dist/tools/TaskTool/prompt.js.map +2 -2
  181. package/dist/tools/ThinkTool/ThinkTool.js +6 -1
  182. package/dist/tools/ThinkTool/ThinkTool.js.map +2 -2
  183. package/dist/tools/TodoWriteTool/TodoWriteTool.js +23 -3
  184. package/dist/tools/TodoWriteTool/TodoWriteTool.js.map +2 -2
  185. package/dist/tools/URLFetcherTool/URLFetcherTool.js +2 -2
  186. package/dist/tools/URLFetcherTool/URLFetcherTool.js.map +2 -2
  187. package/dist/tools/URLFetcherTool/cache.js +6 -3
  188. package/dist/tools/URLFetcherTool/cache.js.map +2 -2
  189. package/dist/tools/URLFetcherTool/htmlToMarkdown.js +3 -1
  190. package/dist/tools/URLFetcherTool/htmlToMarkdown.js.map +2 -2
  191. package/dist/tools/WebSearchTool/WebSearchTool.js.map +2 -2
  192. package/dist/tools/WebSearchTool/prompt.js.map +2 -2
  193. package/dist/tools/WebSearchTool/searchProviders.js +15 -6
  194. package/dist/tools/WebSearchTool/searchProviders.js.map +2 -2
  195. package/dist/tools.js +4 -1
  196. package/dist/tools.js.map +2 -2
  197. package/dist/types/core.js +1 -0
  198. package/dist/types/core.js.map +7 -0
  199. package/dist/types/hooks.js +1 -4
  200. package/dist/types/hooks.js.map +2 -2
  201. package/dist/types/marketplace.js +8 -2
  202. package/dist/types/marketplace.js.map +2 -2
  203. package/dist/types/plugin.js +9 -6
  204. package/dist/types/plugin.js.map +2 -2
  205. package/dist/utils/BackgroundShellManager.js +76 -10
  206. package/dist/utils/BackgroundShellManager.js.map +2 -2
  207. package/dist/utils/PersistentShell.js +7 -2
  208. package/dist/utils/PersistentShell.js.map +2 -2
  209. package/dist/utils/advancedFuzzyMatcher.js +4 -1
  210. package/dist/utils/advancedFuzzyMatcher.js.map +2 -2
  211. package/dist/utils/agentLoader.js +69 -35
  212. package/dist/utils/agentLoader.js.map +2 -2
  213. package/dist/utils/agentStorage.js.map +2 -2
  214. package/dist/utils/async.js +163 -0
  215. package/dist/utils/async.js.map +7 -0
  216. package/dist/utils/autoUpdater.js +8 -2
  217. package/dist/utils/autoUpdater.js.map +2 -2
  218. package/dist/utils/commands.js +23 -11
  219. package/dist/utils/commands.js.map +2 -2
  220. package/dist/utils/commonUnixCommands.js +3 -1
  221. package/dist/utils/commonUnixCommands.js.map +2 -2
  222. package/dist/utils/compressionMode.js.map +2 -2
  223. package/dist/utils/config.js +30 -14
  224. package/dist/utils/config.js.map +2 -2
  225. package/dist/utils/debugLogger.js.map +2 -2
  226. package/dist/utils/env.js.map +2 -2
  227. package/dist/utils/envConfig.js +82 -0
  228. package/dist/utils/envConfig.js.map +7 -0
  229. package/dist/utils/errorHandling.js +89 -0
  230. package/dist/utils/errorHandling.js.map +7 -0
  231. package/dist/utils/expertChatStorage.js.map +2 -2
  232. package/dist/utils/fuzzyMatcher.js +13 -7
  233. package/dist/utils/fuzzyMatcher.js.map +2 -2
  234. package/dist/utils/hookManager.js +14 -4
  235. package/dist/utils/hookManager.js.map +2 -2
  236. package/dist/utils/log.js.map +2 -2
  237. package/dist/utils/marketplaceManager.js +44 -9
  238. package/dist/utils/marketplaceManager.js.map +2 -2
  239. package/dist/utils/messageContextManager.js.map +1 -1
  240. package/dist/utils/messages.js +6 -3
  241. package/dist/utils/messages.js.map +2 -2
  242. package/dist/utils/model.js +3 -1
  243. package/dist/utils/model.js.map +2 -2
  244. package/dist/utils/pluginInstaller.js +3 -15
  245. package/dist/utils/pluginInstaller.js.map +2 -2
  246. package/dist/utils/pluginLoader.js +41 -13
  247. package/dist/utils/pluginLoader.js.map +2 -2
  248. package/dist/utils/pluginRegistry.js.map +2 -2
  249. package/dist/utils/pluginValidator.js +71 -49
  250. package/dist/utils/pluginValidator.js.map +2 -2
  251. package/dist/utils/ptyCompat.js.map +2 -2
  252. package/dist/utils/roundConverter.js.map +2 -2
  253. package/dist/utils/secureFile.js +43 -14
  254. package/dist/utils/secureFile.js.map +2 -2
  255. package/dist/utils/sessionState.js.map +2 -2
  256. package/dist/utils/skillLoader.js.map +2 -2
  257. package/dist/utils/teamConfig.js +7 -4
  258. package/dist/utils/teamConfig.js.map +2 -2
  259. package/dist/utils/theme.js.map +2 -2
  260. package/dist/utils/thinking.js.map +2 -2
  261. package/dist/utils/unaryLogging.js.map +2 -2
  262. package/dist/version.js +2 -2
  263. package/dist/version.js.map +1 -1
  264. package/package.json +5 -5
@@ -1,41 +1,26 @@
1
1
  import { getGlobalConfig } from "../utils/config.js";
2
2
  import { ProxyAgent, fetch } from "undici";
3
3
  import { setSessionState, getSessionState } from "../utils/sessionState.js";
4
- import { debug as debugLogger, getCurrentRequest, logAPIError } from "../utils/debugLogger.js";
4
+ import {
5
+ debug as debugLogger,
6
+ getCurrentRequest,
7
+ logAPIError
8
+ } from "../utils/debugLogger.js";
9
+ import { logError } from "../utils/log.js";
10
+ import { abortableDelay, DEFAULT_RETRY_CONFIG } from "../utils/async.js";
5
11
  const RETRY_CONFIG = {
6
- BASE_DELAY_MS: 1e3,
7
- MAX_DELAY_MS: 32e3,
8
- MAX_SERVER_DELAY_MS: 6e4,
9
- JITTER_FACTOR: 0.1
12
+ ...DEFAULT_RETRY_CONFIG
10
13
  };
11
14
  function getRetryDelay(attempt, retryAfter) {
12
15
  if (retryAfter) {
13
16
  const retryAfterMs = parseInt(retryAfter) * 1e3;
14
17
  if (!isNaN(retryAfterMs) && retryAfterMs > 0) {
15
- return Math.min(retryAfterMs, RETRY_CONFIG.MAX_SERVER_DELAY_MS);
18
+ return Math.min(retryAfterMs, RETRY_CONFIG.maxServerDelayMs);
16
19
  }
17
20
  }
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
- });
21
+ const delay = RETRY_CONFIG.baseDelayMs * Math.pow(2, attempt - 1);
22
+ const jitter = Math.random() * RETRY_CONFIG.jitterFactor * delay;
23
+ return Math.min(delay + jitter, RETRY_CONFIG.maxDelayMs);
39
24
  }
40
25
  var ModelErrorType = /* @__PURE__ */ ((ModelErrorType2) => {
41
26
  ModelErrorType2["MaxLength"] = "1024";
@@ -70,7 +55,10 @@ const GPT5_ERROR_HANDLERS = [
70
55
  );
71
56
  },
72
57
  fix: async (opts) => {
73
- console.log(`\u{1F527} GPT-5 Fix: Converting max_tokens (${opts.max_tokens}) to max_completion_tokens`);
58
+ debugLogger.info("GPT5_FIX", {
59
+ action: "convert_max_tokens",
60
+ from: opts.max_tokens
61
+ });
74
62
  if ("max_tokens" in opts) {
75
63
  opts.max_completion_tokens = opts.max_tokens;
76
64
  delete opts.max_tokens;
@@ -84,7 +72,11 @@ const GPT5_ERROR_HANDLERS = [
84
72
  return lowerMsg.includes("temperature") && (lowerMsg.includes("only supports") || lowerMsg.includes("must be 1") || lowerMsg.includes("invalid temperature"));
85
73
  },
86
74
  fix: async (opts) => {
87
- console.log(`\u{1F527} GPT-5 Fix: Adjusting temperature from ${opts.temperature} to 1`);
75
+ debugLogger.info("GPT5_FIX", {
76
+ action: "adjust_temperature",
77
+ from: opts.temperature,
78
+ to: 1
79
+ });
88
80
  opts.temperature = 1;
89
81
  }
90
82
  }
@@ -173,11 +165,6 @@ ${description}
173
165
  }
174
166
  }
175
167
  ];
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
168
  const MODEL_FEATURES = {
182
169
  // OpenAI thinking models
183
170
  o1: { usesMaxCompletionTokens: true },
@@ -250,15 +237,22 @@ function applyModelSpecificTransformations(opts) {
250
237
  const isGPT5 = opts.model.toLowerCase().includes("gpt-5");
251
238
  if (isGPT5 || features.usesMaxCompletionTokens) {
252
239
  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}`);
240
+ debugLogger.info("OPENAI_TRANSFORM", {
241
+ action: "max_tokens_to_completion",
242
+ model: opts.model,
243
+ value: opts.max_tokens
244
+ });
254
245
  opts.max_completion_tokens = opts.max_tokens;
255
246
  delete opts.max_tokens;
256
247
  }
257
248
  if (features.requiresTemperatureOne && "temperature" in opts) {
258
249
  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
- );
250
+ debugLogger.info("OPENAI_TRANSFORM", {
251
+ action: "temperature_constraint",
252
+ model: opts.model,
253
+ from: opts.temperature,
254
+ to: 1
255
+ });
262
256
  opts.temperature = 1;
263
257
  }
264
258
  }
@@ -310,16 +304,22 @@ async function tryWithEndpointFallback(baseURL, opts, headers, provider, proxy,
310
304
  return { response, endpoint };
311
305
  }
312
306
  if (response.status === 404 && endpointsToTry.length > 1) {
313
- console.log(
314
- `Endpoint ${endpoint} returned 404, trying next endpoint...`
315
- );
307
+ debugLogger.info("OPENAI_ENDPOINT", {
308
+ status: 404,
309
+ endpoint,
310
+ action: "trying_next"
311
+ });
316
312
  continue;
317
313
  }
318
314
  return { response, endpoint };
319
315
  } catch (error) {
320
316
  lastError = error;
321
317
  if (endpointsToTry.indexOf(endpoint) < endpointsToTry.length - 1) {
322
- console.log(`Network error on ${endpoint}, trying next endpoint...`);
318
+ debugLogger.warn("OPENAI_ENDPOINT", {
319
+ error: "network_error",
320
+ endpoint,
321
+ action: "trying_next"
322
+ });
323
323
  continue;
324
324
  }
325
325
  }
@@ -400,7 +400,6 @@ async function getCompletionWithProfile(modelProfile, opts, attempt = 0, maxAtte
400
400
  "custom-openai"
401
401
  ].includes(provider);
402
402
  let response2;
403
- let usedEndpoint2;
404
403
  if (isOpenAICompatible2 && provider !== "azure") {
405
404
  const result = await tryWithEndpointFallback(
406
405
  baseURL,
@@ -412,7 +411,6 @@ async function getCompletionWithProfile(modelProfile, opts, attempt = 0, maxAtte
412
411
  // 🔧 Pass AbortSignal to endpoint fallback
413
412
  );
414
413
  response2 = result.response;
415
- usedEndpoint2 = result.endpoint;
416
414
  } else {
417
415
  response2 = await fetch(`${baseURL}${endpoint}`, {
418
416
  method: "POST",
@@ -422,7 +420,6 @@ async function getCompletionWithProfile(modelProfile, opts, attempt = 0, maxAtte
422
420
  signal
423
421
  // 🔧 CRITICAL FIX: Connect AbortSignal to fetch call
424
422
  });
425
- usedEndpoint2 = endpoint;
426
423
  }
427
424
  if (!response2.ok) {
428
425
  if (signal?.aborted) {
@@ -438,10 +435,22 @@ async function getCompletionWithProfile(modelProfile, opts, attempt = 0, maxAtte
438
435
  const handlers = isGPT5 ? [...GPT5_ERROR_HANDLERS, ...ERROR_HANDLERS] : ERROR_HANDLERS;
439
436
  for (const handler of handlers) {
440
437
  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);
438
+ debugLogger.info("OPENAI_ERROR_HANDLER", {
439
+ type: handler.type,
440
+ model: opts.model,
441
+ error: errorMessage
442
+ });
443
+ setModelError(
444
+ baseURL || "",
445
+ opts.model,
446
+ handler.type,
447
+ errorMessage
448
+ );
443
449
  await handler.fix(opts);
444
- console.log(`\u{1F527} Applied fix for ${handler.type}, retrying...`);
450
+ debugLogger.info("OPENAI_ERROR_HANDLER", {
451
+ action: "fix_applied",
452
+ type: handler.type
453
+ });
445
454
  return getCompletionWithProfile(
446
455
  modelProfile,
447
456
  opts,
@@ -451,7 +460,10 @@ async function getCompletionWithProfile(modelProfile, opts, attempt = 0, maxAtte
451
460
  );
452
461
  }
453
462
  }
454
- console.log(`\u26A0\uFE0F Unhandled API error (${response2.status}): ${errorMessage}`);
463
+ debugLogger.warn("OPENAI_UNHANDLED_ERROR", {
464
+ status: response2.status,
465
+ error: errorMessage
466
+ });
455
467
  logAPIError({
456
468
  model: opts.model,
457
469
  endpoint: `${baseURL}${endpoint}`,
@@ -462,7 +474,7 @@ async function getCompletionWithProfile(modelProfile, opts, attempt = 0, maxAtte
462
474
  provider
463
475
  });
464
476
  } catch (parseError) {
465
- console.log(`\u26A0\uFE0F Could not parse error response (${response2.status})`);
477
+ debugLogger.warn("OPENAI_PARSE_ERROR", { status: response2.status });
466
478
  logAPIError({
467
479
  model: opts.model,
468
480
  endpoint: `${baseURL}${endpoint}`,
@@ -512,7 +524,6 @@ async function getCompletionWithProfile(modelProfile, opts, attempt = 0, maxAtte
512
524
  "custom-openai"
513
525
  ].includes(provider);
514
526
  let response;
515
- let usedEndpoint;
516
527
  if (isOpenAICompatible && provider !== "azure") {
517
528
  const result = await tryWithEndpointFallback(
518
529
  baseURL,
@@ -524,7 +535,6 @@ async function getCompletionWithProfile(modelProfile, opts, attempt = 0, maxAtte
524
535
  // 🔧 Pass AbortSignal to endpoint fallback
525
536
  );
526
537
  response = result.response;
527
- usedEndpoint = result.endpoint;
528
538
  } else {
529
539
  response = await fetch(`${baseURL}${endpoint}`, {
530
540
  method: "POST",
@@ -534,7 +544,6 @@ async function getCompletionWithProfile(modelProfile, opts, attempt = 0, maxAtte
534
544
  signal
535
545
  // 🔧 CRITICAL FIX: Connect AbortSignal to non-streaming fetch call
536
546
  });
537
- usedEndpoint = endpoint;
538
547
  }
539
548
  if (!response.ok) {
540
549
  if (signal?.aborted) {
@@ -550,10 +559,17 @@ async function getCompletionWithProfile(modelProfile, opts, attempt = 0, maxAtte
550
559
  const handlers = isGPT5 ? [...GPT5_ERROR_HANDLERS, ...ERROR_HANDLERS] : ERROR_HANDLERS;
551
560
  for (const handler of handlers) {
552
561
  if (handler.detect(errorMessage)) {
553
- console.log(`\u{1F527} Detected ${handler.type} error for ${opts.model}: ${errorMessage}`);
562
+ debugLogger.info("OPENAI_ERROR_HANDLER", {
563
+ type: handler.type,
564
+ model: opts.model,
565
+ error: errorMessage
566
+ });
554
567
  setModelError(baseURL || "", opts.model, handler.type, errorMessage);
555
568
  await handler.fix(opts);
556
- console.log(`\u{1F527} Applied fix for ${handler.type}, retrying...`);
569
+ debugLogger.info("OPENAI_ERROR_HANDLER", {
570
+ action: "fix_applied",
571
+ type: handler.type
572
+ });
557
573
  return getCompletionWithProfile(
558
574
  modelProfile,
559
575
  opts,
@@ -563,9 +579,12 @@ async function getCompletionWithProfile(modelProfile, opts, attempt = 0, maxAtte
563
579
  );
564
580
  }
565
581
  }
566
- console.log(`\u26A0\uFE0F Unhandled API error (${response.status}): ${errorMessage}`);
582
+ debugLogger.warn("OPENAI_UNHANDLED_ERROR", {
583
+ status: response.status,
584
+ error: errorMessage
585
+ });
567
586
  } catch (parseError) {
568
- console.log(`\u26A0\uFE0F Could not parse error response (${response.status})`);
587
+ debugLogger.warn("OPENAI_PARSE_ERROR", { status: response.status });
569
588
  }
570
589
  const delayMs = getRetryDelay(attempt);
571
590
  console.log(
@@ -642,7 +661,7 @@ function createStreamProcessor(stream, signal) {
642
661
  if (signal?.aborted) {
643
662
  break;
644
663
  }
645
- console.error("Error reading from stream:", e);
664
+ logError(e);
646
665
  break;
647
666
  }
648
667
  const { done, value } = readResult;
@@ -665,7 +684,10 @@ function createStreamProcessor(stream, signal) {
665
684
  const parsed = JSON.parse(data);
666
685
  yield parsed;
667
686
  } catch (e) {
668
- console.error("Error parsing JSON:", data, e);
687
+ debugLogger.warn("STREAM_PARSE_ERROR", {
688
+ data: data.substring(0, 100),
689
+ error: String(e)
690
+ });
669
691
  }
670
692
  }
671
693
  lineEnd = buffer.indexOf("\n");
@@ -681,18 +703,21 @@ function createStreamProcessor(stream, signal) {
681
703
  const parsed = JSON.parse(data);
682
704
  yield parsed;
683
705
  } catch (e) {
684
- console.error("Error parsing final JSON:", data, e);
706
+ debugLogger.warn("STREAM_PARSE_ERROR", {
707
+ data: data.substring(0, 100),
708
+ error: String(e),
709
+ final: true
710
+ });
685
711
  }
686
712
  }
687
713
  }
688
714
  }
689
715
  } catch (e) {
690
- console.error("Unexpected error in stream processing:", e);
716
+ logError(e);
691
717
  } finally {
692
718
  try {
693
719
  reader.releaseLock();
694
720
  } catch (e) {
695
- console.error("Error releasing reader lock:", e);
696
721
  }
697
722
  }
698
723
  })();
@@ -770,7 +795,9 @@ async function callGPT5ResponsesAPI(modelProfile, opts, signal) {
770
795
  signal
771
796
  });
772
797
  if (!response.ok) {
773
- throw new Error(`GPT-5 Responses API error: ${response.status} ${response.statusText}`);
798
+ throw new Error(
799
+ `GPT-5 Responses API error: ${response.status} ${response.statusText}`
800
+ );
774
801
  }
775
802
  const responseData = await response.json();
776
803
  return convertResponsesAPIToChatCompletion(responseData);
@@ -785,8 +812,12 @@ function convertResponsesAPIToChatCompletion(responsesData) {
785
812
  let outputText = responsesData.output_text || "";
786
813
  const usage = responsesData.usage || {};
787
814
  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");
815
+ const reasoningItems = responsesData.output.filter(
816
+ (item) => item.type === "reasoning" && item.summary
817
+ );
818
+ const messageItems = responsesData.output.filter(
819
+ (item) => item.type === "message"
820
+ );
790
821
  if (reasoningItems.length > 0 && messageItems.length > 0) {
791
822
  const reasoningSummary = reasoningItems.map((item) => item.summary?.map((s) => s.text).join("\n")).filter(Boolean).join("\n\n");
792
823
  const mainContent = messageItems.map((item) => item.content?.map((c) => c.text).join("\n")).filter(Boolean).join("\n\n");
@@ -863,9 +894,10 @@ async function getGPT5CompletionWithProfile(modelProfile, opts, attempt = 0, max
863
894
  baseURL: modelProfile.baseURL || "official",
864
895
  requestId: getCurrentRequest()?.id
865
896
  });
866
- console.warn(
867
- `\u{1F504} GPT-5 Responses API failed, falling back to Chat Completions: ${error.message}`
868
- );
897
+ debugLogger.warn("GPT5_FALLBACK", {
898
+ reason: "responses_api_failed",
899
+ error: error.message
900
+ });
869
901
  }
870
902
  } else if (!isOfficialOpenAI) {
871
903
  debugLogger.api("GPT5_THIRD_PARTY_PROVIDER", {
@@ -875,11 +907,16 @@ async function getGPT5CompletionWithProfile(modelProfile, opts, attempt = 0, max
875
907
  supportsResponsesAPI: features.supportsResponsesAPI,
876
908
  requestId: getCurrentRequest()?.id
877
909
  });
878
- console.log(`\u{1F310} Using GPT-5 via third-party provider: ${modelProfile.provider} (${modelProfile.baseURL})`);
910
+ debugLogger.info("GPT5_THIRD_PARTY", {
911
+ provider: modelProfile.provider,
912
+ baseURL: modelProfile.baseURL
913
+ });
879
914
  if (modelProfile.provider === "azure") {
880
915
  delete opts.reasoning_effort;
881
916
  } else if (modelProfile.provider === "custom-openai") {
882
- console.log(`\u{1F527} Applying OpenAI-compatible optimizations for custom provider`);
917
+ debugLogger.info("GPT5_CUSTOM_OPTIMIZATIONS", {
918
+ provider: "custom-openai"
919
+ });
883
920
  }
884
921
  } else if (opts.stream) {
885
922
  debugLogger.api("GPT5_STREAMING_MODE", {
@@ -888,7 +925,7 @@ async function getGPT5CompletionWithProfile(modelProfile, opts, attempt = 0, max
888
925
  reason: "responses_api_no_streaming",
889
926
  requestId: getCurrentRequest()?.id
890
927
  });
891
- console.log(`\u{1F504} Using Chat Completions for streaming (Responses API streaming not available)`);
928
+ debugLogger.info("GPT5_STREAMING", { reason: "responses_api_no_streaming" });
892
929
  }
893
930
  debugLogger.api("USING_CHAT_COMPLETIONS_FOR_GPT5", {
894
931
  model: opts.model,
@@ -971,7 +1008,7 @@ async function fetchCustomModels(baseURL, apiKey) {
971
1008
  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
1009
  throw error;
973
1010
  }
974
- console.error("Failed to fetch custom API models:", error);
1011
+ logError(error);
975
1012
  if (error instanceof Error && error.message.includes("fetch")) {
976
1013
  throw new Error(
977
1014
  "Unable to connect to the API. Please check the base URL and your internet connection."