agentfootprint 2.5.0 → 2.6.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.
Files changed (116) hide show
  1. package/README.md +86 -0
  2. package/dist/adapters/llm/BrowserAnthropicProvider.js +68 -0
  3. package/dist/adapters/llm/BrowserAnthropicProvider.js.map +1 -1
  4. package/dist/cache/CacheDecisionSubflow.js +172 -0
  5. package/dist/cache/CacheDecisionSubflow.js.map +1 -0
  6. package/dist/cache/CacheGateDecider.js +122 -0
  7. package/dist/cache/CacheGateDecider.js.map +1 -0
  8. package/dist/cache/applyCachePolicy.js +55 -0
  9. package/dist/cache/applyCachePolicy.js.map +1 -0
  10. package/dist/cache/cacheRecorder.js +120 -0
  11. package/dist/cache/cacheRecorder.js.map +1 -0
  12. package/dist/cache/index.js +47 -0
  13. package/dist/cache/index.js.map +1 -0
  14. package/dist/cache/strategies/AnthropicCacheStrategy.js +102 -0
  15. package/dist/cache/strategies/AnthropicCacheStrategy.js.map +1 -0
  16. package/dist/cache/strategies/BedrockCacheStrategy.js +81 -0
  17. package/dist/cache/strategies/BedrockCacheStrategy.js.map +1 -0
  18. package/dist/cache/strategies/NoOpCacheStrategy.js +40 -0
  19. package/dist/cache/strategies/NoOpCacheStrategy.js.map +1 -0
  20. package/dist/cache/strategies/OpenAICacheStrategy.js +75 -0
  21. package/dist/cache/strategies/OpenAICacheStrategy.js.map +1 -0
  22. package/dist/cache/strategyRegistry.js +80 -0
  23. package/dist/cache/strategyRegistry.js.map +1 -0
  24. package/dist/cache/types.js +25 -0
  25. package/dist/cache/types.js.map +1 -0
  26. package/dist/conventions.js +18 -0
  27. package/dist/conventions.js.map +1 -1
  28. package/dist/core/Agent.js +173 -4
  29. package/dist/core/Agent.js.map +1 -1
  30. package/dist/esm/adapters/llm/BrowserAnthropicProvider.js +68 -0
  31. package/dist/esm/adapters/llm/BrowserAnthropicProvider.js.map +1 -1
  32. package/dist/esm/cache/CacheDecisionSubflow.js +166 -0
  33. package/dist/esm/cache/CacheDecisionSubflow.js.map +1 -0
  34. package/dist/esm/cache/CacheGateDecider.js +116 -0
  35. package/dist/esm/cache/CacheGateDecider.js.map +1 -0
  36. package/dist/esm/cache/applyCachePolicy.js +50 -0
  37. package/dist/esm/cache/applyCachePolicy.js.map +1 -0
  38. package/dist/esm/cache/cacheRecorder.js +116 -0
  39. package/dist/esm/cache/cacheRecorder.js.map +1 -0
  40. package/dist/esm/cache/index.js +36 -0
  41. package/dist/esm/cache/index.js.map +1 -0
  42. package/dist/esm/cache/strategies/AnthropicCacheStrategy.js +98 -0
  43. package/dist/esm/cache/strategies/AnthropicCacheStrategy.js.map +1 -0
  44. package/dist/esm/cache/strategies/BedrockCacheStrategy.js +77 -0
  45. package/dist/esm/cache/strategies/BedrockCacheStrategy.js.map +1 -0
  46. package/dist/esm/cache/strategies/NoOpCacheStrategy.js +36 -0
  47. package/dist/esm/cache/strategies/NoOpCacheStrategy.js.map +1 -0
  48. package/dist/esm/cache/strategies/OpenAICacheStrategy.js +71 -0
  49. package/dist/esm/cache/strategies/OpenAICacheStrategy.js.map +1 -0
  50. package/dist/esm/cache/strategyRegistry.js +73 -0
  51. package/dist/esm/cache/strategyRegistry.js.map +1 -0
  52. package/dist/esm/cache/types.js +24 -0
  53. package/dist/esm/cache/types.js.map +1 -0
  54. package/dist/esm/conventions.js +18 -0
  55. package/dist/esm/conventions.js.map +1 -1
  56. package/dist/esm/core/Agent.js +173 -4
  57. package/dist/esm/core/Agent.js.map +1 -1
  58. package/dist/esm/index.js +9 -0
  59. package/dist/esm/index.js.map +1 -1
  60. package/dist/esm/lib/injection-engine/factories/defineFact.js +3 -0
  61. package/dist/esm/lib/injection-engine/factories/defineFact.js.map +1 -1
  62. package/dist/esm/lib/injection-engine/factories/defineInstruction.js +3 -0
  63. package/dist/esm/lib/injection-engine/factories/defineInstruction.js.map +1 -1
  64. package/dist/esm/lib/injection-engine/factories/defineSkill.js +5 -0
  65. package/dist/esm/lib/injection-engine/factories/defineSkill.js.map +1 -1
  66. package/dist/esm/lib/injection-engine/factories/defineSteering.js +3 -0
  67. package/dist/esm/lib/injection-engine/factories/defineSteering.js.map +1 -1
  68. package/dist/index.js +9 -0
  69. package/dist/index.js.map +1 -1
  70. package/dist/lib/injection-engine/factories/defineFact.js +3 -0
  71. package/dist/lib/injection-engine/factories/defineFact.js.map +1 -1
  72. package/dist/lib/injection-engine/factories/defineInstruction.js +3 -0
  73. package/dist/lib/injection-engine/factories/defineInstruction.js.map +1 -1
  74. package/dist/lib/injection-engine/factories/defineSkill.js +5 -0
  75. package/dist/lib/injection-engine/factories/defineSkill.js.map +1 -1
  76. package/dist/lib/injection-engine/factories/defineSteering.js +3 -0
  77. package/dist/lib/injection-engine/factories/defineSteering.js.map +1 -1
  78. package/dist/types/adapters/types.d.ts +11 -0
  79. package/dist/types/adapters/types.d.ts.map +1 -1
  80. package/dist/types/cache/CacheDecisionSubflow.d.ts +89 -0
  81. package/dist/types/cache/CacheDecisionSubflow.d.ts.map +1 -0
  82. package/dist/types/cache/CacheGateDecider.d.ts +114 -0
  83. package/dist/types/cache/CacheGateDecider.d.ts.map +1 -0
  84. package/dist/types/cache/applyCachePolicy.d.ts +38 -0
  85. package/dist/types/cache/applyCachePolicy.d.ts.map +1 -0
  86. package/dist/types/cache/cacheRecorder.d.ts +86 -0
  87. package/dist/types/cache/cacheRecorder.d.ts.map +1 -0
  88. package/dist/types/cache/index.d.ts +34 -0
  89. package/dist/types/cache/index.d.ts.map +1 -0
  90. package/dist/types/cache/strategies/AnthropicCacheStrategy.d.ts +39 -0
  91. package/dist/types/cache/strategies/AnthropicCacheStrategy.d.ts.map +1 -0
  92. package/dist/types/cache/strategies/BedrockCacheStrategy.d.ts +34 -0
  93. package/dist/types/cache/strategies/BedrockCacheStrategy.d.ts.map +1 -0
  94. package/dist/types/cache/strategies/NoOpCacheStrategy.d.ts +30 -0
  95. package/dist/types/cache/strategies/NoOpCacheStrategy.d.ts.map +1 -0
  96. package/dist/types/cache/strategies/OpenAICacheStrategy.d.ts +37 -0
  97. package/dist/types/cache/strategies/OpenAICacheStrategy.d.ts.map +1 -0
  98. package/dist/types/cache/strategyRegistry.d.ts +46 -0
  99. package/dist/types/cache/strategyRegistry.d.ts.map +1 -0
  100. package/dist/types/cache/types.d.ts +244 -0
  101. package/dist/types/cache/types.d.ts.map +1 -0
  102. package/dist/types/conventions.d.ts +18 -0
  103. package/dist/types/conventions.d.ts.map +1 -1
  104. package/dist/types/core/Agent.d.ts +86 -2
  105. package/dist/types/core/Agent.d.ts.map +1 -1
  106. package/dist/types/index.d.ts +3 -0
  107. package/dist/types/index.d.ts.map +1 -1
  108. package/dist/types/lib/injection-engine/factories/defineFact.d.ts +9 -0
  109. package/dist/types/lib/injection-engine/factories/defineFact.d.ts.map +1 -1
  110. package/dist/types/lib/injection-engine/factories/defineInstruction.d.ts +11 -0
  111. package/dist/types/lib/injection-engine/factories/defineInstruction.d.ts.map +1 -1
  112. package/dist/types/lib/injection-engine/factories/defineSkill.d.ts +15 -0
  113. package/dist/types/lib/injection-engine/factories/defineSkill.d.ts.map +1 -1
  114. package/dist/types/lib/injection-engine/factories/defineSteering.d.ts +12 -0
  115. package/dist/types/lib/injection-engine/factories/defineSteering.d.ts.map +1 -1
  116. package/package.json +1 -1
package/README.md CHANGED
@@ -222,6 +222,92 @@ The framework owns the loop. The framework re-evaluates triggers every iteration
222
222
 
223
223
  **The flowchart-pattern substrate** ([footprintjs](https://github.com/footprintjs/footPrint)) is what makes the observation automatic. Every stage execution is a typed event during one DFS traversal — no instrumentation, no post-processing. Same way React DevTools shows you the component tree because React owns the render path, agentfootprint shows you the slot composition because agentfootprint owns the prompt path.
224
224
 
225
+ ### Side-by-side: classic vs Dynamic ReAct
226
+
227
+ [`examples/dynamic-react/`](./examples/dynamic-react/) ships two
228
+ mock-backed scripts solving the same SRE task with the same scripted
229
+ answers. Per-iteration tool-count progression makes the shape clear:
230
+
231
+ ```
232
+ Classic ReAct Dynamic ReAct
233
+ ─────────────── ─────────────
234
+ iter 1: 12 tools shown iter 1: 1 tool (read_skill)
235
+ iter 2: 12 tools shown iter 2: 5 tools (skill activated)
236
+ iter 3: 12 tools shown iter 3: 5 tools
237
+ iter 4: 12 tools shown iter 4: 5 tools
238
+ iter 5: 5 tools (final answer)
239
+ ```
240
+
241
+ The two unactivated skills' 8 tools never enter the LLM context.
242
+ **Classic ReAct has no equivalent**: every registered tool ships
243
+ on every call.
244
+
245
+ ### Real Anthropic benchmark — 3 models × 2 modes
246
+
247
+ We ran a real production-shaped agent (10 skills, 18 tools after dedup)
248
+ against Anthropic with Haiku 4.5, Sonnet 4.5, and Opus 4.5 in both
249
+ modes. Same prompt, same scenario data, real `usage.input_tokens`:
250
+
251
+ | Model | Classic in | Dynamic in | Δ | Notes |
252
+ | ----------- | ---------: | ---------: | -----: | ---------------------------------- |
253
+ | Haiku 4.5 | 25,755 | 36,341 | +41% | Classic 4 iters / Dynamic 6 iters |
254
+ | Sonnet 4.5 | 36,690 | 28,486 | −22% | Classic went serial; Dynamic wins |
255
+ | Opus 4.5 | 20,114 | 28,401 | +41% | Opus's parallel batching is best |
256
+
257
+ **Reality check**: at Neo's 18-tool / 10-skill scale, Dynamic ReAct's
258
+ total input-token cost depends on **how aggressively the model
259
+ parallelizes Classic mode**. Opus parallelizes best (3 iters, all
260
+ data tools in one round) so Classic minimizes iterations and wins.
261
+ Sonnet went serial that turn (5 iters) so Dynamic won. Haiku
262
+ parallelized well (4 iters) so Classic won.
263
+
264
+ Classic mode is **shape-variable** (3–5 iters depending on model
265
+ mood). Dynamic stays predictable at 5–6 iters across all models.
266
+
267
+ ### What Dynamic ReAct WINS even when it loses on raw tokens
268
+
269
+ 1. **Constant per-call payload**: `[2, 2, 6, 6, 6]` for Dynamic vs
270
+ `[18, 18, 18]` for Classic, regardless of registry size. Scales
271
+ to 50+ tool catalogs without ballooning per-call cost.
272
+ 2. **Deterministic routing**: `read_skill` forces scope before data
273
+ tools fire. LLM can't drift to off-topic tools.
274
+ 3. **Auditability**: each iteration's tool list is a function of
275
+ `activatedInjectionIds` — recorded, replayable, diff-able across
276
+ runs. Classic mode has no equivalent artifact.
277
+ 4. **Predictable cost**: Dynamic varies <5% across model sizes (28K-36K).
278
+ Classic varies 80%+ run-to-run depending on parallelization.
279
+
280
+ ### Where Dynamic ReAct WILL win on cost
281
+
282
+ The break-even is roughly **30+ tools across 8+ skills**. Below that,
283
+ classic mode often wins on raw tokens. Above it, Dynamic dominates
284
+ because Classic's tool-description payload grows linearly with the
285
+ catalog while Dynamic stays flat at active-skill size:
286
+
287
+ ```
288
+ Classic ReAct: 5 iters × 50 tools = 250 descriptions
289
+ Dynamic ReAct: 1 iter × 1 tool (read_skill)
290
+ + 4 iters × 5 tools (1 active) = 21 descriptions
291
+ ────────────
292
+ −92% on tool payload
293
+ ```
294
+
295
+ Plus the second-order win: **fewer tools per call → LLM less likely
296
+ to hallucinate or pick the wrong tool**. Narrower context = more
297
+ in-distribution on the active task. Increasingly load-bearing as
298
+ catalogs grow.
299
+
300
+ Run the side-by-side yourself:
301
+
302
+ ```sh
303
+ TSX_TSCONFIG_PATH=examples/runtime.tsconfig.json npx tsx examples/dynamic-react/01-classic-react.ts
304
+ TSX_TSCONFIG_PATH=examples/runtime.tsconfig.json npx tsx examples/dynamic-react/02-dynamic-react.ts
305
+ ```
306
+
307
+ Or for the real-Anthropic version, see
308
+ [`scripts/run-comparison.ts`](https://github.com/footprintjs/neo-mds-triage/blob/main/scripts/run-comparison.ts)
309
+ in the Neo repo.
310
+
225
311
  ---
226
312
 
227
313
  ## What you can build
@@ -217,8 +217,76 @@ function buildBody(req, defaultModel, defaultMaxTokens) {
217
217
  body.temperature = req.temperature;
218
218
  if (req.stop && req.stop.length > 0)
219
219
  body.stop_sequences = [...req.stop];
220
+ // v2.6+ cache markers — applied AFTER body construction so we have
221
+ // the materialized fields (system / tools / messages) to mark.
222
+ // Markers are clamped to Anthropic's 4-marker limit by
223
+ // AnthropicCacheStrategy before we get here, so the loop below
224
+ // doesn't need to enforce.
225
+ if (req.cacheMarkers && req.cacheMarkers.length > 0) {
226
+ applyCacheMarkers(body, req.cacheMarkers);
227
+ }
220
228
  return body;
221
229
  }
230
+ /**
231
+ * Apply CacheMarker[] to an Anthropic request body in-place.
232
+ *
233
+ * Per-field positional rules (Anthropic API):
234
+ * - `system`: convert from `string` → array of text blocks; mark
235
+ * the block at `boundaryIndex` (clamped to last block) with
236
+ * `cache_control`. We currently put the whole system prompt in
237
+ * ONE block, so any system marker effectively caches the whole
238
+ * prompt. Splitting into per-injection blocks is a v2.7+ refinement.
239
+ * - `tools`: mark the tool at `boundaryIndex` (clamped to last tool).
240
+ * - `messages`: mark the LAST content block of the LAST message in
241
+ * the cacheable prefix. Anthropic only honors cache_control on
242
+ * the final content block of the final cached message.
243
+ */
244
+ function applyCacheMarkers(body, markers) {
245
+ for (const m of markers) {
246
+ const cacheControl = m.ttl === 'long'
247
+ ? { type: 'ephemeral', ttl: '1h' }
248
+ : { type: 'ephemeral' };
249
+ if (m.field === 'system') {
250
+ // Convert string system → array form so we can attach
251
+ // cache_control. v2.6 ships single-block system prompt; v2.7
252
+ // may split per-injection for finer cache boundaries.
253
+ if (typeof body.system === 'string') {
254
+ body.system = [
255
+ {
256
+ type: 'text',
257
+ text: body.system,
258
+ cache_control: cacheControl,
259
+ },
260
+ ];
261
+ }
262
+ }
263
+ else if (m.field === 'tools' && body.tools && body.tools.length > 0) {
264
+ const idx = Math.min(m.boundaryIndex, body.tools.length - 1);
265
+ const tool = body.tools[idx];
266
+ tool.cache_control = cacheControl;
267
+ }
268
+ else if (m.field === 'messages' && body.messages.length > 0) {
269
+ // Mark the LAST content block of the LAST message in the
270
+ // cacheable prefix. Anthropic ONLY honors cache_control there.
271
+ const msgIdx = Math.min(m.boundaryIndex, body.messages.length - 1);
272
+ const msg = body.messages[msgIdx];
273
+ // String content → wrap in array so we can attach cache_control
274
+ if (typeof msg.content === 'string') {
275
+ body.messages[msgIdx].content = [
276
+ {
277
+ type: 'text',
278
+ text: msg.content,
279
+ cache_control: cacheControl,
280
+ },
281
+ ];
282
+ }
283
+ else if (Array.isArray(msg.content) && msg.content.length > 0) {
284
+ const last = msg.content[msg.content.length - 1];
285
+ last.cache_control = cacheControl;
286
+ }
287
+ }
288
+ }
289
+ }
222
290
  function toAnthropicMessages(messages) {
223
291
  const result = [];
224
292
  for (const m of messages) {
@@ -1 +1 @@
1
- {"version":3,"file":"BrowserAnthropicProvider.js","sourceRoot":"","sources":["../../../src/adapters/llm/BrowserAnthropicProvider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BrowserAnthropicProvider.js","sourceRoot":"","sources":["../../../src/adapters/llm/BrowserAnthropicProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ /**
3
+ * CacheDecision subflow — provider-agnostic translation from
4
+ * `activeInjections + DSL directives` → `CacheMarker[]`.
5
+ *
6
+ * This is the core "policy → markers" Lego layer. It runs every
7
+ * iteration (after slot subflows produce their output, before the
8
+ * CacheGate decider). Pure transform: no IO, no LLM calls, no
9
+ * provider knowledge.
10
+ *
11
+ * Algorithm:
12
+ * 1. Build a `CachePolicyContext` from agent state
13
+ * 2. For each injection in `activeInjections`, evaluate its
14
+ * `metadata.cache` directive against the context → cacheable boolean
15
+ * 3. For each slot (system / tools / messages):
16
+ * a. Walk the slot's contributions in order
17
+ * b. Find the LAST index that's contiguous-from-start cacheable
18
+ * c. Emit one CacheMarker at that boundary if any cacheable
19
+ *
20
+ * Each marker is provider-agnostic. Provider strategy translates
21
+ * to wire format in Phase 6+.
22
+ *
23
+ * Special case — base system prompt: the agent's
24
+ * `agent.getSystemPromptCachePolicy()` value is folded in at index 0
25
+ * of the system slot. Always-on injections (Steering / Fact /
26
+ * always-active rules) follow.
27
+ */
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.cacheDecisionSubflow = exports.computeCacheMarkers = exports.injectionTargetSlots = exports.evaluateCachePolicy = void 0;
30
+ const footprintjs_1 = require("footprintjs");
31
+ /**
32
+ * Evaluate a `CachePolicy` against the current context.
33
+ * Returns `true` if the policy says THIS iteration's content is cacheable.
34
+ */
35
+ function evaluateCachePolicy(policy, ctx) {
36
+ if (policy === 'always')
37
+ return true;
38
+ if (policy === 'never')
39
+ return false;
40
+ if (policy === 'while-active') {
41
+ // Membership in `activeInjections` IS being-active. By the time
42
+ // the subflow walks an injection, the InjectionEngine has already
43
+ // confirmed it's active for THIS iteration. So 'while-active'
44
+ // policy → cacheable while in the list.
45
+ return true;
46
+ }
47
+ if (typeof policy === 'object' && policy !== null && 'until' in policy) {
48
+ // Cache UNTIL predicate returns true. So cacheable iff !predicate.
49
+ try {
50
+ return !policy.until(ctx);
51
+ }
52
+ catch {
53
+ // Failing predicates are treated as "do not cache" — fail-closed.
54
+ // Avoids the failure mode where a buggy predicate accidentally
55
+ // caches volatile content.
56
+ return false;
57
+ }
58
+ }
59
+ // Unknown policy form — fail-closed (don't cache).
60
+ return false;
61
+ }
62
+ exports.evaluateCachePolicy = evaluateCachePolicy;
63
+ /**
64
+ * Identify which slots an injection contributes to. An injection can
65
+ * target multiple slots simultaneously (Skills target both system +
66
+ * tools); we visit each contributing slot independently.
67
+ */
68
+ function injectionTargetSlots(injection) {
69
+ const slots = [];
70
+ if (injection.inject.systemPrompt && injection.inject.systemPrompt.length > 0) {
71
+ slots.push('system');
72
+ }
73
+ if (injection.inject.tools && injection.inject.tools.length > 0) {
74
+ slots.push('tools');
75
+ }
76
+ if (injection.inject.messages && injection.inject.messages.length > 0) {
77
+ slots.push('messages');
78
+ }
79
+ return slots;
80
+ }
81
+ exports.injectionTargetSlots = injectionTargetSlots;
82
+ /**
83
+ * Pure transform: state → markers. Exported so tests can exercise
84
+ * the algorithm directly without the FlowChartExecutor ceremony of
85
+ * mounting the subflow as a child of a parent chart.
86
+ *
87
+ * The subflow body (`decide` below) is a thin wrapper that pulls
88
+ * state from scope and delegates here.
89
+ */
90
+ function computeCacheMarkers(state) {
91
+ // Kill switch short-circuits immediately
92
+ if (state.cachingDisabled)
93
+ return [];
94
+ const ctx = {
95
+ iteration: state.iteration,
96
+ iterationsRemaining: Math.max(0, state.maxIterations - state.iteration),
97
+ userMessage: state.userMessage,
98
+ ...(state.lastToolName !== undefined && { lastToolName: state.lastToolName }),
99
+ cumulativeInputTokens: state.cumulativeInputTokens,
100
+ };
101
+ const perSlot = {
102
+ system: [],
103
+ tools: [],
104
+ messages: [],
105
+ };
106
+ // Index 0 of system slot is the base system prompt
107
+ perSlot.system.push({
108
+ cacheable: evaluateCachePolicy(state.systemPromptCachePolicy, ctx),
109
+ reason: 'base system prompt',
110
+ });
111
+ // Walk each active injection
112
+ for (const inj of state.activeInjections) {
113
+ const policy = inj.metadata?.cache ?? 'never';
114
+ const cacheable = evaluateCachePolicy(policy, ctx);
115
+ const reason = `${inj.flavor}:${inj.id}`;
116
+ for (const slot of injectionTargetSlots(inj)) {
117
+ perSlot[slot].push({ cacheable, reason });
118
+ }
119
+ }
120
+ // Find per-slot last-contiguous-cacheable boundary; emit a marker per
121
+ // slot that has at least one cacheable entry from index 0.
122
+ const markers = [];
123
+ for (const slot of ['system', 'tools', 'messages']) {
124
+ const entries = perSlot[slot];
125
+ let boundary = -1;
126
+ let lastReason = '';
127
+ for (let i = 0; i < entries.length; i++) {
128
+ if (!entries[i].cacheable)
129
+ break;
130
+ boundary = i;
131
+ lastReason = entries[i].reason;
132
+ }
133
+ if (boundary >= 0) {
134
+ markers.push({
135
+ field: slot,
136
+ boundaryIndex: boundary,
137
+ ttl: 'short',
138
+ reason: `${slot} stable prefix (${boundary + 1} entries, ending at ${lastReason})`,
139
+ });
140
+ }
141
+ }
142
+ return markers;
143
+ }
144
+ exports.computeCacheMarkers = computeCacheMarkers;
145
+ /**
146
+ * The decision function. Thin scope-binding wrapper around
147
+ * `computeCacheMarkers`.
148
+ */
149
+ function decide(scope) {
150
+ scope.cacheMarkers = computeCacheMarkers({
151
+ activeInjections: scope.activeInjections,
152
+ iteration: scope.iteration,
153
+ maxIterations: scope.maxIterations,
154
+ userMessage: scope.userMessage,
155
+ ...(scope.lastToolName !== undefined && { lastToolName: scope.lastToolName }),
156
+ cumulativeInputTokens: scope.cumulativeInputTokens,
157
+ systemPromptCachePolicy: scope.systemPromptCachePolicy,
158
+ cachingDisabled: scope.cachingDisabled,
159
+ });
160
+ }
161
+ /**
162
+ * The cache-decision subflow. Mounted into the agent's main chart
163
+ * after the slot subflows (System / Messages / Tools) and before
164
+ * the CacheGate decider stage.
165
+ *
166
+ * Mounted via `addSubFlowChartNext(SUBFLOW_IDS.CACHE_DECISION, ...)`
167
+ * with `arrayMerge: ArrayMergeMode.Replace` on the outputMapper —
168
+ * `cacheMarkers` MUST replace, not concatenate, across iterations
169
+ * (same lesson as the v2.5.1 InjectionEngine fix).
170
+ */
171
+ exports.cacheDecisionSubflow = (0, footprintjs_1.flowChart)('DecideCacheMarkers', decide, 'decide-cache-markers', undefined, 'CacheDecision: walk activeInjections, evaluate cache directives, emit CacheMarker[]').build();
172
+ //# sourceMappingURL=CacheDecisionSubflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CacheDecisionSubflow.js","sourceRoot":"","sources":["../../src/cache/CacheDecisionSubflow.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;;;AAEH,6CAAyE;AAmCzE;;;GAGG;AACH,SAAgB,mBAAmB,CAAC,MAAmB,EAAE,GAAuB;IAC9E,IAAI,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,MAAM,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IACrC,IAAI,MAAM,KAAK,cAAc,EAAE,CAAC;QAC9B,gEAAgE;QAChE,kEAAkE;QAClE,8DAA8D;QAC9D,wCAAwC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;QACvE,mEAAmE;QACnE,IAAI,CAAC;YACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,kEAAkE;YAClE,+DAA+D;YAC/D,2BAA2B;YAC3B,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,mDAAmD;IACnD,OAAO,KAAK,CAAC;AACf,CAAC;AAvBD,kDAuBC;AAED;;;;GAIG;AACH,SAAgB,oBAAoB,CAClC,SAAoB;IAEpB,MAAM,KAAK,GAA2C,EAAE,CAAC;IACzD,IAAI,SAAS,CAAC,MAAM,CAAC,YAAY,IAAI,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9E,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtB,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,CAAC,QAAQ,IAAI,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAdD,oDAcC;AAED;;;;;;;GAOG;AACH,SAAgB,mBAAmB,CACjC,KAA+C;IAE/C,yCAAyC;IACzC,IAAI,KAAK,CAAC,eAAe;QAAE,OAAO,EAAE,CAAC;IAErC,MAAM,GAAG,GAAuB;QAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,mBAAmB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,SAAS,CAAC;QACvE,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,GAAG,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC;QAC7E,qBAAqB,EAAE,KAAK,CAAC,qBAAqB;KACnD,CAAC;IAIF,MAAM,OAAO,GAAyD;QACpE,MAAM,EAAE,EAAE;QACV,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,EAAE;KACb,CAAC;IAEF,mDAAmD;IACnD,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;QAClB,SAAS,EAAE,mBAAmB,CAAC,KAAK,CAAC,uBAAuB,EAAE,GAAG,CAAC;QAClE,MAAM,EAAE,oBAAoB;KAC7B,CAAC,CAAC;IAEH,6BAA6B;IAC7B,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;QACzC,MAAM,MAAM,GAAI,GAAG,CAAC,QAAQ,EAAE,KAAiC,IAAI,OAAO,CAAC;QAC3E,MAAM,SAAS,GAAG,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;QACzC,KAAK,MAAM,IAAI,IAAI,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,sEAAsE;IACtE,2DAA2D;IAC3D,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAU,EAAE,CAAC;QAC5D,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC;QAClB,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;gBAAE,MAAM;YACjC,QAAQ,GAAG,CAAC,CAAC;YACb,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACjC,CAAC;QACD,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC;gBACX,KAAK,EAAE,IAAI;gBACX,aAAa,EAAE,QAAQ;gBACvB,GAAG,EAAE,OAAO;gBACZ,MAAM,EAAE,GAAG,IAAI,mBAAmB,QAAQ,GAAG,CAAC,uBAAuB,UAAU,GAAG;aACnF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AA7DD,kDA6DC;AAED;;;GAGG;AACH,SAAS,MAAM,CAAC,KAAqC;IACnD,KAAK,CAAC,YAAY,GAAG,mBAAmB,CAAC;QACvC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,GAAG,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC;QAC7E,qBAAqB,EAAE,KAAK,CAAC,qBAAqB;QAClD,uBAAuB,EAAE,KAAK,CAAC,uBAAuB;QACtD,eAAe,EAAE,KAAK,CAAC,eAAe;KACvC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACU,QAAA,oBAAoB,GAAc,IAAA,uBAAS,EACtD,oBAAoB,EACpB,MAAM,EACN,sBAAsB,EACtB,SAAS,EACT,qFAAqF,CACtF,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ /**
3
+ * CacheGate — runtime decider that gates cache-marker application.
4
+ *
5
+ * Runs every iteration AFTER the CacheDecision subflow produces
6
+ * `scope.cacheMarkers` and BEFORE the BuildLLMRequest stage applies
7
+ * them. Three rules can fall through to "no-markers" (skip caching);
8
+ * default branch is "apply-markers" (proceed with caching).
9
+ *
10
+ * Why a decider stage and not a function: footprintjs's `decide()`
11
+ * captures evidence on `FlowRecorder.onDecision` natively. The
12
+ * `cacheRecorder()` (Phase 9) reads
13
+ * `event.evidence.rules.find(r => r.matched).inputs[]` to surface
14
+ * WHY caching was applied or skipped each iter. Same channel
15
+ * footprintjs uses for every other decision; same renderer in Lens.
16
+ *
17
+ * Three rules (evaluated top-down; first match wins):
18
+ * 1. Kill switch — `Agent.create({ caching: 'off' })` was set
19
+ * 2. Hit-rate floor — recent hit rate < 30%; cache writes outpacing
20
+ * reads, auto-disable to avoid the cache-write penalty
21
+ * 3. Skill churn — active skills changing too rapidly for caching
22
+ * to amortize (Anthropic LLM expert's concern from Phase 4 review)
23
+ *
24
+ * Default branch (no rule matches): `'apply-markers'`.
25
+ */
26
+ Object.defineProperty(exports, "__esModule", { value: true });
27
+ exports.updateSkillHistory = exports.cacheGateDecide = exports.detectSkillChurn = exports.SKILL_CHURN_THRESHOLD = exports.SKILL_CHURN_WINDOW = exports.HIT_RATE_FLOOR = void 0;
28
+ const footprintjs_1 = require("footprintjs");
29
+ /**
30
+ * Hit-rate floor below which we auto-disable caching. The 30% number
31
+ * is calibrated for Anthropic's pricing: cache write costs +25%
32
+ * premium, cache read costs 90% off. Break-even at ~25% hit rate.
33
+ * 30% gives a buffer; below that we're losing money on writes that
34
+ * never recoup.
35
+ *
36
+ * Reasoning: if hit rate is X, cost-per-token vs no caching is
37
+ * (1 - X) * 1.0 + X * 0.1 // baseline
38
+ * minus
39
+ * write_iters * 1.25 + read_iters * 0.1 // with caching
40
+ * Solving for break-even gives X ≈ 0.25 for typical agent shapes.
41
+ */
42
+ exports.HIT_RATE_FLOOR = 0.3;
43
+ /**
44
+ * Window size for skill-churn detection. Last 5 iterations of
45
+ * active skill IDs are inspected.
46
+ */
47
+ exports.SKILL_CHURN_WINDOW = 5;
48
+ /**
49
+ * Threshold above which skill churn is considered detected: this many
50
+ * UNIQUE skills in the rolling window. With window=5 and threshold=3,
51
+ * the pattern A → B → A → C still triggers (3 unique skills in 4 iters).
52
+ */
53
+ exports.SKILL_CHURN_THRESHOLD = 3;
54
+ /**
55
+ * Pure helper: detect skill churn given a rolling history.
56
+ * Exported for direct testing without decider/scope ceremony.
57
+ */
58
+ function detectSkillChurn(history, windowSize = exports.SKILL_CHURN_WINDOW, threshold = exports.SKILL_CHURN_THRESHOLD) {
59
+ if (history.length < threshold)
60
+ return false; // not enough history yet
61
+ const recent = history.slice(-windowSize);
62
+ const uniqueSkills = new Set();
63
+ for (const s of recent) {
64
+ if (s !== undefined)
65
+ uniqueSkills.add(s);
66
+ }
67
+ return uniqueSkills.size >= threshold;
68
+ }
69
+ exports.detectSkillChurn = detectSkillChurn;
70
+ /**
71
+ * The decider function. Mounted via `addDeciderFunction` in the
72
+ * agent's main chart in Phase 6.
73
+ *
74
+ * Returns a `DecisionResult` (footprintjs's `decide()` helper output)
75
+ * which the engine unwraps via `.branch` for routing AND publishes
76
+ * `evidence.rules[matched].inputs[]` to FlowRecorder.onDecision.
77
+ * cacheRecorder (Phase 9) subscribes to that channel for the audit trail.
78
+ *
79
+ * For non-routing consumers (testing the decision in isolation), read
80
+ * the `.branch` field of the returned DecisionResult.
81
+ */
82
+ function cacheGateDecide(scope) {
83
+ return (0, footprintjs_1.decide)(scope, [
84
+ {
85
+ when: (s) => s.cachingDisabled === true,
86
+ then: 'no-markers',
87
+ label: "kill switch active (Agent.create({ caching: 'off' }))",
88
+ },
89
+ {
90
+ when: (s) => s.recentHitRate !== undefined && s.recentHitRate < exports.HIT_RATE_FLOOR,
91
+ then: 'no-markers',
92
+ label: `hit rate < ${exports.HIT_RATE_FLOOR * 100}% — auto-disable`,
93
+ },
94
+ {
95
+ when: (s) => detectSkillChurn(s.skillHistory),
96
+ then: 'no-markers',
97
+ label: `skill churn (≥${exports.SKILL_CHURN_THRESHOLD} unique skills in last ${exports.SKILL_CHURN_WINDOW} iters)`,
98
+ },
99
+ ], 'apply-markers');
100
+ }
101
+ exports.cacheGateDecide = cacheGateDecide;
102
+ /**
103
+ * Update the skill-history rolling window. Called as a function
104
+ * stage BEFORE the CacheGate decider. Reads the current iteration's
105
+ * active skill (head of `activatedInjectionIds`) and appends to the
106
+ * `skillHistory` array.
107
+ *
108
+ * Window length is bounded at `SKILL_CHURN_WINDOW * 2` so the array
109
+ * doesn't grow unboundedly across long agent runs. Old entries
110
+ * fall off the front naturally.
111
+ */
112
+ function updateSkillHistory(scope) {
113
+ const current = scope.activatedInjectionIds?.[0];
114
+ const prior = scope.skillHistory ?? [];
115
+ const next = [...prior, current];
116
+ // Bounded buffer — keep window*2 to give detectSkillChurn room
117
+ // without pinning every prior iteration in memory.
118
+ const trimmed = next.length > exports.SKILL_CHURN_WINDOW * 2 ? next.slice(-exports.SKILL_CHURN_WINDOW * 2) : next;
119
+ scope.skillHistory = trimmed;
120
+ }
121
+ exports.updateSkillHistory = updateSkillHistory;
122
+ //# sourceMappingURL=CacheGateDecider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CacheGateDecider.js","sourceRoot":"","sources":["../../src/cache/CacheGateDecider.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;;;AAEH,6CAA2E;AA6B3E;;;;;;;;;;;;GAYG;AACU,QAAA,cAAc,GAAG,GAAG,CAAC;AAElC;;;GAGG;AACU,QAAA,kBAAkB,GAAG,CAAC,CAAC;AAEpC;;;;GAIG;AACU,QAAA,qBAAqB,GAAG,CAAC,CAAC;AAEvC;;;GAGG;AACH,SAAgB,gBAAgB,CAC9B,OAAwC,EACxC,aAAqB,0BAAkB,EACvC,YAAoB,6BAAqB;IAEzC,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS;QAAE,OAAO,KAAK,CAAC,CAAC,yBAAyB;IACvE,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC;IAC1C,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,KAAK,SAAS;YAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,YAAY,CAAC,IAAI,IAAI,SAAS,CAAC;AACxC,CAAC;AAZD,4CAYC;AAQD;;;;;;;;;;;GAWG;AACH,SAAgB,eAAe,CAAC,KAAiC;IAC/D,OAAO,IAAA,oBAAM,EACX,KAAK,EACL;QACE;YACE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,KAAK,IAAI;YACvC,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,uDAAuD;SAC/D;QACD;YACE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,SAAS,IAAI,CAAC,CAAC,aAAa,GAAG,sBAAc;YAC9E,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,cAAc,sBAAc,GAAG,GAAG,kBAAkB;SAC5D;QACD;YACE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC;YAC7C,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,iBAAiB,6BAAqB,0BAA0B,0BAAkB,SAAS;SACnG;KACF,EACD,eAAe,CAChB,CAAC;AACJ,CAAC;AAtBD,0CAsBC;AAED;;;;;;;;;GASG;AACH,SAAgB,kBAAkB,CAChC,KAGE;IAEF,MAAM,OAAO,GAAG,KAAK,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC;IACvC,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,EAAE,OAAO,CAAC,CAAC;IACjC,+DAA+D;IAC/D,mDAAmD;IACnD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,0BAAkB,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,0BAAkB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAClG,KAAK,CAAC,YAAY,GAAG,OAAO,CAAC;AAC/B,CAAC;AAbD,gDAaC"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ /**
3
+ * applyCachePolicy — internal helper for injection factories.
4
+ *
5
+ * Each factory (`defineSkill`, `defineSteering`, `defineFact`,
6
+ * `defineInstruction`, `defineMemory`) calls this to merge the
7
+ * consumer-supplied `cache` option with the flavor-specific default.
8
+ * The merged policy lands in `Injection.metadata.cache` for the
9
+ * CacheDecision subflow (Phase 4) to read back.
10
+ *
11
+ * Why it lives in src/cache/ (not co-located with each factory):
12
+ * - Single source of truth for per-flavor defaults
13
+ * - Tests for the defaults live in one place (test/cache/)
14
+ * - Adding a new factory means adding one entry to the map below;
15
+ * not duplicating the default-resolution logic five times
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.getFlavorDefault = exports.resolveCachePolicy = void 0;
19
+ /**
20
+ * Per-flavor default `cache` values when consumer doesn't specify.
21
+ * These match the documentation in `CachePolicy`'s JSDoc — keep
22
+ * synchronized.
23
+ */
24
+ const FLAVOR_DEFAULTS = Object.freeze({
25
+ steering: 'always',
26
+ fact: 'always',
27
+ skill: 'while-active',
28
+ instruction: 'never',
29
+ memory: 'while-active',
30
+ });
31
+ /**
32
+ * Resolve the effective `cache` policy for an injection.
33
+ *
34
+ * @param flavor - The injection flavor (drives the default if `consumerValue` undefined)
35
+ * @param consumerValue - What the consumer wrote in `cache:` (or undefined)
36
+ * @returns The effective CachePolicy. Always defined.
37
+ */
38
+ function resolveCachePolicy(flavor, consumerValue) {
39
+ if (consumerValue !== undefined)
40
+ return consumerValue;
41
+ // Fall back to per-flavor default; if flavor unknown, default is 'never'
42
+ // (conservative — unfamiliar injections shouldn't accidentally cache).
43
+ return FLAVOR_DEFAULTS[flavor] ?? 'never';
44
+ }
45
+ exports.resolveCachePolicy = resolveCachePolicy;
46
+ /**
47
+ * Read-only access to the per-flavor default table. Exported for
48
+ * tests asserting the documented defaults are wired correctly. Not
49
+ * intended for runtime use — callers should use `resolveCachePolicy`.
50
+ */
51
+ function getFlavorDefault(flavor) {
52
+ return FLAVOR_DEFAULTS[flavor] ?? 'never';
53
+ }
54
+ exports.getFlavorDefault = getFlavorDefault;
55
+ //# sourceMappingURL=applyCachePolicy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applyCachePolicy.js","sourceRoot":"","sources":["../../src/cache/applyCachePolicy.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;AAIH;;;;GAIG;AACH,MAAM,eAAe,GAA0C,MAAM,CAAC,MAAM,CAAC;IAC3E,QAAQ,EAAE,QAAQ;IAClB,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,cAAc;IACrB,WAAW,EAAE,OAAO;IACpB,MAAM,EAAE,cAAc;CACvB,CAAC,CAAC;AAEH;;;;;;GAMG;AACH,SAAgB,kBAAkB,CAChC,MAA6C,EAC7C,aAAsC;IAEtC,IAAI,aAAa,KAAK,SAAS;QAAE,OAAO,aAAa,CAAC;IACtD,yEAAyE;IACzE,uEAAuE;IACvE,OAAO,eAAe,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC;AAC5C,CAAC;AARD,gDAQC;AAED;;;;GAIG;AACH,SAAgB,gBAAgB,CAAC,MAAc;IAC7C,OAAO,eAAe,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC;AAC5C,CAAC;AAFD,4CAEC"}