@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.
- package/README.md +8 -5
- 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/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 +235 -136
- package/dist/agent/runner.js.map +1 -1
- package/dist/agent/session-state.d.ts +11 -1
- package/dist/agent/session-state.js +22 -15
- package/dist/agent/session-state.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 +13 -4
- package/dist/agent/tool-output-formatting.js.map +1 -1
- package/dist/app/controllers/session-controller.d.ts +6 -0
- package/dist/app/controllers/session-controller.js +21 -1
- 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/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 +1 -1
- 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 +9 -1
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/http.d.ts +8 -0
- package/dist/tools/http.js +86 -2
- 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 +25 -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/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 +6 -0
- 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/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/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/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 +36 -0
- package/dist/tui-v2/controllers/overlay-controller.js +28 -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/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/README.md
CHANGED
|
@@ -220,7 +220,7 @@ Coding and general sysadmin work use the same agent (scaffold, debug, packages)
|
|
|
220
220
|
| Provider | Default model | Free tier | Key prefix |
|
|
221
221
|
|----------|---------------|-----------|------------|
|
|
222
222
|
| Groq | `llama-3.3-70b-versatile` | ✓ | `gsk_` |
|
|
223
|
-
| Gemini | `gemini-2.0-flash` | ✓ | `AIza` |
|
|
223
|
+
| Gemini | `gemini-2.0-flash` | ✓ | `AIza` / `AQ.` |
|
|
224
224
|
| OpenRouter | `meta-llama/llama-3.3-70b-instruct:free` | ✓ | `sk-or-` |
|
|
225
225
|
| OpenAI | `gpt-4o-mini` | — | `sk-` |
|
|
226
226
|
| Anthropic | `claude-3-5-haiku-latest` | — | `sk-ant-` |
|
|
@@ -232,16 +232,19 @@ Coding and general sysadmin work use the same agent (scaffold, debug, packages)
|
|
|
232
232
|
| Bynara | `mimo-v2.5-free` | ✓ | `sk_nry_` |
|
|
233
233
|
|
|
234
234
|
```sh
|
|
235
|
-
clai set groq gsk_...
|
|
235
|
+
clai set groq gsk_... # store / append an API key (multi-key supported)
|
|
236
|
+
clai set groq gsk_another_... # add a second key for the same provider
|
|
236
237
|
clai set gemini --from-env GEMINI_API_KEY
|
|
237
238
|
echo "gsk_..." | clai set groq --stdin
|
|
238
239
|
clai set ollama --url http://localhost:11434
|
|
239
|
-
clai keys
|
|
240
|
+
clai keys # lists each key (masked) + sticky active ★
|
|
240
241
|
clai use groq
|
|
241
|
-
clai provider
|
|
242
|
-
clai unset groq
|
|
242
|
+
clai provider # picker shows selected model per provider
|
|
243
|
+
clai unset groq # removes ALL keys for that provider
|
|
243
244
|
```
|
|
244
245
|
|
|
246
|
+
In the TUI, **`/set`** opens a multi-row key editor (like `/scope`): add with `+`, remove rows, **Save**, or **Reset all**. **`/unset`** clears every key for the chosen provider. When several keys are stored, clai **rotates** on rate limits / auth / transient errors (one retry per key, then the next key in a circle) and shows a non-stacking toast (`using groq · …ab12` / `switching …`).
|
|
247
|
+
|
|
245
248
|
Env overrides: `GROQ_API_KEY`, `GEMINI_API_KEY`, `OPENROUTER_API_KEY`, `OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, `NVIDIA_API_KEY`, `OLLAMA_HOST`, …
|
|
246
249
|
|
|
247
250
|
---
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Estimate how a model request's context is composed (system / history / tools).
|
|
3
|
+
* Metadata-only: no prompt text is stored — only role counts and token estimates.
|
|
4
|
+
*
|
|
5
|
+
* Used for reliability ops and regression harnesses. Does not truncate context.
|
|
6
|
+
*/
|
|
7
|
+
import type { ChatMessage, ToolDefinition } from "../types.js";
|
|
8
|
+
export interface ContextBreakdown {
|
|
9
|
+
/** Rough total estimated tokens for messages (+ tools if provided). */
|
|
10
|
+
readonly estimatedTotalTokens: number;
|
|
11
|
+
readonly systemTokens: number;
|
|
12
|
+
readonly userTokens: number;
|
|
13
|
+
readonly assistantTokens: number;
|
|
14
|
+
readonly toolResultTokens: number;
|
|
15
|
+
readonly toolSchemaTokens: number;
|
|
16
|
+
readonly messageCount: number;
|
|
17
|
+
readonly systemMessageCount: number;
|
|
18
|
+
readonly userMessageCount: number;
|
|
19
|
+
readonly assistantMessageCount: number;
|
|
20
|
+
readonly toolMessageCount: number;
|
|
21
|
+
/** High-level system subsections when detected by prefix. */
|
|
22
|
+
readonly systemParts: {
|
|
23
|
+
readonly constitutionTokens: number;
|
|
24
|
+
readonly planTokens: number;
|
|
25
|
+
readonly scopeTokens: number;
|
|
26
|
+
readonly sessionStateTokens: number;
|
|
27
|
+
readonly compactionMemoryTokens: number;
|
|
28
|
+
readonly otherSystemTokens: number;
|
|
29
|
+
};
|
|
30
|
+
readonly toolDefinitionCount: number;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Build a metadata-only breakdown of an assembled completion request.
|
|
34
|
+
*/
|
|
35
|
+
export declare function buildContextBreakdown(messages: readonly ChatMessage[], tools?: readonly ToolDefinition[] | undefined): ContextBreakdown;
|
|
36
|
+
/** Flatten for audit/diagnostic logs (numeric keys only — no content). */
|
|
37
|
+
export declare function contextBreakdownAuditPayload(breakdown: ContextBreakdown): Record<string, number>;
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Estimate how a model request's context is composed (system / history / tools).
|
|
3
|
+
* Metadata-only: no prompt text is stored — only role counts and token estimates.
|
|
4
|
+
*
|
|
5
|
+
* Used for reliability ops and regression harnesses. Does not truncate context.
|
|
6
|
+
*/
|
|
7
|
+
import { estimateMessagesTokens, estimateTokens, isCompactionMemoryMessage, COMPACTION_MEMORY_PREFIX, PLAN_IMPLEMENT_MEMORY_PREFIX, MECHANICAL_MEMORY_PREFIX, } from "./context-manager.js";
|
|
8
|
+
import { SESSION_STATE_PREFIX } from "./session-state.js";
|
|
9
|
+
function isPlanSystem(content) {
|
|
10
|
+
return content.startsWith("ACTIVE PLAN") || content.includes("\nACTIVE PLAN");
|
|
11
|
+
}
|
|
12
|
+
function isScopeSystem(content) {
|
|
13
|
+
return (content.startsWith("ENGAGEMENT SCOPE") ||
|
|
14
|
+
content.includes("\nENGAGEMENT SCOPE"));
|
|
15
|
+
}
|
|
16
|
+
function isSessionStateSystem(content) {
|
|
17
|
+
return (content.startsWith(SESSION_STATE_PREFIX) ||
|
|
18
|
+
content.includes(SESSION_STATE_PREFIX));
|
|
19
|
+
}
|
|
20
|
+
function isCompactionSystem(content) {
|
|
21
|
+
return (content.startsWith(COMPACTION_MEMORY_PREFIX) ||
|
|
22
|
+
content.startsWith(PLAN_IMPLEMENT_MEMORY_PREFIX) ||
|
|
23
|
+
content.startsWith(MECHANICAL_MEMORY_PREFIX) ||
|
|
24
|
+
// Message-shaped helper when role is system.
|
|
25
|
+
isCompactionMemoryMessage({ role: "system", content }));
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Build a metadata-only breakdown of an assembled completion request.
|
|
29
|
+
*/
|
|
30
|
+
export function buildContextBreakdown(messages, tools) {
|
|
31
|
+
let systemTokens = 0;
|
|
32
|
+
let userTokens = 0;
|
|
33
|
+
let assistantTokens = 0;
|
|
34
|
+
let toolResultTokens = 0;
|
|
35
|
+
let systemMessageCount = 0;
|
|
36
|
+
let userMessageCount = 0;
|
|
37
|
+
let assistantMessageCount = 0;
|
|
38
|
+
let toolMessageCount = 0;
|
|
39
|
+
let constitutionTokens = 0;
|
|
40
|
+
let planTokens = 0;
|
|
41
|
+
let scopeTokens = 0;
|
|
42
|
+
let sessionStateTokens = 0;
|
|
43
|
+
let compactionMemoryTokens = 0;
|
|
44
|
+
let otherSystemTokens = 0;
|
|
45
|
+
for (const message of messages) {
|
|
46
|
+
const tokens = estimateTokens(message.content) + 4;
|
|
47
|
+
switch (message.role) {
|
|
48
|
+
case "system": {
|
|
49
|
+
systemMessageCount += 1;
|
|
50
|
+
systemTokens += tokens;
|
|
51
|
+
if (isCompactionSystem(message.content)) {
|
|
52
|
+
compactionMemoryTokens += tokens;
|
|
53
|
+
}
|
|
54
|
+
else if (isPlanSystem(message.content)) {
|
|
55
|
+
planTokens += tokens;
|
|
56
|
+
}
|
|
57
|
+
else if (isScopeSystem(message.content)) {
|
|
58
|
+
scopeTokens += tokens;
|
|
59
|
+
}
|
|
60
|
+
else if (isSessionStateSystem(message.content)) {
|
|
61
|
+
sessionStateTokens += tokens;
|
|
62
|
+
}
|
|
63
|
+
else if (systemMessageCount === 1 ||
|
|
64
|
+
/CURRENT MODE:|OUTCOME CONTRACT|# ROLE|# HONESTY/i.test(message.content)) {
|
|
65
|
+
// Primary system / composed constitution (often message[0]).
|
|
66
|
+
constitutionTokens += tokens;
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
otherSystemTokens += tokens;
|
|
70
|
+
}
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
case "user":
|
|
74
|
+
userMessageCount += 1;
|
|
75
|
+
userTokens += tokens;
|
|
76
|
+
break;
|
|
77
|
+
case "assistant":
|
|
78
|
+
assistantMessageCount += 1;
|
|
79
|
+
assistantTokens += tokens;
|
|
80
|
+
if (message.toolCalls?.length) {
|
|
81
|
+
assistantTokens += estimateTokens(JSON.stringify(message.toolCalls));
|
|
82
|
+
}
|
|
83
|
+
break;
|
|
84
|
+
case "tool":
|
|
85
|
+
toolMessageCount += 1;
|
|
86
|
+
toolResultTokens += tokens;
|
|
87
|
+
break;
|
|
88
|
+
default:
|
|
89
|
+
otherSystemTokens += tokens;
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
let toolSchemaTokens = 0;
|
|
94
|
+
const toolDefinitionCount = tools?.length ?? 0;
|
|
95
|
+
if (tools?.length) {
|
|
96
|
+
toolSchemaTokens = estimateTokens(JSON.stringify(tools));
|
|
97
|
+
}
|
|
98
|
+
const estimatedTotalTokens = estimateMessagesTokens([...messages]) + toolSchemaTokens;
|
|
99
|
+
return {
|
|
100
|
+
estimatedTotalTokens,
|
|
101
|
+
systemTokens,
|
|
102
|
+
userTokens,
|
|
103
|
+
assistantTokens,
|
|
104
|
+
toolResultTokens,
|
|
105
|
+
toolSchemaTokens,
|
|
106
|
+
messageCount: messages.length,
|
|
107
|
+
systemMessageCount,
|
|
108
|
+
userMessageCount,
|
|
109
|
+
assistantMessageCount,
|
|
110
|
+
toolMessageCount,
|
|
111
|
+
systemParts: {
|
|
112
|
+
constitutionTokens,
|
|
113
|
+
planTokens,
|
|
114
|
+
scopeTokens,
|
|
115
|
+
sessionStateTokens,
|
|
116
|
+
compactionMemoryTokens,
|
|
117
|
+
otherSystemTokens,
|
|
118
|
+
},
|
|
119
|
+
toolDefinitionCount,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
/** Flatten for audit/diagnostic logs (numeric keys only — no content). */
|
|
123
|
+
export function contextBreakdownAuditPayload(breakdown) {
|
|
124
|
+
return {
|
|
125
|
+
estimatedTotalTokens: breakdown.estimatedTotalTokens,
|
|
126
|
+
systemTokens: breakdown.systemTokens,
|
|
127
|
+
userTokens: breakdown.userTokens,
|
|
128
|
+
assistantTokens: breakdown.assistantTokens,
|
|
129
|
+
toolResultTokens: breakdown.toolResultTokens,
|
|
130
|
+
toolSchemaTokens: breakdown.toolSchemaTokens,
|
|
131
|
+
messageCount: breakdown.messageCount,
|
|
132
|
+
systemMessageCount: breakdown.systemMessageCount,
|
|
133
|
+
userMessageCount: breakdown.userMessageCount,
|
|
134
|
+
assistantMessageCount: breakdown.assistantMessageCount,
|
|
135
|
+
toolMessageCount: breakdown.toolMessageCount,
|
|
136
|
+
constitutionTokens: breakdown.systemParts.constitutionTokens,
|
|
137
|
+
planTokens: breakdown.systemParts.planTokens,
|
|
138
|
+
scopeTokens: breakdown.systemParts.scopeTokens,
|
|
139
|
+
sessionStateTokens: breakdown.systemParts.sessionStateTokens,
|
|
140
|
+
compactionMemoryTokens: breakdown.systemParts.compactionMemoryTokens,
|
|
141
|
+
otherSystemTokens: breakdown.systemParts.otherSystemTokens,
|
|
142
|
+
toolDefinitionCount: breakdown.toolDefinitionCount,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=context-breakdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-breakdown.js","sourceRoot":"","sources":["../../src/agent/context-breakdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reliability experiments from the architecture audit (E1–E6).
|
|
3
|
+
*
|
|
4
|
+
* Defaults are capability-preserving: they reduce unnecessary context / fragile
|
|
5
|
+
* free-tier overload without hard-truncating critical evidence or blocking free
|
|
6
|
+
* users. Every knob is config-backed and can be disabled independently.
|
|
7
|
+
*/
|
|
8
|
+
import type { ProviderId } from "../types.js";
|
|
9
|
+
/** Hard auto-compact ceiling — never raise soft past this. */
|
|
10
|
+
export declare const HARD_COMPACT_TOKEN_BUDGET = 100000;
|
|
11
|
+
/** E1 default: start compact earlier than the hard ceiling. */
|
|
12
|
+
export declare const DEFAULT_SOFT_COMPACT_TOKEN_BUDGET = 70000;
|
|
13
|
+
/** E2 default fs passthrough (was 400k). Full body always on disk when truncated. */
|
|
14
|
+
export declare const DEFAULT_FS_PASSTHROUGH_CAP_CHARS = 64000;
|
|
15
|
+
/** E4: warn when free-cloud context is this large. */
|
|
16
|
+
export declare const DEFAULT_FREE_TIER_WARN_TOKENS = 40000;
|
|
17
|
+
/** E4: stronger notice after this many consecutive free-tier stream failures. */
|
|
18
|
+
export declare const DEFAULT_FREE_TIER_FAIL_THRESHOLD = 2;
|
|
19
|
+
/** E3 floors — large enough for fs.write / salvage, lower than prior 32k default. */
|
|
20
|
+
export declare const ADAPTIVE_MAX_TOKENS_TOOL_STEP = 24576;
|
|
21
|
+
export declare const ADAPTIVE_MAX_TOKENS_LIGHT = 12288;
|
|
22
|
+
export declare const ADAPTIVE_MAX_TOKENS_FLOOR = 8192;
|
|
23
|
+
export declare const LEGACY_MAX_TOKENS = 32768;
|
|
24
|
+
export interface ReliabilityPolicy {
|
|
25
|
+
readonly softEarlyCompact: boolean;
|
|
26
|
+
readonly softCompactTokenBudget: number;
|
|
27
|
+
readonly hardCompactTokenBudget: number;
|
|
28
|
+
readonly fsPassthroughCapChars: number;
|
|
29
|
+
readonly adaptiveMaxTokens: boolean;
|
|
30
|
+
readonly freeTierContextGuard: boolean;
|
|
31
|
+
readonly freeTierWarnTokens: number;
|
|
32
|
+
readonly freeTierFailThreshold: number;
|
|
33
|
+
readonly toolResultDedup: boolean;
|
|
34
|
+
readonly slimNativePrompt: boolean;
|
|
35
|
+
}
|
|
36
|
+
/** Resolve effective policy from config + optional env overrides. */
|
|
37
|
+
export declare function getReliabilityPolicy(): ReliabilityPolicy;
|
|
38
|
+
/**
|
|
39
|
+
* E1: token threshold that triggers auto-compact.
|
|
40
|
+
* Soft path fires earlier; hard budget is always the ceiling used when soft is off.
|
|
41
|
+
*/
|
|
42
|
+
export declare function autoCompactTriggerTokens(policy?: ReliabilityPolicy): number;
|
|
43
|
+
/**
|
|
44
|
+
* E3: max completion tokens for a model step.
|
|
45
|
+
* Tool-heavy steps keep room for large writes; light steps use a lower cap.
|
|
46
|
+
* Never goes below {@link ADAPTIVE_MAX_TOKENS_FLOOR}.
|
|
47
|
+
*/
|
|
48
|
+
export declare function resolveStepMaxTokens(input: {
|
|
49
|
+
nativeToolsActive: boolean;
|
|
50
|
+
toolsAttached: boolean;
|
|
51
|
+
recoveryNudge?: boolean | undefined;
|
|
52
|
+
policy?: ReliabilityPolicy | undefined;
|
|
53
|
+
}): number;
|
|
54
|
+
export declare function isFreeCloudProvider(provider: ProviderId): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* E4: advisory notices for free-tier + large context / repeated failures.
|
|
57
|
+
* Never blocks the request.
|
|
58
|
+
*/
|
|
59
|
+
export declare function freeTierGuardNotices(input: {
|
|
60
|
+
provider: ProviderId;
|
|
61
|
+
estimatedInputTokens: number;
|
|
62
|
+
consecutiveFailures: number;
|
|
63
|
+
policy?: ReliabilityPolicy | undefined;
|
|
64
|
+
}): string[];
|
|
65
|
+
/** Stable hash for E5 tool-result dedup (content only). */
|
|
66
|
+
export declare function hashToolResultContent(content: string): string;
|
|
67
|
+
/**
|
|
68
|
+
* E5: if identical tool output already appeared this turn, replace with a
|
|
69
|
+
* pointer so history does not grow with duplicate dumps. Full text remains
|
|
70
|
+
* available via artifact path when present.
|
|
71
|
+
*/
|
|
72
|
+
export declare function dedupeToolContextOutput(input: {
|
|
73
|
+
content: string;
|
|
74
|
+
toolName: string;
|
|
75
|
+
artifactPath?: string | undefined;
|
|
76
|
+
seenHashes: Map<string, {
|
|
77
|
+
toolName: string;
|
|
78
|
+
count: number;
|
|
79
|
+
}>;
|
|
80
|
+
policy?: ReliabilityPolicy | undefined;
|
|
81
|
+
}): {
|
|
82
|
+
content: string;
|
|
83
|
+
deduped: boolean;
|
|
84
|
+
hash: string;
|
|
85
|
+
};
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reliability experiments from the architecture audit (E1–E6).
|
|
3
|
+
*
|
|
4
|
+
* Defaults are capability-preserving: they reduce unnecessary context / fragile
|
|
5
|
+
* free-tier overload without hard-truncating critical evidence or blocking free
|
|
6
|
+
* users. Every knob is config-backed and can be disabled independently.
|
|
7
|
+
*/
|
|
8
|
+
import { createHash } from "node:crypto";
|
|
9
|
+
import { getConfig, providerCategory } from "../store/config.js";
|
|
10
|
+
import { AUTO_COMPACT_TOKEN_BUDGET } from "./context-manager.js";
|
|
11
|
+
/** Hard auto-compact ceiling — never raise soft past this. */
|
|
12
|
+
export const HARD_COMPACT_TOKEN_BUDGET = AUTO_COMPACT_TOKEN_BUDGET;
|
|
13
|
+
/** E1 default: start compact earlier than the hard ceiling. */
|
|
14
|
+
export const DEFAULT_SOFT_COMPACT_TOKEN_BUDGET = 70_000;
|
|
15
|
+
/** E2 default fs passthrough (was 400k). Full body always on disk when truncated. */
|
|
16
|
+
export const DEFAULT_FS_PASSTHROUGH_CAP_CHARS = 64_000;
|
|
17
|
+
/** E4: warn when free-cloud context is this large. */
|
|
18
|
+
export const DEFAULT_FREE_TIER_WARN_TOKENS = 40_000;
|
|
19
|
+
/** E4: stronger notice after this many consecutive free-tier stream failures. */
|
|
20
|
+
export const DEFAULT_FREE_TIER_FAIL_THRESHOLD = 2;
|
|
21
|
+
/** E3 floors — large enough for fs.write / salvage, lower than prior 32k default. */
|
|
22
|
+
export const ADAPTIVE_MAX_TOKENS_TOOL_STEP = 24_576;
|
|
23
|
+
export const ADAPTIVE_MAX_TOKENS_LIGHT = 12_288;
|
|
24
|
+
export const ADAPTIVE_MAX_TOKENS_FLOOR = 8_192;
|
|
25
|
+
export const LEGACY_MAX_TOKENS = 32_768;
|
|
26
|
+
function boolEnv(name) {
|
|
27
|
+
const v = process.env[name]?.trim().toLowerCase();
|
|
28
|
+
if (v === undefined || v === "")
|
|
29
|
+
return undefined;
|
|
30
|
+
if (v === "1" || v === "true" || v === "yes" || v === "on")
|
|
31
|
+
return true;
|
|
32
|
+
if (v === "0" || v === "false" || v === "no" || v === "off")
|
|
33
|
+
return false;
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
function intEnv(name) {
|
|
37
|
+
const v = process.env[name]?.trim();
|
|
38
|
+
if (!v)
|
|
39
|
+
return undefined;
|
|
40
|
+
const n = Number.parseInt(v, 10);
|
|
41
|
+
return Number.isFinite(n) ? n : undefined;
|
|
42
|
+
}
|
|
43
|
+
/** Resolve effective policy from config + optional env overrides. */
|
|
44
|
+
export function getReliabilityPolicy() {
|
|
45
|
+
const cfg = getConfig();
|
|
46
|
+
const softEarly = boolEnv("CLAI_SOFT_EARLY_COMPACT") ?? cfg.softEarlyCompact ?? true;
|
|
47
|
+
let softBudget = intEnv("CLAI_SOFT_COMPACT_TOKENS") ??
|
|
48
|
+
cfg.softCompactTokenBudget ??
|
|
49
|
+
DEFAULT_SOFT_COMPACT_TOKEN_BUDGET;
|
|
50
|
+
softBudget = Math.max(20_000, Math.min(softBudget, HARD_COMPACT_TOKEN_BUDGET));
|
|
51
|
+
let fsCap = intEnv("CLAI_FS_PASSTHROUGH_CHARS") ??
|
|
52
|
+
cfg.fsPassthroughCapChars ??
|
|
53
|
+
DEFAULT_FS_PASSTHROUGH_CAP_CHARS;
|
|
54
|
+
fsCap = Math.max(8_000, Math.min(fsCap, 400_000));
|
|
55
|
+
return {
|
|
56
|
+
softEarlyCompact: softEarly,
|
|
57
|
+
softCompactTokenBudget: softBudget,
|
|
58
|
+
hardCompactTokenBudget: HARD_COMPACT_TOKEN_BUDGET,
|
|
59
|
+
fsPassthroughCapChars: fsCap,
|
|
60
|
+
adaptiveMaxTokens: boolEnv("CLAI_ADAPTIVE_MAX_TOKENS") ?? cfg.adaptiveMaxTokens ?? true,
|
|
61
|
+
freeTierContextGuard: boolEnv("CLAI_FREE_TIER_GUARD") ?? cfg.freeTierContextGuard ?? true,
|
|
62
|
+
freeTierWarnTokens: intEnv("CLAI_FREE_TIER_WARN_TOKENS") ??
|
|
63
|
+
cfg.freeTierWarnTokens ??
|
|
64
|
+
DEFAULT_FREE_TIER_WARN_TOKENS,
|
|
65
|
+
freeTierFailThreshold: intEnv("CLAI_FREE_TIER_FAIL_THRESHOLD") ??
|
|
66
|
+
cfg.freeTierFailThreshold ??
|
|
67
|
+
DEFAULT_FREE_TIER_FAIL_THRESHOLD,
|
|
68
|
+
toolResultDedup: boolEnv("CLAI_TOOL_RESULT_DEDUP") ?? cfg.toolResultDedup ?? true,
|
|
69
|
+
slimNativePrompt: boolEnv("CLAI_SLIM_NATIVE_PROMPT") ?? cfg.slimNativePrompt ?? true,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* E1: token threshold that triggers auto-compact.
|
|
74
|
+
* Soft path fires earlier; hard budget is always the ceiling used when soft is off.
|
|
75
|
+
*/
|
|
76
|
+
export function autoCompactTriggerTokens(policy = getReliabilityPolicy()) {
|
|
77
|
+
if (!policy.softEarlyCompact)
|
|
78
|
+
return policy.hardCompactTokenBudget;
|
|
79
|
+
return Math.min(policy.softCompactTokenBudget, policy.hardCompactTokenBudget);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* E3: max completion tokens for a model step.
|
|
83
|
+
* Tool-heavy steps keep room for large writes; light steps use a lower cap.
|
|
84
|
+
* Never goes below {@link ADAPTIVE_MAX_TOKENS_FLOOR}.
|
|
85
|
+
*/
|
|
86
|
+
export function resolveStepMaxTokens(input) {
|
|
87
|
+
const policy = input.policy ?? getReliabilityPolicy();
|
|
88
|
+
if (!policy.adaptiveMaxTokens)
|
|
89
|
+
return LEGACY_MAX_TOKENS;
|
|
90
|
+
if (input.recoveryNudge) {
|
|
91
|
+
return Math.max(ADAPTIVE_MAX_TOKENS_FLOOR, ADAPTIVE_MAX_TOKENS_LIGHT);
|
|
92
|
+
}
|
|
93
|
+
if (input.toolsAttached || input.nativeToolsActive) {
|
|
94
|
+
return ADAPTIVE_MAX_TOKENS_TOOL_STEP;
|
|
95
|
+
}
|
|
96
|
+
return ADAPTIVE_MAX_TOKENS_LIGHT;
|
|
97
|
+
}
|
|
98
|
+
export function isFreeCloudProvider(provider) {
|
|
99
|
+
return providerCategory[provider] === "free-cloud";
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* E4: advisory notices for free-tier + large context / repeated failures.
|
|
103
|
+
* Never blocks the request.
|
|
104
|
+
*/
|
|
105
|
+
export function freeTierGuardNotices(input) {
|
|
106
|
+
const policy = input.policy ?? getReliabilityPolicy();
|
|
107
|
+
if (!policy.freeTierContextGuard)
|
|
108
|
+
return [];
|
|
109
|
+
if (!isFreeCloudProvider(input.provider))
|
|
110
|
+
return [];
|
|
111
|
+
const notices = [];
|
|
112
|
+
if (input.estimatedInputTokens >= policy.freeTierWarnTokens) {
|
|
113
|
+
notices.push(`Large context (~${input.estimatedInputTokens.toLocaleString()} tokens) on free-cloud model — disconnects and empty admissions are more common. Prefer /compact, a paid/local model, or shorter turns if this fails.`);
|
|
114
|
+
}
|
|
115
|
+
if (input.consecutiveFailures >= policy.freeTierFailThreshold) {
|
|
116
|
+
notices.push(`Free-cloud model failed ${input.consecutiveFailures} time(s) this turn. Switch with /model or /provider, or enable providerFallback for automatic recovery.`);
|
|
117
|
+
}
|
|
118
|
+
return notices;
|
|
119
|
+
}
|
|
120
|
+
/** Stable hash for E5 tool-result dedup (content only). */
|
|
121
|
+
export function hashToolResultContent(content) {
|
|
122
|
+
return createHash("sha256").update(content).digest("hex").slice(0, 16);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* E5: if identical tool output already appeared this turn, replace with a
|
|
126
|
+
* pointer so history does not grow with duplicate dumps. Full text remains
|
|
127
|
+
* available via artifact path when present.
|
|
128
|
+
*/
|
|
129
|
+
export function dedupeToolContextOutput(input) {
|
|
130
|
+
const policy = input.policy ?? getReliabilityPolicy();
|
|
131
|
+
const hash = hashToolResultContent(input.content);
|
|
132
|
+
if (!policy.toolResultDedup) {
|
|
133
|
+
return { content: input.content, deduped: false, hash };
|
|
134
|
+
}
|
|
135
|
+
// Tiny results are not worth pointer indirection.
|
|
136
|
+
if (input.content.length < 400) {
|
|
137
|
+
input.seenHashes.set(hash, {
|
|
138
|
+
toolName: input.toolName,
|
|
139
|
+
count: (input.seenHashes.get(hash)?.count ?? 0) + 1,
|
|
140
|
+
});
|
|
141
|
+
return { content: input.content, deduped: false, hash };
|
|
142
|
+
}
|
|
143
|
+
const prior = input.seenHashes.get(hash);
|
|
144
|
+
if (!prior) {
|
|
145
|
+
input.seenHashes.set(hash, { toolName: input.toolName, count: 1 });
|
|
146
|
+
return { content: input.content, deduped: false, hash };
|
|
147
|
+
}
|
|
148
|
+
prior.count += 1;
|
|
149
|
+
const artifact = input.artifactPath
|
|
150
|
+
? ` Full output: ${input.artifactPath}`
|
|
151
|
+
: "";
|
|
152
|
+
const head = input.content.slice(0, 200).replace(/\s+/g, " ").trim();
|
|
153
|
+
const content = `[duplicate tool output — identical to earlier ${prior.toolName} this turn; hash=${hash}]${artifact}\n` +
|
|
154
|
+
`Preview: ${head}${input.content.length > 200 ? "…" : ""}\n` +
|
|
155
|
+
`Re-read the prior tool result or artifact if you need the full body; do not assume it changed.`;
|
|
156
|
+
return { content, deduped: true, hash };
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=reliability-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reliability-policy.js","sourceRoot":"","sources":["../../src/agent/reliability-policy.ts"],"names":[],"mappings":"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"}
|