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
@@ -5,6 +5,166 @@ import { toolResultMessage } from '../../types';
5
5
  import { isAskHumanResult } from '../../tools/askHuman';
6
6
  import { validateToolInput, formatValidationErrors } from '../../tools/validateInput';
7
7
  import { processInstructions } from '../instructions';
8
+ // ── Repeated-failure escalation ──────────────────────────────────────────────
9
+ //
10
+ // When the LLM gets stuck calling a tool with the exact same (name, args) that
11
+ // keeps failing, some models loop until `maxIterations` is hit. To escape that
12
+ // trap, we inject a one-shot escalation message into the tool result content
13
+ // telling the LLM to change its approach. The escalation fires exactly once
14
+ // per (name, args) key — further identical failures are left alone, so we
15
+ // don't bloat tokens with repeated hectoring.
16
+ //
17
+ // Detection uses strict JSON parsing (not substring sniffing) so that a tool
18
+ // legitimately returning prose containing `"error":true` is not misclassified.
19
+ /**
20
+ * Default threshold for escalating repeated-identical-failure feedback.
21
+ * Override per-agent with `AgentBuilder.maxIdenticalFailures(n)`; pass `0` to
22
+ * disable escalation entirely.
23
+ */
24
+ export const REPEATED_FAILURE_ESCALATION_THRESHOLD = 3;
25
+ /**
26
+ * Stable JSON.stringify — keys sorted at every object level — so two calls
27
+ * with the same logical arguments but different key insertion order are
28
+ * treated as identical. Only handles plain JSON values (strings, numbers,
29
+ * booleans, nulls, arrays, plain objects), which matches the JSON-Schema
30
+ * shape of tool arguments.
31
+ */
32
+ export function stableStringify(value) {
33
+ if (value === null || value === undefined)
34
+ return JSON.stringify(value ?? null);
35
+ if (typeof value !== 'object')
36
+ return JSON.stringify(value);
37
+ if (Array.isArray(value)) {
38
+ return `[${value.map(stableStringify).join(',')}]`;
39
+ }
40
+ const obj = value;
41
+ const keys = Object.keys(obj).sort();
42
+ return `{${keys.map((k) => `${JSON.stringify(k)}:${stableStringify(obj[k])}`).join(',')}}`;
43
+ }
44
+ /**
45
+ * True iff the given message is a tool result that we wrote as an error — i.e.
46
+ * a top-level JSON object with `error === true`. Strict JSON parse: no
47
+ * substring sniffing, so tool content containing the literal phrase
48
+ * `"error":true` but not as a top-level field is not misclassified.
49
+ */
50
+ function isErrorToolMessage(m) {
51
+ if (m.role !== 'tool')
52
+ return false;
53
+ const content = typeof m.content === 'string' ? m.content : '';
54
+ const trimmed = content.trim();
55
+ if (!trimmed.startsWith('{'))
56
+ return false;
57
+ try {
58
+ const parsed = JSON.parse(trimmed);
59
+ return (typeof parsed === 'object' &&
60
+ parsed !== null &&
61
+ parsed.error === true);
62
+ }
63
+ catch {
64
+ return false;
65
+ }
66
+ }
67
+ /**
68
+ * Count prior tool-result messages in `messages` that match the given
69
+ * (toolName, argsJson) key AND represent an error.
70
+ *
71
+ * Cost: O(M × K) worst-case where M is messages.length and K is the average
72
+ * number of tool calls per assistant message. In practice K ≈ 1–3.
73
+ */
74
+ function scanPriorFailures(messages, toolName, argsJson) {
75
+ let failures = 0;
76
+ for (let i = 0; i < messages.length; i++) {
77
+ const m = messages[i];
78
+ if (m.role !== 'tool')
79
+ continue;
80
+ if (!isErrorToolMessage(m))
81
+ continue;
82
+ const toolCallId = m.toolCallId;
83
+ // Find the originating assistant tool call (nearest preceding assistant
84
+ // message that declares a tool call with this result's toolCallId).
85
+ let matchedCall;
86
+ for (let j = i - 1; j >= 0; j--) {
87
+ const prev = messages[j];
88
+ if (prev.role === 'assistant' && prev.toolCalls) {
89
+ matchedCall = prev.toolCalls.find((tc) => tc.id === toolCallId);
90
+ if (matchedCall)
91
+ break;
92
+ }
93
+ }
94
+ if (!matchedCall)
95
+ continue;
96
+ if (matchedCall.name !== toolName)
97
+ continue;
98
+ if (stableStringify(matchedCall.arguments ?? {}) !== argsJson)
99
+ continue;
100
+ failures++;
101
+ }
102
+ return { failures };
103
+ }
104
+ /**
105
+ * If the current call is a real error AND the (toolName, args) key has failed
106
+ * a multiple of `threshold` times (i.e. on the threshold-th, 2×threshold-th,
107
+ * 3×threshold-th … identical failure), inject an `escalation` field into
108
+ * the JSON result content.
109
+ *
110
+ * ## Why periodic, not one-shot
111
+ *
112
+ * A single escalation message early in the loop is easy for an LLM to skim
113
+ * past — especially when multiple parallel tool calls fail in the same
114
+ * turn. Firing periodically (every Nth identical failure) keeps nudging
115
+ * the LLM to change strategy while bounding token bloat to at most
116
+ * `maxIterations / threshold` escalations per key.
117
+ *
118
+ * Returns the possibly-enriched content. Pure — does not mutate inputs.
119
+ *
120
+ * Guarantees:
121
+ * - No false positives from substring matching (strict JSON parse).
122
+ * - Fires at every `N × threshold`-th failure, never between.
123
+ * - Stable under argument key reordering (uses `stableStringify`).
124
+ * - No-op when `threshold <= 0` (user-disabled).
125
+ * - No-op when `didError` is false OR content is non-JSON.
126
+ */
127
+ export function enrichIfRepeatedFailure(resultContent, toolCall, priorMessages, options) {
128
+ const { didError, threshold } = options;
129
+ if (!didError)
130
+ return resultContent;
131
+ if (!Number.isFinite(threshold) || threshold <= 0)
132
+ return resultContent;
133
+ // Must be well-formed JSON we can extend. If it isn't, we still could wrap
134
+ // it — but that changes public tool-result shape unexpectedly, so skip.
135
+ const trimmed = resultContent.trim();
136
+ if (!trimmed.startsWith('{'))
137
+ return resultContent;
138
+ let parsed;
139
+ try {
140
+ const raw = JSON.parse(trimmed);
141
+ if (typeof raw !== 'object' || raw === null)
142
+ return resultContent;
143
+ parsed = raw;
144
+ }
145
+ catch {
146
+ return resultContent;
147
+ }
148
+ const argsJson = stableStringify(toolCall.arguments ?? {});
149
+ const { failures } = scanPriorFailures(priorMessages, toolCall.name, argsJson);
150
+ const total = failures + 1;
151
+ // Fire on every Nth multiple of `threshold` — total in {threshold,
152
+ // 2*threshold, 3*threshold, ...}. Below threshold, or between multiples,
153
+ // return the bare error content. The LLM gets a fresh escalation nudge
154
+ // periodically without flooding the context.
155
+ if (total < threshold)
156
+ return resultContent;
157
+ if (total % threshold !== 0)
158
+ return resultContent;
159
+ parsed.repeatedFailures = total;
160
+ parsed.escalation =
161
+ `STOP — this call to '${toolCall.name}' with these EXACT arguments has now failed ${total} times in a row. ` +
162
+ `Retrying with the same arguments will fail again. You MUST change course: ` +
163
+ `(1) call '${toolCall.name}' with DIFFERENT arguments (see expectedSchema above), ` +
164
+ `(2) use a different tool, or ` +
165
+ `(3) stop calling tools and reply with a plain text final answer.`;
166
+ return JSON.stringify(parsed);
167
+ }
8
168
  /**
9
169
  * Normalize an LLMResponse into an AdapterResult discriminated union.
10
170
  */
@@ -25,11 +185,38 @@ export function normalizeAdapterResponse(response) {
25
185
  model: response.model,
26
186
  };
27
187
  }
28
- export async function executeToolCalls(toolCalls, registry, messages, toolProvider, signal, instructionConfig, decision) {
188
+ export async function executeToolCalls(toolCalls, registry, messages, toolProvider, signal, instructionConfig, decision, options) {
29
189
  // Single copy upfront — O(M+N) instead of O(M*N) from repeated spreads
30
190
  const result = [...messages];
31
191
  let askHumanPause;
32
192
  const onStreamEvent = instructionConfig?.onStreamEvent;
193
+ const escalationThreshold = options?.maxIdenticalFailures ?? REPEATED_FAILURE_ESCALATION_THRESHOLD;
194
+ // Parallel mode: run per-tool work concurrently, collect tool result messages in
195
+ // original order, surface the first ask_human pause (if any). Decide() mutations
196
+ // to the shared `decision` object are NOT serialized — parallel tools should not
197
+ // rely on strict decide ordering. Sequential mode (default) preserves prior semantics.
198
+ //
199
+ // Escalation caveat: prior-failure scanning runs against `result` at the moment
200
+ // each enrichment call is made, which in parallel mode means earlier tool calls
201
+ // in the same batch (by LLM order, not wall-clock order) count as "prior" for
202
+ // later ones. That's acceptable — what matters for the LLM's next turn is the
203
+ // aggregate signal that identical calls keep failing, not the fine-grained
204
+ // concurrency semantics inside one batch.
205
+ if (options?.parallel && toolCalls.length > 1) {
206
+ const perTool = await Promise.all(toolCalls.map((toolCall) => executeOneToolCall(toolCall, registry, toolProvider, signal, instructionConfig, decision, onStreamEvent)));
207
+ for (let i = 0; i < perTool.length; i++) {
208
+ const { resultMessage, askHumanMarker, didError } = perTool[i];
209
+ const originalContent = typeof resultMessage.content === 'string' ? resultMessage.content : '';
210
+ const enriched = enrichIfRepeatedFailure(originalContent, toolCalls[i], result, {
211
+ didError,
212
+ threshold: escalationThreshold,
213
+ });
214
+ result.push(enriched === originalContent ? resultMessage : { ...resultMessage, content: enriched });
215
+ if (!askHumanPause && askHumanMarker)
216
+ askHumanPause = askHumanMarker;
217
+ }
218
+ return { messages: result, askHumanPause };
219
+ }
33
220
  for (const toolCall of toolCalls) {
34
221
  let resultContent;
35
222
  let runtimeInstructions;
@@ -76,8 +263,23 @@ export async function executeToolCalls(toolCalls, registry, messages, toolProvid
76
263
  code: 'INVALID_INPUT',
77
264
  message: `Invalid arguments for '${tool.id}': ${formatValidationErrors(validation.errors)}`,
78
265
  };
79
- resultContent = JSON.stringify({ error: true, message: errorInfo.message });
80
- result.push(toolResultMessage(resultContent, toolCall.id));
266
+ // Include the expected schema so the LLM has a concrete structural
267
+ // target to conform to on retry — addresses the most common cause
268
+ // of LLMs looping on validation errors (they can't see the schema
269
+ // from the error message alone).
270
+ resultContent = JSON.stringify({
271
+ error: true,
272
+ message: errorInfo.message,
273
+ expectedSchema: tool.inputSchema,
274
+ receivedArguments: toolArgs,
275
+ });
276
+ // Repeated-failure escalation also applies to invalid-input failures —
277
+ // that's the primary symptom this catches. Fall through to the normal
278
+ // emit/push path (no early `continue`) so enrichment runs.
279
+ result.push(toolResultMessage(enrichIfRepeatedFailure(resultContent, toolCall, result, {
280
+ didError: true,
281
+ threshold: escalationThreshold,
282
+ }), toolCall.id));
81
283
  continue;
82
284
  }
83
285
  }
@@ -154,6 +356,16 @@ export async function executeToolCalls(toolCalls, registry, messages, toolProvid
154
356
  }
155
357
  }
156
358
  }
359
+ // Enrich repeated identical failures with escalation text BEFORE emitting
360
+ // tool_end and pushing the message — so both the stream consumer and the
361
+ // LLM's next turn see the stronger feedback. Driven by the explicit
362
+ // `didError` signal (not substring sniffing of the result content), so
363
+ // tool handlers that legitimately include the phrase "error":true in their
364
+ // content are not misclassified.
365
+ resultContent = enrichIfRepeatedFailure(resultContent, toolCall, result, {
366
+ didError: errorInfo !== undefined,
367
+ threshold: escalationThreshold,
368
+ });
157
369
  onStreamEvent?.({
158
370
  type: 'tool_end',
159
371
  toolName: toolCall.name,
@@ -166,4 +378,150 @@ export async function executeToolCalls(toolCalls, registry, messages, toolProvid
166
378
  }
167
379
  return { messages: result, askHumanPause };
168
380
  }
381
+ /**
382
+ * Execute a single tool call and return its result message + optional pause marker.
383
+ * Pure in the sense of side-effect-on-messages — does not mutate any shared array.
384
+ * DOES mutate `decision` via decide() functions when instructions fire (shared by design).
385
+ *
386
+ * Used by executeToolCalls in parallel mode so multiple tool calls can run concurrently
387
+ * while the caller appends results in toolCall order.
388
+ */
389
+ async function executeOneToolCall(toolCall, registry, toolProvider, signal, instructionConfig, decision, onStreamEvent) {
390
+ let resultContent;
391
+ let runtimeInstructions;
392
+ let runtimeFollowUps;
393
+ let errorInfo;
394
+ let askHumanMarker;
395
+ const startMs = Date.now();
396
+ onStreamEvent?.({
397
+ type: 'tool_start',
398
+ toolName: toolCall.name,
399
+ toolCallId: toolCall.id,
400
+ args: (toolCall.arguments ?? {}),
401
+ });
402
+ // Try ToolProvider.execute() first (handles remote tools, gated tools, etc.)
403
+ // Skip ToolProvider for ask_human — it must run locally (uses Symbol marker for pause detection).
404
+ if (toolProvider?.execute && toolCall.name !== 'ask_human') {
405
+ try {
406
+ const execResult = await toolProvider.execute(toolCall, signal);
407
+ resultContent = execResult.content;
408
+ }
409
+ catch (err) {
410
+ const msg = err instanceof Error ? err.message : String(err);
411
+ errorInfo = { message: msg };
412
+ resultContent = JSON.stringify({ error: true, message: msg });
413
+ }
414
+ }
415
+ else {
416
+ const tool = registry.get(toolCall.name);
417
+ if (!tool) {
418
+ const safeName = String(toolCall.name)
419
+ .slice(0, 100)
420
+ .replace(/[\n\r]/g, '');
421
+ errorInfo = { code: 'NOT_FOUND', message: `Tool '${safeName}' not found` };
422
+ resultContent = JSON.stringify({ error: true, message: errorInfo.message });
423
+ }
424
+ else {
425
+ const toolArgs = (toolCall.arguments ?? {});
426
+ if (tool.inputSchema && Object.keys(tool.inputSchema).length > 0) {
427
+ const validation = validateToolInput(toolArgs, tool.inputSchema);
428
+ if (!validation.valid) {
429
+ errorInfo = {
430
+ code: 'INVALID_INPUT',
431
+ message: `Invalid arguments for '${tool.id}': ${formatValidationErrors(validation.errors)}`,
432
+ };
433
+ // Include the expected schema + what the LLM actually sent so it can
434
+ // self-correct on retry (the narrow error message alone is often
435
+ // not enough for the LLM to reconstruct the required shape).
436
+ resultContent = JSON.stringify({
437
+ error: true,
438
+ message: errorInfo.message,
439
+ expectedSchema: tool.inputSchema,
440
+ receivedArguments: toolArgs,
441
+ });
442
+ return {
443
+ resultMessage: toolResultMessage(resultContent, toolCall.id),
444
+ didError: true,
445
+ askHumanMarker: undefined,
446
+ };
447
+ }
448
+ }
449
+ try {
450
+ const execResult = await tool.handler(toolArgs);
451
+ resultContent = execResult.content;
452
+ if (isAskHumanResult(execResult)) {
453
+ askHumanMarker = { question: execResult.question, toolCallId: toolCall.id };
454
+ }
455
+ const instructed = execResult;
456
+ runtimeInstructions = instructed.instructions;
457
+ runtimeFollowUps = instructed.followUps;
458
+ }
459
+ catch (err) {
460
+ const msg = err instanceof Error ? err.message : String(err);
461
+ errorInfo = { message: msg };
462
+ resultContent = JSON.stringify({ error: true, message: msg });
463
+ }
464
+ }
465
+ }
466
+ const toolExecLatencyMs = Date.now() - startMs;
467
+ if (instructionConfig) {
468
+ const perToolInstructions = instructionConfig.instructionsByToolId.get(toolCall.name);
469
+ const agentRules = instructionConfig.agentResponseRules;
470
+ const buildTimeInstructions = agentRules?.length
471
+ ? [...agentRules, ...(perToolInstructions ?? [])]
472
+ : perToolInstructions;
473
+ const hasInstructions = buildTimeInstructions?.length || runtimeInstructions?.length || runtimeFollowUps?.length;
474
+ if (hasInstructions) {
475
+ let parsedContent;
476
+ try {
477
+ parsedContent = JSON.parse(resultContent);
478
+ }
479
+ catch {
480
+ parsedContent = resultContent;
481
+ }
482
+ const ctx = {
483
+ content: parsedContent,
484
+ error: errorInfo,
485
+ latencyMs: toolExecLatencyMs,
486
+ input: toolCall.arguments,
487
+ toolId: toolCall.name,
488
+ };
489
+ const injectionResult = processInstructions(resultContent, buildTimeInstructions, ctx, runtimeInstructions || runtimeFollowUps
490
+ ? { instructions: runtimeInstructions, followUps: runtimeFollowUps }
491
+ : undefined, instructionConfig?.template);
492
+ if (injectionResult.injected) {
493
+ resultContent = injectionResult.content;
494
+ }
495
+ if (injectionResult.fired.length > 0 && instructionConfig?.onInstructionsFired) {
496
+ instructionConfig.onInstructionsFired(toolCall.name, injectionResult.fired);
497
+ }
498
+ if (decision && instructionConfig?.decideFunctions?.size) {
499
+ for (const fired of injectionResult.fired) {
500
+ const decideFn = instructionConfig.decideFunctions.get(fired.id);
501
+ if (decideFn) {
502
+ try {
503
+ decideFn(decision, ctx);
504
+ }
505
+ catch {
506
+ // decide errors are fail-open — don't crash tool execution
507
+ }
508
+ }
509
+ }
510
+ }
511
+ }
512
+ }
513
+ onStreamEvent?.({
514
+ type: 'tool_end',
515
+ toolName: toolCall.name,
516
+ toolCallId: toolCall.id,
517
+ result: resultContent,
518
+ error: !!errorInfo,
519
+ latencyMs: toolExecLatencyMs,
520
+ });
521
+ return {
522
+ resultMessage: toolResultMessage(resultContent, toolCall.id),
523
+ didError: errorInfo !== undefined,
524
+ askHumanMarker,
525
+ };
526
+ }
169
527
  //# sourceMappingURL=helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../src/lib/call/helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../src/lib/call/helpers.ts"],"names":[],"mappings":"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"}
@@ -35,10 +35,19 @@ export function parseResponseStage(scope) {
35
35
  const messages = scope.messages ?? [];
36
36
  const asstMsg = assistantMessage(result.content, result.type === 'tools' ? result.toolCalls : undefined);
37
37
  scope.messages = appendMessage(messages, asstMsg);
38
- // Write summary for narrative visibility
38
+ // Write summary for narrative visibility — include arguments so debuggers
39
+ // can see at a glance whether the LLM passed required fields. Names alone
40
+ // hide the common failure mode of retrying with empty / wrong args.
39
41
  if (parsed.hasToolCalls) {
40
- const toolNames = parsed.toolCalls.map((tc) => tc.name).join(', ');
41
- scope.responseType = `tool_calls: [${toolNames}]`;
42
+ const signatures = parsed.toolCalls
43
+ .map((tc) => {
44
+ const argsStr = JSON.stringify(tc.arguments ?? {});
45
+ // Tight cap — narrative line, not a full dump
46
+ const truncated = argsStr.length > 120 ? argsStr.slice(0, 117) + '...' : argsStr;
47
+ return `${tc.name}(${truncated})`;
48
+ })
49
+ .join(', ');
50
+ scope.responseType = `tool_calls: [${signatures}]`;
42
51
  }
43
52
  else {
44
53
  const preview = result.content.length > 80 ? result.content.slice(0, 80) + '...' : result.content;
@@ -1 +1 @@
1
- {"version":3,"file":"parseResponseStage.js","sourceRoot":"","sources":["../../../../src/lib/call/parseResponseStage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAiC;IAClE,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC;IAEnC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,qBAAqB,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,MAAM,GAAG;QACb,YAAY,EAAE,MAAM,CAAC,IAAI,KAAK,OAAO;QACrC,SAAS,EAAE,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;QAC1D,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC;IAEF,KAAK,CAAC,cAAc,GAAG,MAAM,CAAC;IAE9B,2CAA2C;IAC3C,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;IACtC,MAAM,OAAO,GAAG,gBAAgB,CAC9B,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CACvD,CAAC;IACF,KAAK,CAAC,QAAQ,GAAG,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAElD,yCAAyC;IACzC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnE,KAAK,CAAC,YAAY,GAAG,gBAAgB,SAAS,GAAG,CAAC;IACpD,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,GACX,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QACpF,KAAK,CAAC,YAAY,GAAG,WAAW,OAAO,GAAG,CAAC;IAC7C,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"parseResponseStage.js","sourceRoot":"","sources":["../../../../src/lib/call/parseResponseStage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAiC;IAClE,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC;IAEnC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,qBAAqB,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,MAAM,GAAG;QACb,YAAY,EAAE,MAAM,CAAC,IAAI,KAAK,OAAO;QACrC,SAAS,EAAE,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;QAC1D,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC;IAEF,KAAK,CAAC,cAAc,GAAG,MAAM,CAAC;IAE9B,2CAA2C;IAC3C,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;IACtC,MAAM,OAAO,GAAG,gBAAgB,CAC9B,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CACvD,CAAC;IACF,KAAK,CAAC,QAAQ,GAAG,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAElD,0EAA0E;IAC1E,0EAA0E;IAC1E,oEAAoE;IACpE,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS;aAChC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;YACV,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;YACnD,8CAA8C;YAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;YACjF,OAAO,GAAG,EAAE,CAAC,IAAI,IAAI,SAAS,GAAG,CAAC;QACpC,CAAC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,KAAK,CAAC,YAAY,GAAG,gBAAgB,UAAU,GAAG,CAAC;IACrD,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,GACX,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QACpF,KAAK,CAAC,YAAY,GAAG,WAAW,OAAO,GAAG,CAAC;IAC7C,CAAC;AACH,CAAC"}
@@ -30,6 +30,24 @@ export function createStreamingCallLLMStage(provider, optionsOrHandler) {
30
30
  const iteration = (scope.loopCount ?? 0) + 1;
31
31
  const startMs = Date.now();
32
32
  onStreamEvent?.({ type: 'llm_start', iteration });
33
+ // ── Emit: request-side ─────────────────────────────────────────────
34
+ // Mirror of callLLMStage.ts — surface the EXACT shape being sent so
35
+ // attached EmitRecorders (including CombinedNarrativeRecorder) render
36
+ // it inline under the CallLLM stage. Critical for debugging stuck
37
+ // patterns like "LLM returns empty args every turn".
38
+ scope.$emit('agentfootprint.llm.request', {
39
+ iteration,
40
+ messageCount: messages.length,
41
+ messageRoles: messages.map((m) => m.role),
42
+ toolCount: tools.length,
43
+ toolNames: tools.map((t) => t.name),
44
+ toolsWithRequired: tools.map((t) => ({
45
+ name: t.name,
46
+ description: t.description,
47
+ required: t.inputSchema?.required ?? [],
48
+ })),
49
+ hasResponseFormat: !!responseFormat,
50
+ });
33
51
  // If streaming is available and callback is injected, use chatStream
34
52
  if (streamCallback && provider.chatStream) {
35
53
  const contentParts = [];
@@ -76,6 +94,18 @@ export function createStreamingCallLLMStage(provider, optionsOrHandler) {
76
94
  };
77
95
  scope.adapterRawResponse = response;
78
96
  scope.adapterResult = normalizeAdapterResponse(response);
97
+ scope.$emit('agentfootprint.llm.response', {
98
+ iteration,
99
+ model: response.model,
100
+ stopReason: response.finishReason,
101
+ usage: response.usage,
102
+ content: response.content,
103
+ toolCalls: (response.toolCalls ?? []).map((tc) => ({
104
+ name: tc.name,
105
+ arguments: tc.arguments,
106
+ })),
107
+ latencyMs: Date.now() - startMs,
108
+ });
79
109
  onStreamEvent?.({
80
110
  type: 'llm_end',
81
111
  iteration,
@@ -90,6 +120,18 @@ export function createStreamingCallLLMStage(provider, optionsOrHandler) {
90
120
  const response = await provider.chat(messages, options);
91
121
  scope.adapterRawResponse = response;
92
122
  scope.adapterResult = normalizeAdapterResponse(response);
123
+ scope.$emit('agentfootprint.llm.response', {
124
+ iteration,
125
+ model: response.model,
126
+ stopReason: response.finishReason,
127
+ usage: response.usage,
128
+ content: response.content,
129
+ toolCalls: (response.toolCalls ?? []).map((tc) => ({
130
+ name: tc.name,
131
+ arguments: tc.arguments,
132
+ })),
133
+ latencyMs: Date.now() - startMs,
134
+ });
93
135
  onStreamEvent?.({
94
136
  type: 'llm_end',
95
137
  iteration,
@@ -1 +1 @@
1
- {"version":3,"file":"streamingCallLLMStage.js","sourceRoot":"","sources":["../../../../src/lib/call/streamingCallLLMStage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"streamingCallLLMStage.js","sourceRoot":"","sources":["../../../../src/lib/call/streamingCallLLMStage.ts"],"names":[],"mappings":"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"}
@@ -24,7 +24,7 @@ import { executeToolCalls } from './helpers';
24
24
  * loopCount) is mapped.
25
25
  */
26
26
  export function buildToolExecutionSubflow(config) {
27
- const { registry, toolProvider, instructionConfig } = config;
27
+ const { registry, toolProvider, instructionConfig, parallel, maxIdenticalFailures } = config;
28
28
  const executeStageFn = async (scope) => {
29
29
  const parsed = scope.parsedResponse;
30
30
  const loopCount = scope.currentLoopCount ?? 0;
@@ -50,7 +50,10 @@ export function buildToolExecutionSubflow(config) {
50
50
  : instructionConfig?.decideFunctions?.size
51
51
  ? {}
52
52
  : undefined;
53
- const { messages: resultMessages, askHumanPause } = await executeToolCalls(parsed.toolCalls, registry, messages, toolProvider, signal, instructionConfig, decisionRef);
53
+ const { messages: resultMessages, askHumanPause } = await executeToolCalls(parsed.toolCalls, registry, messages, toolProvider, signal, instructionConfig, decisionRef, {
54
+ ...(parallel ? { parallel: true } : {}),
55
+ ...(maxIdenticalFailures !== undefined ? { maxIdenticalFailures } : {}),
56
+ });
54
57
  // Output DELTA only — footprintjs applyOutputMapping concatenates arrays,
55
58
  // so the parent's outputMapper maps this to `messages` and concat appends correctly.
56
59
  scope.toolResultMessages = resultMessages.slice(messages.length);
@@ -1 +1 @@
1
- {"version":3,"file":"toolExecutionSubflow.js","sourceRoot":"","sources":["../../../../src/lib/call/toolExecutionSubflow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"toolExecutionSubflow.js","sourceRoot":"","sources":["../../../../src/lib/call/toolExecutionSubflow.ts"],"names":[],"mappings":"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"}