@pentoshi/clai 3.8.20 → 3.8.22

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 (161) hide show
  1. package/README.md +8 -5
  2. package/dist/agent/confirm-port.d.ts +5 -2
  3. package/dist/agent/confirm-port.js +11 -5
  4. package/dist/agent/confirm-port.js.map +1 -1
  5. package/dist/agent/context-breakdown.d.ts +37 -0
  6. package/dist/agent/context-breakdown.js +145 -0
  7. package/dist/agent/context-breakdown.js.map +1 -0
  8. package/dist/agent/plan-decision.js +7 -3
  9. package/dist/agent/plan-decision.js.map +1 -1
  10. package/dist/agent/plan-tool.js +63 -20
  11. package/dist/agent/plan-tool.js.map +1 -1
  12. package/dist/agent/progress-pause-policy.d.ts +21 -0
  13. package/dist/agent/progress-pause-policy.js +28 -0
  14. package/dist/agent/progress-pause-policy.js.map +1 -0
  15. package/dist/agent/reliability-policy.d.ts +85 -0
  16. package/dist/agent/reliability-policy.js +158 -0
  17. package/dist/agent/reliability-policy.js.map +1 -0
  18. package/dist/agent/runner.js +352 -164
  19. package/dist/agent/runner.js.map +1 -1
  20. package/dist/agent/session-state.d.ts +11 -1
  21. package/dist/agent/session-state.js +22 -15
  22. package/dist/agent/session-state.js.map +1 -1
  23. package/dist/agent/stop-summary.js +3 -1
  24. package/dist/agent/stop-summary.js.map +1 -1
  25. package/dist/agent/task-evidence.js +13 -0
  26. package/dist/agent/task-evidence.js.map +1 -1
  27. package/dist/agent/tool-history.d.ts +12 -0
  28. package/dist/agent/tool-history.js +159 -0
  29. package/dist/agent/tool-history.js.map +1 -1
  30. package/dist/agent/tool-output-formatting.d.ts +4 -0
  31. package/dist/agent/tool-output-formatting.js +29 -4
  32. package/dist/agent/tool-output-formatting.js.map +1 -1
  33. package/dist/app/controllers/session-controller.d.ts +6 -0
  34. package/dist/app/controllers/session-controller.js +21 -1
  35. package/dist/app/controllers/session-controller.js.map +1 -1
  36. package/dist/app/ports/confirm-port.d.ts +1 -1
  37. package/dist/commands/providers.js +57 -26
  38. package/dist/commands/providers.js.map +1 -1
  39. package/dist/index.js +3 -3
  40. package/dist/index.js.map +1 -1
  41. package/dist/llm/gemini.js +4 -1
  42. package/dist/llm/gemini.js.map +1 -1
  43. package/dist/llm/key-rotation.d.ts +52 -0
  44. package/dist/llm/key-rotation.js +122 -0
  45. package/dist/llm/key-rotation.js.map +1 -0
  46. package/dist/llm/provider.d.ts +2 -0
  47. package/dist/llm/provider.js +8 -0
  48. package/dist/llm/provider.js.map +1 -1
  49. package/dist/llm/router.d.ts +15 -2
  50. package/dist/llm/router.js +318 -125
  51. package/dist/llm/router.js.map +1 -1
  52. package/dist/prompts/embedded.js +1 -1
  53. package/dist/prompts/embedded.js.map +1 -1
  54. package/dist/prompts/index.d.ts +25 -0
  55. package/dist/prompts/index.js +61 -7
  56. package/dist/prompts/index.js.map +1 -1
  57. package/dist/prompts/system.agent.md +3 -1
  58. package/dist/repl/slash-commands.js +14 -8
  59. package/dist/repl/slash-commands.js.map +1 -1
  60. package/dist/repl.d.ts +4 -1
  61. package/dist/repl.js +12 -2
  62. package/dist/repl.js.map +1 -1
  63. package/dist/store/config.d.ts +18 -0
  64. package/dist/store/config.js +9 -0
  65. package/dist/store/config.js.map +1 -1
  66. package/dist/store/history.d.ts +8 -0
  67. package/dist/store/history.js +38 -0
  68. package/dist/store/history.js.map +1 -1
  69. package/dist/store/keys.d.ts +55 -0
  70. package/dist/store/keys.js +226 -21
  71. package/dist/store/keys.js.map +1 -1
  72. package/dist/store/logs.js +35 -12
  73. package/dist/store/logs.js.map +1 -1
  74. package/dist/store/paths.d.ts +13 -0
  75. package/dist/store/paths.js +23 -1
  76. package/dist/store/paths.js.map +1 -1
  77. package/dist/store/session-workspace.d.ts +79 -0
  78. package/dist/store/session-workspace.js +199 -0
  79. package/dist/store/session-workspace.js.map +1 -0
  80. package/dist/tools/definitions.js +9 -1
  81. package/dist/tools/definitions.js.map +1 -1
  82. package/dist/tools/http.d.ts +8 -0
  83. package/dist/tools/http.js +86 -2
  84. package/dist/tools/http.js.map +1 -1
  85. package/dist/tools/pentest-workflows.js +38 -19
  86. package/dist/tools/pentest-workflows.js.map +1 -1
  87. package/dist/tools/registry.js +25 -2
  88. package/dist/tools/registry.js.map +1 -1
  89. package/dist/tools/shell.d.ts +1 -1
  90. package/dist/tools/web/search.js +22 -3
  91. package/dist/tools/web/search.js.map +1 -1
  92. package/dist/tui/format-keys.js +29 -6
  93. package/dist/tui/format-keys.js.map +1 -1
  94. package/dist/tui-v2/app/command-handlers.js +1 -2
  95. package/dist/tui-v2/app/command-handlers.js.map +1 -1
  96. package/dist/tui-v2/app/commands/config-commands.d.ts +1 -2
  97. package/dist/tui-v2/app/commands/config-commands.js +1 -11
  98. package/dist/tui-v2/app/commands/config-commands.js.map +1 -1
  99. package/dist/tui-v2/app/commands/key-commands.d.ts +1 -1
  100. package/dist/tui-v2/app/commands/key-commands.js +148 -63
  101. package/dist/tui-v2/app/commands/key-commands.js.map +1 -1
  102. package/dist/tui-v2/app/commands/picker-commands.js +6 -0
  103. package/dist/tui-v2/app/commands/picker-commands.js.map +1 -1
  104. package/dist/tui-v2/bootstrap/composition-root.js +8 -5
  105. package/dist/tui-v2/bootstrap/composition-root.js.map +1 -1
  106. package/dist/tui-v2/bootstrap/overlay-ports.js +7 -2
  107. package/dist/tui-v2/bootstrap/overlay-ports.js.map +1 -1
  108. package/dist/tui-v2/components/modal/keys-modal.d.ts +19 -0
  109. package/dist/tui-v2/components/modal/keys-modal.js +203 -0
  110. package/dist/tui-v2/components/modal/keys-modal.js.map +1 -0
  111. package/dist/tui-v2/components/overlay/overlay-host.js +6 -2
  112. package/dist/tui-v2/components/overlay/overlay-host.js.map +1 -1
  113. package/dist/tui-v2/components/pager/pager-line.js +5 -2
  114. package/dist/tui-v2/components/pager/pager-line.js.map +1 -1
  115. package/dist/tui-v2/components/pager/pager.js +6 -3
  116. package/dist/tui-v2/components/pager/pager.js.map +1 -1
  117. package/dist/tui-v2/components/plan/use-pane-presence.d.ts +6 -4
  118. package/dist/tui-v2/components/plan/use-pane-presence.js +8 -45
  119. package/dist/tui-v2/components/plan/use-pane-presence.js.map +1 -1
  120. package/dist/tui-v2/components/transcript/assistant-message.js +4 -1
  121. package/dist/tui-v2/components/transcript/assistant-message.js.map +1 -1
  122. package/dist/tui-v2/components/transcript/compacted-row.js +1 -1
  123. package/dist/tui-v2/components/transcript/compacted-row.js.map +1 -1
  124. package/dist/tui-v2/components/transcript/file-diff-card.js +3 -23
  125. package/dist/tui-v2/components/transcript/file-diff-card.js.map +1 -1
  126. package/dist/tui-v2/components/transcript/linkable-text.js +9 -2
  127. package/dist/tui-v2/components/transcript/linkable-text.js.map +1 -1
  128. package/dist/tui-v2/components/transcript/selectable-line.d.ts +22 -0
  129. package/dist/tui-v2/components/transcript/selectable-line.js +24 -0
  130. package/dist/tui-v2/components/transcript/selectable-line.js.map +1 -0
  131. package/dist/tui-v2/components/transcript/thinking-block.js +3 -1
  132. package/dist/tui-v2/components/transcript/thinking-block.js.map +1 -1
  133. package/dist/tui-v2/components/transcript/tool-card.d.ts +5 -3
  134. package/dist/tui-v2/components/transcript/tool-card.js +39 -33
  135. package/dist/tui-v2/components/transcript/tool-card.js.map +1 -1
  136. package/dist/tui-v2/components/transcript/use-click-without-drag.js +4 -1
  137. package/dist/tui-v2/components/transcript/use-click-without-drag.js.map +1 -1
  138. package/dist/tui-v2/components/transcript/user-message.js +1 -1
  139. package/dist/tui-v2/components/transcript/user-message.js.map +1 -1
  140. package/dist/tui-v2/controllers/overlay-controller.d.ts +36 -0
  141. package/dist/tui-v2/controllers/overlay-controller.js +28 -0
  142. package/dist/tui-v2/controllers/overlay-controller.js.map +1 -1
  143. package/dist/tui-v2/rendering/batch-sections.d.ts +15 -4
  144. package/dist/tui-v2/rendering/batch-sections.js +157 -64
  145. package/dist/tui-v2/rendering/batch-sections.js.map +1 -1
  146. package/dist/tui-v2/rendering/format-help.js +1 -1
  147. package/dist/tui-v2/rendering/format-help.js.map +1 -1
  148. package/dist/tui-v2/rendering/open-tool-output.js +10 -7
  149. package/dist/tui-v2/rendering/open-tool-output.js.map +1 -1
  150. package/dist/tui-v2/rendering/pager-markdown.d.ts +9 -0
  151. package/dist/tui-v2/rendering/pager-markdown.js +46 -0
  152. package/dist/tui-v2/rendering/pager-markdown.js.map +1 -1
  153. package/dist/tui-v2/rendering/pager-view-policy.d.ts +6 -3
  154. package/dist/tui-v2/rendering/pager-view-policy.js +9 -13
  155. package/dist/tui-v2/rendering/pager-view-policy.js.map +1 -1
  156. package/dist/tui-v2/rendering/sanitize-display.js +3 -1
  157. package/dist/tui-v2/rendering/sanitize-display.js.map +1 -1
  158. package/dist/types.d.ts +7 -0
  159. package/dist/version.generated.d.ts +2 -2
  160. package/dist/version.generated.js +2 -2
  161. package/package.json +1 -1
@@ -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 summarizeProviderError(error) {
87
- if (error instanceof ProviderError && error.status === 429) {
88
- return "Model is rate limited (429). Try another provider/model or switch to a paid plan.";
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
- const message = error instanceof Error ? error.message : String(error);
91
- return message.replace(/\s+/g, " ").trim();
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
- function shouldStopFallback(error) {
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
- export async function completeWithProvider(request) {
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 auth = await providerAuth(providerId);
167
- const hasAuth = providerId === "ollama" ? Boolean(auth.baseUrl) : Boolean(auth.apiKey);
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
- for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {
174
- try {
175
- const model = providerId === requested
176
- ? (request.model ?? provider.defaultModel)
177
- : provider.defaultModel;
178
- const activeRequest = { ...request, provider: providerId, model };
179
- try {
180
- return await provider.complete(activeRequest, auth);
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 (err) {
218
- failures.push({ provider: providerId, message: summarizeProviderError(err) });
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, onStatus) {
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 auth = await providerAuth(providerId);
236
- const hasAuth = providerId === "ollama" ? Boolean(auth.baseUrl) : Boolean(auth.apiKey);
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
- for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {
245
- try {
246
- request.signal?.throwIfAborted();
247
- const activeRequest = { ...request, provider: providerId, model };
248
- try {
249
- if (provider.stream) {
250
- return await provider.stream(activeRequest, auth, onToken);
251
- }
252
- const result = await provider.complete(activeRequest, auth);
253
- onToken(result.text);
254
- return result;
255
- }
256
- catch (toolError) {
257
- // One retry without tools when the model/provider rejects tools.
258
- if (activeRequest.tools?.length &&
259
- isToolsUnsupportedError(toolError)) {
260
- markTextOnlyModel(providerId, model);
261
- emitStatus(`ℹ ${providerId}/${model} does not support native tools — falling back to text protocol`);
262
- const textRequest = {
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)}`);
@@ -1 +1 @@
1
- {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/llm/router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/llm/router.ts"],"names":[],"mappings":"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"}