@pentoshi/clai 4.1.0 → 4.2.1
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 +14 -0
- package/dist/agent/compaction-executor.d.ts +68 -0
- package/dist/agent/compaction-executor.js +343 -0
- package/dist/agent/compaction-executor.js.map +1 -0
- package/dist/agent/context-breakdown.js +2 -0
- package/dist/agent/context-breakdown.js.map +1 -1
- package/dist/agent/context-manager.d.ts +23 -9
- package/dist/agent/context-manager.js +72 -43
- package/dist/agent/context-manager.js.map +1 -1
- package/dist/agent/events.d.ts +3 -0
- package/dist/agent/loop-guard.d.ts +2 -0
- package/dist/agent/loop-guard.js +48 -3
- package/dist/agent/loop-guard.js.map +1 -1
- package/dist/agent/prompt-composer.js +6 -6
- package/dist/agent/prompt-composer.js.map +1 -1
- package/dist/agent/reliability-policy.d.ts +1 -0
- package/dist/agent/reliability-policy.js +6 -3
- package/dist/agent/reliability-policy.js.map +1 -1
- package/dist/agent/request-accounting.d.ts +97 -0
- package/dist/agent/request-accounting.js +207 -0
- package/dist/agent/request-accounting.js.map +1 -0
- package/dist/agent/request-budget.d.ts +2 -2
- package/dist/agent/request-budget.js +2 -4
- package/dist/agent/request-budget.js.map +1 -1
- package/dist/agent/runner.d.ts +8 -2
- package/dist/agent/runner.js +409 -178
- package/dist/agent/runner.js.map +1 -1
- package/dist/agent/session-title.d.ts +0 -26
- package/dist/agent/session-title.js +0 -80
- package/dist/agent/session-title.js.map +1 -1
- package/dist/agent/tool-history.d.ts +2 -2
- package/dist/agent/tool-history.js +19 -6
- package/dist/agent/tool-history.js.map +1 -1
- package/dist/app/adapters/agent-event-adapter.js +19 -0
- package/dist/app/adapters/agent-event-adapter.js.map +1 -1
- package/dist/app/adapters/current-agent-adapter.js +4 -0
- package/dist/app/adapters/current-agent-adapter.js.map +1 -1
- package/dist/app/commands/catalog.js +24 -0
- package/dist/app/commands/catalog.js.map +1 -1
- package/dist/app/controllers/cancel-coordinator.d.ts +51 -0
- package/dist/app/controllers/cancel-coordinator.js +48 -0
- package/dist/app/controllers/cancel-coordinator.js.map +1 -0
- package/dist/app/controllers/session-compact-helper.d.ts +19 -2
- package/dist/app/controllers/session-compact-helper.js +100 -127
- package/dist/app/controllers/session-compact-helper.js.map +1 -1
- package/dist/app/controllers/session-context-usage.d.ts +32 -15
- package/dist/app/controllers/session-context-usage.js +186 -51
- package/dist/app/controllers/session-context-usage.js.map +1 -1
- package/dist/app/controllers/session-controller.d.ts +20 -11
- package/dist/app/controllers/session-controller.js +111 -90
- package/dist/app/controllers/session-controller.js.map +1 -1
- package/dist/app/controllers/session-naming.d.ts +31 -0
- package/dist/app/controllers/session-naming.js +173 -0
- package/dist/app/controllers/session-naming.js.map +1 -0
- package/dist/app/controllers/session-persistence.d.ts +2 -2
- package/dist/app/controllers/session-persistence.js +3 -6
- package/dist/app/controllers/session-persistence.js.map +1 -1
- package/dist/app/controllers/session-turn-request.d.ts +2 -1
- package/dist/app/controllers/session-turn-request.js +3 -0
- package/dist/app/controllers/session-turn-request.js.map +1 -1
- package/dist/app/controllers/turn-controller.d.ts +2 -1
- package/dist/app/controllers/turn-controller.js +1 -0
- package/dist/app/controllers/turn-controller.js.map +1 -1
- package/dist/app/events/app-event.d.ts +9 -0
- package/dist/app/events/app-event.js.map +1 -1
- package/dist/app/ports/agent-port.d.ts +8 -1
- package/dist/classic/app/ClassicApp.js +2 -1
- package/dist/classic/app/ClassicApp.js.map +1 -1
- package/dist/classic/app/app-wiring.js +1 -2
- package/dist/classic/app/app-wiring.js.map +1 -1
- package/dist/classic/app/wiring-interactions.js +2 -7
- package/dist/classic/app/wiring-interactions.js.map +1 -1
- package/dist/classic/blocks/tool-lines.js +2 -1
- package/dist/classic/blocks/tool-lines.js.map +1 -1
- package/dist/classic/input/cancel-ladder.d.ts +2 -19
- package/dist/classic/input/cancel-ladder.js +13 -20
- package/dist/classic/input/cancel-ladder.js.map +1 -1
- package/dist/commands/providers.js +2 -0
- package/dist/commands/providers.js.map +1 -1
- package/dist/llm/adapters/anthropic-tools.d.ts +31 -14
- package/dist/llm/adapters/anthropic-tools.js +124 -29
- package/dist/llm/adapters/anthropic-tools.js.map +1 -1
- package/dist/llm/adapters/gemini-tools.d.ts +16 -4
- package/dist/llm/adapters/gemini-tools.js +117 -16
- package/dist/llm/adapters/gemini-tools.js.map +1 -1
- package/dist/llm/adapters/openai-tools.d.ts +13 -2
- package/dist/llm/adapters/openai-tools.js +58 -11
- package/dist/llm/adapters/openai-tools.js.map +1 -1
- package/dist/llm/agentrouter.js +68 -45
- package/dist/llm/agentrouter.js.map +1 -1
- package/dist/llm/anthropic.js +69 -36
- package/dist/llm/anthropic.js.map +1 -1
- package/dist/llm/aws-mantle.js +70 -32
- package/dist/llm/aws-mantle.js.map +1 -1
- package/dist/llm/bynara.js +26 -69
- package/dist/llm/bynara.js.map +1 -1
- package/dist/llm/capabilities.d.ts +2 -1
- package/dist/llm/capabilities.js +47 -0
- package/dist/llm/capabilities.js.map +1 -1
- package/dist/llm/context-snapshot.d.ts +100 -0
- package/dist/llm/context-snapshot.js +277 -0
- package/dist/llm/context-snapshot.js.map +1 -0
- package/dist/llm/context-windows.d.ts +10 -0
- package/dist/llm/context-windows.js +129 -0
- package/dist/llm/context-windows.js.map +1 -0
- package/dist/llm/custom-provider-profile.d.ts +75 -0
- package/dist/llm/custom-provider-profile.js +558 -0
- package/dist/llm/custom-provider-profile.js.map +1 -0
- package/dist/llm/custom-providers.d.ts +13 -1
- package/dist/llm/custom-providers.js +77 -25
- package/dist/llm/custom-providers.js.map +1 -1
- package/dist/llm/effort-fallback.d.ts +44 -0
- package/dist/llm/effort-fallback.js +101 -0
- package/dist/llm/effort-fallback.js.map +1 -0
- package/dist/llm/fireworks.js +4 -0
- package/dist/llm/fireworks.js.map +1 -1
- package/dist/llm/free.js +4 -0
- package/dist/llm/free.js.map +1 -1
- package/dist/llm/gemini.d.ts +1 -1
- package/dist/llm/gemini.js +89 -51
- package/dist/llm/gemini.js.map +1 -1
- package/dist/llm/groq.js +4 -0
- package/dist/llm/groq.js.map +1 -1
- package/dist/llm/hetzner.js +4 -0
- package/dist/llm/hetzner.js.map +1 -1
- package/dist/llm/http.d.ts +49 -10
- package/dist/llm/http.js +417 -153
- package/dist/llm/http.js.map +1 -1
- package/dist/llm/kimchi.js +4 -0
- package/dist/llm/kimchi.js.map +1 -1
- package/dist/llm/lightning.js +4 -0
- package/dist/llm/lightning.js.map +1 -1
- package/dist/llm/meta.d.ts +2 -0
- package/dist/llm/meta.js +811 -655
- package/dist/llm/meta.js.map +1 -1
- package/dist/llm/modal.js +4 -0
- package/dist/llm/modal.js.map +1 -1
- package/dist/llm/model-families.d.ts +9 -0
- package/dist/llm/model-families.js +39 -0
- package/dist/llm/model-families.js.map +1 -0
- package/dist/llm/nvidia.js +4 -0
- package/dist/llm/nvidia.js.map +1 -1
- package/dist/llm/ollama.js +44 -40
- package/dist/llm/ollama.js.map +1 -1
- package/dist/llm/openai.js +4 -0
- package/dist/llm/openai.js.map +1 -1
- package/dist/llm/openrouter.js +4 -0
- package/dist/llm/openrouter.js.map +1 -1
- package/dist/llm/operation-ledger.d.ts +60 -0
- package/dist/llm/operation-ledger.js +136 -0
- package/dist/llm/operation-ledger.js.map +1 -0
- package/dist/llm/operation-usage.d.ts +32 -0
- package/dist/llm/operation-usage.js +172 -0
- package/dist/llm/operation-usage.js.map +1 -0
- package/dist/llm/orcarouter.d.ts +7 -0
- package/dist/llm/orcarouter.js +166 -0
- package/dist/llm/orcarouter.js.map +1 -0
- package/dist/llm/provider-profile-layers.d.ts +7 -0
- package/dist/llm/provider-profile-layers.js +961 -0
- package/dist/llm/provider-profile-layers.js.map +1 -0
- package/dist/llm/provider-profile.d.ts +181 -0
- package/dist/llm/provider-profile.js +329 -0
- package/dist/llm/provider-profile.js.map +1 -0
- package/dist/llm/provider-profiles.d.ts +13 -0
- package/dist/llm/provider-profiles.js +86 -0
- package/dist/llm/provider-profiles.js.map +1 -0
- package/dist/llm/provider.d.ts +2 -0
- package/dist/llm/provider.js +67 -0
- package/dist/llm/provider.js.map +1 -1
- package/dist/llm/qwen-cloud.js +4 -0
- package/dist/llm/qwen-cloud.js.map +1 -1
- package/dist/llm/reasoning-artifacts.d.ts +101 -0
- package/dist/llm/reasoning-artifacts.js +440 -0
- package/dist/llm/reasoning-artifacts.js.map +1 -0
- package/dist/llm/request-fingerprint.d.ts +10 -0
- package/dist/llm/request-fingerprint.js +313 -0
- package/dist/llm/request-fingerprint.js.map +1 -0
- package/dist/llm/request-plan.d.ts +119 -0
- package/dist/llm/request-plan.js +279 -0
- package/dist/llm/request-plan.js.map +1 -0
- package/dist/llm/router.d.ts +19 -1
- package/dist/llm/router.js +447 -75
- package/dist/llm/router.js.map +1 -1
- package/dist/llm/stream-events.d.ts +47 -0
- package/dist/llm/stream-events.js +55 -0
- package/dist/llm/stream-events.js.map +1 -0
- package/dist/llm/stream-terminal.d.ts +30 -0
- package/dist/llm/stream-terminal.js +51 -0
- package/dist/llm/stream-terminal.js.map +1 -0
- package/dist/llm/token-estimate-calibration.d.ts +23 -0
- package/dist/llm/token-estimate-calibration.js +140 -0
- package/dist/llm/token-estimate-calibration.js.map +1 -0
- package/dist/llm/token-usage.d.ts +35 -5
- package/dist/llm/token-usage.js +212 -162
- package/dist/llm/token-usage.js.map +1 -1
- package/dist/llm/tokenrouter.js +8 -2
- package/dist/llm/tokenrouter.js.map +1 -1
- package/dist/modes/ask.js +11 -5
- package/dist/modes/ask.js.map +1 -1
- package/dist/noninteractive/start-noninteractive.js +31 -2
- package/dist/noninteractive/start-noninteractive.js.map +1 -1
- package/dist/noninteractive/stream-blocks.js +15 -4
- package/dist/noninteractive/stream-blocks.js.map +1 -1
- package/dist/prompts/embedded.js +1 -1
- package/dist/prompts/embedded.js.map +1 -1
- package/dist/prompts/system.agent.md +6 -0
- package/dist/store/config.js +5 -1
- package/dist/store/config.js.map +1 -1
- package/dist/store/history.d.ts +2 -0
- package/dist/store/history.js +19 -10
- package/dist/store/history.js.map +1 -1
- package/dist/store/keys.js +11 -1
- package/dist/store/keys.js.map +1 -1
- package/dist/store/plan.js +20 -14
- package/dist/store/plan.js.map +1 -1
- package/dist/tools/elevated-shell.d.ts +1 -1
- package/dist/tools/elevated-shell.js +24 -72
- package/dist/tools/elevated-shell.js.map +1 -1
- package/dist/tools/nmap-runner.js +30 -36
- package/dist/tools/nmap-runner.js.map +1 -1
- package/dist/tools/sudo-session.d.ts +83 -0
- package/dist/tools/sudo-session.js +124 -0
- package/dist/tools/sudo-session.js.map +1 -0
- package/dist/tui-v2/app/App.js +9 -24
- package/dist/tui-v2/app/App.js.map +1 -1
- package/dist/tui-v2/components/status/context-limit-chip.js +2 -2
- package/dist/tui-v2/components/status/context-limit-chip.js.map +1 -1
- package/dist/tui-v2/components/transcript/intro-card.js +2 -1
- package/dist/tui-v2/components/transcript/intro-card.js.map +1 -1
- package/dist/tui-v2/composer/composer-editor.js +2 -1
- package/dist/tui-v2/composer/composer-editor.js.map +1 -1
- package/dist/types.d.ts +156 -1
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -1
- package/dist/ui-core/bootstrap/composition-root.d.ts +2 -0
- package/dist/ui-core/bootstrap/composition-root.js +26 -3
- package/dist/ui-core/bootstrap/composition-root.js.map +1 -1
- package/dist/ui-core/commands/picker-commands.js +11 -5
- package/dist/ui-core/commands/picker-commands.js.map +1 -1
- package/dist/ui-core/commands/session-commands.js +41 -5
- package/dist/ui-core/commands/session-commands.js.map +1 -1
- package/dist/ui-core/plan/plan-lifecycle.js +3 -2
- package/dist/ui-core/plan/plan-lifecycle.js.map +1 -1
- package/dist/ui-core/rendering/context-limit.js +4 -1
- package/dist/ui-core/rendering/context-limit.js.map +1 -1
- package/dist/ui-core/rendering/duration.d.ts +2 -1
- package/dist/ui-core/rendering/duration.js +13 -5
- package/dist/ui-core/rendering/duration.js.map +1 -1
- package/dist/ui-core/rendering/intro-header.js +2 -2
- package/dist/ui-core/rendering/intro-header.js.map +1 -1
- package/dist/ui-core/rendering/theme.d.ts +1 -0
- package/dist/ui-core/rendering/theme.js +2 -0
- package/dist/ui-core/rendering/theme.js.map +1 -1
- package/dist/ui-core/state/transcript-hydrate.js +3 -3
- package/dist/ui-core/state/transcript-hydrate.js.map +1 -1
- package/dist/ui-core/state/transcript-reducer.d.ts +5 -0
- package/dist/ui-core/state/transcript-reducer.js +76 -3
- package/dist/ui-core/state/transcript-reducer.js.map +1 -1
- package/dist/ui-core/state/transcript-store.d.ts +10 -1
- package/dist/ui-core/state/transcript-store.js +22 -1
- package/dist/ui-core/state/transcript-store.js.map +1 -1
- package/dist/ui-core/state/transcript-types.d.ts +2 -0
- package/dist/ui-core/state/transcript-types.js.map +1 -1
- package/dist/version.generated.d.ts +2 -2
- package/dist/version.generated.js +2 -2
- package/package.json +6 -1
package/README.md
CHANGED
|
@@ -155,6 +155,7 @@ This is the core of clai's design: assemble capacity from free tiers, then survi
|
|
|
155
155
|
| Meta (Muse Spark) | `muse-spark-1.2` | Paid (per token) | `MODEL_API_KEY` |
|
|
156
156
|
| Fireworks | `accounts/fireworks/models/kimi-k2p6` | Paid (per token) | `FIREWORKS_API_KEY` |
|
|
157
157
|
| Hetzner | `Qwen/Qwen3.6-35B-A3B-FP8` | Free (experiment — no billing yet) | `HETZNER_API_KEY` |
|
|
158
|
+
| OrcaRouter | `openai/gpt-4o-mini` | Paid (per token, zero markup) | `ORCAROUTER_API_KEY` |
|
|
158
159
|
|
|
159
160
|
Several "paid" providers also expose limited free allowances — the tier label reflects what the default keys usually buy you. Flip `freeOnly` off to include paid providers in fallback.
|
|
160
161
|
|
|
@@ -251,6 +252,18 @@ clai use hetzner # model defaults to Qwen/Qwen3.6-35B-A3B
|
|
|
251
252
|
|
|
252
253
|
Both fetch the live model catalog for `/model` (cached 1h) and rotate keys like every other provider.
|
|
253
254
|
|
|
255
|
+
#### OrcaRouter (one key, eleven upstreams, zero markup)
|
|
256
|
+
|
|
257
|
+
[OrcaRouter](https://docs.orcarouter.ai) is an OpenAI-compatible gateway that routes OpenAI, Anthropic, Google Gemini, DeepSeek, xAI Grok, Qwen, Kimi, MiniMax, Z.ai GLM and more behind one key — billed at each provider's published price with no token markup. Model ids are vendor-prefixed (`openai/gpt-4o-mini`, `anthropic/claude-sonnet-4.6`, `google/gemini-2.5-flash`, `deepseek/deepseek-reasoner`, …), and `orcarouter/auto` picks the cheapest model that fits the request.
|
|
258
|
+
|
|
259
|
+
```sh
|
|
260
|
+
clai set orcarouter sk-your-key # key: orcarouter.ai/console (starts with sk-)
|
|
261
|
+
clai use orcarouter # model defaults to openai/gpt-4o-mini
|
|
262
|
+
/model anthropic/claude-sonnet-4.6 # or any id from the live /models catalog
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
Streaming, native tool calling, structured outputs (`response_format`), vision via `image_url` and prompt caching all work. Reasoning uses one unified `reasoning_effort` knob (low/medium/high, plus minimal/max on some models) that the gateway translates to each upstream's native shape — `/think` and `/effort` map onto it, and thinking arrives as `reasoning_content` in the usual thinking block. `/model` reads the live catalog (cached 1h), filtered to Chat-Completions-reachable models so image/video/tts ids stay out of the picker. Keys are multi-key with rotation like everywhere else; env var is `ORCAROUTER_API_KEY`.
|
|
266
|
+
|
|
254
267
|
### Manage keys
|
|
255
268
|
|
|
256
269
|
```sh
|
|
@@ -265,6 +278,7 @@ clai set lightning <key> # Lightning AI Model APIs
|
|
|
265
278
|
clai set tokenrouter sk-your-key # TokenRouter
|
|
266
279
|
clai set fireworks fw_your_key # Fireworks
|
|
267
280
|
clai set hetzner your-token # Hetzner Inference (experiments.hetzner.com)
|
|
281
|
+
clai set orcarouter sk-your-key # OrcaRouter (orcarouter.ai/console)
|
|
268
282
|
clai set free <key> # optional: unlock premium models (free is keyless by default)
|
|
269
283
|
clai unset modal --url # drop stored endpoint URLs, keep the keys
|
|
270
284
|
clai keys # providers + masked keys (★ active) + endpoint URLs
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { ChatMessage, CompletionRequest, ProviderId, SuccessfulRequestSnapshot } from "../types.js";
|
|
2
|
+
import type { OperationLedger } from "../llm/operation-ledger.js";
|
|
3
|
+
import { type RequestAccounting } from "./request-accounting.js";
|
|
4
|
+
/** The assembled snapshot-replay request cannot fit the effective safe limit. */
|
|
5
|
+
export declare class CompactionOverLimitError extends Error {
|
|
6
|
+
readonly requestTokens: number;
|
|
7
|
+
readonly effectiveSafeTokens: number | undefined;
|
|
8
|
+
constructor(message: string, requestTokens: number, effectiveSafeTokens: number | undefined);
|
|
9
|
+
}
|
|
10
|
+
export declare function isCompactionOverLimitError(error: unknown): error is CompactionOverLimitError;
|
|
11
|
+
export interface CompactionSummaryExecution {
|
|
12
|
+
readonly provider: ProviderId | undefined;
|
|
13
|
+
readonly model: string | undefined;
|
|
14
|
+
readonly systemContent: string;
|
|
15
|
+
readonly prompt: string;
|
|
16
|
+
readonly maxTokens: number;
|
|
17
|
+
readonly signal?: AbortSignal | undefined;
|
|
18
|
+
readonly sourceMessages?: readonly ChatMessage[] | undefined;
|
|
19
|
+
readonly baseRequest?: SuccessfulRequestSnapshot | undefined;
|
|
20
|
+
readonly history?: readonly ChatMessage[] | undefined;
|
|
21
|
+
readonly contextLimitTokens?: number | undefined;
|
|
22
|
+
readonly tools?: CompletionRequest["tools"] | undefined;
|
|
23
|
+
readonly allowModelFallback?: boolean | undefined;
|
|
24
|
+
readonly stream: boolean;
|
|
25
|
+
readonly retryOnServerError?: boolean | undefined;
|
|
26
|
+
/** Backoff before the error retry; defaults to COMPACTION_ERROR_RETRY_DELAY_MS. */
|
|
27
|
+
readonly retryDelayMs?: number | undefined;
|
|
28
|
+
readonly qualityRetry?: boolean | undefined;
|
|
29
|
+
readonly operation?: OperationLedger | undefined;
|
|
30
|
+
readonly onToken?: ((text: string, replace?: boolean) => void) | undefined;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* The cache-preserving compaction request: the exact messages of the last
|
|
34
|
+
* successful turn request, any history messages appended since, then the
|
|
35
|
+
* compaction instruction as the final user turn. The previous prompt is a
|
|
36
|
+
* strict prefix of this request, so APC providers serve it entirely from
|
|
37
|
+
* cache and only the tail + instruction bill as fresh input.
|
|
38
|
+
*/
|
|
39
|
+
export declare function buildCompactionReplayMessages(baseRequest: SuccessfulRequestSnapshot, history: readonly ChatMessage[], userPrompt: string): ChatMessage[];
|
|
40
|
+
export interface CompactionReplayPlan {
|
|
41
|
+
readonly messages: ChatMessage[];
|
|
42
|
+
readonly accounting: RequestAccounting;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Pre-flight the snapshot-replay request without dispatching it. Returns
|
|
46
|
+
* undefined when the snapshot is not a usable prefix base for the live
|
|
47
|
+
* history; otherwise the replay messages and their serialized-request
|
|
48
|
+
* accounting, so the caller can pick the cache-preserving strategy only when
|
|
49
|
+
* the request actually fits (`!plan.accounting.overLimit`). The accounting
|
|
50
|
+
* reserves the summary completion budget and adds planner slack for the
|
|
51
|
+
* durable-state detail the final instruction prompt gains later.
|
|
52
|
+
*
|
|
53
|
+
* Replay compatibility: identical heads are the common case (the snapshot was
|
|
54
|
+
* captured from this session's live message array). History restored from
|
|
55
|
+
* disk drops the composed system head, so a headless history is accepted when
|
|
56
|
+
* its messages still match into the snapshot's body. Anything else means the
|
|
57
|
+
* snapshot belongs to a different lineage (provider/model switch, rewound or
|
|
58
|
+
* replaced history) and replaying it would resurrect dropped messages.
|
|
59
|
+
*/
|
|
60
|
+
export declare function planCompactionReplay(input: {
|
|
61
|
+
readonly baseRequest: SuccessfulRequestSnapshot;
|
|
62
|
+
readonly history: readonly ChatMessage[];
|
|
63
|
+
readonly prompt: string;
|
|
64
|
+
readonly maxTokens: number;
|
|
65
|
+
readonly contextLimitTokens?: number | undefined;
|
|
66
|
+
readonly stream?: boolean | undefined;
|
|
67
|
+
}): CompactionReplayPlan | undefined;
|
|
68
|
+
export declare function executeCompactionSummary(execution: CompactionSummaryExecution): Promise<string>;
|
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
import { buildCompactionRetryPrompt, isCompactionCompletionTruncated, looksLikeIncompleteCompactionSummary, looksLikeTranscriptReplay, normalizeCompactionSummary, } from "./compaction-summary.js";
|
|
2
|
+
import { completeWithProvider, streamWithProvider } from "../llm/router.js";
|
|
3
|
+
import { streamAlreadyEmitted } from "../llm/stream-progress.js";
|
|
4
|
+
import { createThinkingStreamParser, stripThinking } from "../ui/thinking.js";
|
|
5
|
+
import { accountAssembledRequest, RequestOverLimitError, SAFETY_MARGIN_TOKENS, } from "./request-accounting.js";
|
|
6
|
+
import { isAbortError } from "./session-policy.js";
|
|
7
|
+
const RETRY_SYSTEM_SUFFIX = "\nReturn only a complete continuation-memory summary. Do not include analysis, reasoning, or <think> tags.";
|
|
8
|
+
/**
|
|
9
|
+
* Pause between a failed compaction admission and its retry: the failure is
|
|
10
|
+
* almost always transient upstream capacity (5xx, 429, a 200 whose stream
|
|
11
|
+
* errored), and an instant replay just re-hits the same hot route.
|
|
12
|
+
*/
|
|
13
|
+
const COMPACTION_ERROR_RETRY_DELAY_MS = 1_500;
|
|
14
|
+
/**
|
|
15
|
+
* Extra headroom the replay planner adds on top of the standard safety margin.
|
|
16
|
+
* The planner sizes the request with a representative instruction prompt; the
|
|
17
|
+
* real prompt additionally embeds durable-state snippets extracted while the
|
|
18
|
+
* summary runs, so the plan must leave room for them.
|
|
19
|
+
*/
|
|
20
|
+
const REPLAY_PLAN_SLACK_TOKENS = 4_096;
|
|
21
|
+
/**
|
|
22
|
+
* A compaction failure worth one more admission. Retryable by default: the
|
|
23
|
+
* only failures excluded are ones a retry cannot fix — aborts, partial streams
|
|
24
|
+
* (re-sending would double-print the summary card), fit-check rejections (the
|
|
25
|
+
* request is deterministically too large), and definitive request errors (4xx
|
|
26
|
+
* other than 408/429). Everything else is treated as transient: 5xx, 429/408,
|
|
27
|
+
* network resets, idle timeouts, and gateway responses that returned HTTP 200
|
|
28
|
+
* but failed upstream mid-stream.
|
|
29
|
+
*/
|
|
30
|
+
function isCompactionRetryableError(error, signal) {
|
|
31
|
+
if (streamAlreadyEmitted(error))
|
|
32
|
+
return false;
|
|
33
|
+
if (isAbortError(error, signal))
|
|
34
|
+
return false;
|
|
35
|
+
if (isCompactionOverLimitError(error))
|
|
36
|
+
return false;
|
|
37
|
+
if (error instanceof RequestOverLimitError)
|
|
38
|
+
return false;
|
|
39
|
+
const status = error && typeof error === "object" && "status" in error
|
|
40
|
+
? Number(error.status)
|
|
41
|
+
: 0;
|
|
42
|
+
if (status === 408 || status === 429)
|
|
43
|
+
return true;
|
|
44
|
+
if (status >= 400 && status < 500)
|
|
45
|
+
return false;
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
/** The assembled snapshot-replay request cannot fit the effective safe limit. */
|
|
49
|
+
export class CompactionOverLimitError extends Error {
|
|
50
|
+
requestTokens;
|
|
51
|
+
effectiveSafeTokens;
|
|
52
|
+
constructor(message, requestTokens, effectiveSafeTokens) {
|
|
53
|
+
super(message);
|
|
54
|
+
this.requestTokens = requestTokens;
|
|
55
|
+
this.effectiveSafeTokens = effectiveSafeTokens;
|
|
56
|
+
this.name = "CompactionOverLimitError";
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
export function isCompactionOverLimitError(error) {
|
|
60
|
+
return error instanceof CompactionOverLimitError;
|
|
61
|
+
}
|
|
62
|
+
const FAIL_CLOSED_BY_REASON = {
|
|
63
|
+
truncated: "compaction failed: model hit the summary output limit — original context retained",
|
|
64
|
+
"reasoning-only": "compaction failed: model returned no visible summary — original context retained",
|
|
65
|
+
replayed: "compaction failed: model replayed the transcript — original context retained",
|
|
66
|
+
incomplete: "compaction failed: model returned an incomplete summary — original context retained",
|
|
67
|
+
};
|
|
68
|
+
function comparableMessage(message) {
|
|
69
|
+
const { images: _images, ...rest } = message;
|
|
70
|
+
return JSON.stringify(rest);
|
|
71
|
+
}
|
|
72
|
+
function missingHistoryTail(requestMessages, history) {
|
|
73
|
+
let requestIndex = 0;
|
|
74
|
+
let matchedHistory = 0;
|
|
75
|
+
while (matchedHistory < history.length) {
|
|
76
|
+
const expected = comparableMessage(history[matchedHistory]);
|
|
77
|
+
let found = -1;
|
|
78
|
+
for (let index = requestIndex; index < requestMessages.length; index += 1) {
|
|
79
|
+
if (comparableMessage(requestMessages[index]) === expected) {
|
|
80
|
+
found = index;
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (found < 0)
|
|
85
|
+
break;
|
|
86
|
+
requestIndex = found + 1;
|
|
87
|
+
matchedHistory += 1;
|
|
88
|
+
}
|
|
89
|
+
return history.slice(matchedHistory).map((message) => structuredClone(message));
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* The cache-preserving compaction request: the exact messages of the last
|
|
93
|
+
* successful turn request, any history messages appended since, then the
|
|
94
|
+
* compaction instruction as the final user turn. The previous prompt is a
|
|
95
|
+
* strict prefix of this request, so APC providers serve it entirely from
|
|
96
|
+
* cache and only the tail + instruction bill as fresh input.
|
|
97
|
+
*/
|
|
98
|
+
export function buildCompactionReplayMessages(baseRequest, history, userPrompt) {
|
|
99
|
+
return [
|
|
100
|
+
...baseRequest.messages.map((message) => structuredClone(message)),
|
|
101
|
+
...missingHistoryTail(baseRequest.messages, history),
|
|
102
|
+
{ role: "user", content: userPrompt },
|
|
103
|
+
];
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Pre-flight the snapshot-replay request without dispatching it. Returns
|
|
107
|
+
* undefined when the snapshot is not a usable prefix base for the live
|
|
108
|
+
* history; otherwise the replay messages and their serialized-request
|
|
109
|
+
* accounting, so the caller can pick the cache-preserving strategy only when
|
|
110
|
+
* the request actually fits (`!plan.accounting.overLimit`). The accounting
|
|
111
|
+
* reserves the summary completion budget and adds planner slack for the
|
|
112
|
+
* durable-state detail the final instruction prompt gains later.
|
|
113
|
+
*
|
|
114
|
+
* Replay compatibility: identical heads are the common case (the snapshot was
|
|
115
|
+
* captured from this session's live message array). History restored from
|
|
116
|
+
* disk drops the composed system head, so a headless history is accepted when
|
|
117
|
+
* its messages still match into the snapshot's body. Anything else means the
|
|
118
|
+
* snapshot belongs to a different lineage (provider/model switch, rewound or
|
|
119
|
+
* replaced history) and replaying it would resurrect dropped messages.
|
|
120
|
+
*/
|
|
121
|
+
export function planCompactionReplay(input) {
|
|
122
|
+
const baseRequest = input.baseRequest;
|
|
123
|
+
const snapshotHead = baseRequest.messages[0];
|
|
124
|
+
const historyHead = input.history[0];
|
|
125
|
+
if (!snapshotHead || !historyHead)
|
|
126
|
+
return undefined;
|
|
127
|
+
const tail = missingHistoryTail(baseRequest.messages, input.history);
|
|
128
|
+
if (comparableMessage(snapshotHead) !== comparableMessage(historyHead)) {
|
|
129
|
+
if (historyHead.role === "system")
|
|
130
|
+
return undefined;
|
|
131
|
+
if (tail.length >= input.history.length)
|
|
132
|
+
return undefined;
|
|
133
|
+
}
|
|
134
|
+
const messages = [
|
|
135
|
+
...baseRequest.messages.map((message) => structuredClone(message)),
|
|
136
|
+
...tail,
|
|
137
|
+
{ role: "user", content: input.prompt },
|
|
138
|
+
];
|
|
139
|
+
const { accounting } = accountAssembledRequest({
|
|
140
|
+
provider: baseRequest.provider,
|
|
141
|
+
model: baseRequest.model,
|
|
142
|
+
messages,
|
|
143
|
+
stream: input.stream ?? true,
|
|
144
|
+
...(baseRequest.tools?.length ? { tools: baseRequest.tools } : {}),
|
|
145
|
+
...(baseRequest.toolChoice !== undefined
|
|
146
|
+
? { toolChoice: baseRequest.toolChoice }
|
|
147
|
+
: {}),
|
|
148
|
+
...(baseRequest.parallelToolCalls !== undefined
|
|
149
|
+
? { parallelToolCalls: baseRequest.parallelToolCalls }
|
|
150
|
+
: {}),
|
|
151
|
+
...(baseRequest.thinking ? { reasoning: baseRequest.thinking } : {}),
|
|
152
|
+
...(input.contextLimitTokens !== undefined
|
|
153
|
+
? { contextLimitTokens: input.contextLimitTokens }
|
|
154
|
+
: {}),
|
|
155
|
+
reservedOutputTokens: input.maxTokens,
|
|
156
|
+
safetyMarginTokens: SAFETY_MARGIN_TOKENS + REPLAY_PLAN_SLACK_TOKENS,
|
|
157
|
+
});
|
|
158
|
+
return { messages, accounting };
|
|
159
|
+
}
|
|
160
|
+
export async function executeCompactionSummary(execution) {
|
|
161
|
+
const attemptMessages = (userPrompt, systemContent) => {
|
|
162
|
+
if (execution.baseRequest) {
|
|
163
|
+
return buildCompactionReplayMessages(execution.baseRequest, execution.history ?? [], userPrompt);
|
|
164
|
+
}
|
|
165
|
+
return execution.sourceMessages
|
|
166
|
+
? [
|
|
167
|
+
...execution.sourceMessages,
|
|
168
|
+
{ role: "user", content: userPrompt },
|
|
169
|
+
]
|
|
170
|
+
: [
|
|
171
|
+
{ role: "system", content: systemContent },
|
|
172
|
+
{ role: "user", content: userPrompt },
|
|
173
|
+
];
|
|
174
|
+
};
|
|
175
|
+
const baseRequest = execution.baseRequest;
|
|
176
|
+
const request = {
|
|
177
|
+
provider: baseRequest?.provider ?? execution.provider,
|
|
178
|
+
model: baseRequest?.model ?? execution.model,
|
|
179
|
+
purpose: "compaction",
|
|
180
|
+
messages: attemptMessages(execution.prompt, execution.systemContent),
|
|
181
|
+
maxTokens: execution.maxTokens,
|
|
182
|
+
...(baseRequest
|
|
183
|
+
? {
|
|
184
|
+
...(baseRequest.temperature !== undefined
|
|
185
|
+
? { temperature: baseRequest.temperature }
|
|
186
|
+
: {}),
|
|
187
|
+
...(baseRequest.thinking
|
|
188
|
+
? { thinking: structuredClone(baseRequest.thinking) }
|
|
189
|
+
: {}),
|
|
190
|
+
...(baseRequest.tools
|
|
191
|
+
? { tools: baseRequest.tools.map((tool) => structuredClone(tool)) }
|
|
192
|
+
: {}),
|
|
193
|
+
...(baseRequest.toolChoice !== undefined
|
|
194
|
+
? { toolChoice: structuredClone(baseRequest.toolChoice) }
|
|
195
|
+
: {}),
|
|
196
|
+
...(baseRequest.parallelToolCalls !== undefined
|
|
197
|
+
? { parallelToolCalls: baseRequest.parallelToolCalls }
|
|
198
|
+
: {}),
|
|
199
|
+
}
|
|
200
|
+
: {
|
|
201
|
+
temperature: 0.1,
|
|
202
|
+
// Disable reasoning for the compression pass. Use "low" (not "none"):
|
|
203
|
+
// for openai-style gateways (TokenRouter etc.) `effort:"none"` maps to
|
|
204
|
+
// the wire value `reasoning_effort:"none"`, which many models reject
|
|
205
|
+
// ("reasoning option not supported"). "low" with enabled:false maps to
|
|
206
|
+
// no reasoning knob on those gateways while still disabling default
|
|
207
|
+
// thinking on deepseek-style models via their own mapping.
|
|
208
|
+
thinking: { enabled: false, effort: "low" },
|
|
209
|
+
...(execution.allowModelFallback ? { allowModelFallback: true } : {}),
|
|
210
|
+
...(execution.tools?.length
|
|
211
|
+
? { tools: execution.tools, toolChoice: "none" }
|
|
212
|
+
: {}),
|
|
213
|
+
}),
|
|
214
|
+
...(execution.signal ? { signal: execution.signal } : {}),
|
|
215
|
+
};
|
|
216
|
+
if (baseRequest) {
|
|
217
|
+
const accounting = accountAssembledRequest({
|
|
218
|
+
provider: baseRequest.provider,
|
|
219
|
+
model: baseRequest.model,
|
|
220
|
+
messages: request.messages,
|
|
221
|
+
stream: execution.stream,
|
|
222
|
+
...(request.tools?.length ? { tools: request.tools } : {}),
|
|
223
|
+
...(request.toolChoice !== undefined
|
|
224
|
+
? { toolChoice: request.toolChoice }
|
|
225
|
+
: {}),
|
|
226
|
+
...(request.parallelToolCalls !== undefined
|
|
227
|
+
? { parallelToolCalls: request.parallelToolCalls }
|
|
228
|
+
: {}),
|
|
229
|
+
...(request.thinking ? { reasoning: request.thinking } : {}),
|
|
230
|
+
...(execution.contextLimitTokens !== undefined
|
|
231
|
+
? { contextLimitTokens: execution.contextLimitTokens }
|
|
232
|
+
: {}),
|
|
233
|
+
reservedOutputTokens: execution.maxTokens,
|
|
234
|
+
}).accounting;
|
|
235
|
+
if (accounting.overLimit) {
|
|
236
|
+
throw new CompactionOverLimitError(`compaction failed: captured request plus compaction instruction needs about ${accounting.requestTokens.toLocaleString()} input tokens but only ${accounting.limit.effectiveSafeTokens?.toLocaleString()} fit after reserving summary output — original context retained`, accounting.requestTokens, accounting.limit.effectiveSafeTokens);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
const runProviderAttempt = async (attemptRequest, replace = false) => {
|
|
240
|
+
// A pinned single dispatch is what makes the one-admission contract real:
|
|
241
|
+
// without it the router can still rotate keys, fall back to another
|
|
242
|
+
// provider, or retry a capability downgrade, each resending this prompt.
|
|
243
|
+
const routerOptions = {
|
|
244
|
+
maxRetries: 0,
|
|
245
|
+
singleDispatch: true,
|
|
246
|
+
...(execution.operation ? { operation: execution.operation } : {}),
|
|
247
|
+
};
|
|
248
|
+
if (!execution.stream) {
|
|
249
|
+
return completeWithProvider(attemptRequest, routerOptions);
|
|
250
|
+
}
|
|
251
|
+
if (replace)
|
|
252
|
+
execution.onToken?.("", true);
|
|
253
|
+
const parser = createThinkingStreamParser((text) => execution.onToken?.(text), undefined, { remember: false });
|
|
254
|
+
const result = await streamWithProvider(attemptRequest, (token) => parser.push(token), { onStatus: () => undefined, ...routerOptions });
|
|
255
|
+
parser.finish();
|
|
256
|
+
return result;
|
|
257
|
+
};
|
|
258
|
+
const sleepBeforeRetry = async () => {
|
|
259
|
+
const delayMs = execution.retryDelayMs ?? COMPACTION_ERROR_RETRY_DELAY_MS;
|
|
260
|
+
if (delayMs <= 0)
|
|
261
|
+
return;
|
|
262
|
+
if (execution.signal?.aborted) {
|
|
263
|
+
throw execution.signal.reason ?? new Error("Aborted");
|
|
264
|
+
}
|
|
265
|
+
await new Promise((resolve, reject) => {
|
|
266
|
+
const signal = execution.signal;
|
|
267
|
+
const timer = setTimeout(() => {
|
|
268
|
+
cleanup();
|
|
269
|
+
resolve();
|
|
270
|
+
}, delayMs);
|
|
271
|
+
const onAbort = () => {
|
|
272
|
+
clearTimeout(timer);
|
|
273
|
+
cleanup();
|
|
274
|
+
reject(signal?.reason ?? new Error("Aborted"));
|
|
275
|
+
};
|
|
276
|
+
const cleanup = () => {
|
|
277
|
+
signal?.removeEventListener("abort", onAbort);
|
|
278
|
+
};
|
|
279
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
280
|
+
});
|
|
281
|
+
};
|
|
282
|
+
// One automatic retry after a transient failure: the replayed prefix is
|
|
283
|
+
// cache-hot, so the second admission only re-bills the small fresh tail.
|
|
284
|
+
const runAttempt = async (attemptRequest, replace = false) => {
|
|
285
|
+
try {
|
|
286
|
+
return await runProviderAttempt(attemptRequest, replace);
|
|
287
|
+
}
|
|
288
|
+
catch (error) {
|
|
289
|
+
if (!execution.retryOnServerError ||
|
|
290
|
+
!isCompactionRetryableError(error, execution.signal)) {
|
|
291
|
+
throw error;
|
|
292
|
+
}
|
|
293
|
+
await sleepBeforeRetry();
|
|
294
|
+
return await runProviderAttempt(attemptRequest, replace);
|
|
295
|
+
}
|
|
296
|
+
};
|
|
297
|
+
const first = await runAttempt(request);
|
|
298
|
+
if (first.toolCalls?.length) {
|
|
299
|
+
throw new Error("compaction failed: model returned tool calls instead of a summary — original context retained");
|
|
300
|
+
}
|
|
301
|
+
let visible = normalizeCompactionSummary(stripThinking(first.text).visible);
|
|
302
|
+
let retryReason;
|
|
303
|
+
if (isCompactionCompletionTruncated(first, execution.maxTokens)) {
|
|
304
|
+
retryReason = "truncated";
|
|
305
|
+
}
|
|
306
|
+
else if (!visible) {
|
|
307
|
+
retryReason = "reasoning-only";
|
|
308
|
+
}
|
|
309
|
+
else if (looksLikeTranscriptReplay(visible)) {
|
|
310
|
+
retryReason = "replayed";
|
|
311
|
+
}
|
|
312
|
+
else if (looksLikeIncompleteCompactionSummary(visible)) {
|
|
313
|
+
retryReason = "incomplete";
|
|
314
|
+
}
|
|
315
|
+
if (retryReason) {
|
|
316
|
+
if (execution.qualityRetry === false) {
|
|
317
|
+
throw new Error(FAIL_CLOSED_BY_REASON[retryReason]);
|
|
318
|
+
}
|
|
319
|
+
const retry = await runAttempt({
|
|
320
|
+
...request,
|
|
321
|
+
messages: attemptMessages(buildCompactionRetryPrompt(execution.prompt, retryReason), `${execution.systemContent}${RETRY_SYSTEM_SUFFIX}`),
|
|
322
|
+
temperature: 0,
|
|
323
|
+
}, true);
|
|
324
|
+
if (retry.toolCalls?.length) {
|
|
325
|
+
throw new Error("compaction failed: model returned tool calls instead of a summary — original context retained");
|
|
326
|
+
}
|
|
327
|
+
if (isCompactionCompletionTruncated(retry, execution.maxTokens)) {
|
|
328
|
+
throw new Error("compaction failed: model hit the summary output limit twice — original context retained");
|
|
329
|
+
}
|
|
330
|
+
visible = normalizeCompactionSummary(stripThinking(retry.text).visible);
|
|
331
|
+
if (!visible) {
|
|
332
|
+
throw new Error("compaction failed: model returned an empty summary");
|
|
333
|
+
}
|
|
334
|
+
if (looksLikeTranscriptReplay(visible)) {
|
|
335
|
+
throw new Error("compaction failed: model replayed the transcript twice — original context retained");
|
|
336
|
+
}
|
|
337
|
+
if (looksLikeIncompleteCompactionSummary(visible)) {
|
|
338
|
+
throw new Error("compaction failed: model returned an incomplete summary twice — original context retained");
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
return visible;
|
|
342
|
+
}
|
|
343
|
+
//# sourceMappingURL=compaction-executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compaction-executor.js","sourceRoot":"","sources":["../../src/agent/compaction-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* Used for reliability ops and regression harnesses. Does not truncate context.
|
|
6
6
|
*/
|
|
7
7
|
import { createHash } from "node:crypto";
|
|
8
|
+
import { reasoningArtifactTokensForMessage } from "../llm/reasoning-artifacts.js";
|
|
8
9
|
import { estimateMessagesTokens, estimateTokens, isCompactionMemoryMessage, COMPACTION_MEMORY_PREFIX, PLAN_IMPLEMENT_MEMORY_PREFIX, MECHANICAL_MEMORY_PREFIX, } from "./context-manager.js";
|
|
9
10
|
import { SESSION_STATE_PREFIX } from "./session-state.js";
|
|
10
11
|
function isPlanSystem(content) {
|
|
@@ -81,6 +82,7 @@ export function buildContextBreakdown(messages, tools) {
|
|
|
81
82
|
if (message.toolCalls?.length) {
|
|
82
83
|
assistantTokens += estimateTokens(JSON.stringify(message.toolCalls));
|
|
83
84
|
}
|
|
85
|
+
assistantTokens += reasoningArtifactTokensForMessage(message);
|
|
84
86
|
break;
|
|
85
87
|
case "tool":
|
|
86
88
|
toolMessageCount += 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-breakdown.js","sourceRoot":"","sources":["../../src/agent/context-breakdown.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"context-breakdown.js","sourceRoot":"","sources":["../../src/agent/context-breakdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ChatMessage } from "../types.js";
|
|
2
|
+
import { estimateImageTokens, estimateMessagesTokens, estimateTextTokens as estimateTokens } from "./request-accounting.js";
|
|
3
|
+
export { estimateImageTokens, estimateMessagesTokens, estimateTokens };
|
|
2
4
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* deliberately over-estimate — better to compact one turn too early than to
|
|
7
|
-
* lose state to a provider context-window error.
|
|
5
|
+
* Token estimation lives in `request-accounting.ts` — the one serialized-
|
|
6
|
+
* request accounting service. The exports above keep this module's historic
|
|
7
|
+
* public surface; nothing here owns a chars-per-token ratio anymore.
|
|
8
8
|
*/
|
|
9
|
-
export declare function estimateTokens(text: string): number;
|
|
10
|
-
export declare function estimateImageTokens(image: ChatImage): number;
|
|
11
|
-
export declare function estimateMessagesTokens(messages: ChatMessage[]): number;
|
|
12
9
|
/**
|
|
13
10
|
* Agent-loop auto-compact threshold (estimated tokens). Shared with `/context`
|
|
14
11
|
* so the reported % of budget matches when auto-compaction fires.
|
|
@@ -40,7 +37,23 @@ export interface CompactOptions {
|
|
|
40
37
|
*/
|
|
41
38
|
purpose?: "default" | "plan-implement" | undefined;
|
|
42
39
|
durableEnvelope?: string | undefined;
|
|
40
|
+
/**
|
|
41
|
+
* At most one summarizer dispatch: forbids automatic map/reduce. When the
|
|
42
|
+
* full settled range does not fit one pass, summarize the oldest complete
|
|
43
|
+
* message-aligned slice (emergency_prefix_slice) and retain the untouched
|
|
44
|
+
* middle/recent tail.
|
|
45
|
+
*/
|
|
46
|
+
singleAdmission?: boolean | undefined;
|
|
47
|
+
/**
|
|
48
|
+
* Choose the direct single pass whenever source messages exist, skipping the
|
|
49
|
+
* estimate gate. Callers set this only after pre-flighting that the exact
|
|
50
|
+
* assembled request fits (e.g. a cache-preserving snapshot replay planned
|
|
51
|
+
* with `planCompactionReplay`) — the raw estimate gate is deliberately
|
|
52
|
+
* conservative and would otherwise reject requests that fit fine.
|
|
53
|
+
*/
|
|
54
|
+
forceDirectSinglePass?: boolean | undefined;
|
|
43
55
|
}
|
|
56
|
+
export type CompactionStrategy = "direct" | "single" | "emergency_prefix_slice" | "map_reduce";
|
|
44
57
|
export interface CompactResult {
|
|
45
58
|
messages: ChatMessage[];
|
|
46
59
|
before: number;
|
|
@@ -48,6 +61,7 @@ export interface CompactResult {
|
|
|
48
61
|
beforeTokens: number;
|
|
49
62
|
afterTokens: number;
|
|
50
63
|
summarized: boolean;
|
|
64
|
+
strategy?: CompactionStrategy | undefined;
|
|
51
65
|
}
|
|
52
66
|
/**
|
|
53
67
|
* Content prefixes that mark a `role:"system"` message as compacted session
|