@pentoshi/clai 4.0.3 → 4.2.0
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 +45 -9
- 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/confirm-port.js +6 -3
- package/dist/agent/confirm-port.js.map +1 -1
- 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 +412 -181
- 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/agent/turn-outcome.d.ts +1 -1
- package/dist/agent/turn-outcome.js +2 -12
- package/dist/agent/turn-outcome.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 +23 -16
- 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 +22 -11
- package/dist/app/controllers/session-controller.js +137 -92
- 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-continuation.d.ts +0 -6
- package/dist/app/controllers/turn-continuation.js +4 -21
- package/dist/app/controllers/turn-continuation.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/app/ports/transcript-item.d.ts +9 -1
- package/dist/classic/app/ClassicApp.js +3 -3
- 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 +4 -9
- package/dist/classic/app/wiring-interactions.js.map +1 -1
- package/dist/classic/blocks/TurnSummaryBlock.d.ts +3 -0
- package/dist/classic/blocks/TurnSummaryBlock.js +6 -0
- package/dist/classic/blocks/TurnSummaryBlock.js.map +1 -0
- package/dist/classic/blocks/tool-lines.js +2 -1
- package/dist/classic/blocks/tool-lines.js.map +1 -1
- package/dist/classic/blocks/turn-summary-lines.d.ts +3 -0
- package/dist/classic/blocks/turn-summary-lines.js +7 -0
- package/dist/classic/blocks/turn-summary-lines.js.map +1 -0
- package/dist/classic/chrome/status-rows.d.ts +0 -1
- package/dist/classic/chrome/status-rows.js +0 -12
- package/dist/classic/chrome/status-rows.js.map +1 -1
- package/dist/classic/feed/Feed.js +2 -0
- package/dist/classic/feed/Feed.js.map +1 -1
- package/dist/classic/feed/feed-blocks.d.ts +1 -1
- package/dist/classic/feed/feed-blocks.js +3 -0
- package/dist/classic/feed/feed-blocks.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 +56 -1
- 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.d.ts +3 -0
- package/dist/llm/fireworks.js +103 -0
- package/dist/llm/fireworks.js.map +1 -0
- 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.d.ts +3 -0
- package/dist/llm/hetzner.js +98 -0
- package/dist/llm/hetzner.js.map +1 -0
- package/dist/llm/http.d.ts +60 -10
- package/dist/llm/http.js +465 -156
- 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 +839 -624
- 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 +198 -21
- 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 +504 -102
- 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 +13 -6
- 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 +7 -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/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/fs.d.ts +5 -3
- package/dist/tools/fs.js +8 -5
- package/dist/tools/fs.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/plan/plan-view.js +5 -3
- package/dist/tui-v2/components/plan/plan-view.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/status/status-line.js +1 -14
- package/dist/tui-v2/components/status/status-line.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/components/transcript/notice-row.d.ts +3 -1
- package/dist/tui-v2/components/transcript/notice-row.js +28 -3
- package/dist/tui-v2/components/transcript/notice-row.js.map +1 -1
- package/dist/tui-v2/components/transcript/thinking-block.d.ts +0 -5
- package/dist/tui-v2/components/transcript/thinking-block.js +3 -8
- package/dist/tui-v2/components/transcript/thinking-block.js.map +1 -1
- package/dist/tui-v2/components/transcript/tool-card.js +16 -7
- package/dist/tui-v2/components/transcript/tool-card.js.map +1 -1
- package/dist/tui-v2/components/transcript/transcript-row.d.ts +0 -2
- package/dist/tui-v2/components/transcript/transcript-row.js +7 -3
- package/dist/tui-v2/components/transcript/transcript-row.js.map +1 -1
- package/dist/tui-v2/components/transcript/transcript-view.js +1 -3
- package/dist/tui-v2/components/transcript/transcript-view.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 +3 -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 +5 -0
- package/dist/ui-core/rendering/duration.js +43 -0
- package/dist/ui-core/rendering/duration.js.map +1 -0
- 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/rendering/transcript-semantic.js +2 -0
- package/dist/ui-core/rendering/transcript-semantic.js.map +1 -1
- package/dist/ui-core/state/transcript-compaction.js +2 -0
- package/dist/ui-core/state/transcript-compaction.js.map +1 -1
- package/dist/ui-core/state/transcript-hydrate.js +34 -4
- 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 +96 -8
- 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 +9 -1
- package/dist/ui-core/state/transcript-types.js +3 -1
- 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
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { createReasoningArtifactReplayTarget, reasoningArtifactReplayDecision, reasoningArtifactsForMessage, } from "./reasoning-artifacts.js";
|
|
3
|
+
import { isRequestContextSystemMessage } from "./system-messages.js";
|
|
4
|
+
import { isReasoningUnsupported, modelAcceptsImages, modelSupportsThinking, } from "./capabilities.js";
|
|
5
|
+
import { resolveSampling } from "./sampling.js";
|
|
6
|
+
import { isBuiltInProviderId, resolveProviderProfile, } from "./provider-profile.js";
|
|
7
|
+
import { providerWireApi, resolveBuiltInProfile } from "./provider-profiles.js";
|
|
8
|
+
/**
|
|
9
|
+
* Canonical request plan (doc 03 §"Canonical request plan", doc 06 §3).
|
|
10
|
+
*
|
|
11
|
+
* One immutable, renderer-neutral object describes what a logical generation
|
|
12
|
+
* will send: route, timeline with stable/mutable boundaries, tools, replay
|
|
13
|
+
* decisions for every artifact, controls, images, route policy, budget, and a
|
|
14
|
+
* privacy-safe cache-prefix fingerprint. Provider serializers emit their wire
|
|
15
|
+
* bodies from a compiled plan; nothing dispatches from ad hoc message arrays
|
|
16
|
+
* past this boundary.
|
|
17
|
+
*/
|
|
18
|
+
export const REQUEST_PLAN_VERSION = 1;
|
|
19
|
+
export const REQUEST_PLAN_COMPILER_VERSION = 1;
|
|
20
|
+
const REPLAY_DIALECT_BY_WIRE = {
|
|
21
|
+
"chat-completions": "openai-compatible",
|
|
22
|
+
"anthropic-messages": "anthropic-messages",
|
|
23
|
+
"gemini-generate-content": "gemini-generate-content",
|
|
24
|
+
"meta-responses": "meta-responses",
|
|
25
|
+
"ollama-chat": "ollama-chat",
|
|
26
|
+
};
|
|
27
|
+
const PLAN_HASH_DOMAIN = "clai.request-plan.v1\0";
|
|
28
|
+
// Repository-wide conservative mixed text/JSON ratio; matches the artifact
|
|
29
|
+
// accounting estimator so plan sections compose with other token estimates.
|
|
30
|
+
function estimateTokens(byteLength) {
|
|
31
|
+
return Math.ceil(byteLength / 3.3);
|
|
32
|
+
}
|
|
33
|
+
function hashParts(parts) {
|
|
34
|
+
const hash = createHash("sha256").update(PLAN_HASH_DOMAIN, "utf8");
|
|
35
|
+
let byteLength = 0;
|
|
36
|
+
for (const part of parts) {
|
|
37
|
+
const bytes = Buffer.from(part, "utf8");
|
|
38
|
+
hash.update(`${bytes.length}:`, "utf8");
|
|
39
|
+
hash.update(bytes);
|
|
40
|
+
byteLength += bytes.length;
|
|
41
|
+
}
|
|
42
|
+
return { sha256: hash.digest("hex"), byteLength };
|
|
43
|
+
}
|
|
44
|
+
/** Leading system/developer run; the stable instruction prefix. */
|
|
45
|
+
function instructionsEnd(messages) {
|
|
46
|
+
let index = 0;
|
|
47
|
+
while (index < messages.length && messages[index].role === "system") {
|
|
48
|
+
index += 1;
|
|
49
|
+
}
|
|
50
|
+
return index;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* The mutable suffix starts at the last user message: everything after it is
|
|
54
|
+
* the in-flight turn (live request state, open tool exchange, current input)
|
|
55
|
+
* and may still change before dispatch.
|
|
56
|
+
*/
|
|
57
|
+
function liveStart(messages) {
|
|
58
|
+
for (let index = messages.length - 1; index >= 0; index -= 1) {
|
|
59
|
+
if (messages[index].role === "user")
|
|
60
|
+
return index;
|
|
61
|
+
}
|
|
62
|
+
return messages.length;
|
|
63
|
+
}
|
|
64
|
+
function cacheAffectingValue(field, controls) {
|
|
65
|
+
switch (field) {
|
|
66
|
+
case "messages":
|
|
67
|
+
case "tools":
|
|
68
|
+
return `${field}-section`;
|
|
69
|
+
case "thinking":
|
|
70
|
+
return `${controls.reasoningEnabled}:${controls.effort}`;
|
|
71
|
+
case "reasoning":
|
|
72
|
+
return controls.reasoningEnabled ? "enabled" : "omitted";
|
|
73
|
+
case "reasoning_effort":
|
|
74
|
+
case "reasoning.effort":
|
|
75
|
+
return controls.reasoningEnabled ? controls.effort : "off";
|
|
76
|
+
case "temperature":
|
|
77
|
+
return String(controls.temperature);
|
|
78
|
+
case "top_p":
|
|
79
|
+
return controls.topP === undefined ? "omitted" : String(controls.topP);
|
|
80
|
+
default:
|
|
81
|
+
return "declared";
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
function cacheSection(ordinal, section, parts) {
|
|
85
|
+
const { sha256, byteLength } = hashParts(parts);
|
|
86
|
+
return Object.freeze({
|
|
87
|
+
ordinal,
|
|
88
|
+
section,
|
|
89
|
+
sha256,
|
|
90
|
+
byteLength,
|
|
91
|
+
estimatedTokens: estimateTokens(byteLength),
|
|
92
|
+
itemCount: parts.length,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Deterministically compile one immutable plan. Compilation is pure: the same
|
|
97
|
+
* inputs always produce a deep-equal plan with identical section hashes.
|
|
98
|
+
*/
|
|
99
|
+
export function compileRequestPlan(input) {
|
|
100
|
+
const messages = Object.freeze([...input.messages]);
|
|
101
|
+
const wire = providerWireApi(input.provider, input.model);
|
|
102
|
+
const target = createReasoningArtifactReplayTarget({
|
|
103
|
+
provider: input.provider,
|
|
104
|
+
model: input.model,
|
|
105
|
+
dialect: REPLAY_DIALECT_BY_WIRE[wire],
|
|
106
|
+
...(input.endpoint ? { endpoint: input.endpoint } : {}),
|
|
107
|
+
});
|
|
108
|
+
const instructionsBoundary = instructionsEnd(messages);
|
|
109
|
+
const liveBoundary = liveStart(messages);
|
|
110
|
+
const sections = [
|
|
111
|
+
{
|
|
112
|
+
kind: "instructions",
|
|
113
|
+
messageStart: 0,
|
|
114
|
+
messageEnd: instructionsBoundary,
|
|
115
|
+
messageCount: instructionsBoundary,
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
kind: "history",
|
|
119
|
+
messageStart: instructionsBoundary,
|
|
120
|
+
messageEnd: liveBoundary,
|
|
121
|
+
messageCount: Math.max(0, liveBoundary - instructionsBoundary),
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
kind: "live",
|
|
125
|
+
messageStart: liveBoundary,
|
|
126
|
+
messageEnd: messages.length,
|
|
127
|
+
messageCount: Math.max(0, messages.length - liveBoundary),
|
|
128
|
+
},
|
|
129
|
+
].map((section) => Object.freeze(section));
|
|
130
|
+
const mutableMessageIndexes = [];
|
|
131
|
+
for (let index = 0; index < messages.length; index += 1) {
|
|
132
|
+
if (index >= liveBoundary || isRequestContextSystemMessage(messages[index])) {
|
|
133
|
+
mutableMessageIndexes.push(index);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
const reasoningEnabled = Boolean(input.reasoning?.enabled);
|
|
137
|
+
const effort = input.reasoning?.effort ?? "medium";
|
|
138
|
+
const controlSuppression = isReasoningUnsupported(input.provider, input.model)
|
|
139
|
+
? "observed-rejection"
|
|
140
|
+
: reasoningEnabled && !modelSupportsThinking(input.provider, input.model)
|
|
141
|
+
? "capability-denied"
|
|
142
|
+
: undefined;
|
|
143
|
+
const sampling = resolveSampling({
|
|
144
|
+
provider: input.provider,
|
|
145
|
+
model: input.model,
|
|
146
|
+
reasoningEnabled,
|
|
147
|
+
requestedTemperature: input.temperature,
|
|
148
|
+
});
|
|
149
|
+
const profile = isBuiltInProviderId(input.provider)
|
|
150
|
+
? resolveBuiltInProfile({
|
|
151
|
+
provider: input.provider,
|
|
152
|
+
model: input.model,
|
|
153
|
+
endpointHash: target.endpointHash,
|
|
154
|
+
})
|
|
155
|
+
: resolveProviderProfile({
|
|
156
|
+
provider: input.provider,
|
|
157
|
+
model: input.model,
|
|
158
|
+
wireApi: wire,
|
|
159
|
+
endpointHash: target.endpointHash,
|
|
160
|
+
});
|
|
161
|
+
const decisions = [];
|
|
162
|
+
const replayedArtifactParts = [];
|
|
163
|
+
for (let index = 0; index < messages.length; index += 1) {
|
|
164
|
+
const message = messages[index];
|
|
165
|
+
const withinCacheBoundary = index < liveBoundary && !isRequestContextSystemMessage(message);
|
|
166
|
+
for (const artifact of reasoningArtifactsForMessage(message)) {
|
|
167
|
+
const decision = reasoningArtifactReplayDecision(artifact, target, {
|
|
168
|
+
hasToolCalls: Boolean(message.toolCalls?.length),
|
|
169
|
+
});
|
|
170
|
+
decisions.push(Object.freeze({ messageIndex: index, decision }));
|
|
171
|
+
if (decision.action === "replayed" && withinCacheBoundary) {
|
|
172
|
+
replayedArtifactParts.push(JSON.stringify({
|
|
173
|
+
kind: artifact.kind,
|
|
174
|
+
raw: artifact.raw,
|
|
175
|
+
position: artifact.position,
|
|
176
|
+
}));
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
const tools = Object.freeze([...(input.tools ?? [])]);
|
|
181
|
+
const imageMessageIndexes = [];
|
|
182
|
+
let imageCount = 0;
|
|
183
|
+
for (let index = 0; index < messages.length; index += 1) {
|
|
184
|
+
const count = messages[index].images?.length ?? 0;
|
|
185
|
+
if (count > 0) {
|
|
186
|
+
imageMessageIndexes.push(index);
|
|
187
|
+
imageCount += count;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
const stableInstructions = messages
|
|
191
|
+
.slice(0, instructionsBoundary)
|
|
192
|
+
.filter((message) => !isRequestContextSystemMessage(message));
|
|
193
|
+
const stableHistory = messages
|
|
194
|
+
.slice(instructionsBoundary, liveBoundary)
|
|
195
|
+
.filter((message) => !isRequestContextSystemMessage(message));
|
|
196
|
+
const settingsValueInput = {
|
|
197
|
+
reasoningEnabled,
|
|
198
|
+
effort,
|
|
199
|
+
temperature: sampling.temperature,
|
|
200
|
+
topP: sampling.topP,
|
|
201
|
+
};
|
|
202
|
+
const cacheSections = [
|
|
203
|
+
cacheSection(1, "instructions", stableInstructions.map((m) => JSON.stringify(m))),
|
|
204
|
+
cacheSection(2, "tools", tools.map((tool) => JSON.stringify(tool))),
|
|
205
|
+
cacheSection(3, "history", stableHistory.map((m) => JSON.stringify(m))),
|
|
206
|
+
cacheSection(4, "artifacts", replayedArtifactParts),
|
|
207
|
+
cacheSection(5, "settings", [
|
|
208
|
+
`serializer:${wire}`,
|
|
209
|
+
`version:${REQUEST_PLAN_COMPILER_VERSION}`,
|
|
210
|
+
...[...profile.cache.cacheAffectingFields]
|
|
211
|
+
.sort()
|
|
212
|
+
.map((field) => `${field}=${cacheAffectingValue(field, settingsValueInput)}`),
|
|
213
|
+
]),
|
|
214
|
+
];
|
|
215
|
+
const prefixHash = createHash("sha256").update(PLAN_HASH_DOMAIN, "utf8");
|
|
216
|
+
for (const section of cacheSections)
|
|
217
|
+
prefixHash.update(section.sha256, "hex");
|
|
218
|
+
return Object.freeze({
|
|
219
|
+
version: REQUEST_PLAN_VERSION,
|
|
220
|
+
route: Object.freeze({
|
|
221
|
+
provider: input.provider,
|
|
222
|
+
model: input.model,
|
|
223
|
+
serializer: wire,
|
|
224
|
+
serializerVersion: 1,
|
|
225
|
+
compilerVersion: REQUEST_PLAN_COMPILER_VERSION,
|
|
226
|
+
...(target.endpointHash ? { endpointHash: target.endpointHash } : {}),
|
|
227
|
+
}),
|
|
228
|
+
timeline: Object.freeze({
|
|
229
|
+
messages,
|
|
230
|
+
sections: Object.freeze(sections),
|
|
231
|
+
mutableMessageIndexes: Object.freeze(mutableMessageIndexes),
|
|
232
|
+
}),
|
|
233
|
+
tools: Object.freeze({
|
|
234
|
+
definitions: tools,
|
|
235
|
+
...(input.toolChoice !== undefined ? { choice: input.toolChoice } : {}),
|
|
236
|
+
...(input.parallelToolCalls !== undefined
|
|
237
|
+
? { parallelToolCalls: input.parallelToolCalls }
|
|
238
|
+
: {}),
|
|
239
|
+
}),
|
|
240
|
+
replay: Object.freeze({
|
|
241
|
+
target,
|
|
242
|
+
decisions: Object.freeze(decisions),
|
|
243
|
+
}),
|
|
244
|
+
controls: Object.freeze({
|
|
245
|
+
...(input.reasoning ? { reasoning: input.reasoning } : {}),
|
|
246
|
+
...(controlSuppression ? { controlSuppression } : {}),
|
|
247
|
+
temperature: sampling.temperature,
|
|
248
|
+
...(sampling.topP !== undefined ? { topP: sampling.topP } : {}),
|
|
249
|
+
...(input.maxTokens !== undefined
|
|
250
|
+
? { requestedMaxTokens: input.maxTokens }
|
|
251
|
+
: {}),
|
|
252
|
+
stream: input.stream,
|
|
253
|
+
}),
|
|
254
|
+
images: Object.freeze({
|
|
255
|
+
visionAccepted: modelAcceptsImages(input.provider, input.model),
|
|
256
|
+
imageMessageIndexes: Object.freeze(imageMessageIndexes),
|
|
257
|
+
imageCount,
|
|
258
|
+
}),
|
|
259
|
+
policy: Object.freeze({
|
|
260
|
+
reasoningGeneration: profile.reasoning.generation,
|
|
261
|
+
controlDialect: profile.reasoning.control.dialect,
|
|
262
|
+
controlStatus: profile.reasoning.control.status,
|
|
263
|
+
replayScope: profile.reasoning.replayScope,
|
|
264
|
+
cache: profile.cache,
|
|
265
|
+
limits: profile.limits,
|
|
266
|
+
}),
|
|
267
|
+
budget: Object.freeze({ plannedAdmissions: 1 }),
|
|
268
|
+
cache: Object.freeze({
|
|
269
|
+
policy: profile.cache,
|
|
270
|
+
fingerprint: Object.freeze({
|
|
271
|
+
prefixMessageCount: stableInstructions.length + stableHistory.length,
|
|
272
|
+
replayedArtifactCount: replayedArtifactParts.length,
|
|
273
|
+
sections: Object.freeze(cacheSections),
|
|
274
|
+
prefixSha256: prefixHash.digest("hex"),
|
|
275
|
+
}),
|
|
276
|
+
}),
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
//# sourceMappingURL=request-plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-plan.js","sourceRoot":"","sources":["../../src/llm/request-plan.ts"],"names":[],"mappings":"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"}
|
package/dist/llm/router.d.ts
CHANGED
|
@@ -1,15 +1,33 @@
|
|
|
1
|
-
import type { CompletionRequest, CompletionResult, ProviderId } from "../types.js";
|
|
1
|
+
import type { CompletionRequest, CompletionResult, ProviderId, SuccessfulRequestSnapshot } from "../types.js";
|
|
2
2
|
import { ProviderError } from "./http.js";
|
|
3
|
+
import { type ProviderStreamEventSink } from "./stream-events.js";
|
|
3
4
|
import { type ProviderKeyEvent } from "./key-rotation.js";
|
|
4
5
|
import type { LlmProvider, ProviderAuth } from "./provider.js";
|
|
6
|
+
import { OperationUsageRecorder, type OperationUsageSnapshot } from "./operation-usage.js";
|
|
7
|
+
import { OperationLedger } from "./operation-ledger.js";
|
|
5
8
|
/** Toast replace-key so key rotation never stacks notifications. */
|
|
6
9
|
export declare const API_KEY_TOAST_KEY = "api-key-rotation";
|
|
7
10
|
export type ProviderKeyEventHandler = (event: ProviderKeyEvent) => void;
|
|
8
11
|
export interface StreamWithProviderOptions {
|
|
9
12
|
readonly onStatus?: ((message: string) => void) | undefined;
|
|
10
13
|
readonly onKeyEvent?: ProviderKeyEventHandler | undefined;
|
|
14
|
+
readonly onStreamEvent?: ProviderStreamEventSink | undefined;
|
|
15
|
+
/** Additive per-admission accounting for this logical operation. */
|
|
16
|
+
readonly attemptUsage?: OperationUsageRecorder | undefined;
|
|
17
|
+
readonly operation?: OperationLedger | undefined;
|
|
18
|
+
readonly adoptFallback?: boolean | undefined;
|
|
19
|
+
/** Receives the immutable terminal snapshot on success or failure. */
|
|
20
|
+
readonly onOperationUsage?: ((snapshot: OperationUsageSnapshot) => void) | undefined;
|
|
11
21
|
/** Cap retries for this request (default MAX_RETRIES). Use 0-1 for compaction. */
|
|
12
22
|
readonly maxRetries?: number | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* Pin the route and emit exactly one physical generation request: no provider
|
|
25
|
+
* fallback, no key or endpoint rotation, no capability-adaptation retry. Used
|
|
26
|
+
* by operations whose prompt is too expensive to send twice (compaction) and
|
|
27
|
+
* by auxiliary requests that must not multiply.
|
|
28
|
+
*/
|
|
29
|
+
readonly singleDispatch?: boolean | undefined;
|
|
30
|
+
readonly onSuccessfulRequest?: ((snapshot: SuccessfulRequestSnapshot) => void) | undefined;
|
|
13
31
|
}
|
|
14
32
|
/**
|
|
15
33
|
* User-facing classification of provider failures (auth, capacity, disconnect,
|