@nervekit/agent 0.1.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 (263) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +5 -0
  3. package/dist/agent-loop.d.ts +2 -0
  4. package/dist/agent-loop.d.ts.map +1 -0
  5. package/dist/agent-loop.js +2 -0
  6. package/dist/agent-loop.js.map +1 -0
  7. package/dist/agent.d.ts +125 -0
  8. package/dist/agent.d.ts.map +1 -0
  9. package/dist/agent.js +427 -0
  10. package/dist/agent.js.map +1 -0
  11. package/dist/harness/agent-harness.d.ts +114 -0
  12. package/dist/harness/agent-harness.d.ts.map +1 -0
  13. package/dist/harness/agent-harness.js +474 -0
  14. package/dist/harness/agent-harness.js.map +1 -0
  15. package/dist/harness/compaction/branch-summarization.d.ts +54 -0
  16. package/dist/harness/compaction/branch-summarization.d.ts.map +1 -0
  17. package/dist/harness/compaction/branch-summarization.js +183 -0
  18. package/dist/harness/compaction/branch-summarization.js.map +1 -0
  19. package/dist/harness/compaction/compaction.d.ts +19 -0
  20. package/dist/harness/compaction/compaction.d.ts.map +1 -0
  21. package/dist/harness/compaction/compaction.js +335 -0
  22. package/dist/harness/compaction/compaction.js.map +1 -0
  23. package/dist/harness/compaction/cut-points.d.ts +7 -0
  24. package/dist/harness/compaction/cut-points.d.ts.map +1 -0
  25. package/dist/harness/compaction/cut-points.js +106 -0
  26. package/dist/harness/compaction/cut-points.js.map +1 -0
  27. package/dist/harness/compaction/overflow.d.ts +3 -0
  28. package/dist/harness/compaction/overflow.d.ts.map +1 -0
  29. package/dist/harness/compaction/overflow.js +54 -0
  30. package/dist/harness/compaction/overflow.js.map +1 -0
  31. package/dist/harness/compaction/policy.d.ts +8 -0
  32. package/dist/harness/compaction/policy.d.ts.map +1 -0
  33. package/dist/harness/compaction/policy.js +57 -0
  34. package/dist/harness/compaction/policy.js.map +1 -0
  35. package/dist/harness/compaction/types.d.ts +79 -0
  36. package/dist/harness/compaction/types.d.ts.map +1 -0
  37. package/dist/harness/compaction/types.js +2 -0
  38. package/dist/harness/compaction/types.js.map +1 -0
  39. package/dist/harness/compaction/usage.d.ts +30 -0
  40. package/dist/harness/compaction/usage.d.ts.map +1 -0
  41. package/dist/harness/compaction/usage.js +177 -0
  42. package/dist/harness/compaction/usage.js.map +1 -0
  43. package/dist/harness/compaction/utils.d.ts +25 -0
  44. package/dist/harness/compaction/utils.d.ts.map +1 -0
  45. package/dist/harness/compaction/utils.js +131 -0
  46. package/dist/harness/compaction/utils.js.map +1 -0
  47. package/dist/harness/configuration.d.ts +34 -0
  48. package/dist/harness/configuration.d.ts.map +1 -0
  49. package/dist/harness/configuration.js +75 -0
  50. package/dist/harness/configuration.js.map +1 -0
  51. package/dist/harness/conversation/context.d.ts +24 -0
  52. package/dist/harness/conversation/context.d.ts.map +1 -0
  53. package/dist/harness/conversation/context.js +76 -0
  54. package/dist/harness/conversation/context.js.map +1 -0
  55. package/dist/harness/conversation/conversation.d.ts +36 -0
  56. package/dist/harness/conversation/conversation.d.ts.map +1 -0
  57. package/dist/harness/conversation/conversation.js +163 -0
  58. package/dist/harness/conversation/conversation.js.map +1 -0
  59. package/dist/harness/conversation/entries.d.ts +117 -0
  60. package/dist/harness/conversation/entries.d.ts.map +1 -0
  61. package/dist/harness/conversation/entries.js +2 -0
  62. package/dist/harness/conversation/entries.js.map +1 -0
  63. package/dist/harness/conversation/jsonl-repo.d.ts +27 -0
  64. package/dist/harness/conversation/jsonl-repo.d.ts.map +1 -0
  65. package/dist/harness/conversation/jsonl-repo.js +110 -0
  66. package/dist/harness/conversation/jsonl-repo.js.map +1 -0
  67. package/dist/harness/conversation/jsonl-storage.d.ts +34 -0
  68. package/dist/harness/conversation/jsonl-storage.d.ts.map +1 -0
  69. package/dist/harness/conversation/jsonl-storage.js +213 -0
  70. package/dist/harness/conversation/jsonl-storage.js.map +1 -0
  71. package/dist/harness/conversation/memory-repo.d.ts +18 -0
  72. package/dist/harness/conversation/memory-repo.d.ts.map +1 -0
  73. package/dist/harness/conversation/memory-repo.js +45 -0
  74. package/dist/harness/conversation/memory-repo.js.map +1 -0
  75. package/dist/harness/conversation/memory-storage.d.ts +25 -0
  76. package/dist/harness/conversation/memory-storage.d.ts.map +1 -0
  77. package/dist/harness/conversation/memory-storage.js +88 -0
  78. package/dist/harness/conversation/memory-storage.js.map +1 -0
  79. package/dist/harness/conversation/repo-utils.d.ts +13 -0
  80. package/dist/harness/conversation/repo-utils.d.ts.map +1 -0
  81. package/dist/harness/conversation/repo-utils.js +39 -0
  82. package/dist/harness/conversation/repo-utils.js.map +1 -0
  83. package/dist/harness/conversation/storage-utils.d.ts +11 -0
  84. package/dist/harness/conversation/storage-utils.d.ts.map +1 -0
  85. package/dist/harness/conversation/storage-utils.js +32 -0
  86. package/dist/harness/conversation/storage-utils.js.map +1 -0
  87. package/dist/harness/conversation/text-extraction.d.ts +8 -0
  88. package/dist/harness/conversation/text-extraction.d.ts.map +1 -0
  89. package/dist/harness/conversation/text-extraction.js +24 -0
  90. package/dist/harness/conversation/text-extraction.js.map +1 -0
  91. package/dist/harness/conversation/uuid.d.ts +2 -0
  92. package/dist/harness/conversation/uuid.d.ts.map +1 -0
  93. package/dist/harness/conversation/uuid.js +54 -0
  94. package/dist/harness/conversation/uuid.js.map +1 -0
  95. package/dist/harness/conversation-writes.d.ts +9 -0
  96. package/dist/harness/conversation-writes.d.ts.map +1 -0
  97. package/dist/harness/conversation-writes.js +54 -0
  98. package/dist/harness/conversation-writes.js.map +1 -0
  99. package/dist/harness/env/nodejs.d.ts +53 -0
  100. package/dist/harness/env/nodejs.d.ts.map +1 -0
  101. package/dist/harness/env/nodejs.js +497 -0
  102. package/dist/harness/env/nodejs.js.map +1 -0
  103. package/dist/harness/env/types.d.ts +106 -0
  104. package/dist/harness/env/types.d.ts.map +1 -0
  105. package/dist/harness/env/types.js +2 -0
  106. package/dist/harness/env/types.js.map +1 -0
  107. package/dist/harness/errors.d.ts +48 -0
  108. package/dist/harness/errors.d.ts.map +1 -0
  109. package/dist/harness/errors.js +63 -0
  110. package/dist/harness/errors.js.map +1 -0
  111. package/dist/harness/events.d.ts +238 -0
  112. package/dist/harness/events.d.ts.map +1 -0
  113. package/dist/harness/events.js +2 -0
  114. package/dist/harness/events.js.map +1 -0
  115. package/dist/harness/harness-configuration-methods.d.ts +36 -0
  116. package/dist/harness/harness-configuration-methods.d.ts.map +1 -0
  117. package/dist/harness/harness-configuration-methods.js +145 -0
  118. package/dist/harness/harness-configuration-methods.js.map +1 -0
  119. package/dist/harness/harness-continuation.d.ts +18 -0
  120. package/dist/harness/harness-continuation.d.ts.map +1 -0
  121. package/dist/harness/harness-continuation.js +56 -0
  122. package/dist/harness/harness-continuation.js.map +1 -0
  123. package/dist/harness/harness-events.d.ts +23 -0
  124. package/dist/harness/harness-events.d.ts.map +1 -0
  125. package/dist/harness/harness-events.js +129 -0
  126. package/dist/harness/harness-events.js.map +1 -0
  127. package/dist/harness/harness-invocations.d.ts +20 -0
  128. package/dist/harness/harness-invocations.d.ts.map +1 -0
  129. package/dist/harness/harness-invocations.js +22 -0
  130. package/dist/harness/harness-invocations.js.map +1 -0
  131. package/dist/harness/harness-maintenance.d.ts +30 -0
  132. package/dist/harness/harness-maintenance.d.ts.map +1 -0
  133. package/dist/harness/harness-maintenance.js +155 -0
  134. package/dist/harness/harness-maintenance.js.map +1 -0
  135. package/dist/harness/harness-queue-methods.d.ts +45 -0
  136. package/dist/harness/harness-queue-methods.d.ts.map +1 -0
  137. package/dist/harness/harness-queue-methods.js +51 -0
  138. package/dist/harness/harness-queue-methods.js.map +1 -0
  139. package/dist/harness/messages.d.ts +76 -0
  140. package/dist/harness/messages.d.ts.map +1 -0
  141. package/dist/harness/messages.js +147 -0
  142. package/dist/harness/messages.js.map +1 -0
  143. package/dist/harness/options.d.ts +95 -0
  144. package/dist/harness/options.d.ts.map +1 -0
  145. package/dist/harness/options.js +2 -0
  146. package/dist/harness/options.js.map +1 -0
  147. package/dist/harness/prompt-templates.d.ts +49 -0
  148. package/dist/harness/prompt-templates.d.ts.map +1 -0
  149. package/dist/harness/prompt-templates.js +230 -0
  150. package/dist/harness/prompt-templates.js.map +1 -0
  151. package/dist/harness/result.d.ts +19 -0
  152. package/dist/harness/result.d.ts.map +1 -0
  153. package/dist/harness/result.js +32 -0
  154. package/dist/harness/result.js.map +1 -0
  155. package/dist/harness/run/messages.d.ts +5 -0
  156. package/dist/harness/run/messages.d.ts.map +1 -0
  157. package/dist/harness/run/messages.js +37 -0
  158. package/dist/harness/run/messages.js.map +1 -0
  159. package/dist/harness/skills/format.d.ts +6 -0
  160. package/dist/harness/skills/format.d.ts.map +1 -0
  161. package/dist/harness/skills/format.js +38 -0
  162. package/dist/harness/skills/format.js.map +1 -0
  163. package/dist/harness/skills/index.d.ts +5 -0
  164. package/dist/harness/skills/index.d.ts.map +1 -0
  165. package/dist/harness/skills/index.js +5 -0
  166. package/dist/harness/skills/index.js.map +1 -0
  167. package/dist/harness/skills/loader.d.ts +43 -0
  168. package/dist/harness/skills/loader.d.ts.map +1 -0
  169. package/dist/harness/skills/loader.js +279 -0
  170. package/dist/harness/skills/loader.js.map +1 -0
  171. package/dist/harness/skills/parser.d.ts +12 -0
  172. package/dist/harness/skills/parser.d.ts.map +1 -0
  173. package/dist/harness/skills/parser.js +22 -0
  174. package/dist/harness/skills/parser.js.map +1 -0
  175. package/dist/harness/skills/validation.d.ts +3 -0
  176. package/dist/harness/skills/validation.d.ts.map +1 -0
  177. package/dist/harness/skills/validation.js +28 -0
  178. package/dist/harness/skills/validation.js.map +1 -0
  179. package/dist/harness/skills.d.ts +2 -0
  180. package/dist/harness/skills.d.ts.map +1 -0
  181. package/dist/harness/skills.js +2 -0
  182. package/dist/harness/skills.js.map +1 -0
  183. package/dist/harness/stream-options.d.ts +5 -0
  184. package/dist/harness/stream-options.d.ts.map +1 -0
  185. package/dist/harness/stream-options.js +67 -0
  186. package/dist/harness/stream-options.js.map +1 -0
  187. package/dist/harness/system-prompt.d.ts +2 -0
  188. package/dist/harness/system-prompt.d.ts.map +1 -0
  189. package/dist/harness/system-prompt.js +2 -0
  190. package/dist/harness/system-prompt.js.map +1 -0
  191. package/dist/harness/turn-state.d.ts +27 -0
  192. package/dist/harness/turn-state.d.ts.map +1 -0
  193. package/dist/harness/turn-state.js +35 -0
  194. package/dist/harness/turn-state.js.map +1 -0
  195. package/dist/harness/types.d.ts +9 -0
  196. package/dist/harness/types.d.ts.map +1 -0
  197. package/dist/harness/types.js +8 -0
  198. package/dist/harness/types.js.map +1 -0
  199. package/dist/harness/utils/env-path.d.ts +14 -0
  200. package/dist/harness/utils/env-path.d.ts.map +1 -0
  201. package/dist/harness/utils/env-path.js +99 -0
  202. package/dist/harness/utils/env-path.js.map +1 -0
  203. package/dist/harness/utils/shell-output.d.ts +16 -0
  204. package/dist/harness/utils/shell-output.d.ts.map +1 -0
  205. package/dist/harness/utils/shell-output.js +137 -0
  206. package/dist/harness/utils/shell-output.js.map +1 -0
  207. package/dist/harness/utils/truncate.d.ts +70 -0
  208. package/dist/harness/utils/truncate.d.ts.map +1 -0
  209. package/dist/harness/utils/truncate.js +289 -0
  210. package/dist/harness/utils/truncate.js.map +1 -0
  211. package/dist/index.d.ts +24 -0
  212. package/dist/index.d.ts.map +1 -0
  213. package/dist/index.js +25 -0
  214. package/dist/index.js.map +1 -0
  215. package/dist/node.d.ts +3 -0
  216. package/dist/node.d.ts.map +1 -0
  217. package/dist/node.js +3 -0
  218. package/dist/node.js.map +1 -0
  219. package/dist/proxy.d.ts +67 -0
  220. package/dist/proxy.d.ts.map +1 -0
  221. package/dist/proxy.js +299 -0
  222. package/dist/proxy.js.map +1 -0
  223. package/dist/runtime/loop/agent-loop.d.ts +24 -0
  224. package/dist/runtime/loop/agent-loop.d.ts.map +1 -0
  225. package/dist/runtime/loop/agent-loop.js +72 -0
  226. package/dist/runtime/loop/agent-loop.js.map +1 -0
  227. package/dist/runtime/loop/events.d.ts +5 -0
  228. package/dist/runtime/loop/events.d.ts.map +1 -0
  229. package/dist/runtime/loop/events.js +5 -0
  230. package/dist/runtime/loop/events.js.map +1 -0
  231. package/dist/runtime/loop/index.d.ts +6 -0
  232. package/dist/runtime/loop/index.d.ts.map +1 -0
  233. package/dist/runtime/loop/index.js +6 -0
  234. package/dist/runtime/loop/index.js.map +1 -0
  235. package/dist/runtime/loop/stream-assistant.d.ts +9 -0
  236. package/dist/runtime/loop/stream-assistant.d.ts.map +1 -0
  237. package/dist/runtime/loop/stream-assistant.js +87 -0
  238. package/dist/runtime/loop/stream-assistant.js.map +1 -0
  239. package/dist/runtime/loop/tool-execution.d.ts +15 -0
  240. package/dist/runtime/loop/tool-execution.d.ts.map +1 -0
  241. package/dist/runtime/loop/tool-execution.js +271 -0
  242. package/dist/runtime/loop/tool-execution.js.map +1 -0
  243. package/dist/runtime/loop/turn-loop.d.ts +7 -0
  244. package/dist/runtime/loop/turn-loop.d.ts.map +1 -0
  245. package/dist/runtime/loop/turn-loop.js +84 -0
  246. package/dist/runtime/loop/turn-loop.js.map +1 -0
  247. package/dist/runtime.d.ts +63 -0
  248. package/dist/runtime.d.ts.map +1 -0
  249. package/dist/runtime.js +170 -0
  250. package/dist/runtime.js.map +1 -0
  251. package/dist/suspension.d.ts +18 -0
  252. package/dist/suspension.d.ts.map +1 -0
  253. package/dist/suspension.js +19 -0
  254. package/dist/suspension.js.map +1 -0
  255. package/dist/types.d.ts +395 -0
  256. package/dist/types.d.ts.map +1 -0
  257. package/dist/types.js +2 -0
  258. package/dist/types.js.map +1 -0
  259. package/dist/worker.d.ts +2 -0
  260. package/dist/worker.d.ts.map +1 -0
  261. package/dist/worker.js +88 -0
  262. package/dist/worker.js.map +1 -0
  263. package/package.json +54 -0
@@ -0,0 +1,271 @@
1
+ import { validateToolArguments, } from "@earendil-works/pi-ai";
2
+ import { isAgentToolSuspension } from "../../suspension.js";
3
+ /**
4
+ * Execute tool calls from an assistant message.
5
+ */
6
+ export async function executeToolCalls(currentContext, assistantMessage, config, signal, emit) {
7
+ const toolCalls = assistantMessage.content.filter((c) => c.type === "toolCall");
8
+ const hasSequentialToolCall = toolCalls.some((tc) => currentContext.tools?.find((t) => t.name === tc.name)?.executionMode ===
9
+ "sequential");
10
+ if (config.toolExecution === "sequential" || hasSequentialToolCall) {
11
+ return executeToolCallsSequential(currentContext, assistantMessage, toolCalls, config, signal, emit);
12
+ }
13
+ return executeToolCallsParallel(currentContext, assistantMessage, toolCalls, config, signal, emit);
14
+ }
15
+ export async function executeToolCallsSequential(currentContext, assistantMessage, toolCalls, config, signal, emit) {
16
+ const finalizedCalls = [];
17
+ const messages = [];
18
+ for (const toolCall of toolCalls) {
19
+ await emit({
20
+ type: "tool_execution_start",
21
+ toolCallId: toolCall.id,
22
+ toolName: toolCall.name,
23
+ args: toolCall.arguments,
24
+ });
25
+ const preparation = await prepareToolCall(currentContext, assistantMessage, toolCall, config, signal);
26
+ let finalized;
27
+ if (preparation.kind === "immediate") {
28
+ finalized = {
29
+ toolCall,
30
+ result: preparation.result,
31
+ isError: preparation.isError,
32
+ };
33
+ }
34
+ else {
35
+ try {
36
+ const executed = await executePreparedToolCall(preparation, signal, emit);
37
+ finalized = await finalizeExecutedToolCall(currentContext, assistantMessage, preparation, executed, config, signal);
38
+ }
39
+ catch (error) {
40
+ if (isAgentToolSuspension(error)) {
41
+ const index = toolCalls.findIndex((candidate) => candidate.id === toolCall.id);
42
+ throw error.withContext({
43
+ assistantMessage,
44
+ toolCall,
45
+ remainingToolCalls: index === -1 ? [] : toolCalls.slice(index + 1),
46
+ });
47
+ }
48
+ throw error;
49
+ }
50
+ }
51
+ await emitToolExecutionEnd(finalized, emit);
52
+ const toolResultMessage = createToolResultMessage(finalized);
53
+ await emitToolResultMessage(toolResultMessage, emit);
54
+ finalizedCalls.push(finalized);
55
+ messages.push(toolResultMessage);
56
+ if (signal?.aborted) {
57
+ break;
58
+ }
59
+ }
60
+ return {
61
+ messages,
62
+ terminate: shouldTerminateToolBatch(finalizedCalls),
63
+ };
64
+ }
65
+ export async function executeToolCallsParallel(currentContext, assistantMessage, toolCalls, config, signal, emit) {
66
+ const finalizedCalls = [];
67
+ for (const toolCall of toolCalls) {
68
+ await emit({
69
+ type: "tool_execution_start",
70
+ toolCallId: toolCall.id,
71
+ toolName: toolCall.name,
72
+ args: toolCall.arguments,
73
+ });
74
+ const preparation = await prepareToolCall(currentContext, assistantMessage, toolCall, config, signal);
75
+ if (preparation.kind === "immediate") {
76
+ const finalized = {
77
+ toolCall,
78
+ result: preparation.result,
79
+ isError: preparation.isError,
80
+ };
81
+ await emitToolExecutionEnd(finalized, emit);
82
+ finalizedCalls.push(finalized);
83
+ if (signal?.aborted) {
84
+ break;
85
+ }
86
+ continue;
87
+ }
88
+ finalizedCalls.push(async () => {
89
+ const executed = await executePreparedToolCall(preparation, signal, emit);
90
+ const finalized = await finalizeExecutedToolCall(currentContext, assistantMessage, preparation, executed, config, signal);
91
+ await emitToolExecutionEnd(finalized, emit);
92
+ return finalized;
93
+ });
94
+ if (signal?.aborted) {
95
+ break;
96
+ }
97
+ }
98
+ const orderedFinalizedCalls = await Promise.all(finalizedCalls.map((entry) => typeof entry === "function" ? entry() : Promise.resolve(entry)));
99
+ const messages = [];
100
+ for (const finalized of orderedFinalizedCalls) {
101
+ const toolResultMessage = createToolResultMessage(finalized);
102
+ await emitToolResultMessage(toolResultMessage, emit);
103
+ messages.push(toolResultMessage);
104
+ }
105
+ return {
106
+ messages,
107
+ terminate: shouldTerminateToolBatch(orderedFinalizedCalls),
108
+ };
109
+ }
110
+ function shouldTerminateToolBatch(finalizedCalls) {
111
+ return (finalizedCalls.length > 0 &&
112
+ finalizedCalls.every((finalized) => finalized.result.terminate === true));
113
+ }
114
+ function prepareToolCallArguments(tool, toolCall) {
115
+ if (!tool.prepareArguments) {
116
+ return toolCall;
117
+ }
118
+ const preparedArguments = tool.prepareArguments(toolCall.arguments);
119
+ if (preparedArguments === toolCall.arguments) {
120
+ return toolCall;
121
+ }
122
+ return {
123
+ ...toolCall,
124
+ arguments: preparedArguments,
125
+ };
126
+ }
127
+ async function prepareToolCall(currentContext, assistantMessage, toolCall, config, signal) {
128
+ const tool = currentContext.tools?.find((t) => t.name === toolCall.name);
129
+ if (!tool) {
130
+ return {
131
+ kind: "immediate",
132
+ result: createErrorToolResult(`Tool ${toolCall.name} not found`),
133
+ isError: true,
134
+ };
135
+ }
136
+ try {
137
+ const preparedToolCall = prepareToolCallArguments(tool, toolCall);
138
+ const validatedArgs = validateToolArguments(tool, preparedToolCall);
139
+ if (config.beforeToolCall) {
140
+ const beforeResult = await config.beforeToolCall({
141
+ assistantMessage,
142
+ toolCall,
143
+ args: validatedArgs,
144
+ context: currentContext,
145
+ }, signal);
146
+ if (signal?.aborted) {
147
+ return {
148
+ kind: "immediate",
149
+ result: createErrorToolResult("Operation aborted"),
150
+ isError: true,
151
+ };
152
+ }
153
+ if (beforeResult?.block) {
154
+ return {
155
+ kind: "immediate",
156
+ result: createErrorToolResult(beforeResult.reason || "Tool execution was blocked"),
157
+ isError: true,
158
+ };
159
+ }
160
+ }
161
+ if (signal?.aborted) {
162
+ return {
163
+ kind: "immediate",
164
+ result: createErrorToolResult("Operation aborted"),
165
+ isError: true,
166
+ };
167
+ }
168
+ return {
169
+ kind: "prepared",
170
+ toolCall,
171
+ tool,
172
+ args: validatedArgs,
173
+ };
174
+ }
175
+ catch (error) {
176
+ return {
177
+ kind: "immediate",
178
+ result: createErrorToolResult(error instanceof Error ? error.message : String(error)),
179
+ isError: true,
180
+ };
181
+ }
182
+ }
183
+ async function executePreparedToolCall(prepared, signal, emit) {
184
+ const updateEvents = [];
185
+ try {
186
+ const result = await prepared.tool.execute(prepared.toolCall.id, prepared.args, signal, (partialResult) => {
187
+ updateEvents.push(Promise.resolve(emit({
188
+ type: "tool_execution_update",
189
+ toolCallId: prepared.toolCall.id,
190
+ toolName: prepared.toolCall.name,
191
+ args: prepared.toolCall.arguments,
192
+ partialResult,
193
+ })));
194
+ });
195
+ await Promise.all(updateEvents);
196
+ return { result, isError: false };
197
+ }
198
+ catch (error) {
199
+ await Promise.all(updateEvents);
200
+ if (isAgentToolSuspension(error))
201
+ throw error;
202
+ return {
203
+ result: createErrorToolResult(error instanceof Error ? error.message : String(error)),
204
+ isError: true,
205
+ };
206
+ }
207
+ }
208
+ async function finalizeExecutedToolCall(currentContext, assistantMessage, prepared, executed, config, signal) {
209
+ let result = executed.result;
210
+ let isError = executed.isError;
211
+ if (config.afterToolCall) {
212
+ try {
213
+ const afterResult = await config.afterToolCall({
214
+ assistantMessage,
215
+ toolCall: prepared.toolCall,
216
+ args: prepared.args,
217
+ result,
218
+ isError,
219
+ context: currentContext,
220
+ }, signal);
221
+ if (afterResult) {
222
+ result = {
223
+ content: afterResult.content ?? result.content,
224
+ details: afterResult.details ?? result.details,
225
+ terminate: afterResult.terminate ?? result.terminate,
226
+ };
227
+ isError = afterResult.isError ?? isError;
228
+ }
229
+ }
230
+ catch (error) {
231
+ result = createErrorToolResult(error instanceof Error ? error.message : String(error));
232
+ isError = true;
233
+ }
234
+ }
235
+ return {
236
+ toolCall: prepared.toolCall,
237
+ result,
238
+ isError,
239
+ };
240
+ }
241
+ function createErrorToolResult(message) {
242
+ return {
243
+ content: [{ type: "text", text: message }],
244
+ details: {},
245
+ };
246
+ }
247
+ async function emitToolExecutionEnd(finalized, emit) {
248
+ await emit({
249
+ type: "tool_execution_end",
250
+ toolCallId: finalized.toolCall.id,
251
+ toolName: finalized.toolCall.name,
252
+ result: finalized.result,
253
+ isError: finalized.isError,
254
+ });
255
+ }
256
+ function createToolResultMessage(finalized) {
257
+ return {
258
+ role: "toolResult",
259
+ toolCallId: finalized.toolCall.id,
260
+ toolName: finalized.toolCall.name,
261
+ content: finalized.result.content,
262
+ details: finalized.result.details,
263
+ isError: finalized.isError,
264
+ timestamp: Date.now(),
265
+ };
266
+ }
267
+ async function emitToolResultMessage(toolResultMessage, emit) {
268
+ await emit({ type: "message_start", message: toolResultMessage });
269
+ await emit({ type: "message_end", message: toolResultMessage });
270
+ }
271
+ //# sourceMappingURL=tool-execution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-execution.js","sourceRoot":"","sources":["../../../src/runtime/loop/tool-execution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { AgentContext, AgentLoopConfig, AgentMessage, StreamFn } from "../../types.js";
2
+ import type { AgentEventSink } from "./events.js";
3
+ /**
4
+ * Main loop logic shared by agentLoop and agentLoopContinue.
5
+ */
6
+ export declare function runLoop(initialContext: AgentContext, newMessages: AgentMessage[], initialConfig: AgentLoopConfig, signal: AbortSignal | undefined, emit: AgentEventSink, streamFn?: StreamFn): Promise<void>;
7
+ //# sourceMappingURL=turn-loop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turn-loop.d.ts","sourceRoot":"","sources":["../../../src/runtime/loop/turn-loop.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,QAAQ,EACT,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAIlD;;GAEG;AACH,wBAAsB,OAAO,CAC3B,cAAc,EAAE,YAAY,EAC5B,WAAW,EAAE,YAAY,EAAE,EAC3B,aAAa,EAAE,eAAe,EAC9B,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,IAAI,EAAE,cAAc,EACpB,QAAQ,CAAC,EAAE,QAAQ,GAClB,OAAO,CAAC,IAAI,CAAC,CAuGf"}
@@ -0,0 +1,84 @@
1
+ import { streamAssistantResponse } from "./stream-assistant.js";
2
+ import { executeToolCalls } from "./tool-execution.js";
3
+ /**
4
+ * Main loop logic shared by agentLoop and agentLoopContinue.
5
+ */
6
+ export async function runLoop(initialContext, newMessages, initialConfig, signal, emit, streamFn) {
7
+ let currentContext = initialContext;
8
+ let config = initialConfig;
9
+ let firstTurn = true;
10
+ let pendingMessages = (await config.getSteeringMessages?.()) || [];
11
+ while (true) {
12
+ if (!firstTurn) {
13
+ await emit({ type: "turn_start" });
14
+ }
15
+ else {
16
+ firstTurn = false;
17
+ }
18
+ if (pendingMessages.length > 0) {
19
+ for (const message of pendingMessages) {
20
+ await emit({ type: "message_start", message });
21
+ await emit({ type: "message_end", message });
22
+ currentContext.messages.push(message);
23
+ newMessages.push(message);
24
+ }
25
+ pendingMessages = [];
26
+ }
27
+ const message = await streamAssistantResponse(currentContext, config, signal, emit, streamFn);
28
+ newMessages.push(message);
29
+ if (message.stopReason === "error" || message.stopReason === "aborted") {
30
+ await emit({ type: "turn_end", message, toolResults: [] });
31
+ await emit({ type: "agent_end", messages: newMessages });
32
+ return;
33
+ }
34
+ const toolCalls = message.content.filter((c) => c.type === "toolCall");
35
+ const toolResults = [];
36
+ let hasMoreToolCalls = false;
37
+ if (toolCalls.length > 0) {
38
+ const executedToolBatch = await executeToolCalls(currentContext, message, config, signal, emit);
39
+ toolResults.push(...executedToolBatch.messages);
40
+ hasMoreToolCalls = !executedToolBatch.terminate;
41
+ for (const result of toolResults) {
42
+ currentContext.messages.push(result);
43
+ newMessages.push(result);
44
+ }
45
+ }
46
+ await emit({ type: "turn_end", message, toolResults });
47
+ const nextTurnContext = {
48
+ message,
49
+ toolResults,
50
+ context: currentContext,
51
+ newMessages,
52
+ };
53
+ const nextTurnSnapshot = await config.prepareNextTurn?.(nextTurnContext);
54
+ if (nextTurnSnapshot) {
55
+ currentContext = nextTurnSnapshot.context ?? currentContext;
56
+ config = {
57
+ ...config,
58
+ model: nextTurnSnapshot.model ?? config.model,
59
+ reasoning: nextTurnSnapshot.thinkingLevel === undefined
60
+ ? config.reasoning
61
+ : nextTurnSnapshot.thinkingLevel === "off"
62
+ ? undefined
63
+ : nextTurnSnapshot.thinkingLevel,
64
+ };
65
+ }
66
+ pendingMessages = (await config.getSteeringMessages?.()) || [];
67
+ if (pendingMessages.length > 0)
68
+ continue;
69
+ if (await config.shouldStopAfterTurn?.({
70
+ message,
71
+ toolResults,
72
+ context: currentContext,
73
+ newMessages,
74
+ })) {
75
+ await emit({ type: "agent_end", messages: newMessages });
76
+ return;
77
+ }
78
+ if (hasMoreToolCalls)
79
+ continue;
80
+ break;
81
+ }
82
+ await emit({ type: "agent_end", messages: newMessages });
83
+ }
84
+ //# sourceMappingURL=turn-loop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turn-loop.js","sourceRoot":"","sources":["../../../src/runtime/loop/turn-loop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ import { type AssistantMessageEvent, type Message, type Model } from "@earendil-works/pi-ai";
2
+ import type { ThinkingLevel } from "./types.js";
3
+ export interface AgentModelSelection {
4
+ provider: string;
5
+ modelId: string;
6
+ }
7
+ export interface AgentModelInfo extends AgentModelSelection {
8
+ name: string;
9
+ reasoning: boolean;
10
+ supportedThinkingLevels: ThinkingLevel[];
11
+ contextWindow: number;
12
+ maxOutputTokens: number;
13
+ }
14
+ /**
15
+ * A user-defined model (custom provider or manually-added model). The
16
+ * orchestrator owns persistence; the runtime turns these into pi-ai `Model`
17
+ * objects. Custom providers supply explicit connection settings; manual models
18
+ * under built-in providers can inherit settings from pi-ai's provider catalog.
19
+ */
20
+ export interface AgentCustomModel {
21
+ provider: string;
22
+ modelId: string;
23
+ name: string;
24
+ api?: string;
25
+ baseUrl?: string;
26
+ reasoning: boolean;
27
+ supportedThinkingLevels?: ThinkingLevel[];
28
+ thinkingLevelMap?: Record<string, string | null>;
29
+ input?: ("text" | "image")[];
30
+ cost?: {
31
+ input: number;
32
+ output: number;
33
+ cacheRead: number;
34
+ cacheWrite: number;
35
+ };
36
+ contextWindow?: number;
37
+ maxTokens?: number;
38
+ headers?: Record<string, string>;
39
+ compat?: Record<string, unknown>;
40
+ }
41
+ /**
42
+ * Register a source of user-defined models (custom providers / manual models).
43
+ * When set, resolution and listing functions consult it unless an explicit
44
+ * `customModels` argument is passed. The orchestrator wires this to its
45
+ * persisted provider catalog so unknown providers resolve correctly.
46
+ */
47
+ export declare function setCustomModelProvider(provider: (() => AgentCustomModel[]) | undefined): void;
48
+ export interface AgentPromptInput {
49
+ systemPrompt?: string;
50
+ messages: Message[];
51
+ model?: AgentModelSelection;
52
+ apiKey?: string;
53
+ headers?: Record<string, string>;
54
+ signal?: AbortSignal;
55
+ }
56
+ export declare function resolveAgentModel(selection?: AgentModelSelection, customModels?: AgentCustomModel[]): Model<string>;
57
+ export declare function getAgentModelInfo(model: Model<string>): AgentModelInfo;
58
+ /** Resolve the context window for a model selection (0 when unknown). */
59
+ export declare function getModelContextWindow(selection?: AgentModelSelection, customModels?: AgentCustomModel[]): number;
60
+ export declare function clampAgentThinkingLevel(selection: AgentModelSelection | undefined, requested: ThinkingLevel | undefined, customModels?: AgentCustomModel[]): ThinkingLevel;
61
+ export declare function streamAgentPrompt(input: AgentPromptInput): AsyncIterable<AssistantMessageEvent>;
62
+ export declare function listAvailableModels(customModels?: AgentCustomModel[]): AgentModelInfo[];
63
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,qBAAqB,EAS1B,KAAK,OAAO,EACZ,KAAK,KAAK,EAGX,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAe,SAAQ,mBAAmB;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,uBAAuB,EAAE,aAAa,EAAE,CAAC;IACzC,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,uBAAuB,CAAC,EAAE,aAAa,EAAE,CAAC;IAC1C,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IACjD,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC;IAC7B,IAAI,CAAC,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AA6CD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,CAAC,MAAM,gBAAgB,EAAE,CAAC,GAAG,SAAS,GAC/C,IAAI,CAEN;AA6BD,MAAM,WAAW,gBAAgB;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,mBAAmB,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAmED,wBAAgB,iBAAiB,CAC/B,SAAS,CAAC,EAAE,mBAAmB,EAC/B,YAAY,CAAC,EAAE,gBAAgB,EAAE,GAChC,KAAK,CAAC,MAAM,CAAC,CAEf;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,cAAc,CAYtE;AAED,yEAAyE;AACzE,wBAAgB,qBAAqB,CACnC,SAAS,CAAC,EAAE,mBAAmB,EAC/B,YAAY,CAAC,EAAE,gBAAgB,EAAE,GAChC,MAAM,CAIR;AAED,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,mBAAmB,GAAG,SAAS,EAC1C,SAAS,EAAE,aAAa,GAAG,SAAS,EACpC,YAAY,CAAC,EAAE,gBAAgB,EAAE,GAChC,aAAa,CAGf;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,gBAAgB,GACtB,aAAa,CAAC,qBAAqB,CAAC,CAYtC;AAgBD,wBAAgB,mBAAmB,CACjC,YAAY,CAAC,EAAE,gBAAgB,EAAE,GAChC,cAAc,EAAE,CAalB"}
@@ -0,0 +1,170 @@
1
+ import { clampThinkingLevel, fauxAssistantMessage, getModel, getModels, getProviders, getSupportedThinkingLevels, registerFauxProvider, streamSimple, } from "@earendil-works/pi-ai";
2
+ function templateForCustomModel(model) {
3
+ if (!isKnownProvider(model.provider))
4
+ return undefined;
5
+ return (getModel(model.provider, model.modelId) ??
6
+ getModels(model.provider)[0]);
7
+ }
8
+ function toPiModel(model) {
9
+ const template = model.api && model.baseUrl ? undefined : templateForCustomModel(model);
10
+ const api = model.api ?? template?.api;
11
+ const baseUrl = model.baseUrl ?? template?.baseUrl;
12
+ if (!api || !baseUrl)
13
+ return undefined;
14
+ return {
15
+ id: model.modelId,
16
+ name: model.name,
17
+ api,
18
+ provider: model.provider,
19
+ baseUrl,
20
+ reasoning: model.reasoning,
21
+ thinkingLevelMap: model.thinkingLevelMap ?? template?.thinkingLevelMap,
22
+ input: model.input ?? template?.input ?? ["text"],
23
+ cost: model.cost ??
24
+ template?.cost ?? {
25
+ input: 0,
26
+ output: 0,
27
+ cacheRead: 0,
28
+ cacheWrite: 0,
29
+ },
30
+ contextWindow: model.contextWindow ?? template?.contextWindow ?? 0,
31
+ maxTokens: model.maxTokens ?? template?.maxTokens ?? 0,
32
+ headers: { ...(template?.headers ?? {}), ...(model.headers ?? {}) },
33
+ compat: (model.compat ?? template?.compat),
34
+ };
35
+ }
36
+ let customModelProvider;
37
+ /**
38
+ * Register a source of user-defined models (custom providers / manual models).
39
+ * When set, resolution and listing functions consult it unless an explicit
40
+ * `customModels` argument is passed. The orchestrator wires this to its
41
+ * persisted provider catalog so unknown providers resolve correctly.
42
+ */
43
+ export function setCustomModelProvider(provider) {
44
+ customModelProvider = provider;
45
+ }
46
+ function activeCustomModels(explicit) {
47
+ return explicit ?? customModelProvider?.();
48
+ }
49
+ function findCustomModel(customModels, selection) {
50
+ if (!customModels || !selection)
51
+ return undefined;
52
+ return customModels.find((model) => model.provider === selection.provider &&
53
+ model.modelId === selection.modelId);
54
+ }
55
+ function customModelInfo(model) {
56
+ const resolved = toPiModel(model);
57
+ if (!resolved)
58
+ return undefined;
59
+ const info = getAgentModelInfo(resolved);
60
+ return model.supportedThinkingLevels
61
+ ? { ...info, supportedThinkingLevels: model.supportedThinkingLevels }
62
+ : info;
63
+ }
64
+ let fauxProvider;
65
+ const fauxResponseFactory = (context) => {
66
+ const latest = [...context.messages]
67
+ .reverse()
68
+ .find((message) => message.role === "user");
69
+ const prompt = latest ? userMessageText(latest) : "";
70
+ return fauxAssistantMessage([
71
+ "I’m the temporary Nerve agent runtime.",
72
+ "",
73
+ prompt
74
+ ? `I received your prompt: “${prompt.slice(0, 240)}${prompt.length > 240 ? "…" : ""}”`
75
+ : "I did not receive a user prompt.",
76
+ "",
77
+ "The orchestrator, HTTP API, WebSocket event stream, and prompt plumbing are connected. Real provider execution can use a configured model/API key; otherwise this faux model keeps local development deterministic.",
78
+ ].join("\n"));
79
+ };
80
+ function getFauxProvider() {
81
+ if (!fauxProvider) {
82
+ fauxProvider = registerFauxProvider({
83
+ provider: "nerve-faux",
84
+ models: [{ id: "faux-fast", name: "Nerve Faux Fast" }],
85
+ tokensPerSecond: 80,
86
+ tokenSize: { min: 10, max: 22 },
87
+ });
88
+ }
89
+ return fauxProvider;
90
+ }
91
+ function userMessageText(message) {
92
+ if (typeof message.content === "string")
93
+ return message.content;
94
+ return message.content
95
+ .filter((block) => block.type === "text")
96
+ .map((block) => block.text)
97
+ .join("\n");
98
+ }
99
+ function isKnownProvider(provider) {
100
+ return getProviders().includes(provider);
101
+ }
102
+ function resolveAgentModelInternal(selection, appendFauxResponse, customModels) {
103
+ const custom = findCustomModel(activeCustomModels(customModels), selection);
104
+ const customResolved = custom ? toPiModel(custom) : undefined;
105
+ if (customResolved)
106
+ return customResolved;
107
+ if (selection && isKnownProvider(selection.provider)) {
108
+ return getModel(selection.provider, selection.modelId);
109
+ }
110
+ const faux = getFauxProvider();
111
+ if (appendFauxResponse)
112
+ faux.appendResponses([fauxResponseFactory]);
113
+ return faux.getModel();
114
+ }
115
+ export function resolveAgentModel(selection, customModels) {
116
+ return resolveAgentModelInternal(selection, true, customModels);
117
+ }
118
+ export function getAgentModelInfo(model) {
119
+ return {
120
+ provider: model.provider,
121
+ modelId: model.id,
122
+ name: model.name || model.id,
123
+ reasoning: model.reasoning,
124
+ supportedThinkingLevels: getSupportedThinkingLevels(model),
125
+ contextWindow: model.contextWindow ?? 0,
126
+ maxOutputTokens: model.maxTokens ?? 0,
127
+ };
128
+ }
129
+ /** Resolve the context window for a model selection (0 when unknown). */
130
+ export function getModelContextWindow(selection, customModels) {
131
+ return (resolveAgentModelInternal(selection, false, customModels).contextWindow ?? 0);
132
+ }
133
+ export function clampAgentThinkingLevel(selection, requested, customModels) {
134
+ const model = resolveAgentModelInternal(selection, false, customModels);
135
+ return clampThinkingLevel(model, requested ?? "off");
136
+ }
137
+ export function streamAgentPrompt(input) {
138
+ const model = resolveAgentModel(input.model);
139
+ const context = {
140
+ systemPrompt: input.systemPrompt,
141
+ messages: input.messages,
142
+ };
143
+ return streamSimple(model, context, {
144
+ signal: input.signal,
145
+ apiKey: input.apiKey,
146
+ headers: input.headers,
147
+ maxTokens: 4096,
148
+ });
149
+ }
150
+ const COMPLETE_MODEL_LIST_PROVIDERS = new Set([
151
+ // Nerve supports Anthropic subscription OAuth, and newer Opus/Sonnet
152
+ // models sort after older Claude 3.x IDs. Truncating the provider list hides
153
+ // currently available subscription models such as claude-opus-4-8.
154
+ "anthropic",
155
+ ]);
156
+ function visibleModelsForProvider(provider) {
157
+ const models = getModels(provider);
158
+ return COMPLETE_MODEL_LIST_PROVIDERS.has(provider)
159
+ ? models
160
+ : models.slice(0, 8);
161
+ }
162
+ export function listAvailableModels(customModels) {
163
+ const faux = getFauxProvider().models.map((model) => getAgentModelInfo(model));
164
+ const configured = getProviders().flatMap((provider) => visibleModelsForProvider(provider).map((model) => getAgentModelInfo(model)));
165
+ const custom = (activeCustomModels(customModels) ?? [])
166
+ .map((model) => customModelInfo(model))
167
+ .filter((model) => Boolean(model));
168
+ return [...faux, ...configured, ...custom];
169
+ }
170
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { AssistantMessage } from "@earendil-works/pi-ai";
2
+ import type { AgentToolCall } from "./types.js";
3
+ export type AgentToolSuspensionData = {
4
+ toolCallId: string;
5
+ toolName: string;
6
+ reason: string;
7
+ assistantMessage?: AssistantMessage;
8
+ toolCall?: AgentToolCall;
9
+ remainingToolCalls?: AgentToolCall[];
10
+ };
11
+ export declare class AgentToolSuspension extends Error {
12
+ readonly kind = "agent_tool_suspension";
13
+ readonly data: AgentToolSuspensionData;
14
+ constructor(data: AgentToolSuspensionData);
15
+ withContext(patch: Partial<Pick<AgentToolSuspensionData, "assistantMessage" | "toolCall" | "remainingToolCalls">>): AgentToolSuspension;
16
+ }
17
+ export declare function isAgentToolSuspension(value: unknown): value is AgentToolSuspension;
18
+ //# sourceMappingURL=suspension.d.ts.map