@pentoshi/clai 3.8.19 → 3.8.21
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/README.md +8 -5
- package/dist/agent/compaction-summary.d.ts +1 -1
- package/dist/agent/compaction-summary.js +3 -2
- package/dist/agent/compaction-summary.js.map +1 -1
- package/dist/agent/context-breakdown.d.ts +37 -0
- package/dist/agent/context-breakdown.js +145 -0
- package/dist/agent/context-breakdown.js.map +1 -0
- package/dist/agent/context-manager.d.ts +29 -2
- package/dist/agent/context-manager.js +125 -17
- package/dist/agent/context-manager.js.map +1 -1
- package/dist/agent/continue-orient.d.ts +39 -0
- package/dist/agent/continue-orient.js +152 -0
- package/dist/agent/continue-orient.js.map +1 -0
- package/dist/agent/reliability-policy.d.ts +85 -0
- package/dist/agent/reliability-policy.js +158 -0
- package/dist/agent/reliability-policy.js.map +1 -0
- package/dist/agent/runner.js +280 -141
- package/dist/agent/runner.js.map +1 -1
- package/dist/agent/session-state.d.ts +13 -1
- package/dist/agent/session-state.js +30 -17
- package/dist/agent/session-state.js.map +1 -1
- package/dist/agent/stop-summary.d.ts +2 -2
- package/dist/agent/stop-summary.js +23 -4
- package/dist/agent/stop-summary.js.map +1 -1
- package/dist/agent/task-evidence.js +13 -0
- package/dist/agent/task-evidence.js.map +1 -1
- package/dist/agent/tool-history.d.ts +12 -0
- package/dist/agent/tool-history.js +159 -0
- package/dist/agent/tool-history.js.map +1 -1
- package/dist/agent/tool-output-formatting.d.ts +4 -0
- package/dist/agent/tool-output-formatting.js +21 -8
- package/dist/agent/tool-output-formatting.js.map +1 -1
- package/dist/app/controllers/session-compact-helper.d.ts +2 -0
- package/dist/app/controllers/session-compact-helper.js +14 -5
- package/dist/app/controllers/session-compact-helper.js.map +1 -1
- package/dist/app/controllers/session-controller.d.ts +6 -0
- package/dist/app/controllers/session-controller.js +27 -2
- package/dist/app/controllers/session-controller.js.map +1 -1
- package/dist/commands/providers.js +57 -26
- package/dist/commands/providers.js.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/llm/gemini.js +4 -1
- package/dist/llm/gemini.js.map +1 -1
- package/dist/llm/http.js +22 -12
- package/dist/llm/http.js.map +1 -1
- package/dist/llm/key-rotation.d.ts +52 -0
- package/dist/llm/key-rotation.js +122 -0
- package/dist/llm/key-rotation.js.map +1 -0
- package/dist/llm/provider.d.ts +2 -0
- package/dist/llm/provider.js +8 -0
- package/dist/llm/provider.js.map +1 -1
- package/dist/llm/router.d.ts +15 -2
- package/dist/llm/router.js +318 -125
- package/dist/llm/router.js.map +1 -1
- package/dist/prompts/embedded.js +1 -1
- package/dist/prompts/embedded.js.map +1 -1
- package/dist/prompts/index.d.ts +25 -0
- package/dist/prompts/index.js +55 -7
- package/dist/prompts/index.js.map +1 -1
- package/dist/prompts/system.agent.md +4 -3
- package/dist/repl/slash-commands.js +14 -8
- package/dist/repl/slash-commands.js.map +1 -1
- package/dist/repl.d.ts +4 -1
- package/dist/repl.js +12 -2
- package/dist/repl.js.map +1 -1
- package/dist/store/config.d.ts +18 -0
- package/dist/store/config.js +9 -0
- package/dist/store/config.js.map +1 -1
- package/dist/store/history.d.ts +8 -0
- package/dist/store/history.js +38 -0
- package/dist/store/history.js.map +1 -1
- package/dist/store/keys.d.ts +55 -0
- package/dist/store/keys.js +226 -21
- package/dist/store/keys.js.map +1 -1
- package/dist/store/logs.js +35 -12
- package/dist/store/logs.js.map +1 -1
- package/dist/store/paths.d.ts +13 -0
- package/dist/store/paths.js +23 -1
- package/dist/store/paths.js.map +1 -1
- package/dist/store/session-workspace.d.ts +79 -0
- package/dist/store/session-workspace.js +199 -0
- package/dist/store/session-workspace.js.map +1 -0
- package/dist/tools/definitions.js +17 -2
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/http.d.ts +10 -0
- package/dist/tools/http.js +293 -58
- package/dist/tools/http.js.map +1 -1
- package/dist/tools/pentest-workflows.js +38 -19
- package/dist/tools/pentest-workflows.js.map +1 -1
- package/dist/tools/registry.js +26 -2
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/shell.d.ts +1 -1
- package/dist/tui/format-keys.js +29 -6
- package/dist/tui/format-keys.js.map +1 -1
- package/dist/tui-v2/app/App.js +39 -1
- package/dist/tui-v2/app/App.js.map +1 -1
- package/dist/tui-v2/app/command-handlers.js +1 -2
- package/dist/tui-v2/app/command-handlers.js.map +1 -1
- package/dist/tui-v2/app/commands/config-commands.d.ts +1 -2
- package/dist/tui-v2/app/commands/config-commands.js +1 -11
- package/dist/tui-v2/app/commands/config-commands.js.map +1 -1
- package/dist/tui-v2/app/commands/key-commands.d.ts +1 -1
- package/dist/tui-v2/app/commands/key-commands.js +148 -63
- package/dist/tui-v2/app/commands/key-commands.js.map +1 -1
- package/dist/tui-v2/app/commands/picker-commands.js +13 -7
- package/dist/tui-v2/app/commands/picker-commands.js.map +1 -1
- package/dist/tui-v2/bootstrap/composition-root.js +8 -5
- package/dist/tui-v2/bootstrap/composition-root.js.map +1 -1
- package/dist/tui-v2/bootstrap/start-tui-v2.js +10 -4
- package/dist/tui-v2/bootstrap/start-tui-v2.js.map +1 -1
- package/dist/tui-v2/components/modal/keys-modal.d.ts +19 -0
- package/dist/tui-v2/components/modal/keys-modal.js +203 -0
- package/dist/tui-v2/components/modal/keys-modal.js.map +1 -0
- package/dist/tui-v2/components/modal/secret-modal.d.ts +3 -1
- package/dist/tui-v2/components/modal/secret-modal.js +110 -18
- package/dist/tui-v2/components/modal/secret-modal.js.map +1 -1
- package/dist/tui-v2/components/overlay/overlay-host.js +6 -2
- package/dist/tui-v2/components/overlay/overlay-host.js.map +1 -1
- package/dist/tui-v2/components/pager/pager-line.js +5 -2
- package/dist/tui-v2/components/pager/pager-line.js.map +1 -1
- package/dist/tui-v2/components/pager/pager.js +6 -3
- package/dist/tui-v2/components/pager/pager.js.map +1 -1
- package/dist/tui-v2/components/plan/use-pane-presence.d.ts +6 -4
- package/dist/tui-v2/components/plan/use-pane-presence.js +8 -45
- package/dist/tui-v2/components/plan/use-pane-presence.js.map +1 -1
- package/dist/tui-v2/components/toast/toast-anim.d.ts +5 -4
- package/dist/tui-v2/components/toast/toast-anim.js +10 -7
- package/dist/tui-v2/components/toast/toast-anim.js.map +1 -1
- package/dist/tui-v2/components/toast/toast-host.d.ts +9 -3
- package/dist/tui-v2/components/toast/toast-host.js +124 -26
- package/dist/tui-v2/components/toast/toast-host.js.map +1 -1
- package/dist/tui-v2/components/transcript/assistant-message.js +4 -1
- package/dist/tui-v2/components/transcript/assistant-message.js.map +1 -1
- package/dist/tui-v2/components/transcript/compacted-row.js +1 -1
- package/dist/tui-v2/components/transcript/compacted-row.js.map +1 -1
- package/dist/tui-v2/components/transcript/file-diff-card.js +3 -23
- package/dist/tui-v2/components/transcript/file-diff-card.js.map +1 -1
- package/dist/tui-v2/components/transcript/linkable-text.js +9 -2
- package/dist/tui-v2/components/transcript/linkable-text.js.map +1 -1
- package/dist/tui-v2/components/transcript/selectable-line.d.ts +22 -0
- package/dist/tui-v2/components/transcript/selectable-line.js +24 -0
- package/dist/tui-v2/components/transcript/selectable-line.js.map +1 -0
- package/dist/tui-v2/components/transcript/thinking-block.js +3 -1
- package/dist/tui-v2/components/transcript/thinking-block.js.map +1 -1
- package/dist/tui-v2/components/transcript/tool-card.d.ts +5 -3
- package/dist/tui-v2/components/transcript/tool-card.js +39 -33
- package/dist/tui-v2/components/transcript/tool-card.js.map +1 -1
- package/dist/tui-v2/components/transcript/use-click-without-drag.js +4 -1
- package/dist/tui-v2/components/transcript/use-click-without-drag.js.map +1 -1
- package/dist/tui-v2/components/transcript/user-message.js +1 -1
- package/dist/tui-v2/components/transcript/user-message.js.map +1 -1
- package/dist/tui-v2/controllers/overlay-controller.d.ts +42 -0
- package/dist/tui-v2/controllers/overlay-controller.js +53 -0
- package/dist/tui-v2/controllers/overlay-controller.js.map +1 -1
- package/dist/tui-v2/rendering/batch-sections.d.ts +15 -4
- package/dist/tui-v2/rendering/batch-sections.js +157 -64
- package/dist/tui-v2/rendering/batch-sections.js.map +1 -1
- package/dist/tui-v2/rendering/format-help.js +1 -1
- package/dist/tui-v2/rendering/format-help.js.map +1 -1
- package/dist/tui-v2/rendering/open-tool-output.js +10 -7
- package/dist/tui-v2/rendering/open-tool-output.js.map +1 -1
- package/dist/tui-v2/rendering/pager-markdown.d.ts +9 -0
- package/dist/tui-v2/rendering/pager-markdown.js +46 -0
- package/dist/tui-v2/rendering/pager-markdown.js.map +1 -1
- package/dist/tui-v2/rendering/pager-view-policy.d.ts +6 -3
- package/dist/tui-v2/rendering/pager-view-policy.js +9 -13
- package/dist/tui-v2/rendering/pager-view-policy.js.map +1 -1
- package/dist/tui-v2/rendering/sanitize-display.js +3 -1
- package/dist/tui-v2/rendering/sanitize-display.js.map +1 -1
- package/dist/tui-v2/state/transcript-reducer.js +70 -30
- package/dist/tui-v2/state/transcript-reducer.js.map +1 -1
- package/dist/types.d.ts +7 -0
- package/dist/version.generated.d.ts +2 -2
- package/dist/version.generated.js +2 -2
- package/package.json +1 -1
package/dist/llm/router.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { getConfig, providerCategory } from "../store/config.js";
|
|
2
|
-
import { getProviderSecret } from "../store/keys.js";
|
|
2
|
+
import { getProviderKeys, getProviderSecret, markProviderKeySuccess, } from "../store/keys.js";
|
|
3
3
|
import { anthropicProvider } from "./anthropic.js";
|
|
4
4
|
import { geminiProvider } from "./gemini.js";
|
|
5
5
|
import { groqProvider } from "./groq.js";
|
|
6
6
|
import { ProviderError } from "./http.js";
|
|
7
|
+
import { attemptsPerKey, buildKeyAttemptPlan, formatKeyEventStatus, isImmediateKeySwitchError, isKeyCircleStopError, isKeyRotatableError, isQuotaKeyError, } from "./key-rotation.js";
|
|
7
8
|
import { nvidiaProvider } from "./nvidia.js";
|
|
8
9
|
import { agentrouterProvider } from "./agentrouter.js";
|
|
9
10
|
import { kimchiProvider } from "./kimchi.js";
|
|
@@ -13,10 +14,13 @@ import { ollamaProvider } from "./ollama.js";
|
|
|
13
14
|
import { openaiProvider } from "./openai.js";
|
|
14
15
|
import { openrouterProvider } from "./openrouter.js";
|
|
15
16
|
import { qwenCloudProvider } from "./qwen-cloud.js";
|
|
17
|
+
import { maskSecretTail } from "./provider.js";
|
|
16
18
|
import { isToolsUnsupportedError, markTextOnlyModel, } from "./tool-protocol.js";
|
|
17
19
|
const MAX_RETRIES = 6;
|
|
18
20
|
// Wait at most this long overall per attempt (up to 2 minutes total wait budget).
|
|
19
21
|
const MAX_RETRY_WAIT_MS = 120_000;
|
|
22
|
+
/** Toast replace-key so key rotation never stacks notifications. */
|
|
23
|
+
export const API_KEY_TOAST_KEY = "api-key-rotation";
|
|
20
24
|
async function sleep(ms, signal) {
|
|
21
25
|
if (signal?.aborted)
|
|
22
26
|
throw signal.reason ?? new Error("Aborted");
|
|
@@ -83,12 +87,75 @@ function retryWaitMs(error, attempt) {
|
|
|
83
87
|
function networkRetryWaitMs(attempt) {
|
|
84
88
|
return Math.pow(2, attempt) * 1_000;
|
|
85
89
|
}
|
|
86
|
-
function
|
|
87
|
-
if (error
|
|
88
|
-
return "
|
|
90
|
+
function failureReason(error) {
|
|
91
|
+
if (isRateLimited(error))
|
|
92
|
+
return "rate limited";
|
|
93
|
+
if (isQuotaKeyError(error)) {
|
|
94
|
+
const status = error instanceof ProviderError && error.status ? ` (${error.status})` : "";
|
|
95
|
+
return `insufficient credits${status}`;
|
|
89
96
|
}
|
|
90
|
-
|
|
91
|
-
|
|
97
|
+
if (error instanceof ProviderError && error.status) {
|
|
98
|
+
if (error.status === 401 || error.status === 403) {
|
|
99
|
+
return `auth failed (${error.status})`;
|
|
100
|
+
}
|
|
101
|
+
return `server error (${error.status})`;
|
|
102
|
+
}
|
|
103
|
+
return "connection glitch";
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* User-facing classification of provider failures (auth, capacity, disconnect,
|
|
107
|
+
* empty admission, context limit). Used by the fallback table and tests.
|
|
108
|
+
*/
|
|
109
|
+
export function formatProviderFailureForUser(error) {
|
|
110
|
+
if (error instanceof ProviderError) {
|
|
111
|
+
const status = error.status ?? 0;
|
|
112
|
+
if (status === 429) {
|
|
113
|
+
return "Model is rate limited (429). Try another provider/model or switch to a paid plan.";
|
|
114
|
+
}
|
|
115
|
+
if (status === 401 || status === 403) {
|
|
116
|
+
return `Authentication/authorization failed (${status}). Check the API key with \`clai providers\` or set the provider env var.`;
|
|
117
|
+
}
|
|
118
|
+
if (status === 402) {
|
|
119
|
+
return "Insufficient credits / payment required (402). Try another API key for this provider, top up the account, or switch provider.";
|
|
120
|
+
}
|
|
121
|
+
if (status === 404) {
|
|
122
|
+
return "Model or endpoint not found (404). Run `/model list` or pick another model.";
|
|
123
|
+
}
|
|
124
|
+
if (status === 413) {
|
|
125
|
+
return "Request exceeded the provider input limit (413). Wait for auto-compact, run `/compact`, or continue with a smaller turn.";
|
|
126
|
+
}
|
|
127
|
+
if (status === 422) {
|
|
128
|
+
return "Provider rejected the request body (422). Model name or parameters may be incompatible — try another model.";
|
|
129
|
+
}
|
|
130
|
+
if (status === 503 || status === 502 || status === 504) {
|
|
131
|
+
return `Upstream provider unavailable (${status}). Retry shortly or switch provider/model; free-tier models are often capacity-constrained.`;
|
|
132
|
+
}
|
|
133
|
+
if (status >= 500 && status < 600) {
|
|
134
|
+
return `Upstream provider error (${status}). Retry or switch with \`/provider\` / \`/model\`.`;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
const message = (error instanceof Error ? error.message : String(error))
|
|
138
|
+
.replace(/\s+/g, " ")
|
|
139
|
+
.trim();
|
|
140
|
+
if (!message) {
|
|
141
|
+
return "Provider returned an empty failure (no tokens billed). Model may be unavailable, overloaded, or rejected before admission — try another model.";
|
|
142
|
+
}
|
|
143
|
+
if (/socket connection was closed|econnreset|premature close|unexpected end of file/i.test(message)) {
|
|
144
|
+
return `${message} — connection dropped mid-request (common on free/unstable routes). Retry or switch model; long contexts increase disconnect risk.`;
|
|
145
|
+
}
|
|
146
|
+
if (/stream stalled|request timed out before any response/i.test(message)) {
|
|
147
|
+
return `${message} — no tokens arrived in time. Free models and large contexts fail more often; retry or use a more reliable model.`;
|
|
148
|
+
}
|
|
149
|
+
if (/no completion text|response was empty|empty response|returned no text/i.test(message)) {
|
|
150
|
+
return `${message} — provider accepted the request but returned no content. Retry once; if it persists, switch model.`;
|
|
151
|
+
}
|
|
152
|
+
if (/fetch failed|network error|etimedout|enotfound|econnrefused/i.test(message)) {
|
|
153
|
+
return `${message} — network/DNS failure reaching the provider. Check connectivity and provider base URL.`;
|
|
154
|
+
}
|
|
155
|
+
return message;
|
|
156
|
+
}
|
|
157
|
+
function summarizeProviderError(error) {
|
|
158
|
+
return formatProviderFailureForUser(error);
|
|
92
159
|
}
|
|
93
160
|
function escapeTableCell(value) {
|
|
94
161
|
return value.replace(/\|/g, "\\|").replace(/\s+/g, " ").trim();
|
|
@@ -99,7 +166,12 @@ function formatFailures(failures) {
|
|
|
99
166
|
const rows = failures.map((failure) => `${failure.provider.padEnd(12)} ${escapeTableCell(failure.message)}`);
|
|
100
167
|
return `\n\nProvider Error\n------------ -----\n${rows.join("\n")}`;
|
|
101
168
|
}
|
|
102
|
-
|
|
169
|
+
/**
|
|
170
|
+
* After all keys for a provider are exhausted, decide whether to try the next
|
|
171
|
+
* *provider* in the fallback chain. Auth/rate-limit stop cross-provider when
|
|
172
|
+
* only one key existed historically; with multi-key we already rotated keys.
|
|
173
|
+
*/
|
|
174
|
+
function shouldStopProviderFallback(error) {
|
|
103
175
|
if (error instanceof ProviderError) {
|
|
104
176
|
return [401, 403, 404, 422, 429].includes(error.status ?? 0);
|
|
105
177
|
}
|
|
@@ -152,7 +224,191 @@ export async function providerAuth(provider) {
|
|
|
152
224
|
}
|
|
153
225
|
return { apiKey: secret.value };
|
|
154
226
|
}
|
|
155
|
-
|
|
227
|
+
function authForSlot(providerId, value) {
|
|
228
|
+
if (providerId === "ollama") {
|
|
229
|
+
return { baseUrl: value };
|
|
230
|
+
}
|
|
231
|
+
return { apiKey: value };
|
|
232
|
+
}
|
|
233
|
+
function makeKeyEmitter(onStatus, onKeyEvent) {
|
|
234
|
+
return (event) => {
|
|
235
|
+
onKeyEvent?.(event);
|
|
236
|
+
// Quiet sticky start: never status-spam "using …" on every model step.
|
|
237
|
+
// Surface only retries (composer countdown), switches (toast + status), exhausted.
|
|
238
|
+
if (event.type === "using")
|
|
239
|
+
return;
|
|
240
|
+
const line = formatKeyEventStatus(event);
|
|
241
|
+
if (event.type === "retry" || event.type === "switch" || event.type === "exhausted") {
|
|
242
|
+
onStatus?.(line);
|
|
243
|
+
}
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
async function tryCompleteOnce(provider, providerId, request, model, auth) {
|
|
247
|
+
const activeRequest = { ...request, provider: providerId, model };
|
|
248
|
+
try {
|
|
249
|
+
return await provider.complete(activeRequest, auth);
|
|
250
|
+
}
|
|
251
|
+
catch (toolError) {
|
|
252
|
+
if (activeRequest.tools?.length && isToolsUnsupportedError(toolError)) {
|
|
253
|
+
markTextOnlyModel(providerId, model);
|
|
254
|
+
const textRequest = {
|
|
255
|
+
...activeRequest,
|
|
256
|
+
tools: undefined,
|
|
257
|
+
toolChoice: undefined,
|
|
258
|
+
parallelToolCalls: undefined,
|
|
259
|
+
};
|
|
260
|
+
return await provider.complete(textRequest, auth);
|
|
261
|
+
}
|
|
262
|
+
throw toolError;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
async function tryStreamOnce(provider, providerId, request, model, auth, onToken, onStatus) {
|
|
266
|
+
const activeRequest = { ...request, provider: providerId, model };
|
|
267
|
+
try {
|
|
268
|
+
if (provider.stream) {
|
|
269
|
+
return await provider.stream(activeRequest, auth, onToken);
|
|
270
|
+
}
|
|
271
|
+
const result = await provider.complete(activeRequest, auth);
|
|
272
|
+
onToken(result.text);
|
|
273
|
+
return result;
|
|
274
|
+
}
|
|
275
|
+
catch (toolError) {
|
|
276
|
+
if (activeRequest.tools?.length && isToolsUnsupportedError(toolError)) {
|
|
277
|
+
markTextOnlyModel(providerId, model);
|
|
278
|
+
onStatus?.(`ℹ ${providerId}/${model} does not support native tools — falling back to text protocol`);
|
|
279
|
+
const textRequest = {
|
|
280
|
+
...activeRequest,
|
|
281
|
+
tools: undefined,
|
|
282
|
+
toolChoice: undefined,
|
|
283
|
+
parallelToolCalls: undefined,
|
|
284
|
+
};
|
|
285
|
+
if (provider.stream) {
|
|
286
|
+
return await provider.stream(textRequest, auth, onToken);
|
|
287
|
+
}
|
|
288
|
+
const result = await provider.complete(textRequest, auth);
|
|
289
|
+
onToken(result.text);
|
|
290
|
+
return result;
|
|
291
|
+
}
|
|
292
|
+
throw toolError;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Run complete/stream against all keys for one provider with circular rotation.
|
|
297
|
+
* Returns result on success; throws ProviderError-like aggregate on hard stop;
|
|
298
|
+
* returns `{ exhausted: true, lastError }` when the key circle is done.
|
|
299
|
+
*/
|
|
300
|
+
async function runWithKeyRotation(opts) {
|
|
301
|
+
const { providerId, provider, request, model, emitKey } = opts;
|
|
302
|
+
const multi = await getProviderKeys(providerId);
|
|
303
|
+
const slots = multi.keys;
|
|
304
|
+
if (slots.length === 0) {
|
|
305
|
+
throw new Error("no API key configured");
|
|
306
|
+
}
|
|
307
|
+
const plan = buildKeyAttemptPlan(slots.length, multi.activeIndex);
|
|
308
|
+
const multiKey = slots.length > 1;
|
|
309
|
+
// Single key: time-increasing retries (MAX_RETRIES+1 attempts).
|
|
310
|
+
// Multi key: 2 attempts per key (initial + one retry), then next key.
|
|
311
|
+
const maxPerKey = attemptsPerKey(slots.length, MAX_RETRIES + 1);
|
|
312
|
+
let lastError;
|
|
313
|
+
for (let planIdx = 0; planIdx < plan.length; planIdx++) {
|
|
314
|
+
const keyIndex = plan[planIdx];
|
|
315
|
+
const slot = slots[keyIndex];
|
|
316
|
+
const auth = authForSlot(providerId, slot.value);
|
|
317
|
+
const tail = maskSecretTail(slot.value);
|
|
318
|
+
// Announce only when rotating after a failure — never re-toast the sticky
|
|
319
|
+
// key on every agent step ("using [2/4]" spam).
|
|
320
|
+
if (planIdx > 0) {
|
|
321
|
+
emitKey({
|
|
322
|
+
type: "switch",
|
|
323
|
+
provider: providerId,
|
|
324
|
+
maskedTail: tail,
|
|
325
|
+
keyIndex,
|
|
326
|
+
keyCount: slots.length,
|
|
327
|
+
...(lastError ? { reason: failureReason(lastError) } : {}),
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
for (let attempt = 0; attempt < maxPerKey; attempt++) {
|
|
331
|
+
request.signal?.throwIfAborted();
|
|
332
|
+
try {
|
|
333
|
+
let result;
|
|
334
|
+
if (opts.mode === "stream") {
|
|
335
|
+
result = await tryStreamOnce(provider, providerId, request, model, auth, opts.onToken ?? (() => { }), opts.onStatus);
|
|
336
|
+
}
|
|
337
|
+
else {
|
|
338
|
+
result = await tryCompleteOnce(provider, providerId, request, model, auth);
|
|
339
|
+
}
|
|
340
|
+
// Sticky success only for stored multi-key (not env-only synthetic).
|
|
341
|
+
if (multi.source !== "env" && multi.source !== "local") {
|
|
342
|
+
void markProviderKeySuccess(providerId, keyIndex).catch(() => { });
|
|
343
|
+
}
|
|
344
|
+
return result;
|
|
345
|
+
}
|
|
346
|
+
catch (error) {
|
|
347
|
+
lastError = error;
|
|
348
|
+
// 404/422: other keys for the same model will not help.
|
|
349
|
+
if (isKeyCircleStopError(error)) {
|
|
350
|
+
throw error;
|
|
351
|
+
}
|
|
352
|
+
// Auth / quota (402 credits): never sleep on the same key — switch now.
|
|
353
|
+
if (isImmediateKeySwitchError(error)) {
|
|
354
|
+
if (multiKey) {
|
|
355
|
+
// Always advance (or exit plan after last key) so every key is tried.
|
|
356
|
+
break;
|
|
357
|
+
}
|
|
358
|
+
// Single key — surface immediately (no pointless multi-second backoff).
|
|
359
|
+
throw error;
|
|
360
|
+
}
|
|
361
|
+
const rotatable = isKeyRotatableError(error, isRetriableError);
|
|
362
|
+
if (!rotatable) {
|
|
363
|
+
// e.g. 413 — bubble so outer provider fallback can try another provider.
|
|
364
|
+
throw error;
|
|
365
|
+
}
|
|
366
|
+
const canRetrySame = attempt + 1 < maxPerKey;
|
|
367
|
+
if (canRetrySame) {
|
|
368
|
+
const wait = isRateLimited(error)
|
|
369
|
+
? retryWaitMs(error, attempt)
|
|
370
|
+
: networkRetryWaitMs(attempt);
|
|
371
|
+
if (wait > MAX_RETRY_WAIT_MS) {
|
|
372
|
+
// Don't burn the whole multi-key circle on one impossible wait —
|
|
373
|
+
// move to the next key when multi; single-key still exhausts.
|
|
374
|
+
if (multiKey)
|
|
375
|
+
break;
|
|
376
|
+
throw error;
|
|
377
|
+
}
|
|
378
|
+
emitKey({
|
|
379
|
+
type: "retry",
|
|
380
|
+
provider: providerId,
|
|
381
|
+
maskedTail: tail,
|
|
382
|
+
reason: failureReason(error),
|
|
383
|
+
waitMs: wait,
|
|
384
|
+
keyIndex,
|
|
385
|
+
keyCount: slots.length,
|
|
386
|
+
});
|
|
387
|
+
await sleep(wait, request.signal);
|
|
388
|
+
continue;
|
|
389
|
+
}
|
|
390
|
+
// Exhausted attempts for this key → next in circle (if any).
|
|
391
|
+
break;
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
// Single-key rate-limit exhaustion: preserve historical UX string.
|
|
396
|
+
if (!multiKey && lastError && isRateLimited(lastError)) {
|
|
397
|
+
opts.onStatus?.(`⏳ ${providerId} rate limited; staying on selected provider.`);
|
|
398
|
+
}
|
|
399
|
+
else if (multiKey) {
|
|
400
|
+
emitKey({
|
|
401
|
+
type: "exhausted",
|
|
402
|
+
provider: providerId,
|
|
403
|
+
maskedTail: maskSecretTail(slots[plan[0]].value),
|
|
404
|
+
keyCount: slots.length,
|
|
405
|
+
reason: lastError ? failureReason(lastError) : undefined,
|
|
406
|
+
});
|
|
407
|
+
}
|
|
408
|
+
const err = lastError ?? new Error("all API keys failed");
|
|
409
|
+
throw err;
|
|
410
|
+
}
|
|
411
|
+
export async function completeWithProvider(request, options) {
|
|
156
412
|
const config = getConfig();
|
|
157
413
|
const requested = request.provider ?? config.defaultProvider;
|
|
158
414
|
const providerImpl = providers[requested];
|
|
@@ -160,67 +416,49 @@ export async function completeWithProvider(request) {
|
|
|
160
416
|
const fallbackEnabled = config.providerFallback && (isDefaultModel || request.allowModelFallback === true);
|
|
161
417
|
const order = buildFallbackChain(requested, config.freeOnly, fallbackEnabled);
|
|
162
418
|
const failures = [];
|
|
419
|
+
const emitKey = makeKeyEmitter(options?.onStatus, options?.onKeyEvent);
|
|
163
420
|
for (const providerId of order) {
|
|
164
421
|
request.signal?.throwIfAborted();
|
|
165
422
|
const provider = providers[providerId];
|
|
166
|
-
const
|
|
167
|
-
const hasAuth = providerId === "ollama"
|
|
423
|
+
const multi = await getProviderKeys(providerId);
|
|
424
|
+
const hasAuth = providerId === "ollama"
|
|
425
|
+
? multi.keys.length > 0
|
|
426
|
+
: multi.keys.length > 0;
|
|
168
427
|
if (!hasAuth) {
|
|
169
428
|
failures.push({ provider: providerId, message: "no API key configured" });
|
|
170
429
|
continue;
|
|
171
430
|
}
|
|
431
|
+
const model = providerId === requested
|
|
432
|
+
? (request.model ?? provider.defaultModel)
|
|
433
|
+
: provider.defaultModel;
|
|
172
434
|
try {
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
catch (toolError) {
|
|
183
|
-
if (activeRequest.tools?.length &&
|
|
184
|
-
isToolsUnsupportedError(toolError)) {
|
|
185
|
-
markTextOnlyModel(providerId, model);
|
|
186
|
-
const textRequest = {
|
|
187
|
-
...activeRequest,
|
|
188
|
-
tools: undefined,
|
|
189
|
-
toolChoice: undefined,
|
|
190
|
-
parallelToolCalls: undefined,
|
|
191
|
-
};
|
|
192
|
-
return await provider.complete(textRequest, auth);
|
|
193
|
-
}
|
|
194
|
-
throw toolError;
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
catch (error) {
|
|
198
|
-
if (isRetriableError(error)) {
|
|
199
|
-
const wait = isRateLimited(error)
|
|
200
|
-
? retryWaitMs(error, attempt)
|
|
201
|
-
: networkRetryWaitMs(attempt);
|
|
202
|
-
if (attempt < MAX_RETRIES && wait <= MAX_RETRY_WAIT_MS) {
|
|
203
|
-
await sleep(wait, request.signal);
|
|
204
|
-
continue;
|
|
205
|
-
}
|
|
206
|
-
failures.push({ provider: providerId, message: summarizeProviderError(error) });
|
|
207
|
-
throw new Error(`No provider could complete the request.${formatFailures(failures)}`);
|
|
208
|
-
}
|
|
209
|
-
failures.push({ provider: providerId, message: summarizeProviderError(error) });
|
|
210
|
-
if (shouldStopFallback(error)) {
|
|
211
|
-
throw new Error(`No provider could complete the request.${formatFailures(failures)}`);
|
|
212
|
-
}
|
|
213
|
-
break;
|
|
214
|
-
}
|
|
215
|
-
}
|
|
435
|
+
return await runWithKeyRotation({
|
|
436
|
+
providerId,
|
|
437
|
+
provider,
|
|
438
|
+
request,
|
|
439
|
+
model,
|
|
440
|
+
emitKey,
|
|
441
|
+
mode: "complete",
|
|
442
|
+
...(options?.onStatus ? { onStatus: options.onStatus } : {}),
|
|
443
|
+
});
|
|
216
444
|
}
|
|
217
|
-
catch (
|
|
218
|
-
failures.push({
|
|
445
|
+
catch (error) {
|
|
446
|
+
failures.push({
|
|
447
|
+
provider: providerId,
|
|
448
|
+
message: summarizeProviderError(error),
|
|
449
|
+
});
|
|
450
|
+
if (isKeyCircleStopError(error) || shouldStopProviderFallback(error)) {
|
|
451
|
+
throw new Error(`No provider could complete the request.${formatFailures(failures)}`);
|
|
452
|
+
}
|
|
453
|
+
// Continue to next provider in chain when fallback is enabled (e.g. 413).
|
|
219
454
|
}
|
|
220
455
|
}
|
|
221
456
|
throw new Error(`No provider could complete the request.${formatFailures(failures)}`);
|
|
222
457
|
}
|
|
223
|
-
export async function streamWithProvider(request, onToken,
|
|
458
|
+
export async function streamWithProvider(request, onToken, onStatusOrOptions) {
|
|
459
|
+
const options = typeof onStatusOrOptions === "function"
|
|
460
|
+
? { onStatus: onStatusOrOptions }
|
|
461
|
+
: onStatusOrOptions ?? {};
|
|
224
462
|
const config = getConfig();
|
|
225
463
|
const requested = request.provider ?? config.defaultProvider;
|
|
226
464
|
const providerImpl = providers[requested];
|
|
@@ -228,85 +466,40 @@ export async function streamWithProvider(request, onToken, onStatus) {
|
|
|
228
466
|
const fallbackEnabled = config.providerFallback && (isDefaultModel || request.allowModelFallback === true);
|
|
229
467
|
const order = buildFallbackChain(requested, config.freeOnly, fallbackEnabled);
|
|
230
468
|
const failures = [];
|
|
231
|
-
const emitStatus = onStatus ?? ((message) => onToken(message));
|
|
469
|
+
const emitStatus = options.onStatus ?? ((message) => onToken(message));
|
|
470
|
+
const emitKey = makeKeyEmitter(emitStatus, options.onKeyEvent);
|
|
232
471
|
for (const providerId of order) {
|
|
233
472
|
request.signal?.throwIfAborted();
|
|
234
473
|
const provider = providers[providerId];
|
|
235
|
-
const
|
|
236
|
-
|
|
237
|
-
if (!hasAuth) {
|
|
474
|
+
const multi = await getProviderKeys(providerId);
|
|
475
|
+
if (multi.keys.length === 0) {
|
|
238
476
|
failures.push({ provider: providerId, message: "no API key configured" });
|
|
239
477
|
continue;
|
|
240
478
|
}
|
|
241
479
|
const model = providerId === requested
|
|
242
480
|
? (request.model ?? provider.defaultModel)
|
|
243
481
|
: provider.defaultModel;
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
...activeRequest,
|
|
264
|
-
tools: undefined,
|
|
265
|
-
toolChoice: undefined,
|
|
266
|
-
parallelToolCalls: undefined,
|
|
267
|
-
};
|
|
268
|
-
if (provider.stream) {
|
|
269
|
-
return await provider.stream(textRequest, auth, onToken);
|
|
270
|
-
}
|
|
271
|
-
const result = await provider.complete(textRequest, auth);
|
|
272
|
-
onToken(result.text);
|
|
273
|
-
return result;
|
|
274
|
-
}
|
|
275
|
-
throw toolError;
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
catch (error) {
|
|
279
|
-
if (isRetriableError(error)) {
|
|
280
|
-
const wait = isRateLimited(error)
|
|
281
|
-
? retryWaitMs(error, attempt)
|
|
282
|
-
: networkRetryWaitMs(attempt);
|
|
283
|
-
if (attempt < MAX_RETRIES && wait <= MAX_RETRY_WAIT_MS) {
|
|
284
|
-
const reason = isRateLimited(error)
|
|
285
|
-
? "rate limited"
|
|
286
|
-
: error instanceof ProviderError && error.status
|
|
287
|
-
? `server error (${error.status})`
|
|
288
|
-
: "connection glitch";
|
|
289
|
-
// Single-line status for the TUI footer (no leading newlines).
|
|
290
|
-
const from = providerId !== requested ? ` (fallback from ${requested})` : "";
|
|
291
|
-
emitStatus(`⏳ ${providerId}${from} ${reason}, retrying in ${Math.ceil(wait / 1000)}s…`);
|
|
292
|
-
await sleep(wait, request.signal);
|
|
293
|
-
continue;
|
|
294
|
-
}
|
|
295
|
-
if (isRateLimited(error)) {
|
|
296
|
-
const suffix = wait > MAX_RETRY_WAIT_MS
|
|
297
|
-
? ` (~${Math.ceil(wait / 1000)}s)`
|
|
298
|
-
: "";
|
|
299
|
-
emitStatus(`⏳ ${providerId} rate limited${suffix}; staying on selected provider.`);
|
|
300
|
-
}
|
|
301
|
-
failures.push({ provider: providerId, message: summarizeProviderError(error) });
|
|
302
|
-
throw new Error(`No provider could stream the request.${formatFailures(failures)}`);
|
|
303
|
-
}
|
|
304
|
-
failures.push({ provider: providerId, message: summarizeProviderError(error) });
|
|
305
|
-
if (shouldStopFallback(error)) {
|
|
306
|
-
throw new Error(`No provider could stream the request.${formatFailures(failures)}`);
|
|
307
|
-
}
|
|
308
|
-
break;
|
|
482
|
+
try {
|
|
483
|
+
return await runWithKeyRotation({
|
|
484
|
+
providerId,
|
|
485
|
+
provider,
|
|
486
|
+
request,
|
|
487
|
+
model,
|
|
488
|
+
emitKey,
|
|
489
|
+
mode: "stream",
|
|
490
|
+
onToken,
|
|
491
|
+
onStatus: emitStatus,
|
|
492
|
+
});
|
|
493
|
+
}
|
|
494
|
+
catch (error) {
|
|
495
|
+
failures.push({
|
|
496
|
+
provider: providerId,
|
|
497
|
+
message: summarizeProviderError(error),
|
|
498
|
+
});
|
|
499
|
+
if (isKeyCircleStopError(error) || shouldStopProviderFallback(error)) {
|
|
500
|
+
throw new Error(`No provider could stream the request.${formatFailures(failures)}`);
|
|
309
501
|
}
|
|
502
|
+
// Continue to next provider when fallback is enabled (e.g. 413).
|
|
310
503
|
}
|
|
311
504
|
}
|
|
312
505
|
throw new Error(`No provider could stream the request.${formatFailures(failures)}`);
|
package/dist/llm/router.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/llm/router.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,OAAO,EACL,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,kFAAkF;AAClF,MAAM,iBAAiB,GAAG,OAAO,CAAC;AAElC,KAAK,UAAU,KAAK,CAAC,EAAU,EAAE,MAAoB;IACnD,IAAI,MAAM,EAAE,OAAO;QAAE,MAAM,MAAM,CAAC,MAAM,IAAI,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;IACjE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,KAAqB,CAAC;QAC1B,IAAI,OAAO,GAAG,GAAS,EAAE,GAAE,CAAC,CAAC;QAC7B,MAAM,KAAK,GAAG,GAAS,EAAE;YACvB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC;QACF,OAAO,GAAG,GAAS,EAAE;YACnB,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC9C,CAAC,CAAC;QACF,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YACtB,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,CAAC;QACZ,CAAC,EAAE,EAAE,CAAC,CAAC;QACP,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,KAAK,YAAY,aAAa,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,CAAC;AAChE,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAc;IAC7C,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAClC,OAAO,CACL,GAAG,CAAC,QAAQ,CAAC,2CAA2C,CAAC;QACzD,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC1B,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC;QACzB,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC5B,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC;QACzB,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC5B,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC;QAC7B,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;QACvB,GAAG,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QACtC,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAChC,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,wEAAwE;IACxE,sEAAsE;IACtE,+DAA+D;IAC/D,IAAI,uDAAuD,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1E,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,IAAI,KAAK,YAAY,aAAa,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;QACjC,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,uBAAuB,CAAC,KAAK,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,WAAW,CAAC,KAAc,EAAE,OAAe;IAClD,IAAI,KAAK,YAAY,aAAa,IAAI,KAAK,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;QAC5E,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IACnD,CAAC;IACD,8CAA8C;IAC9C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC;AACtC,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAe;IACzC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC;AACtC,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAc;IAC5C,IAAI,KAAK,YAAY,aAAa,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAC3D,OAAO,mFAAmF,CAAC;IAC7F,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAEvE,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC7C,CAAC;AAOD,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACjE,CAAC;AAED,SAAS,cAAc,CAAC,QAA2B;IACjD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CACpC,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CACrE,CAAC;IACF,OAAO,iDAAiD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAC5E,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,KAAK,YAAY,aAAa,EAAE,CAAC;QAEnC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IAC/D,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,wEAAwE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAChG,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAoC;IACxD,IAAI,EAAE,YAAY;IAClB,MAAM,EAAE,cAAc;IACtB,UAAU,EAAE,kBAAkB;IAC9B,MAAM,EAAE,cAAc;IACtB,SAAS,EAAE,iBAAiB;IAC5B,MAAM,EAAE,cAAc;IACtB,WAAW,EAAE,mBAAmB;IAChC,MAAM,EAAE,cAAc;IACtB,YAAY,EAAE,cAAc;IAC5B,MAAM,EAAE,cAAc;IACtB,MAAM,EAAE,cAAc;IACtB,YAAY,EAAE,iBAAiB;CAChC,CAAC;AAEF,MAAM,aAAa,GAAiB;IAClC,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,YAAY;IACZ,aAAa;IACb,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,WAAW;IACX,YAAY;IACZ,QAAQ;IACR,YAAY;CACb,CAAC;AAGF,MAAM,UAAU,kBAAkB,CAChC,SAAqB,EACrB,QAAiB,EACjB,OAAO,GAAG,KAAK;IAEf,IAAI,CAAC,OAAO;QAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,QAAQ;QACvB,CAAC,CAAC,aAAa,CAAC,MAAM,CAClB,CAAC,QAAQ,EAAE,EAAE,CACX,QAAQ,KAAK,SAAS,IAAI,gBAAgB,CAAC,QAAQ,CAAC,KAAK,YAAY,CACxE;QACH,CAAC,CAAC,aAAa,CAAC;IAClB,OAAO,CAAC,SAAS,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,QAAoB;IAC9C,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,QAAoB;IAEpB,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACjD,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;IACnC,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;AAClC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAA0B;IAE1B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC,eAAe,CAAC;IAC7D,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IAC1C,MAAM,cAAc,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,KAAK,YAAY,CAAC,YAAY,CAAC;IACrF,MAAM,eAAe,GACnB,MAAM,CAAC,gBAAgB,IAAI,CAAC,cAAc,IAAI,OAAO,CAAC,kBAAkB,KAAK,IAAI,CAAC,CAAC;IACrF,MAAM,KAAK,GAAG,kBAAkB,CAC9B,SAAS,EACT,MAAM,CAAC,QAAQ,EACf,eAAe,CAChB,CAAC;IACF,MAAM,QAAQ,GAAsB,EAAE,CAAC;IAEvC,KAAK,MAAM,UAAU,IAAI,KAAK,EAAE,CAAC;QAC/B,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,OAAO,GACX,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC,CAAC;YAC1E,SAAS;QACX,CAAC;QAED,IAAI,CAAC;YACH,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;gBACxD,IAAI,CAAC;oBACH,MAAM,KAAK,GACT,UAAU,KAAK,SAAS;wBACtB,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC,YAAY,CAAC;wBAC1C,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;oBAC5B,MAAM,aAAa,GAAG,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;oBAClE,IAAI,CAAC;wBACH,OAAO,MAAM,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;oBACtD,CAAC;oBAAC,OAAO,SAAS,EAAE,CAAC;wBACnB,IACE,aAAa,CAAC,KAAK,EAAE,MAAM;4BAC3B,uBAAuB,CAAC,SAAS,CAAC,EAClC,CAAC;4BACD,iBAAiB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;4BACrC,MAAM,WAAW,GAAG;gCAClB,GAAG,aAAa;gCAChB,KAAK,EAAE,SAAS;gCAChB,UAAU,EAAE,SAAS;gCACrB,iBAAiB,EAAE,SAAS;6BAC7B,CAAC;4BACF,OAAO,MAAM,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;wBACpD,CAAC;wBACD,MAAM,SAAS,CAAC;oBAClB,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC5B,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC;4BAC/B,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC;4BAC7B,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;wBAChC,IAAI,OAAO,GAAG,WAAW,IAAI,IAAI,IAAI,iBAAiB,EAAE,CAAC;4BACvD,MAAM,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;4BAClC,SAAS;wBACX,CAAC;wBACD,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,sBAAsB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;wBAChF,MAAM,IAAI,KAAK,CACb,0CAA0C,cAAc,CAAC,QAAQ,CAAC,EAAE,CACrE,CAAC;oBACJ,CAAC;oBACD,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,sBAAsB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBAChF,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC9B,MAAM,IAAI,KAAK,CACb,0CAA0C,cAAc,CAAC,QAAQ,CAAC,EAAE,CACrE,CAAC;oBACJ,CAAC;oBACD,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CACb,0CAA0C,cAAc,CAAC,QAAQ,CAAC,EAAE,CACrE,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAA0B,EAC1B,OAAgC,EAChC,QAAoC;IAEpC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC,eAAe,CAAC;IAC7D,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IAC1C,MAAM,cAAc,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,KAAK,YAAY,CAAC,YAAY,CAAC;IACrF,MAAM,eAAe,GACnB,MAAM,CAAC,gBAAgB,IAAI,CAAC,cAAc,IAAI,OAAO,CAAC,kBAAkB,KAAK,IAAI,CAAC,CAAC;IACrF,MAAM,KAAK,GAAG,kBAAkB,CAC9B,SAAS,EACT,MAAM,CAAC,QAAQ,EACf,eAAe,CAChB,CAAC;IACF,MAAM,QAAQ,GAAsB,EAAE,CAAC;IACvC,MAAM,UAAU,GAAG,QAAQ,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAE/D,KAAK,MAAM,UAAU,IAAI,KAAK,EAAE,CAAC;QAC/B,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,OAAO,GACX,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC,CAAC;YAC1E,SAAS;QACX,CAAC;QAED,MAAM,KAAK,GACT,UAAU,KAAK,SAAS;YACtB,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC,YAAY,CAAC;YAC1C,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;QAE5B,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;YACxD,IAAI,CAAC;gBACH,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;gBACjC,MAAM,aAAa,GAAG,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;gBAClE,IAAI,CAAC;oBACH,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;wBACpB,OAAO,MAAM,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;oBAC7D,CAAC;oBACD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;oBAC5D,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBACrB,OAAO,MAAM,CAAC;gBAChB,CAAC;gBAAC,OAAO,SAAS,EAAE,CAAC;oBACnB,iEAAiE;oBACjE,IACE,aAAa,CAAC,KAAK,EAAE,MAAM;wBAC3B,uBAAuB,CAAC,SAAS,CAAC,EAClC,CAAC;wBACD,iBAAiB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;wBACrC,UAAU,CACR,KAAK,UAAU,IAAI,KAAK,gEAAgE,CACzF,CAAC;wBACF,MAAM,WAAW,GAAG;4BAClB,GAAG,aAAa;4BAChB,KAAK,EAAE,SAAS;4BAChB,UAAU,EAAE,SAAS;4BACrB,iBAAiB,EAAE,SAAS;yBAC7B,CAAC;wBACF,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;4BACpB,OAAO,MAAM,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;wBAC3D,CAAC;wBACD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;wBAC1D,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;wBACrB,OAAO,MAAM,CAAC;oBAChB,CAAC;oBACD,MAAM,SAAS,CAAC;gBAClB,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC5B,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC;wBAC/B,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC;wBAC7B,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;oBAChC,IAAI,OAAO,GAAG,WAAW,IAAI,IAAI,IAAI,iBAAiB,EAAE,CAAC;wBACvD,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC;4BACjC,CAAC,CAAC,cAAc;4BAChB,CAAC,CAAC,KAAK,YAAY,aAAa,IAAI,KAAK,CAAC,MAAM;gCAC9C,CAAC,CAAC,iBAAiB,KAAK,CAAC,MAAM,GAAG;gCAClC,CAAC,CAAC,mBAAmB,CAAC;wBAC1B,+DAA+D;wBAC/D,MAAM,IAAI,GACR,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;wBAClE,UAAU,CACR,KAAK,UAAU,GAAG,IAAI,IAAI,MAAM,iBAAiB,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAC5E,CAAC;wBACF,MAAM,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;wBAClC,SAAS;oBACX,CAAC;oBACD,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;wBACzB,MAAM,MAAM,GACV,IAAI,GAAG,iBAAiB;4BACtB,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;4BAClC,CAAC,CAAC,EAAE,CAAC;wBACT,UAAU,CACR,KAAK,UAAU,gBAAgB,MAAM,iCAAiC,CACvE,CAAC;oBACJ,CAAC;oBACD,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,sBAAsB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBAChF,MAAM,IAAI,KAAK,CACb,wCAAwC,cAAc,CAAC,QAAQ,CAAC,EAAE,CACnE,CAAC;gBACJ,CAAC;gBACD,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,sBAAsB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAChF,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC9B,MAAM,IAAI,KAAK,CACb,wCAAwC,cAAc,CAAC,QAAQ,CAAC,EAAE,CACnE,CAAC;gBACJ,CAAC;gBACD,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CACb,wCAAwC,cAAc,CAAC,QAAQ,CAAC,EAAE,CACnE,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,UAAsB,EACtB,cAAuB;IAEvB,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IACvC,MAAM,IAAI,GACR,UAAU,KAAK,QAAQ;QACrB,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,IAAI,CAAC,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE;QACzE,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,IAAI,CAAC,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC5E,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC"}
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/llm/router.ts"],"names":[],"mappings":"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"}
|