@pentoshi/clai 3.8.20 → 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.
Files changed (144) hide show
  1. package/README.md +8 -5
  2. package/dist/agent/context-breakdown.d.ts +37 -0
  3. package/dist/agent/context-breakdown.js +145 -0
  4. package/dist/agent/context-breakdown.js.map +1 -0
  5. package/dist/agent/reliability-policy.d.ts +85 -0
  6. package/dist/agent/reliability-policy.js +158 -0
  7. package/dist/agent/reliability-policy.js.map +1 -0
  8. package/dist/agent/runner.js +235 -136
  9. package/dist/agent/runner.js.map +1 -1
  10. package/dist/agent/session-state.d.ts +11 -1
  11. package/dist/agent/session-state.js +22 -15
  12. package/dist/agent/session-state.js.map +1 -1
  13. package/dist/agent/task-evidence.js +13 -0
  14. package/dist/agent/task-evidence.js.map +1 -1
  15. package/dist/agent/tool-history.d.ts +12 -0
  16. package/dist/agent/tool-history.js +159 -0
  17. package/dist/agent/tool-history.js.map +1 -1
  18. package/dist/agent/tool-output-formatting.d.ts +4 -0
  19. package/dist/agent/tool-output-formatting.js +13 -4
  20. package/dist/agent/tool-output-formatting.js.map +1 -1
  21. package/dist/app/controllers/session-controller.d.ts +6 -0
  22. package/dist/app/controllers/session-controller.js +21 -1
  23. package/dist/app/controllers/session-controller.js.map +1 -1
  24. package/dist/commands/providers.js +57 -26
  25. package/dist/commands/providers.js.map +1 -1
  26. package/dist/index.js +3 -3
  27. package/dist/index.js.map +1 -1
  28. package/dist/llm/gemini.js +4 -1
  29. package/dist/llm/gemini.js.map +1 -1
  30. package/dist/llm/key-rotation.d.ts +52 -0
  31. package/dist/llm/key-rotation.js +122 -0
  32. package/dist/llm/key-rotation.js.map +1 -0
  33. package/dist/llm/provider.d.ts +2 -0
  34. package/dist/llm/provider.js +8 -0
  35. package/dist/llm/provider.js.map +1 -1
  36. package/dist/llm/router.d.ts +15 -2
  37. package/dist/llm/router.js +318 -125
  38. package/dist/llm/router.js.map +1 -1
  39. package/dist/prompts/embedded.js +1 -1
  40. package/dist/prompts/embedded.js.map +1 -1
  41. package/dist/prompts/index.d.ts +25 -0
  42. package/dist/prompts/index.js +55 -7
  43. package/dist/prompts/index.js.map +1 -1
  44. package/dist/prompts/system.agent.md +1 -1
  45. package/dist/repl/slash-commands.js +14 -8
  46. package/dist/repl/slash-commands.js.map +1 -1
  47. package/dist/repl.d.ts +4 -1
  48. package/dist/repl.js +12 -2
  49. package/dist/repl.js.map +1 -1
  50. package/dist/store/config.d.ts +18 -0
  51. package/dist/store/config.js +9 -0
  52. package/dist/store/config.js.map +1 -1
  53. package/dist/store/history.d.ts +8 -0
  54. package/dist/store/history.js +38 -0
  55. package/dist/store/history.js.map +1 -1
  56. package/dist/store/keys.d.ts +55 -0
  57. package/dist/store/keys.js +226 -21
  58. package/dist/store/keys.js.map +1 -1
  59. package/dist/store/logs.js +35 -12
  60. package/dist/store/logs.js.map +1 -1
  61. package/dist/store/paths.d.ts +13 -0
  62. package/dist/store/paths.js +23 -1
  63. package/dist/store/paths.js.map +1 -1
  64. package/dist/store/session-workspace.d.ts +79 -0
  65. package/dist/store/session-workspace.js +199 -0
  66. package/dist/store/session-workspace.js.map +1 -0
  67. package/dist/tools/definitions.js +9 -1
  68. package/dist/tools/definitions.js.map +1 -1
  69. package/dist/tools/http.d.ts +8 -0
  70. package/dist/tools/http.js +86 -2
  71. package/dist/tools/http.js.map +1 -1
  72. package/dist/tools/pentest-workflows.js +38 -19
  73. package/dist/tools/pentest-workflows.js.map +1 -1
  74. package/dist/tools/registry.js +25 -2
  75. package/dist/tools/registry.js.map +1 -1
  76. package/dist/tools/shell.d.ts +1 -1
  77. package/dist/tui/format-keys.js +29 -6
  78. package/dist/tui/format-keys.js.map +1 -1
  79. package/dist/tui-v2/app/command-handlers.js +1 -2
  80. package/dist/tui-v2/app/command-handlers.js.map +1 -1
  81. package/dist/tui-v2/app/commands/config-commands.d.ts +1 -2
  82. package/dist/tui-v2/app/commands/config-commands.js +1 -11
  83. package/dist/tui-v2/app/commands/config-commands.js.map +1 -1
  84. package/dist/tui-v2/app/commands/key-commands.d.ts +1 -1
  85. package/dist/tui-v2/app/commands/key-commands.js +148 -63
  86. package/dist/tui-v2/app/commands/key-commands.js.map +1 -1
  87. package/dist/tui-v2/app/commands/picker-commands.js +6 -0
  88. package/dist/tui-v2/app/commands/picker-commands.js.map +1 -1
  89. package/dist/tui-v2/bootstrap/composition-root.js +8 -5
  90. package/dist/tui-v2/bootstrap/composition-root.js.map +1 -1
  91. package/dist/tui-v2/components/modal/keys-modal.d.ts +19 -0
  92. package/dist/tui-v2/components/modal/keys-modal.js +203 -0
  93. package/dist/tui-v2/components/modal/keys-modal.js.map +1 -0
  94. package/dist/tui-v2/components/overlay/overlay-host.js +6 -2
  95. package/dist/tui-v2/components/overlay/overlay-host.js.map +1 -1
  96. package/dist/tui-v2/components/pager/pager-line.js +5 -2
  97. package/dist/tui-v2/components/pager/pager-line.js.map +1 -1
  98. package/dist/tui-v2/components/pager/pager.js +6 -3
  99. package/dist/tui-v2/components/pager/pager.js.map +1 -1
  100. package/dist/tui-v2/components/plan/use-pane-presence.d.ts +6 -4
  101. package/dist/tui-v2/components/plan/use-pane-presence.js +8 -45
  102. package/dist/tui-v2/components/plan/use-pane-presence.js.map +1 -1
  103. package/dist/tui-v2/components/transcript/assistant-message.js +4 -1
  104. package/dist/tui-v2/components/transcript/assistant-message.js.map +1 -1
  105. package/dist/tui-v2/components/transcript/compacted-row.js +1 -1
  106. package/dist/tui-v2/components/transcript/compacted-row.js.map +1 -1
  107. package/dist/tui-v2/components/transcript/file-diff-card.js +3 -23
  108. package/dist/tui-v2/components/transcript/file-diff-card.js.map +1 -1
  109. package/dist/tui-v2/components/transcript/linkable-text.js +9 -2
  110. package/dist/tui-v2/components/transcript/linkable-text.js.map +1 -1
  111. package/dist/tui-v2/components/transcript/selectable-line.d.ts +22 -0
  112. package/dist/tui-v2/components/transcript/selectable-line.js +24 -0
  113. package/dist/tui-v2/components/transcript/selectable-line.js.map +1 -0
  114. package/dist/tui-v2/components/transcript/thinking-block.js +3 -1
  115. package/dist/tui-v2/components/transcript/thinking-block.js.map +1 -1
  116. package/dist/tui-v2/components/transcript/tool-card.d.ts +5 -3
  117. package/dist/tui-v2/components/transcript/tool-card.js +39 -33
  118. package/dist/tui-v2/components/transcript/tool-card.js.map +1 -1
  119. package/dist/tui-v2/components/transcript/use-click-without-drag.js +4 -1
  120. package/dist/tui-v2/components/transcript/use-click-without-drag.js.map +1 -1
  121. package/dist/tui-v2/components/transcript/user-message.js +1 -1
  122. package/dist/tui-v2/components/transcript/user-message.js.map +1 -1
  123. package/dist/tui-v2/controllers/overlay-controller.d.ts +36 -0
  124. package/dist/tui-v2/controllers/overlay-controller.js +28 -0
  125. package/dist/tui-v2/controllers/overlay-controller.js.map +1 -1
  126. package/dist/tui-v2/rendering/batch-sections.d.ts +15 -4
  127. package/dist/tui-v2/rendering/batch-sections.js +157 -64
  128. package/dist/tui-v2/rendering/batch-sections.js.map +1 -1
  129. package/dist/tui-v2/rendering/format-help.js +1 -1
  130. package/dist/tui-v2/rendering/format-help.js.map +1 -1
  131. package/dist/tui-v2/rendering/open-tool-output.js +10 -7
  132. package/dist/tui-v2/rendering/open-tool-output.js.map +1 -1
  133. package/dist/tui-v2/rendering/pager-markdown.d.ts +9 -0
  134. package/dist/tui-v2/rendering/pager-markdown.js +46 -0
  135. package/dist/tui-v2/rendering/pager-markdown.js.map +1 -1
  136. package/dist/tui-v2/rendering/pager-view-policy.d.ts +6 -3
  137. package/dist/tui-v2/rendering/pager-view-policy.js +9 -13
  138. package/dist/tui-v2/rendering/pager-view-policy.js.map +1 -1
  139. package/dist/tui-v2/rendering/sanitize-display.js +3 -1
  140. package/dist/tui-v2/rendering/sanitize-display.js.map +1 -1
  141. package/dist/types.d.ts +7 -0
  142. package/dist/version.generated.d.ts +2 -2
  143. package/dist/version.generated.js +2 -2
  144. package/package.json +1 -1
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Pure helpers for multi-API-key rotation within a single provider.
3
+ *
4
+ * Single key: many time-increasing retries (router owns the count).
5
+ * Multiple keys: circular order from sticky start; 2 attempts per key.
6
+ */
7
+ /** Max stored API keys per LLM provider (UI + save clamp). */
8
+ export const MAX_PROVIDER_KEYS = 10;
9
+ /** Attempts per key when multiple keys are configured (initial + one retry). */
10
+ export const MULTI_KEY_ATTEMPTS = 2;
11
+ /**
12
+ * Circular attempt order of length `n` starting at `startIndex`.
13
+ * Example: n=4, start=2 → [2, 3, 0, 1]
14
+ */
15
+ export function buildKeyAttemptPlan(n, startIndex) {
16
+ if (n <= 0)
17
+ return [];
18
+ if (n === 1)
19
+ return [0];
20
+ const start = ((startIndex % n) + n) % n;
21
+ const order = [];
22
+ for (let i = 0; i < n; i++) {
23
+ order.push((start + i) % n);
24
+ }
25
+ return order;
26
+ }
27
+ /**
28
+ * How many attempts the router should make for one key slot.
29
+ * Single-key mode uses the router's MAX_RETRIES budget (passed in).
30
+ * Multi-key mode is always MULTI_KEY_ATTEMPTS.
31
+ */
32
+ export function attemptsPerKey(keyCount, singleKeyMaxAttempts) {
33
+ if (keyCount <= 1)
34
+ return Math.max(1, singleKeyMaxAttempts);
35
+ return MULTI_KEY_ATTEMPTS;
36
+ }
37
+ function errorStatus(error) {
38
+ if (error && typeof error === "object" && "status" in error) {
39
+ return error.status ?? 0;
40
+ }
41
+ return 0;
42
+ }
43
+ function errorMessage(error) {
44
+ return error instanceof Error ? error.message : String(error ?? "");
45
+ }
46
+ /** Auth failures: rotate to another key, but do not backoff-retry the same key. */
47
+ export function isAuthKeyError(error) {
48
+ const status = errorStatus(error);
49
+ return status === 401 || status === 403;
50
+ }
51
+ /**
52
+ * Per-key billing / balance / quota failures (e.g. HTTP 402 insufficient credits).
53
+ * These will not recover on the same key mid-request — rotate immediately.
54
+ */
55
+ export function isQuotaKeyError(error) {
56
+ const status = errorStatus(error);
57
+ if (status === 402)
58
+ return true;
59
+ // Some gateways return 403/429 with credit wording; treat as quota when explicit.
60
+ const msg = errorMessage(error);
61
+ if (/insufficient credits|insufficient balance|out of credits|no credits|payment required|balance is 0|top up to continue|quota exceeded|billing/i.test(msg)) {
62
+ return true;
63
+ }
64
+ return false;
65
+ }
66
+ /**
67
+ * Failures that should move to the next key without sleeping on the same key
68
+ * (auth revoked, empty wallet). Still try the rest of the circle.
69
+ */
70
+ export function isImmediateKeySwitchError(error) {
71
+ return isAuthKeyError(error) || isQuotaKeyError(error);
72
+ }
73
+ /** Whether this error should rotate to the next API key (auth / capacity / transient). */
74
+ export function isKeyRotatableError(error, isRetriable) {
75
+ if (isRetriable(error))
76
+ return true;
77
+ if (isImmediateKeySwitchError(error))
78
+ return true;
79
+ // Empty / refused admissions sometimes vary by key or free-tier allotment.
80
+ const msg = errorMessage(error);
81
+ if (/no completion text|response was empty|empty response|returned no text/i.test(msg)) {
82
+ return true;
83
+ }
84
+ return false;
85
+ }
86
+ /**
87
+ * Model/request errors that will not improve with another key for the same
88
+ * model. Outer provider fallback may still apply for some statuses (e.g. 413).
89
+ */
90
+ export function isKeyCircleStopError(error) {
91
+ const status = errorStatus(error);
92
+ // 404/422: wrong model or body — other keys won't help.
93
+ // 413 is NOT here: same key circle is pointless, but another provider may work.
94
+ // 402 is rotatable across keys, not a hard circle-stop.
95
+ if (status === 404 || status === 422)
96
+ return true;
97
+ return false;
98
+ }
99
+ export function formatKeyEventStatus(event) {
100
+ const keyPart = event.maskedTail ? ` ${event.maskedTail}` : "";
101
+ const idx = event.keyIndex !== undefined && event.keyCount !== undefined && event.keyCount > 1
102
+ ? ` [${event.keyIndex + 1}/${event.keyCount}]`
103
+ : "";
104
+ switch (event.type) {
105
+ case "using":
106
+ return `using ${event.provider}${idx}${keyPart}`;
107
+ case "switch": {
108
+ const why = event.reason ? ` (${event.reason})` : "";
109
+ return `switching ${event.provider} key${idx}${keyPart}${why}`;
110
+ }
111
+ case "retry": {
112
+ const secs = event.waitMs !== undefined ? ` in ${Math.ceil(event.waitMs / 1000)}s` : "";
113
+ const why = event.reason ?? "retrying";
114
+ return `⏳ ${event.provider}${idx}${keyPart} ${why}${secs}…`;
115
+ }
116
+ case "exhausted":
117
+ return `all ${event.provider} API keys failed`;
118
+ default:
119
+ return `${event.provider}${keyPart}`;
120
+ }
121
+ }
122
+ //# sourceMappingURL=key-rotation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-rotation.js","sourceRoot":"","sources":["../../src/llm/key-rotation.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,8 @@ export declare function assertProvider(value: string): ProviderId;
22
22
  export declare function getDefaultModel(provider: ProviderId): string;
23
23
  export declare function sanitizeProviderModel(provider: ProviderId, model: string): string;
24
24
  export declare function maskSecret(secret: string): string;
25
+ /** Short tail for toast/status lines (`…ab12`). Never exposes the full secret. */
26
+ export declare function maskSecretTail(secret: string): string;
25
27
  export declare function redactSecrets(value: string): string;
26
28
  export declare const providerInfo: Record<string, string>;
27
29
  export declare function getProviderInfoText(provider: string): string;
@@ -105,10 +105,18 @@ export function maskSecret(secret) {
105
105
  return "••••••••";
106
106
  return secret.slice(0, 4) + "••••" + secret.slice(-4);
107
107
  }
108
+ /** Short tail for toast/status lines (`…ab12`). Never exposes the full secret. */
109
+ export function maskSecretTail(secret) {
110
+ const n = secret.length;
111
+ if (n < 4)
112
+ return "••••";
113
+ return `…${secret.slice(-4)}`;
114
+ }
108
115
  export function redactSecrets(value) {
109
116
  return value
110
117
  .replace(/gsk_[A-Za-z0-9_-]+/g, "gsk_••••••")
111
118
  .replace(/AIza[0-9A-Za-z_-]+/g, "AIza••••••")
119
+ .replace(/AQ\.[A-Za-z0-9_-]+/g, "AQ.••••••")
112
120
  .replace(/sk-[A-Za-z0-9._-]+/g, "sk-••••••")
113
121
  .replace(/sk-or-[A-Za-z0-9_-]+/g, "sk-or-••••••")
114
122
  .replace(/sk-ant-[A-Za-z0-9_-]+/g, "sk-ant-••••••")
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/llm/provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/llm/provider.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,22 @@
1
1
  import type { CompletionRequest, CompletionResult, ProviderId } from "../types.js";
2
+ import { type ProviderKeyEvent } from "./key-rotation.js";
2
3
  import type { LlmProvider, ProviderAuth } from "./provider.js";
4
+ /** Toast replace-key so key rotation never stacks notifications. */
5
+ export declare const API_KEY_TOAST_KEY = "api-key-rotation";
6
+ export type ProviderKeyEventHandler = (event: ProviderKeyEvent) => void;
7
+ export interface StreamWithProviderOptions {
8
+ readonly onStatus?: ((message: string) => void) | undefined;
9
+ readonly onKeyEvent?: ProviderKeyEventHandler | undefined;
10
+ }
11
+ /**
12
+ * User-facing classification of provider failures (auth, capacity, disconnect,
13
+ * empty admission, context limit). Used by the fallback table and tests.
14
+ */
15
+ export declare function formatProviderFailureForUser(error: unknown): string;
3
16
  export declare const providers: Record<ProviderId, LlmProvider>;
4
17
  export declare function buildFallbackChain(requested: ProviderId, freeOnly: boolean, enabled?: boolean): ProviderId[];
5
18
  export declare function getProvider(provider: ProviderId): LlmProvider;
6
19
  export declare function providerAuth(provider: ProviderId): Promise<ProviderAuth>;
7
- export declare function completeWithProvider(request: CompletionRequest): Promise<CompletionResult>;
8
- export declare function streamWithProvider(request: CompletionRequest, onToken: (token: string) => void, onStatus?: (message: string) => void): Promise<CompletionResult>;
20
+ export declare function completeWithProvider(request: CompletionRequest, options?: StreamWithProviderOptions): Promise<CompletionResult>;
21
+ export declare function streamWithProvider(request: CompletionRequest, onToken: (token: string) => void, onStatusOrOptions?: ((message: string) => void) | StreamWithProviderOptions): Promise<CompletionResult>;
9
22
  export declare function pingProvider(providerId: ProviderId, secretOverride?: string): Promise<void>;