agentfootprint 2.5.1 → 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 (115) hide show
  1. package/dist/adapters/llm/BrowserAnthropicProvider.js +68 -0
  2. package/dist/adapters/llm/BrowserAnthropicProvider.js.map +1 -1
  3. package/dist/cache/CacheDecisionSubflow.js +172 -0
  4. package/dist/cache/CacheDecisionSubflow.js.map +1 -0
  5. package/dist/cache/CacheGateDecider.js +122 -0
  6. package/dist/cache/CacheGateDecider.js.map +1 -0
  7. package/dist/cache/applyCachePolicy.js +55 -0
  8. package/dist/cache/applyCachePolicy.js.map +1 -0
  9. package/dist/cache/cacheRecorder.js +120 -0
  10. package/dist/cache/cacheRecorder.js.map +1 -0
  11. package/dist/cache/index.js +47 -0
  12. package/dist/cache/index.js.map +1 -0
  13. package/dist/cache/strategies/AnthropicCacheStrategy.js +102 -0
  14. package/dist/cache/strategies/AnthropicCacheStrategy.js.map +1 -0
  15. package/dist/cache/strategies/BedrockCacheStrategy.js +81 -0
  16. package/dist/cache/strategies/BedrockCacheStrategy.js.map +1 -0
  17. package/dist/cache/strategies/NoOpCacheStrategy.js +40 -0
  18. package/dist/cache/strategies/NoOpCacheStrategy.js.map +1 -0
  19. package/dist/cache/strategies/OpenAICacheStrategy.js +75 -0
  20. package/dist/cache/strategies/OpenAICacheStrategy.js.map +1 -0
  21. package/dist/cache/strategyRegistry.js +80 -0
  22. package/dist/cache/strategyRegistry.js.map +1 -0
  23. package/dist/cache/types.js +25 -0
  24. package/dist/cache/types.js.map +1 -0
  25. package/dist/conventions.js +18 -0
  26. package/dist/conventions.js.map +1 -1
  27. package/dist/core/Agent.js +157 -4
  28. package/dist/core/Agent.js.map +1 -1
  29. package/dist/esm/adapters/llm/BrowserAnthropicProvider.js +68 -0
  30. package/dist/esm/adapters/llm/BrowserAnthropicProvider.js.map +1 -1
  31. package/dist/esm/cache/CacheDecisionSubflow.js +166 -0
  32. package/dist/esm/cache/CacheDecisionSubflow.js.map +1 -0
  33. package/dist/esm/cache/CacheGateDecider.js +116 -0
  34. package/dist/esm/cache/CacheGateDecider.js.map +1 -0
  35. package/dist/esm/cache/applyCachePolicy.js +50 -0
  36. package/dist/esm/cache/applyCachePolicy.js.map +1 -0
  37. package/dist/esm/cache/cacheRecorder.js +116 -0
  38. package/dist/esm/cache/cacheRecorder.js.map +1 -0
  39. package/dist/esm/cache/index.js +36 -0
  40. package/dist/esm/cache/index.js.map +1 -0
  41. package/dist/esm/cache/strategies/AnthropicCacheStrategy.js +98 -0
  42. package/dist/esm/cache/strategies/AnthropicCacheStrategy.js.map +1 -0
  43. package/dist/esm/cache/strategies/BedrockCacheStrategy.js +77 -0
  44. package/dist/esm/cache/strategies/BedrockCacheStrategy.js.map +1 -0
  45. package/dist/esm/cache/strategies/NoOpCacheStrategy.js +36 -0
  46. package/dist/esm/cache/strategies/NoOpCacheStrategy.js.map +1 -0
  47. package/dist/esm/cache/strategies/OpenAICacheStrategy.js +71 -0
  48. package/dist/esm/cache/strategies/OpenAICacheStrategy.js.map +1 -0
  49. package/dist/esm/cache/strategyRegistry.js +73 -0
  50. package/dist/esm/cache/strategyRegistry.js.map +1 -0
  51. package/dist/esm/cache/types.js +24 -0
  52. package/dist/esm/cache/types.js.map +1 -0
  53. package/dist/esm/conventions.js +18 -0
  54. package/dist/esm/conventions.js.map +1 -1
  55. package/dist/esm/core/Agent.js +157 -4
  56. package/dist/esm/core/Agent.js.map +1 -1
  57. package/dist/esm/index.js +9 -0
  58. package/dist/esm/index.js.map +1 -1
  59. package/dist/esm/lib/injection-engine/factories/defineFact.js +3 -0
  60. package/dist/esm/lib/injection-engine/factories/defineFact.js.map +1 -1
  61. package/dist/esm/lib/injection-engine/factories/defineInstruction.js +3 -0
  62. package/dist/esm/lib/injection-engine/factories/defineInstruction.js.map +1 -1
  63. package/dist/esm/lib/injection-engine/factories/defineSkill.js +5 -0
  64. package/dist/esm/lib/injection-engine/factories/defineSkill.js.map +1 -1
  65. package/dist/esm/lib/injection-engine/factories/defineSteering.js +3 -0
  66. package/dist/esm/lib/injection-engine/factories/defineSteering.js.map +1 -1
  67. package/dist/index.js +9 -0
  68. package/dist/index.js.map +1 -1
  69. package/dist/lib/injection-engine/factories/defineFact.js +3 -0
  70. package/dist/lib/injection-engine/factories/defineFact.js.map +1 -1
  71. package/dist/lib/injection-engine/factories/defineInstruction.js +3 -0
  72. package/dist/lib/injection-engine/factories/defineInstruction.js.map +1 -1
  73. package/dist/lib/injection-engine/factories/defineSkill.js +5 -0
  74. package/dist/lib/injection-engine/factories/defineSkill.js.map +1 -1
  75. package/dist/lib/injection-engine/factories/defineSteering.js +3 -0
  76. package/dist/lib/injection-engine/factories/defineSteering.js.map +1 -1
  77. package/dist/types/adapters/types.d.ts +11 -0
  78. package/dist/types/adapters/types.d.ts.map +1 -1
  79. package/dist/types/cache/CacheDecisionSubflow.d.ts +89 -0
  80. package/dist/types/cache/CacheDecisionSubflow.d.ts.map +1 -0
  81. package/dist/types/cache/CacheGateDecider.d.ts +114 -0
  82. package/dist/types/cache/CacheGateDecider.d.ts.map +1 -0
  83. package/dist/types/cache/applyCachePolicy.d.ts +38 -0
  84. package/dist/types/cache/applyCachePolicy.d.ts.map +1 -0
  85. package/dist/types/cache/cacheRecorder.d.ts +86 -0
  86. package/dist/types/cache/cacheRecorder.d.ts.map +1 -0
  87. package/dist/types/cache/index.d.ts +34 -0
  88. package/dist/types/cache/index.d.ts.map +1 -0
  89. package/dist/types/cache/strategies/AnthropicCacheStrategy.d.ts +39 -0
  90. package/dist/types/cache/strategies/AnthropicCacheStrategy.d.ts.map +1 -0
  91. package/dist/types/cache/strategies/BedrockCacheStrategy.d.ts +34 -0
  92. package/dist/types/cache/strategies/BedrockCacheStrategy.d.ts.map +1 -0
  93. package/dist/types/cache/strategies/NoOpCacheStrategy.d.ts +30 -0
  94. package/dist/types/cache/strategies/NoOpCacheStrategy.d.ts.map +1 -0
  95. package/dist/types/cache/strategies/OpenAICacheStrategy.d.ts +37 -0
  96. package/dist/types/cache/strategies/OpenAICacheStrategy.d.ts.map +1 -0
  97. package/dist/types/cache/strategyRegistry.d.ts +46 -0
  98. package/dist/types/cache/strategyRegistry.d.ts.map +1 -0
  99. package/dist/types/cache/types.d.ts +244 -0
  100. package/dist/types/cache/types.d.ts.map +1 -0
  101. package/dist/types/conventions.d.ts +18 -0
  102. package/dist/types/conventions.d.ts.map +1 -1
  103. package/dist/types/core/Agent.d.ts +86 -2
  104. package/dist/types/core/Agent.d.ts.map +1 -1
  105. package/dist/types/index.d.ts +3 -0
  106. package/dist/types/index.d.ts.map +1 -1
  107. package/dist/types/lib/injection-engine/factories/defineFact.d.ts +9 -0
  108. package/dist/types/lib/injection-engine/factories/defineFact.d.ts.map +1 -1
  109. package/dist/types/lib/injection-engine/factories/defineInstruction.d.ts +11 -0
  110. package/dist/types/lib/injection-engine/factories/defineInstruction.d.ts.map +1 -1
  111. package/dist/types/lib/injection-engine/factories/defineSkill.d.ts +15 -0
  112. package/dist/types/lib/injection-engine/factories/defineSkill.d.ts.map +1 -1
  113. package/dist/types/lib/injection-engine/factories/defineSteering.d.ts +12 -0
  114. package/dist/types/lib/injection-engine/factories/defineSteering.d.ts.map +1 -1
  115. package/package.json +1 -1
@@ -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":"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"}
@@ -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"}
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ /**
3
+ * cacheRecorder() — observability for the v2.6 cache layer.
4
+ *
5
+ * Subscribes to:
6
+ * - `FlowRecorder.onDecision` — captures CacheGate routing decisions
7
+ * (apply-markers / no-markers + the rule that fired + evidence
8
+ * from `decide()`). Read directly from `event.evidence.rules[matched]`
9
+ * since footprintjs already auto-captures predicate `inputs[]`.
10
+ * - `agentfootprint.stream.llm_end` events — read provider's `usage`
11
+ * and call the agent's CacheStrategy.extractMetrics() to normalize
12
+ * into CacheMetrics (cacheReadTokens / cacheWriteTokens / fresh).
13
+ *
14
+ * Produces:
15
+ * - per-iteration `agentfootprint.cache.applied` events (markers
16
+ * applied this iter or empty if skipped) — for Lens trace
17
+ * - per-iteration `agentfootprint.cache.metrics` events (hit/write
18
+ * token counts + estimated dollars via PricingTable) — for
19
+ * dashboards
20
+ * - a turn-end summary printable via `recorder.report()` —
21
+ * numeric tally plus dollars saved
22
+ *
23
+ * v2.6 LIMITATION: doesn't yet write `scope.recentHitRate` back into
24
+ * agent state. CacheGate's hit-rate-floor rule won't fire automatically;
25
+ * consumers can manually wire feedback via `Agent.create(...).attach(rec)`.
26
+ * Full feedback loop deferred to v2.7 (needs an agent-side accessor
27
+ * convention since recorders don't normally write to scope).
28
+ */
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ exports.cacheRecorder = void 0;
31
+ function cacheRecorder(options = {}) {
32
+ const perIter = [];
33
+ let lastDecision;
34
+ let iterationCounter = 0;
35
+ function dollars(tokens, kind) {
36
+ if (!options.pricing)
37
+ return 0;
38
+ const model = options.model ?? 'unknown';
39
+ return tokens * options.pricing.pricePerToken(model, kind);
40
+ }
41
+ const handle = {
42
+ id: 'cache-recorder',
43
+ onDecision(event) {
44
+ // Only care about CacheGate decisions; identified by the
45
+ // decider's stage id (the third arg to addDeciderFunction).
46
+ if (event.decider !== 'cache-gate')
47
+ return;
48
+ const matched = event.evidence?.rules.find((r) => r.matched);
49
+ lastDecision = {
50
+ branch: event.chosen,
51
+ ...(matched?.label !== undefined && { rule: matched.label }),
52
+ };
53
+ },
54
+ onEmit(event) {
55
+ if (event.type !== 'agentfootprint.stream.llm_end')
56
+ return;
57
+ iterationCounter++;
58
+ const usage = event.payload.usage;
59
+ const metrics = options.strategy?.extractMetrics(usage);
60
+ const branch = lastDecision?.branch ?? 'apply-markers';
61
+ // Compute dollar math:
62
+ // spent = freshInput * inputPrice
63
+ // + cacheRead * cacheReadPrice
64
+ // + cacheWrite * cacheWritePrice
65
+ // no-cache cost = (freshInput + cacheRead + cacheWrite) * inputPrice
66
+ // saved = no-cache cost - spent
67
+ let dollarsSpent = 0;
68
+ let savedVsNoCache = 0;
69
+ if (metrics) {
70
+ dollarsSpent =
71
+ dollars(metrics.freshInputTokens, 'input') +
72
+ dollars(metrics.cacheReadTokens, 'cacheRead') +
73
+ dollars(metrics.cacheWriteTokens, 'cacheWrite');
74
+ const noCacheCost = dollars(metrics.freshInputTokens + metrics.cacheReadTokens + metrics.cacheWriteTokens, 'input');
75
+ savedVsNoCache = noCacheCost - dollarsSpent;
76
+ }
77
+ const entry = {
78
+ iteration: iterationCounter,
79
+ branch,
80
+ ...(lastDecision?.rule !== undefined && { rule: lastDecision.rule }),
81
+ ...(metrics !== undefined && { metrics }),
82
+ dollarsSpent,
83
+ dollarsSavedVsNoCache: savedVsNoCache,
84
+ };
85
+ perIter.push(entry);
86
+ lastDecision = undefined;
87
+ },
88
+ report() {
89
+ const apply = perIter.filter((p) => p.branch === 'apply-markers').length;
90
+ const skip = perIter.filter((p) => p.branch === 'no-markers').length;
91
+ const cacheRead = perIter.reduce((s, p) => s + (p.metrics?.cacheReadTokens ?? 0), 0);
92
+ const cacheWrite = perIter.reduce((s, p) => s + (p.metrics?.cacheWriteTokens ?? 0), 0);
93
+ const fresh = perIter.reduce((s, p) => s + (p.metrics?.freshInputTokens ?? 0), 0);
94
+ const totalRequest = cacheRead + cacheWrite + fresh;
95
+ const hitRate = totalRequest > 0 ? cacheRead / totalRequest : 0;
96
+ const dollarsSpent = perIter.reduce((s, p) => s + p.dollarsSpent, 0);
97
+ const dollarsSaved = perIter.reduce((s, p) => s + p.dollarsSavedVsNoCache, 0);
98
+ return Object.freeze({
99
+ totalIterations: perIter.length,
100
+ applyMarkersIterations: apply,
101
+ noMarkersIterations: skip,
102
+ cacheReadTokensTotal: cacheRead,
103
+ cacheWriteTokensTotal: cacheWrite,
104
+ freshInputTokensTotal: fresh,
105
+ hitRate,
106
+ estimatedDollarsSpent: dollarsSpent,
107
+ estimatedDollarsSavedVsNoCache: dollarsSaved,
108
+ perIter: Object.freeze([...perIter]),
109
+ });
110
+ },
111
+ reset() {
112
+ perIter.length = 0;
113
+ lastDecision = undefined;
114
+ iterationCounter = 0;
115
+ },
116
+ };
117
+ return handle;
118
+ }
119
+ exports.cacheRecorder = cacheRecorder;
120
+ //# sourceMappingURL=cacheRecorder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cacheRecorder.js","sourceRoot":"","sources":["../../src/cache/cacheRecorder.ts"],"names":[],"mappings":"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"}