agentfootprint 1.4.2 → 1.7.1

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 (159) hide show
  1. package/AGENTS.md +12 -32
  2. package/CLAUDE.md +20 -30
  3. package/README.md +1 -1
  4. package/dist/adapters/anthropic/AnthropicAdapter.js +9 -10
  5. package/dist/adapters/anthropic/AnthropicAdapter.js.map +1 -1
  6. package/dist/adapters/browser/BrowserAnthropicAdapter.js +26 -8
  7. package/dist/adapters/browser/BrowserAnthropicAdapter.js.map +1 -1
  8. package/dist/concepts/LLMCall.js +6 -0
  9. package/dist/concepts/LLMCall.js.map +1 -1
  10. package/dist/concepts/RAG.js +7 -1
  11. package/dist/concepts/RAG.js.map +1 -1
  12. package/dist/concepts/Swarm.js +1 -0
  13. package/dist/concepts/Swarm.js.map +1 -1
  14. package/dist/esm/adapters/anthropic/AnthropicAdapter.js +9 -10
  15. package/dist/esm/adapters/anthropic/AnthropicAdapter.js.map +1 -1
  16. package/dist/esm/adapters/browser/BrowserAnthropicAdapter.js +26 -8
  17. package/dist/esm/adapters/browser/BrowserAnthropicAdapter.js.map +1 -1
  18. package/dist/esm/concepts/LLMCall.js +6 -0
  19. package/dist/esm/concepts/LLMCall.js.map +1 -1
  20. package/dist/esm/concepts/RAG.js +7 -1
  21. package/dist/esm/concepts/RAG.js.map +1 -1
  22. package/dist/esm/concepts/Swarm.js +1 -0
  23. package/dist/esm/concepts/Swarm.js.map +1 -1
  24. package/dist/esm/executor/agentLoop.js +4 -0
  25. package/dist/esm/executor/agentLoop.js.map +1 -1
  26. package/dist/esm/index.js +6 -0
  27. package/dist/esm/index.js.map +1 -1
  28. package/dist/esm/lib/call/callLLMStage.js +41 -0
  29. package/dist/esm/lib/call/callLLMStage.js.map +1 -1
  30. package/dist/esm/lib/call/helpers.js +361 -3
  31. package/dist/esm/lib/call/helpers.js.map +1 -1
  32. package/dist/esm/lib/call/parseResponseStage.js +12 -3
  33. package/dist/esm/lib/call/parseResponseStage.js.map +1 -1
  34. package/dist/esm/lib/call/streamingCallLLMStage.js +42 -0
  35. package/dist/esm/lib/call/streamingCallLLMStage.js.map +1 -1
  36. package/dist/esm/lib/call/toolExecutionSubflow.js +5 -2
  37. package/dist/esm/lib/call/toolExecutionSubflow.js.map +1 -1
  38. package/dist/esm/lib/concepts/AgentBuilder.js +83 -0
  39. package/dist/esm/lib/concepts/AgentBuilder.js.map +1 -1
  40. package/dist/esm/lib/concepts/AgentRunner.js +77 -63
  41. package/dist/esm/lib/concepts/AgentRunner.js.map +1 -1
  42. package/dist/esm/lib/instructions/InstructionRecorder.js +6 -2
  43. package/dist/esm/lib/instructions/InstructionRecorder.js.map +1 -1
  44. package/dist/esm/lib/loop/buildAgentLoop.js +132 -4
  45. package/dist/esm/lib/loop/buildAgentLoop.js.map +1 -1
  46. package/dist/esm/lib/narrative/agentRenderer.js +79 -14
  47. package/dist/esm/lib/narrative/agentRenderer.js.map +1 -1
  48. package/dist/esm/observe.barrel.js +2 -0
  49. package/dist/esm/observe.barrel.js.map +1 -1
  50. package/dist/esm/providers.barrel.js +1 -1
  51. package/dist/esm/providers.barrel.js.map +1 -1
  52. package/dist/esm/recorders/CostRecorder.js +20 -16
  53. package/dist/esm/recorders/CostRecorder.js.map +1 -1
  54. package/dist/esm/recorders/ExplainRecorder.js +4 -0
  55. package/dist/esm/recorders/ExplainRecorder.js.map +1 -1
  56. package/dist/esm/recorders/RecorderBridge.js +11 -5
  57. package/dist/esm/recorders/RecorderBridge.js.map +1 -1
  58. package/dist/esm/recorders/TokenRecorder.js +26 -24
  59. package/dist/esm/recorders/TokenRecorder.js.map +1 -1
  60. package/dist/esm/recorders/ToolUsageRecorder.js +21 -17
  61. package/dist/esm/recorders/ToolUsageRecorder.js.map +1 -1
  62. package/dist/esm/streaming/StreamEmitter.js.map +1 -1
  63. package/dist/executor/agentLoop.js +4 -0
  64. package/dist/executor/agentLoop.js.map +1 -1
  65. package/dist/index.js +15 -1
  66. package/dist/index.js.map +1 -1
  67. package/dist/lib/call/callLLMStage.js +41 -0
  68. package/dist/lib/call/callLLMStage.js.map +1 -1
  69. package/dist/lib/call/helpers.js +364 -4
  70. package/dist/lib/call/helpers.js.map +1 -1
  71. package/dist/lib/call/parseResponseStage.js +12 -3
  72. package/dist/lib/call/parseResponseStage.js.map +1 -1
  73. package/dist/lib/call/streamingCallLLMStage.js +42 -0
  74. package/dist/lib/call/streamingCallLLMStage.js.map +1 -1
  75. package/dist/lib/call/toolExecutionSubflow.js +5 -2
  76. package/dist/lib/call/toolExecutionSubflow.js.map +1 -1
  77. package/dist/lib/concepts/AgentBuilder.js +83 -0
  78. package/dist/lib/concepts/AgentBuilder.js.map +1 -1
  79. package/dist/lib/concepts/AgentRunner.js +77 -63
  80. package/dist/lib/concepts/AgentRunner.js.map +1 -1
  81. package/dist/lib/instructions/InstructionRecorder.js +6 -2
  82. package/dist/lib/instructions/InstructionRecorder.js.map +1 -1
  83. package/dist/lib/loop/buildAgentLoop.js +132 -4
  84. package/dist/lib/loop/buildAgentLoop.js.map +1 -1
  85. package/dist/lib/narrative/agentRenderer.js +79 -14
  86. package/dist/lib/narrative/agentRenderer.js.map +1 -1
  87. package/dist/observe.barrel.js +4 -1
  88. package/dist/observe.barrel.js.map +1 -1
  89. package/dist/providers.barrel.js +3 -1
  90. package/dist/providers.barrel.js.map +1 -1
  91. package/dist/recorders/CostRecorder.js +20 -16
  92. package/dist/recorders/CostRecorder.js.map +1 -1
  93. package/dist/recorders/ExplainRecorder.js +4 -0
  94. package/dist/recorders/ExplainRecorder.js.map +1 -1
  95. package/dist/recorders/RecorderBridge.js +11 -5
  96. package/dist/recorders/RecorderBridge.js.map +1 -1
  97. package/dist/recorders/TokenRecorder.js +26 -24
  98. package/dist/recorders/TokenRecorder.js.map +1 -1
  99. package/dist/recorders/ToolUsageRecorder.js +21 -17
  100. package/dist/recorders/ToolUsageRecorder.js.map +1 -1
  101. package/dist/streaming/StreamEmitter.js.map +1 -1
  102. package/dist/types/adapters/browser/BrowserAnthropicAdapter.d.ts.map +1 -1
  103. package/dist/types/concepts/LLMCall.d.ts.map +1 -1
  104. package/dist/types/concepts/RAG.d.ts.map +1 -1
  105. package/dist/types/concepts/Swarm.d.ts.map +1 -1
  106. package/dist/types/concepts/index.d.ts +1 -1
  107. package/dist/types/concepts/index.d.ts.map +1 -1
  108. package/dist/types/core/recorders.d.ts +4 -0
  109. package/dist/types/core/recorders.d.ts.map +1 -1
  110. package/dist/types/executor/agentLoop.d.ts.map +1 -1
  111. package/dist/types/index.d.ts +6 -0
  112. package/dist/types/index.d.ts.map +1 -1
  113. package/dist/types/lib/call/callLLMStage.d.ts.map +1 -1
  114. package/dist/types/lib/call/helpers.d.ts +45 -1
  115. package/dist/types/lib/call/helpers.d.ts.map +1 -1
  116. package/dist/types/lib/call/parseResponseStage.d.ts.map +1 -1
  117. package/dist/types/lib/call/streamingCallLLMStage.d.ts.map +1 -1
  118. package/dist/types/lib/call/toolExecutionSubflow.d.ts +12 -0
  119. package/dist/types/lib/call/toolExecutionSubflow.d.ts.map +1 -1
  120. package/dist/types/lib/concepts/Agent.d.ts +1 -1
  121. package/dist/types/lib/concepts/Agent.d.ts.map +1 -1
  122. package/dist/types/lib/concepts/AgentBuilder.d.ts +90 -0
  123. package/dist/types/lib/concepts/AgentBuilder.d.ts.map +1 -1
  124. package/dist/types/lib/concepts/AgentRunner.d.ts +19 -0
  125. package/dist/types/lib/concepts/AgentRunner.d.ts.map +1 -1
  126. package/dist/types/lib/concepts/index.d.ts +1 -1
  127. package/dist/types/lib/concepts/index.d.ts.map +1 -1
  128. package/dist/types/lib/instructions/InstructionRecorder.d.ts +3 -2
  129. package/dist/types/lib/instructions/InstructionRecorder.d.ts.map +1 -1
  130. package/dist/types/lib/loop/buildAgentLoop.d.ts.map +1 -1
  131. package/dist/types/lib/loop/types.d.ts +38 -0
  132. package/dist/types/lib/loop/types.d.ts.map +1 -1
  133. package/dist/types/lib/narrative/agentRenderer.d.ts +7 -2
  134. package/dist/types/lib/narrative/agentRenderer.d.ts.map +1 -1
  135. package/dist/types/observe.barrel.d.ts +1 -0
  136. package/dist/types/observe.barrel.d.ts.map +1 -1
  137. package/dist/types/providers.barrel.d.ts +1 -1
  138. package/dist/types/providers.barrel.d.ts.map +1 -1
  139. package/dist/types/recorders/CostRecorder.d.ts +17 -13
  140. package/dist/types/recorders/CostRecorder.d.ts.map +1 -1
  141. package/dist/types/recorders/ExplainRecorder.d.ts +3 -0
  142. package/dist/types/recorders/ExplainRecorder.d.ts.map +1 -1
  143. package/dist/types/recorders/RecorderBridge.d.ts +7 -3
  144. package/dist/types/recorders/RecorderBridge.d.ts.map +1 -1
  145. package/dist/types/recorders/TokenRecorder.d.ts +17 -18
  146. package/dist/types/recorders/TokenRecorder.d.ts.map +1 -1
  147. package/dist/types/recorders/ToolUsageRecorder.d.ts +15 -11
  148. package/dist/types/recorders/ToolUsageRecorder.d.ts.map +1 -1
  149. package/dist/types/scope/types.d.ts +7 -0
  150. package/dist/types/scope/types.d.ts.map +1 -1
  151. package/dist/types/streaming/StreamEmitter.d.ts +9 -0
  152. package/dist/types/streaming/StreamEmitter.d.ts.map +1 -1
  153. package/dist/types/types/agent.d.ts +7 -0
  154. package/dist/types/types/agent.d.ts.map +1 -1
  155. package/dist/types/types/multiAgent.d.ts +7 -0
  156. package/dist/types/types/multiAgent.d.ts.map +1 -1
  157. package/dist/types/types/tools.d.ts +19 -3
  158. package/dist/types/types/tools.d.ts.map +1 -1
  159. package/package.json +4 -5
@@ -217,6 +217,22 @@ export interface AgentLoopConfig {
217
217
  readonly streaming?: boolean;
218
218
  /** Structured output format — passed to LLM provider as responseFormat option. */
219
219
  readonly responseFormat?: ResponseFormat;
220
+ /**
221
+ * Run multiple tool calls within a single turn concurrently via Promise.all.
222
+ * Results are appended in the order the LLM requested them. Default: false.
223
+ * Only beneficial when the LLM requests 2+ independent tool calls in a turn.
224
+ */
225
+ readonly parallelTools?: boolean;
226
+ /**
227
+ * After this many consecutive identical (name, args) tool-call failures, the
228
+ * library injects a one-shot `escalation` field into the tool result content
229
+ * telling the LLM to change arguments, switch tools, or finalize. Fires
230
+ * exactly once per (name, args) key per conversation.
231
+ *
232
+ * Defaults to `REPEATED_FAILURE_ESCALATION_THRESHOLD` (3). Pass `0` (or any
233
+ * non-positive number) to disable.
234
+ */
235
+ readonly maxIdenticalFailures?: number;
220
236
  /**
221
237
  * Custom routing strategy — replaces the default RouteResponse decider.
222
238
  *
@@ -229,6 +245,28 @@ export interface AgentLoopConfig {
229
245
  * @internal Consumers use Agent/Swarm builders, not this field directly.
230
246
  */
231
247
  readonly routing?: RoutingConfig;
248
+ /**
249
+ * User-defined routing branches prepended to the default `tool-calls | final` routing.
250
+ *
251
+ * Each extension's `when` predicate is evaluated (in order) before the default
252
+ * decider logic. If none match, the default routing applies. If the runner
253
+ * exposes `.toFlowChart()`, the branch is mounted as a subflow; otherwise the
254
+ * runner is wrapped as a stage function.
255
+ *
256
+ * Ignored when `routing` is also set (Swarm path).
257
+ *
258
+ * @example
259
+ * ```ts
260
+ * routeExtensions: [
261
+ * { id: 'escalate', when: (s) => s.parsedResponse.content.includes('[ESCALATE]'), runner: humanAgent },
262
+ * ]
263
+ * ```
264
+ */
265
+ readonly routeExtensions?: readonly {
266
+ readonly id?: string;
267
+ readonly when: (scope: any) => boolean;
268
+ readonly runner: import('../../types/multiAgent').RunnerLike;
269
+ }[];
232
270
  }
233
271
  /**
234
272
  * Options for seeding the loop with initial state.
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/lib/loop/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/lib/loop/types.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Agent NarrativeRenderer — LLM-optimized narrative for agent loop execution.
2
+ * Agent NarrativeFormatter — LLM-optimized narrative for agent loop execution.
3
3
  *
4
4
  * Designed for LLM follow-up reasoning: the narrative answers "what happened?"
5
5
  * so a downstream LLM can ask informed questions about the agent's execution.
@@ -30,7 +30,12 @@ export interface AgentRendererOptions {
30
30
  verbose?: boolean;
31
31
  }
32
32
  /**
33
- * Create an agent-optimized NarrativeRenderer.
33
+ * Create an agent-optimized narrative formatter.
34
+ *
35
+ * Returns the `NarrativeRenderer` type (structurally identical to
36
+ * footprintjs's new `NarrativeFormatter`). Once a newer footprintjs
37
+ * release is consumed here, migrate the return type to
38
+ * `NarrativeFormatter` — no behavioural change.
34
39
  *
35
40
  * Usage:
36
41
  * ```typescript
@@ -1 +1 @@
1
- {"version":3,"file":"agentRenderer.d.ts","sourceRoot":"","sources":["../../../../src/lib/narrative/agentRenderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EACV,iBAAiB,EAUlB,MAAM,uBAAuB,CAAC;AA6E/B,MAAM,WAAW,oBAAoB;IACnC;;;;;OAKG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AA4ID;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,iBAAiB,CAsFrF"}
1
+ {"version":3,"file":"agentRenderer.d.ts","sourceRoot":"","sources":["../../../../src/lib/narrative/agentRenderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAQH,OAAO,KAAK,EACV,iBAAiB,EAWlB,MAAM,uBAAuB,CAAC;AA6E/B,MAAM,WAAW,oBAAoB;IACnC;;;;;OAKG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAmKD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,iBAAiB,CAwJrF"}
@@ -18,4 +18,5 @@ export { OTelRecorder } from './recorders/OTelRecorder';
18
18
  export type { OTelTracer, OTelRecorderOptions } from './recorders/OTelRecorder';
19
19
  export type { TokenStats, LLMCallEntry, CostEntry, CostRecorderOptions, TurnEntry, ToolUsageStats, ToolStats, QualityScore, QualityJudge, Violation, GuardrailCheck, PermissionEvent, AgentObservabilityOptions, AgentObservabilityRecorder, } from './recorders';
20
20
  export type { AgentRecorder } from './core';
21
+ export { ExplainRecorder } from './recorders/ExplainRecorder';
21
22
  //# sourceMappingURL=observe.barrel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"observe.barrel.d.ts","sourceRoot":"","sources":["../../src/observe.barrel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACL,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,YAAY,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEhF,YAAY,EACV,UAAU,EACV,YAAY,EACZ,SAAS,EACT,mBAAmB,EACnB,SAAS,EACT,cAAc,EACd,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,cAAc,EACd,eAAe,EACf,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,aAAa,CAAC;AAErB,YAAY,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC"}
1
+ {"version":3,"file":"observe.barrel.d.ts","sourceRoot":"","sources":["../../src/observe.barrel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACL,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,YAAY,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEhF,YAAY,EACV,UAAU,EACV,YAAY,EACZ,SAAS,EACT,mBAAmB,EACnB,SAAS,EACT,cAAc,EACd,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,cAAc,EACd,eAAe,EACf,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,aAAa,CAAC;AAErB,YAAY,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAG5C,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC"}
@@ -25,7 +25,7 @@ export { mcpToolProvider, a2aRunner } from './adapters';
25
25
  export type { MCPClient, MCPToolProviderOptions, A2AClient, A2ARunnerOptions } from './adapters';
26
26
  export type { LLMProvider, LLMCallOptions, LLMResponse, LLMStreamChunk, TokenUsage } from './types';
27
27
  export type { PromptProvider, PromptContext, ToolProvider, ToolContext, ToolExecutionResult, } from './core';
28
- export { agentAsTool, compositeTools, gatedTools } from './providers';
28
+ export { agentAsTool, compositeTools, gatedTools, staticTools, noTools } from './providers';
29
29
  export type { AgentAsToolConfig } from './providers';
30
30
  export { staticPrompt, templatePrompt, skillBasedPrompt, compositePrompt } from './providers';
31
31
  export type { Skill, SkillBasedPromptOptions, CompositePromptOptions } from './providers';
@@ -1 +1 @@
1
- {"version":3,"file":"providers.barrel.d.ts","sourceRoot":"","sources":["../../src/providers.barrel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAC9D,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG1D,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAC3E,YAAY,EACV,YAAY,EACZ,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,EACpB,qBAAqB,EACrB,8BAA8B,EAC9B,2BAA2B,GAC5B,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACxD,YAAY,EAAE,SAAS,EAAE,sBAAsB,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGjG,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACpG,YAAY,EACV,cAAc,EACd,aAAa,EACb,YAAY,EACZ,WAAW,EACX,mBAAmB,GACpB,MAAM,QAAQ,CAAC;AAGhB,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACtE,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGrD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9F,YAAY,EAAE,KAAK,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAG1F,OAAO,EACL,WAAW,EACX,aAAa,EACb,UAAU,EACV,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"providers.barrel.d.ts","sourceRoot":"","sources":["../../src/providers.barrel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAC9D,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG1D,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAC3E,YAAY,EACV,YAAY,EACZ,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,EACpB,qBAAqB,EACrB,8BAA8B,EAC9B,2BAA2B,GAC5B,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACxD,YAAY,EAAE,SAAS,EAAE,sBAAsB,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGjG,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACpG,YAAY,EACV,cAAc,EACd,aAAa,EACb,YAAY,EACZ,WAAW,EACX,mBAAmB,GACpB,MAAM,QAAQ,CAAC;AAGhB,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC5F,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGrD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9F,YAAY,EAAE,KAAK,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAG1F,OAAO,EACL,WAAW,EACX,aAAa,EACb,UAAU,EACV,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC"}
@@ -1,15 +1,9 @@
1
1
  /**
2
- * CostRecorder (v2) — calculates USD cost from AgentRecorder LLM call events.
2
+ * CostRecorder — calculates USD cost from AgentRecorder LLM call events.
3
3
  *
4
- * Unlike the v1 CostRecorder (which observes scope writes), this one
5
- * receives structured LLMCallEvent objects from the core loop.
6
- *
7
- * Usage:
8
- * const cost = new CostRecorder({ pricingTable: { 'claude-sonnet': { input: 3, output: 15 } } });
9
- * agent.recorder(cost);
10
- * await agent.run(...);
11
- * console.log(`$${cost.getTotalCost().toFixed(4)}`);
4
+ * Extends KeyedRecorder<CostEntry> Map keyed by runtimeStageId.
12
5
  */
6
+ import { KeyedRecorder } from 'footprintjs/trace';
13
7
  import type { AgentRecorder, LLMCallEvent } from '../core';
14
8
  import type { ModelPricing } from '../models/types';
15
9
  export type { ModelPricing } from '../models/types';
@@ -20,20 +14,30 @@ export interface CostEntry {
20
14
  readonly inputCost: number;
21
15
  readonly outputCost: number;
22
16
  readonly totalCost: number;
17
+ readonly runtimeStageId: string;
23
18
  }
24
19
  export interface CostRecorderOptions {
25
20
  readonly id?: string;
26
- /** Pricing per model (per 1M tokens). Models not in this table get $0 cost. */
27
21
  readonly pricingTable?: Record<string, ModelPricing>;
28
22
  }
29
- export declare class CostRecorder implements AgentRecorder {
23
+ export declare class CostRecorder extends KeyedRecorder<CostEntry> implements AgentRecorder {
30
24
  readonly id: string;
31
- private entries;
32
25
  private pricingTable;
33
26
  constructor(options?: CostRecorderOptions);
34
27
  onLLMCall(event: LLMCallEvent): void;
35
28
  getTotalCost(): number;
36
29
  getEntries(): CostEntry[];
37
- clear(): void;
30
+ toSnapshot(): {
31
+ name: string;
32
+ description: string;
33
+ preferredOperation: "accumulate";
34
+ data: {
35
+ numericField: string;
36
+ grandTotal: number;
37
+ steps: {
38
+ [k: string]: CostEntry;
39
+ };
40
+ };
41
+ };
38
42
  }
39
43
  //# sourceMappingURL=CostRecorder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CostRecorder.d.ts","sourceRoot":"","sources":["../../../src/recorders/CostRecorder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,+EAA+E;IAC/E,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACtD;AAED,qBAAa,YAAa,YAAW,aAAa;IAChD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,YAAY,CAA+B;gBAEvC,OAAO,GAAE,mBAAwB;IAK7C,SAAS,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAmBpC,YAAY,IAAI,MAAM;IAItB,UAAU,IAAI,SAAS,EAAE;IAIzB,KAAK,IAAI,IAAI;CAGd"}
1
+ {"version":3,"file":"CostRecorder.d.ts","sourceRoot":"","sources":["../../../src/recorders/CostRecorder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACtD;AAED,qBAAa,YAAa,SAAQ,aAAa,CAAC,SAAS,CAAE,YAAW,aAAa;IACjF,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,YAAY,CAA+B;gBAEvC,OAAO,GAAE,mBAAwB;IAM7C,SAAS,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAoBpC,YAAY,IAAI,MAAM;IAItB,UAAU,IAAI,SAAS,EAAE;IAIzB,UAAU;;;;;;;;;;;;CAYX"}
@@ -62,6 +62,8 @@ export interface LLMContext {
62
62
  export interface EvalIteration {
63
63
  /** Loop iteration number (0-based). */
64
64
  readonly iteration: number;
65
+ /** Unique execution step identifier for this LLM call. */
66
+ readonly runtimeStageId?: string;
65
67
  /** What the LLM had THIS iteration (context changes each loop — messages grow). */
66
68
  readonly context: LLMContext;
67
69
  /** Tool calls the LLM chose to make (empty if final response). */
@@ -93,6 +95,7 @@ export declare class ExplainRecorder implements AgentRecorder {
93
95
  private currentTurn;
94
96
  private input?;
95
97
  private currentIteration;
98
+ private currentRuntimeStageId?;
96
99
  private currentContext;
97
100
  constructor(id?: string);
98
101
  onTurnStart(event: TurnStartEvent): void;
@@ -1 +1 @@
1
- {"version":3,"file":"ExplainRecorder.d.ts","sourceRoot":"","sources":["../../../src/recorders/ExplainRecorder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ExplainRecorder.d.ts","sourceRoot":"","sources":["../../../src/recorders/ExplainRecorder.ts"],"names":[],"mappings":"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"}
@@ -14,11 +14,15 @@ export declare class RecorderBridge {
14
14
  private readonly recorders;
15
15
  private turnNumber;
16
16
  private loopIteration;
17
+ private _toolRuntimeStageId;
18
+ /** Set by the LLM capture recorder's onStageStart — tracks current stage's runtimeStageId. */
19
+ setToolRuntimeStageId(id: string): void;
17
20
  constructor(recorders: AgentRecorder[]);
18
21
  /** Dispatch turn start event. */
19
22
  dispatchTurnStart(message: string): void;
20
23
  /** Dispatch LLM call event from the adapter response stored in scope. */
21
- dispatchLLMCall(response: LLMResponse, latencyMs?: number, context?: {
24
+ dispatchLLMCall(response: LLMResponse, latencyMs: number, context: {
25
+ runtimeStageId: string;
22
26
  systemPrompt?: string;
23
27
  toolDescriptions?: Array<{
24
28
  name: string;
@@ -31,11 +35,11 @@ export declare class RecorderBridge {
31
35
  }): void;
32
36
  /** Dispatch turn complete event. */
33
37
  dispatchTurnComplete(content: string, messageCount: number, totalLoopIterations?: number): void;
34
- /** Dispatch tool call event from stream events. */
38
+ /** Dispatch tool call event. */
35
39
  dispatchToolCall(toolName: string, args: Record<string, unknown>, result: {
36
40
  content: string;
37
41
  error?: boolean;
38
- }, latencyMs: number): void;
42
+ }, latencyMs: number, runtimeStageId: string): void;
39
43
  /**
40
44
  * Create an onStreamEvent handler that bridges tool events to recorders.
41
45
  * Attach this alongside the consumer's onEvent handler in AgentRunner.
@@ -1 +1 @@
1
- {"version":3,"file":"RecorderBridge.d.ts","sourceRoot":"","sources":["../../../src/recorders/RecorderBridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAgB,MAAM,SAAS,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAErD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;IAC5C,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,aAAa,CAAK;gBAEd,SAAS,EAAE,aAAa,EAAE;IAItC,iCAAiC;IACjC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIxC,yEAAyE;IACzE,eAAe,CACb,QAAQ,EAAE,WAAW,EACrB,SAAS,SAAI,EACb,OAAO,CAAC,EAAE;QACR,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,gBAAgB,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAChE,QAAQ,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC;KACtD,GACA,IAAI;IAgBP,oCAAoC;IACpC,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,mBAAmB,SAAI,GAAG,IAAI;IAW1F,mDAAmD;IACnD,gBAAgB,CACd,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAC5C,SAAS,EAAE,MAAM,GAChB,IAAI;IAIP;;;OAGG;IACH,uBAAuB,IAAI,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI;IA4B5D,4BAA4B;IAC5B,aAAa,CAAC,KAAK,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAIjF,OAAO,CAAC,QAAQ;CAYjB"}
1
+ {"version":3,"file":"RecorderBridge.d.ts","sourceRoot":"","sources":["../../../src/recorders/RecorderBridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAgB,MAAM,SAAS,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAErD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;IAC5C,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,mBAAmB,CAAM;IAEjC,8FAA8F;IAC9F,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;gBAI3B,SAAS,EAAE,aAAa,EAAE;IAItC,iCAAiC;IACjC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIxC,yEAAyE;IACzE,eAAe,CACb,QAAQ,EAAE,WAAW,EACrB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE;QACP,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,gBAAgB,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAChE,QAAQ,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC;KACtD,GACA,IAAI;IAiBP,oCAAoC;IACpC,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,mBAAmB,SAAI,GAAG,IAAI;IAW1F,gCAAgC;IAChC,gBAAgB,CACd,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAC5C,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,GACrB,IAAI;IAIP;;;OAGG;IACH,uBAAuB,IAAI,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI;IA6B5D,4BAA4B;IAC5B,aAAa,CAAC,KAAK,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAIjF,OAAO,CAAC,QAAQ;CAYjB"}
@@ -1,24 +1,14 @@
1
1
  /**
2
2
  * TokenRecorder — tracks token usage and cost across LLM calls.
3
3
  *
4
- * Implements AgentRecorder. Observes onLLMCall events and accumulates
5
- * input/output token counts, call count, latency stats, and per-call cost.
6
- *
7
- * Usage:
8
- * const tokens = new TokenRecorder();
9
- * agent.recorder(tokens);
10
- * await agent.run(...);
11
- * console.log(tokens.getStats());
12
- *
13
- * With pricing:
14
- * const tokens = new TokenRecorder({ pricing: { 'claude-sonnet-4-20250514': { input: 3, output: 15 } } });
4
+ * Extends KeyedRecorder<LLMCallEntry> Map keyed by runtimeStageId.
5
+ * No fallbacks. runtimeStageId is always provided by footprintjs.
15
6
  */
7
+ import { KeyedRecorder } from 'footprintjs/trace';
16
8
  import type { AgentRecorder, LLMCallEvent } from '../core';
17
9
  import type { ModelPricing } from '../models/types';
18
10
  export interface TokenRecorderOptions {
19
- /** Recorder ID. Default: 'token-recorder'. */
20
11
  id?: string;
21
- /** Pricing table (per 1M tokens, USD). Models not listed get $0. */
22
12
  pricing?: Record<string, ModelPricing>;
23
13
  }
24
14
  export interface TokenStats {
@@ -27,7 +17,6 @@ export interface TokenStats {
27
17
  readonly totalOutputTokens: number;
28
18
  readonly totalLatencyMs: number;
29
19
  readonly averageLatencyMs: number;
30
- /** Total estimated cost in USD. 0 if no pricing table provided. */
31
20
  readonly totalCost: number;
32
21
  readonly calls: LLMCallEntry[];
33
22
  }
@@ -38,17 +27,27 @@ export interface LLMCallEntry {
38
27
  readonly latencyMs: number;
39
28
  readonly turnNumber: number;
40
29
  readonly loopIteration: number;
41
- /** Estimated cost in USD for this call. 0 if model not in pricing table. */
42
30
  readonly cost: number;
31
+ readonly runtimeStageId: string;
43
32
  }
44
- export declare class TokenRecorder implements AgentRecorder {
33
+ export declare class TokenRecorder extends KeyedRecorder<LLMCallEntry> implements AgentRecorder {
45
34
  readonly id: string;
46
- private calls;
47
35
  private readonly pricing;
48
36
  constructor(options?: TokenRecorderOptions | string);
49
37
  onLLMCall(event: LLMCallEvent): void;
50
38
  getStats(): TokenStats;
51
39
  getTotalTokens(): number;
52
- clear(): void;
40
+ toSnapshot(): {
41
+ name: string;
42
+ description: string;
43
+ preferredOperation: "aggregate";
44
+ data: {
45
+ numericField: string;
46
+ grandTotal: number;
47
+ steps: {
48
+ [k: string]: LLMCallEntry;
49
+ };
50
+ };
51
+ };
53
52
  }
54
53
  //# sourceMappingURL=TokenRecorder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TokenRecorder.d.ts","sourceRoot":"","sources":["../../../src/recorders/TokenRecorder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,WAAW,oBAAoB;IACnC,8CAA8C;IAC9C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,mEAAmE;IACnE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,4EAA4E;IAC5E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,aAAc,YAAW,aAAa;IACjD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;gBAE3C,OAAO,CAAC,EAAE,oBAAoB,GAAG,MAAM;IAWnD,SAAS,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAoBpC,QAAQ,IAAI,UAAU;IAkBtB,cAAc,IAAI,MAAM;IAIxB,KAAK,IAAI,IAAI;CAGd"}
1
+ {"version":3,"file":"TokenRecorder.d.ts","sourceRoot":"","sources":["../../../src/recorders/TokenRecorder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,WAAW,oBAAoB;IACnC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,qBAAa,aAAc,SAAQ,aAAa,CAAC,YAAY,CAAE,YAAW,aAAa;IACrF,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;gBAE3C,OAAO,CAAC,EAAE,oBAAoB,GAAG,MAAM;IAWnD,SAAS,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAqBpC,QAAQ,IAAI,UAAU;IAmBtB,cAAc,IAAI,MAAM;IAIxB,UAAU;;;;;;;;;;;;CAYX"}
@@ -1,15 +1,9 @@
1
1
  /**
2
2
  * ToolUsageRecorder — tracks which tools are called, how often, and latency.
3
3
  *
4
- * Useful for understanding agent behavior: which tools are hot,
5
- * which are slow, and which are erroring.
6
- *
7
- * Usage:
8
- * const toolUsage = new ToolUsageRecorder();
9
- * agent.recorder(toolUsage);
10
- * await agent.run(...);
11
- * console.log(toolUsage.getStats());
4
+ * Extends KeyedRecorder<ToolCallEvent> Map keyed by runtimeStageId.
12
5
  */
6
+ import { KeyedRecorder } from 'footprintjs/trace';
13
7
  import type { AgentRecorder, ToolCallEvent } from '../core';
14
8
  export interface ToolUsageStats {
15
9
  readonly totalCalls: number;
@@ -22,13 +16,23 @@ export interface ToolStats {
22
16
  readonly totalLatencyMs: number;
23
17
  readonly averageLatencyMs: number;
24
18
  }
25
- export declare class ToolUsageRecorder implements AgentRecorder {
19
+ export declare class ToolUsageRecorder extends KeyedRecorder<ToolCallEvent> implements AgentRecorder {
26
20
  readonly id: string;
27
- private toolCalls;
28
21
  constructor(id?: string);
29
22
  onToolCall(event: ToolCallEvent): void;
30
23
  getStats(): ToolUsageStats;
31
24
  getToolNames(): string[];
32
- clear(): void;
25
+ toSnapshot(): {
26
+ name: string;
27
+ description: string;
28
+ preferredOperation: "translate";
29
+ data: {
30
+ numericField: string;
31
+ grandTotal: number;
32
+ steps: {
33
+ [k: string]: ToolCallEvent;
34
+ };
35
+ };
36
+ };
33
37
  }
34
38
  //# sourceMappingURL=ToolUsageRecorder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ToolUsageRecorder.d.ts","sourceRoot":"","sources":["../../../src/recorders/ToolUsageRecorder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE5D,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED,qBAAa,iBAAkB,YAAW,aAAa;IACrD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,SAAS,CAAuB;gBAE5B,EAAE,SAAwB;IAItC,UAAU,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAItC,QAAQ,IAAI,cAAc;IA6B1B,YAAY,IAAI,MAAM,EAAE;IAIxB,KAAK,IAAI,IAAI;CAGd"}
1
+ {"version":3,"file":"ToolUsageRecorder.d.ts","sourceRoot":"","sources":["../../../src/recorders/ToolUsageRecorder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE5D,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED,qBAAa,iBAAkB,SAAQ,aAAa,CAAC,aAAa,CAAE,YAAW,aAAa;IAC1F,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;gBAER,EAAE,SAAwB;IAKtC,UAAU,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAItC,QAAQ,IAAI,cAAc;IA8B1B,YAAY,IAAI,MAAM,EAAE;IAIxB,UAAU;;;;;;;;;;;;CAYX"}
@@ -66,6 +66,13 @@ export interface AgentLoopState {
66
66
  maxIterations: number;
67
67
  /** Final answer text (set when turn finalizes). */
68
68
  result: string;
69
+ /**
70
+ * Set by Finalize when the turn ended because `loopCount >= maxIterations`
71
+ * (safeDecider force-routed to the default branch), rather than because the
72
+ * LLM chose to stop. Consumers use it to render a distinct "agent gave up"
73
+ * state instead of an ambiguous empty response.
74
+ */
75
+ maxIterationsReached?: boolean;
69
76
  /** Prepared messages after strategy applied (Messages slot output). */
70
77
  memory_preparedMessages: Message[];
71
78
  /** Raw history loaded from ConversationStore. */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/scope/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/scope/types.ts"],"names":[],"mappings":"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"}
@@ -56,6 +56,15 @@ export type AgentStreamEvent = {
56
56
  content: string;
57
57
  iterations: number;
58
58
  paused?: boolean;
59
+ /**
60
+ * Why the turn ended. Absent when the LLM chose to stop normally.
61
+ * - 'maxIterations': safeDecider force-finalized at the iteration cap.
62
+ * - 'paused': the agent paused for human input (ask_human). Paired
63
+ * with `paused: true`; the `reason` variant lets
64
+ * consumers switch on a single field instead of two.
65
+ * Future reasons can be added without breaking consumers (optional field).
66
+ */
67
+ reason?: 'maxIterations' | 'paused';
59
68
  } | {
60
69
  type: 'error';
61
70
  phase: AgentPhase;
@@ -1 +1 @@
1
- {"version":3,"file":"StreamEmitter.d.ts","sourceRoot":"","sources":["../../../src/streaming/StreamEmitter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAClC;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB,GACD;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAC3F;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,6FAA6F;IAC7F,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB,GACD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3E;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1D,MAAM,MAAM,uBAAuB,GAAG,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAExE;;;;;GAKG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAiC;IAEjD,EAAE,CAAC,OAAO,EAAE,uBAAuB,GAAG,MAAM,IAAI;IAOhD,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;CASpC;AAED;;;;;;;;GAQG;AACH,qBAAa,YAAY;IACvB,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM;IAI9C,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM;CAGrD;AAGD,gDAAgD;AAChD,MAAM,MAAM,WAAW,GAAG,gBAAgB,CAAC;AAC3C,uDAAuD;AACvD,MAAM,MAAM,kBAAkB,GAAG,uBAAuB,CAAC"}
1
+ {"version":3,"file":"StreamEmitter.d.ts","sourceRoot":"","sources":["../../../src/streaming/StreamEmitter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAClC;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB,GACD;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAC3F;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,6FAA6F;IAC7F,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB,GACD;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,eAAe,GAAG,QAAQ,CAAC;CACrC,GACD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1D,MAAM,MAAM,uBAAuB,GAAG,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAExE;;;;;GAKG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAiC;IAEjD,EAAE,CAAC,OAAO,EAAE,uBAAuB,GAAG,MAAM,IAAI;IAOhD,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;CASpC;AAED;;;;;;;;GAQG;AACH,qBAAa,YAAY;IACvB,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM;IAI9C,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM;CAGrD;AAGD,gDAAgD;AAChD,MAAM,MAAM,WAAW,GAAG,gBAAgB,CAAC;AAC3C,uDAAuD;AACvD,MAAM,MAAM,kBAAkB,GAAG,uBAAuB,CAAC"}
@@ -25,6 +25,13 @@ export interface AgentResult {
25
25
  question: string;
26
26
  toolCallId: string;
27
27
  };
28
+ /**
29
+ * True when the turn ended because the agent hit its iteration cap
30
+ * (safeDecider force-routed to Finalize). The LLM did not choose to stop —
31
+ * it was cut off. Render a distinct state so users understand the loop
32
+ * didn't complete normally.
33
+ */
34
+ readonly maxIterationsReached?: boolean;
28
35
  }
29
36
  export interface AgentRunOptions {
30
37
  /** User message to send. */
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/types/agent.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;CAC9B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,oFAAoF;IACpF,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,yDAAyD;IACzD,QAAQ,CAAC,SAAS,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/D;AAED,MAAM,WAAW,eAAe;IAC9B,4BAA4B;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,qCAAqC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,+BAA+B;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/types/agent.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;CAC9B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,oFAAoF;IACpF,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,yDAAyD;IACzD,QAAQ,CAAC,SAAS,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D;;;;;OAKG;IACH,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;CACzC;AAED,MAAM,WAAW,eAAe;IAC9B,4BAA4B;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,qCAAqC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,+BAA+B;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B"}
@@ -53,5 +53,12 @@ export interface TraversalResult {
53
53
  readonly agents: AgentResultEntry[];
54
54
  /** Total traversal execution time. */
55
55
  readonly totalLatencyMs: number;
56
+ /**
57
+ * True when the traversal ended because `loopCount >= maxIterations` in the
58
+ * underlying agent loop (set by `safeDecider`), rather than because the LLM
59
+ * chose to stop. Surfaced uniformly across Swarm / Pipeline / custom runners
60
+ * so consumers can render a distinct "agent gave up" state.
61
+ */
62
+ readonly maxIterationsReached?: boolean;
56
63
  }
57
64
  //# sourceMappingURL=multiAgent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"multiAgent.d.ts","sourceRoot":"","sources":["../../../src/types/multiAgent.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,GAAG,CACD,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GACrD,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChC,YAAY,CAAC,IAAI,MAAM,EAAE,CAAC;IAC1B,WAAW,CAAC,IAAI,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,wDAAwD;IACxD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,6BAA6B;IAC7B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,kGAAkG;IAClG,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;IAClE,8EAA8E;IAC9E,QAAQ,CAAC,YAAY,CAAC,EAAE,CACtB,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,EAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC3B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,4BAA4B;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,mDAAmD;IACnD,QAAQ,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC;IACpC,sCAAsC;IACtC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC"}
1
+ {"version":3,"file":"multiAgent.d.ts","sourceRoot":"","sources":["../../../src/types/multiAgent.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,GAAG,CACD,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GACrD,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChC,YAAY,CAAC,IAAI,MAAM,EAAE,CAAC;IAC1B,WAAW,CAAC,IAAI,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,wDAAwD;IACxD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,6BAA6B;IAC7B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,kGAAkG;IAClG,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;IAClE,8EAA8E;IAC9E,QAAQ,CAAC,YAAY,CAAC,EAAE,CACtB,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,EAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC3B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,4BAA4B;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,mDAAmD;IACnD,QAAQ,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC;IACpC,sCAAsC;IACtC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC;;;;;OAKG;IACH,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;CACzC"}
@@ -6,12 +6,28 @@ export interface ToolDefinition {
6
6
  readonly id: string;
7
7
  /** Human-readable description (sent to LLM). */
8
8
  readonly description: string;
9
- /** JSON Schema for tool input. */
9
+ /** JSON Schema for tool input (plain object or Zod schema). */
10
10
  readonly inputSchema: Record<string, unknown>;
11
- /** Handler function. Returns string result. */
11
+ /** Handler function. Receives parsed LLM arguments. */
12
12
  readonly handler: ToolHandler;
13
13
  }
14
- export type ToolHandler = (input: Record<string, unknown>) => Promise<ToolResult> | ToolResult;
14
+ /**
15
+ * Tool handler function.
16
+ *
17
+ * Input is typed as `any` to allow destructured typed parameters
18
+ * in tool definitions. The runtime input is always a parsed JSON object
19
+ * from the LLM's tool call arguments.
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * // Destructure directly — the common pattern:
24
+ * handler: async ({ query }: { query: string }) => ({ content: `Results for: ${query}` })
25
+ *
26
+ * // Or use the raw input:
27
+ * handler: async (input) => ({ content: `${input.query}` })
28
+ * ```
29
+ */
30
+ export type ToolHandler = (input: any) => Promise<ToolResult> | ToolResult;
15
31
  export interface ToolResult {
16
32
  readonly content: string;
17
33
  readonly error?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/types/tools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,cAAc;IAC7B,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,kCAAkC;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9C,+CAA+C;IAC/C,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;CAC/B;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;AAE/F,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/types/tools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,cAAc;IAC7B,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,+DAA+D;IAC/D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9C,uDAAuD;IACvD,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;AAE3E,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentfootprint",
3
- "version": "1.4.2",
3
+ "version": "1.7.1",
4
4
  "description": "The explainable agent framework — build AI agents you can explain, audit, and trust. Built on footprintjs.",
5
5
  "license": "MIT",
6
6
  "author": "Sanjay Krishna Anbalagan",
@@ -52,6 +52,7 @@
52
52
  "build": "tsc && tsc -p tsconfig.esm.json",
53
53
  "watch": "tsc -w",
54
54
  "test": "vitest run",
55
+ "test:examples": "tsc -p examples/tsconfig.json",
55
56
  "test:watch": "vitest --watch",
56
57
  "lint": "eslint 'src/**/*.ts' 'test/**/*.ts' --ext .ts",
57
58
  "lint:fix": "eslint 'src/**/*.ts' 'test/**/*.ts' --ext .ts --fix",
@@ -144,10 +145,8 @@
144
145
  }
145
146
  },
146
147
  "sideEffects": false,
147
- "dependencies": {
148
- "footprintjs": ">=4.4.1"
149
- },
150
148
  "peerDependencies": {
149
+ "footprintjs": ">=4.13.0",
151
150
  "@anthropic-ai/sdk": ">=0.30.0",
152
151
  "@aws-sdk/client-bedrock-runtime": ">=3.0.0",
153
152
  "openai": ">=4.0.0"
@@ -169,7 +168,7 @@
169
168
  "@typescript-eslint/parser": "^5.61.0",
170
169
  "eslint": "^8.44.0",
171
170
  "eslint-config-prettier": "^6.15.0",
172
- "footprintjs": "^4.4.1",
171
+ "footprintjs": "^4.13.0",
173
172
  "prettier": "^2.8.1",
174
173
  "typescript": "~5.4.5",
175
174
  "vitest": "^4.0.18",