@superdurable/dex-agents 0.4.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. package/README.md +616 -55
  2. package/dist/src/agent-approval-display.d.ts +135 -0
  3. package/dist/src/agent-approval-display.js +536 -0
  4. package/dist/src/agent-approval-display.js.map +1 -0
  5. package/dist/src/agent-context-compaction.d.ts +1 -1
  6. package/dist/src/agent-framework-runner.d.ts +160 -12
  7. package/dist/src/agent-framework-runner.js +4 -0
  8. package/dist/src/agent-framework-runner.js.map +1 -1
  9. package/dist/src/agent-local-directory-media-store.d.ts +111 -0
  10. package/dist/src/agent-local-directory-media-store.js +417 -0
  11. package/dist/src/agent-local-directory-media-store.js.map +1 -0
  12. package/dist/src/agent-media.d.ts +279 -0
  13. package/dist/src/agent-media.js +457 -0
  14. package/dist/src/agent-media.js.map +1 -0
  15. package/dist/src/agent-session-codecs.d.ts +5 -1
  16. package/dist/src/agent-session-codecs.js +76 -4
  17. package/dist/src/agent-session-codecs.js.map +1 -1
  18. package/dist/src/agent-session-failure.d.ts +4 -2
  19. package/dist/src/agent-session-failure.js +6 -2
  20. package/dist/src/agent-session-failure.js.map +1 -1
  21. package/dist/src/agent-session-flow-graph.d.ts +46 -0
  22. package/dist/src/agent-session-flow-graph.js +51 -0
  23. package/dist/src/agent-session-flow-graph.js.map +1 -1
  24. package/dist/src/agent-session-flow.d.ts +28 -3
  25. package/dist/src/agent-session-flow.js +21 -1
  26. package/dist/src/agent-session-flow.js.map +1 -1
  27. package/dist/src/agent-session-persistence.d.ts +33 -0
  28. package/dist/src/agent-session-persistence.js +22 -1
  29. package/dist/src/agent-session-persistence.js.map +1 -1
  30. package/dist/src/agent-session-start.d.ts +1 -1
  31. package/dist/src/agent-session-start.js +2 -2
  32. package/dist/src/agent-session-start.js.map +1 -1
  33. package/dist/src/agent-session-steps.d.ts +2 -0
  34. package/dist/src/agent-session-steps.js +74 -5
  35. package/dist/src/agent-session-steps.js.map +1 -1
  36. package/dist/src/agent-session-summary.d.ts +138 -0
  37. package/dist/src/agent-session-summary.js +151 -0
  38. package/dist/src/agent-session-summary.js.map +1 -0
  39. package/dist/src/agent-session-tracer.js +1 -1
  40. package/dist/src/agent-session-tracer.js.map +1 -1
  41. package/dist/src/agent-session-transitions.d.ts +11 -3
  42. package/dist/src/agent-session-transitions.js +58 -6
  43. package/dist/src/agent-session-transitions.js.map +1 -1
  44. package/dist/src/agent-session-values.d.ts +179 -2
  45. package/dist/src/agent-session-values.js.map +1 -1
  46. package/dist/src/agent-session-wait-steps.js +14 -2
  47. package/dist/src/agent-session-wait-steps.js.map +1 -1
  48. package/dist/src/ai-sdk/ai-sdk-model-client.d.ts +15 -3
  49. package/dist/src/ai-sdk/ai-sdk-model-client.js +36 -7
  50. package/dist/src/ai-sdk/ai-sdk-model-client.js.map +1 -1
  51. package/dist/src/ai-sdk/index.d.ts +1 -1
  52. package/dist/src/ai-sdk/index.js +1 -1
  53. package/dist/src/ai-sdk/index.js.map +1 -1
  54. package/dist/src/{stepwise → builtin-loop}/agent-definition.d.ts +120 -5
  55. package/dist/src/builtin-loop/agent-definition.js.map +1 -0
  56. package/dist/src/builtin-loop/builtin-agent-session-flow.d.ts +77 -0
  57. package/dist/src/{stepwise/stepwise-agent-session-flow.js → builtin-loop/builtin-agent-session-flow.js} +19 -9
  58. package/dist/src/builtin-loop/builtin-agent-session-flow.js.map +1 -0
  59. package/dist/src/{stepwise/stepwise-agent-runner.d.ts → builtin-loop/builtin-loop-agent-runner.d.ts} +72 -14
  60. package/dist/src/{stepwise/stepwise-agent-runner.js → builtin-loop/builtin-loop-agent-runner.js} +284 -41
  61. package/dist/src/builtin-loop/builtin-loop-agent-runner.js.map +1 -0
  62. package/dist/src/{stepwise/stepwise-input-items.d.ts → builtin-loop/builtin-loop-input-items.d.ts} +7 -3
  63. package/dist/src/{stepwise/stepwise-input-items.js → builtin-loop/builtin-loop-input-items.js} +57 -10
  64. package/dist/src/builtin-loop/builtin-loop-input-items.js.map +1 -0
  65. package/dist/src/builtin-loop/function-tool.d.ts +282 -0
  66. package/dist/src/{stepwise → builtin-loop}/function-tool.js +63 -3
  67. package/dist/src/builtin-loop/function-tool.js.map +1 -0
  68. package/dist/src/builtin-loop/index.d.ts +8 -0
  69. package/dist/src/builtin-loop/index.js +13 -0
  70. package/dist/src/builtin-loop/index.js.map +1 -0
  71. package/dist/src/builtin-loop/json-schema-validation.js.map +1 -0
  72. package/dist/src/{stepwise → builtin-loop}/model-client.d.ts +36 -7
  73. package/dist/src/builtin-loop/model-client.js.map +1 -0
  74. package/dist/src/{stepwise → builtin-loop}/scripted-model-client.d.ts +8 -5
  75. package/dist/src/{stepwise → builtin-loop}/scripted-model-client.js +8 -5
  76. package/dist/src/builtin-loop/scripted-model-client.js.map +1 -0
  77. package/dist/src/{stepwise → builtin-loop}/tool-source.d.ts +2 -2
  78. package/dist/src/builtin-loop/tool-source.js.map +1 -0
  79. package/dist/src/connectors/connector-input-schema.js +1 -1
  80. package/dist/src/connectors/connector-input-schema.js.map +1 -1
  81. package/dist/src/connectors/connector-step-context.d.ts +19 -2
  82. package/dist/src/connectors/connector-step-context.js +61 -5
  83. package/dist/src/connectors/connector-step-context.js.map +1 -1
  84. package/dist/src/connectors/connector-tool-source.d.ts +63 -14
  85. package/dist/src/connectors/connector-tool-source.js +124 -25
  86. package/dist/src/connectors/connector-tool-source.js.map +1 -1
  87. package/dist/src/index.d.ts +8 -4
  88. package/dist/src/index.js +5 -1
  89. package/dist/src/index.js.map +1 -1
  90. package/dist/src/mcp/index.d.ts +1 -0
  91. package/dist/src/mcp/index.js +1 -0
  92. package/dist/src/mcp/index.js.map +1 -1
  93. package/dist/src/mcp/mcp-dex-conventions.d.ts +57 -0
  94. package/dist/src/mcp/mcp-dex-conventions.js +90 -0
  95. package/dist/src/mcp/mcp-dex-conventions.js.map +1 -0
  96. package/dist/src/mcp/mcp-image-content.d.ts +20 -0
  97. package/dist/src/mcp/mcp-image-content.js +82 -0
  98. package/dist/src/mcp/mcp-image-content.js.map +1 -0
  99. package/dist/src/mcp/mcp-tool-source.d.ts +205 -18
  100. package/dist/src/mcp/mcp-tool-source.js +289 -47
  101. package/dist/src/mcp/mcp-tool-source.js.map +1 -1
  102. package/dist/src/s3/index.d.ts +1 -0
  103. package/dist/src/s3/index.js +9 -0
  104. package/dist/src/s3/index.js.map +1 -0
  105. package/dist/src/s3/s3-media-store.d.ts +138 -0
  106. package/dist/src/s3/s3-media-store.js +255 -0
  107. package/dist/src/s3/s3-media-store.js.map +1 -0
  108. package/dist/src/stepwise/index.d.ts +41 -8
  109. package/dist/src/stepwise/index.js +35 -5
  110. package/dist/src/stepwise/index.js.map +1 -1
  111. package/dist/src/testing/agent-session-test-client.d.ts +6 -3
  112. package/dist/src/testing/agent-session-test-client.js +10 -3
  113. package/dist/src/testing/agent-session-test-client.js.map +1 -1
  114. package/dist/src/testing/private-dex-engine.d.ts +8 -0
  115. package/dist/src/testing/private-dex-engine.js +17 -1
  116. package/dist/src/testing/private-dex-engine.js.map +1 -1
  117. package/dist/src/testing/scripted-model-client.d.ts +1 -1
  118. package/dist/src/testing/scripted-model-client.js +2 -2
  119. package/dist/src/testing/scripted-model-client.js.map +1 -1
  120. package/dist/src/tool-source-router.d.ts +3 -3
  121. package/dist/src/tool-source-router.js +2 -2
  122. package/dist/src/ui-stream/agent-event-json.d.ts +2 -1
  123. package/dist/src/ui-stream/agent-event-json.js +3 -1
  124. package/dist/src/ui-stream/agent-event-json.js.map +1 -1
  125. package/dist/src/ui-stream/agent-ui-messages.d.ts +11 -3
  126. package/dist/src/ui-stream/agent-ui-messages.js +29 -5
  127. package/dist/src/ui-stream/agent-ui-messages.js.map +1 -1
  128. package/package.json +17 -4
  129. package/dist/src/stepwise/agent-definition.js.map +0 -1
  130. package/dist/src/stepwise/function-tool.d.ts +0 -130
  131. package/dist/src/stepwise/function-tool.js.map +0 -1
  132. package/dist/src/stepwise/json-schema-validation.js.map +0 -1
  133. package/dist/src/stepwise/model-client.js.map +0 -1
  134. package/dist/src/stepwise/scripted-model-client.js.map +0 -1
  135. package/dist/src/stepwise/stepwise-agent-runner.js.map +0 -1
  136. package/dist/src/stepwise/stepwise-agent-session-flow.d.ts +0 -35
  137. package/dist/src/stepwise/stepwise-agent-session-flow.js.map +0 -1
  138. package/dist/src/stepwise/stepwise-input-items.js.map +0 -1
  139. package/dist/src/stepwise/tool-source.js.map +0 -1
  140. /package/dist/src/{stepwise → builtin-loop}/agent-definition.js +0 -0
  141. /package/dist/src/{stepwise → builtin-loop}/json-schema-validation.d.ts +0 -0
  142. /package/dist/src/{stepwise → builtin-loop}/json-schema-validation.js +0 -0
  143. /package/dist/src/{stepwise → builtin-loop}/model-client.js +0 -0
  144. /package/dist/src/{stepwise → builtin-loop}/tool-source.js +0 -0
@@ -9,10 +9,12 @@ import { builtInToolDefinitions } from "../agent-built-in-tools.js";
9
9
  import { buildContextSummaryNote, buildContextSummaryOmissionNote, contextSummaryInstructions, contextSummaryRequest, } from "../agent-context-compaction.js";
10
10
  export { buildContextSummaryNote, buildContextSummaryOmissionNote, contextSummaryInstructions, contextSummaryNoteHeader, contextSummaryRequest, } from "../agent-context-compaction.js";
11
11
  import { ToolExecutionError, } from "../agent-framework-runner.js";
12
+ import { loadImages } from "../agent-media.js";
12
13
  import { buildPlanNote } from "../agent-plans.js";
13
- import { describeToolCallOutcome, } from "../agent-session-values.js";
14
+ import { describeToolCallOutcome, emptyAgentUsage, } from "../agent-session-values.js";
15
+ import { isFunctionToolResult } from "./function-tool.js";
14
16
  import { findJsonSchemaViolation, serializeJsonWithSpacedSeparators } from "./json-schema-validation.js";
15
- import { pairToolCallsWithResults, readStoredModelInputItem, toStepwiseFrameworkMessage, } from "./stepwise-input-items.js";
17
+ import { pairToolCallsWithResults, readStoredModelInputItem, toBuiltinLoopFrameworkMessage, } from "./builtin-loop-input-items.js";
16
18
  import { ToolSourceRouter, defaultToolSourceListingTimeoutMs, readToolSourceEnvelope as readRouterToolSourceEnvelope, writeToolSourceEnvelope as writeRouterToolSourceEnvelope, } from "../tool-source-router.js";
17
19
  export { defaultToolSourceListingTimeoutMs } from "../tool-source-router.js";
18
20
  // The runner's envelope around a source's toolSourceReference: the building source's name.
@@ -20,19 +22,34 @@ const toolSourceNameKey = "stepwise_tool_source";
20
22
  // An unlisted name never reaches a source, so it fails without asking anyone to approve it.
21
23
  const unlistedSourceToolPolicy = { effect: "unclassified", requiresApproval: false };
22
24
  export const defaultMaxModelCallsPerTurn = 100;
25
+ /**
26
+ * How many {@link ContinueTurn} results of {@link AgentDefinition.decideTurnContinuation} may follow answers without
27
+ * tool calls in a row. A model response with tool calls resets the count.
28
+ * @since 0.5.0
29
+ */
30
+ export const maxConsecutiveTurnContinuations = 8;
23
31
  /** Result of a tool call the model made after the turn's model call limit; the same text as the Python core. */
24
32
  export function buildToolCallLimitReachedResult(maxModelCallsPerTurn) {
25
33
  return `The tool call was not run: this turn reached its limit of ${maxModelCallsPerTurn} model calls.`;
26
34
  }
35
+ /**
36
+ * The `lastTurnError` of a turn whose `decideTurnContinuation` returned a {@link ContinueTurn} once too often in a
37
+ * row; the same text as the Python core.
38
+ * @param limit - {@link maxConsecutiveTurnContinuations}.
39
+ * @returns The error text.
40
+ */
41
+ export function buildTurnContinuationLimitError(limit) {
42
+ return `the turn reached its limit of ${limit} consecutive continuations without a tool call`;
43
+ }
27
44
  // The summary is not the assistant's answer, so its live text goes nowhere.
28
45
  const discardedModelOutput = {
29
46
  writeTextDelta: () => undefined,
30
47
  writeReasoningDelta: () => undefined,
31
48
  };
32
49
  /**
33
- * The {@link AgentFrameworkRunner} of the built-in Stepwise loop.
50
+ * The {@link AgentFrameworkRunner} of the built-in agent loop.
34
51
  *
35
- * {@link createStepwiseAgentSessionFlow} creates one; construct it directly only to pass it to
52
+ * {@link createBuiltinAgentSessionFlow} creates one; construct it directly only to pass it to
36
53
  * `createAgentSessionFlow` with options of your own. Each `RunModel` makes at most one model call
37
54
  * through {@link AgentDefinition.model}, from committed state only: the stored messages, the results
38
55
  * of the previous model response from the turn's final records, and the instructions. The runner
@@ -44,13 +61,27 @@ const discardedModelOutput = {
44
61
  * tasks. Its {@link cancelToolTask} passes a task that `cancel_turn` abandoned to that source's optional
45
62
  * `cancelToolTask`.
46
63
  *
64
+ * With a media store, the runner shows images to the model. It then has `buildUserMessageWithImages` of
65
+ * {@link AgentFrameworkRunner}, as an own property, so `send_user_message` accepts images: the stored `user_text` item keeps their references after the text. A tool
66
+ * result item keeps the references of `AgentToolCall.images`. Before each model call, the runner reads the bytes of
67
+ * every image in the request with `loadImages` and passes them in `ModelRequest.imageBytes`; the model client
68
+ * converts each image to the provider's image part. A failed read fails that `RunModel` attempt, which retries. The
69
+ * model call that writes a context summary sees the text of the items only. Without a store the session refuses
70
+ * user images, and a tool source result's images are stored but not shown to the model. A function tool's images fail
71
+ * the call instead, without a retry. The class declares neither member, so a subclass may still define its own
72
+ * `buildUserMessageWithImages` or `mediaStore`; a subclass method stays in use with a store.
73
+ *
47
74
  * @example
48
75
  * ```ts
49
- * const runner = new StepwiseAgentRunner(definition);
76
+ * const runner = new BuiltinLoopAgentRunner(definition);
50
77
  * const flow = createAgentSessionFlow(runner, "SupportAgent", { builtInTools: ["ask_user"] });
51
78
  * ```
79
+ *
80
+ * It replaces `StepwiseAgentRunner`, which `@superdurable/dex-agents/stepwise` keeps as a deprecated alias.
81
+ *
82
+ * @since 0.5.0
52
83
  */
53
- export class StepwiseAgentRunner {
84
+ export class BuiltinLoopAgentRunner {
54
85
  /** The agent definition, frozen at construction. */
55
86
  definition;
56
87
  /** The runner honors {@link AgentTurnContext.interactionMode}, so plan mode can be enabled. */
@@ -58,16 +89,27 @@ export class StepwiseAgentRunner {
58
89
  functionToolsByName;
59
90
  toolSources;
60
91
  maxModelCallsPerTurn;
92
+ // An ES private field, so it never collides with a subclass member.
93
+ #mediaStore;
61
94
  /**
62
95
  * Creates the runner and checks the definition.
63
96
  * @param definition - The agent definition.
64
- * @throws {TypeError} When the name, instructions, model, or tools are invalid, two tools share a
65
- * name, a function tool uses the name of an enabled built-in tool, `planModeEnabled` is set without
97
+ * @param mediaStore - The store that holds the session's images, such as `S3MediaStore`. With it, the runner
98
+ * accepts user messages with images and shows them and tool result images to the model, reading the bytes for
99
+ * each model call; stored messages hold only references. It also gets an own `buildUserMessageWithImages`, which
100
+ * stores user text and its images as one `user_text` item that holds the references, not the bytes, unless a
101
+ * subclass defines its own `buildUserMessageWithImages`, which then stays in use. Use the store
102
+ * the clients and tools upload to. Omit it to refuse user images and show tool result images to the model as text
103
+ * only. Since 0.5.0.
104
+ *
105
+ * Changed in 0.5.0: takes `mediaStore`.
106
+ * @throws {TypeError} When the name, instructions, model, tools, or `decideTurnContinuation` are invalid, two tools
107
+ * share a name, a function tool uses the name of an enabled built-in tool, `planModeEnabled` is set without
66
108
  * `write_todos`, `planningToolChoice` is neither `auto` nor `required`, or a tool source lacks a
67
109
  * {@link ToolSource} method.
68
110
  * @throws {RangeError} When `maxModelCallsPerTurn` is not a positive integer.
69
111
  */
70
- constructor(definition) {
112
+ constructor(definition, mediaStore = undefined) {
71
113
  if (typeof definition?.name !== "string" || definition.name.trim() === "") {
72
114
  throw new TypeError("AgentDefinition.name must be a non-blank string");
73
115
  }
@@ -80,6 +122,9 @@ export class StepwiseAgentRunner {
80
122
  if (definition.resolveModel !== undefined && typeof definition.resolveModel !== "function") {
81
123
  throw new TypeError("AgentDefinition.resolveModel must be a function");
82
124
  }
125
+ if (definition.decideTurnContinuation !== undefined && typeof definition.decideTurnContinuation !== "function") {
126
+ throw new TypeError("AgentDefinition.decideTurnContinuation must be a function");
127
+ }
83
128
  const enabledBuiltInTools = new Set(definition.builtInTools ?? []);
84
129
  const functionToolsByName = new Map();
85
130
  for (const tool of definition.tools ?? []) {
@@ -120,6 +165,13 @@ export class StepwiseAgentRunner {
120
165
  this.functionToolsByName = functionToolsByName;
121
166
  this.toolSources = toolSources;
122
167
  this.maxModelCallsPerTurn = maxModelCallsPerTurn;
168
+ this.#mediaStore = mediaStore;
169
+ if (mediaStore !== undefined) {
170
+ // The session accepts images only from a runner with this method; the class leaves it undeclared for subclasses.
171
+ const runner = this;
172
+ // A subclass's own method is already on the prototype chain, and it stays in use.
173
+ runner.buildUserMessageWithImages ??= (text, images) => toBuiltinLoopFrameworkMessage({ type: "user_text", text, images: [...images] });
174
+ }
123
175
  }
124
176
  /**
125
177
  * Converts user text into a stored `user_text` item.
@@ -127,33 +179,76 @@ export class StepwiseAgentRunner {
127
179
  * @returns The message with role `user`.
128
180
  */
129
181
  buildUserMessage(text) {
130
- return toStepwiseFrameworkMessage({ type: "user_text", text });
182
+ return toBuiltinLoopFrameworkMessage({ type: "user_text", text });
131
183
  }
132
184
  /**
133
185
  * Makes the turn's next model call.
134
186
  * @param turn - The turn context.
135
187
  * @returns {@link TurnCompleted} with the results and final answer not stored yet, or
136
- * {@link ToolCallsRequested} with the previous results, this response, and its tool calls.
188
+ * {@link ToolCallsRequested} with the previous results, this response, and its tool calls. When
189
+ * {@link AgentDefinition.decideTurnContinuation} returns `"end"` after tool calls, a {@link TurnCompleted} with only
190
+ * the results and zero usage, without a model call. When it continues after tool calls, its message follows the
191
+ * results in the request and in the stored messages. When it continues after an answer, a {@link TurnContinued}
192
+ * with the previous results, this response, and the message as user text, or a {@link TurnCompleted} with
193
+ * {@link TurnCompleted.turnError} once {@link maxConsecutiveTurnContinuations} is exceeded.
137
194
  * @throws {TypeError} When a function tool uses the name of an enabled built-in tool, or a tool source lists a
138
195
  * name that repeats a function tool, an enabled built-in tool, or another source's tool. No model request is
139
- * made.
140
- * @throws Any error of the model call or of a tool source's `listTools`, which retries the `RunModel` attempt.
196
+ * made. Also when `decideTurnContinuation` returns another value.
197
+ * @throws Any error of the model call, of the media store, of a tool source's `listTools`, or of
198
+ * `decideTurnContinuation`, which retries the `RunModel` attempt.
141
199
  */
142
200
  async runModelStep(turn) {
143
201
  this.requireNoBuiltInToolNameClash(turn);
144
- const modelCallCount = readModelCallCount(turn.frameworkRunState);
202
+ const runState = readBuiltinLoopRunState(turn.frameworkRunState);
203
+ const modelCallCount = runState.modelCalls;
145
204
  const unstoredToolResults = buildUnstoredToolResults(turn);
205
+ const unstoredItems = [...unstoredToolResults];
206
+ if (unstoredToolResults.length > 0 && this.definition.decideTurnContinuation !== undefined) {
207
+ const decision = await this.decideTurnContinuation(turn, readLatestModelOutput(turn), unstoredToolResults);
208
+ if (decision === "end") {
209
+ return {
210
+ kind: "completed",
211
+ newMessages: unstoredToolResults.map(toBuiltinLoopFrameworkMessage),
212
+ usage: emptyAgentUsage(),
213
+ };
214
+ }
215
+ if (decision !== "default") {
216
+ unstoredItems.push({ type: "user_text", text: decision.message });
217
+ }
218
+ }
146
219
  const isToolBudgetSpent = modelCallCount >= this.maxModelCallsPerTurn;
147
220
  const sourceTools = isToolBudgetSpent || turn.interactionMode === "planning"
148
221
  ? new Map()
149
222
  : await this.toolSources.listSourceTools(turn.enabledBuiltInTools ?? new Set());
150
- const request = await this.buildModelRequest(turn, unstoredToolResults, modelCallCount, isToolBudgetSpent, sourceTools);
151
- const response = await this.resolveModel(turn.sessionSettings).callModel(request, turn.events);
223
+ const request = await this.buildModelRequest(turn, unstoredItems, modelCallCount, isToolBudgetSpent, sourceTools);
224
+ const response = await this.resolveModel(turn.sessionSettings).callModel(await this.addImageBytes(request), turn.events);
152
225
  requireModelResponse(response);
153
226
  const usage = { ...response.usage, modelCalls: 1 };
154
- const newMessages = [...unstoredToolResults, ...response.outputItems].map(toStepwiseFrameworkMessage);
227
+ const newMessages = [...unstoredItems, ...response.outputItems].map(toBuiltinLoopFrameworkMessage);
155
228
  if (response.toolCalls.length === 0) {
156
- return { kind: "completed", newMessages, usage };
229
+ const decision = await this.decideTurnContinuation(turn, response.outputItems, []);
230
+ if (decision === "end" || decision === "default") {
231
+ return { kind: "completed", newMessages, usage };
232
+ }
233
+ const consecutiveContinuations = runState.consecutiveContinuations + 1;
234
+ if (consecutiveContinuations > maxConsecutiveTurnContinuations) {
235
+ return {
236
+ kind: "completed",
237
+ newMessages,
238
+ usage,
239
+ turnError: buildTurnContinuationLimitError(maxConsecutiveTurnContinuations),
240
+ };
241
+ }
242
+ return {
243
+ kind: "turn_continued",
244
+ frameworkRunState: serializeJsonWithSpacedSeparators({
245
+ model_calls: modelCallCount + 1,
246
+ consecutive_continuations: consecutiveContinuations,
247
+ }),
248
+ // The message makes the next request end with user text, as every provider requires.
249
+ newMessages: [...newMessages, toBuiltinLoopFrameworkMessage({ type: "user_text", text: decision.message })],
250
+ usage,
251
+ };
157
252
  }
158
253
  if (isToolBudgetSpent) {
159
254
  // The model asked for tools although none were offered; end the turn so it cannot loop.
@@ -165,7 +260,7 @@ export class StepwiseAgentRunner {
165
260
  }));
166
261
  return {
167
262
  kind: "completed",
168
- newMessages: [...newMessages, ...notRunResults.map(toStepwiseFrameworkMessage)],
263
+ newMessages: [...newMessages, ...notRunResults.map(toBuiltinLoopFrameworkMessage)],
169
264
  usage,
170
265
  };
171
266
  }
@@ -189,14 +284,22 @@ export class StepwiseAgentRunner {
189
284
  };
190
285
  }
191
286
  /**
192
- * Runs one function tool call after checking its arguments against the tool's schema, or passes a call that a
287
+ * Runs one function tool call after converting its arguments with the tool's `prepareArguments`, when it has
288
+ * one, and checking them against the tool's schema, or passes a call that a
193
289
  * tool source built in `runModelStep` to that source, with the source's own `toolSourceReference` and without a
194
290
  * listing. Any other name is an unknown tool and never reaches a source.
291
+ * A function tool's {@link ToolCallContext.mediaStore} is this runner's store.
292
+ *
293
+ * Changed in 0.5.0: a function tool receives the media store and may return a {@link FunctionToolResult} with
294
+ * images.
195
295
  * @param call - The deferred call.
196
- * @returns The output: a `string` result unchanged, any other result as JSON; the tool's
197
- * {@link ToolInputRequested}; or a source's outcome, such as {@link ToolTaskStarted}.
296
+ * @returns The output: a `string` result unchanged, a {@link FunctionToolResult} as its output and images, any
297
+ * other result as JSON; the tool's {@link ToolInputRequested}; or a source's outcome, such as
298
+ * {@link ToolTaskStarted}.
198
299
  * @throws {ToolExecutionError} For an unknown tool, arguments that are not a JSON object or break the
199
- * schema, or a `ToolExecutionError` from the tool or its source.
300
+ * schema, a non-cancellation error or a thenable result of the tool's `prepareArguments`, a
301
+ * `ToolExecutionError` from the tool or its source, or a function tool that returned images while this runner has
302
+ * no media store.
200
303
  * @throws {RangeError} When a source built the call but the definition no longer has it, so the effect decides
201
304
  * the outcome.
202
305
  * @throws Any other error of the tool source.
@@ -210,7 +313,7 @@ export class StepwiseAgentRunner {
210
313
  }
211
314
  return this.toolSources.executeDeferredToolCall(call);
212
315
  }
213
- const toolArguments = parseToolArguments(tool.name, toolCall.arguments);
316
+ const toolArguments = prepareToolArguments(tool, toolCall.arguments, call.cancellationSignal);
214
317
  const violation = findJsonSchemaViolation(toolArguments, tool.parameters, "arguments");
215
318
  if (violation !== undefined) {
216
319
  throw new ToolExecutionError(`invalid arguments for ${tool.name}: ${violation}`);
@@ -221,12 +324,14 @@ export class StepwiseAgentRunner {
221
324
  toolCallId: toolCall.toolCallId,
222
325
  idempotencyKey: call.idempotencyKey,
223
326
  attempt: call.attempt,
327
+ effect: toolCall.effect,
224
328
  events: call.events,
225
329
  cancellationSignal: call.cancellationSignal,
226
330
  deadline: call.deadline,
227
331
  inputAnswers: call.inputAnswers ?? [],
228
332
  inputContinuation: toolCall.inputContinuation ?? null,
229
333
  heartbeat: () => call.heartbeat(),
334
+ ...(this.#mediaStore === undefined ? {} : { mediaStore: this.#mediaStore }),
230
335
  };
231
336
  const result = await tool.execute(toolArguments, context);
232
337
  if (typeof result === "string") {
@@ -235,8 +340,20 @@ export class StepwiseAgentRunner {
235
340
  if (result?.kind === "tool_input_requested") {
236
341
  return result;
237
342
  }
343
+ if (isFunctionToolResult(result)) {
344
+ return this.toToolExecutionResult(tool.name, result);
345
+ }
238
346
  return { output: serializeJsonWithSpacedSeparators(result === undefined ? null : result) };
239
347
  }
348
+ toToolExecutionResult(toolName, result) {
349
+ if (result.images === undefined || result.images.length === 0) {
350
+ return { output: result.output };
351
+ }
352
+ if (this.#mediaStore === undefined) {
353
+ throw new ToolExecutionError(`function tool ${toolName} returned images, but the runner has no media store`);
354
+ }
355
+ return { output: result.output, images: result.images };
356
+ }
240
357
  /**
241
358
  * Polls a tool source's task once, through the source that built the call.
242
359
  * @param poll - The call's record from `PollToolTask`.
@@ -281,7 +398,7 @@ export class StepwiseAgentRunner {
281
398
  * @returns One `tool_result` message per unstored result, in deferral order.
282
399
  */
283
400
  buildUnfinishedTurnMessages(turn) {
284
- return buildUnstoredToolResults(turn).map(toStepwiseFrameworkMessage);
401
+ return buildUnstoredToolResults(turn).map(toBuiltinLoopFrameworkMessage);
285
402
  }
286
403
  /**
287
404
  * Estimates the model input of the next `runModelStep` with the model client.
@@ -291,10 +408,10 @@ export class StepwiseAgentRunner {
291
408
  * when it has one, else from the runner's last listing, as in the Python core.
292
409
  */
293
410
  async estimateInputTokens(turn) {
294
- const modelCallCount = readModelCallCount(turn.frameworkRunState);
411
+ const modelCallCount = readBuiltinLoopRunState(turn.frameworkRunState).modelCalls;
295
412
  const isToolBudgetSpent = modelCallCount >= this.maxModelCallsPerTurn;
296
413
  const request = await this.buildModelRequest(turn, buildUnstoredToolResults(turn), modelCallCount, isToolBudgetSpent, this.toolSources.readCachedSourceTools());
297
- return this.resolveModel(turn.sessionSettings).estimateInputTokens(request);
414
+ return this.resolveModel(turn.sessionSettings).estimateInputTokens(this.keepShownImagesOnly(request));
298
415
  }
299
416
  /**
300
417
  * Chooses the last message to summarize, at a boundary between model responses.
@@ -352,7 +469,11 @@ export class StepwiseAgentRunner {
352
469
  request.inputTokenBudget - (this.definition.modelSettings?.maxOutputTokens ?? 0);
353
470
  if (budget !== undefined) {
354
471
  // Estimate by parts, then leave out the oldest items up to the first cut that fits.
355
- const itemTokens = rangeItems.map((item) => model.estimateInputTokens({ ...this.buildSummaryRequest(request, [], 0), instructions: "", inputItems: [item] }));
472
+ const itemTokens = rangeItems.map((item) => model.estimateInputTokens({
473
+ ...this.buildSummaryRequest(request, [], 0),
474
+ instructions: "",
475
+ inputItems: stripImages([item]),
476
+ }));
356
477
  let tokens = model.estimateInputTokens(this.buildSummaryRequest(request, [], rangeItems.length)) +
357
478
  itemTokens.reduce((total, itemToken) => total + itemToken, 0);
358
479
  // A cut never splits a model response or separates a tool call from its result.
@@ -379,7 +500,8 @@ export class StepwiseAgentRunner {
379
500
  if (omittedCount > 0) {
380
501
  items.push({ type: "user_text", text: buildContextSummaryOmissionNote(omittedCount) });
381
502
  }
382
- items.push(...rangeItems, { type: "user_text", text: contextSummaryRequest });
503
+ // The summary call reads no image bytes, so it sees each item's text only.
504
+ items.push(...stripImages(rangeItems), { type: "user_text", text: contextSummaryRequest });
383
505
  return {
384
506
  instructions: contextSummaryInstructions,
385
507
  inputItems: pairToolCallsWithResults(items),
@@ -395,7 +517,7 @@ export class StepwiseAgentRunner {
395
517
  cancellationSignal: request.cancellationSignal,
396
518
  };
397
519
  }
398
- async buildModelRequest(turn, unstoredToolResults, modelCallCount, isToolBudgetSpent, sourceTools) {
520
+ async buildModelRequest(turn, unstoredItems, modelCallCount, isToolBudgetSpent, sourceTools) {
399
521
  const contextSummary = turn.contextSummary ?? null;
400
522
  const summaryItems = contextSummary === null ? [] : [{ type: "user_text", text: buildContextSummaryNote(contextSummary) }];
401
523
  let toolChoice = isToolBudgetSpent ? "none" : "auto";
@@ -408,7 +530,7 @@ export class StepwiseAgentRunner {
408
530
  inputItems: pairToolCallsWithResults([
409
531
  ...summaryItems,
410
532
  ...readStoredInputItemsWithPlanNote(turn),
411
- ...unstoredToolResults,
533
+ ...unstoredItems,
412
534
  ]),
413
535
  tools: isToolBudgetSpent ? [] : this.listOfferedTools(turn, sourceTools),
414
536
  toolChoice,
@@ -423,7 +545,7 @@ export class StepwiseAgentRunner {
423
545
  }
424
546
  return this.resolveModel(turn.sessionSettings).estimateInputTokens({
425
547
  instructions: "",
426
- inputItems: items,
548
+ inputItems: this.#mediaStore === undefined ? stripImages(items) : items,
427
549
  tools: [],
428
550
  toolChoice: "none",
429
551
  settings: this.definition.modelSettings ?? {},
@@ -431,6 +553,21 @@ export class StepwiseAgentRunner {
431
553
  cancellationSignal: turn.cancellationSignal,
432
554
  });
433
555
  }
556
+ /** Returns the request with the bytes of its images, read from the store right now. */
557
+ async addImageBytes(request) {
558
+ if (this.#mediaStore === undefined) {
559
+ return this.keepShownImagesOnly(request);
560
+ }
561
+ const references = request.inputItems.flatMap((item) => item.type === "model_output" ? [] : (item.images ?? []));
562
+ if (references.length === 0) {
563
+ return request;
564
+ }
565
+ return { ...request, imageBytes: await loadImages(this.#mediaStore, references) };
566
+ }
567
+ keepShownImagesOnly(request) {
568
+ // Without a store the model sees no image, such as a tool source's.
569
+ return this.#mediaStore === undefined ? { ...request, inputItems: stripImages(request.inputItems) } : request;
570
+ }
434
571
  /** A built-in enabled only in the session options must not share a function tool's name. */
435
572
  requireNoBuiltInToolNameClash(turn) {
436
573
  for (const builtInTool of turn.enabledBuiltInTools ?? []) {
@@ -514,6 +651,43 @@ export class StepwiseAgentRunner {
514
651
  }
515
652
  return resolved;
516
653
  }
654
+ /** Returns the hook's decision for one iteration, or `"default"` without a hook. */
655
+ async decideTurnContinuation(turn, modelOutput, toolResults) {
656
+ const decide = this.definition.decideTurnContinuation;
657
+ if (decide === undefined) {
658
+ return "default";
659
+ }
660
+ const decision = await decide({
661
+ flowId: turn.flowId,
662
+ turnId: turn.turnId,
663
+ sessionSettings: turn.sessionSettings ?? {},
664
+ modelOutput,
665
+ toolResults,
666
+ });
667
+ if (decision === "end" || decision === "default") {
668
+ return decision;
669
+ }
670
+ const continuation = decision;
671
+ if (typeof continuation === "object" &&
672
+ continuation !== null &&
673
+ continuation.action === "continue" &&
674
+ typeof continuation.message === "string" &&
675
+ continuation.message.trim() !== "") {
676
+ return { action: "continue", message: continuation.message };
677
+ }
678
+ throw new TypeError(`decideTurnContinuation of agent ${this.definition.name} must return "end", "default", or ` +
679
+ `{ action: "continue", message } with a non-blank message, not ${describeTurnContinuation(decision)}`);
680
+ }
681
+ }
682
+ /** Names an invalid hook result without its message text, which may hold application data. */
683
+ function describeTurnContinuation(decision) {
684
+ if (typeof decision === "string") {
685
+ return JSON.stringify(decision);
686
+ }
687
+ if (typeof decision === "object" && decision !== null) {
688
+ return `an object with action ${JSON.stringify(decision.action) ?? "undefined"}`;
689
+ }
690
+ return String(decision);
517
691
  }
518
692
  /** A planning turn without a draft drafts one first; feedback on a draft may only answer. */
519
693
  function mustWritePlanFirst(turn, modelCallCount) {
@@ -553,31 +727,100 @@ function buildUnstoredToolResults(turn) {
553
727
  toolCallId: record.toolCallId,
554
728
  toolName: record.toolName,
555
729
  output: describeToolCallOutcome(record),
730
+ ...((record.images ?? []).length === 0 ? {} : { images: record.images }),
556
731
  }));
557
732
  }
558
- function parseToolArguments(toolName, argumentsText) {
733
+ function stripImages(items) {
734
+ return items.map((item) => {
735
+ if (item.type === "model_output" || (item.images ?? []).length === 0) {
736
+ return item;
737
+ }
738
+ const { images: _images, ...withoutImages } = item;
739
+ return withoutImages;
740
+ });
741
+ }
742
+ function prepareToolArguments(tool, argumentsText, cancellationSignal) {
559
743
  let parsed;
560
744
  try {
561
745
  parsed = JSON.parse(argumentsText === "" ? "{}" : argumentsText);
562
746
  }
563
747
  catch {
564
748
  // A fixed text, because the two cores' JSON parsers word their errors differently.
565
- throw new ToolExecutionError(`invalid arguments for ${toolName}: arguments are not valid JSON`);
749
+ throw new ToolExecutionError(`invalid arguments for ${tool.name}: arguments are not valid JSON`);
750
+ }
751
+ if (tool.prepareArguments !== undefined) {
752
+ try {
753
+ parsed = tool.prepareArguments(parsed);
754
+ }
755
+ catch (error) {
756
+ if (isCancellation(error, cancellationSignal)) {
757
+ throw error;
758
+ }
759
+ // Any other error, so a failed conversion never retries or records outcome_unknown.
760
+ const message = error instanceof Error ? error.message : String(error);
761
+ throw new ToolExecutionError(`invalid arguments for ${tool.name}: ${message}`);
762
+ }
763
+ if (isThenable(parsed)) {
764
+ if (parsed instanceof Promise) {
765
+ observePromiseRejection(parsed);
766
+ }
767
+ throw new ToolExecutionError(`invalid arguments for ${tool.name}: argument conversion must be synchronous`);
768
+ }
566
769
  }
567
770
  if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
568
- throw new ToolExecutionError(`invalid arguments for ${toolName}: expected a JSON object`);
771
+ throw new ToolExecutionError(`invalid arguments for ${tool.name}: expected a JSON object`);
569
772
  }
570
773
  return parsed;
571
774
  }
572
- function readModelCallCount(frameworkRunState) {
775
+ /** Reads `then` without calling it; a throwing `then` getter counts as a thenable, so it is refused too. */
776
+ function isThenable(value) {
777
+ if ((typeof value !== "object" || value === null) && typeof value !== "function") {
778
+ return false;
779
+ }
780
+ try {
781
+ return typeof value.then === "function";
782
+ }
783
+ catch {
784
+ return true;
785
+ }
786
+ }
787
+ /** Observes a refused Promise's rejection through the native `then`, so a subclass's own `then` never runs. */
788
+ function observePromiseRejection(promise) {
789
+ try {
790
+ void Promise.prototype.then.call(promise, undefined, () => undefined);
791
+ }
792
+ catch {
793
+ // A subclass constructor may throw; the result is refused either way.
794
+ }
795
+ }
796
+ function isCancellation(error, cancellationSignal) {
797
+ if (cancellationSignal.aborted && error === cancellationSignal.reason) {
798
+ return true;
799
+ }
800
+ return error?.name === "AbortError";
801
+ }
802
+ function readBuiltinLoopRunState(frameworkRunState) {
573
803
  if (frameworkRunState === null) {
574
- return 0;
804
+ return { modelCalls: 0, consecutiveContinuations: 0 };
575
805
  }
576
806
  const parsed = JSON.parse(frameworkRunState);
577
- if (typeof parsed.model_calls !== "number" || !Number.isSafeInteger(parsed.model_calls)) {
578
- throw new TypeError("FrameworkRunState is not a Stepwise run state");
807
+ const consecutiveContinuations = parsed.consecutive_continuations ?? 0;
808
+ if (typeof parsed.model_calls !== "number" ||
809
+ !Number.isSafeInteger(parsed.model_calls) ||
810
+ typeof consecutiveContinuations !== "number" ||
811
+ !Number.isSafeInteger(consecutiveContinuations)) {
812
+ throw new TypeError("FrameworkRunState is not a built-in loop run state");
813
+ }
814
+ return { modelCalls: parsed.model_calls, consecutiveContinuations };
815
+ }
816
+ /** The output items of the turn's latest model response: the turn's trailing stored `model_output` items. */
817
+ function readLatestModelOutput(turn) {
818
+ const items = turn.messages.filter((message) => message.turnId === turn.turnId).map(readStoredModelInputItem);
819
+ let start = items.length;
820
+ while (start > 0 && items[start - 1]?.type === "model_output") {
821
+ start -= 1;
579
822
  }
580
- return parsed.model_calls;
823
+ return items.slice(start);
581
824
  }
582
825
  function requireModelResponse(response) {
583
826
  if (!Array.isArray(response?.outputItems) ||
@@ -638,4 +881,4 @@ export function writeToolSourceEnvelope(sourceName, reference) {
638
881
  export function readToolSourceEnvelope(toolSourceReference) {
639
882
  return readRouterToolSourceEnvelope(toolSourceNameKey, toolSourceReference);
640
883
  }
641
- //# sourceMappingURL=stepwise-agent-runner.js.map
884
+ //# sourceMappingURL=builtin-loop-agent-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtin-loop-agent-runner.js","sourceRoot":"","sources":["../../../src/builtin-loop/builtin-loop-agent-runner.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,12 @@
1
1
  import { type AgentMessage, type FrameworkMessage } from "../agent-session-values.js";
2
2
  import type { ModelInputItem } from "./model-client.js";
3
- /** Returns the session message that stores one item; `frameworkItem` is the item's compact snake_case JSON. */
4
- export declare function toStepwiseFrameworkMessage(item: ModelInputItem): FrameworkMessage;
5
- /** Reads the Stepwise item stored in one session message. */
3
+ /**
4
+ * Returns the session message that stores one item; `frameworkItem` is the item's compact snake_case JSON. A user
5
+ * text or tool result item with images adds an `images` list of references; a tool result message also shows them
6
+ * in `images`.
7
+ */
8
+ export declare function toBuiltinLoopFrameworkMessage(item: ModelInputItem): FrameworkMessage;
9
+ /** Reads the built-in loop item stored in one session message. */
6
10
  export declare function readStoredModelInputItem(message: AgentMessage): ModelInputItem;
7
11
  /**
8
12
  * Returns the items with exactly one result after every tool call. A call without a result, such as one