@pentoshi/clai 4.1.0 → 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 +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/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
|
@@ -0,0 +1,440 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
function immutableClone(value) {
|
|
3
|
+
if (Array.isArray(value)) {
|
|
4
|
+
return Object.freeze(value.map((entry) => immutableClone(entry)));
|
|
5
|
+
}
|
|
6
|
+
if (value && typeof value === "object") {
|
|
7
|
+
const copy = {};
|
|
8
|
+
for (const [key, entry] of Object.entries(value)) {
|
|
9
|
+
copy[key] = immutableClone(entry);
|
|
10
|
+
}
|
|
11
|
+
return Object.freeze(copy);
|
|
12
|
+
}
|
|
13
|
+
return value;
|
|
14
|
+
}
|
|
15
|
+
function freezeRoute(route) {
|
|
16
|
+
return Object.freeze({ ...route });
|
|
17
|
+
}
|
|
18
|
+
function rawByteLength(raw) {
|
|
19
|
+
const serialized = typeof raw === "string" ? raw : JSON.stringify(raw);
|
|
20
|
+
return Buffer.byteLength(serialized ?? "", "utf8");
|
|
21
|
+
}
|
|
22
|
+
function estimateRawTokens(byteLength) {
|
|
23
|
+
// Match the repository-wide conservative mixed text/JSON estimate without
|
|
24
|
+
// importing the agent layer into the LLM artifact model.
|
|
25
|
+
return Math.ceil(byteLength / 3.3);
|
|
26
|
+
}
|
|
27
|
+
function endpointHash(endpoint) {
|
|
28
|
+
let normalized = endpoint;
|
|
29
|
+
try {
|
|
30
|
+
const url = new URL(endpoint);
|
|
31
|
+
url.username = "";
|
|
32
|
+
url.password = "";
|
|
33
|
+
url.search = "";
|
|
34
|
+
url.hash = "";
|
|
35
|
+
normalized = url.toString().replace(/\/$/, "");
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
// A malformed custom endpoint remains comparable by hash, but its raw
|
|
39
|
+
// value is never retained in the artifact or emitted as telemetry.
|
|
40
|
+
}
|
|
41
|
+
return `sha256:${createHash("sha256").update(normalized).digest("hex")}`;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Builds privacy-safe route provenance. Endpoint identity is a one-way hash so
|
|
45
|
+
* persisted artifacts and replay diagnostics never retain custom URL/query data.
|
|
46
|
+
*/
|
|
47
|
+
export function createReasoningArtifactProvenance(input) {
|
|
48
|
+
return freezeRoute({
|
|
49
|
+
provider: input.provider,
|
|
50
|
+
dialect: input.dialect,
|
|
51
|
+
...(input.model ? { model: input.model } : {}),
|
|
52
|
+
...(input.endpoint ? { endpointHash: endpointHash(input.endpoint) } : {}),
|
|
53
|
+
...(input.legacy ? { legacy: true } : {}),
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
/** Creates a safe serialization target without retaining the endpoint itself. */
|
|
57
|
+
export function createReasoningArtifactReplayTarget(input) {
|
|
58
|
+
return freezeRoute({
|
|
59
|
+
provider: input.provider,
|
|
60
|
+
model: input.model,
|
|
61
|
+
dialect: input.dialect,
|
|
62
|
+
...(input.endpoint ? { endpointHash: endpointHash(input.endpoint) } : {}),
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Clones and freezes raw provider state before attaching byte/token accounting.
|
|
67
|
+
* The factory is the only supported way to create artifacts from provider data.
|
|
68
|
+
*/
|
|
69
|
+
export function createReasoningArtifact(input) {
|
|
70
|
+
const raw = immutableClone(input.raw);
|
|
71
|
+
const byteLength = rawByteLength(raw);
|
|
72
|
+
const position = freezeRoute({
|
|
73
|
+
sequence: input.position?.sequence ?? 0,
|
|
74
|
+
placement: input.position?.placement ?? "assistant",
|
|
75
|
+
...(input.position?.toolCallId
|
|
76
|
+
? { toolCallId: input.position.toolCallId }
|
|
77
|
+
: {}),
|
|
78
|
+
...(input.position?.toolCallIndex !== undefined
|
|
79
|
+
? { toolCallIndex: input.position.toolCallIndex }
|
|
80
|
+
: {}),
|
|
81
|
+
});
|
|
82
|
+
const replay = freezeRoute({
|
|
83
|
+
scope: input.replay.scope,
|
|
84
|
+
persistence: input.replay.persistence,
|
|
85
|
+
});
|
|
86
|
+
const accounting = freezeRoute({
|
|
87
|
+
byteLength,
|
|
88
|
+
estimatedTokens: estimateRawTokens(byteLength),
|
|
89
|
+
});
|
|
90
|
+
return Object.freeze({
|
|
91
|
+
version: 1,
|
|
92
|
+
kind: input.kind,
|
|
93
|
+
raw,
|
|
94
|
+
...(input.displaySummary !== undefined
|
|
95
|
+
? { displaySummary: input.displaySummary }
|
|
96
|
+
: {}),
|
|
97
|
+
provenance: freezeRoute({ ...input.provenance }),
|
|
98
|
+
replay,
|
|
99
|
+
position,
|
|
100
|
+
accounting,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
function rawRecord(artifact) {
|
|
104
|
+
const raw = artifact.raw;
|
|
105
|
+
return raw && typeof raw === "object" && !Array.isArray(raw)
|
|
106
|
+
? raw
|
|
107
|
+
: undefined;
|
|
108
|
+
}
|
|
109
|
+
/** Returns the plaintext payload only for plaintext/signed artifact formats. */
|
|
110
|
+
export function reasoningArtifactText(artifact) {
|
|
111
|
+
if (typeof artifact.raw === "string")
|
|
112
|
+
return artifact.raw;
|
|
113
|
+
const raw = rawRecord(artifact);
|
|
114
|
+
if (!raw)
|
|
115
|
+
return undefined;
|
|
116
|
+
const text = raw.text ?? raw.thinking;
|
|
117
|
+
return typeof text === "string" ? text : undefined;
|
|
118
|
+
}
|
|
119
|
+
/** Returns the opaque signature only for signed/thought-signature artifacts. */
|
|
120
|
+
export function reasoningArtifactSignature(artifact) {
|
|
121
|
+
if (artifact.kind === "thought-signature" && typeof artifact.raw === "string") {
|
|
122
|
+
return artifact.raw;
|
|
123
|
+
}
|
|
124
|
+
const raw = rawRecord(artifact);
|
|
125
|
+
const signature = raw?.signature ?? raw?.thoughtSignature;
|
|
126
|
+
return typeof signature === "string" ? signature : undefined;
|
|
127
|
+
}
|
|
128
|
+
/** Preserves encrypted items exactly as opaque JSON records for Meta replay. */
|
|
129
|
+
export function reasoningArtifactItems(artifact) {
|
|
130
|
+
const source = Array.isArray(artifact.raw)
|
|
131
|
+
? artifact.raw
|
|
132
|
+
: Array.isArray(rawRecord(artifact)?.items)
|
|
133
|
+
? rawRecord(artifact)?.items
|
|
134
|
+
: rawRecord(artifact)?.encrypted_content !== undefined
|
|
135
|
+
? [artifact.raw]
|
|
136
|
+
: [];
|
|
137
|
+
return source.flatMap((item) => item && typeof item === "object" && !Array.isArray(item)
|
|
138
|
+
? [{ ...item }]
|
|
139
|
+
: []);
|
|
140
|
+
}
|
|
141
|
+
function legacyProvenance(kind) {
|
|
142
|
+
switch (kind) {
|
|
143
|
+
case "signed":
|
|
144
|
+
return createReasoningArtifactProvenance({
|
|
145
|
+
provider: "anthropic",
|
|
146
|
+
dialect: "anthropic-messages",
|
|
147
|
+
legacy: true,
|
|
148
|
+
});
|
|
149
|
+
case "encrypted":
|
|
150
|
+
return createReasoningArtifactProvenance({
|
|
151
|
+
provider: "meta",
|
|
152
|
+
dialect: "meta-responses",
|
|
153
|
+
legacy: true,
|
|
154
|
+
});
|
|
155
|
+
case "thought-signature":
|
|
156
|
+
return createReasoningArtifactProvenance({
|
|
157
|
+
provider: "gemini",
|
|
158
|
+
dialect: "gemini-generate-content",
|
|
159
|
+
legacy: true,
|
|
160
|
+
});
|
|
161
|
+
default:
|
|
162
|
+
return createReasoningArtifactProvenance({
|
|
163
|
+
provider: "legacy",
|
|
164
|
+
dialect: "openai-compatible",
|
|
165
|
+
legacy: true,
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
function legacyReasoningArtifacts(message) {
|
|
170
|
+
const artifacts = [];
|
|
171
|
+
let sequence = 0;
|
|
172
|
+
const block = message.reasoningBlock;
|
|
173
|
+
if (block?.signature && block.text) {
|
|
174
|
+
artifacts.push(createReasoningArtifact({
|
|
175
|
+
kind: "signed",
|
|
176
|
+
raw: { thinking: block.text, signature: block.signature },
|
|
177
|
+
displaySummary: block.text,
|
|
178
|
+
provenance: legacyProvenance("signed"),
|
|
179
|
+
replay: { scope: "tool-turn", persistence: "tool-turn" },
|
|
180
|
+
position: { sequence: sequence++, placement: "before-tool-call" },
|
|
181
|
+
}));
|
|
182
|
+
}
|
|
183
|
+
else if (block?.text) {
|
|
184
|
+
artifacts.push(createReasoningArtifact({
|
|
185
|
+
kind: "plaintext",
|
|
186
|
+
raw: block.text,
|
|
187
|
+
displaySummary: block.text,
|
|
188
|
+
provenance: legacyProvenance("plaintext"),
|
|
189
|
+
replay: { scope: "all-history", persistence: "all-turns" },
|
|
190
|
+
position: { sequence: sequence++, placement: "assistant" },
|
|
191
|
+
}));
|
|
192
|
+
}
|
|
193
|
+
if (block?.items?.length) {
|
|
194
|
+
artifacts.push(createReasoningArtifact({
|
|
195
|
+
kind: "encrypted",
|
|
196
|
+
raw: { items: block.items },
|
|
197
|
+
displaySummary: block.text || undefined,
|
|
198
|
+
provenance: legacyProvenance("encrypted"),
|
|
199
|
+
replay: { scope: "tool-turn", persistence: "tool-turn" },
|
|
200
|
+
position: { sequence: sequence++, placement: "before-tool-call" },
|
|
201
|
+
}));
|
|
202
|
+
}
|
|
203
|
+
for (let index = 0; index < (message.toolCalls?.length ?? 0); index += 1) {
|
|
204
|
+
const call = message.toolCalls[index];
|
|
205
|
+
if (!call.thoughtSignature)
|
|
206
|
+
continue;
|
|
207
|
+
artifacts.push(createReasoningArtifact({
|
|
208
|
+
kind: "thought-signature",
|
|
209
|
+
raw: call.thoughtSignature,
|
|
210
|
+
provenance: legacyProvenance("thought-signature"),
|
|
211
|
+
replay: { scope: "tool-turn", persistence: "tool-turn" },
|
|
212
|
+
position: {
|
|
213
|
+
sequence: sequence++,
|
|
214
|
+
placement: "on-tool-call",
|
|
215
|
+
toolCallId: call.id,
|
|
216
|
+
toolCallIndex: index,
|
|
217
|
+
},
|
|
218
|
+
}));
|
|
219
|
+
}
|
|
220
|
+
return artifacts;
|
|
221
|
+
}
|
|
222
|
+
function normalizeArtifact(artifact) {
|
|
223
|
+
return createReasoningArtifact({
|
|
224
|
+
kind: artifact.kind,
|
|
225
|
+
raw: artifact.raw,
|
|
226
|
+
...(artifact.displaySummary !== undefined
|
|
227
|
+
? { displaySummary: artifact.displaySummary }
|
|
228
|
+
: {}),
|
|
229
|
+
provenance: artifact.provenance,
|
|
230
|
+
replay: artifact.replay,
|
|
231
|
+
position: artifact.position,
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Returns canonical artifacts for a message. Legacy fields are converted only
|
|
236
|
+
* when canonical data is absent, preventing duplicate replay after migration.
|
|
237
|
+
*/
|
|
238
|
+
export function reasoningArtifactsForMessage(message) {
|
|
239
|
+
if (message.reasoningArtifacts?.length) {
|
|
240
|
+
return message.reasoningArtifacts.map(normalizeArtifact);
|
|
241
|
+
}
|
|
242
|
+
return legacyReasoningArtifacts(message);
|
|
243
|
+
}
|
|
244
|
+
/** Projects canonical artifacts back onto the existing legacy replay surface. */
|
|
245
|
+
export function legacyReasoningBlockFromArtifacts(artifacts) {
|
|
246
|
+
let text;
|
|
247
|
+
let signature;
|
|
248
|
+
const items = [];
|
|
249
|
+
for (const artifact of [...artifacts].sort((left, right) => left.position.sequence - right.position.sequence)) {
|
|
250
|
+
if (artifact.kind === "signed") {
|
|
251
|
+
text ??= reasoningArtifactText(artifact);
|
|
252
|
+
signature ??= reasoningArtifactSignature(artifact);
|
|
253
|
+
continue;
|
|
254
|
+
}
|
|
255
|
+
if (artifact.kind === "plaintext") {
|
|
256
|
+
text ??= reasoningArtifactText(artifact);
|
|
257
|
+
continue;
|
|
258
|
+
}
|
|
259
|
+
if (artifact.kind === "encrypted") {
|
|
260
|
+
items.push(...reasoningArtifactItems(artifact));
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
if (text === undefined && !signature && items.length === 0)
|
|
264
|
+
return undefined;
|
|
265
|
+
return {
|
|
266
|
+
text: text ?? "",
|
|
267
|
+
...(signature ? { signature } : {}),
|
|
268
|
+
...(items.length ? { items } : {}),
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
function applyThoughtSignatures(toolCalls, artifacts) {
|
|
272
|
+
if (!toolCalls?.length)
|
|
273
|
+
return toolCalls ? [...toolCalls] : undefined;
|
|
274
|
+
let changed = false;
|
|
275
|
+
const calls = toolCalls.map((call, index) => {
|
|
276
|
+
if (call.thoughtSignature)
|
|
277
|
+
return call;
|
|
278
|
+
const artifact = artifacts.find((candidate) => candidate.kind === "thought-signature" &&
|
|
279
|
+
(candidate.position.toolCallId === call.id ||
|
|
280
|
+
candidate.position.toolCallIndex === index));
|
|
281
|
+
const signature = artifact ? reasoningArtifactSignature(artifact) : undefined;
|
|
282
|
+
if (!signature)
|
|
283
|
+
return call;
|
|
284
|
+
changed = true;
|
|
285
|
+
return { ...call, thoughtSignature: signature };
|
|
286
|
+
});
|
|
287
|
+
return changed ? calls : [...toolCalls];
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Hydrates persisted legacy data into canonical artifacts while retaining the
|
|
291
|
+
* original fields for older consumers and provider adapters.
|
|
292
|
+
*/
|
|
293
|
+
export function canonicalizeChatMessageReasoningArtifacts(message) {
|
|
294
|
+
const artifacts = reasoningArtifactsForMessage(message);
|
|
295
|
+
if (artifacts.length === 0)
|
|
296
|
+
return { ...message };
|
|
297
|
+
const reasoningBlock = message.reasoningBlock ?? legacyReasoningBlockFromArtifacts(artifacts);
|
|
298
|
+
const toolCalls = applyThoughtSignatures(message.toolCalls, artifacts);
|
|
299
|
+
return {
|
|
300
|
+
...message,
|
|
301
|
+
reasoningArtifacts: artifacts,
|
|
302
|
+
...(reasoningBlock ? { reasoningBlock } : {}),
|
|
303
|
+
...(toolCalls ? { toolCalls } : {}),
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
/** Canonical artifact accounting for a message, including un-migrated history. */
|
|
307
|
+
export function reasoningArtifactTokensForMessage(message) {
|
|
308
|
+
return reasoningArtifactsForMessage(message).reduce((sum, artifact) => sum + artifact.accounting.estimatedTokens, 0);
|
|
309
|
+
}
|
|
310
|
+
/** Builds signed Anthropic-family artifacts without deriving replay state from display text. */
|
|
311
|
+
export function createSignedThinkingArtifacts(input) {
|
|
312
|
+
return input.blocks.map((block) => {
|
|
313
|
+
const replayable = Boolean(block.thinking && block.signature);
|
|
314
|
+
return createReasoningArtifact({
|
|
315
|
+
kind: replayable ? "signed" : "plaintext",
|
|
316
|
+
raw: block.raw,
|
|
317
|
+
...(block.thinking ? { displaySummary: block.thinking } : {}),
|
|
318
|
+
provenance: input.provenance,
|
|
319
|
+
replay: replayable
|
|
320
|
+
? { scope: "tool-turn", persistence: "tool-turn" }
|
|
321
|
+
: { scope: "none", persistence: "never" },
|
|
322
|
+
position: {
|
|
323
|
+
sequence: block.sequence,
|
|
324
|
+
placement: block.toolCallIndex === undefined ? "assistant" : "before-tool-call",
|
|
325
|
+
...(block.toolCallIndex === undefined
|
|
326
|
+
? {}
|
|
327
|
+
: { toolCallIndex: block.toolCallIndex }),
|
|
328
|
+
},
|
|
329
|
+
});
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Rebinds artifact positions only after duplicate and empty tool-call ids have
|
|
334
|
+
* been repaired. Raw artifact bytes stay immutable; only the history position
|
|
335
|
+
* receives the durable call id.
|
|
336
|
+
*/
|
|
337
|
+
export function rebindReasoningArtifactsToToolCalls(input) {
|
|
338
|
+
if (!input.artifacts?.length)
|
|
339
|
+
return undefined;
|
|
340
|
+
return input.artifacts.map((artifact) => {
|
|
341
|
+
const byIndex = artifact.position.toolCallIndex;
|
|
342
|
+
const index = byIndex !== undefined
|
|
343
|
+
? byIndex
|
|
344
|
+
: artifact.position.toolCallId
|
|
345
|
+
? input.toolCalls.findIndex((call) => call.id === artifact.position.toolCallId)
|
|
346
|
+
: -1;
|
|
347
|
+
const toolCall = index >= 0 ? input.toolCalls[index] : undefined;
|
|
348
|
+
if (!toolCall || artifact.position.toolCallId === toolCall.id)
|
|
349
|
+
return artifact;
|
|
350
|
+
return createReasoningArtifact({
|
|
351
|
+
kind: artifact.kind,
|
|
352
|
+
raw: artifact.raw,
|
|
353
|
+
...(artifact.displaySummary !== undefined
|
|
354
|
+
? { displaySummary: artifact.displaySummary }
|
|
355
|
+
: {}),
|
|
356
|
+
provenance: artifact.provenance,
|
|
357
|
+
replay: artifact.replay,
|
|
358
|
+
position: {
|
|
359
|
+
...artifact.position,
|
|
360
|
+
toolCallId: toolCall.id,
|
|
361
|
+
...(byIndex === undefined ? { toolCallIndex: index } : {}),
|
|
362
|
+
},
|
|
363
|
+
});
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
|
+
/** Retain active tool artifacts unconditionally; retain final turns only by policy. */
|
|
367
|
+
export function reasoningArtifactsForPersistence(input) {
|
|
368
|
+
if (!input.artifacts?.length)
|
|
369
|
+
return undefined;
|
|
370
|
+
const retained = input.artifacts.filter((artifact) => input.hasToolCalls
|
|
371
|
+
? artifact.replay.scope !== "none" || artifact.replay.persistence === "tool-turn"
|
|
372
|
+
: artifact.replay.persistence === "final-turn" ||
|
|
373
|
+
artifact.replay.persistence === "all-turns");
|
|
374
|
+
return retained.length ? retained : undefined;
|
|
375
|
+
}
|
|
376
|
+
function decision(artifact, target, action, reason) {
|
|
377
|
+
return Object.freeze({
|
|
378
|
+
version: 1,
|
|
379
|
+
action,
|
|
380
|
+
kind: artifact.kind,
|
|
381
|
+
...(reason ? { reason } : {}),
|
|
382
|
+
source: artifact.provenance,
|
|
383
|
+
target,
|
|
384
|
+
byteLength: artifact.accounting.byteLength,
|
|
385
|
+
});
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* Conservative compatibility predicate used at final serialization only. It
|
|
389
|
+
* never mutates stored history and never returns raw payloads in its decision.
|
|
390
|
+
*/
|
|
391
|
+
export function reasoningArtifactReplayDecision(artifact, target, context = {}) {
|
|
392
|
+
if (artifact.replay.scope === "none") {
|
|
393
|
+
return decision(artifact, target, "omitted", "replay-disabled");
|
|
394
|
+
}
|
|
395
|
+
if (artifact.replay.scope === "tool-turn" && !context.hasToolCalls) {
|
|
396
|
+
return decision(artifact, target, "omitted", "not-a-tool-turn");
|
|
397
|
+
}
|
|
398
|
+
const source = artifact.provenance;
|
|
399
|
+
const legacyPlaintext = source.legacy === true &&
|
|
400
|
+
(artifact.kind === "plaintext" || artifact.kind === "summary");
|
|
401
|
+
if (legacyPlaintext) {
|
|
402
|
+
return target.dialect === "openai-compatible"
|
|
403
|
+
? decision(artifact, target, "replayed")
|
|
404
|
+
: decision(artifact, target, "omitted", "dialect-mismatch");
|
|
405
|
+
}
|
|
406
|
+
if (source.provider !== target.provider) {
|
|
407
|
+
return decision(artifact, target, "omitted", "provider-mismatch");
|
|
408
|
+
}
|
|
409
|
+
if (source.dialect !== target.dialect) {
|
|
410
|
+
return decision(artifact, target, "omitted", "dialect-mismatch");
|
|
411
|
+
}
|
|
412
|
+
if (source.model && source.model !== target.model) {
|
|
413
|
+
return decision(artifact, target, "omitted", "model-mismatch");
|
|
414
|
+
}
|
|
415
|
+
if (source.endpointHash && !target.endpointHash) {
|
|
416
|
+
return decision(artifact, target, "omitted", "endpoint-unknown");
|
|
417
|
+
}
|
|
418
|
+
if (source.endpointHash && source.endpointHash !== target.endpointHash) {
|
|
419
|
+
return decision(artifact, target, "omitted", "endpoint-mismatch");
|
|
420
|
+
}
|
|
421
|
+
return decision(artifact, target, "replayed");
|
|
422
|
+
}
|
|
423
|
+
/**
|
|
424
|
+
* Filters only the wire projection. Omitted artifacts remain unchanged in the
|
|
425
|
+
* message/persistence timeline, while callers can emit the metadata-only
|
|
426
|
+
* decisions to their operation telemetry.
|
|
427
|
+
*/
|
|
428
|
+
export function selectReasoningArtifactsForReplay(input) {
|
|
429
|
+
if (!input.artifacts?.length)
|
|
430
|
+
return [];
|
|
431
|
+
const selected = [];
|
|
432
|
+
for (const artifact of input.artifacts) {
|
|
433
|
+
const replay = reasoningArtifactReplayDecision(artifact, input.target, input.context);
|
|
434
|
+
input.observe?.(replay);
|
|
435
|
+
if (replay.action === "replayed")
|
|
436
|
+
selected.push(artifact);
|
|
437
|
+
}
|
|
438
|
+
return selected;
|
|
439
|
+
}
|
|
440
|
+
//# sourceMappingURL=reasoning-artifacts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reasoning-artifacts.js","sourceRoot":"","sources":["../../src/llm/reasoning-artifacts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { GenerationAttemptInput, RequestFingerprintV1 } from "../types.js";
|
|
2
|
+
export declare const REQUEST_FINGERPRINT_VERSION: 1;
|
|
3
|
+
export declare const REQUEST_FINGERPRINT_SERIALIZER_VERSION: 1;
|
|
4
|
+
/**
|
|
5
|
+
* Captures hashes and byte counts from the exact JSON string passed to fetch.
|
|
6
|
+
* The returned value has no request body, header, URL, or decoded JSON values.
|
|
7
|
+
*/
|
|
8
|
+
export declare function fingerprintFinalRequest(input: Pick<GenerationAttemptInput, "provider" | "model">, body: BodyInit | null | undefined): RequestFingerprintV1 | undefined;
|
|
9
|
+
export type PrefixAffinityClassification = "exact_append_eligible" | "partial_prefix_eligible" | "not_eligible" | "unknown";
|
|
10
|
+
export declare function classifyPrefixAffinity(prior: RequestFingerprintV1 | undefined, next: RequestFingerprintV1 | undefined): PrefixAffinityClassification;
|