@esankhan3/anvil-agent-core 0.2.0 → 0.4.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 +1 -1
- package/dist/__tests__/fetch-pool.integration.test.d.ts +15 -0
- package/dist/__tests__/fetch-pool.integration.test.d.ts.map +1 -0
- package/dist/__tests__/fetch-pool.integration.test.js +109 -0
- package/dist/__tests__/fetch-pool.integration.test.js.map +1 -0
- package/dist/__tests__/fetch-pool.test.d.ts +15 -0
- package/dist/__tests__/fetch-pool.test.d.ts.map +1 -0
- package/dist/__tests__/fetch-pool.test.js +115 -0
- package/dist/__tests__/fetch-pool.test.js.map +1 -0
- package/dist/__tests__/gemini-adapter-recording.test.d.ts +11 -0
- package/dist/__tests__/gemini-adapter-recording.test.d.ts.map +1 -0
- package/dist/__tests__/gemini-adapter-recording.test.js +108 -0
- package/dist/__tests__/gemini-adapter-recording.test.js.map +1 -0
- package/dist/__tests__/legacy-adapter-language-model.test.d.ts +11 -0
- package/dist/__tests__/legacy-adapter-language-model.test.d.ts.map +1 -0
- package/dist/__tests__/legacy-adapter-language-model.test.js +102 -0
- package/dist/__tests__/legacy-adapter-language-model.test.js.map +1 -0
- package/dist/__tests__/ollama-adapter-recording.test.d.ts +15 -0
- package/dist/__tests__/ollama-adapter-recording.test.d.ts.map +1 -0
- package/dist/__tests__/ollama-adapter-recording.test.js +128 -0
- package/dist/__tests__/ollama-adapter-recording.test.js.map +1 -0
- package/dist/__tests__/openrouter-prefill.integration.test.d.ts +19 -0
- package/dist/__tests__/openrouter-prefill.integration.test.d.ts.map +1 -0
- package/dist/__tests__/openrouter-prefill.integration.test.js +410 -0
- package/dist/__tests__/openrouter-prefill.integration.test.js.map +1 -0
- package/dist/__tests__/prefill-truncate.test.d.ts +8 -0
- package/dist/__tests__/prefill-truncate.test.d.ts.map +1 -0
- package/dist/__tests__/prefill-truncate.test.js +75 -0
- package/dist/__tests__/prefill-truncate.test.js.map +1 -0
- package/dist/__tests__/router-circuit-breaker.test.js +1 -1
- package/dist/__tests__/router-circuit-breaker.test.js.map +1 -1
- package/dist/__tests__/router-classify-unified.test.d.ts +12 -0
- package/dist/__tests__/router-classify-unified.test.d.ts.map +1 -0
- package/dist/__tests__/router-classify-unified.test.js +108 -0
- package/dist/__tests__/router-classify-unified.test.js.map +1 -0
- package/dist/__tests__/router-fallback.test.js +1 -1
- package/dist/__tests__/router-fallback.test.js.map +1 -1
- package/dist/__tests__/router-model-registry.test.js +24 -0
- package/dist/__tests__/router-model-registry.test.js.map +1 -1
- package/dist/__tests__/router-retry.test.js +3 -5
- package/dist/__tests__/router-retry.test.js.map +1 -1
- package/dist/__tests__/router-runagent.test.d.ts +14 -0
- package/dist/__tests__/router-runagent.test.d.ts.map +1 -0
- package/dist/__tests__/router-runagent.test.js +95 -0
- package/dist/__tests__/router-runagent.test.js.map +1 -0
- package/dist/__tests__/router-scaffold.test.js +2 -1
- package/dist/__tests__/router-scaffold.test.js.map +1 -1
- package/dist/__tests__/router-spend-ledger.test.js +1 -1
- package/dist/__tests__/router-spend-ledger.test.js.map +1 -1
- package/dist/__tests__/router-stream-fallback.test.d.ts +13 -0
- package/dist/__tests__/router-stream-fallback.test.d.ts.map +1 -0
- package/dist/__tests__/router-stream-fallback.test.js +129 -0
- package/dist/__tests__/router-stream-fallback.test.js.map +1 -0
- package/dist/__tests__/router-telemetry.test.js +3 -1
- package/dist/__tests__/router-telemetry.test.js.map +1 -1
- package/dist/__tests__/util/mock-upstream.d.ts +77 -0
- package/dist/__tests__/util/mock-upstream.d.ts.map +1 -0
- package/dist/__tests__/util/mock-upstream.js +219 -0
- package/dist/__tests__/util/mock-upstream.js.map +1 -0
- package/dist/adk-adapter.d.ts.map +1 -1
- package/dist/adk-adapter.js +51 -0
- package/dist/adk-adapter.js.map +1 -1
- package/dist/adk-anthropic-llm.d.ts.map +1 -1
- package/dist/adk-anthropic-llm.js +23 -10
- package/dist/adk-anthropic-llm.js.map +1 -1
- package/dist/agent/session/adapter.d.ts +25 -0
- package/dist/agent/session/adapter.d.ts.map +1 -1
- package/dist/agent/session/adapter.js +4 -0
- package/dist/agent/session/adapter.js.map +1 -1
- package/dist/agent/session/index.d.ts +1 -0
- package/dist/agent/session/index.d.ts.map +1 -1
- package/dist/agent/session/index.js +1 -0
- package/dist/agent/session/index.js.map +1 -1
- package/dist/agent/session/language-model-bridge.d.ts.map +1 -1
- package/dist/agent/session/language-model-bridge.js +30 -2
- package/dist/agent/session/language-model-bridge.js.map +1 -1
- package/dist/agent/session/legacy-adapter-language-model.d.ts +27 -0
- package/dist/agent/session/legacy-adapter-language-model.d.ts.map +1 -0
- package/dist/agent/session/legacy-adapter-language-model.js +221 -0
- package/dist/agent/session/legacy-adapter-language-model.js.map +1 -0
- package/dist/agent/session/types.d.ts +32 -0
- package/dist/agent/session/types.d.ts.map +1 -1
- package/dist/agent/session/types.js.map +1 -1
- package/dist/claude-adapter.d.ts.map +1 -1
- package/dist/claude-adapter.js +27 -0
- package/dist/claude-adapter.js.map +1 -1
- package/dist/fetch-pool.d.ts +47 -0
- package/dist/fetch-pool.d.ts.map +1 -0
- package/dist/fetch-pool.js +132 -0
- package/dist/fetch-pool.js.map +1 -0
- package/dist/gemini-adapter.d.ts.map +1 -1
- package/dist/gemini-adapter.js +65 -6
- package/dist/gemini-adapter.js.map +1 -1
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/ollama-adapter.d.ts.map +1 -1
- package/dist/ollama-adapter.js +145 -15
- package/dist/ollama-adapter.js.map +1 -1
- package/dist/openrouter-adapter.d.ts.map +1 -1
- package/dist/openrouter-adapter.js +296 -15
- package/dist/openrouter-adapter.js.map +1 -1
- package/dist/prefill/strip.d.ts +49 -0
- package/dist/prefill/strip.d.ts.map +1 -0
- package/dist/prefill/strip.js +93 -0
- package/dist/prefill/strip.js.map +1 -0
- package/dist/prefill/translate.d.ts +55 -0
- package/dist/prefill/translate.d.ts.map +1 -0
- package/dist/prefill/translate.js +162 -0
- package/dist/prefill/translate.js.map +1 -0
- package/dist/prefill/truncate.d.ts +62 -0
- package/dist/prefill/truncate.d.ts.map +1 -0
- package/dist/prefill/truncate.js +77 -0
- package/dist/prefill/truncate.js.map +1 -0
- package/dist/provider-liveness.d.ts.map +1 -1
- package/dist/provider-liveness.js +17 -6
- package/dist/provider-liveness.js.map +1 -1
- package/dist/router/errors.d.ts +24 -7
- package/dist/router/errors.d.ts.map +1 -1
- package/dist/router/errors.js +71 -14
- package/dist/router/errors.js.map +1 -1
- package/dist/router/index.d.ts +3 -2
- package/dist/router/index.d.ts.map +1 -1
- package/dist/router/index.js +2 -1
- package/dist/router/index.js.map +1 -1
- package/dist/router/local-executor.d.ts.map +1 -1
- package/dist/router/local-executor.js +19 -6
- package/dist/router/local-executor.js.map +1 -1
- package/dist/router/model-registry.d.ts +22 -0
- package/dist/router/model-registry.d.ts.map +1 -1
- package/dist/router/model-registry.js +64 -1
- package/dist/router/model-registry.js.map +1 -1
- package/dist/router/provider-registry-resolver.d.ts +25 -0
- package/dist/router/provider-registry-resolver.d.ts.map +1 -0
- package/dist/router/provider-registry-resolver.js +84 -0
- package/dist/router/provider-registry-resolver.js.map +1 -0
- package/dist/router/retry.d.ts +3 -0
- package/dist/router/retry.d.ts.map +1 -1
- package/dist/router/retry.js +4 -1
- package/dist/router/retry.js.map +1 -1
- package/dist/router/router.d.ts +79 -1
- package/dist/router/router.d.ts.map +1 -1
- package/dist/router/router.js +256 -2
- package/dist/router/router.js.map +1 -1
- package/dist/router/types.d.ts +1 -1
- package/dist/router/types.d.ts.map +1 -1
- package/dist/router/types.js +1 -0
- package/dist/router/types.js.map +1 -1
- package/dist/single-shot.d.ts.map +1 -1
- package/dist/single-shot.js +26 -1
- package/dist/single-shot.js.map +1 -1
- package/dist/tools/builtin.d.ts +19 -0
- package/dist/tools/builtin.d.ts.map +1 -1
- package/dist/tools/builtin.js +51 -0
- package/dist/tools/builtin.js.map +1 -1
- package/dist/turn-recorder/__tests__/turn-recorder.test.d.ts +20 -0
- package/dist/turn-recorder/__tests__/turn-recorder.test.d.ts.map +1 -0
- package/dist/turn-recorder/__tests__/turn-recorder.test.js +282 -0
- package/dist/turn-recorder/__tests__/turn-recorder.test.js.map +1 -0
- package/dist/turn-recorder/hash.d.ts +10 -0
- package/dist/turn-recorder/hash.d.ts.map +1 -0
- package/dist/turn-recorder/hash.js +35 -0
- package/dist/turn-recorder/hash.js.map +1 -0
- package/dist/turn-recorder/index.d.ts +119 -0
- package/dist/turn-recorder/index.d.ts.map +1 -0
- package/dist/turn-recorder/index.js +326 -0
- package/dist/turn-recorder/index.js.map +1 -0
- package/dist/turn-recorder/types.d.ts +227 -0
- package/dist/turn-recorder/types.d.ts.map +1 -0
- package/dist/turn-recorder/types.js +20 -0
- package/dist/turn-recorder/types.js.map +1 -0
- package/dist/types.d.ts +35 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -3
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TurnRecorder types — public shapes consumed by adapters that drive a
|
|
3
|
+
* multi-turn LLM tool loop and want their turns split into sub-effects
|
|
4
|
+
* so chain-fallback can resume mid-stream.
|
|
5
|
+
*
|
|
6
|
+
* Design notes:
|
|
7
|
+
* - agent-core does NOT depend on `@anvil/core-pipeline`. The
|
|
8
|
+
* `EffectRuntimeLike` interface here is the structural shape an
|
|
9
|
+
* adapter needs — core-pipeline's concrete `EffectRuntime` satisfies
|
|
10
|
+
* it, but agent-core never imports the class. This avoids a
|
|
11
|
+
* circular dep direction.
|
|
12
|
+
* - The recorder is constructed per `adapter.run()` call. It holds a
|
|
13
|
+
* monotonic `turn` counter scoped to the (stepId, sessionId) pair.
|
|
14
|
+
* - `flushPartial` is intentionally non-async and not routed through
|
|
15
|
+
* `effect()` — it MUST be safe to fire from a `catch` block that is
|
|
16
|
+
* about to re-throw an `UpstreamError`. The sink may queue the
|
|
17
|
+
* write durably under the hood; the recorder doesn't wait.
|
|
18
|
+
*/
|
|
19
|
+
import type { ProviderName } from '../types.js';
|
|
20
|
+
/**
|
|
21
|
+
* Minimal effect-runtime shape the recorder relies on. Mirrors the
|
|
22
|
+
* `effect(name, fn, opts?)` method on core-pipeline's `EffectRuntime`.
|
|
23
|
+
* Anything else on the real class (now/uuid/random/sleep/waitForSignal)
|
|
24
|
+
* is irrelevant to the recorder.
|
|
25
|
+
*
|
|
26
|
+
* Replay semantics: when an effect with `(name, idx)` is already in the
|
|
27
|
+
* durable log, `fn` is NOT invoked — the recorded payload is returned.
|
|
28
|
+
* Recording side effects (`record*` methods) thus become no-ops on
|
|
29
|
+
* replay, which is exactly what we want.
|
|
30
|
+
*/
|
|
31
|
+
export interface EffectRuntimeLike {
|
|
32
|
+
effect<T>(name: string, fn: () => Promise<T>, opts?: EffectInvokeOptions): Promise<T>;
|
|
33
|
+
/**
|
|
34
|
+
* H3 replay-skip seam: peek the recorded payload of a COMPLETED effect
|
|
35
|
+
* by name WITHOUT advancing the replay cursor or the per-step idx
|
|
36
|
+
* counter. Returns the recorded `effect:completed` payload if one
|
|
37
|
+
* exists in this step's log, else undefined. Lets `startTurn` detect
|
|
38
|
+
* that a turn was already fully recorded (its `assistant-end` exists)
|
|
39
|
+
* so the adapter can skip the upstream call entirely on crash-resume.
|
|
40
|
+
*
|
|
41
|
+
* Optional: the NullEffectRuntime omits it, so non-durable callers
|
|
42
|
+
* (single-shot / no DurableStore) always run live (peek → undefined →
|
|
43
|
+
* no replay). The concrete core-pipeline `EffectRuntime` implements it
|
|
44
|
+
* as a pure read over the pre-loaded recorded-effect set.
|
|
45
|
+
*/
|
|
46
|
+
peekRecorded?<T = unknown>(name: string): T | undefined;
|
|
47
|
+
}
|
|
48
|
+
export interface EffectInvokeOptions {
|
|
49
|
+
/** Stable input hash; mismatches on replay throw a determinism error. */
|
|
50
|
+
idempotencyKey?: string;
|
|
51
|
+
/** Hint that the payload is small enough to inline; runtime may skip blobs. */
|
|
52
|
+
smallResult?: boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Transform applied to the result before it is persisted to the durable
|
|
55
|
+
* log; the live caller still gets the full result. Used to cap large
|
|
56
|
+
* tool-result payloads so a turn doesn't block the loop serialising them.
|
|
57
|
+
* Mirrors `EffectOptions.persistTransform` in core-pipeline.
|
|
58
|
+
*/
|
|
59
|
+
persistTransform?: (result: unknown) => unknown;
|
|
60
|
+
}
|
|
61
|
+
export interface RecordedToolUse {
|
|
62
|
+
/** Provider-supplied tool_use id (e.g. OpenAI's `tool_call_id`). */
|
|
63
|
+
id: string;
|
|
64
|
+
name: string;
|
|
65
|
+
/** Parsed JSON arguments. UNPARSED args MUST NOT be recorded (§2.1.1). */
|
|
66
|
+
arguments: Record<string, unknown>;
|
|
67
|
+
/** sha256(name || JSON.stringify(arguments)). */
|
|
68
|
+
idempotencyKey: string;
|
|
69
|
+
}
|
|
70
|
+
export interface NeutralToolResult {
|
|
71
|
+
toolUseId: string;
|
|
72
|
+
toolName: string;
|
|
73
|
+
ok: boolean;
|
|
74
|
+
content: string | unknown;
|
|
75
|
+
durationMs?: number;
|
|
76
|
+
}
|
|
77
|
+
export interface ProvenanceSegment {
|
|
78
|
+
model: string;
|
|
79
|
+
provider: ProviderName;
|
|
80
|
+
range: [number, number];
|
|
81
|
+
source: 'live' | 'prefill';
|
|
82
|
+
}
|
|
83
|
+
export interface Provenance {
|
|
84
|
+
segments: ProvenanceSegment[];
|
|
85
|
+
}
|
|
86
|
+
export interface TurnTokenUsage {
|
|
87
|
+
inputTokens: number;
|
|
88
|
+
outputTokens: number;
|
|
89
|
+
cacheReadTokens?: number;
|
|
90
|
+
cacheWriteTokens?: number;
|
|
91
|
+
/** Subset of inputTokens carved out for §2.6 prefill-reinjection. */
|
|
92
|
+
prefilledInputTokens?: number;
|
|
93
|
+
}
|
|
94
|
+
export interface PrefillToolUse {
|
|
95
|
+
id: string;
|
|
96
|
+
name: string;
|
|
97
|
+
input: unknown;
|
|
98
|
+
result: NeutralToolResult;
|
|
99
|
+
producedBy: ProviderName;
|
|
100
|
+
}
|
|
101
|
+
export interface Prefill {
|
|
102
|
+
turnUuid: string;
|
|
103
|
+
text: string;
|
|
104
|
+
toolUses: PrefillToolUse[];
|
|
105
|
+
sourceProvider: ProviderName;
|
|
106
|
+
/** Model id that authored the partial — drives §2.7 provenance
|
|
107
|
+
* segment[0].model on the resuming turn. Optional: omitted by
|
|
108
|
+
* pre-H3 callers / when the source model is unknown. */
|
|
109
|
+
sourceModel?: string;
|
|
110
|
+
/** Tokens (as billed by sourceProvider) for `text`; H3 cost accounting. */
|
|
111
|
+
sourceTokens: number;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* §Tier 2 — one COMPLETED prior turn of a stateful session, reconstructed
|
|
115
|
+
* from the durable log so a cross-model (or merely non-claude) resume can
|
|
116
|
+
* re-present the full conversation in the target provider's wire format.
|
|
117
|
+
* Unlike `Prefill` (the in-progress burned turn), these are finished turns.
|
|
118
|
+
*
|
|
119
|
+
* `userPrompt` is present on the FIRST turn of each phase (the new user
|
|
120
|
+
* message that opened that phase); it's undefined on tool-loop continuation
|
|
121
|
+
* turns within a phase, and on pre-Tier-2 logs that never recorded it.
|
|
122
|
+
*/
|
|
123
|
+
export interface PrefillTurn {
|
|
124
|
+
userPrompt?: string;
|
|
125
|
+
text: string;
|
|
126
|
+
toolUses: PrefillToolUse[];
|
|
127
|
+
/**
|
|
128
|
+
* Authoring provider of this completed turn — informational / provenance.
|
|
129
|
+
* `materializePriorTurns` flattens all turns to the resuming target's wire
|
|
130
|
+
* format and does NOT run per-turn `stripForTarget`: completed turns are
|
|
131
|
+
* rebuilt from neutral fields (text + `NeutralToolResult`) that carry no
|
|
132
|
+
* vendor keys (no `reasoning_details` / `cache_control` / `prompt_cache_key`),
|
|
133
|
+
* so there is nothing to strip. (Contrast the `prefill` path, which does
|
|
134
|
+
* `stripForTarget` because it can re-present source-shaped messages.)
|
|
135
|
+
*/
|
|
136
|
+
producedBy: ProviderName;
|
|
137
|
+
}
|
|
138
|
+
export type PartialReason = 'upstream' | 'abort' | 'timeout';
|
|
139
|
+
export interface AssistantPartial {
|
|
140
|
+
runId: string;
|
|
141
|
+
stepId: string;
|
|
142
|
+
turnUuid: string;
|
|
143
|
+
turn: number;
|
|
144
|
+
text: string;
|
|
145
|
+
/** Count of FULLY-PARSED tool_use blocks emitted before the throw. */
|
|
146
|
+
toolUsesEmitted: number;
|
|
147
|
+
reason: PartialReason;
|
|
148
|
+
recordedAt: string;
|
|
149
|
+
}
|
|
150
|
+
export type PartialSink = (partial: AssistantPartial) => void;
|
|
151
|
+
export interface AssistantStartRequest {
|
|
152
|
+
model: string;
|
|
153
|
+
provider: ProviderName;
|
|
154
|
+
system?: string;
|
|
155
|
+
/** Raw conversation messages sent to the upstream. Recorded for provenance. */
|
|
156
|
+
messages: unknown;
|
|
157
|
+
prefill?: Prefill;
|
|
158
|
+
/**
|
|
159
|
+
* §Tier 2 — the new user message that opened this phase. Recorded in the
|
|
160
|
+
* assistant-start payload so `reconstructSessionHistory` can re-present
|
|
161
|
+
* prior turns with their prompts on a stateful (non-claude) session resume.
|
|
162
|
+
*/
|
|
163
|
+
userPrompt?: string;
|
|
164
|
+
}
|
|
165
|
+
export interface AssistantTurn {
|
|
166
|
+
turnUuid: string;
|
|
167
|
+
turn: number;
|
|
168
|
+
text: string;
|
|
169
|
+
stopReason: string;
|
|
170
|
+
usage: TurnTokenUsage;
|
|
171
|
+
provenance: Provenance;
|
|
172
|
+
toolUses: RecordedToolUse[];
|
|
173
|
+
toolResults: NeutralToolResult[];
|
|
174
|
+
/**
|
|
175
|
+
* H3 replay determinism: the EXACT provider-native messages the
|
|
176
|
+
* adapter appended to its conversation history during this turn
|
|
177
|
+
* (assistant message + tool-result messages), as opaque objects. On
|
|
178
|
+
* crash-resume the adapter re-appends these verbatim instead of
|
|
179
|
+
* reconstructing them from the neutral `toolUses`/`text` — raw vs
|
|
180
|
+
* canonical `tool_calls` arguments and vendor `reasoning_details` echoes
|
|
181
|
+
* would otherwise drift, leaving the FIRST live turn past the replay
|
|
182
|
+
* frontier with a malformed upstream request (e.g. unpaired tool_calls,
|
|
183
|
+
* or "reasoning_content is missing"). Empty for a terminal (no-tool)
|
|
184
|
+
* turn that appended nothing before breaking.
|
|
185
|
+
*/
|
|
186
|
+
historyDelta: unknown[];
|
|
187
|
+
}
|
|
188
|
+
export interface TurnRecorderDeps {
|
|
189
|
+
/** EffectRuntime to record sub-effects against. */
|
|
190
|
+
runtime: EffectRuntimeLike;
|
|
191
|
+
/** Fire-and-forget partial sink; called from adapter catch blocks. */
|
|
192
|
+
partialSink: PartialSink;
|
|
193
|
+
/** Stable runId — propagated into AssistantPartial rows. */
|
|
194
|
+
runId: string;
|
|
195
|
+
/** Stable stepId — scopes the recorder to one pipeline Step. */
|
|
196
|
+
stepId: string;
|
|
197
|
+
/** v4 uuid factory — overridable for tests. Defaults to crypto.randomUUID. */
|
|
198
|
+
uuid?: () => string;
|
|
199
|
+
/** Wall-clock helper — overridable for tests. Defaults to () => new Date().toISOString(). */
|
|
200
|
+
nowIso?: () => string;
|
|
201
|
+
/**
|
|
202
|
+
* Effect-name prefix (v2 ADR §2.4 per-repo scoping). When a step fans
|
|
203
|
+
* out across repos in parallel, every repo's recorder writes effects
|
|
204
|
+
* under the SAME durable step id, so a bare `turn:0:assistant-start`
|
|
205
|
+
* from two repos would collide. The caller passes a per-repo prefix
|
|
206
|
+
* (e.g. `service-a:`) so the recorded keys become
|
|
207
|
+
* `service-a:turn:0:assistant-start` — unique per repo AND matched by
|
|
208
|
+
* the durable engine's per-repo effect filter (which keys on delimited
|
|
209
|
+
* scope tokens). Empty ('') for single-stage paths. Applied uniformly
|
|
210
|
+
* to every effect name AND to the `peekRecorded` replay lookup.
|
|
211
|
+
*/
|
|
212
|
+
effectPrefix?: string;
|
|
213
|
+
/**
|
|
214
|
+
* Seed for the per-recorder turn counter (v2 ADR §2.5.1). When an
|
|
215
|
+
* `AgentProcess.sendInput()` resume spawns a NEW adapter (hence a new
|
|
216
|
+
* recorder) for a session whose prior adapter already recorded turns
|
|
217
|
+
* 0..N, the new recorder MUST continue at N+1 so `(stepId, turnUuid)`
|
|
218
|
+
* stays globally unique and replay's effect-idx matching doesn't
|
|
219
|
+
* collide. The recorder itself cannot read the durable log (it only
|
|
220
|
+
* holds a structural `EffectRuntimeLike`), so the CALLER computes the
|
|
221
|
+
* highest completed turn for (runId, stepId) and passes it here; the
|
|
222
|
+
* recorder seeds `turnCounter = initialTurn`. Defaults to 0 (fresh
|
|
223
|
+
* session / no prior turns).
|
|
224
|
+
*/
|
|
225
|
+
initialTurn?: number;
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/turn-recorder/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TurnRecorder types — public shapes consumed by adapters that drive a
|
|
3
|
+
* multi-turn LLM tool loop and want their turns split into sub-effects
|
|
4
|
+
* so chain-fallback can resume mid-stream.
|
|
5
|
+
*
|
|
6
|
+
* Design notes:
|
|
7
|
+
* - agent-core does NOT depend on `@anvil/core-pipeline`. The
|
|
8
|
+
* `EffectRuntimeLike` interface here is the structural shape an
|
|
9
|
+
* adapter needs — core-pipeline's concrete `EffectRuntime` satisfies
|
|
10
|
+
* it, but agent-core never imports the class. This avoids a
|
|
11
|
+
* circular dep direction.
|
|
12
|
+
* - The recorder is constructed per `adapter.run()` call. It holds a
|
|
13
|
+
* monotonic `turn` counter scoped to the (stepId, sessionId) pair.
|
|
14
|
+
* - `flushPartial` is intentionally non-async and not routed through
|
|
15
|
+
* `effect()` — it MUST be safe to fire from a `catch` block that is
|
|
16
|
+
* about to re-throw an `UpstreamError`. The sink may queue the
|
|
17
|
+
* write durably under the hood; the recorder doesn't wait.
|
|
18
|
+
*/
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/turn-recorder/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG"}
|
package/dist/types.d.ts
CHANGED
|
@@ -129,8 +129,13 @@ export interface LanguageModel {
|
|
|
129
129
|
version?: string;
|
|
130
130
|
error?: string;
|
|
131
131
|
}>;
|
|
132
|
-
/**
|
|
133
|
-
|
|
132
|
+
/**
|
|
133
|
+
* Streaming surface — yields events as the provider produces them and
|
|
134
|
+
* RETURNS the assembled `InvokeResult` (cost/usage/finish) on completion,
|
|
135
|
+
* so a streaming consumer (the router's chain walk) gets the same outcome
|
|
136
|
+
* data a single-shot `invoke()` would, without re-running the call.
|
|
137
|
+
*/
|
|
138
|
+
invokeStream(opts: LanguageModelInvokeOptions): AsyncGenerator<StreamEvent, InvokeResult>;
|
|
134
139
|
/** Single-shot surface — drains the stream and returns the final block. */
|
|
135
140
|
invoke(opts: LanguageModelInvokeOptions): Promise<InvokeResult>;
|
|
136
141
|
}
|
|
@@ -189,6 +194,34 @@ export interface ModelAdapterConfig {
|
|
|
189
194
|
* ADR §C5.
|
|
190
195
|
*/
|
|
191
196
|
mcpConfigPath?: string;
|
|
197
|
+
/**
|
|
198
|
+
* Turn-level durable recorder (v2 ADR §2.5). When supplied by the
|
|
199
|
+
* caller, the adapter splits its LLM invocation into per-turn
|
|
200
|
+
* sub-effects (`assistant-start` / `tool_use:N` / `tool_result:N` /
|
|
201
|
+
* `assistant-end`) recorded against the caller's `EffectRuntime`.
|
|
202
|
+
* When absent, adapters construct a `NullTurnRecorder` internally —
|
|
203
|
+
* structural calls still happen so the code path is the same, but
|
|
204
|
+
* nothing is persisted. Recording is implemented for every adapter
|
|
205
|
+
* except `gemini-cli` (a CLI subprocess with no token-level stream),
|
|
206
|
+
* which always no-ops the recorder.
|
|
207
|
+
*/
|
|
208
|
+
turnRecorder?: import('./turn-recorder/index.js').TurnRecorder;
|
|
209
|
+
/**
|
|
210
|
+
* Prefill from a prior model that burned mid-stream (v2 ADR §2.3).
|
|
211
|
+
* When present, the adapter materializes the trailing-assistant +
|
|
212
|
+
* recorded tool-result history into its provider's wire format and
|
|
213
|
+
* continues from the exact character where the prior model stopped.
|
|
214
|
+
*/
|
|
215
|
+
prefill?: import('./turn-recorder/index.js').Prefill;
|
|
216
|
+
/**
|
|
217
|
+
* §Tier 2 — COMPLETED prior turns of a stateful session, reconstructed
|
|
218
|
+
* from the durable log. Spliced (materialized into this provider's wire
|
|
219
|
+
* format) BEFORE the new user message so a non-claude session resume
|
|
220
|
+
* re-presents the full conversation instead of starting fresh. Claude
|
|
221
|
+
* uses native `--resume` and is gated out at the bridge. Empty/undefined
|
|
222
|
+
* → unchanged single-turn behavior.
|
|
223
|
+
*/
|
|
224
|
+
priorMessages?: import('./turn-recorder/index.js').PrefillTurn[];
|
|
192
225
|
}
|
|
193
226
|
export interface ToolExecutorLike {
|
|
194
227
|
listSchemas(): ToolSchema[];
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@esankhan3/anvil-agent-core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Shared LLM stack — unified LanguageModel interface, provider adapters, agent subprocess machinery, and cost calculation for cli + knowledge-core + headless runners.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -22,10 +22,11 @@
|
|
|
22
22
|
"scripts": {
|
|
23
23
|
"build": "tsc -b && mkdir -p dist/data && cp src/data/model-prices.json dist/data/",
|
|
24
24
|
"dev": "tsc -b --watch",
|
|
25
|
-
"test": "tsc -b && mkdir -p dist/data && cp src/data/model-prices.json dist/data/ && node --test dist/__tests__/*.test.js dist/agent/session/__tests__/*.test.js dist/checkpoint/__tests__/*.test.js",
|
|
25
|
+
"test": "tsc -b && mkdir -p dist/data && cp src/data/model-prices.json dist/data/ && node --test dist/__tests__/*.test.js dist/agent/session/__tests__/*.test.js dist/checkpoint/__tests__/*.test.js dist/turn-recorder/__tests__/*.test.js",
|
|
26
26
|
"refresh-cost-table": "node scripts/refresh-cost-table.mjs"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
+
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
29
30
|
"@opentelemetry/api": "^1.9.0",
|
|
30
31
|
"@opentelemetry/exporter-metrics-otlp-http": "^0.200.0",
|
|
31
32
|
"@opentelemetry/exporter-trace-otlp-http": "^0.200.0",
|
|
@@ -34,8 +35,8 @@
|
|
|
34
35
|
"@opentelemetry/sdk-trace-base": "^2.0.0",
|
|
35
36
|
"@opentelemetry/sdk-trace-node": "^2.0.0",
|
|
36
37
|
"@opentelemetry/semantic-conventions": "^1.30.0",
|
|
37
|
-
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
38
38
|
"better-sqlite3": "^11.7.0",
|
|
39
|
+
"undici": "^7.25.0",
|
|
39
40
|
"yaml": "^2.8.3"
|
|
40
41
|
},
|
|
41
42
|
"optionalDependencies": {
|