agentfootprint 6.11.1 → 6.12.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 (54) hide show
  1. package/AGENTS.md +5 -6
  2. package/CLAUDE.md +6 -7
  3. package/README.md +1 -1
  4. package/ai-instructions/claude-code/SKILL.md +3 -4
  5. package/dist/core/Agent.js +14 -0
  6. package/dist/core/Agent.js.map +1 -1
  7. package/dist/core/agent/buildAgentChart.js +3 -0
  8. package/dist/core/agent/buildAgentChart.js.map +1 -1
  9. package/dist/core/agent/buildDynamicAgentChart.js +3 -0
  10. package/dist/core/agent/buildDynamicAgentChart.js.map +1 -1
  11. package/dist/esm/core/Agent.js +14 -0
  12. package/dist/esm/core/Agent.js.map +1 -1
  13. package/dist/esm/core/agent/buildAgentChart.js +3 -0
  14. package/dist/esm/core/agent/buildAgentChart.js.map +1 -1
  15. package/dist/esm/core/agent/buildDynamicAgentChart.js +3 -0
  16. package/dist/esm/core/agent/buildDynamicAgentChart.js.map +1 -1
  17. package/dist/esm/memory/causal/evidenceRecorder.js +213 -0
  18. package/dist/esm/memory/causal/evidenceRecorder.js.map +1 -0
  19. package/dist/esm/memory/causal/index.js +1 -0
  20. package/dist/esm/memory/causal/index.js.map +1 -1
  21. package/dist/esm/memory/causal/loadSnapshot.js +18 -4
  22. package/dist/esm/memory/causal/loadSnapshot.js.map +1 -1
  23. package/dist/esm/memory/causal/writeSnapshot.js +9 -5
  24. package/dist/esm/memory/causal/writeSnapshot.js.map +1 -1
  25. package/dist/esm/memory/define.types.js +2 -2
  26. package/dist/esm/memory/wire/mountMemoryPipeline.js +10 -1
  27. package/dist/esm/memory/wire/mountMemoryPipeline.js.map +1 -1
  28. package/dist/memory/causal/evidenceRecorder.js +217 -0
  29. package/dist/memory/causal/evidenceRecorder.js.map +1 -0
  30. package/dist/memory/causal/index.js +3 -1
  31. package/dist/memory/causal/index.js.map +1 -1
  32. package/dist/memory/causal/loadSnapshot.js +18 -4
  33. package/dist/memory/causal/loadSnapshot.js.map +1 -1
  34. package/dist/memory/causal/writeSnapshot.js +9 -5
  35. package/dist/memory/causal/writeSnapshot.js.map +1 -1
  36. package/dist/memory/define.types.js +2 -2
  37. package/dist/memory/wire/mountMemoryPipeline.js +10 -1
  38. package/dist/memory/wire/mountMemoryPipeline.js.map +1 -1
  39. package/dist/types/core/Agent.d.ts +2 -0
  40. package/dist/types/core/Agent.d.ts.map +1 -1
  41. package/dist/types/core/agent/buildAgentChart.d.ts +5 -0
  42. package/dist/types/core/agent/buildAgentChart.d.ts.map +1 -1
  43. package/dist/types/core/agent/buildDynamicAgentChart.d.ts.map +1 -1
  44. package/dist/types/memory/causal/evidenceRecorder.d.ts +67 -0
  45. package/dist/types/memory/causal/evidenceRecorder.d.ts.map +1 -0
  46. package/dist/types/memory/causal/index.d.ts +1 -0
  47. package/dist/types/memory/causal/index.d.ts.map +1 -1
  48. package/dist/types/memory/causal/writeSnapshot.d.ts.map +1 -1
  49. package/dist/types/memory/define.types.d.ts +2 -2
  50. package/dist/types/memory/stages/types.d.ts +7 -0
  51. package/dist/types/memory/stages/types.d.ts.map +1 -1
  52. package/dist/types/memory/wire/mountMemoryPipeline.d.ts +9 -0
  53. package/dist/types/memory/wire/mountMemoryPipeline.d.ts.map +1 -1
  54. package/package.json +1 -1
@@ -0,0 +1,213 @@
1
+ /**
2
+ * causalEvidenceRecorder — the evidence bridge (backlog Phase-1 #5).
3
+ *
4
+ * Harvests, DURING the run, everything a causal snapshot needs beyond
5
+ * (query, finalContent) — from events the engine already fires:
6
+ *
7
+ * stream.tool_start/tool_end → ToolCallRecord (name, args, resultPreview, errored)
8
+ * stream.llm_end → tokenUsage accumulation + iteration high-water
9
+ * agent.turn_start/turn_end → durationMs (+ authoritative totals when seen)
10
+ * FlowRecorder.onDecision → DecisionRecord with footprintjs decide()/select()
11
+ * operator-level evidence (rule, conditions, chosen)
12
+ * context.evaluated routing → DecisionRecord per skill the graph routed to
13
+ *
14
+ * Pattern: CombinedRecorder (Convention 1 — single purpose: evidence
15
+ * accumulation); per-turn reset anchored on `agent.turn_start`
16
+ * (Convention 4 — executor `clear()` resets between runs; same-
17
+ * executor pause/resume PRESERVES pre-pause evidence by design).
18
+ * PII note: tool args/results and decide() evidence persist into snapshots.
19
+ * footprintjs `RedactionPolicy.emitPatterns` redacts the emit channel
20
+ * BEFORE this recorder IF the consumer configures one on the executor
21
+ * — the Agent does NOT configure one by default. Values are bounded
22
+ * (`maxPreviewChars` for results, `maxFieldChars` for args/evidence);
23
+ * treat the snapshot store as PII-bearing and protect it accordingly.
24
+ *
25
+ * The Agent attaches this automatically when a CAUSAL memory is mounted and
26
+ * threads `collect` into the memory write mount (`evidenceSource`) — so
27
+ * `writeSnapshot` persists real evidence instead of zeros.
28
+ */
29
+ function preview(value, max) {
30
+ let s;
31
+ if (typeof value === 'string')
32
+ s = value;
33
+ else {
34
+ try {
35
+ s = JSON.stringify(value);
36
+ }
37
+ catch {
38
+ s = String(value);
39
+ }
40
+ }
41
+ return s.length > max ? `${s.slice(0, max)}…` : s;
42
+ }
43
+ /** Bound a record-ish value: oversized serializations become a truncated
44
+ * preview marker so snapshots can't grow unbounded (and PII exposure is
45
+ * capped). Small values pass through untouched. */
46
+ function bounded(value, max) {
47
+ if (value === undefined)
48
+ return undefined;
49
+ try {
50
+ const s = JSON.stringify(value);
51
+ if (s.length <= max)
52
+ return value;
53
+ return { __truncated: `${s.slice(0, max)}…` };
54
+ }
55
+ catch {
56
+ return { __truncated: String(value).slice(0, max) };
57
+ }
58
+ }
59
+ /** Build the evidence-harvesting recorder. Attach via `.recorder(rec)` (the
60
+ * Agent does this automatically for CAUSAL memories). */
61
+ export function causalEvidenceRecorder(options = {}) {
62
+ const maxPreview = options.maxPreviewChars ?? 200;
63
+ const maxField = options.maxFieldChars ?? 2000;
64
+ // ── per-turn accumulators (reset on agent.turn_start; executor clear()
65
+ // resets between runs; pause/resume keeps pre-pause evidence) ──
66
+ let decisions = [];
67
+ let toolCalls = [];
68
+ let pendingTools = new Map();
69
+ let tokens = { input: 0, output: 0 };
70
+ let iterations = 0;
71
+ let turnStartMs;
72
+ let authoritative;
73
+ const reset = () => {
74
+ decisions = [];
75
+ toolCalls = [];
76
+ pendingTools = new Map();
77
+ tokens = { input: 0, output: 0 };
78
+ iterations = 0;
79
+ turnStartMs = undefined;
80
+ authoritative = undefined;
81
+ };
82
+ return {
83
+ id: options.id ?? 'causal-evidence',
84
+ onEmit(event) {
85
+ const { name, payload } = event;
86
+ switch (name) {
87
+ case 'agentfootprint.agent.turn_start':
88
+ // A new turn on the same executor — start fresh (one snapshot per turn).
89
+ reset();
90
+ turnStartMs = Date.now();
91
+ break;
92
+ case 'agentfootprint.stream.tool_start': {
93
+ const id = String(payload.toolCallId ?? '');
94
+ pendingTools.set(id, {
95
+ name: String(payload.toolName ?? 'unknown'),
96
+ args: bounded((payload.args ?? {}), maxField) ?? {},
97
+ });
98
+ break;
99
+ }
100
+ case 'agentfootprint.stream.tool_end': {
101
+ const id = String(payload.toolCallId ?? '');
102
+ const started = pendingTools.get(id);
103
+ pendingTools.delete(id);
104
+ toolCalls.push({
105
+ name: started?.name ?? 'unknown',
106
+ args: started?.args ?? {},
107
+ resultPreview: preview(payload.result, maxPreview),
108
+ errored: payload.error === true,
109
+ });
110
+ break;
111
+ }
112
+ case 'agentfootprint.stream.llm_end': {
113
+ const usage = payload.usage;
114
+ tokens = {
115
+ input: tokens.input + (usage?.input ?? 0),
116
+ output: tokens.output + (usage?.output ?? 0),
117
+ };
118
+ const iter = Number(payload.iteration ?? 0);
119
+ if (iter > iterations)
120
+ iterations = iter;
121
+ break;
122
+ }
123
+ case 'agentfootprint.context.evaluated': {
124
+ // Skill-graph routing provenance → one DecisionRecord per routed skill.
125
+ const routing = payload.routing;
126
+ if (Array.isArray(routing)) {
127
+ for (const r of routing) {
128
+ decisions.push({
129
+ stageId: 'skill-graph',
130
+ chosen: String(r.injectionId ?? r.id ?? 'unknown'),
131
+ ...(r.label !== undefined || r.via !== undefined
132
+ ? { rule: r.label ?? `via ${r.via}` }
133
+ : {}),
134
+ ...(r.path !== undefined && {
135
+ evidence: { path: r.path },
136
+ }),
137
+ });
138
+ }
139
+ }
140
+ break;
141
+ }
142
+ case 'agentfootprint.agent.turn_end': {
143
+ // Authoritative totals when the write runs after turn_end.
144
+ authoritative = {
145
+ iterations: Number(payload.iterationCount ?? iterations),
146
+ input: Number(payload.totalInputTokens ?? tokens.input),
147
+ output: Number(payload.totalOutputTokens ?? tokens.output),
148
+ durationMs: Number(payload.durationMs ?? 0),
149
+ };
150
+ break;
151
+ }
152
+ default:
153
+ break;
154
+ }
155
+ },
156
+ /** footprintjs FlowRecorder channel — decide() decision evidence.
157
+ * FlowDecisionEvent carries `decider` (display name), `chosen`, optional
158
+ * `evidence` from decide(), and `traversalContext.stageId` (the stable,
159
+ * subflow-prefixed stage id — preferred for DecisionRecord.stageId). */
160
+ onDecision(event) {
161
+ const stageId = event.traversalContext?.stageId ?? event.decider;
162
+ // Internal agent plumbing (the cache-gate decider) is not domain
163
+ // decision evidence. `includes` (not startsWith): in reactMode
164
+ // 'dynamic-grouped' the names are double-prefixed
165
+ // ('sf-llm-call/sf-cache/…').
166
+ if (String(event.chosen ?? '').includes('sf-cache/') || String(stageId).includes('sf-cache'))
167
+ return;
168
+ const evidence = event.evidence;
169
+ decisions.push({
170
+ stageId: String(stageId),
171
+ chosen: String(event.chosen ?? 'unknown'),
172
+ ...(evidence?.label !== undefined || evidence?.rule !== undefined
173
+ ? { rule: String(evidence.label ?? evidence.rule) }
174
+ : {}),
175
+ ...(evidence !== undefined && {
176
+ evidence: bounded(evidence, maxField),
177
+ }),
178
+ });
179
+ },
180
+ /** footprintjs FlowRecorder channel — select() selection evidence. */
181
+ onSelected(event) {
182
+ const stageId = event.traversalContext?.stageId ?? event.parent;
183
+ if (String(stageId).includes('sf-cache'))
184
+ return;
185
+ // The agent's own Context slot-fork is a selector — plumbing, not domain.
186
+ if (String(stageId).includes('context') && event.selected.every((s) => s.startsWith('sf-')))
187
+ return;
188
+ decisions.push({
189
+ stageId: String(stageId),
190
+ chosen: event.selected.join(', '),
191
+ ...(event.evidence !== undefined && {
192
+ evidence: bounded(event.evidence, maxField),
193
+ }),
194
+ });
195
+ },
196
+ collect() {
197
+ return {
198
+ iterations: authoritative?.iterations ?? iterations,
199
+ decisions: [...decisions],
200
+ toolCalls: [...toolCalls],
201
+ durationMs: authoritative?.durationMs ?? (turnStartMs !== undefined ? Date.now() - turnStartMs : 0),
202
+ tokenUsage: {
203
+ input: authoritative?.input ?? tokens.input,
204
+ output: authoritative?.output ?? tokens.output,
205
+ },
206
+ };
207
+ },
208
+ clear() {
209
+ reset();
210
+ },
211
+ };
212
+ }
213
+ //# sourceMappingURL=evidenceRecorder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidenceRecorder.js","sourceRoot":"","sources":["../../../../src/memory/causal/evidenceRecorder.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  export { DEFAULT_TOOL_RESULT_PREVIEW_LEN } from './types.js';
2
+ export { causalEvidenceRecorder, } from './evidenceRecorder.js';
2
3
  export { writeSnapshot } from './writeSnapshot.js';
3
4
  export { loadSnapshot } from './loadSnapshot.js';
4
5
  export { snapshotPipeline } from './snapshotPipeline.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/memory/causal/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,+BAA+B,EAAE,MAAM,YAAY,CAAC;AAE7D,OAAO,EAAE,aAAa,EAA4B,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,YAAY,EAA2B,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAA+B,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/memory/causal/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,+BAA+B,EAAE,MAAM,YAAY,CAAC;AAE7D,OAAO,EACL,sBAAsB,GAIvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,aAAa,EAA4B,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,YAAY,EAA2B,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAA+B,MAAM,uBAAuB,CAAC"}
@@ -78,15 +78,29 @@ function formatProjection(entry, projection, score) {
78
78
  const header = `[Past run · query: "${truncate(snap.query, 80)}" · score: ${score.toFixed(2)}]`;
79
79
  let body;
80
80
  switch (projection) {
81
- case SNAPSHOT_PROJECTIONS.DECISIONS:
81
+ case SNAPSHOT_PROJECTIONS.DECISIONS: {
82
+ // Tool evidence is part of the "why": in LLM-decided flows the
83
+ // operator-level facts (creditScore=580, dti=0.45) arrive as tool
84
+ // results, so the decisions projection includes them.
85
+ // SECURITY: this replays STORED TOOL OUTPUT into a future prompt — a
86
+ // persisted prompt-injection surface if tools ingest untrusted content.
87
+ // Treat snapshot stores as prompt-trusted; sanitize tool output at the
88
+ // tool boundary when it carries third-party text.
89
+ const toolLines = snap.toolCalls.length === 0
90
+ ? ''
91
+ : `\nTool evidence:\n${snap.toolCalls
92
+ .map((t) => `- ${t.name}(${JSON.stringify(t.args)}) → ${t.resultPreview}` +
93
+ (t.errored ? ' [ERROR]' : ''))
94
+ .join('\n')}`;
82
95
  body =
83
- snap.decisions.length === 0
96
+ snap.decisions.length === 0 && snap.toolCalls.length === 0
84
97
  ? `(no decision evidence captured)\nFinal answer: ${snap.finalContent}`
85
- : snap.decisions
98
+ : `${snap.decisions
86
99
  .map((d) => `- ${d.stageId} → "${d.chosen}"${d.rule ? ` (rule: ${d.rule})` : ''}` +
87
100
  (d.evidence ? `; evidence: ${JSON.stringify(d.evidence)}` : ''))
88
- .join('\n');
101
+ .join('\n')}${toolLines}\nFinal answer: ${snap.finalContent}`;
89
102
  break;
103
+ }
90
104
  case SNAPSHOT_PROJECTIONS.NARRATIVE:
91
105
  body = snap.narrative ?? `(no narrative captured)\nFinal answer: ${snap.finalContent}`;
92
106
  break;
@@ -1 +1 @@
1
- {"version":3,"file":"loadSnapshot.js","sourceRoot":"","sources":["../../../../src/memory/causal/loadSnapshot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loadSnapshot.js","sourceRoot":"","sources":["../../../../src/memory/causal/loadSnapshot.ts"],"names":[],"mappings":"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"}
@@ -46,14 +46,18 @@ export function writeSnapshot(config) {
46
46
  }));
47
47
  const now = Date.now();
48
48
  const ttl = config.ttlMs ? now + config.ttlMs : undefined;
49
+ // Evidence bridge (#5): the wire layer delivers run evidence harvested by
50
+ // `causalEvidenceRecorder` via the write mount's `evidenceSource`. Absent
51
+ // (non-agent hosts, no recorder attached) → zeros, as before.
52
+ const evidence = scope.runEvidence;
49
53
  const snapshot = {
50
54
  query,
51
55
  finalContent,
52
- iterations: 0, // TODO: capture from scope when wire helper exposes it
53
- decisions: [], // Populated by a follow-up FlowRecorder integration
54
- toolCalls: [], // Populated by a follow-up FlowRecorder integration
55
- durationMs: 0,
56
- tokenUsage: { input: 0, output: 0 },
56
+ iterations: evidence?.iterations ?? 0,
57
+ decisions: evidence?.decisions ?? [],
58
+ toolCalls: evidence?.toolCalls ?? [],
59
+ durationMs: evidence?.durationMs ?? 0,
60
+ tokenUsage: evidence?.tokenUsage ?? { input: 0, output: 0 },
57
61
  };
58
62
  const entry = {
59
63
  id: `snap-${turn}`,
@@ -1 +1 @@
1
- {"version":3,"file":"writeSnapshot.js","sourceRoot":"","sources":["../../../../src/memory/causal/writeSnapshot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AA0CH,MAAM,UAAU,aAAa,CAAC,MAA2B;IACvD,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IACnC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,kBAAkB,CAAC;IAE3D,OAAO,KAAK,EAAE,KAA8B,EAAiB,EAAE;QAC7D,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAChC,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC;QAC9B,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAA0B,CAAC;QACvE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAErC,4DAA4D;QAC5D,gEAAgE;QAChE,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QAC3D,MAAM,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;QACrE,MAAM,KAAK,GAAI,OAAO,EAAE,OAA8B,IAAI,EAAE,CAAC;QAC7D,MAAM,YAAY,GAAI,YAAY,EAAE,OAA8B,IAAI,EAAE,CAAC;QAEzE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,iCAAiC;QAEjE,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC;QACzC,MAAM,QAAQ,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC;YACrC,IAAI,EAAE,KAAK;YACX,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9B,CAAC,CAAa,CAAC;QAEhB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QAE1D,MAAM,QAAQ,GAAkB;YAC9B,KAAK;YACL,YAAY;YACZ,UAAU,EAAE,CAAC,EAAE,uDAAuD;YACtE,SAAS,EAAE,EAAE,EAAE,oDAAoD;YACnE,SAAS,EAAE,EAAE,EAAE,oDAAoD;YACnE,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;SACpC,CAAC;QAEF,MAAM,KAAK,GAA+B;YACxC,EAAE,EAAE,QAAQ,IAAI,EAAE;YAClB,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,CAAC;YACV,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,GAAG;YACd,cAAc,EAAE,GAAG;YACnB,WAAW,EAAE,CAAC;YACd,SAAS,EAAE,CAAC,GAAG,QAAQ,CAAC;YACxB,cAAc,EAAE,UAAU;YAC1B,GAAG,CAAC,GAAG,KAAK,SAAS,IAAI,EAAE,GAAG,EAAE,CAAC;YACjC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;YACzC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SAC3B,CAAC;QAEF,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"writeSnapshot.js","sourceRoot":"","sources":["../../../../src/memory/causal/writeSnapshot.ts"],"names":[],"mappings":"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"}
@@ -44,8 +44,8 @@
44
44
  * - `SEMANTIC` — extracted structured facts, deduped on key
45
45
  * - `NARRATIVE` — beats / summaries of prior runs (append-only)
46
46
  * - `CAUSAL` — footprintjs execution snapshots, the differentiator
47
- * (replays stored run outcomes for "why?" follow-ups;
48
- * operator-level decision-evidence wiring in progress)
47
+ * (replays stored decisions + tool evidence for "why?"
48
+ * follow-ups harvested automatically per run)
49
49
  */
50
50
  export const MEMORY_TYPES = {
51
51
  EPISODIC: 'episodic',
@@ -40,7 +40,11 @@ export function mountMemoryRead(builder, config) {
40
40
  // like `loadRelevant` derive the query from the last user
41
41
  // message here. The write-side `newMessages` field is empty
42
42
  // during read; these are two different concerns.
43
- messages: parentState.messages ?? [],
43
+ // Agents carry the conversation as `history`; bare hosts may use
44
+ // `messages`. Without this fallback, read stages that derive the query
45
+ // from the last user message (loadSnapshot/loadRelevant) saw [] inside
46
+ // an Agent and silently injected nothing — the causal READ never fired.
47
+ messages: parentState.messages ?? parentState.history ?? [],
44
48
  newMessages: [], // write side unused in read subflow
45
49
  }),
46
50
  outputMapper: (subflowState) => ({
@@ -66,6 +70,11 @@ export function mountMemoryWrite(builder, config) {
66
70
  turnNumber: parentState[turnNumberKey],
67
71
  contextTokensRemaining: parentState[contextTokensKey] ?? 0,
68
72
  newMessages: parentState[newMessagesKey] ?? [],
73
+ // Evidence bridge (#5): harvested run evidence for causal writeSnapshot.
74
+ // Closure-delivered (no PARENT-scope write) — note it DOES land in the
75
+ // write subflow's own tracked scope/commit log, like newMessages; the
76
+ // values are already observable as events, so no new exposure class.
77
+ ...(config.evidenceSource && { runEvidence: config.evidenceSource() }),
69
78
  }),
70
79
  // No outputMapper — write has no parent-visible output.
71
80
  });
@@ -1 +1 @@
1
- {"version":3,"file":"mountMemoryPipeline.js","sourceRoot":"","sources":["../../../../src/memory/wire/mountMemoryPipeline.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mountMemoryPipeline.js","sourceRoot":"","sources":["../../../../src/memory/wire/mountMemoryPipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,217 @@
1
+ "use strict";
2
+ /**
3
+ * causalEvidenceRecorder — the evidence bridge (backlog Phase-1 #5).
4
+ *
5
+ * Harvests, DURING the run, everything a causal snapshot needs beyond
6
+ * (query, finalContent) — from events the engine already fires:
7
+ *
8
+ * stream.tool_start/tool_end → ToolCallRecord (name, args, resultPreview, errored)
9
+ * stream.llm_end → tokenUsage accumulation + iteration high-water
10
+ * agent.turn_start/turn_end → durationMs (+ authoritative totals when seen)
11
+ * FlowRecorder.onDecision → DecisionRecord with footprintjs decide()/select()
12
+ * operator-level evidence (rule, conditions, chosen)
13
+ * context.evaluated routing → DecisionRecord per skill the graph routed to
14
+ *
15
+ * Pattern: CombinedRecorder (Convention 1 — single purpose: evidence
16
+ * accumulation); per-turn reset anchored on `agent.turn_start`
17
+ * (Convention 4 — executor `clear()` resets between runs; same-
18
+ * executor pause/resume PRESERVES pre-pause evidence by design).
19
+ * PII note: tool args/results and decide() evidence persist into snapshots.
20
+ * footprintjs `RedactionPolicy.emitPatterns` redacts the emit channel
21
+ * BEFORE this recorder IF the consumer configures one on the executor
22
+ * — the Agent does NOT configure one by default. Values are bounded
23
+ * (`maxPreviewChars` for results, `maxFieldChars` for args/evidence);
24
+ * treat the snapshot store as PII-bearing and protect it accordingly.
25
+ *
26
+ * The Agent attaches this automatically when a CAUSAL memory is mounted and
27
+ * threads `collect` into the memory write mount (`evidenceSource`) — so
28
+ * `writeSnapshot` persists real evidence instead of zeros.
29
+ */
30
+ Object.defineProperty(exports, "__esModule", { value: true });
31
+ exports.causalEvidenceRecorder = void 0;
32
+ function preview(value, max) {
33
+ let s;
34
+ if (typeof value === 'string')
35
+ s = value;
36
+ else {
37
+ try {
38
+ s = JSON.stringify(value);
39
+ }
40
+ catch {
41
+ s = String(value);
42
+ }
43
+ }
44
+ return s.length > max ? `${s.slice(0, max)}…` : s;
45
+ }
46
+ /** Bound a record-ish value: oversized serializations become a truncated
47
+ * preview marker so snapshots can't grow unbounded (and PII exposure is
48
+ * capped). Small values pass through untouched. */
49
+ function bounded(value, max) {
50
+ if (value === undefined)
51
+ return undefined;
52
+ try {
53
+ const s = JSON.stringify(value);
54
+ if (s.length <= max)
55
+ return value;
56
+ return { __truncated: `${s.slice(0, max)}…` };
57
+ }
58
+ catch {
59
+ return { __truncated: String(value).slice(0, max) };
60
+ }
61
+ }
62
+ /** Build the evidence-harvesting recorder. Attach via `.recorder(rec)` (the
63
+ * Agent does this automatically for CAUSAL memories). */
64
+ function causalEvidenceRecorder(options = {}) {
65
+ const maxPreview = options.maxPreviewChars ?? 200;
66
+ const maxField = options.maxFieldChars ?? 2000;
67
+ // ── per-turn accumulators (reset on agent.turn_start; executor clear()
68
+ // resets between runs; pause/resume keeps pre-pause evidence) ──
69
+ let decisions = [];
70
+ let toolCalls = [];
71
+ let pendingTools = new Map();
72
+ let tokens = { input: 0, output: 0 };
73
+ let iterations = 0;
74
+ let turnStartMs;
75
+ let authoritative;
76
+ const reset = () => {
77
+ decisions = [];
78
+ toolCalls = [];
79
+ pendingTools = new Map();
80
+ tokens = { input: 0, output: 0 };
81
+ iterations = 0;
82
+ turnStartMs = undefined;
83
+ authoritative = undefined;
84
+ };
85
+ return {
86
+ id: options.id ?? 'causal-evidence',
87
+ onEmit(event) {
88
+ const { name, payload } = event;
89
+ switch (name) {
90
+ case 'agentfootprint.agent.turn_start':
91
+ // A new turn on the same executor — start fresh (one snapshot per turn).
92
+ reset();
93
+ turnStartMs = Date.now();
94
+ break;
95
+ case 'agentfootprint.stream.tool_start': {
96
+ const id = String(payload.toolCallId ?? '');
97
+ pendingTools.set(id, {
98
+ name: String(payload.toolName ?? 'unknown'),
99
+ args: bounded((payload.args ?? {}), maxField) ?? {},
100
+ });
101
+ break;
102
+ }
103
+ case 'agentfootprint.stream.tool_end': {
104
+ const id = String(payload.toolCallId ?? '');
105
+ const started = pendingTools.get(id);
106
+ pendingTools.delete(id);
107
+ toolCalls.push({
108
+ name: started?.name ?? 'unknown',
109
+ args: started?.args ?? {},
110
+ resultPreview: preview(payload.result, maxPreview),
111
+ errored: payload.error === true,
112
+ });
113
+ break;
114
+ }
115
+ case 'agentfootprint.stream.llm_end': {
116
+ const usage = payload.usage;
117
+ tokens = {
118
+ input: tokens.input + (usage?.input ?? 0),
119
+ output: tokens.output + (usage?.output ?? 0),
120
+ };
121
+ const iter = Number(payload.iteration ?? 0);
122
+ if (iter > iterations)
123
+ iterations = iter;
124
+ break;
125
+ }
126
+ case 'agentfootprint.context.evaluated': {
127
+ // Skill-graph routing provenance → one DecisionRecord per routed skill.
128
+ const routing = payload.routing;
129
+ if (Array.isArray(routing)) {
130
+ for (const r of routing) {
131
+ decisions.push({
132
+ stageId: 'skill-graph',
133
+ chosen: String(r.injectionId ?? r.id ?? 'unknown'),
134
+ ...(r.label !== undefined || r.via !== undefined
135
+ ? { rule: r.label ?? `via ${r.via}` }
136
+ : {}),
137
+ ...(r.path !== undefined && {
138
+ evidence: { path: r.path },
139
+ }),
140
+ });
141
+ }
142
+ }
143
+ break;
144
+ }
145
+ case 'agentfootprint.agent.turn_end': {
146
+ // Authoritative totals when the write runs after turn_end.
147
+ authoritative = {
148
+ iterations: Number(payload.iterationCount ?? iterations),
149
+ input: Number(payload.totalInputTokens ?? tokens.input),
150
+ output: Number(payload.totalOutputTokens ?? tokens.output),
151
+ durationMs: Number(payload.durationMs ?? 0),
152
+ };
153
+ break;
154
+ }
155
+ default:
156
+ break;
157
+ }
158
+ },
159
+ /** footprintjs FlowRecorder channel — decide() decision evidence.
160
+ * FlowDecisionEvent carries `decider` (display name), `chosen`, optional
161
+ * `evidence` from decide(), and `traversalContext.stageId` (the stable,
162
+ * subflow-prefixed stage id — preferred for DecisionRecord.stageId). */
163
+ onDecision(event) {
164
+ const stageId = event.traversalContext?.stageId ?? event.decider;
165
+ // Internal agent plumbing (the cache-gate decider) is not domain
166
+ // decision evidence. `includes` (not startsWith): in reactMode
167
+ // 'dynamic-grouped' the names are double-prefixed
168
+ // ('sf-llm-call/sf-cache/…').
169
+ if (String(event.chosen ?? '').includes('sf-cache/') || String(stageId).includes('sf-cache'))
170
+ return;
171
+ const evidence = event.evidence;
172
+ decisions.push({
173
+ stageId: String(stageId),
174
+ chosen: String(event.chosen ?? 'unknown'),
175
+ ...(evidence?.label !== undefined || evidence?.rule !== undefined
176
+ ? { rule: String(evidence.label ?? evidence.rule) }
177
+ : {}),
178
+ ...(evidence !== undefined && {
179
+ evidence: bounded(evidence, maxField),
180
+ }),
181
+ });
182
+ },
183
+ /** footprintjs FlowRecorder channel — select() selection evidence. */
184
+ onSelected(event) {
185
+ const stageId = event.traversalContext?.stageId ?? event.parent;
186
+ if (String(stageId).includes('sf-cache'))
187
+ return;
188
+ // The agent's own Context slot-fork is a selector — plumbing, not domain.
189
+ if (String(stageId).includes('context') && event.selected.every((s) => s.startsWith('sf-')))
190
+ return;
191
+ decisions.push({
192
+ stageId: String(stageId),
193
+ chosen: event.selected.join(', '),
194
+ ...(event.evidence !== undefined && {
195
+ evidence: bounded(event.evidence, maxField),
196
+ }),
197
+ });
198
+ },
199
+ collect() {
200
+ return {
201
+ iterations: authoritative?.iterations ?? iterations,
202
+ decisions: [...decisions],
203
+ toolCalls: [...toolCalls],
204
+ durationMs: authoritative?.durationMs ?? (turnStartMs !== undefined ? Date.now() - turnStartMs : 0),
205
+ tokenUsage: {
206
+ input: authoritative?.input ?? tokens.input,
207
+ output: authoritative?.output ?? tokens.output,
208
+ },
209
+ };
210
+ },
211
+ clear() {
212
+ reset();
213
+ },
214
+ };
215
+ }
216
+ exports.causalEvidenceRecorder = causalEvidenceRecorder;
217
+ //# sourceMappingURL=evidenceRecorder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidenceRecorder.js","sourceRoot":"","sources":["../../../src/memory/causal/evidenceRecorder.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.snapshotPipeline = exports.loadSnapshot = exports.writeSnapshot = exports.DEFAULT_TOOL_RESULT_PREVIEW_LEN = void 0;
3
+ exports.snapshotPipeline = exports.loadSnapshot = exports.writeSnapshot = exports.causalEvidenceRecorder = exports.DEFAULT_TOOL_RESULT_PREVIEW_LEN = void 0;
4
4
  var types_js_1 = require("./types.js");
5
5
  Object.defineProperty(exports, "DEFAULT_TOOL_RESULT_PREVIEW_LEN", { enumerable: true, get: function () { return types_js_1.DEFAULT_TOOL_RESULT_PREVIEW_LEN; } });
6
+ var evidenceRecorder_js_1 = require("./evidenceRecorder.js");
7
+ Object.defineProperty(exports, "causalEvidenceRecorder", { enumerable: true, get: function () { return evidenceRecorder_js_1.causalEvidenceRecorder; } });
6
8
  var writeSnapshot_js_1 = require("./writeSnapshot.js");
7
9
  Object.defineProperty(exports, "writeSnapshot", { enumerable: true, get: function () { return writeSnapshot_js_1.writeSnapshot; } });
8
10
  var loadSnapshot_js_1 = require("./loadSnapshot.js");
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/memory/causal/index.ts"],"names":[],"mappings":";;;AAOA,uCAA6D;AAApD,2HAAA,+BAA+B,OAAA;AAExC,uDAA6E;AAApE,iHAAA,aAAa,OAAA;AACtB,qDAA0E;AAAjE,+GAAA,YAAY,OAAA;AACrB,6DAAsF;AAA7E,uHAAA,gBAAgB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/memory/causal/index.ts"],"names":[],"mappings":";;;AAOA,uCAA6D;AAApD,2HAAA,+BAA+B,OAAA;AAExC,6DAK+B;AAJ7B,6HAAA,sBAAsB,OAAA;AAKxB,uDAA6E;AAApE,iHAAA,aAAa,OAAA;AACtB,qDAA0E;AAAjE,+GAAA,YAAY,OAAA;AACrB,6DAAsF;AAA7E,uHAAA,gBAAgB,OAAA"}