agentfootprint 2.11.4 → 2.11.6

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 (65) hide show
  1. package/README.md +321 -165
  2. package/dist/core/Agent.js +55 -1
  3. package/dist/core/Agent.js.map +1 -1
  4. package/dist/core/agent/AgentBuilder.js +67 -1
  5. package/dist/core/agent/AgentBuilder.js.map +1 -1
  6. package/dist/core/agent/stages/callLLM.js +45 -17
  7. package/dist/core/agent/stages/callLLM.js.map +1 -1
  8. package/dist/core/agent/stages/reliabilityExecution.js +291 -0
  9. package/dist/core/agent/stages/reliabilityExecution.js.map +1 -0
  10. package/dist/core/agent/stages/toolCalls.js +9 -17
  11. package/dist/core/agent/stages/toolCalls.js.map +1 -1
  12. package/dist/core/slots/buildToolsSlot.js +101 -33
  13. package/dist/core/slots/buildToolsSlot.js.map +1 -1
  14. package/dist/esm/core/Agent.js +55 -1
  15. package/dist/esm/core/Agent.js.map +1 -1
  16. package/dist/esm/core/agent/AgentBuilder.js +67 -1
  17. package/dist/esm/core/agent/AgentBuilder.js.map +1 -1
  18. package/dist/esm/core/agent/stages/callLLM.js +45 -17
  19. package/dist/esm/core/agent/stages/callLLM.js.map +1 -1
  20. package/dist/esm/core/agent/stages/reliabilityExecution.js +287 -0
  21. package/dist/esm/core/agent/stages/reliabilityExecution.js.map +1 -0
  22. package/dist/esm/core/agent/stages/toolCalls.js +9 -17
  23. package/dist/esm/core/agent/stages/toolCalls.js.map +1 -1
  24. package/dist/esm/core/slots/buildToolsSlot.js +101 -33
  25. package/dist/esm/core/slots/buildToolsSlot.js.map +1 -1
  26. package/dist/esm/events/registry.js +6 -0
  27. package/dist/esm/events/registry.js.map +1 -1
  28. package/dist/esm/index.js +1 -0
  29. package/dist/esm/index.js.map +1 -1
  30. package/dist/esm/recorders/core/ToolsRecorder.js +23 -0
  31. package/dist/esm/recorders/core/ToolsRecorder.js.map +1 -0
  32. package/dist/esm/tool-providers/gatedTools.js +8 -3
  33. package/dist/esm/tool-providers/gatedTools.js.map +1 -1
  34. package/dist/events/registry.js +6 -0
  35. package/dist/events/registry.js.map +1 -1
  36. package/dist/index.js +5 -3
  37. package/dist/index.js.map +1 -1
  38. package/dist/recorders/core/ToolsRecorder.js +27 -0
  39. package/dist/recorders/core/ToolsRecorder.js.map +1 -0
  40. package/dist/tool-providers/gatedTools.js +8 -3
  41. package/dist/tool-providers/gatedTools.js.map +1 -1
  42. package/dist/types/core/Agent.d.ts +9 -1
  43. package/dist/types/core/Agent.d.ts.map +1 -1
  44. package/dist/types/core/agent/AgentBuilder.d.ts +61 -0
  45. package/dist/types/core/agent/AgentBuilder.d.ts.map +1 -1
  46. package/dist/types/core/agent/stages/callLLM.d.ts +8 -0
  47. package/dist/types/core/agent/stages/callLLM.d.ts.map +1 -1
  48. package/dist/types/core/agent/stages/reliabilityExecution.d.ts +66 -0
  49. package/dist/types/core/agent/stages/reliabilityExecution.d.ts.map +1 -0
  50. package/dist/types/core/agent/stages/toolCalls.d.ts +8 -0
  51. package/dist/types/core/agent/stages/toolCalls.d.ts.map +1 -1
  52. package/dist/types/core/slots/buildToolsSlot.d.ts +24 -4
  53. package/dist/types/core/slots/buildToolsSlot.d.ts.map +1 -1
  54. package/dist/types/events/payloads.d.ts +39 -0
  55. package/dist/types/events/payloads.d.ts.map +1 -1
  56. package/dist/types/events/registry.d.ts +7 -1
  57. package/dist/types/events/registry.d.ts.map +1 -1
  58. package/dist/types/index.d.ts +1 -0
  59. package/dist/types/index.d.ts.map +1 -1
  60. package/dist/types/recorders/core/ToolsRecorder.d.ts +19 -0
  61. package/dist/types/recorders/core/ToolsRecorder.d.ts.map +1 -0
  62. package/dist/types/tool-providers/gatedTools.d.ts.map +1 -1
  63. package/dist/types/tool-providers/types.d.ts +43 -7
  64. package/dist/types/tool-providers/types.d.ts.map +1 -1
  65. package/package.json +6 -1
@@ -0,0 +1,287 @@
1
+ /**
2
+ * reliabilityExecution — the retry-loop helper invoked by `callLLM`
3
+ * when `Agent.create(...).reliability(config)` is configured.
4
+ *
5
+ * Wraps a single-shot LLM call with rules-based reliability semantics:
6
+ *
7
+ * PreCheck rules → continue / fail-fast
8
+ * ↓
9
+ * provider call → response | error
10
+ * ↓
11
+ * PostDecide rules → ok / retry / retry-other / fallback / fail-fast
12
+ * ↓
13
+ * loop or commit
14
+ *
15
+ * The loop runs in JS within a SINGLE footprintjs stage execution. The
16
+ * trace shows one CallLLM stage that internally retried N times. Richer
17
+ * "every retry as a separate stage" tracing is the v2.11.6+ work via
18
+ * `buildReliabilityGateChart` (which trades streaming support for
19
+ * stage-level granularity).
20
+ *
21
+ * Streaming + reliability semantics — first-chunk arbitration:
22
+ * • Pre-first-chunk failures (connection, headers, breaker-open):
23
+ * full rule set fires (retry / retry-other / fallback / fail-fast).
24
+ * • Post-first-chunk failures (mid-stream): rules can ONLY emit
25
+ * `ok` (commit what we have) or `fail-fast`. Retry / retry-other /
26
+ * fallback are escalated to fail-fast with kind
27
+ * `'mid-stream-not-retryable'`. Matches LangChain's
28
+ * `RunnableWithFallbacks` first-chunk arbitration pattern.
29
+ *
30
+ * On fail-fast: writes `failKind` + `failPayload` to agent scope and
31
+ * calls `$break(reason)`. The agent's main chart catches the break;
32
+ * `Agent.run()` translates it into a typed `ReliabilityFailFastError`
33
+ * at the API boundary (via `TranslateFailFast` stage).
34
+ *
35
+ * Closure-local state (NOT scope):
36
+ * • `attempt` — 1-indexed attempt counter
37
+ * • `providerIdx` — index into the failover list
38
+ * • `breakerStates` — per-provider breaker state (Map)
39
+ * • `attemptsPerProvider` — per-provider counter
40
+ *
41
+ * Why closure-local: this is one footprintjs stage execution. Putting
42
+ * counters into scope would commit them across iterations of the
43
+ * agent's outer ReAct loop, which is not the intent.
44
+ */
45
+ import { CircuitOpenError, admitCall, initialBreakerState, nextProbeTime, recordFailure, recordSuccess, } from '../../../reliability/CircuitBreaker.js';
46
+ import { classifyError } from '../../../reliability/classifyError.js';
47
+ /** Sentinel kind written to scope on a mid-stream failure that the
48
+ * rules wanted to retry. Surfaces in `ReliabilityFailFastError.kind`. */
49
+ export const MID_STREAM_KIND = 'mid-stream-not-retryable';
50
+ /**
51
+ * Run the reliability retry loop. Returns the committed `LLMResponse`
52
+ * on success; calls `scope.$break(reason)` and returns `undefined` on
53
+ * fail-fast (caller short-circuits when undefined is returned).
54
+ */
55
+ export async function executeWithReliability(scope, request, config, defaultProvider, defaultProviderName, defaultModel, callFn) {
56
+ const preRules = config.preCheck ?? [];
57
+ const postRules = config.postDecide ?? [];
58
+ const providers = config.providers ?? [];
59
+ const breakerConfig = config.circuitBreaker;
60
+ const fallbackFn = config.fallback;
61
+ // Closure-local state — see header comment for rationale.
62
+ let attempt = 0;
63
+ let providerIdx = 0;
64
+ let firstChunkSeen = false;
65
+ const breakerStates = {};
66
+ const attemptsPerProvider = {};
67
+ // Helper: build the reliability scope view rules read.
68
+ const reliabilityScope = () => {
69
+ const currentProvider = providerEntry().name;
70
+ return {
71
+ request,
72
+ providersCount: providers.length,
73
+ hasFallback: fallbackFn !== undefined,
74
+ attempt,
75
+ providerIdx,
76
+ currentProvider,
77
+ canSwitchProvider: providerIdx < providers.length - 1,
78
+ response: lastResponse,
79
+ error: lastError,
80
+ errorKind: lastErrorKind,
81
+ latencyMs: lastLatencyMs,
82
+ attemptsPerProvider,
83
+ breakerStates,
84
+ };
85
+ };
86
+ // Pick provider for current attempt — failover list if configured,
87
+ // else the agent's default provider.
88
+ const providerEntry = () => {
89
+ if (providers.length > 0) {
90
+ const entry = providers[providerIdx];
91
+ if (entry)
92
+ return entry;
93
+ }
94
+ return { name: defaultProviderName, provider: defaultProvider, model: defaultModel };
95
+ };
96
+ // Helper: build failPayload + write scope + emit + break.
97
+ const failFast = (phase, kind, label) => {
98
+ const cur = providerEntry();
99
+ const payload = {
100
+ phase,
101
+ attempt,
102
+ providerUsed: cur.name,
103
+ errorKind: lastErrorKind,
104
+ ...(lastError?.message !== undefined && { errorMessage: lastError.message }),
105
+ };
106
+ const reason = `reliability-${phase}: ${label}`;
107
+ scope.reliabilityFailKind = kind;
108
+ scope.reliabilityFailPayload =
109
+ payload;
110
+ scope.reliabilityFailReason = reason;
111
+ if (lastError !== undefined) {
112
+ // Store the originating error as plain strings — Error instances
113
+ // don't round-trip cleanly through scope's structuredClone. The
114
+ // Agent.run() boundary reconstructs a new Error from these for
115
+ // ReliabilityFailFastError.cause; consumer's `instanceof` checks
116
+ // get a stable Error subclass without us needing to preserve the
117
+ // exact prototype.
118
+ scope.reliabilityFailCauseMessage =
119
+ lastError.message;
120
+ scope.reliabilityFailCauseName =
121
+ lastError.name;
122
+ }
123
+ scope.$emit('agentfootprint.reliability.fail_fast', {
124
+ phase,
125
+ kind,
126
+ label,
127
+ attempt,
128
+ providerUsed: cur.name,
129
+ errorKind: lastErrorKind,
130
+ ...(lastError?.message !== undefined && { errorMessage: lastError.message }),
131
+ });
132
+ scope.$break(reason);
133
+ return undefined;
134
+ };
135
+ // Mutable per-attempt state. Outside the loop so reliabilityScope() can read.
136
+ let lastResponse;
137
+ let lastError;
138
+ let lastErrorKind = 'ok';
139
+ let lastLatencyMs = 0;
140
+ // We DON'T use footprintjs `decide()` here — its predicates bind
141
+ // to the active agent scope via TypedScope, but our `ReliabilityRule`
142
+ // predicates take the synthesized `ReliabilityScope` view (a closure-
143
+ // local projection over the retry-loop's mutable state). Iterate
144
+ // rules manually instead. The `decide()` import is kept available
145
+ // for `buildReliabilityGateChart` which DOES use it via subflows.
146
+ const evalRules = (rules, fallback) => {
147
+ const sv = reliabilityScope();
148
+ for (const rule of rules) {
149
+ try {
150
+ if (rule.when(sv))
151
+ return { branch: rule.then, matched: rule };
152
+ }
153
+ catch {
154
+ // Predicate threw — skip this rule. Per ReliabilityRule
155
+ // contract predicates should be pure; treat throws as no-match.
156
+ }
157
+ }
158
+ return { branch: fallback };
159
+ };
160
+ if (preRules.length > 0) {
161
+ const pre = evalRules(preRules, 'continue');
162
+ if (pre.branch === 'fail-fast') {
163
+ const kind = pre.matched?.kind ?? 'pre-check-failed';
164
+ const label = pre.matched?.label ?? kind;
165
+ return failFast('pre-check', kind, label);
166
+ }
167
+ }
168
+ // ─── Retry loop ─────────────────────────────────────────────────
169
+ // Hard upper bound prevents pathological rule sets from looping forever.
170
+ // Most consumer rules cap retry at 3-5 via `attempt < N` predicates;
171
+ // this is just a safety net.
172
+ const MAX_LOOP = 50;
173
+ for (let loop = 0; loop < MAX_LOOP; loop++) {
174
+ const cur = providerEntry();
175
+ // Breaker check (pure): admit + transition based on cooldown.
176
+ if (breakerConfig !== undefined) {
177
+ const current = breakerStates[cur.name] ?? initialBreakerState();
178
+ const { admitted, nextState } = admitCall(current, breakerConfig);
179
+ breakerStates[cur.name] = nextState;
180
+ if (!admitted) {
181
+ lastError = new CircuitOpenError(cur.name, nextState.lastErrorMessage, nextProbeTime(nextState, breakerConfig));
182
+ lastErrorKind = 'circuit-open';
183
+ lastResponse = undefined;
184
+ // Skip the call; jump straight to PostDecide so rules can
185
+ // route on errorKind === 'circuit-open'.
186
+ }
187
+ }
188
+ // Fire the actual call (unless breaker pre-emptied above).
189
+ if (lastErrorKind !== 'circuit-open') {
190
+ const t0 = Date.now();
191
+ try {
192
+ const response = await callFn(request, {
193
+ onFirstChunk: () => {
194
+ firstChunkSeen = true;
195
+ },
196
+ });
197
+ lastResponse = response;
198
+ lastError = undefined;
199
+ lastErrorKind = 'ok';
200
+ if (breakerConfig !== undefined) {
201
+ breakerStates[cur.name] = recordSuccess(breakerStates[cur.name] ?? initialBreakerState(), breakerConfig);
202
+ }
203
+ }
204
+ catch (err) {
205
+ lastResponse = undefined;
206
+ lastError = err instanceof Error ? err : new Error(String(err));
207
+ lastErrorKind = classifyError(err);
208
+ if (breakerConfig !== undefined && !(err instanceof CircuitOpenError)) {
209
+ breakerStates[cur.name] = recordFailure(breakerStates[cur.name] ?? initialBreakerState(), err, breakerConfig);
210
+ }
211
+ }
212
+ finally {
213
+ lastLatencyMs = Date.now() - t0;
214
+ attemptsPerProvider[cur.name] = (attemptsPerProvider[cur.name] ?? 0) + 1;
215
+ attempt += 1;
216
+ }
217
+ }
218
+ // PostDecide
219
+ let postBranch = 'ok';
220
+ let matchedRule;
221
+ if (postRules.length > 0) {
222
+ const post = evalRules(postRules, lastError === undefined ? 'ok' : 'fail-fast');
223
+ postBranch = post.branch;
224
+ matchedRule = post.matched;
225
+ }
226
+ else if (lastError !== undefined) {
227
+ // No postDecide rules + error → default fail-fast.
228
+ postBranch = 'fail-fast';
229
+ }
230
+ // First-chunk arbitration: post-first-chunk only `ok` and
231
+ // `fail-fast` are honored. Other decisions escalate to fail-fast
232
+ // with the mid-stream-not-retryable kind. This matches the
233
+ // LangChain RunnableWithFallbacks pattern documented in the
234
+ // streaming-vs-reliability design memo.
235
+ if (firstChunkSeen && postBranch !== 'ok' && postBranch !== 'fail-fast') {
236
+ return failFast('post-decide', MID_STREAM_KIND, `mid-stream failure not retryable (rule wanted '${postBranch}')`);
237
+ }
238
+ if (postBranch === 'ok') {
239
+ // Success exit. lastResponse is the committed value.
240
+ if (lastResponse !== undefined)
241
+ return lastResponse;
242
+ // 'ok' with no response is misconfiguration; fall through to
243
+ // fail-fast as a defensive default.
244
+ return failFast('post-decide', 'no-response', 'rule said ok but no response captured');
245
+ }
246
+ if (postBranch === 'fail-fast') {
247
+ const kind = matchedRule?.kind ?? lastErrorKind;
248
+ const label = matchedRule?.label ?? matchedRule?.kind ?? lastErrorKind;
249
+ return failFast('post-decide', kind, label);
250
+ }
251
+ if (postBranch === 'retry') {
252
+ // Loop continues; attempt was already bumped in finally.
253
+ continue;
254
+ }
255
+ if (postBranch === 'retry-other') {
256
+ providerIdx += 1;
257
+ if (providerIdx >= Math.max(providers.length, 1)) {
258
+ // Walked past the last provider — convert to fail-fast.
259
+ return failFast('post-decide', 'no-more-providers', 'retry-other requested but no more providers');
260
+ }
261
+ continue;
262
+ }
263
+ if (postBranch === 'fallback') {
264
+ if (!fallbackFn) {
265
+ return failFast('post-decide', 'fallback-not-configured', 'rule wanted fallback but no fallback fn provided');
266
+ }
267
+ try {
268
+ const repaired = await fallbackFn(request, lastError);
269
+ // Successful fallback — commit and exit.
270
+ return repaired;
271
+ }
272
+ catch (fallbackErr) {
273
+ // Fallback threw — re-classify and let next iteration's
274
+ // post-decide rules route on the new error.
275
+ lastError = fallbackErr instanceof Error ? fallbackErr : new Error(String(fallbackErr));
276
+ lastErrorKind = classifyError(fallbackErr);
277
+ lastResponse = undefined;
278
+ continue;
279
+ }
280
+ }
281
+ // Unknown branch — fail-fast as a defensive default.
282
+ return failFast('post-decide', 'unknown-branch', `unknown decision '${postBranch}'`);
283
+ }
284
+ // Hit the safety cap.
285
+ return failFast('post-decide', 'max-loop-exceeded', `reliability loop exceeded ${MAX_LOOP} iterations`);
286
+ }
287
+ //# sourceMappingURL=reliabilityExecution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reliabilityExecution.js","sourceRoot":"","sources":["../../../../../src/core/agent/stages/reliabilityExecution.ts"],"names":[],"mappings":"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"}
@@ -31,7 +31,7 @@ import { safeStringify } from '../validators.js';
31
31
  * Build the pausable tool-call handler for the agent's chart.
32
32
  */
33
33
  export function buildToolCallsHandler(deps) {
34
- const { registryByName, externalToolProvider, permissionChecker } = deps;
34
+ const { registryByName, externalToolProvider, providerToolCache, permissionChecker } = deps;
35
35
  return {
36
36
  execute: async (scope) => {
37
37
  const toolCalls = scope.llmLatestToolCalls;
@@ -50,28 +50,20 @@ export function buildToolCallsHandler(deps) {
50
50
  ...(toolCalls.length > 0 && { toolCalls }),
51
51
  });
52
52
  }
53
- // Resolve a tool by name, consulting the external ToolProvider
54
- // if one was wired via `.toolProvider()` and the static
55
- // registry doesn't carry the tool. The provider sees the same
56
- // ctx the Tools slot used, so dispatch + visibility stay
57
- // consistent within the iteration.
53
+ // Resolve a tool by name. The Tools slot already invoked
54
+ // `provider.list(ctx)` this iteration and cached the resolved
55
+ // Tool[] in the closure-shared providerToolCache read from
56
+ // there to avoid a second discovery call (especially important
57
+ // for async network-backed providers). Same iteration ctx →
58
+ // same result, so the cache is correct.
58
59
  const lookupTool = (toolName) => {
59
60
  const fromRegistry = registryByName.get(toolName);
60
61
  if (fromRegistry)
61
62
  return fromRegistry;
62
63
  if (!externalToolProvider)
63
64
  return undefined;
64
- const activatedIds = scope.activatedInjectionIds ?? [];
65
- const identity = scope.runIdentity;
66
- const ctx = {
67
- iteration: scope.iteration,
68
- ...(activatedIds.length > 0 && {
69
- activeSkillId: activatedIds[activatedIds.length - 1],
70
- }),
71
- ...(identity && { identity }),
72
- };
73
- const visible = externalToolProvider.list(ctx);
74
- return visible.find((t) => t.schema.name === toolName);
65
+ const cached = providerToolCache?.current ?? [];
66
+ return cached.find((t) => t.schema.name === toolName);
75
67
  };
76
68
  for (const tc of toolCalls) {
77
69
  const tool = lookupTool(tc.name);
@@ -1 +1 @@
1
- {"version":3,"file":"toolCalls.js","sourceRoot":"","sources":["../../../../../src/core/agent/stages/toolCalls.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAKH,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAkBjD;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAA0B;IAE1B,MAAM,EAAE,cAAc,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC;IAEzE,OAAO;QACL,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YACvB,MAAM,SAAS,GAAG,KAAK,CAAC,kBAIrB,CAAC;YACJ,MAAM,SAAS,GAAG,KAAK,CAAC,SAAmB,CAAC;YAC5C,MAAM,UAAU,GAAiB,CAAC,GAAI,KAAK,CAAC,OAAiC,CAAC,CAAC;YAC/E,kEAAkE;YAClE,kEAAkE;YAClE,6DAA6D;YAC7D,iEAAiE;YACjE,6DAA6D;YAC7D,2DAA2D;YAC3D,IAAI,KAAK,CAAC,gBAAgB,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnD,UAAU,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,WAA0B;oBAChC,OAAO,EAAE,KAAK,CAAC,gBAAgB,IAAI,EAAE;oBACrC,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;iBAC3C,CAAC,CAAC;YACL,CAAC;YACD,+DAA+D;YAC/D,wDAAwD;YACxD,8DAA8D;YAC9D,yDAAyD;YACzD,mCAAmC;YACnC,MAAM,UAAU,GAAG,CAAC,QAAgB,EAAoB,EAAE;gBACxD,MAAM,YAAY,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAClD,IAAI,YAAY;oBAAE,OAAO,YAAY,CAAC;gBACtC,IAAI,CAAC,oBAAoB;oBAAE,OAAO,SAAS,CAAC;gBAC5C,MAAM,YAAY,GAAI,KAAK,CAAC,qBAAuD,IAAI,EAAE,CAAC;gBAC1F,MAAM,QAAQ,GAAG,KAAK,CAAC,WAEV,CAAC;gBACd,MAAM,GAAG,GAAwB;oBAC/B,SAAS,EAAE,KAAK,CAAC,SAAmB;oBACpC,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI;wBAC7B,aAAa,EAAE,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;qBACrD,CAAC;oBACF,GAAG,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,CAAC;iBAC9B,CAAC;gBACF,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC/C,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;YACzD,CAAC,CAAC;YAEF,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;gBAC3B,MAAM,IAAI,GAAG,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;gBACjC,SAAS,CAAC,KAAK,EAAE,kCAAkC,EAAE;oBACnD,QAAQ,EAAE,EAAE,CAAC,IAAI;oBACjB,UAAU,EAAE,EAAE,CAAC,EAAE;oBACjB,IAAI,EAAE,EAAE,CAAC,IAAI;oBACb,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC;iBACjE,CAAC,CAAC;gBACH,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC3B,IAAI,MAAe,CAAC;gBACpB,IAAI,KAA0B,CAAC;gBAC/B,kEAAkE;gBAClE,kEAAkE;gBAClE,0DAA0D;gBAC1D,6DAA6D;gBAC7D,gEAAgE;gBAChE,0DAA0D;gBAC1D,IAAI,MAAM,GAAG,KAAK,CAAC;gBACnB,IAAI,iBAAiB,EAAE,CAAC;oBACtB,IAAI,CAAC;wBACH,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC;4BAC7C,UAAU,EAAE,WAAW;4BACvB,KAAK,EAAE,OAAO;4BACd,MAAM,EAAE,EAAE,CAAC,IAAI;4BACf,OAAO,EAAE,EAAE,CAAC,IAAI;yBACjB,CAAC,CAAC;wBACH,SAAS,CAAC,KAAK,EAAE,iCAAiC,EAAE;4BAClD,UAAU,EAAE,WAAW;4BACvB,KAAK,EAAE,OAAO;4BACd,MAAM,EAAE,EAAE,CAAC,IAAI;4BACf,MAAM,EAAE,QAAQ,CAAC,MAAM;4BACvB,GAAG,CAAC,QAAQ,CAAC,YAAY,KAAK,SAAS,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC,YAAY,EAAE,CAAC;4BACnF,GAAG,CAAC,QAAQ,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC;yBAC3E,CAAC,CAAC;wBACH,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;4BAC/B,MAAM,GAAG,IAAI,CAAC;4BACd,MAAM,GAAG,uBAAuB,QAAQ,CAAC,SAAS,IAAI,QAAQ,GAAG,CAAC;wBACpE,CAAC;oBACH,CAAC;oBAAC,OAAO,OAAO,EAAE,CAAC;wBACjB,2DAA2D;wBAC3D,2DAA2D;wBAC3D,wDAAwD;wBACxD,MAAM,GAAG,IAAI,CAAC;wBACd,MAAM,GAAG,GAAG,OAAO,YAAY,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;wBACzE,SAAS,CAAC,KAAK,EAAE,iCAAiC,EAAE;4BAClD,UAAU,EAAE,WAAW;4BACvB,KAAK,EAAE,OAAO;4BACd,MAAM,EAAE,EAAE,CAAC,IAAI;4BACf,MAAM,EAAE,MAAM;4BACd,SAAS,EAAE,6BAA6B,GAAG,EAAE;yBAC9C,CAAC,CAAC;wBACH,MAAM,GAAG,sCAAsC,GAAG,GAAG,CAAC;oBACxD,CAAC;gBACH,CAAC;gBACD,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,IAAI,CAAC;wBACH,IAAI,CAAC,IAAI;4BAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;wBACvD,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE;4BACnC,UAAU,EAAE,EAAE,CAAC,EAAE;4BACjB,SAAS;yBACV,CAAC,CAAC;oBACL,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;4BACxB,4DAA4D;4BAC5D,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC;4BAC3B,KAAK,CAAC,gBAAgB,GAAG,EAAE,CAAC,EAAE,CAAC;4BAC/B,KAAK,CAAC,cAAc,GAAG,EAAE,CAAC,IAAI,CAAC;4BAC/B,KAAK,CAAC,iBAAiB,GAAG,OAAO,CAAC;4BAClC,yDAAyD;4BACzD,0DAA0D;4BAC1D,OAAO;gCACL,UAAU,EAAE,EAAE,CAAC,EAAE;gCACjB,QAAQ,EAAE,EAAE,CAAC,IAAI;gCACjB,GAAG,CAAC,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI;oCACnD,CAAC,CAAE,GAAG,CAAC,IAAgC;oCACvC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;6BACxB,CAAC;wBACJ,CAAC;wBACD,KAAK,GAAG,IAAI,CAAC;wBACb,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBAC5D,CAAC;gBACH,CAAC;gBACD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;gBACxC,SAAS,CAAC,KAAK,EAAE,gCAAgC,EAAE;oBACjD,UAAU,EAAE,EAAE,CAAC,EAAE;oBACjB,MAAM;oBACN,UAAU;oBACV,GAAG,CAAC,KAAK,KAAK,IAAI,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;iBACvC,CAAC,CAAC;gBACH,MAAM,SAAS,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBAC9E,UAAU,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,SAAS;oBAClB,UAAU,EAAE,EAAE,CAAC,EAAE;oBACjB,QAAQ,EAAE,EAAE,CAAC,IAAI;iBAClB,CAAC,CAAC;gBAEH,0DAA0D;gBAC1D,EAAE;gBACF,yDAAyD;gBACzD,0DAA0D;gBAC1D,mDAAmD;gBACnD,KAAK,CAAC,cAAc,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;gBAEhE,yDAAyD;gBACzD,0DAA0D;gBAC1D,0DAA0D;gBAC1D,6DAA6D;gBAC7D,mCAAmC;gBACnC,IAAI,EAAE,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;oBAClD,MAAM,WAAW,GAAI,EAAE,CAAC,IAAyB,CAAC,EAAE,CAAC;oBACrD,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC9D,MAAM,OAAO,GAAG,KAAK,CAAC,qBAA0C,CAAC;wBACjE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;4BACnC,KAAK,CAAC,qBAAqB,GAAG,CAAC,GAAG,OAAO,EAAE,WAAW,CAAC,CAAC;wBAC1D,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YACD,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC;YAE3B,SAAS,CAAC,KAAK,EAAE,oCAAoC,EAAE;gBACrD,SAAS,EAAE,CAAC;gBACZ,SAAS,EAAE,SAAS;gBACpB,aAAa,EAAE,SAAS,CAAC,MAAM;gBAC/B,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB,CAAC,CAAC;YACH,KAAK,CAAC,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC;YAChC,OAAO,SAAS,CAAC,CAAC,+CAA+C;QACnE,CAAC;QACD,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACvB,mEAAmE;YACnE,6DAA6D;YAC7D,wDAAwD;YACxD,iEAAiE;YACjE,kDAAkD;YAClD,MAAM,UAAU,GAAG,KAAK,CAAC,gBAA0B,CAAC;YACpD,MAAM,QAAQ,GAAG,KAAK,CAAC,cAAwB,CAAC;YAChD,MAAM,OAAO,GAAG,KAAK,CAAC,iBAA2B,CAAC;YAClD,MAAM,SAAS,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC3E,MAAM,UAAU,GAAiB;gBAC/B,GAAI,KAAK,CAAC,OAAiC;gBAC3C;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,SAAS;oBAClB,UAAU;oBACV,QAAQ;iBACT;aACF,CAAC;YACF,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC;YAE3B,SAAS,CAAC,KAAK,EAAE,gCAAgC,EAAE;gBACjD,UAAU;gBACV,MAAM,EAAE,KAAK;gBACb,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO;aACjC,CAAC,CAAC;YACH,MAAM,SAAS,GAAG,KAAK,CAAC,SAAmB,CAAC;YAC5C,SAAS,CAAC,KAAK,EAAE,oCAAoC,EAAE;gBACrD,SAAS,EAAE,CAAC;gBACZ,SAAS,EAAE,SAAS;gBACpB,aAAa,EAAE,CAAC;gBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB,CAAC,CAAC;YACH,KAAK,CAAC,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC;YAChC,iCAAiC;YACjC,KAAK,CAAC,gBAAgB,GAAG,EAAE,CAAC;YAC5B,KAAK,CAAC,cAAc,GAAG,EAAE,CAAC;YAC1B,KAAK,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAC9B,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"toolCalls.js","sourceRoot":"","sources":["../../../../../src/core/agent/stages/toolCalls.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,7 @@
13
13
  import { flowChart } from 'footprintjs';
14
14
  import { INJECTION_KEYS } from '../../conventions.js';
15
15
  import { COMPOSITION_KEYS } from '../../recorders/core/types.js';
16
+ import { typedEmit } from '../../recorders/core/typedEmit.js';
16
17
  import { composeSlot, fnv1a, truncate } from './helpers.js';
17
18
  /**
18
19
  * Build the Tools slot subflow.
@@ -27,16 +28,94 @@ export function buildToolsSlot(config) {
27
28
  const budgetCap = config.budgetCap ?? 2000;
28
29
  const tools = config.tools;
29
30
  const toolProvider = config.toolProvider;
30
- return flowChart('Compose', (scope) => {
31
+ const providerToolCache = config.providerToolCache;
32
+ // Stage 1 — Discover: consult the external ToolProvider (if any) and
33
+ // resolve its Tool[] for this iteration. ALWAYS runs (even when no
34
+ // provider) so the trace shape is consistent across agents — the
35
+ // no-provider path early-returns in microseconds. When a provider IS
36
+ // set, this stage owns the entire async-discovery boundary:
37
+ //
38
+ // • own runtimeStageId (e.g., `sf-tools/discover#7`) so KeyedRecorder
39
+ // and SequenceRecorder can scope per-discovery latency / errors
40
+ // • own InOutRecorder boundary (entry/exit pair)
41
+ // • own narrative entry separating "I called the hub" from "I built
42
+ // the slot"
43
+ // • emits `tools.discovery_started`, `tools.discovery_completed` (or
44
+ // `tools.discovery_failed`) with timing + provider id
45
+ //
46
+ // Sync providers still pay zero microtask overhead — the dynamic
47
+ // `instanceof Promise` check skips await for non-Promise returns.
48
+ const discoverStage = async (scope) => {
49
+ if (!toolProvider)
50
+ return; // No-op fast path: keeps trace shape consistent.
51
+ const args = scope.$getArgs();
52
+ const iteration = args.iteration ?? 1;
53
+ const env = scope.$getEnv();
54
+ const activatedIds = scope.$getValue('activatedInjectionIds') ?? [];
55
+ const identity = scope.$getValue('runIdentity');
56
+ const ctx = {
57
+ iteration,
58
+ ...(activatedIds.length > 0 && { activeSkillId: activatedIds[activatedIds.length - 1] }),
59
+ ...(identity && { identity }),
60
+ ...(env.signal && { signal: env.signal }),
61
+ };
62
+ typedEmit(scope, 'agentfootprint.tools.discovery_started', {
63
+ providerId: toolProvider.id,
64
+ iteration,
65
+ });
66
+ const startMs = Date.now();
67
+ let visibleTools;
68
+ try {
69
+ // Dynamic check — sync providers skip the await microtask.
70
+ const result = toolProvider.list(ctx);
71
+ visibleTools = result instanceof Promise ? await result : result;
72
+ }
73
+ catch (err) {
74
+ // Discovery failure is loud by design. Emit the typed event
75
+ // with the providerId so consumers can route alerts; then
76
+ // re-throw so a configured `reliability` rule decides whether
77
+ // to retry / fall back / fail-fast. Silently dropping tools
78
+ // mid-conversation creates non-deterministic agent behavior
79
+ // harder to debug than a crash.
80
+ const errMessage = err instanceof Error ? err.message : String(err);
81
+ const errName = err instanceof Error ? err.name : 'Error';
82
+ typedEmit(scope, 'agentfootprint.tools.discovery_failed', {
83
+ providerId: toolProvider.id,
84
+ error: errMessage,
85
+ errorName: errName,
86
+ iteration,
87
+ durationMs: Date.now() - startMs,
88
+ });
89
+ throw err;
90
+ }
91
+ typedEmit(scope, 'agentfootprint.tools.discovery_completed', {
92
+ providerId: toolProvider.id,
93
+ iteration,
94
+ durationMs: Date.now() - startMs,
95
+ toolCount: visibleTools.length,
96
+ });
97
+ // Cache the resolved Tool[] in the closure-shared ProviderToolCache.
98
+ // The Compose stage reads providerSchemas from here; the toolCalls
99
+ // handler reads the executable Tool objects on dispatch. Both share
100
+ // ONE list() call per iteration. The cache lives outside scope
101
+ // because Tool objects carry `execute` functions that can't be
102
+ // `structuredClone`d into the transactional memory layer.
103
+ if (providerToolCache)
104
+ providerToolCache.current = visibleTools;
105
+ };
106
+ // Stage 2 — Compose: merges static + provider + per-skill schemas
107
+ // into the tool slot. Pure compute, sync, fast. Reads provider tools
108
+ // from `providerToolCache.current` populated by the Discover stage.
109
+ const composeStage = (scope) => {
31
110
  const args = scope.$getArgs();
32
111
  const iteration = args.iteration ?? 1;
33
112
  const injections = tools.map((t, i) => {
34
113
  const summary = `${t.name}: ${t.description}`;
35
114
  // `source: 'registry'` — tools configured at build time via
36
- // `.tool(...)` are baseline API flow (the static tool list
37
- // sent to the LLM), NOT context engineering. Skills /
38
- // Instructions that gate tools dynamically tag their
39
- // injections with their flavor below.
115
+ // `.tool(...)` are baseline API flow (the static tool list sent
116
+ // to the LLM), NOT context engineering. Skills / Instructions
117
+ // that gate tools dynamically tag their injections with their
118
+ // flavor below.
40
119
  return {
41
120
  contentSummary: truncate(summary, 80),
42
121
  contentHash: fnv1a(`tool:${t.name}:${t.description}`),
@@ -48,23 +127,9 @@ export function buildToolsSlot(config) {
48
127
  position: i,
49
128
  };
50
129
  });
51
- // Block A5/Neo follow-up: when an external `ToolProvider` is
52
- // configured, consult it per iteration. Closure-held in
53
- // `toolProvider` since scope can't carry functions. The provider
54
- // sees `{ iteration, activeSkillId, identity }` so dynamic
55
- // chains (`gatedTools`, `skillScopedTools`) react to the
56
- // current activation state.
57
130
  const providerSchemas = [];
58
- if (toolProvider) {
59
- const activatedIds = scope.$getValue('activatedInjectionIds') ?? [];
60
- const identity = scope.$getValue('runIdentity');
61
- const ctx = {
62
- iteration,
63
- ...(activatedIds.length > 0 && { activeSkillId: activatedIds[activatedIds.length - 1] }),
64
- ...(identity && { identity }),
65
- };
66
- const visibleTools = toolProvider.list(ctx);
67
- for (const t of visibleTools) {
131
+ if (toolProvider && providerToolCache) {
132
+ for (const t of providerToolCache.current) {
68
133
  const schema = t.schema;
69
134
  providerSchemas.push(schema);
70
135
  const summary = `${schema.name}: ${schema.description}`;
@@ -80,8 +145,8 @@ export function buildToolsSlot(config) {
80
145
  });
81
146
  }
82
147
  }
83
- // Active Injections targeting the tools slot (Skills with
84
- // tools=[…]). Filter activeInjections by `inject.tools`.
148
+ // Active Injections targeting the tools slot (Skills with tools=[…]).
149
+ // Filter activeInjections by `inject.tools`.
85
150
  const activeInjections = scope.$getValue('activeInjections') ?? [];
86
151
  const dynamicSchemas = [];
87
152
  for (const inj of activeInjections) {
@@ -106,17 +171,17 @@ export function buildToolsSlot(config) {
106
171
  }
107
172
  scope.$setValue(INJECTION_KEYS.TOOLS, injections);
108
173
  // Merge schemas from all three sources, deduping by tool name.
109
- // Order: static .tool() registry FIRST (auto-attached read_skill
110
- // / list_skills land here when `.skills(registry)` is wired),
111
- // then external `.toolProvider()` output, then per-skill
112
- // inject.tools. First occurrence wins.
174
+ // Order: static .tool() registry FIRST (auto-attached read_skill /
175
+ // list_skills land here when `.skills(registry)` is wired), then
176
+ // external `.toolProvider()` output, then per-skill inject.tools.
177
+ // First occurrence wins.
113
178
  //
114
179
  // Why dedupe matters: Neo wires `gatedTools(staticTools([listSkills,
115
- // readSkill]), policy.isAllowed)` AND calls `.skills(registry)`
116
- // the framework auto-attaches its own `read_skill` from the
117
- // skill registry, AND the consumer's toolProvider emits one too.
118
- // Without dedupe both reach the LLM and Anthropic rejects the
119
- // request: "tools: Tool names must be unique."
180
+ // readSkill]), policy.isAllowed)` AND calls `.skills(registry)`
181
+ // the framework auto-attaches its own `read_skill` from the skill
182
+ // registry, AND the consumer's toolProvider emits one too. Without
183
+ // dedupe both reach the LLM and Anthropic rejects the request:
184
+ // "tools: Tool names must be unique."
120
185
  const seen = new Set();
121
186
  const merged = [];
122
187
  for (const t of [...tools, ...providerSchemas, ...dynamicSchemas]) {
@@ -127,6 +192,9 @@ export function buildToolsSlot(config) {
127
192
  }
128
193
  scope.toolSchemas = merged;
129
194
  scope.$setValue(COMPOSITION_KEYS.SLOT_COMPOSED, composeSlot('tools', iteration, injections, budgetCap, toolProvider ? 'registry+provider+injections' : 'registry+injections'));
130
- }, 'compose', undefined, 'Compose tools slot').build();
195
+ };
196
+ return flowChart('Discover', discoverStage, 'discover', undefined, 'Discover provider tools')
197
+ .addFunction('Compose', composeStage, 'compose', 'Compose tools slot')
198
+ .build();
131
199
  }
132
200
  //# sourceMappingURL=buildToolsSlot.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"buildToolsSlot.js","sourceRoot":"","sources":["../../../../src/core/slots/buildToolsSlot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"buildToolsSlot.js","sourceRoot":"","sources":["../../../../src/core/slots/buildToolsSlot.ts"],"names":[],"mappings":"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"}
@@ -58,6 +58,9 @@ export const EVENT_NAMES = {
58
58
  offered: 'agentfootprint.tools.offered',
59
59
  activated: 'agentfootprint.tools.activated',
60
60
  deactivated: 'agentfootprint.tools.deactivated',
61
+ discoveryStarted: 'agentfootprint.tools.discovery_started',
62
+ discoveryCompleted: 'agentfootprint.tools.discovery_completed',
63
+ discoveryFailed: 'agentfootprint.tools.discovery_failed',
61
64
  },
62
65
  skill: {
63
66
  activated: 'agentfootprint.skill.activated',
@@ -130,6 +133,9 @@ export const ALL_EVENT_TYPES = [
130
133
  'agentfootprint.tools.offered',
131
134
  'agentfootprint.tools.activated',
132
135
  'agentfootprint.tools.deactivated',
136
+ 'agentfootprint.tools.discovery_started',
137
+ 'agentfootprint.tools.discovery_completed',
138
+ 'agentfootprint.tools.discovery_failed',
133
139
  'agentfootprint.skill.activated',
134
140
  'agentfootprint.skill.deactivated',
135
141
  'agentfootprint.permission.check',
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/events/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/events/registry.ts"],"names":[],"mappings":"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"}
package/dist/esm/index.js CHANGED
@@ -45,6 +45,7 @@ export { permissionRecorder, } from './recorders/core/PermissionRecorder.js';
45
45
  export { evalRecorder } from './recorders/core/EvalRecorder.js';
46
46
  export { memoryRecorder } from './recorders/core/MemoryRecorder.js';
47
47
  export { skillRecorder } from './recorders/core/SkillRecorder.js';
48
+ export { toolsRecorder } from './recorders/core/ToolsRecorder.js';
48
49
  export { typedEmit } from './recorders/core/typedEmit.js';
49
50
  export { RunnerBase, makeRunId } from './core/RunnerBase.js';
50
51
  // Pause/Resume primitives — consumer API for human-in-the-loop tools.