@animalabs/membrane 0.5.78 → 0.5.80

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.
Files changed (58) hide show
  1. package/dist/cache-keepalive.d.ts +115 -0
  2. package/dist/cache-keepalive.d.ts.map +1 -0
  3. package/dist/cache-keepalive.js +0 -0
  4. package/dist/cache-keepalive.js.map +1 -0
  5. package/dist/cache-keepalive.test.d.ts +2 -0
  6. package/dist/cache-keepalive.test.d.ts.map +1 -0
  7. package/dist/cache-keepalive.test.js +206 -0
  8. package/dist/cache-keepalive.test.js.map +1 -0
  9. package/dist/floating-cache-marker.test.d.ts +2 -0
  10. package/dist/floating-cache-marker.test.d.ts.map +1 -0
  11. package/dist/floating-cache-marker.test.js +242 -0
  12. package/dist/floating-cache-marker.test.js.map +1 -0
  13. package/dist/formatters/anthropic-xml.d.ts.map +1 -1
  14. package/dist/formatters/anthropic-xml.js +30 -2
  15. package/dist/formatters/anthropic-xml.js.map +1 -1
  16. package/dist/index.d.ts +2 -0
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +2 -0
  19. package/dist/index.js.map +1 -1
  20. package/dist/membrane.d.ts +7 -1
  21. package/dist/membrane.d.ts.map +1 -1
  22. package/dist/membrane.js +148 -5
  23. package/dist/membrane.js.map +1 -1
  24. package/dist/providers/anthropic.d.ts +20 -0
  25. package/dist/providers/anthropic.d.ts.map +1 -1
  26. package/dist/providers/anthropic.js +23 -3
  27. package/dist/providers/anthropic.js.map +1 -1
  28. package/dist/providers/bedrock.d.ts.map +1 -1
  29. package/dist/providers/bedrock.js +31 -2
  30. package/dist/providers/bedrock.js.map +1 -1
  31. package/dist/types/config.d.ts +5 -0
  32. package/dist/types/config.d.ts.map +1 -1
  33. package/dist/types/config.js.map +1 -1
  34. package/dist/types/content.d.ts +5 -0
  35. package/dist/types/content.d.ts.map +1 -1
  36. package/dist/types/content.js.map +1 -1
  37. package/dist/types/request.d.ts +13 -0
  38. package/dist/types/request.d.ts.map +1 -1
  39. package/dist/types/tools.d.ts +19 -0
  40. package/dist/types/tools.d.ts.map +1 -1
  41. package/dist/utils/tool-parser.d.ts +16 -2
  42. package/dist/utils/tool-parser.d.ts.map +1 -1
  43. package/dist/utils/tool-parser.js +143 -35
  44. package/dist/utils/tool-parser.js.map +1 -1
  45. package/package.json +3 -2
  46. package/src/cache-keepalive.test.ts +244 -0
  47. package/src/cache-keepalive.ts +385 -0
  48. package/src/floating-cache-marker.test.ts +261 -0
  49. package/src/formatters/anthropic-xml.ts +30 -2
  50. package/src/index.ts +13 -0
  51. package/src/membrane.ts +143 -5
  52. package/src/providers/anthropic.ts +46 -3
  53. package/src/providers/bedrock.ts +32 -1
  54. package/src/types/config.ts +6 -0
  55. package/src/types/content.ts +5 -0
  56. package/src/types/request.ts +14 -0
  57. package/src/types/tools.ts +20 -0
  58. package/src/utils/tool-parser.ts +147 -36
@@ -156,37 +156,89 @@ export function endsWithPartialToolBlock(text) {
156
156
  // Tool Result Formatting
157
157
  // ============================================================================
158
158
  /**
159
- * Format tool results as XML for injection.
160
- * Handles both string content and structured content blocks (with images).
159
+ * Structural tags of the XML tool convention. Result content containing any
160
+ * of these must be escaped or it would desync the document/stream parser;
161
+ * everything else rides raw (legacy convention — full escapeXml put `"`
162
+ * entities in front of the model, which Claude-3-era models then reproduce
163
+ * in their own output).
164
+ */
165
+ const STRUCTURAL_TAG_RE = /<\/?(?:antml:)?(?:function_calls|function_results|invoke|result|stdout|error|tool_name)\b/;
166
+ function renderResultContentString(result) {
167
+ if (typeof result.content === 'string') {
168
+ return result.content;
169
+ }
170
+ const parts = [];
171
+ for (const block of result.content) {
172
+ if (block.type === 'text') {
173
+ parts.push(block.text);
174
+ }
175
+ else if (block.type === 'image') {
176
+ // For XML mode, we can't embed images directly
177
+ // Add a note about the image for the model
178
+ const sizeKb = Math.round((block.source.data.length * 0.75) / 1024);
179
+ parts.push(`[Image: ${block.source.mediaType}, ~${sizeKb}KB]`);
180
+ }
181
+ }
182
+ return parts.join('\n');
183
+ }
184
+ /**
185
+ * Format tool results as XML for injection — the LEGACY Anthropic tool
186
+ * convention Claude-3-era models were trained on:
187
+ *
188
+ * <function_results>
189
+ * <result>
190
+ * <tool_name>NAME</tool_name>
191
+ * <stdout>
192
+ * content
193
+ * </stdout>
194
+ * </result>
195
+ * </function_results>
196
+ *
197
+ * Errors render as <error>…</error> inside <function_results>. No
198
+ * tool_use_id attributes on the wire (a Messages-API concept — the
199
+ * store keeps the linkage on the blocks); content rides raw unless it
200
+ * contains structural tags (then escaped, see STRUCTURAL_TAG_RE).
161
201
  */
162
202
  export function formatToolResults(results) {
163
203
  const parts = ['<function_results>'];
164
204
  for (const result of results) {
165
- const tagName = result.isError ? 'error' : 'result';
166
- parts.push(`<${tagName} tool_use_id="${result.toolUseId}">`);
167
- // Handle both string and array content
168
- if (typeof result.content === 'string') {
169
- parts.push(escapeXml(result.content));
205
+ if (result.isError) {
206
+ parts.push('<error>');
207
+ parts.push(guardResultContent(renderResultContentString(result)));
208
+ parts.push('</error>');
170
209
  }
171
- else if (Array.isArray(result.content)) {
172
- // Structured content blocks
173
- for (const block of result.content) {
174
- if (block.type === 'text') {
175
- parts.push(escapeXml(block.text));
176
- }
177
- else if (block.type === 'image') {
178
- // For XML mode, we can't embed images directly
179
- // Add a note about the image for the model
180
- const sizeKb = Math.round((block.source.data.length * 0.75) / 1024);
181
- parts.push(`[Image: ${block.source.mediaType}, ~${sizeKb}KB]`);
182
- }
210
+ else {
211
+ parts.push('<result>');
212
+ if (result.toolName) {
213
+ parts.push(`<tool_name>${result.toolName}</tool_name>`);
183
214
  }
215
+ parts.push('<stdout>');
216
+ parts.push(guardResultContent(renderResultContentString(result)));
217
+ parts.push('</stdout>');
218
+ parts.push('</result>');
184
219
  }
185
- parts.push(`</${tagName}>`);
186
220
  }
187
221
  parts.push('</function_results>');
188
222
  return parts.join('\n');
189
223
  }
224
+ /** Escape result content only when it would desync the structural parse. */
225
+ function guardResultContent(s) {
226
+ return STRUCTURAL_TAG_RE.test(s) ? escapeXml(s) : s;
227
+ }
228
+ /** Opening XML of one result, up to where its content begins. */
229
+ function resultOpenXml(result) {
230
+ if (result.isError)
231
+ return '<error>\n';
232
+ let xml = '<result>\n';
233
+ if (result.toolName)
234
+ xml += `<tool_name>${result.toolName}</tool_name>\n`;
235
+ xml += '<stdout>\n';
236
+ return xml;
237
+ }
238
+ /** Closing XML of one result, after its content. */
239
+ function resultCloseXml(result) {
240
+ return result.isError ? '\n</error>\n' : '\n</stdout>\n</result>\n';
241
+ }
190
242
  /**
191
243
  * Format a single tool result
192
244
  */
@@ -232,6 +284,11 @@ const FUNCTION_RESULTS_BLOCK_REGEX = /<(antml:)?function_results>([\s\S]*?)<\/(a
232
284
  // Regex for individual result/error within function_results
233
285
  const RESULT_REGEX = /<result\s+tool_use_id="([^"]+)">([\s\S]*?)<\/result>/g;
234
286
  const ERROR_REGEX = /<error\s+tool_use_id="([^"]+)">([\s\S]*?)<\/error>/g;
287
+ // Legacy Anthropic convention — no ids on the wire; results pair
288
+ // positionally with the preceding unmatched tool calls in document order
289
+ // (optionally disambiguated by <tool_name>).
290
+ const LEGACY_RESULT_REGEX = /<result>\s*(?:<tool_name>([\s\S]*?)<\/tool_name>\s*)?<stdout>\n?([\s\S]*?)\n?<\/stdout>\s*<\/result>/g;
291
+ const LEGACY_ERROR_REGEX = /<error>\n?([\s\S]*?)\n?<\/error>/g;
235
292
  /**
236
293
  * Parse accumulated assistant text into structured ContentBlock[].
237
294
  * Extracts thinking blocks, tool calls, tool results, and plain text.
@@ -258,6 +315,23 @@ export function parseAccumulatedIntoBlocks(text, options) {
258
315
  const toolCalls = [];
259
316
  const toolResults = [];
260
317
  const positions = [];
318
+ // Call sites in document order, for pairing legacy-shaped results
319
+ // (no tool_use_id on the wire) with the calls they answer.
320
+ const callSites = [];
321
+ const pairedCallIds = new Set();
322
+ const claimCall = (beforePos, name) => {
323
+ for (const site of callSites) {
324
+ if (site.pos >= beforePos)
325
+ break;
326
+ if (pairedCallIds.has(site.id))
327
+ continue;
328
+ if (name && site.name !== name)
329
+ continue;
330
+ pairedCallIds.add(site.id);
331
+ return site.id;
332
+ }
333
+ return generateToolId();
334
+ };
261
335
  // Find all thinking blocks
262
336
  THINKING_BLOCK_REGEX.lastIndex = 0;
263
337
  let thinkingMatch;
@@ -300,6 +374,7 @@ export function parseAccumulatedIntoBlocks(text, options) {
300
374
  const id = generateToolId();
301
375
  const toolCall = { id, name: toolName, input };
302
376
  toolCalls.push(toolCall);
377
+ callSites.push({ id, name: toolName, pos: funcMatch.index });
303
378
  blockToolCalls.push({
304
379
  type: 'tool_use',
305
380
  id,
@@ -316,6 +391,7 @@ export function parseAccumulatedIntoBlocks(text, options) {
316
391
  const id = generateToolId();
317
392
  const toolCall = { id, name: toolName, input: {} };
318
393
  toolCalls.push(toolCall);
394
+ callSites.push({ id, name: toolName, pos: funcMatch.index });
319
395
  blockToolCalls.push({
320
396
  type: 'tool_use',
321
397
  id,
@@ -347,6 +423,7 @@ export function parseAccumulatedIntoBlocks(text, options) {
347
423
  while ((resultMatch = RESULT_REGEX.exec(innerContent)) !== null) {
348
424
  const toolUseId = resultMatch[1] ?? '';
349
425
  const content = unescapeXml(resultMatch[2] ?? '');
426
+ pairedCallIds.add(toolUseId);
350
427
  const result = { toolUseId, content, isError: false };
351
428
  toolResults.push(result);
352
429
  blockResults.push({
@@ -363,6 +440,7 @@ export function parseAccumulatedIntoBlocks(text, options) {
363
440
  while ((errorMatch = ERROR_REGEX.exec(innerContent)) !== null) {
364
441
  const toolUseId = errorMatch[1] ?? '';
365
442
  const content = unescapeXml(errorMatch[2] ?? '');
443
+ pairedCallIds.add(toolUseId);
366
444
  const result = { toolUseId, content, isError: true };
367
445
  toolResults.push(result);
368
446
  blockResults.push({
@@ -373,6 +451,38 @@ export function parseAccumulatedIntoBlocks(text, options) {
373
451
  rawXml,
374
452
  });
375
453
  }
454
+ // Legacy-shaped results/errors (no ids on the wire): pair positionally
455
+ // with the preceding unclaimed calls, disambiguated by <tool_name>.
456
+ LEGACY_RESULT_REGEX.lastIndex = 0;
457
+ let legacyResultMatch;
458
+ while ((legacyResultMatch = LEGACY_RESULT_REGEX.exec(innerContent)) !== null) {
459
+ const toolName = legacyResultMatch[1]?.trim() || undefined;
460
+ const content = unescapeXml(legacyResultMatch[2] ?? '');
461
+ const toolUseId = claimCall(resultsMatch.index, toolName);
462
+ toolResults.push({ toolUseId, toolName, content, isError: false });
463
+ blockResults.push({
464
+ type: 'tool_result',
465
+ toolUseId,
466
+ toolName,
467
+ content,
468
+ isError: false,
469
+ rawXml,
470
+ });
471
+ }
472
+ LEGACY_ERROR_REGEX.lastIndex = 0;
473
+ let legacyErrorMatch;
474
+ while ((legacyErrorMatch = LEGACY_ERROR_REGEX.exec(innerContent)) !== null) {
475
+ const content = unescapeXml(legacyErrorMatch[1] ?? '');
476
+ const toolUseId = claimCall(resultsMatch.index);
477
+ toolResults.push({ toolUseId, content, isError: true });
478
+ blockResults.push({
479
+ type: 'tool_result',
480
+ toolUseId,
481
+ content,
482
+ isError: true,
483
+ rawXml,
484
+ });
485
+ }
376
486
  if (blockResults.length > 0) {
377
487
  positions.push({
378
488
  start: resultsMatch.index,
@@ -490,22 +600,21 @@ export function formatToolResultsForSplitTurn(results) {
490
600
  let imageInsertionPoint = -1; // Index of result where we found images
491
601
  for (let i = 0; i < results.length; i++) {
492
602
  const result = results[i];
493
- const tagName = result.isError ? 'error' : 'result';
494
603
  // Check if this result has images
495
604
  let resultHasImages = false;
496
605
  let textParts = [];
497
606
  let resultImages = [];
498
607
  if (typeof result.content === 'string') {
499
- textParts.push(escapeXml(result.content));
608
+ textParts.push(guardResultContent(result.content));
500
609
  }
501
610
  else if (Array.isArray(result.content)) {
502
611
  for (const block of result.content) {
503
612
  if (block.type === 'text') {
504
- textParts.push(escapeXml(block.text));
613
+ textParts.push(guardResultContent(block.text));
505
614
  }
506
615
  else if (block.type === 'image') {
507
616
  if (!isAcceptedImageMediaType(block.source.mediaType)) {
508
- textParts.push(escapeXml(strippedImagePlaceholder(block.source.mediaType).text));
617
+ textParts.push(strippedImagePlaceholder(block.source.mediaType).text);
509
618
  }
510
619
  else {
511
620
  resultHasImages = true;
@@ -525,14 +634,14 @@ export function formatToolResultsForSplitTurn(results) {
525
634
  // First result with images - split here
526
635
  imageInsertionPoint = i;
527
636
  images.push(...resultImages);
528
- // Add opening tag and text content (no closing tag yet)
529
- beforeImageXml += `<${tagName} tool_use_id="${result.toolUseId}">\n`;
637
+ // Add opening tags and text content (no closing tags yet)
638
+ beforeImageXml += resultOpenXml(result);
530
639
  if (textParts.length > 0) {
531
640
  beforeImageXml += textParts.join('\n');
532
641
  }
533
- // Note: Intentionally NOT adding closing tag - split happens here
642
+ // Note: Intentionally NOT adding closing tags - split happens here
534
643
  // After image, we need to close this result and add remaining results
535
- afterImageXml = `</${tagName}>\n`;
644
+ afterImageXml = resultCloseXml(result);
536
645
  // Process remaining results into afterImageXml
537
646
  for (let j = i + 1; j < results.length; j++) {
538
647
  const remainingResult = results[j];
@@ -544,9 +653,9 @@ export function formatToolResultsForSplitTurn(results) {
544
653
  }
545
654
  else if (imageInsertionPoint === -1) {
546
655
  // No images yet - add full result to beforeImageXml
547
- beforeImageXml += `<${tagName} tool_use_id="${result.toolUseId}">\n`;
656
+ beforeImageXml += resultOpenXml(result);
548
657
  beforeImageXml += textParts.join('\n');
549
- beforeImageXml += `\n</${tagName}>\n`;
658
+ beforeImageXml += resultCloseXml(result);
550
659
  }
551
660
  }
552
661
  // If no images were found, complete the XML normally
@@ -570,15 +679,14 @@ export function formatToolResultsForSplitTurn(results) {
570
679
  * Format a single tool result as complete XML
571
680
  */
572
681
  function formatSingleResultXml(result) {
573
- const tagName = result.isError ? 'error' : 'result';
574
- let xml = `<${tagName} tool_use_id="${result.toolUseId}">\n`;
682
+ let xml = resultOpenXml(result);
575
683
  if (typeof result.content === 'string') {
576
- xml += escapeXml(result.content);
684
+ xml += guardResultContent(result.content);
577
685
  }
578
686
  else if (Array.isArray(result.content)) {
579
687
  for (const block of result.content) {
580
688
  if (block.type === 'text') {
581
- xml += escapeXml(block.text);
689
+ xml += guardResultContent(block.text);
582
690
  }
583
691
  else if (block.type === 'image') {
584
692
  // For remaining results after split, images become text placeholders
@@ -587,7 +695,7 @@ function formatSingleResultXml(result) {
587
695
  }
588
696
  }
589
697
  }
590
- xml += `\n</${tagName}>\n`;
698
+ xml += resultCloseXml(result);
591
699
  return xml;
592
700
  }
593
701
  // ============================================================================
@@ -1 +1 @@
1
- {"version":3,"file":"tool-parser.js","sourceRoot":"","sources":["../../src/utils/tool-parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-parser.js","sourceRoot":"","sources":["../../src/utils/tool-parser.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@animalabs/membrane",
3
- "version": "0.5.78",
3
+ "version": "0.5.80",
4
4
  "description": "LLM middleware - a selective boundary that transforms what passes through",
5
5
  "repository": {
6
6
  "type": "git",
@@ -24,7 +24,8 @@
24
24
  "typecheck": "tsc --noEmit",
25
25
  "test": "vitest run",
26
26
  "test:watch": "vitest",
27
- "test:coverage": "vitest run --coverage"
27
+ "test:coverage": "vitest run --coverage",
28
+ "version": "node scripts/release-changelog.mjs && git add CHANGELOG.md changelog.d"
28
29
  },
29
30
  "dependencies": {
30
31
  "@anthropic-ai/sdk": "^0.52.0"
@@ -0,0 +1,244 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
+ import {
3
+ CacheKeepalive,
4
+ ineligibleReason,
5
+ lineageKey,
6
+ type KeepaliveEvent,
7
+ } from './cache-keepalive.js';
8
+
9
+ /** A wire request shaped like what buildRequest() produces for a real turn. */
10
+ function wire(overrides: Record<string, unknown> = {}): Record<string, unknown> {
11
+ return {
12
+ model: 'claude-fable-5',
13
+ max_tokens: 32000,
14
+ stream: true,
15
+ thinking: { type: 'adaptive' },
16
+ system: [
17
+ { type: 'text', text: 'You are a resident.', cache_control: { type: 'ephemeral', ttl: '1h' } },
18
+ ],
19
+ messages: [
20
+ {
21
+ role: 'user',
22
+ content: [
23
+ { type: 'text', text: 'hello', cache_control: { type: 'ephemeral', ttl: '1h' } },
24
+ ],
25
+ },
26
+ ],
27
+ ...overrides,
28
+ };
29
+ }
30
+
31
+ const hit = { usage: { cache_read_input_tokens: 494_000, cache_creation_input_tokens: 0 } };
32
+
33
+ describe('ineligibleReason', () => {
34
+ it('accepts a normal 1h-cached adaptive-thinking request', () => {
35
+ expect(ineligibleReason(wire())).toBeNull();
36
+ });
37
+
38
+ it('rejects legacy budget_tokens thinking (max_tokens:0 is refused, and we must not disable thinking to fix it)', () => {
39
+ expect(ineligibleReason(wire({ thinking: { type: 'enabled', budget_tokens: 8000 } })))
40
+ .toBe('legacy-thinking-budget');
41
+ });
42
+
43
+ it('rejects forced tool_choice, which cannot be substituted without invalidating the messages cache', () => {
44
+ expect(ineligibleReason(wire({ tool_choice: { type: 'any' } }))).toBe('forced-tool-choice');
45
+ expect(ineligibleReason(wire({ tool_choice: { type: 'tool', name: 'x' } }))).toBe('forced-tool-choice');
46
+ expect(ineligibleReason(wire({ tool_choice: { type: 'auto' } }))).toBeNull();
47
+ });
48
+
49
+ it('rejects structured output, which the API refuses with max_tokens:0', () => {
50
+ expect(ineligibleReason(wire({ output_config: { format: { type: 'json_schema' } } })))
51
+ .toBe('structured-output');
52
+ });
53
+
54
+ it('rejects a request with no cache_control at all (the compression lane today)', () => {
55
+ const aux = wire({ system: undefined, messages: [{ role: 'user', content: 'compress this' }] });
56
+ expect(ineligibleReason(aux)).toBe('no-cache-breakpoint');
57
+ });
58
+
59
+ it('rejects a 5m-only request: poking a 5m entry every few minutes costs more than it saves', () => {
60
+ const short = wire({
61
+ system: [{ type: 'text', text: 's', cache_control: { type: 'ephemeral' } }],
62
+ messages: [{ role: 'user', content: [{ type: 'text', text: 'h', cache_control: { type: 'ephemeral', ttl: '5m' } }] }],
63
+ });
64
+ expect(ineligibleReason(short)).toBe('no-1h-breakpoint');
65
+ });
66
+ });
67
+
68
+ describe('lineageKey', () => {
69
+ it('is stable across turns that only append messages', () => {
70
+ const a = wire();
71
+ const b = wire({ messages: [...(wire().messages as unknown[]), { role: 'assistant', content: 'hi' }] });
72
+ expect(lineageKey(a)).toBe(lineageKey(b));
73
+ });
74
+
75
+ it('separates different agents, models, and tool sets', () => {
76
+ expect(lineageKey(wire())).not.toBe(lineageKey(wire({ model: 'claude-opus-5' })));
77
+ expect(lineageKey(wire())).not.toBe(
78
+ lineageKey(wire({ system: [{ type: 'text', text: 'different agent' }] })),
79
+ );
80
+ expect(lineageKey(wire())).not.toBe(lineageKey(wire({ tools: [{ name: 't' }] })));
81
+ });
82
+ });
83
+
84
+ describe('CacheKeepalive', () => {
85
+ beforeEach(() => vi.useFakeTimers());
86
+ afterEach(() => vi.useRealTimers());
87
+
88
+ const setup = (send: ReturnType<typeof vi.fn>, cfg = {}) => {
89
+ const events: KeepaliveEvent[] = [];
90
+ const ka = new CacheKeepalive(send as never, {
91
+ refreshAfterMs: 45 * 60_000,
92
+ checkIntervalMs: 5 * 60_000,
93
+ maxIdleMs: 24 * 60 * 60_000,
94
+ onEvent: (e) => events.push(e),
95
+ ...cfg,
96
+ });
97
+ return { ka, events };
98
+ };
99
+
100
+ it('does nothing while real traffic keeps the entry warm (the busy-agent case)', async () => {
101
+ const send = vi.fn().mockResolvedValue(hit);
102
+ const { ka } = setup(send);
103
+ // A turn every 10 minutes for 2 hours: real requests refresh the TTL for
104
+ // free, so the keepalive must never fire.
105
+ for (let i = 0; i < 12; i++) {
106
+ ka.record(wire(), undefined, 'stream');
107
+ await vi.advanceTimersByTimeAsync(10 * 60_000);
108
+ }
109
+ expect(send).not.toHaveBeenCalled();
110
+ ka.stop();
111
+ });
112
+
113
+ it('refreshes once the entry goes untouched past refreshAfterMs', async () => {
114
+ const send = vi.fn().mockResolvedValue(hit);
115
+ const { ka, events } = setup(send);
116
+ ka.record(wire(), undefined, 'stream');
117
+
118
+ await vi.advanceTimersByTimeAsync(40 * 60_000);
119
+ expect(send).not.toHaveBeenCalled();
120
+
121
+ await vi.advanceTimersByTimeAsync(10 * 60_000);
122
+ expect(send).toHaveBeenCalledTimes(1);
123
+ expect(events.some((e) => e.type === 'refreshed')).toBe(true);
124
+ ka.stop();
125
+ });
126
+
127
+ it('replays max_tokens:0 without stream, and changes nothing else', async () => {
128
+ const send = vi.fn().mockResolvedValue(hit);
129
+ const { ka } = setup(send);
130
+ const original = wire();
131
+ ka.record(original, { 'anthropic-beta': 'x' }, 'stream');
132
+ await vi.advanceTimersByTimeAsync(50 * 60_000);
133
+
134
+ const call = send.mock.calls[0]!;
135
+ const payload = call[0] as Record<string, unknown>;
136
+ const headers = call[1] as Record<string, string> | undefined;
137
+ expect(payload.max_tokens).toBe(0);
138
+ expect('stream' in payload).toBe(false);
139
+ expect(headers).toEqual({ 'anthropic-beta': 'x' });
140
+ // The cache-key-bearing fields must be untouched — this is the whole point.
141
+ expect(payload.thinking).toEqual({ type: 'adaptive' });
142
+ expect(payload.system).toBe(original.system);
143
+ expect(payload.messages).toBe(original.messages);
144
+ expect(payload.model).toBe('claude-fable-5');
145
+ ka.stop();
146
+ });
147
+
148
+ it('stops refreshing after maxIdleMs measured from the last REAL request', async () => {
149
+ const send = vi.fn().mockResolvedValue(hit);
150
+ const { ka, events } = setup(send, { maxIdleMs: 3 * 60 * 60_000 });
151
+ ka.record(wire(), undefined, 'stream');
152
+
153
+ await vi.advanceTimersByTimeAsync(3 * 60 * 60_000 + 60_000);
154
+ // Pokes must not extend their own mandate: ~3 refreshes, then expiry.
155
+ expect(events.some((e) => e.type === 'expired')).toBe(true);
156
+ const before = send.mock.calls.length;
157
+ await vi.advanceTimersByTimeAsync(6 * 60 * 60_000);
158
+ expect(send.mock.calls.length).toBe(before);
159
+ ka.stop();
160
+ });
161
+
162
+ it('detects a poke that WROTE instead of read, and gives up on that lineage', async () => {
163
+ // The silent-20x failure: a successful call that created a fresh 2x entry.
164
+ const send = vi.fn().mockResolvedValue({
165
+ usage: { cache_read_input_tokens: 0, cache_creation_input_tokens: 494_000 },
166
+ });
167
+ const { ka, events } = setup(send, { maxIneffective: 2 });
168
+ ka.record(wire(), undefined, 'stream');
169
+
170
+ await vi.advanceTimersByTimeAsync(50 * 60_000);
171
+ await vi.advanceTimersByTimeAsync(50 * 60_000);
172
+
173
+ const bad = events.filter((e) => e.type === 'ineffective');
174
+ expect(bad.length).toBe(2);
175
+ expect((bad[0] as { reason: string }).reason).toBe('wrote-instead-of-read');
176
+
177
+ const after = send.mock.calls.length;
178
+ await vi.advanceTimersByTimeAsync(4 * 60 * 60_000);
179
+ expect(send.mock.calls.length).toBe(after);
180
+ ka.stop();
181
+ });
182
+
183
+ it('treats an absent usage field as "not a read" rather than assuming success', async () => {
184
+ const send = vi.fn().mockResolvedValue({});
185
+ const { ka, events } = setup(send);
186
+ ka.record(wire(), undefined, 'stream');
187
+ await vi.advanceTimersByTimeAsync(50 * 60_000);
188
+ expect(events.some((e) => e.type === 'ineffective')).toBe(true);
189
+ ka.stop();
190
+ });
191
+
192
+ it('hard-disables after consecutive errors instead of becoming a retry storm', async () => {
193
+ // fable-cm, 2026-08-21: 1033 `400 invalid_request_error` in 3h from a
194
+ // background lane. A keepalive must never be able to do that.
195
+ const send = vi.fn().mockRejectedValue(new Error('400 invalid_request_error'));
196
+ const { ka, events } = setup(send, { maxConsecutiveErrors: 3 });
197
+ ka.record(wire(), undefined, 'stream');
198
+
199
+ await vi.advanceTimersByTimeAsync(24 * 60 * 60_000);
200
+
201
+ expect(send.mock.calls.length).toBe(3);
202
+ expect(events.some((e) => e.type === 'disabled')).toBe(true);
203
+ ka.stop();
204
+ });
205
+
206
+ it('ignores the aux lane by default', async () => {
207
+ const send = vi.fn().mockResolvedValue(hit);
208
+ const { ka } = setup(send);
209
+ ka.record(wire(), undefined, 'complete');
210
+ await vi.advanceTimersByTimeAsync(2 * 60 * 60_000);
211
+ expect(send).not.toHaveBeenCalled();
212
+ ka.stop();
213
+ });
214
+
215
+ it('evicts the oldest lineage past maxLineages to bound memory', () => {
216
+ const send = vi.fn().mockResolvedValue(hit);
217
+ const { ka } = setup(send, { maxLineages: 2 });
218
+ ka.record(wire({ model: 'a' }), undefined, 'stream');
219
+ ka.record(wire({ model: 'b' }), undefined, 'stream');
220
+ ka.record(wire({ model: 'c' }), undefined, 'stream');
221
+ expect(ka.getStatus().length).toBe(2);
222
+ ka.stop();
223
+ });
224
+
225
+ it('drops a snapshot when the request shape stops being warmable', () => {
226
+ const send = vi.fn().mockResolvedValue(hit);
227
+ const { ka, events } = setup(send);
228
+ ka.record(wire(), undefined, 'stream');
229
+ expect(ka.getStatus().length).toBe(1);
230
+ // Same lineage (model/system/tools identical), now with forced tool choice.
231
+ ka.record(wire({ tool_choice: { type: 'any' } }), undefined, 'stream');
232
+ expect(ka.getStatus().length).toBe(0);
233
+ expect(events.some((e) => e.type === 'skipped')).toBe(true);
234
+ ka.stop();
235
+ });
236
+
237
+ it('is inert when disabled', async () => {
238
+ const send = vi.fn().mockResolvedValue(hit);
239
+ const ka = new CacheKeepalive(send as never, { enabled: false });
240
+ ka.record(wire(), undefined, 'stream');
241
+ await vi.advanceTimersByTimeAsync(6 * 60 * 60_000);
242
+ expect(send).not.toHaveBeenCalled();
243
+ });
244
+ });