@animalabs/membrane 0.5.79 → 0.5.81
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/dist/cache-keepalive.d.ts +115 -0
- package/dist/cache-keepalive.d.ts.map +1 -0
- package/dist/cache-keepalive.js +0 -0
- package/dist/cache-keepalive.js.map +1 -0
- package/dist/cache-keepalive.test.d.ts +2 -0
- package/dist/cache-keepalive.test.d.ts.map +1 -0
- package/dist/cache-keepalive.test.js +206 -0
- package/dist/cache-keepalive.test.js.map +1 -0
- package/dist/context/index.d.ts +1 -1
- package/dist/context/index.d.ts.map +1 -1
- package/dist/context/index.js +1 -1
- package/dist/context/index.js.map +1 -1
- package/dist/context/process.d.ts +3 -1
- package/dist/context/process.d.ts.map +1 -1
- package/dist/context/process.js +230 -49
- package/dist/context/process.js.map +1 -1
- package/dist/context/types.d.ts +30 -0
- package/dist/context/types.d.ts.map +1 -1
- package/dist/context/types.js +16 -0
- package/dist/context/types.js.map +1 -1
- package/dist/floating-cache-marker.test.d.ts +2 -0
- package/dist/floating-cache-marker.test.d.ts.map +1 -0
- package/dist/floating-cache-marker.test.js +263 -0
- package/dist/floating-cache-marker.test.js.map +1 -0
- package/dist/formatters/anthropic-xml.d.ts +2 -0
- package/dist/formatters/anthropic-xml.d.ts.map +1 -1
- package/dist/formatters/anthropic-xml.js +57 -19
- package/dist/formatters/anthropic-xml.js.map +1 -1
- package/dist/formatters/normalize-tool-pairs.d.ts +7 -0
- package/dist/formatters/normalize-tool-pairs.d.ts.map +1 -1
- package/dist/formatters/normalize-tool-pairs.js +45 -0
- package/dist/formatters/normalize-tool-pairs.js.map +1 -1
- package/dist/formatters/types.d.ts +29 -0
- package/dist/formatters/types.d.ts.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/membrane.d.ts +142 -7
- package/dist/membrane.d.ts.map +1 -1
- package/dist/membrane.js +881 -270
- package/dist/membrane.js.map +1 -1
- package/dist/providers/anthropic.d.ts +37 -0
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +163 -26
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/bedrock.d.ts +8 -0
- package/dist/providers/bedrock.d.ts.map +1 -1
- package/dist/providers/bedrock.js +24 -1
- package/dist/providers/bedrock.js.map +1 -1
- package/dist/providers/gemini.d.ts +11 -0
- package/dist/providers/gemini.d.ts.map +1 -1
- package/dist/providers/gemini.js +104 -82
- package/dist/providers/gemini.js.map +1 -1
- package/dist/providers/mock.d.ts +2 -0
- package/dist/providers/mock.d.ts.map +1 -1
- package/dist/providers/mock.js +2 -0
- package/dist/providers/mock.js.map +1 -1
- package/dist/providers/openai-compatible.d.ts +7 -0
- package/dist/providers/openai-compatible.d.ts.map +1 -1
- package/dist/providers/openai-compatible.js +99 -48
- package/dist/providers/openai-compatible.js.map +1 -1
- package/dist/providers/openai-completions.d.ts +5 -0
- package/dist/providers/openai-completions.d.ts.map +1 -1
- package/dist/providers/openai-completions.js +107 -44
- package/dist/providers/openai-completions.js.map +1 -1
- package/dist/providers/openai-responses-api.d.ts +16 -0
- package/dist/providers/openai-responses-api.d.ts.map +1 -1
- package/dist/providers/openai-responses-api.js +38 -10
- package/dist/providers/openai-responses-api.js.map +1 -1
- package/dist/providers/openai-responses.d.ts +2 -0
- package/dist/providers/openai-responses.d.ts.map +1 -1
- package/dist/providers/openai-responses.js +8 -1
- package/dist/providers/openai-responses.js.map +1 -1
- package/dist/providers/openai.d.ts +7 -0
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +92 -44
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/openrouter.d.ts +9 -0
- package/dist/providers/openrouter.d.ts.map +1 -1
- package/dist/providers/openrouter.js +118 -62
- package/dist/providers/openrouter.js.map +1 -1
- package/dist/providers/utils.d.ts +74 -2
- package/dist/providers/utils.d.ts.map +1 -1
- package/dist/providers/utils.js +184 -3
- package/dist/providers/utils.js.map +1 -1
- package/dist/registry/default-pricing.d.ts +22 -0
- package/dist/registry/default-pricing.d.ts.map +1 -1
- package/dist/registry/default-pricing.js +162 -28
- package/dist/registry/default-pricing.js.map +1 -1
- package/dist/types/config.d.ts +5 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js.map +1 -1
- package/dist/types/content.d.ts +13 -0
- package/dist/types/content.d.ts.map +1 -1
- package/dist/types/content.js.map +1 -1
- package/dist/types/errors.d.ts +15 -0
- package/dist/types/errors.d.ts.map +1 -1
- package/dist/types/errors.js +26 -0
- package/dist/types/errors.js.map +1 -1
- package/dist/types/index.d.ts +3 -3
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/provider.d.ts +50 -0
- package/dist/types/provider.d.ts.map +1 -1
- package/dist/types/request.d.ts +13 -0
- package/dist/types/request.d.ts.map +1 -1
- package/dist/types/response.d.ts +85 -4
- package/dist/types/response.d.ts.map +1 -1
- package/dist/types/response.js.map +1 -1
- package/dist/types/streaming.d.ts +6 -1
- package/dist/types/streaming.d.ts.map +1 -1
- package/dist/utils/cache-marker-budget.d.ts +82 -0
- package/dist/utils/cache-marker-budget.d.ts.map +1 -0
- package/dist/utils/cache-marker-budget.js +189 -0
- package/dist/utils/cache-marker-budget.js.map +1 -0
- package/dist/utils/cost.d.ts +22 -0
- package/dist/utils/cost.d.ts.map +1 -1
- package/dist/utils/cost.js +55 -0
- package/dist/utils/cost.js.map +1 -1
- package/dist/utils/thinking-carriers.d.ts +80 -0
- package/dist/utils/thinking-carriers.d.ts.map +1 -0
- package/dist/utils/thinking-carriers.js +115 -0
- package/dist/utils/thinking-carriers.js.map +1 -0
- package/dist/utils/tool-parser.d.ts +24 -0
- package/dist/utils/tool-parser.d.ts.map +1 -1
- package/dist/utils/tool-parser.js +367 -161
- package/dist/utils/tool-parser.js.map +1 -1
- package/dist/utils/usage.d.ts +71 -0
- package/dist/utils/usage.d.ts.map +1 -0
- package/dist/utils/usage.js +161 -0
- package/dist/utils/usage.js.map +1 -0
- package/dist/yielding-stream.d.ts +8 -0
- package/dist/yielding-stream.d.ts.map +1 -1
- package/dist/yielding-stream.js +49 -3
- package/dist/yielding-stream.js.map +1 -1
- package/package.json +3 -2
- package/src/cache-keepalive.test.ts +244 -0
- package/src/cache-keepalive.ts +385 -0
- package/src/context/index.ts +1 -0
- package/src/context/process.ts +305 -59
- package/src/context/types.ts +38 -0
- package/src/floating-cache-marker.test.ts +285 -0
- package/src/formatters/anthropic-xml.ts +62 -20
- package/src/formatters/normalize-tool-pairs.ts +49 -0
- package/src/formatters/types.ts +32 -0
- package/src/index.ts +13 -0
- package/src/membrane.ts +1031 -279
- package/src/providers/anthropic.ts +205 -20
- package/src/providers/bedrock.ts +25 -1
- package/src/providers/gemini.ts +125 -87
- package/src/providers/mock.ts +3 -0
- package/src/providers/openai-compatible.ts +102 -45
- package/src/providers/openai-completions.ts +112 -46
- package/src/providers/openai-responses-api.ts +45 -15
- package/src/providers/openai-responses.ts +8 -1
- package/src/providers/openai.ts +95 -42
- package/src/providers/openrouter.ts +125 -63
- package/src/providers/utils.ts +227 -6
- package/src/registry/default-pricing.ts +165 -28
- package/src/types/config.ts +6 -0
- package/src/types/content.ts +14 -0
- package/src/types/errors.ts +28 -0
- package/src/types/index.ts +6 -0
- package/src/types/provider.ts +55 -0
- package/src/types/request.ts +14 -0
- package/src/types/response.ts +109 -8
- package/src/types/streaming.ts +8 -2
- package/src/utils/cache-marker-budget.ts +208 -0
- package/src/utils/cost.ts +64 -0
- package/src/utils/thinking-carriers.ts +125 -0
- package/src/utils/tool-parser.ts +473 -174
- package/src/utils/usage.ts +184 -0
- package/src/yielding-stream.ts +54 -3
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Floating cache marker: incremental prompt caching inside the native
|
|
3
|
+
* tool loop (see the doctrine block in buildNativeToolRequest).
|
|
4
|
+
*
|
|
5
|
+
* Context strategies place breakpoints once per turn at compile time; the
|
|
6
|
+
* tool loop rebuilds the request every round with an append-only suffix
|
|
7
|
+
* the strategy never saw. The float rides the newest message using only
|
|
8
|
+
* the RESIDUAL breakpoint budget — upstream markers are never displaced.
|
|
9
|
+
* Motivating incident: qa-ops 2026-08-20, ~5.3M uncached tokens in 18min
|
|
10
|
+
* from two subagents whose single marker sat at message 2 of 61.
|
|
11
|
+
*/
|
|
12
|
+
import { describe, it, expect, vi, afterEach } from 'vitest';
|
|
13
|
+
import { Membrane } from './membrane.js';
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
// Fixtures
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
const text = (t) => ({ type: 'text', text: t });
|
|
18
|
+
const user = (t, bp = false) => ({
|
|
19
|
+
participant: 'User',
|
|
20
|
+
content: [text(t)],
|
|
21
|
+
...(bp ? { cacheBreakpoint: true } : {}),
|
|
22
|
+
});
|
|
23
|
+
const assistantToolCall = (id) => ({
|
|
24
|
+
participant: 'Claude',
|
|
25
|
+
content: [
|
|
26
|
+
text('running a tool'),
|
|
27
|
+
{ type: 'tool_use', id, name: 'shell', input: { cmd: 'ls' } },
|
|
28
|
+
],
|
|
29
|
+
});
|
|
30
|
+
const toolResults = (id, bp = false) => ({
|
|
31
|
+
participant: 'User',
|
|
32
|
+
content: [{ type: 'tool_result', toolUseId: id, content: 'ok' }],
|
|
33
|
+
...(bp ? { cacheBreakpoint: true } : {}),
|
|
34
|
+
});
|
|
35
|
+
/** A turn: marked kickoff + `rounds` completed tool rounds. */
|
|
36
|
+
function turn(rounds, kickoffMarked = true) {
|
|
37
|
+
const messages = [user('do the thing', kickoffMarked)];
|
|
38
|
+
for (let i = 1; i <= rounds; i++) {
|
|
39
|
+
messages.push(assistantToolCall(`t${i}`), toolResults(`t${i}`));
|
|
40
|
+
}
|
|
41
|
+
return messages;
|
|
42
|
+
}
|
|
43
|
+
function makeRequest(overrides = {}) {
|
|
44
|
+
return {
|
|
45
|
+
messages: [],
|
|
46
|
+
system: 'You are a test agent.',
|
|
47
|
+
config: { model: 'claude-sonnet-5', maxTokens: 128 },
|
|
48
|
+
tools: [{ name: 'shell', description: 'run a command', inputSchema: { type: 'object' } }],
|
|
49
|
+
promptCaching: true,
|
|
50
|
+
cacheTtl: '1h',
|
|
51
|
+
assistantParticipant: 'Claude',
|
|
52
|
+
...overrides,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
function build(request, messages, rebuild, membrane) {
|
|
56
|
+
const m = membrane ?? new Membrane({ name: 'anthropic' });
|
|
57
|
+
return m.buildNativeToolRequest(request, messages, rebuild);
|
|
58
|
+
}
|
|
59
|
+
/** Total cache_control instances across the whole wire request. */
|
|
60
|
+
function totalMarkers(pr) {
|
|
61
|
+
let n = 0;
|
|
62
|
+
pr.messages.forEach((m) => (Array.isArray(m.content) ? m.content : []).forEach((b) => { if (b.cache_control)
|
|
63
|
+
n++; }));
|
|
64
|
+
if (Array.isArray(pr.tools))
|
|
65
|
+
pr.tools.forEach((t) => { if (t.cache_control)
|
|
66
|
+
n++; });
|
|
67
|
+
if (Array.isArray(pr.system))
|
|
68
|
+
pr.system.forEach((b) => { if (b.cache_control)
|
|
69
|
+
n++; });
|
|
70
|
+
return n;
|
|
71
|
+
}
|
|
72
|
+
/** [messageIndex, blockIndex] of every message-level cache_control, plus tools/system markers. */
|
|
73
|
+
function markers(pr) {
|
|
74
|
+
const msgs = [];
|
|
75
|
+
pr.messages.forEach((m, mi) => {
|
|
76
|
+
(Array.isArray(m.content) ? m.content : []).forEach((b, bi) => {
|
|
77
|
+
if (b.cache_control)
|
|
78
|
+
msgs.push([mi, bi]);
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
const onTools = Array.isArray(pr.tools) && pr.tools.some((t) => t.cache_control);
|
|
82
|
+
const onSystem = Array.isArray(pr.system) && pr.system.some((b) => b.cache_control);
|
|
83
|
+
return { messages: msgs, onTools, onSystem };
|
|
84
|
+
}
|
|
85
|
+
const last = (pr) => pr.messages.length - 1;
|
|
86
|
+
afterEach(() => {
|
|
87
|
+
vi.restoreAllMocks();
|
|
88
|
+
});
|
|
89
|
+
// ---------------------------------------------------------------------------
|
|
90
|
+
// Tests
|
|
91
|
+
// ---------------------------------------------------------------------------
|
|
92
|
+
describe('floating cache marker', () => {
|
|
93
|
+
it('does not float on the turn\'s first build', () => {
|
|
94
|
+
const pr = build(makeRequest(), turn(1), false);
|
|
95
|
+
// Only the strategy's kickoff marker; the round's suffix is unmarked.
|
|
96
|
+
expect(markers(pr).messages).toEqual([[0, 0]]);
|
|
97
|
+
});
|
|
98
|
+
it('floats onto the newest message on a tool-loop rebuild', () => {
|
|
99
|
+
const pr = build(makeRequest(), turn(1), true);
|
|
100
|
+
const m = markers(pr);
|
|
101
|
+
// Kickoff marker intact + float on the final tool_result envelope.
|
|
102
|
+
expect(m.messages).toContainEqual([0, 0]);
|
|
103
|
+
expect(m.messages).toContainEqual([last(pr), 0]);
|
|
104
|
+
// Fallback stays suppressed: message markers exist.
|
|
105
|
+
expect(m.onTools).toBe(false);
|
|
106
|
+
expect(m.onSystem).toBe(false);
|
|
107
|
+
});
|
|
108
|
+
it('keeps the previous round\'s endpoint marked when budget allows', () => {
|
|
109
|
+
const pr = build(makeRequest(), turn(2), true);
|
|
110
|
+
const m = markers(pr);
|
|
111
|
+
// kickoff + previous round's results envelope + newest envelope.
|
|
112
|
+
expect(m.messages).toEqual([[0, 0], [last(pr) - 2, 0], [last(pr), 0]]);
|
|
113
|
+
});
|
|
114
|
+
it('never stacks a second marker on an already-marked final message', () => {
|
|
115
|
+
const messages = turn(2);
|
|
116
|
+
messages[messages.length - 1].cacheBreakpoint = true;
|
|
117
|
+
const pr = build(makeRequest(), messages, true);
|
|
118
|
+
const m = markers(pr);
|
|
119
|
+
const onFinal = m.messages.filter(([mi]) => mi === last(pr));
|
|
120
|
+
expect(onFinal).toHaveLength(1);
|
|
121
|
+
// Budget not consumed by the dedupe: previous endpoint still floated.
|
|
122
|
+
expect(m.messages).toContainEqual([last(pr) - 2, 0]);
|
|
123
|
+
});
|
|
124
|
+
it('withholds the float (with one warning) when upstream markers fill all 4 slots', () => {
|
|
125
|
+
const warn = vi.spyOn(console, 'warn').mockImplementation(() => { });
|
|
126
|
+
const messages = turn(3);
|
|
127
|
+
// Mark every results envelope: 1 kickoff + 3 results = 4 upstream markers.
|
|
128
|
+
for (const msg of messages) {
|
|
129
|
+
if (msg.content[0].type === 'tool_result')
|
|
130
|
+
msg.cacheBreakpoint = true;
|
|
131
|
+
}
|
|
132
|
+
const membrane = new Membrane({ name: 'anthropic' });
|
|
133
|
+
const pr = build(makeRequest(), messages, true, membrane);
|
|
134
|
+
expect(markers(pr).messages).toHaveLength(4);
|
|
135
|
+
expect(warn).toHaveBeenCalledTimes(1);
|
|
136
|
+
// Warn-once: a second rebuild does not warn again.
|
|
137
|
+
build(makeRequest(), messages, true, membrane);
|
|
138
|
+
expect(warn).toHaveBeenCalledTimes(1);
|
|
139
|
+
});
|
|
140
|
+
it('warns again after the rate-limit interval instead of latching for the process lifetime', () => {
|
|
141
|
+
const warn = vi.spyOn(console, 'warn').mockImplementation(() => { });
|
|
142
|
+
const clock = vi.spyOn(Date, 'now');
|
|
143
|
+
clock.mockReturnValue(1_000_000);
|
|
144
|
+
const messages = turn(3);
|
|
145
|
+
for (const msg of messages) {
|
|
146
|
+
if (msg.content[0].type === 'tool_result')
|
|
147
|
+
msg.cacheBreakpoint = true;
|
|
148
|
+
}
|
|
149
|
+
const membrane = new Membrane({ name: 'anthropic' });
|
|
150
|
+
build(makeRequest(), messages, true, membrane);
|
|
151
|
+
build(makeRequest(), messages, true, membrane);
|
|
152
|
+
expect(warn).toHaveBeenCalledTimes(1);
|
|
153
|
+
// A long-lived Membrane must not go permanently quiet about an
|
|
154
|
+
// over-budget wire: past the interval the condition reports again, and
|
|
155
|
+
// says how many occurrences it swallowed meanwhile.
|
|
156
|
+
clock.mockReturnValue(1_000_000 + 61_000);
|
|
157
|
+
build(makeRequest(), messages, true, membrane);
|
|
158
|
+
expect(warn).toHaveBeenCalledTimes(2);
|
|
159
|
+
expect(String(warn.mock.calls[1][0])).toContain('1 further occurrences suppressed');
|
|
160
|
+
});
|
|
161
|
+
it('floats from the residuum left after the tools/system fallback on markerless requests', () => {
|
|
162
|
+
const pr = build(makeRequest(), turn(2, false), true);
|
|
163
|
+
const m = markers(pr);
|
|
164
|
+
// Fallback spent 2 (tools + system) → residuum 2 → newest + previous endpoint.
|
|
165
|
+
expect(m.onTools).toBe(true);
|
|
166
|
+
expect(m.onSystem).toBe(true);
|
|
167
|
+
expect(m.messages).toEqual([[last(pr) - 2, 0], [last(pr), 0]]);
|
|
168
|
+
});
|
|
169
|
+
it('steps back off a trailing thinking block', () => {
|
|
170
|
+
const messages = turn(1);
|
|
171
|
+
messages.push({
|
|
172
|
+
participant: 'Claude',
|
|
173
|
+
content: [text('partial'), { type: 'thinking', thinking: 'hmm', signature: 'sig' }],
|
|
174
|
+
});
|
|
175
|
+
const pr = build(makeRequest(), messages, true);
|
|
176
|
+
const m = markers(pr);
|
|
177
|
+
// Marker lands on the text block, not the thinking block.
|
|
178
|
+
const finalMarks = m.messages.filter(([mi]) => mi === last(pr));
|
|
179
|
+
expect(finalMarks).toHaveLength(1);
|
|
180
|
+
const [, bi] = finalMarks[0];
|
|
181
|
+
expect(pr.messages[last(pr)].content[bi].type).toBe('text');
|
|
182
|
+
});
|
|
183
|
+
it('stands down entirely when the normalizer synthesized a [pending] tool_result', () => {
|
|
184
|
+
// Trailing orphan tool_use → normalizer synthesizes its [pending]
|
|
185
|
+
// result, whose bytes change when the real result lands.
|
|
186
|
+
const messages = [user('go', true), assistantToolCall('t1')];
|
|
187
|
+
const pr = build(makeRequest(), messages, true);
|
|
188
|
+
// Only the kickoff marker; nothing floated at or past the synthetic.
|
|
189
|
+
expect(markers(pr).messages).toEqual([[0, 0]]);
|
|
190
|
+
});
|
|
191
|
+
it('respects request-level opt-out', () => {
|
|
192
|
+
const pr = build(makeRequest({ floatingCacheMarker: false }), turn(1), true);
|
|
193
|
+
expect(markers(pr).messages).toEqual([[0, 0]]);
|
|
194
|
+
});
|
|
195
|
+
it('emits no cache_control at all when promptCaching is off', () => {
|
|
196
|
+
const pr = build(makeRequest({ promptCaching: false }), turn(1), true);
|
|
197
|
+
const m = markers(pr);
|
|
198
|
+
expect(m.messages).toEqual([]);
|
|
199
|
+
expect(m.onTools).toBe(false);
|
|
200
|
+
expect(m.onSystem).toBe(false);
|
|
201
|
+
});
|
|
202
|
+
it('counts pre-marked system blocks against the residual budget (never exceeds 4 on the wire)', () => {
|
|
203
|
+
const warn = vi.spyOn(console, 'warn').mockImplementation(() => { });
|
|
204
|
+
// System is a block array with one block already carrying cache_control —
|
|
205
|
+
// invisible to the running message tally, but a real wire marker.
|
|
206
|
+
const premarkedSystem = [
|
|
207
|
+
{ type: 'text', text: 'You are a test agent.', cache_control: { type: 'ephemeral' } },
|
|
208
|
+
{ type: 'text', text: 'Addendum.' },
|
|
209
|
+
];
|
|
210
|
+
// 3 message markers + pre-marked system = 4 on the wire: no room to float.
|
|
211
|
+
const full = turn(2);
|
|
212
|
+
for (const msg of full) {
|
|
213
|
+
if (msg.content[0].type === 'tool_result')
|
|
214
|
+
msg.cacheBreakpoint = true;
|
|
215
|
+
}
|
|
216
|
+
const prFull = build(makeRequest({ system: premarkedSystem }), full, true);
|
|
217
|
+
expect(totalMarkers(prFull)).toBe(4);
|
|
218
|
+
expect(warn).toHaveBeenCalledTimes(1);
|
|
219
|
+
// 2 message markers + pre-marked system = 3: exactly one slot left — the
|
|
220
|
+
// float takes the newest message and stops.
|
|
221
|
+
const partial = turn(2);
|
|
222
|
+
partial[2].cacheBreakpoint = true; // first round's results envelope
|
|
223
|
+
const prPartial = build(makeRequest({ system: premarkedSystem }), partial, true);
|
|
224
|
+
expect(totalMarkers(prPartial)).toBe(4);
|
|
225
|
+
expect(markers(prPartial).messages).toContainEqual([last(prPartial), 0]);
|
|
226
|
+
});
|
|
227
|
+
it('counts an overlapping block-level + message-level marker once (one physical marker)', () => {
|
|
228
|
+
// A stale block-level cache_control on the very block the message's
|
|
229
|
+
// cacheBreakpoint lands on is ONE wire marker, not two. Two such
|
|
230
|
+
// messages must leave residuum 2, not 0.
|
|
231
|
+
const staleMarked = (t) => ({
|
|
232
|
+
participant: 'User',
|
|
233
|
+
content: [{ type: 'text', text: t, cache_control: { type: 'ephemeral' } }],
|
|
234
|
+
cacheBreakpoint: true,
|
|
235
|
+
});
|
|
236
|
+
// Results envelope whose message-level breakpoint lands on a text block
|
|
237
|
+
// that already carries stale cache_control — tool pairing stays intact.
|
|
238
|
+
const overlapResults = (id) => ({
|
|
239
|
+
participant: 'User',
|
|
240
|
+
content: [
|
|
241
|
+
{ type: 'tool_result', toolUseId: id, content: 'ok' },
|
|
242
|
+
{ type: 'text', text: 'operator note', cache_control: { type: 'ephemeral' } },
|
|
243
|
+
],
|
|
244
|
+
cacheBreakpoint: true,
|
|
245
|
+
});
|
|
246
|
+
const messages = [staleMarked('do the thing'),
|
|
247
|
+
assistantToolCall('t1'), overlapResults('t1'),
|
|
248
|
+
assistantToolCall('t2'), toolResults('t2')];
|
|
249
|
+
// 2 physical wire markers (the old tally saw 4 and withheld everything).
|
|
250
|
+
const pr = build(makeRequest(), messages, true);
|
|
251
|
+
const m = markers(pr);
|
|
252
|
+
// Float not withheld: newest message marked; previous endpoint already
|
|
253
|
+
// carries its own marker (dedupe, no slot spent).
|
|
254
|
+
expect(m.messages).toContainEqual([last(pr), 0]);
|
|
255
|
+
expect(totalMarkers(pr)).toBeLessThanOrEqual(4);
|
|
256
|
+
});
|
|
257
|
+
it('floated markers carry the request cacheTtl', () => {
|
|
258
|
+
const pr = build(makeRequest(), turn(1), true);
|
|
259
|
+
const [mi, bi] = markers(pr).messages.find(([i]) => i === last(pr));
|
|
260
|
+
expect(pr.messages[mi].content[bi].cache_control).toEqual({ type: 'ephemeral', ttl: '1h' });
|
|
261
|
+
});
|
|
262
|
+
});
|
|
263
|
+
//# sourceMappingURL=floating-cache-marker.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"floating-cache-marker.test.js","sourceRoot":"","sources":["../src/floating-cache-marker.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,6 +43,8 @@ export interface AnthropicXmlFormatterConfig extends FormatterConfig {
|
|
|
43
43
|
export declare class AnthropicXmlFormatter implements PrefillFormatter {
|
|
44
44
|
readonly name = "anthropic-xml";
|
|
45
45
|
readonly usesPrefill = true;
|
|
46
|
+
/** See PrefillFormatter.configuredToolMode — undefined when the caller left the mode to Membrane. */
|
|
47
|
+
readonly configuredToolMode: 'xml' | 'native' | undefined;
|
|
46
48
|
private config;
|
|
47
49
|
constructor(config?: AnthropicXmlFormatterConfig);
|
|
48
50
|
buildMessages(messages: NormalizedMessage[], options: BuildOptions): BuildResult;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic-xml.d.ts","sourceRoot":"","sources":["../../src/formatters/anthropic-xml.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,YAAY,EAEZ,QAAQ,EACR,UAAU,EAIX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,eAAe,EAEhB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"anthropic-xml.d.ts","sourceRoot":"","sources":["../../src/formatters/anthropic-xml.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,YAAY,EAEZ,QAAQ,EACR,UAAU,EAIX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,eAAe,EAEhB,MAAM,YAAY,CAAC;AAiBpB,MAAM,WAAW,2BAA4B,SAAQ,eAAe;IAClE;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IAE5B;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,cAAc,GAAG,QAAQ,CAAC;IAE9C;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAwCD,qBAAa,qBAAsB,YAAW,gBAAgB;IAC5D,QAAQ,CAAC,IAAI,mBAAmB;IAChC,QAAQ,CAAC,WAAW,QAAQ;IAE5B,qGAAqG;IACrG,QAAQ,CAAC,kBAAkB,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC;IAE1D,OAAO,CAAC,MAAM,CAAwC;gBAE1C,MAAM,GAAE,2BAAgC;IAiBpD,aAAa,CAAC,QAAQ,EAAE,iBAAiB,EAAE,EAAE,OAAO,EAAE,YAAY,GAAG,WAAW;IA4UhF,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,MAAM;IAYlF,kBAAkB,IAAI,YAAY;IAIlC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,EAAE;IAK3C,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIpC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE;IASnD,OAAO,CAAC,cAAc;IAqDtB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,gBAAgB;IA4BxB,qEAAqE;IACrE,OAAO,CAAC,mBAAmB;IA4B3B;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IAc9B,OAAO,CAAC,wBAAwB;IAsBhC,OAAO,CAAC,uBAAuB;IAwB/B,OAAO,CAAC,qBAAqB;IAgB7B,OAAO,CAAC,kBAAkB;IAmC1B,OAAO,CAAC,oBAAoB;CAO7B"}
|
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { parseToolCalls as parseToolCallsXml, formatToolResults as formatToolResultsXml, parseAccumulatedIntoBlocks, formatToolDefinitions, } from '../utils/tool-parser.js';
|
|
11
11
|
import { IncrementalXmlParser } from '../utils/stream-parser.js';
|
|
12
|
+
import { clampCacheMarkers } from '../utils/cache-marker-budget.js';
|
|
13
|
+
import { lastCacheableBlockIndex } from './native.js';
|
|
12
14
|
import { isAcceptedImageMediaType, strippedImagePlaceholder } from '../utils/image-media.js';
|
|
13
15
|
// ============================================================================
|
|
14
16
|
// Helpers
|
|
@@ -50,8 +52,11 @@ function toToolResult(block) {
|
|
|
50
52
|
export class AnthropicXmlFormatter {
|
|
51
53
|
name = 'anthropic-xml';
|
|
52
54
|
usesPrefill = true;
|
|
55
|
+
/** See PrefillFormatter.configuredToolMode — undefined when the caller left the mode to Membrane. */
|
|
56
|
+
configuredToolMode;
|
|
53
57
|
config;
|
|
54
58
|
constructor(config = {}) {
|
|
59
|
+
this.configuredToolMode = config.toolMode;
|
|
55
60
|
this.config = {
|
|
56
61
|
toolMode: config.toolMode ?? 'xml',
|
|
57
62
|
toolInjectionMode: config.toolInjectionMode ?? 'conversation',
|
|
@@ -67,6 +72,9 @@ export class AnthropicXmlFormatter {
|
|
|
67
72
|
// ==========================================================================
|
|
68
73
|
buildMessages(messages, options) {
|
|
69
74
|
const { assistantParticipant, tools, thinking, systemPrompt, promptCaching = false, cacheTtl, contextPrefix, prefillUserMessage, hasCacheMarker, } = options;
|
|
75
|
+
// Membrane resolves the mode per request and passes it here; the
|
|
76
|
+
// constructor-time mode is the fallback for direct callers only.
|
|
77
|
+
const toolMode = options.toolMode ?? this.config.toolMode;
|
|
70
78
|
// Build cache_control object (with optional TTL for extended caching)
|
|
71
79
|
const cacheControl = { type: 'ephemeral' };
|
|
72
80
|
if (cacheTtl) {
|
|
@@ -80,37 +88,63 @@ export class AnthropicXmlFormatter {
|
|
|
80
88
|
// True right after an unlabeled tool-results glue — the next assistant
|
|
81
89
|
// message continues the same turn, so it must not get a fresh label.
|
|
82
90
|
let lastWasToolResults = false;
|
|
83
|
-
// Track cache markers applied
|
|
84
|
-
let cacheMarkersApplied = 0;
|
|
85
91
|
// Calculate tool injection point
|
|
86
92
|
const totalMessages = messages.length;
|
|
87
93
|
const toolInjectionIndex = Math.max(0, totalMessages - this.config.toolInjectionPosition);
|
|
88
94
|
let toolsInjected = false;
|
|
89
|
-
const hasToolsForConversation =
|
|
95
|
+
const hasToolsForConversation = toolMode === 'xml' &&
|
|
90
96
|
this.config.toolInjectionMode === 'conversation' &&
|
|
91
97
|
tools &&
|
|
92
98
|
tools.length > 0;
|
|
93
99
|
const toolsText = hasToolsForConversation ? this.formatToolsForInjection(tools) : '';
|
|
94
|
-
// Build system content
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
100
|
+
// Build system content. A caller-supplied system ARRAY keeps its block
|
|
101
|
+
// structure and its per-block cache_control: `request.system` explicitly
|
|
102
|
+
// accepts caller-marked blocks, and flattening them into one text block
|
|
103
|
+
// discarded every marker the caller placed (three in, one out) — the
|
|
104
|
+
// caller's stable prefixes then re-paid full input price forever.
|
|
105
|
+
const callerSystemBlocks = Array.isArray(systemPrompt)
|
|
106
|
+
? systemPrompt
|
|
98
107
|
.filter((b) => b.type === 'text')
|
|
99
|
-
.map(b =>
|
|
100
|
-
.
|
|
101
|
-
|
|
108
|
+
.map((b) => {
|
|
109
|
+
const callerMarker = b.cache_control;
|
|
110
|
+
const block = { type: 'text', text: b.text };
|
|
111
|
+
if (callerMarker)
|
|
112
|
+
block.cache_control = callerMarker;
|
|
113
|
+
return block;
|
|
114
|
+
})
|
|
115
|
+
: undefined;
|
|
116
|
+
const systemBlocks = callerSystemBlocks?.length ? callerSystemBlocks : undefined;
|
|
117
|
+
let systemText = typeof systemPrompt === 'string'
|
|
118
|
+
? systemPrompt
|
|
119
|
+
: (systemBlocks?.map((b) => b.text).join('\n') ?? '');
|
|
102
120
|
// Inject tools into system if configured
|
|
103
|
-
if (
|
|
121
|
+
if (toolMode === 'xml' && this.config.toolInjectionMode === 'system' && tools?.length) {
|
|
104
122
|
const toolsXml = this.formatToolDefinitionsXml(tools);
|
|
105
123
|
systemText = this.injectToolsIntoSystem(systemText, toolsXml);
|
|
124
|
+
if (systemBlocks) {
|
|
125
|
+
// Append to the LAST block only — appending to the join would
|
|
126
|
+
// collapse the array and take every earlier block's marker with it.
|
|
127
|
+
const tail = systemBlocks[systemBlocks.length - 1];
|
|
128
|
+
tail.text = this.injectToolsIntoSystem(tail.text, toolsXml);
|
|
129
|
+
}
|
|
106
130
|
}
|
|
107
131
|
// Build system content with optional cache control
|
|
108
132
|
let systemContent;
|
|
109
|
-
if (
|
|
133
|
+
if (systemBlocks) {
|
|
134
|
+
// The caller's own markers are authoritative: adding one beside them
|
|
135
|
+
// spends a slot the caller already allocated.
|
|
136
|
+
const callerMarkedAny = systemBlocks.some((b) => b.cache_control);
|
|
137
|
+
if (promptCaching && !callerMarkedAny) {
|
|
138
|
+
const bpIdx = lastCacheableBlockIndex(systemBlocks);
|
|
139
|
+
if (bpIdx >= 0)
|
|
140
|
+
systemBlocks[bpIdx].cache_control = cacheControl;
|
|
141
|
+
}
|
|
142
|
+
systemContent = systemBlocks;
|
|
143
|
+
}
|
|
144
|
+
else if (systemText) {
|
|
110
145
|
const systemBlock = { type: 'text', text: systemText };
|
|
111
146
|
if (promptCaching) {
|
|
112
147
|
systemBlock.cache_control = cacheControl;
|
|
113
|
-
cacheMarkersApplied++;
|
|
114
148
|
}
|
|
115
149
|
systemContent = [systemBlock];
|
|
116
150
|
}
|
|
@@ -119,7 +153,6 @@ export class AnthropicXmlFormatter {
|
|
|
119
153
|
const prefixBlock = { type: 'text', text: contextPrefix };
|
|
120
154
|
if (promptCaching) {
|
|
121
155
|
prefixBlock.cache_control = cacheControl;
|
|
122
|
-
cacheMarkersApplied++;
|
|
123
156
|
}
|
|
124
157
|
providerMessages.push({
|
|
125
158
|
role: 'assistant',
|
|
@@ -177,7 +210,6 @@ export class AnthropicXmlFormatter {
|
|
|
177
210
|
const content = currentConversation.join(joiner);
|
|
178
211
|
const contentBlock = { type: 'text', text: content };
|
|
179
212
|
contentBlock.cache_control = cacheControl;
|
|
180
|
-
cacheMarkersApplied++;
|
|
181
213
|
providerMessages.push({
|
|
182
214
|
role: 'assistant',
|
|
183
215
|
content: [contentBlock],
|
|
@@ -244,7 +276,6 @@ export class AnthropicXmlFormatter {
|
|
|
244
276
|
const content = currentConversation.join(joiner);
|
|
245
277
|
const contentBlock = { type: 'text', text: content };
|
|
246
278
|
contentBlock.cache_control = cacheControl;
|
|
247
|
-
cacheMarkersApplied++;
|
|
248
279
|
providerMessages.push({
|
|
249
280
|
role: 'assistant',
|
|
250
281
|
content: [contentBlock],
|
|
@@ -295,7 +326,6 @@ export class AnthropicXmlFormatter {
|
|
|
295
326
|
};
|
|
296
327
|
if (promptCaching) {
|
|
297
328
|
cliSystemBlock.cache_control = cacheControl;
|
|
298
|
-
cacheMarkersApplied++;
|
|
299
329
|
}
|
|
300
330
|
systemContent = [cliSystemBlock];
|
|
301
331
|
providerMessages.unshift({
|
|
@@ -314,9 +344,17 @@ export class AnthropicXmlFormatter {
|
|
|
314
344
|
// Build stop sequences
|
|
315
345
|
const stopSequences = this.buildStopSequences(messages, assistantParticipant, options);
|
|
316
346
|
// Native tools if configured
|
|
317
|
-
const nativeTools =
|
|
347
|
+
const nativeTools = toolMode === 'native' && tools?.length
|
|
318
348
|
? this.convertToNativeTools(tools)
|
|
319
349
|
: undefined;
|
|
350
|
+
// Budget. Five sites above attach cache_control (system, contextPrefix,
|
|
351
|
+
// hasCacheMarker flush, cacheBreakpoint flush, CLI-simulation system) and
|
|
352
|
+
// multiple cacheBreakpoints are documented input, so a prefill turn with
|
|
353
|
+
// three marked messages reaches five markers — one over Anthropic's hard
|
|
354
|
+
// limit, which rejects the request outright. Clamping here, once, on the
|
|
355
|
+
// finished artifacts is the only count that can see all five sites; the
|
|
356
|
+
// reported tally is that same recount, so it can never drift from the wire.
|
|
357
|
+
const budget = clampCacheMarkers({ messages: providerMessages, system: systemContent, tools: nativeTools }, 'anthropic-xml');
|
|
320
358
|
return {
|
|
321
359
|
messages: providerMessages,
|
|
322
360
|
systemContent,
|
|
@@ -325,7 +363,7 @@ export class AnthropicXmlFormatter {
|
|
|
325
363
|
: undefined,
|
|
326
364
|
stopSequences,
|
|
327
365
|
nativeTools,
|
|
328
|
-
cacheMarkersApplied,
|
|
366
|
+
cacheMarkersApplied: budget.total,
|
|
329
367
|
};
|
|
330
368
|
}
|
|
331
369
|
formatToolResults(results, options) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic-xml.js","sourceRoot":"","sources":["../../src/formatters/anthropic-xml.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAoBH,OAAO,EACL,cAAc,IAAI,iBAAiB,EACnC,iBAAiB,IAAI,oBAAoB,EACzC,0BAA0B,EAC1B,qBAAqB,GAEtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AA0C7F,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E;;;;GAIG;AACH,SAAS,YAAY,CAAC,KAAwB;IAC5C,IAAI,OAA0C,CAAC;IAC/C,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC1B,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,EAAE,CAAC;QACb,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAChC,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACxB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YACjD,CAAC;iBAAM,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAChE,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,OAAO;oBACb,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE;iBACnF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO;QACL,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,OAAO;QACP,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK;KAChC,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,0BAA0B;AAC1B,+EAA+E;AAE/E,MAAM,OAAO,qBAAqB;IACvB,IAAI,GAAG,eAAe,CAAC;IACvB,WAAW,GAAG,IAAI,CAAC;IAEpB,MAAM,CAAwC;IAEtD,YAAY,SAAsC,EAAE;QAClD,IAAI,CAAC,MAAM,GAAG;YACZ,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,KAAK;YAClC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,IAAI,cAAc;YAC7D,qBAAqB,EAAE,MAAM,CAAC,qBAAqB,IAAI,EAAE;YACzD,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,EAAE;YAC/C,sBAAsB,EAAE,MAAM,CAAC,sBAAsB,IAAI,EAAE;YAC3D,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,OAAO;YACpD,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,IAAI;SACxC,CAAC;IACJ,CAAC;IAED,6EAA6E;IAC7E,mBAAmB;IACnB,6EAA6E;IAE7E,aAAa,CAAC,QAA6B,EAAE,OAAqB;QAChE,MAAM,EACJ,oBAAoB,EACpB,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,aAAa,GAAG,KAAK,EACrB,QAAQ,EACR,aAAa,EACb,kBAAkB,EAClB,cAAc,GACf,GAAG,OAAO,CAAC;QAEZ,sEAAsE;QACtE,MAAM,YAAY,GAA4B,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;QACpE,IAAI,QAAQ,EAAE,CAAC;YACb,YAAY,CAAC,GAAG,GAAG,QAAQ,CAAC;QAC9B,CAAC;QAED,MAAM,gBAAgB,GAAsB,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAExD,2BAA2B;QAC3B,IAAI,mBAAmB,GAAa,EAAE,CAAC;QACvC,IAAI,uBAAuB,GAAkB,IAAI,CAAC;QAClD,uEAAuE;QACvE,qEAAqE;QACrE,IAAI,kBAAkB,GAAG,KAAK,CAAC;QAE/B,8BAA8B;QAC9B,IAAI,mBAAmB,GAAG,CAAC,CAAC;QAE5B,iCAAiC;QACjC,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC;QACtC,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAC1F,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,MAAM,uBAAuB,GAC3B,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,KAAK;YAC9B,IAAI,CAAC,MAAM,CAAC,iBAAiB,KAAK,cAAc;YAChD,KAAK;YACL,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACnB,MAAM,SAAS,GAAG,uBAAuB,CAAC,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,KAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAEtF,uBAAuB;QACvB,IAAI,UAAU,GAAG,OAAO,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,UAAU,GAAG,YAAY;iBACtB,MAAM,CAAC,CAAC,CAAC,EAAwC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;iBACtE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;iBAChB,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;QAED,yCAAyC;QACzC,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,KAAK,QAAQ,IAAI,KAAK,EAAE,MAAM,EAAE,CAAC;YAClG,MAAM,QAAQ,GAAG,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;YACtD,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAChE,CAAC;QAED,mDAAmD;QACnD,IAAI,aAAsB,CAAC;QAC3B,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,WAAW,GAA4B,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;YAChF,IAAI,aAAa,EAAE,CAAC;gBAClB,WAAW,CAAC,aAAa,GAAG,YAAY,CAAC;gBACzC,mBAAmB,EAAE,CAAC;YACxB,CAAC;YACD,aAAa,GAAG,CAAC,WAAW,CAAC,CAAC;QAChC,CAAC;QAED,gFAAgF;QAChF,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,WAAW,GAA4B,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;YACnF,IAAI,aAAa,EAAE,CAAC;gBAClB,WAAW,CAAC,aAAa,GAAG,YAAY,CAAC;gBACzC,mBAAmB,EAAE,CAAC;YACxB,CAAC;YACD,gBAAgB,CAAC,IAAI,CAAC;gBACpB,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,CAAC,WAAW,CAAC;aACvB,CAAC,CAAC;QACL,CAAC;QAED,mBAAmB;QACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,OAAO;gBAAE,SAAS;YAEvB,MAAM,aAAa,GAAG,CAAC,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YAChD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,KAAK,oBAAoB,CAAC;YAEjE,kBAAkB;YAClB,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,mBAAmB,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;YACxG,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YACpC,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YAE3C,2BAA2B;YAC3B,IAAI,mBAAmB,EAAE,CAAC;gBACxB,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,KAAK,OAAO,EAAE,CAAC;oBAC7C,MAAM,IAAI,KAAK,CAAC,gEAAgE,OAAO,CAAC,WAAW,kDAAkD,CAAC,CAAC;gBACzJ,CAAC;qBAAM,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;oBACnC,OAAO,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;gBAClF,CAAC;YACH,CAAC;YAED,yBAAyB;YACzB,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC;YAE1E,oDAAoD;YACpD,IAAI,SAAS,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC1B,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACnC,gBAAgB,CAAC,IAAI,CAAC;wBACpB,IAAI,EAAE,WAAW;wBACjB,OAAO,EAAE,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC;qBAC1C,CAAC,CAAC;oBACH,mBAAmB,GAAG,EAAE,CAAC;gBAC3B,CAAC;gBAED,MAAM,WAAW,GAAc,EAAE,CAAC;gBAClC,IAAI,IAAI,EAAE,CAAC;oBACT,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,WAAW,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC9E,CAAC;gBACD,WAAW,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;gBAE5B,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;gBAC9D,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC;gBAC9C,SAAS;YACX,CAAC;YAED,kCAAkC;YAClC,IAAI,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;gBAC9B,SAAS;YACX,CAAC;YAED,uFAAuF;YACvF,0EAA0E;YAC1E,IAAI,cAAc,IAAI,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC;gBACjD,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,EAAE,CAAC;oBACpD,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACjD,MAAM,YAAY,GAA4B,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;oBAC9E,YAAY,CAAC,aAAa,GAAG,YAAY,CAAC;oBAC1C,mBAAmB,EAAE,CAAC;oBACtB,gBAAgB,CAAC,IAAI,CAAC;wBACpB,IAAI,EAAE,WAAW;wBACjB,OAAO,EAAE,CAAC,YAAY,CAAC;qBACxB,CAAC,CAAC;oBACH,mBAAmB,GAAG,EAAE,CAAC;gBAC3B,CAAC;qBAAM,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC1C,gBAAgB,CAAC,IAAI,CAAC;wBACpB,IAAI,EAAE,WAAW;wBACjB,OAAO,EAAE,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC;qBAC1C,CAAC,CAAC;oBACH,mBAAmB,GAAG,EAAE,CAAC;gBAC3B,CAAC;YACH,CAAC;YAED,yDAAyD;YACzD,MAAM,gBAAgB,GAAG,kBAAkB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,kBAAkB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACpF,IAAI,uBAAuB,IAAI,CAAC,aAAa,IAAI,gBAAgB,EAAE,CAAC;gBAClE,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACpC,aAAa,GAAG,IAAI,CAAC;YACvB,CAAC;YAED,yBAAyB;YACzB,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,KAAK,oBAAoB,CAAC;YAClE,MAAM,cAAc,GAAG,YAAY,IAAI,uBAAuB,KAAK,oBAAoB,IAAI,CAAC,aAAa,CAAC;YAE1G,MAAM,iBAAiB,GACrB,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC;YAE1E,IAAI,cAAc,IAAI,aAAa,EAAE,CAAC;gBACpC,sCAAsC;gBACtC,SAAS;YACX,CAAC;iBAAM,IAAI,aAAa,IAAI,OAAO,EAAE,CAAC;gBACpC,yCAAyC;YAC3C,CAAC;iBAAM,IAAI,IAAI,EAAE,CAAC;gBAChB,IAAI,iBAAiB,EAAE,CAAC;oBACtB,gEAAgE;oBAChE,+DAA+D;oBAC/D,2DAA2D;oBAC3D,iEAAiE;oBACjE,4DAA4D;oBAC5D,yDAAyD;oBACzD,mBAAmB,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;oBACnE,kBAAkB,GAAG,IAAI,CAAC;gBAC5B,CAAC;qBAAM,IAAI,YAAY,IAAI,kBAAkB,EAAE,CAAC;oBAC9C,gEAAgE;oBAChE,iEAAiE;oBACjE,4DAA4D;oBAC5D,iEAAiE;oBACjE,uDAAuD;oBACvD,mBAAmB,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;oBACnE,kBAAkB,GAAG,KAAK,CAAC;oBAC3B,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC;gBAChD,CAAC;qBAAM,CAAC;oBACN,mBAAmB,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,WAAW,KAAK,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;oBAC3F,kBAAkB,GAAG,KAAK,CAAC;oBAC3B,IAAI,CAAC,aAAa,EAAE,CAAC;wBACnB,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC;oBAChD,CAAC;gBACH,CAAC;YACH,CAAC;YAED,0EAA0E;YAC1E,uEAAuE;YACvE,IAAI,OAAO,CAAC,eAAe,IAAI,aAAa,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/E,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACjD,MAAM,YAAY,GAA4B,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;gBAC9E,YAAY,CAAC,aAAa,GAAG,YAAY,CAAC;gBAC1C,mBAAmB,EAAE,CAAC;gBACtB,gBAAgB,CAAC,IAAI,CAAC;oBACpB,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,CAAC,YAAY,CAAC;iBACxB,CAAC,CAAC;gBACH,mBAAmB,GAAG,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC;QAED,wBAAwB;QACxB,IAAI,UAAkB,CAAC;QACvB,IAAI,QAAQ,EAAE,OAAO,EAAE,CAAC;YACtB,UAAU,GAAG,GAAG,oBAAoB,cAAc,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,UAAU,GAAG,GAAG,oBAAoB,GAAG,CAAC;QAC1C,CAAC;QAED,+BAA+B;QAC/B,IAAI,uBAAuB,IAAI,CAAC,aAAa,EAAE,CAAC;YAC9C,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,gBAAgB,CAAC,IAAI,CAAC;gBACpB,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,CAAC,GAAG,mBAAmB,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;aAC3D,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,gBAAgB,CAAC,IAAI,CAAC;gBACpB,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,UAAU;aACpB,CAAC,CAAC;QACL,CAAC;QAED,sEAAsE;QACtE,wDAAwD;QACxD,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAE,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACxE,IAAI,kBAAkB,EAAE,CAAC;gBACvB,mDAAmD;gBACnD,gBAAgB,CAAC,OAAO,CAAC;oBACvB,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,kBAAkB;iBAC5B,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,CAAC,UAAU,EAAE,CAAC;gBACvB,yEAAyE;gBACzE,yDAAyD;gBACzD,MAAM,cAAc,GAA4B;oBAC9C,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,wHAAwH;iBAC/H,CAAC;gBACF,IAAI,aAAa,EAAE,CAAC;oBAClB,cAAc,CAAC,aAAa,GAAG,YAAY,CAAC;oBAC5C,mBAAmB,EAAE,CAAC;gBACxB,CAAC;gBACD,aAAa,GAAG,CAAC,cAAc,CAAC,CAAC;gBACjC,gBAAgB,CAAC,OAAO,CAAC;oBACvB,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,6BAA6B;iBACvC,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,kEAAkE;gBAClE,gBAAgB,CAAC,OAAO,CAAC;oBACvB,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,SAAS;iBACnB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,uBAAuB;QACvB,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,oBAAoB,EAAE,OAAO,CAAC,CAAC;QAEvF,6BAA6B;QAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,KAAK,EAAE,MAAM;YACpE,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;YAClC,CAAC,CAAC,SAAS,CAAC;QAEd,OAAO;YACL,QAAQ,EAAE,gBAAgB;YAC1B,aAAa;YACb,gBAAgB,EAAE,OAAO,gBAAgB,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,QAAQ;gBAC1F,CAAC,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,OAAiB;gBAClE,CAAC,CAAC,SAAS;YACb,aAAa;YACb,WAAW;YACX,mBAAmB;SACpB,CAAC;IACJ,CAAC;IAED,iBAAiB,CAAC,OAAqB,EAAE,OAAgC;QACvE,IAAI,GAAG,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,OAAO,EAAE,QAAQ,EAAE,CAAC;YACtB,GAAG,IAAI,cAAc,CAAC;QACxB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,6EAA6E;IAC7E,mBAAmB;IACnB,6EAA6E;IAE7E,kBAAkB;QAChB,OAAO,IAAI,oBAAoB,EAAE,CAAC;IACpC,CAAC;IAED,cAAc,CAAC,OAAe;QAC5B,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC1C,OAAO,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,UAAU,CAAC,OAAe;QACxB,OAAO,2BAA2B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACnD,CAAC;IAED,kBAAkB,CAAC,OAAe;QAChC,MAAM,EAAE,MAAM,EAAE,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAC;QACvD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,6EAA6E;IAC7E,kBAAkB;IAClB,6EAA6E;IAErE,cAAc,CACpB,OAAuB,EACvB,WAAmB;QAEnB,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAc,EAAE,CAAC;QAC7B,IAAI,mBAAmB,GAAG,KAAK,CAAC;QAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;YAC1B,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC1B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAClC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACnC,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;wBACtD,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC;oBACpE,CAAC;yBAAM,CAAC;wBACN,MAAM,CAAC,IAAI,CAAC;4BACV,IAAI,EAAE,OAAO;4BACb,MAAM,EAAE;gCACN,IAAI,EAAE,QAAQ;gCACd,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS;gCAClC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;6BACxB;yBACF,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBACrC,iEAAiE;gBACjE,+DAA+D;gBAC/D,MAAM,GAAG,GAAqB,EAAE,CAAC;gBACjC,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAE,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;oBAC7D,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAmB,CAAC,CAAC;oBACvC,CAAC,EAAE,CAAC;gBACN,CAAC;gBACD,CAAC,EAAE,CAAC;gBACJ,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5C,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;gBACxC,MAAM,GAAG,GAAwB,EAAE,CAAC;gBACpC,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAE,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;oBAChE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAsB,CAAC,CAAC;oBAC1C,CAAC,EAAE,CAAC;gBACN,CAAC;gBACD,CAAC,EAAE,CAAC;gBACJ,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/C,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC/D,mBAAmB,GAAG,IAAI,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;IACjE,CAAC;IAED;;;;;;;;;;;OAWG;IACK,gBAAgB,CAAC,GAAqB;QAC5C,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,IAAI,MAAM,GAAqB,EAAE,CAAC;QAClC,IAAI,OAA2B,CAAC;QAEhC,MAAM,WAAW,GAAG,GAAG,EAAE;YACvB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC9C,MAAM,GAAG,EAAE,CAAC;YACd,CAAC;QACH,CAAC,CAAC;QAEF,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;YACxB,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjB,WAAW,EAAE,CAAC;gBACd,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;oBAC7B,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACzB,CAAC;gBACD,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,SAAS,CAAC;gBACpB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QACD,WAAW,EAAE,CAAC;QACd,OAAO,GAAG,CAAC;IACb,CAAC;IAED,qEAAqE;IAC7D,mBAAmB,CAAC,GAAwB;QAClD,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,IAAI,MAAM,GAAwB,EAAE,CAAC;QACrC,IAAI,OAA2B,CAAC;QAEhC,MAAM,WAAW,GAAG,GAAG,EAAE;YACvB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBACzD,MAAM,GAAG,EAAE,CAAC;YACd,CAAC;QACH,CAAC,CAAC;QAEF,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;YACxB,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjB,WAAW,EAAE,CAAC;gBACd,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;oBAC7B,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACzB,CAAC;gBACD,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,SAAS,CAAC;gBACpB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QACD,WAAW,EAAE,CAAC;QACd,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;OAIG;IACK,sBAAsB,CAAC,MAAwB;QACrD,MAAM,KAAK,GAAG,CAAC,kBAAkB,CAAC,CAAC;QACnC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC;YAC5C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxD,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBACvE,KAAK,CAAC,IAAI,CAAC,oBAAoB,IAAI,KAAK,IAAI,cAAc,CAAC,CAAC;YAC9D,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC1B,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAChC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAEO,wBAAwB,CAAC,KAAuB;QACtD,MAAM,cAAc,GAA8B,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACrE,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU;gBACrC,CAAC,CAAC,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;oBAClE,IAAI;oBACJ;wBACE,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,WAAW,EAAE,MAAM,CAAC,WAAW;wBAC/B,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC;wBACnD,IAAI,EAAE,MAAM,CAAC,IAAI;qBAClB;iBACF,CAAC,CACH;gBACH,CAAC,CAAC,EAAE;SACP,CAAC,CAAC,CAAC;QAEJ,OAAO,qBAAqB,CAAC,cAAc,CAAC,CAAC;IAC/C,CAAC;IAEO,uBAAuB,CAAC,KAAuB;QACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;QAEtD,mDAAmD;QACnD,MAAM,eAAe,GAAG,GAAG,GAAG,iBAAiB,CAAC;QAChD,MAAM,gBAAgB,GAAG,IAAI,GAAG,iBAAiB,CAAC;QAClD,MAAM,WAAW,GAAG,GAAG,GAAG,eAAe,CAAC;QAC1C,MAAM,YAAY,GAAG,IAAI,GAAG,SAAS,CAAC;QACtC,MAAM,UAAU,GAAG,GAAG,GAAG,kBAAkB,CAAC;QAC5C,MAAM,WAAW,GAAG,IAAI,GAAG,YAAY,CAAC;QAExC,OAAO;;EAET,QAAQ;;;;EAIR,eAAe;EACf,WAAW;EACX,UAAU,oBAAoB,WAAW;EACzC,YAAY;EACZ,gBAAgB,EAAE,CAAC;IACnB,CAAC;IAEO,qBAAqB,CAAC,MAAc,EAAE,QAAgB;QAC5D,MAAM,YAAY,GAAG;;EAEvB,QAAQ;;;;;;;;;CAST,CAAC;QACE,OAAO,MAAM,GAAG,MAAM,GAAG,YAAY,CAAC;IACxC,CAAC;IAEO,kBAAkB,CACxB,QAA6B,EAC7B,aAAqB,EACrB,OAAqB;QAErB,MAAM,SAAS,GAAa,EAAE,CAAC;QAE/B,8DAA8D;QAC9D,MAAM,eAAe,GAAG,OAAO,CAAC,sBAAsB,IAAI,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC;QAE7F,oDAAoD;QACpD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;QACvC,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,IAAI,GAAG,eAAe,EAAE,CAAC,EAAE,EAAE,CAAC;YACrF,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,OAAO,IAAI,OAAO,CAAC,WAAW,KAAK,aAAa,EAAE,CAAC;gBACrD,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QAED,0BAA0B;QAC1B,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;YACvC,SAAS,CAAC,IAAI,CAAC,KAAK,WAAW,GAAG,CAAC,CAAC;QACtC,CAAC;QAED,oBAAoB;QACpB,SAAS,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAEpC,iDAAiD;QACjD,IAAI,OAAO,CAAC,uBAAuB,EAAE,MAAM,EAAE,CAAC;YAC5C,SAAS,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;QACrD,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,oBAAoB,CAAC,KAAuB;QAClD,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACxB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,YAAY,EAAE,IAAI,CAAC,WAAW;SAC/B,CAAC,CAAC,CAAC;IACN,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"anthropic-xml.js","sourceRoot":"","sources":["../../src/formatters/anthropic-xml.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,6 +38,13 @@ import type { NormalizeEvent } from './types.js';
|
|
|
38
38
|
export type ProviderBlock = Record<string, unknown> & {
|
|
39
39
|
type: string;
|
|
40
40
|
};
|
|
41
|
+
/**
|
|
42
|
+
* The repairs that rewrite prefix bytes, derived from the exhaustive
|
|
43
|
+
* classification above. Consumers gate cache placement on this SET rather
|
|
44
|
+
* than on a single kind, so a normalizer that grows another prefix-rewriting
|
|
45
|
+
* repair is covered at every cache site by classifying it once.
|
|
46
|
+
*/
|
|
47
|
+
export declare const PREFIX_REWRITING_NORMALIZE_EVENT_KINDS: ReadonlySet<NormalizeEvent['kind']>;
|
|
41
48
|
export interface NormalizeOptions {
|
|
42
49
|
/** See `BuildOptions.pendingToolCallIds`. */
|
|
43
50
|
pendingToolCallIds?: ReadonlySet<string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize-tool-pairs.d.ts","sourceRoot":"","sources":["../../src/formatters/normalize-tool-pairs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,eAAe,IAAI,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAMjD;;;;;;;;GAQG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"normalize-tool-pairs.d.ts","sourceRoot":"","sources":["../../src/formatters/normalize-tool-pairs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,eAAe,IAAI,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAMjD;;;;;;;;GAQG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AA0CvE;;;;;GAKG;AACH,eAAO,MAAM,sCAAsC,EAAE,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,CACvD,CAAC;AAEjC,MAAM,WAAW,gBAAgB;IAC/B,6CAA6C;IAC7C,kBAAkB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACzC,sCAAsC;IACtC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;CAC3C;AAED,MAAM,WAAW,eAAe;IAC9B;;;;;;OAMG;IACH,QAAQ,EAAE,oBAAoB,EAAE,CAAC;IACjC;;;;OAIG;IACH,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,qBAAa,uBAAwB,SAAQ,KAAK;aAG9B,KAAK,EAAE,aAAa,CAAC,oBAAoB,CAAC;aAC1C,MAAM,EAAE,aAAa,CAAC,oBAAoB,CAAC;gBAF3D,OAAO,EAAE,MAAM,EACC,KAAK,EAAE,aAAa,CAAC,oBAAoB,CAAC,EAC1C,MAAM,EAAE,aAAa,CAAC,oBAAoB,CAAC;CAK9D;AAMD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,aAAa,CAAC,oBAAoB,CAAC,EAC1C,OAAO,GAAE,gBAAqB,GAC7B,eAAe,CAuIjB;AAodD;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,aAAa,CAAC,oBAAoB,CAAC,GAC5C,oBAAoB,EAAE,CAsBxB"}
|
|
@@ -24,6 +24,51 @@
|
|
|
24
24
|
* empty envelopes, prepend a synthetic `[continuing]` user envelope when
|
|
25
25
|
* the first envelope ended up assistant-role, validate.
|
|
26
26
|
*/
|
|
27
|
+
/**
|
|
28
|
+
* Does this repair REWRITE prefix bytes, or only re-shape envelopes?
|
|
29
|
+
*
|
|
30
|
+
* The two `true` entries are placeholders that get rewritten again the moment
|
|
31
|
+
* the real pairing arrives — the synthetic `[pending]` result when its
|
|
32
|
+
* tool_result lands, the textified orphan when its tool_use does — so a cache
|
|
33
|
+
* breakpoint placed at or past one caches a prefix that is about to change,
|
|
34
|
+
* poisoning every subsequent read.
|
|
35
|
+
*
|
|
36
|
+
* EVERY kind is listed, and the type is a `Record` over the whole union
|
|
37
|
+
* precisely so the compiler forces that: a new `NormalizeEvent` kind is a
|
|
38
|
+
* missing-property error here until someone decides which side it falls on.
|
|
39
|
+
* The previous shape (`[...] satisfies Array<NormalizeEvent['kind']>`) only
|
|
40
|
+
* checked that the listed kinds were REAL, and a `satisfies` on an array
|
|
41
|
+
* accepts any subset — so a new prefix-rewriting repair could be added to the
|
|
42
|
+
* union, never listed, and silently escape the cache gate below while the
|
|
43
|
+
* comment claimed a compile error that did not exist.
|
|
44
|
+
*
|
|
45
|
+
* NOTE FOR COMPOSE: the `stray_tool_result_textified` kind landing from the
|
|
46
|
+
* stray-orphan lane belongs here as `true` — it rewrites prefix bytes for the
|
|
47
|
+
* same reason `orphan_tool_result_textified` does.
|
|
48
|
+
*/
|
|
49
|
+
const NORMALIZE_EVENT_REWRITES_PREFIX = {
|
|
50
|
+
block_re_roled: false,
|
|
51
|
+
tool_result_hoisted: false,
|
|
52
|
+
interloper_deferred: false,
|
|
53
|
+
synthetic_pending_result: true,
|
|
54
|
+
orphan_tool_result_textified: true,
|
|
55
|
+
pending_in_flight: false,
|
|
56
|
+
cache_suppressed_for_synthetic: false,
|
|
57
|
+
leading_user_synthesized: false,
|
|
58
|
+
};
|
|
59
|
+
function deriveKindsThatRewritePrefix() {
|
|
60
|
+
const kinds = Object.entries(NORMALIZE_EVENT_REWRITES_PREFIX)
|
|
61
|
+
.filter(([, rewritesPrefix]) => rewritesPrefix)
|
|
62
|
+
.map(([kind]) => kind);
|
|
63
|
+
return new Set(kinds);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* The repairs that rewrite prefix bytes, derived from the exhaustive
|
|
67
|
+
* classification above. Consumers gate cache placement on this SET rather
|
|
68
|
+
* than on a single kind, so a normalizer that grows another prefix-rewriting
|
|
69
|
+
* repair is covered at every cache site by classifying it once.
|
|
70
|
+
*/
|
|
71
|
+
export const PREFIX_REWRITING_NORMALIZE_EVENT_KINDS = deriveKindsThatRewritePrefix();
|
|
27
72
|
export class MembraneNormalizerError extends Error {
|
|
28
73
|
input;
|
|
29
74
|
output;
|