@within-7/minto 0.1.5 → 0.1.7
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.
- package/dist/commands/agents/AgentsCommand.js +2342 -0
- package/dist/commands/agents/AgentsCommand.js.map +7 -0
- package/dist/commands/agents/constants.js +58 -0
- package/dist/commands/agents/constants.js.map +7 -0
- package/dist/commands/agents/index.js +37 -0
- package/dist/commands/agents/index.js.map +7 -0
- package/dist/commands/agents/types.js +10 -0
- package/dist/commands/agents/types.js.map +7 -0
- package/dist/commands/agents/utils/fileOperations.js +185 -0
- package/dist/commands/agents/utils/fileOperations.js.map +7 -0
- package/dist/commands/agents/utils/index.js +21 -0
- package/dist/commands/agents/utils/index.js.map +7 -0
- package/dist/commands/bug.js +2 -2
- package/dist/commands/bug.js.map +2 -2
- package/dist/commands/compact.js +5 -5
- package/dist/commands/compact.js.map +2 -2
- package/dist/commands/ctx_viz.js +55 -22
- package/dist/commands/ctx_viz.js.map +2 -2
- package/dist/commands/mcp-interactive.js +11 -11
- package/dist/commands/mcp-interactive.js.map +2 -2
- package/dist/commands/model.js +94 -32
- package/dist/commands/model.js.map +3 -3
- package/dist/commands/plugin/AddMarketplaceForm.js +49 -21
- package/dist/commands/plugin/AddMarketplaceForm.js.map +2 -2
- package/dist/commands/plugin/ConfirmDialog.js +38 -26
- package/dist/commands/plugin/ConfirmDialog.js.map +2 -2
- package/dist/commands/plugin/InstalledPluginsByMarketplace.js +24 -8
- package/dist/commands/plugin/InstalledPluginsByMarketplace.js.map +2 -2
- package/dist/commands/plugin/InstalledPluginsManager.js +3 -1
- package/dist/commands/plugin/InstalledPluginsManager.js.map +2 -2
- package/dist/commands/plugin/MainMenu.js +16 -7
- package/dist/commands/plugin/MainMenu.js.map +2 -2
- package/dist/commands/plugin/MarketplaceManager.js +84 -39
- package/dist/commands/plugin/MarketplaceManager.js.map +2 -2
- package/dist/commands/plugin/MarketplaceSelector.js +7 -3
- package/dist/commands/plugin/MarketplaceSelector.js.map +2 -2
- package/dist/commands/plugin/PlaceholderScreen.js +16 -2
- package/dist/commands/plugin/PlaceholderScreen.js.map +2 -2
- package/dist/commands/plugin/PluginBrowser.js +4 -2
- package/dist/commands/plugin/PluginBrowser.js.map +2 -2
- package/dist/commands/plugin/PluginDetailsInstall.js +12 -6
- package/dist/commands/plugin/PluginDetailsInstall.js.map +2 -2
- package/dist/commands/plugin/PluginDetailsManage.js +14 -5
- package/dist/commands/plugin/PluginDetailsManage.js.map +2 -2
- package/dist/commands/plugin/example-usage.js.map +2 -2
- package/dist/commands/plugin/utils.js.map +2 -2
- package/dist/commands/plugin.js +226 -46
- package/dist/commands/plugin.js.map +2 -2
- package/dist/commands/refreshCommands.js +6 -3
- package/dist/commands/refreshCommands.js.map +2 -2
- package/dist/commands/resume.js +2 -1
- package/dist/commands/resume.js.map +2 -2
- package/dist/commands/setup.js +19 -5
- package/dist/commands/setup.js.map +2 -2
- package/dist/commands/terminalSetup.js +2 -2
- package/dist/commands/terminalSetup.js.map +1 -1
- package/dist/commands.js +14 -30
- package/dist/commands.js.map +2 -2
- package/dist/components/AskUserQuestionDialog/AskUserQuestionDialog.js.map +2 -2
- package/dist/components/AskUserQuestionDialog/QuestionView.js +10 -1
- package/dist/components/AskUserQuestionDialog/QuestionView.js.map +2 -2
- package/dist/components/BackgroundTasksPanel.js +5 -1
- package/dist/components/BackgroundTasksPanel.js.map +2 -2
- package/dist/components/Config.js +17 -4
- package/dist/components/Config.js.map +2 -2
- package/dist/components/ConsoleOAuthFlow.js.map +2 -2
- package/dist/components/CustomSelect/select-option.js +4 -1
- package/dist/components/CustomSelect/select-option.js.map +2 -2
- package/dist/components/Help.js +6 -8
- package/dist/components/Help.js.map +2 -2
- package/dist/components/Logo.js +1 -1
- package/dist/components/Logo.js.map +2 -2
- package/dist/components/ModelListManager.js.map +2 -2
- package/dist/components/ModelSelector/ModelSelector.js +2030 -0
- package/dist/components/ModelSelector/ModelSelector.js.map +7 -0
- package/dist/components/ModelSelector/ScreenContainer.js +27 -0
- package/dist/components/ModelSelector/ScreenContainer.js.map +7 -0
- package/dist/components/ModelSelector/constants.js +37 -0
- package/dist/components/ModelSelector/constants.js.map +7 -0
- package/dist/components/ModelSelector/hooks/index.js +5 -0
- package/dist/components/ModelSelector/hooks/index.js.map +7 -0
- package/dist/components/ModelSelector/hooks/useEscapeNavigation.js +21 -0
- package/dist/components/ModelSelector/hooks/useEscapeNavigation.js.map +7 -0
- package/dist/components/ModelSelector/index.js +17 -0
- package/dist/components/ModelSelector/index.js.map +7 -0
- package/dist/components/ModelSelector/types.js +1 -0
- package/dist/components/ModelSelector/types.js.map +7 -0
- package/dist/components/PressEnterToContinue.js +1 -1
- package/dist/components/PressEnterToContinue.js.map +2 -2
- package/dist/components/ProjectOnboarding.js +1 -1
- package/dist/components/ProjectOnboarding.js.map +2 -2
- package/dist/components/PromptInput.js +88 -37
- package/dist/components/PromptInput.js.map +2 -2
- package/dist/components/QuitSummary.js +17 -10
- package/dist/components/QuitSummary.js.map +2 -2
- package/dist/components/SentryErrorBoundary.js.map +2 -2
- package/dist/components/StreamingBashOutput.js.map +2 -2
- package/dist/components/StructuredDiff.js.map +2 -2
- package/dist/components/SubagentProgress.js.map +2 -2
- package/dist/components/TaskCard.js.map +2 -2
- package/dist/components/TextInput.js.map +1 -1
- package/dist/components/TodoItem.js.map +1 -1
- package/dist/components/binary-feedback/BinaryFeedbackOption.js +1 -3
- package/dist/components/binary-feedback/BinaryFeedbackOption.js.map +2 -2
- package/dist/components/messages/AssistantLocalCommandOutputMessage.js.map +1 -1
- package/dist/components/messages/AssistantToolUseMessage.js +3 -1
- package/dist/components/messages/AssistantToolUseMessage.js.map +2 -2
- package/dist/components/messages/TaskProgressMessage.js.map +2 -2
- package/dist/components/messages/TaskToolMessage.js.map +2 -2
- package/dist/components/messages/UserToolResultMessage/utils.js.map +2 -2
- package/dist/components/permissions/FileEditPermissionRequest/FileEditToolDiff.js.map +2 -2
- package/dist/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.js.map +2 -2
- package/dist/components/permissions/hooks.js.map +2 -2
- package/dist/constants/modelCapabilities.js +1 -1
- package/dist/constants/modelCapabilities.js.map +2 -2
- package/dist/constants/prompts.js.map +1 -1
- package/dist/constants/timing.js +34 -0
- package/dist/constants/timing.js.map +7 -0
- package/dist/entrypoints/cli.js +128 -33
- package/dist/entrypoints/cli.js.map +3 -3
- package/dist/entrypoints/mcp.js +13 -18
- package/dist/entrypoints/mcp.js.map +2 -2
- package/dist/hooks/useCanUseTool.js.map +2 -2
- package/dist/hooks/useCancelRequest.js.map +1 -1
- package/dist/hooks/useHistorySearch.js.map +2 -2
- package/dist/hooks/useLogStartupTime.js.map +2 -2
- package/dist/hooks/usePermissionRequestLogging.js.map +2 -2
- package/dist/hooks/useTextInput.js.map +1 -1
- package/dist/hooks/useUnifiedCompletion.js +493 -394
- package/dist/hooks/useUnifiedCompletion.js.map +2 -2
- package/dist/index.js.map +2 -2
- package/dist/permissions.js +4 -7
- package/dist/permissions.js.map +2 -2
- package/dist/query.js +6 -1
- package/dist/query.js.map +2 -2
- package/dist/screens/REPL.js +72 -36
- package/dist/screens/REPL.js.map +2 -2
- package/dist/screens/ResumeConversation.js +2 -1
- package/dist/screens/ResumeConversation.js.map +2 -2
- package/dist/services/adapters/base.js.map +2 -2
- package/dist/services/adapters/chatCompletions.js.map +2 -2
- package/dist/services/adapters/responsesAPI.js +3 -1
- package/dist/services/adapters/responsesAPI.js.map +2 -2
- package/dist/services/claude.js +327 -328
- package/dist/services/claude.js.map +2 -2
- package/dist/services/customCommands.js +6 -1
- package/dist/services/customCommands.js.map +2 -2
- package/dist/services/fileFreshness.js.map +2 -2
- package/dist/services/gpt5ConnectionTest.js +20 -7
- package/dist/services/gpt5ConnectionTest.js.map +2 -2
- package/dist/services/hookExecutor.js +6 -12
- package/dist/services/hookExecutor.js.map +2 -2
- package/dist/services/mcpClient.js +29 -2
- package/dist/services/mcpClient.js.map +2 -2
- package/dist/services/mentionProcessor.js +23 -10
- package/dist/services/mentionProcessor.js.map +2 -2
- package/dist/services/modelAdapterFactory.js.map +2 -2
- package/dist/services/oauth.js.map +2 -2
- package/dist/services/openai.js +109 -72
- package/dist/services/openai.js.map +3 -3
- package/dist/services/responseStateManager.js.map +2 -2
- package/dist/services/systemReminder.js.map +2 -2
- package/dist/tools/ArchitectTool/ArchitectTool.js +10 -9
- package/dist/tools/ArchitectTool/ArchitectTool.js.map +2 -2
- package/dist/tools/AskExpertModelTool/AskExpertModelTool.js +14 -8
- package/dist/tools/AskExpertModelTool/AskExpertModelTool.js.map +2 -2
- package/dist/tools/AskUserQuestionTool/AskUserQuestionTool.js +8 -1
- package/dist/tools/AskUserQuestionTool/AskUserQuestionTool.js.map +2 -2
- package/dist/tools/BashOutputTool/BashOutputTool.js.map +2 -2
- package/dist/tools/BashTool/BashTool.js.map +2 -2
- package/dist/tools/FileReadTool/FileReadTool.js +23 -4
- package/dist/tools/FileReadTool/FileReadTool.js.map +2 -2
- package/dist/tools/FileWriteTool/FileWriteTool.js.map +2 -2
- package/dist/tools/GlobTool/GlobTool.js +11 -2
- package/dist/tools/GlobTool/GlobTool.js.map +2 -2
- package/dist/tools/GrepTool/GrepTool.js +7 -5
- package/dist/tools/GrepTool/GrepTool.js.map +2 -2
- package/dist/tools/MCPTool/MCPTool.js +11 -12
- package/dist/tools/MCPTool/MCPTool.js.map +2 -2
- package/dist/tools/MultiEditTool/MultiEditTool.js +4 -1
- package/dist/tools/MultiEditTool/MultiEditTool.js.map +2 -2
- package/dist/tools/NotebookReadTool/NotebookReadTool.js +11 -5
- package/dist/tools/NotebookReadTool/NotebookReadTool.js.map +2 -2
- package/dist/tools/SkillTool/SkillTool.js +18 -6
- package/dist/tools/SkillTool/SkillTool.js.map +2 -2
- package/dist/tools/TaskTool/TaskTool.js +37 -51
- package/dist/tools/TaskTool/TaskTool.js.map +2 -2
- package/dist/tools/TaskTool/prompt.js.map +2 -2
- package/dist/tools/ThinkTool/ThinkTool.js +6 -1
- package/dist/tools/ThinkTool/ThinkTool.js.map +2 -2
- package/dist/tools/TodoWriteTool/TodoWriteTool.js +29 -5
- package/dist/tools/TodoWriteTool/TodoWriteTool.js.map +2 -2
- package/dist/tools/URLFetcherTool/URLFetcherTool.js +5 -2
- package/dist/tools/URLFetcherTool/URLFetcherTool.js.map +2 -2
- package/dist/tools/URLFetcherTool/cache.js +6 -3
- package/dist/tools/URLFetcherTool/cache.js.map +2 -2
- package/dist/tools/URLFetcherTool/htmlToMarkdown.js +3 -1
- package/dist/tools/URLFetcherTool/htmlToMarkdown.js.map +2 -2
- package/dist/tools/WebSearchTool/WebSearchTool.js +6 -1
- package/dist/tools/WebSearchTool/WebSearchTool.js.map +2 -2
- package/dist/tools/WebSearchTool/prompt.js.map +2 -2
- package/dist/tools/WebSearchTool/searchProviders.js +15 -6
- package/dist/tools/WebSearchTool/searchProviders.js.map +2 -2
- package/dist/tools.js +4 -1
- package/dist/tools.js.map +2 -2
- package/dist/types/core.js +1 -0
- package/dist/types/core.js.map +7 -0
- package/dist/types/hooks.js +1 -4
- package/dist/types/hooks.js.map +2 -2
- package/dist/types/marketplace.js +8 -2
- package/dist/types/marketplace.js.map +2 -2
- package/dist/types/plugin.js +9 -6
- package/dist/types/plugin.js.map +2 -2
- package/dist/utils/BackgroundShellManager.js +76 -10
- package/dist/utils/BackgroundShellManager.js.map +2 -2
- package/dist/utils/PersistentShell.js +7 -2
- package/dist/utils/PersistentShell.js.map +2 -2
- package/dist/utils/advancedFuzzyMatcher.js +4 -1
- package/dist/utils/advancedFuzzyMatcher.js.map +2 -2
- package/dist/utils/agentLoader.js +69 -35
- package/dist/utils/agentLoader.js.map +2 -2
- package/dist/utils/agentStorage.js.map +2 -2
- package/dist/utils/async.js +163 -0
- package/dist/utils/async.js.map +7 -0
- package/dist/utils/autoUpdater.js +8 -2
- package/dist/utils/autoUpdater.js.map +2 -2
- package/dist/utils/commands.js +23 -11
- package/dist/utils/commands.js.map +2 -2
- package/dist/utils/commonUnixCommands.js +3 -1
- package/dist/utils/commonUnixCommands.js.map +2 -2
- package/dist/utils/compressionMode.js.map +2 -2
- package/dist/utils/config.js +30 -14
- package/dist/utils/config.js.map +2 -2
- package/dist/utils/debugLogger.js.map +2 -2
- package/dist/utils/env.js.map +2 -2
- package/dist/utils/envConfig.js +82 -0
- package/dist/utils/envConfig.js.map +7 -0
- package/dist/utils/errorHandling.js +89 -0
- package/dist/utils/errorHandling.js.map +7 -0
- package/dist/utils/expertChatStorage.js.map +2 -2
- package/dist/utils/fuzzyMatcher.js +13 -7
- package/dist/utils/fuzzyMatcher.js.map +2 -2
- package/dist/utils/hookManager.js +14 -4
- package/dist/utils/hookManager.js.map +2 -2
- package/dist/utils/log.js.map +2 -2
- package/dist/utils/marketplaceManager.js +44 -9
- package/dist/utils/marketplaceManager.js.map +2 -2
- package/dist/utils/messageContextManager.js.map +1 -1
- package/dist/utils/messages.js +6 -3
- package/dist/utils/messages.js.map +2 -2
- package/dist/utils/model.js +3 -1
- package/dist/utils/model.js.map +2 -2
- package/dist/utils/pluginInstaller.js +3 -15
- package/dist/utils/pluginInstaller.js.map +2 -2
- package/dist/utils/pluginLoader.js +41 -13
- package/dist/utils/pluginLoader.js.map +2 -2
- package/dist/utils/pluginRegistry.js.map +2 -2
- package/dist/utils/pluginValidator.js +71 -49
- package/dist/utils/pluginValidator.js.map +2 -2
- package/dist/utils/ptyCompat.js.map +2 -2
- package/dist/utils/roundConverter.js.map +2 -2
- package/dist/utils/secureFile.js +43 -14
- package/dist/utils/secureFile.js.map +2 -2
- package/dist/utils/sessionState.js.map +2 -2
- package/dist/utils/skillLoader.js.map +2 -2
- package/dist/utils/teamConfig.js +7 -4
- package/dist/utils/teamConfig.js.map +2 -2
- package/dist/utils/theme.js.map +2 -2
- package/dist/utils/thinking.js.map +2 -2
- package/dist/utils/unaryLogging.js.map +2 -2
- package/dist/version.js +2 -2
- package/dist/version.js.map +1 -1
- package/package.json +5 -5
package/dist/services/openai.js
CHANGED
|
@@ -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 {
|
|
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
|
-
|
|
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.
|
|
18
|
+
return Math.min(retryAfterMs, RETRY_CONFIG.maxServerDelayMs);
|
|
16
19
|
}
|
|
17
20
|
}
|
|
18
|
-
const delay = RETRY_CONFIG.
|
|
19
|
-
const jitter = Math.random() * RETRY_CONFIG.
|
|
20
|
-
return Math.min(delay + jitter, RETRY_CONFIG.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
260
|
-
|
|
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
|
-
|
|
314
|
-
|
|
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
|
-
|
|
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
|
-
|
|
442
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
582
|
+
debugLogger.warn("OPENAI_UNHANDLED_ERROR", {
|
|
583
|
+
status: response.status,
|
|
584
|
+
error: errorMessage
|
|
585
|
+
});
|
|
567
586
|
} catch (parseError) {
|
|
568
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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(
|
|
789
|
-
|
|
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
|
-
|
|
867
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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."
|