agentfootprint 7.7.0 → 7.8.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 (205) hide show
  1. package/CLAUDE.md +2 -1
  2. package/dist/adapters/llm/AnthropicProvider.js +5 -4
  3. package/dist/adapters/llm/AnthropicProvider.js.map +1 -1
  4. package/dist/adapters/llm/BedrockProvider.js +5 -4
  5. package/dist/adapters/llm/BedrockProvider.js.map +1 -1
  6. package/dist/adapters/llm/BrowserAnthropicProvider.js +5 -4
  7. package/dist/adapters/llm/BrowserAnthropicProvider.js.map +1 -1
  8. package/dist/adapters/llm/BrowserOpenAIProvider.js +13 -10
  9. package/dist/adapters/llm/BrowserOpenAIProvider.js.map +1 -1
  10. package/dist/adapters/llm/OpenAIProvider.js +8 -6
  11. package/dist/adapters/llm/OpenAIProvider.js.map +1 -1
  12. package/dist/core/Agent.js +10 -0
  13. package/dist/core/Agent.js.map +1 -1
  14. package/dist/core/LLMCall.js +10 -1
  15. package/dist/core/LLMCall.js.map +1 -1
  16. package/dist/core/RunnerBase.js +42 -12
  17. package/dist/core/RunnerBase.js.map +1 -1
  18. package/dist/core/agent/buildAgentChart.js +7 -3
  19. package/dist/core/agent/buildAgentChart.js.map +1 -1
  20. package/dist/core/agent/buildAgentMessageApiChart.js +18 -1
  21. package/dist/core/agent/buildAgentMessageApiChart.js.map +1 -1
  22. package/dist/core/agent/buildMessageApiChart.js +4 -1
  23. package/dist/core/agent/buildMessageApiChart.js.map +1 -1
  24. package/dist/core/agent/stages/callLLM.js +18 -2
  25. package/dist/core/agent/stages/callLLM.js.map +1 -1
  26. package/dist/core-flow/Parallel.js +9 -1
  27. package/dist/core-flow/Parallel.js.map +1 -1
  28. package/dist/esm/adapters/llm/AnthropicProvider.d.ts +3 -3
  29. package/dist/esm/adapters/llm/AnthropicProvider.js +5 -4
  30. package/dist/esm/adapters/llm/AnthropicProvider.js.map +1 -1
  31. package/dist/esm/adapters/llm/BedrockProvider.d.ts +3 -3
  32. package/dist/esm/adapters/llm/BedrockProvider.js +5 -4
  33. package/dist/esm/adapters/llm/BedrockProvider.js.map +1 -1
  34. package/dist/esm/adapters/llm/BrowserAnthropicProvider.d.ts +3 -3
  35. package/dist/esm/adapters/llm/BrowserAnthropicProvider.js +5 -4
  36. package/dist/esm/adapters/llm/BrowserAnthropicProvider.js.map +1 -1
  37. package/dist/esm/adapters/llm/BrowserOpenAIProvider.d.ts +5 -5
  38. package/dist/esm/adapters/llm/BrowserOpenAIProvider.js +13 -10
  39. package/dist/esm/adapters/llm/BrowserOpenAIProvider.js.map +1 -1
  40. package/dist/esm/adapters/llm/OpenAIProvider.d.ts +3 -3
  41. package/dist/esm/adapters/llm/OpenAIProvider.js +8 -6
  42. package/dist/esm/adapters/llm/OpenAIProvider.js.map +1 -1
  43. package/dist/esm/adapters/types.d.ts +95 -2
  44. package/dist/esm/core/Agent.js +10 -0
  45. package/dist/esm/core/Agent.js.map +1 -1
  46. package/dist/esm/core/LLMCall.js +10 -1
  47. package/dist/esm/core/LLMCall.js.map +1 -1
  48. package/dist/esm/core/RunnerBase.d.ts +22 -1
  49. package/dist/esm/core/RunnerBase.js +42 -12
  50. package/dist/esm/core/RunnerBase.js.map +1 -1
  51. package/dist/esm/core/agent/buildAgentChart.d.ts +7 -3
  52. package/dist/esm/core/agent/buildAgentChart.js +7 -3
  53. package/dist/esm/core/agent/buildAgentChart.js.map +1 -1
  54. package/dist/esm/core/agent/buildAgentMessageApiChart.js +18 -1
  55. package/dist/esm/core/agent/buildAgentMessageApiChart.js.map +1 -1
  56. package/dist/esm/core/agent/buildMessageApiChart.js +4 -1
  57. package/dist/esm/core/agent/buildMessageApiChart.js.map +1 -1
  58. package/dist/esm/core/agent/stages/callLLM.js +18 -2
  59. package/dist/esm/core/agent/stages/callLLM.js.map +1 -1
  60. package/dist/esm/core/runner.d.ts +40 -5
  61. package/dist/esm/core-flow/Parallel.js +9 -1
  62. package/dist/esm/core-flow/Parallel.js.map +1 -1
  63. package/dist/esm/index.js +9 -9
  64. package/dist/esm/index.js.map +1 -1
  65. package/dist/esm/lib/context-bisect/types.d.ts +9 -0
  66. package/dist/esm/lib/context-bisect/types.js.map +1 -1
  67. package/dist/esm/lib/recorded-chat/recordedChat.js +10 -1
  68. package/dist/esm/lib/recorded-chat/recordedChat.js.map +1 -1
  69. package/dist/esm/lib/recorded-chat/types.d.ts +10 -0
  70. package/dist/esm/observe.d.ts +3 -1
  71. package/dist/esm/observe.js +13 -1
  72. package/dist/esm/observe.js.map +1 -1
  73. package/dist/esm/providers.d.ts +1 -1
  74. package/dist/esm/recorders/core/EmitBridge.d.ts +9 -3
  75. package/dist/esm/recorders/core/EmitBridge.js +4 -3
  76. package/dist/esm/recorders/core/EmitBridge.js.map +1 -1
  77. package/dist/esm/recorders/core/ResilienceRecorder.d.ts +32 -0
  78. package/dist/esm/recorders/core/ResilienceRecorder.js +41 -0
  79. package/dist/esm/recorders/core/ResilienceRecorder.js.map +1 -0
  80. package/dist/esm/recorders/core/resilienceHooks.d.ts +34 -0
  81. package/dist/esm/recorders/core/resilienceHooks.js +74 -0
  82. package/dist/esm/recorders/core/resilienceHooks.js.map +1 -0
  83. package/dist/esm/recorders/core/typedEmit.d.ts +1 -2
  84. package/dist/esm/recorders/observability/BoundaryRecorder.d.ts +176 -12
  85. package/dist/esm/recorders/observability/BoundaryRecorder.js +119 -8
  86. package/dist/esm/recorders/observability/BoundaryRecorder.js.map +1 -1
  87. package/dist/esm/recorders/observability/FlowchartRecorder.d.ts +13 -2
  88. package/dist/esm/recorders/observability/FlowchartRecorder.js +14 -3
  89. package/dist/esm/recorders/observability/FlowchartRecorder.js.map +1 -1
  90. package/dist/esm/recorders/observability/localObservability.d.ts +66 -6
  91. package/dist/esm/recorders/observability/localObservability.js +27 -7
  92. package/dist/esm/recorders/observability/localObservability.js.map +1 -1
  93. package/dist/esm/recorders/observability/recordRun.d.ts +143 -0
  94. package/dist/esm/recorders/observability/recordRun.js +133 -0
  95. package/dist/esm/recorders/observability/recordRun.js.map +1 -0
  96. package/dist/esm/recorders/observability/trace.d.ts +65 -13
  97. package/dist/esm/recorders/observability/trace.js +36 -9
  98. package/dist/esm/recorders/observability/trace.js.map +1 -1
  99. package/dist/esm/reliability/buildReliabilityGateChart.d.ts +23 -9
  100. package/dist/esm/reliability/buildReliabilityGateChart.js +37 -10
  101. package/dist/esm/reliability/buildReliabilityGateChart.js.map +1 -1
  102. package/dist/esm/resilience/withCircuitBreaker.d.ts +15 -5
  103. package/dist/esm/resilience/withCircuitBreaker.js +14 -7
  104. package/dist/esm/resilience/withCircuitBreaker.js.map +1 -1
  105. package/dist/esm/resilience/withFallback.d.ts +7 -1
  106. package/dist/esm/resilience/withFallback.js +30 -11
  107. package/dist/esm/resilience/withFallback.js.map +1 -1
  108. package/dist/esm/resilience/withRetry.d.ts +10 -5
  109. package/dist/esm/resilience/withRetry.js +53 -3
  110. package/dist/esm/resilience/withRetry.js.map +1 -1
  111. package/dist/esm/tool-providers/index.js +2 -2
  112. package/dist/esm/tool-providers/index.js.map +1 -1
  113. package/dist/index.js +9 -9
  114. package/dist/index.js.map +1 -1
  115. package/dist/lib/context-bisect/types.js.map +1 -1
  116. package/dist/lib/recorded-chat/recordedChat.js +10 -1
  117. package/dist/lib/recorded-chat/recordedChat.js.map +1 -1
  118. package/dist/observe.js +16 -2
  119. package/dist/observe.js.map +1 -1
  120. package/dist/recorders/core/EmitBridge.js +4 -3
  121. package/dist/recorders/core/EmitBridge.js.map +1 -1
  122. package/dist/recorders/core/ResilienceRecorder.js +45 -0
  123. package/dist/recorders/core/ResilienceRecorder.js.map +1 -0
  124. package/dist/recorders/core/resilienceHooks.js +78 -0
  125. package/dist/recorders/core/resilienceHooks.js.map +1 -0
  126. package/dist/recorders/observability/BoundaryRecorder.js +119 -8
  127. package/dist/recorders/observability/BoundaryRecorder.js.map +1 -1
  128. package/dist/recorders/observability/FlowchartRecorder.js +14 -3
  129. package/dist/recorders/observability/FlowchartRecorder.js.map +1 -1
  130. package/dist/recorders/observability/localObservability.js +27 -7
  131. package/dist/recorders/observability/localObservability.js.map +1 -1
  132. package/dist/recorders/observability/recordRun.js +137 -0
  133. package/dist/recorders/observability/recordRun.js.map +1 -0
  134. package/dist/recorders/observability/trace.js +36 -9
  135. package/dist/recorders/observability/trace.js.map +1 -1
  136. package/dist/reliability/buildReliabilityGateChart.js +37 -10
  137. package/dist/reliability/buildReliabilityGateChart.js.map +1 -1
  138. package/dist/resilience/withCircuitBreaker.js +14 -7
  139. package/dist/resilience/withCircuitBreaker.js.map +1 -1
  140. package/dist/resilience/withFallback.js +30 -11
  141. package/dist/resilience/withFallback.js.map +1 -1
  142. package/dist/resilience/withRetry.js +53 -3
  143. package/dist/resilience/withRetry.js.map +1 -1
  144. package/dist/tool-providers/index.js +2 -2
  145. package/dist/tool-providers/index.js.map +1 -1
  146. package/dist/types/adapters/llm/AnthropicProvider.d.ts +3 -3
  147. package/dist/types/adapters/llm/AnthropicProvider.d.ts.map +1 -1
  148. package/dist/types/adapters/llm/BedrockProvider.d.ts +3 -3
  149. package/dist/types/adapters/llm/BedrockProvider.d.ts.map +1 -1
  150. package/dist/types/adapters/llm/BrowserAnthropicProvider.d.ts +3 -3
  151. package/dist/types/adapters/llm/BrowserAnthropicProvider.d.ts.map +1 -1
  152. package/dist/types/adapters/llm/BrowserOpenAIProvider.d.ts +5 -5
  153. package/dist/types/adapters/llm/BrowserOpenAIProvider.d.ts.map +1 -1
  154. package/dist/types/adapters/llm/OpenAIProvider.d.ts +3 -3
  155. package/dist/types/adapters/llm/OpenAIProvider.d.ts.map +1 -1
  156. package/dist/types/adapters/types.d.ts +95 -2
  157. package/dist/types/adapters/types.d.ts.map +1 -1
  158. package/dist/types/core/Agent.d.ts.map +1 -1
  159. package/dist/types/core/LLMCall.d.ts.map +1 -1
  160. package/dist/types/core/RunnerBase.d.ts +22 -1
  161. package/dist/types/core/RunnerBase.d.ts.map +1 -1
  162. package/dist/types/core/agent/buildAgentChart.d.ts +7 -3
  163. package/dist/types/core/agent/buildAgentChart.d.ts.map +1 -1
  164. package/dist/types/core/agent/buildAgentMessageApiChart.d.ts.map +1 -1
  165. package/dist/types/core/agent/buildMessageApiChart.d.ts.map +1 -1
  166. package/dist/types/core/agent/stages/callLLM.d.ts.map +1 -1
  167. package/dist/types/core/runner.d.ts +40 -5
  168. package/dist/types/core/runner.d.ts.map +1 -1
  169. package/dist/types/core-flow/Parallel.d.ts.map +1 -1
  170. package/dist/types/lib/context-bisect/types.d.ts +9 -0
  171. package/dist/types/lib/context-bisect/types.d.ts.map +1 -1
  172. package/dist/types/lib/recorded-chat/recordedChat.d.ts.map +1 -1
  173. package/dist/types/lib/recorded-chat/types.d.ts +10 -0
  174. package/dist/types/lib/recorded-chat/types.d.ts.map +1 -1
  175. package/dist/types/observe.d.ts +3 -1
  176. package/dist/types/observe.d.ts.map +1 -1
  177. package/dist/types/providers.d.ts +1 -1
  178. package/dist/types/providers.d.ts.map +1 -1
  179. package/dist/types/recorders/core/EmitBridge.d.ts +9 -3
  180. package/dist/types/recorders/core/EmitBridge.d.ts.map +1 -1
  181. package/dist/types/recorders/core/ResilienceRecorder.d.ts +33 -0
  182. package/dist/types/recorders/core/ResilienceRecorder.d.ts.map +1 -0
  183. package/dist/types/recorders/core/resilienceHooks.d.ts +35 -0
  184. package/dist/types/recorders/core/resilienceHooks.d.ts.map +1 -0
  185. package/dist/types/recorders/core/typedEmit.d.ts +1 -2
  186. package/dist/types/recorders/core/typedEmit.d.ts.map +1 -1
  187. package/dist/types/recorders/observability/BoundaryRecorder.d.ts +176 -12
  188. package/dist/types/recorders/observability/BoundaryRecorder.d.ts.map +1 -1
  189. package/dist/types/recorders/observability/FlowchartRecorder.d.ts +13 -2
  190. package/dist/types/recorders/observability/FlowchartRecorder.d.ts.map +1 -1
  191. package/dist/types/recorders/observability/localObservability.d.ts +66 -6
  192. package/dist/types/recorders/observability/localObservability.d.ts.map +1 -1
  193. package/dist/types/recorders/observability/recordRun.d.ts +144 -0
  194. package/dist/types/recorders/observability/recordRun.d.ts.map +1 -0
  195. package/dist/types/recorders/observability/trace.d.ts +65 -13
  196. package/dist/types/recorders/observability/trace.d.ts.map +1 -1
  197. package/dist/types/reliability/buildReliabilityGateChart.d.ts +23 -9
  198. package/dist/types/reliability/buildReliabilityGateChart.d.ts.map +1 -1
  199. package/dist/types/resilience/withCircuitBreaker.d.ts +15 -5
  200. package/dist/types/resilience/withCircuitBreaker.d.ts.map +1 -1
  201. package/dist/types/resilience/withFallback.d.ts +7 -1
  202. package/dist/types/resilience/withFallback.d.ts.map +1 -1
  203. package/dist/types/resilience/withRetry.d.ts +10 -5
  204. package/dist/types/resilience/withRetry.d.ts.map +1 -1
  205. package/package.json +1 -1
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ /**
3
+ * recordRun — save a run so a viewer can show it later.
4
+ *
5
+ * A RECORDING is exactly three things, and each one lights a different
6
+ * surface:
7
+ *
8
+ * `events` the typed agentfootprint stream, in the order it fired —
9
+ * the story, the commentary, the summary.
10
+ * `snapshot` the footprintjs run snapshot — shared state, the commit
11
+ * log, and every attached recorder's data (narrative,
12
+ * metrics, boundaries).
13
+ * `structure` the agent's build-time chart — THE CHART. Nothing else
14
+ * can draw it, and no snapshot carries it.
15
+ *
16
+ * Miss one and one surface goes dark. That is why this exists: every
17
+ * integration that assembled the bundle by hand assembled a different,
18
+ * incomplete one, and the piece most often missing was `structure` —
19
+ * because a completed run does not leave it behind. This is also the
20
+ * producer for the shape lens's `observeRecording()` consumes, which
21
+ * until now nothing produced.
22
+ *
23
+ * import { recordRun } from 'agentfootprint/observe';
24
+ *
25
+ * const recorder = recordRun(agent);
26
+ * await agent.run({ message });
27
+ * fs.writeFileSync('run.json', JSON.stringify(recorder.toRecording()));
28
+ *
29
+ * …and in the viewer:
30
+ *
31
+ * const { recorder, runner } = observeRecording(JSON.parse(json)); // lens
32
+ * <Lens recorder={recorder} runner={runner} />
33
+ *
34
+ * WHAT IT WIRES THAT HAND-ROLLING GETS WRONG
35
+ * ──────────────────────────────────────────
36
+ * The boundary recorder — the one that puts stops on the step strip —
37
+ * needs three connections, and each missing one fails differently:
38
+ *
39
+ * attach no boundaries at all (loud: the strip is empty)
40
+ * subscribe boundaries with nothing in them (quiet: no LLM or
41
+ * tool detail behind any stop)
42
+ * getCommitCount every boundary stamped at commit 0 (SILENT: the
43
+ * events look complete, and the strip cannot be
44
+ * rebuilt offline — the commit log records what
45
+ * stages wrote, never when a boundary was crossed,
46
+ * so nothing downstream can repair it)
47
+ *
48
+ * Wire it before the run or not at all — none of the three can be
49
+ * reconstructed from a finished run.
50
+ *
51
+ * WHAT IT DOES NOT DO
52
+ * ───────────────────
53
+ * It attaches no OTHER recorders. `narrative()` and `metrics()` are the
54
+ * consumer's choice — their data rides the snapshot when attached, and
55
+ * each viewer says so when it isn't there (a Gantt with no timings shows
56
+ * execution ORDER and says so; a story panel falls back to "X executed.
57
+ * Wrote: y"). Attaching them behind the consumer's back would make every
58
+ * recording pay for panels most runs never open.
59
+ */
60
+ Object.defineProperty(exports, "__esModule", { value: true });
61
+ exports.recordRun = void 0;
62
+ const BoundaryRecorder_js_1 = require("./BoundaryRecorder.js");
63
+ /** Default retained-event cap — see `RecordRunOptions.maxEvents`. */
64
+ const DEFAULT_MAX_EVENTS = 10_000;
65
+ /**
66
+ * Start recording a runner. Call BEFORE `run()` — a recording is
67
+ * collected as the run happens and cannot be reconstructed after it.
68
+ *
69
+ * @param runner the Agent / composition / pattern to record.
70
+ * @param options event cap and boundary detail level.
71
+ *
72
+ * @example
73
+ * ```ts
74
+ * const recorder = recordRun(agent);
75
+ * await agent.run({ message: 'Weather in San Francisco?' });
76
+ * const recording = recorder.toRecording();
77
+ * recorder.stop();
78
+ *
79
+ * fs.writeFileSync('run.json', JSON.stringify(recording));
80
+ * ```
81
+ */
82
+ function recordRun(runner, options = {}) {
83
+ const maxEvents = options.maxEvents ?? DEFAULT_MAX_EVENTS;
84
+ const events = [];
85
+ let dropped = 0;
86
+ // 1. THE TIMELINE. Subscribed before the run so nothing is missed —
87
+ // the dispatcher drops events with no listener rather than queuing
88
+ // them, so a late subscription starts mid-story.
89
+ const offEvents = runner.on('*', (event) => {
90
+ events.push(event);
91
+ if (events.length > maxEvents) {
92
+ events.shift();
93
+ dropped += 1;
94
+ }
95
+ });
96
+ // 2. THE BOUNDARIES — all three connections, which is the whole reason
97
+ // to call this instead of wiring it yourself. `getCommitCount` reads
98
+ // through the runner on every boundary, so it reports the count at
99
+ // that moment rather than a number captured now (when it is 0).
100
+ const boundary = (0, BoundaryRecorder_js_1.boundaryRecorder)({
101
+ getCommitCount: () => runner.getCommitCount(),
102
+ ...(options.boundaryDetail === 'lean' ? { snapshot: 'lean' } : {}),
103
+ });
104
+ const offAttach = runner.attach(boundary);
105
+ const offTyped = boundary.subscribe(runner);
106
+ let stopped = false;
107
+ return {
108
+ toRecording: () => ({
109
+ // Read at freeze time. Before the run there is no snapshot; during
110
+ // one it grows; after it, it is the finished run's.
111
+ snapshot: runner.getLastSnapshot(),
112
+ events: events.slice(),
113
+ // The one piece a run does not leave behind — it lives on the
114
+ // chart, which is built once and never changes.
115
+ structure: runner.getSpec().buildTimeStructure,
116
+ }),
117
+ boundary,
118
+ get eventCount() {
119
+ return events.length;
120
+ },
121
+ get droppedEvents() {
122
+ return dropped;
123
+ },
124
+ stop: () => {
125
+ // Idempotent: a consumer that stops in both a finally block and an
126
+ // unmount handler should not detach someone else's later recorder.
127
+ if (stopped)
128
+ return;
129
+ stopped = true;
130
+ offEvents();
131
+ offTyped();
132
+ offAttach();
133
+ },
134
+ };
135
+ }
136
+ exports.recordRun = recordRun;
137
+ //# sourceMappingURL=recordRun.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recordRun.js","sourceRoot":"","sources":["../../../src/recorders/observability/recordRun.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;;;AAKH,+DAAgF;AAqEhF,qEAAqE;AACrE,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAElC;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,SAAS,CAAC,MAAc,EAAE,UAA4B,EAAE;IACtE,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,kBAAkB,CAAC;IAC1D,MAAM,MAAM,GAA0B,EAAE,CAAC;IACzC,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,oEAAoE;IACpE,sEAAsE;IACtE,oDAAoD;IACpD,MAAM,SAAS,GAAgB,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAA0B,EAAE,EAAE;QAC3E,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,IAAI,MAAM,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;YAC9B,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,CAAC;QACf,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,uEAAuE;IACvE,wEAAwE;IACxE,sEAAsE;IACtE,mEAAmE;IACnE,MAAM,QAAQ,GAAG,IAAA,sCAAgB,EAAC;QAChC,cAAc,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,EAAE;QAC7C,GAAG,CAAC,OAAO,CAAC,cAAc,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5E,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAE5C,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,OAAO;QACL,WAAW,EAAE,GAAc,EAAE,CAAC,CAAC;YAC7B,mEAAmE;YACnE,oDAAoD;YACpD,QAAQ,EAAE,MAAM,CAAC,eAAe,EAAE;YAClC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE;YACtB,8DAA8D;YAC9D,gDAAgD;YAChD,SAAS,EAAG,MAAM,CAAC,OAAO,EAAuC,CAAC,kBAAkB;SACrF,CAAC;QACF,QAAQ;QACR,IAAI,UAAU;YACZ,OAAO,MAAM,CAAC,MAAM,CAAC;QACvB,CAAC;QACD,IAAI,aAAa;YACf,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,IAAI,EAAE,GAAG,EAAE;YACT,mEAAmE;YACnE,mEAAmE;YACnE,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,SAAS,EAAE,CAAC;YACZ,QAAQ,EAAE,CAAC;YACX,SAAS,EAAE,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC;AAxDD,8BAwDC"}
@@ -6,14 +6,31 @@
6
6
  * `serializeTrace()` freezes that model into a `Trace` — plain JSON you can
7
7
  * persist (file, Redis, a bug report) and later rehydrate WITHOUT re-running
8
8
  * the agent. `agentfootprint-lens`'s `<Replay trace={…} />` consumes it and
9
- * rebuilds the flowchart via the existing translators.
9
+ * draws the flowchart via the existing translators.
10
10
  *
11
- * A `Trace` stores ONLY the domain-event log (the single source of truth the
12
- * Lens already reads). The step graph is ALWAYS a derived projection of those
13
- * events (footprint.js's "graph is derived, never post-processed" principle) —
14
- * it is rebuilt at render time, never stored. Storing a derived graph would be
15
- * redundant AND a redaction hazard: a second content surface a per-event
16
- * `redact` could never reach.
11
+ * A `Trace` stores the domain-event log (the single source of truth the Lens
12
+ * already reads) plus, since 7.8, the run's footprintjs snapshot. The step
13
+ * graph is ALWAYS a derived projection of those events (footprint.js's "graph
14
+ * is derived, never post-processed" principle) — it is rebuilt at render time,
15
+ * never stored. Storing a derived graph would be redundant AND a redaction
16
+ * hazard: a second content surface a per-event `redact` could never reach.
17
+ *
18
+ * WHAT A TRACE CAN AND CANNOT DRIVE
19
+ * ─────────────────────────────────
20
+ * `<Replay trace={…} />` draws the chart from `structure`, and that is all it
21
+ * draws: a static shape, not a lit-up path. It does not read `trace.events` —
22
+ * time-travel over them is a planned refinement, and until it lands an offline
23
+ * `<Replay>` is a strictly smaller view than the live `<Lens>`, not a match
24
+ * for it.
25
+ *
26
+ * For the full viewers — `<Lens>`, ExplainableShell, WhereFrom, the commit
27
+ * axis — what you want is a RECORDING: `{ snapshot, events, structure }`, the
28
+ * shape `recordRun()` produces and lens's `observeRecording()` consumes. Note
29
+ * `events` there means the TYPED agentfootprint stream (`runner.on('*')`),
30
+ * which is not the domain-event log a Trace carries: the two are different
31
+ * projections of the same run, and a Trace holds only the second. So a Trace
32
+ * with a `snapshot` can drive the snapshot-fed surfaces, but it is not itself
33
+ * a recording — reach for `recordRun()` when the destination is a viewer.
17
34
  *
18
35
  * PII / trust boundary: the event log carries real content — `llm.end.content`,
19
36
  * `tool.start.args`, `tool.end.result`, `context.injected.contentSummary`,
@@ -70,13 +87,17 @@ exports.redactContent = redactContent;
70
87
  * `getEvents()` output.
71
88
  *
72
89
  * const trace = serializeTrace(handle.boundary.getEvents(), {
73
- * redact: redactContent, // PII stripped before it enters the trace
90
+ * redact: redactContent, // PII stripped before it enters the trace
91
+ * structure: agent.getSpec().buildTimeStructure, // the chart
92
+ * snapshot: agent.getLastSnapshot(), // state + commit log + recorders
74
93
  * capturedAtMs: Date.now(),
75
94
  * });
76
95
  * fs.writeFileSync('run.trace.json', JSON.stringify(trace));
96
+ *
97
+ * `enable.localObservability().getTrace()` passes all three for you.
77
98
  */
78
99
  function serializeTrace(events, options = {}) {
79
- const { redact, redactionLabel, structure, summary, capturedAtMs } = options;
100
+ const { redact, redactionLabel, structure, snapshot, summary, capturedAtMs } = options;
80
101
  // A fresh array either way, so a held Trace is detached from the live store.
81
102
  const safeEvents = redact ? events.map((e) => redact(e)) : events.slice();
82
103
  const redaction = redactionLabel ?? (redact ? 'pii' : 'none');
@@ -84,6 +105,12 @@ function serializeTrace(events, options = {}) {
84
105
  version: 1,
85
106
  events: safeEvents,
86
107
  ...(structure !== undefined && { structure }),
108
+ // Held by reference, not cloned. footprintjs's `sharedState` is a live
109
+ // view of working memory, so a Trace taken mid-run keeps moving until the
110
+ // run ends — which is the same caveat `getSnapshot()` carries, and the
111
+ // reason `onRecorded` fires at the run's exit boundary. Serializing the
112
+ // Trace (its whole purpose) detaches it.
113
+ ...(snapshot !== undefined && { snapshot }),
87
114
  ...(summary !== undefined && { summary }),
88
115
  redaction,
89
116
  ...(capturedAtMs !== undefined && { capturedAtMs }),
@@ -1 +1 @@
1
- {"version":3,"file":"trace.js","sourceRoot":"","sources":["../../../src/recorders/observability/trace.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;;;AAGH,iEAAkF;AA6DlF;;;;;;;GAOG;AACH,SAAgB,aAAa,CAAC,KAAkB;IAC9C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,SAAS;YACZ,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,SAAS,EAAE,CAAC;QAClE,KAAK,YAAY;YACf,OAAO,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QAC7E,KAAK,UAAU;YACb,OAAO,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QACjF,KAAK,kBAAkB;YACrB,OAAO,KAAK,CAAC,cAAc,KAAK,SAAS;gBACvC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE;gBAC5C,CAAC,CAAC,KAAK,CAAC;QACZ,KAAK,WAAW,CAAC;QACjB,KAAK,UAAU;YACb,OAAO,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QACnF,KAAK,eAAe,CAAC;QACrB,KAAK,cAAc;YACjB,OAAO,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QACnF,KAAK,iBAAiB;YACpB,OAAO,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QACvF;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAvBD,sCAuBC;AAED;;;;;;;;;GASG;AACH,SAAgB,cAAc,CAC5B,MAA8B,EAC9B,UAAiC,EAAE;IAEnC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;IAC7E,6EAA6E;IAC7E,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC1E,MAAM,SAAS,GAAmB,cAAc,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC9E,OAAO;QACL,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,UAAU;QAClB,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,CAAC;QAC7C,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,CAAC;QACzC,SAAS;QACT,GAAG,CAAC,YAAY,KAAK,SAAS,IAAI,EAAE,YAAY,EAAE,CAAC;KACpD,CAAC;AACJ,CAAC;AAhBD,wCAgBC;AAED;;;;;;;GAOG;AACH,SAAgB,gBAAgB,CAAC,KAAY;IAC3C,OAAO,IAAA,+CAAwB,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAChD,CAAC;AAFD,4CAEC"}
1
+ {"version":3,"file":"trace.js","sourceRoot":"","sources":["../../../src/recorders/observability/trace.ts"],"names":[],"mappings":"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"}
@@ -4,9 +4,20 @@
4
4
  * an LLM call with rules-based reliability semantics, using the native
5
5
  * `decide()` DSL via `addDeciderFunction` decider stages.
6
6
  *
7
- * The returned chart is mounted as a subflow in the agent's chart at
8
- * Agent.build() time (only when reliability is configured). Inside the
9
- * subflow:
7
+ * ⚠ NOT REACHABLE FROM ANY SHIPPED PATH (verified 2026-07-28). This header
8
+ * used to say the chart "is mounted as a subflow in the agent's chart at
9
+ * Agent.build() time (only when reliability is configured)". It is not:
10
+ * `buildReliabilityGateChart` is exported from no barrel, and its only
11
+ * consumer in the repository is its own test
12
+ * (`test/reliability/gate-chart-7pattern.test.ts`). The live
13
+ * `.reliability()` path is `executeWithReliability`
14
+ * (`core/agent/stages/reliabilityExecution.ts`) driving
15
+ * `singleProviderCall` inline in `core/agent/stages/callLLM.ts` — which
16
+ * trades this chart's subflow visibility for streaming support. Keep this
17
+ * file honest rather than deleting it: it is the only implementation that
18
+ * honours the `providers` failover list (see MENTAL_MODEL §14 item 3).
19
+ *
20
+ * Inside the subflow, when something does mount it:
10
21
  *
11
22
  * PreCheck (decider) → CallProvider (function) → PostDecide (decider)
12
23
  * │
@@ -27,15 +38,18 @@
27
38
  * 'fallback' → call config.fallback(); $break() on success
28
39
  * 'fail-fast' → set failKind, $emit, $break(reason)
29
40
  *
30
- * The subflow is mounted WITHOUT `propagateBreak: true`. Subflow $break is
31
- * local — agent.ts adds a `TranslateFailFast` agent-level stage AFTER the
32
- * subflow that reads scope.reliabilityFailKind and converts it into an
33
- * agent-level `$break(reason)`. This split lets normal subflow exits
34
- * (`ok`/`fallback`) leave the agent running while fail-fast stops it.
41
+ * The design intends the subflow to be mounted WITHOUT `propagateBreak:
42
+ * true`, so subflow `$break` stays local and an agent-level
43
+ * `TranslateFailFast` stage reads `scope.reliabilityFailKind` and converts
44
+ * it into an agent-level `$break(reason)` — letting normal subflow exits
45
+ * (`ok`/`fallback`) leave the agent running while fail-fast stops it. That
46
+ * stage was never built (`grep TranslateFailFast` finds only comments), which
47
+ * is part of why nothing mounts this chart; the live path throws
48
+ * `ReliabilityFailFastError` from `Agent.run` instead.
35
49
  *
36
50
  * Three-channel discipline preserved:
37
51
  * • SCOPE STATE — failKind/failPayload/failReason mapped to parent via
38
- * outputMapper; consumed by agent's TranslateFailFast.
52
+ * outputMapper; for the intended TranslateFailFast.
39
53
  * • $emit — passive observability for external consumers.
40
54
  * • $break(reason)— control flow + human reason for narrative.
41
55
  */
@@ -45,6 +59,7 @@ const footprintjs_1 = require("footprintjs");
45
59
  const CircuitBreaker_js_1 = require("./CircuitBreaker.js");
46
60
  const classifyError_js_1 = require("./classifyError.js");
47
61
  const typedEmit_js_1 = require("../recorders/core/typedEmit.js");
62
+ const resilienceHooks_js_1 = require("../recorders/core/resilienceHooks.js");
48
63
  // ─── Stage IDs (also used for narrative/topology readability) ────────
49
64
  const STAGE_IDS = {
50
65
  INIT: 'reliability-init',
@@ -203,7 +218,19 @@ function buildReliabilityGateChart(config) {
203
218
  throw new CircuitBreaker_js_1.CircuitOpenError(providerEntry.name, nextState.lastErrorMessage, (0, CircuitBreaker_js_1.nextProbeTime)(nextState, breakerConfig));
204
219
  }
205
220
  }
206
- const response = await providerEntry.provider.complete(scope.request);
221
+ // Hooks are passed here too, so a DECORATED provider does not go
222
+ // dark. This is not cross-emitting: the decorator's own account of
223
+ // its own fixed-cap decision merely happens to occur inside a
224
+ // reliability stage. The two families stay distinct —
225
+ // `reliability.*` = this rules loop's dynamic decisions, `error.*` =
226
+ // the decorator's.
227
+ //
228
+ // NOTE: this chart is currently DEAD — see the file header. The
229
+ // live `.reliability()` path is `executeWithReliability` driving
230
+ // `singleProviderCall` in `core/agent/stages/callLLM.ts`, which
231
+ // passes the same hooks. Wiring the dead site anyway keeps it from
232
+ // being a silent hole if the chart is ever revived.
233
+ const response = await providerEntry.provider.complete(scope.request, (0, resilienceHooks_js_1.resilienceHooks)(scope));
207
234
  scope.response = response;
208
235
  scope.error = undefined;
209
236
  scope.errorKind = 'ok';
@@ -1 +1 @@
1
- {"version":3,"file":"buildReliabilityGateChart.js","sourceRoot":"","sources":["../../src/reliability/buildReliabilityGateChart.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"buildReliabilityGateChart.js","sourceRoot":"","sources":["../../src/reliability/buildReliabilityGateChart.ts"],"names":[],"mappings":"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"}
@@ -49,9 +49,12 @@
49
49
  *
50
50
  * HALF-OPEN ──[ probe failure ]──► OPEN (cooldown restarts)
51
51
  *
52
- * `stream()` is decorated identically. `name`/`flush`/`stop` pass
53
- * through unchanged (the consumer's existing observability hooks
54
- * still see the underlying provider's identity).
52
+ * `stream()` is decorated identically. `name` passes through unchanged
53
+ * (the consumer's existing observability hooks still see the underlying
54
+ * provider's identity), and the optional per-call `LLMCallHooks` is
55
+ * forwarded inward so a decorator nested inside this one can still
56
+ * report. Nothing else is copied — `LLMProvider` has exactly `name`,
57
+ * `complete` and the optional `stream`.
55
58
  *
56
59
  * **Scope: per-instance, NOT distributed.** Each `withCircuitBreaker(...)`
57
60
  * call holds its own breaker state in process memory. If you run 100
@@ -195,10 +198,13 @@ function withCircuitBreaker(inner, options = {}) {
195
198
  }
196
199
  const wrapped = {
197
200
  name: inner.name,
198
- async complete(req) {
201
+ async complete(req, hooks) {
199
202
  rejectFastIfOpen();
200
203
  try {
201
- const res = await inner.complete(req);
204
+ // Forward `hooks` — this decorator reports nothing of its own, but
205
+ // it rebuilds a fresh provider object, so an inner decorator's
206
+ // reports are silently swallowed unless they're passed through.
207
+ const res = await inner.complete(req, hooks);
202
208
  recordSuccess();
203
209
  return res;
204
210
  }
@@ -212,15 +218,16 @@ function withCircuitBreaker(inner, options = {}) {
212
218
  // it undefined so the consumer's existing capability check
213
219
  // (`if (provider.stream)`) still works correctly.
214
220
  ...(inner.stream && {
215
- async *stream(req) {
221
+ async *stream(req, hooks) {
216
222
  rejectFastIfOpen();
217
223
  let yieldedAnyChunk = false;
218
224
  try {
219
225
  // This stream() method is conditionally defined only when
220
226
  // inner.stream exists (see `...(inner.stream && {` above), so
221
227
  // inner.stream is guaranteed non-null inside this body.
228
+ // `hooks` is forwarded for the same reason as in complete().
222
229
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
223
- for await (const chunk of inner.stream(req)) {
230
+ for await (const chunk of inner.stream(req, hooks)) {
224
231
  yieldedAnyChunk = true;
225
232
  yield chunk;
226
233
  }
@@ -1 +1 @@
1
- {"version":3,"file":"withCircuitBreaker.js","sourceRoot":"","sources":["../../src/resilience/withCircuitBreaker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"withCircuitBreaker.js","sourceRoot":"","sources":["../../src/resilience/withCircuitBreaker.ts"],"names":[],"mappings":"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"}
@@ -34,17 +34,33 @@ exports.withFallback = void 0;
34
34
  function withFallback(primary, fallback, options = {}) {
35
35
  const shouldFallback = options.shouldFallback ?? defaultShouldFallback;
36
36
  const onFallback = options.onFallback;
37
+ /**
38
+ * Report the ONE fact this decorator owns: the primary failed and the
39
+ * fallback is being called instead. Uses the pairwise `primary`/
40
+ * `fallback` names — never a composite chain name — so a
41
+ * `fallbackProvider(a, b, c)` right-fold reports honest `a→b`, `b→c`
42
+ * hops.
43
+ */
44
+ function reportFellBack(hooks, err) {
45
+ hooks?.onResilience?.({
46
+ kind: 'fell-back',
47
+ primary: primary.name,
48
+ fallback: fallback.name,
49
+ reason: err instanceof Error ? err.message : String(err),
50
+ });
51
+ }
37
52
  const wrapped = {
38
53
  name: `${primary.name}|${fallback.name}`,
39
- async complete(req) {
54
+ async complete(req, hooks) {
40
55
  try {
41
- return await primary.complete(req);
56
+ return await primary.complete(req, hooks);
42
57
  }
43
58
  catch (err) {
44
59
  if (!shouldFallback(err))
45
60
  throw err;
46
61
  onFallback?.(err);
47
- return fallback.complete(req);
62
+ reportFellBack(hooks, err);
63
+ return fallback.complete(req, hooks);
48
64
  }
49
65
  },
50
66
  };
@@ -53,18 +69,20 @@ function withFallback(primary, fallback, options = {}) {
53
69
  // would replay tokens. Yields from primary as long as it's working;
54
70
  // catches errors in the iteration setup or first chunk only.
55
71
  if (primary.stream || fallback.stream) {
56
- wrapped.stream = async function* fallbackStream(req) {
72
+ wrapped.stream = async function* fallbackStream(req, hooks) {
57
73
  // No primary stream support → fallback's stream (or its complete-only).
74
+ // Reports NOTHING: nothing failed here, the primary simply has no
75
+ // `stream()`. Calling this a fallback would be a lie.
58
76
  if (!primary.stream) {
59
77
  if (fallback.stream)
60
- yield* fallback.stream(req);
78
+ yield* fallback.stream(req, hooks);
61
79
  else
62
- yield* completeAsStream(fallback, req);
80
+ yield* completeAsStream(fallback, req, hooks);
63
81
  return;
64
82
  }
65
83
  let yieldedAny = false;
66
84
  try {
67
- for await (const chunk of primary.stream(req)) {
85
+ for await (const chunk of primary.stream(req, hooks)) {
68
86
  yieldedAny = true;
69
87
  yield chunk;
70
88
  }
@@ -73,10 +91,11 @@ function withFallback(primary, fallback, options = {}) {
73
91
  if (yieldedAny || !shouldFallback(err))
74
92
  throw err;
75
93
  onFallback?.(err);
94
+ reportFellBack(hooks, err);
76
95
  if (fallback.stream)
77
- yield* fallback.stream(req);
96
+ yield* fallback.stream(req, hooks);
78
97
  else
79
- yield* completeAsStream(fallback, req);
98
+ yield* completeAsStream(fallback, req, hooks);
80
99
  }
81
100
  };
82
101
  }
@@ -98,8 +117,8 @@ function defaultShouldFallback(err) {
98
117
  * fallback chain still satisfy a `stream()` request even when the
99
118
  * fallback only implements `complete()`.
100
119
  */
101
- async function* completeAsStream(provider, req) {
102
- const response = await provider.complete(req);
120
+ async function* completeAsStream(provider, req, hooks) {
121
+ const response = await provider.complete(req, hooks);
103
122
  yield {
104
123
  tokenIndex: 0,
105
124
  content: '',
@@ -1 +1 @@
1
- {"version":3,"file":"withFallback.js","sourceRoot":"","sources":["../../src/resilience/withFallback.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;;;AAkBH;;;;;;;;;;GAUG;AACH,SAAgB,YAAY,CAC1B,OAAoB,EACpB,QAAqB,EACrB,UAA+B,EAAE;IAEjC,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,qBAAqB,CAAC;IACvE,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAEtC,MAAM,OAAO,GAAgB;QAC3B,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,EAAE;QACxC,KAAK,CAAC,QAAQ,CAAC,GAAe;YAC5B,IAAI,CAAC;gBACH,OAAO,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACrC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;oBAAE,MAAM,GAAG,CAAC;gBACpC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC;gBAClB,OAAO,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;KACF,CAAC;IAEF,gEAAgE;IAChE,gEAAgE;IAChE,oEAAoE;IACpE,6DAA6D;IAC7D,IAAI,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACtC,OAAO,CAAC,MAAM,GAAG,KAAK,SAAS,CAAC,CAAC,cAAc,CAAC,GAAe;YAC7D,wEAAwE;YACxE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;gBACpB,IAAI,QAAQ,CAAC,MAAM;oBAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;;oBAC5C,KAAK,CAAC,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;gBAC5C,OAAO;YACT,CAAC;YACD,IAAI,UAAU,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC;gBACH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC9C,UAAU,GAAG,IAAI,CAAC;oBAClB,MAAM,KAAK,CAAC;gBACd,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,UAAU,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;oBAAE,MAAM,GAAG,CAAC;gBAClD,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC;gBAClB,IAAI,QAAQ,CAAC,MAAM;oBAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;;oBAC5C,KAAK,CAAC,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAjDD,oCAiDC;AAED,uEAAuE;AAEvE,SAAS,qBAAqB,CAAC,GAAY;IACzC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACjD,MAAM,CAAC,GAAG,GAAuC,CAAC;IAClD,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IACpE,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,KAAK,SAAS,CAAC,CAAC,gBAAgB,CAAC,QAAqB,EAAE,GAAe;IACrE,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC9C,MAAM;QACJ,UAAU,EAAE,CAAC;QACb,OAAO,EAAE,EAAE;QACX,IAAI,EAAE,IAAI;QACV,QAAQ;KACT,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"withFallback.js","sourceRoot":"","sources":["../../src/resilience/withFallback.ts"],"names":[],"mappings":"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"}
@@ -42,11 +42,26 @@ function withRetry(provider, options = {}) {
42
42
  const onRetry = options.onRetry;
43
43
  const wrapped = {
44
44
  name: `${provider.name}+retry`,
45
- async complete(req) {
45
+ async complete(req, hooks) {
46
46
  let lastError;
47
+ // t0 for the `recovered` report's totalDurationMs. New
48
+ // instrumentation (the decorator did not measure this before v7.8),
49
+ // not a recovered fact.
50
+ const startedMs = Date.now();
47
51
  for (let attempt = 1; attempt <= maxAttempts; attempt++) {
48
52
  try {
49
- return await provider.complete(req);
53
+ const res = await provider.complete(req, hooks);
54
+ // Only a success that FOLLOWED a failure is a recovery — a
55
+ // first-try success reports nothing (mirrors the rules loop's
56
+ // guard in reliabilityExecution.ts).
57
+ if (attempt > 1) {
58
+ hooks?.onResilience?.({
59
+ kind: 'recovered',
60
+ attempt,
61
+ totalDurationMs: Date.now() - startedMs,
62
+ });
63
+ }
64
+ return res;
50
65
  }
51
66
  catch (err) {
52
67
  lastError = err;
@@ -55,6 +70,14 @@ function withRetry(provider, options = {}) {
55
70
  }
56
71
  const delay = Math.min(maxDelayMs, initialDelayMs * Math.pow(backoffFactor, attempt - 1));
57
72
  onRetry?.(err, attempt + 1, delay);
73
+ hooks?.onResilience?.({
74
+ kind: 'retried',
75
+ attempt: attempt + 1,
76
+ maxAttempts,
77
+ lastError: err instanceof Error ? err.message : String(err),
78
+ backoffMs: delay,
79
+ reason: classifyRetryReason(err),
80
+ });
58
81
  await sleep(delay, req.signal);
59
82
  }
60
83
  }
@@ -64,14 +87,41 @@ function withRetry(provider, options = {}) {
64
87
  };
65
88
  // Pass-through `stream()` if the underlying provider supports it.
66
89
  // No retry on streams (mid-stream resumption is provider-specific).
90
+ // `hooks` must still be FORWARDED: a stacked inner decorator (e.g.
91
+ // withRetry(withFallback(...))) would otherwise go dark on the stream
92
+ // path.
67
93
  if (provider.stream) {
94
+ wrapped.stream = (req, hooks) =>
68
95
  // Guarded by `if (provider.stream)` above; assertion safe.
69
96
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
70
- wrapped.stream = (req) => provider.stream(req);
97
+ provider.stream(req, hooks);
71
98
  }
72
99
  return wrapped;
73
100
  }
74
101
  exports.withRetry = withRetry;
102
+ /**
103
+ * Classify the ERROR that caused a retry, for `ResilienceReport.reason`.
104
+ *
105
+ * Reads exactly the fields `defaultShouldRetry` inspects, so the label
106
+ * always describes the same signal the default policy acted on. Note this
107
+ * is a classification of the error, NOT of the predicate's reasoning —
108
+ * `shouldRetry` returns a bare boolean, so a custom predicate's rationale
109
+ * is unknowable here. `'http-4xx'` is only reachable via a custom
110
+ * predicate (the default rejects non-429 4xx), which itself is a useful
111
+ * signal.
112
+ */
113
+ function classifyRetryReason(err) {
114
+ const status = err?.status ?? err?.statusCode;
115
+ if (typeof status !== 'number')
116
+ return 'no-status';
117
+ if (status === 429)
118
+ return 'http-429';
119
+ if (status >= 500)
120
+ return 'http-5xx';
121
+ if (status >= 400)
122
+ return 'http-4xx';
123
+ return `http-${status}`;
124
+ }
75
125
  // ── Defaults ────────────────────────────────────────────────────────
76
126
  /**
77
127
  * Skip retry for AbortError + 4xx-class errors. Retry on everything