@arden-hq/loop 0.0.0-stage → 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 (223) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +121 -2
  3. package/dist/abort.d.ts +9 -0
  4. package/dist/abort.d.ts.map +1 -0
  5. package/dist/abort.js +31 -0
  6. package/dist/abort.js.map +1 -0
  7. package/dist/agent/agent.d.ts +48 -0
  8. package/dist/agent/agent.d.ts.map +1 -0
  9. package/dist/agent/agent.js +146 -0
  10. package/dist/agent/agent.js.map +1 -0
  11. package/dist/agent/background-tools.d.ts +51 -0
  12. package/dist/agent/background-tools.d.ts.map +1 -0
  13. package/dist/agent/background-tools.js +257 -0
  14. package/dist/agent/background-tools.js.map +1 -0
  15. package/dist/agent/budget.d.ts +5 -0
  16. package/dist/agent/budget.d.ts.map +1 -0
  17. package/dist/agent/budget.js +48 -0
  18. package/dist/agent/budget.js.map +1 -0
  19. package/dist/agent/config.d.ts +61 -0
  20. package/dist/agent/config.d.ts.map +1 -0
  21. package/dist/agent/config.js +99 -0
  22. package/dist/agent/config.js.map +1 -0
  23. package/dist/agent/guards.d.ts +10 -0
  24. package/dist/agent/guards.d.ts.map +1 -0
  25. package/dist/agent/guards.js +136 -0
  26. package/dist/agent/guards.js.map +1 -0
  27. package/dist/agent/history-journal.d.ts +18 -0
  28. package/dist/agent/history-journal.d.ts.map +1 -0
  29. package/dist/agent/history-journal.js +87 -0
  30. package/dist/agent/history-journal.js.map +1 -0
  31. package/dist/agent/history-projection.d.ts +6 -0
  32. package/dist/agent/history-projection.d.ts.map +1 -0
  33. package/dist/agent/history-projection.js +62 -0
  34. package/dist/agent/history-projection.js.map +1 -0
  35. package/dist/agent/interactions.d.ts +14 -0
  36. package/dist/agent/interactions.d.ts.map +1 -0
  37. package/dist/agent/interactions.js +85 -0
  38. package/dist/agent/interactions.js.map +1 -0
  39. package/dist/agent/middleware.d.ts +5 -0
  40. package/dist/agent/middleware.d.ts.map +1 -0
  41. package/dist/agent/middleware.js +55 -0
  42. package/dist/agent/middleware.js.map +1 -0
  43. package/dist/agent/model-output-projection.d.ts +27 -0
  44. package/dist/agent/model-output-projection.d.ts.map +1 -0
  45. package/dist/agent/model-output-projection.js +138 -0
  46. package/dist/agent/model-output-projection.js.map +1 -0
  47. package/dist/agent/model-output.d.ts +19 -0
  48. package/dist/agent/model-output.d.ts.map +1 -0
  49. package/dist/agent/model-output.js +172 -0
  50. package/dist/agent/model-output.js.map +1 -0
  51. package/dist/agent/model-turn.d.ts +29 -0
  52. package/dist/agent/model-turn.d.ts.map +1 -0
  53. package/dist/agent/model-turn.js +401 -0
  54. package/dist/agent/model-turn.js.map +1 -0
  55. package/dist/agent/policy.d.ts +28 -0
  56. package/dist/agent/policy.d.ts.map +1 -0
  57. package/dist/agent/policy.js +109 -0
  58. package/dist/agent/policy.js.map +1 -0
  59. package/dist/agent/provider-capabilities.d.ts +12 -0
  60. package/dist/agent/provider-capabilities.d.ts.map +1 -0
  61. package/dist/agent/provider-capabilities.js +76 -0
  62. package/dist/agent/provider-capabilities.js.map +1 -0
  63. package/dist/agent/recovery.d.ts +8 -0
  64. package/dist/agent/recovery.d.ts.map +1 -0
  65. package/dist/agent/recovery.js +21 -0
  66. package/dist/agent/recovery.js.map +1 -0
  67. package/dist/agent/replies.d.ts +3 -0
  68. package/dist/agent/replies.d.ts.map +1 -0
  69. package/dist/agent/replies.js +24 -0
  70. package/dist/agent/replies.js.map +1 -0
  71. package/dist/agent/run-state.d.ts +98 -0
  72. package/dist/agent/run-state.d.ts.map +1 -0
  73. package/dist/agent/run-state.js +454 -0
  74. package/dist/agent/run-state.js.map +1 -0
  75. package/dist/agent/run.d.ts +6 -0
  76. package/dist/agent/run.d.ts.map +1 -0
  77. package/dist/agent/run.js +462 -0
  78. package/dist/agent/run.js.map +1 -0
  79. package/dist/agent/streamed-call-history.d.ts +20 -0
  80. package/dist/agent/streamed-call-history.d.ts.map +1 -0
  81. package/dist/agent/streamed-call-history.js +71 -0
  82. package/dist/agent/streamed-call-history.js.map +1 -0
  83. package/dist/agent/streaming-tools.d.ts +23 -0
  84. package/dist/agent/streaming-tools.d.ts.map +1 -0
  85. package/dist/agent/streaming-tools.js +67 -0
  86. package/dist/agent/streaming-tools.js.map +1 -0
  87. package/dist/agent/structured-output.d.ts +27 -0
  88. package/dist/agent/structured-output.d.ts.map +1 -0
  89. package/dist/agent/structured-output.js +26 -0
  90. package/dist/agent/structured-output.js.map +1 -0
  91. package/dist/agent/tool-admission.d.ts +18 -0
  92. package/dist/agent/tool-admission.d.ts.map +1 -0
  93. package/dist/agent/tool-admission.js +22 -0
  94. package/dist/agent/tool-admission.js.map +1 -0
  95. package/dist/contracts/events.d.ts +236 -0
  96. package/dist/contracts/events.d.ts.map +1 -0
  97. package/dist/contracts/events.js +13 -0
  98. package/dist/contracts/events.js.map +1 -0
  99. package/dist/contracts/messages.d.ts +234 -0
  100. package/dist/contracts/messages.d.ts.map +1 -0
  101. package/dist/contracts/messages.js +11 -0
  102. package/dist/contracts/messages.js.map +1 -0
  103. package/dist/contracts/provider.d.ts +177 -0
  104. package/dist/contracts/provider.d.ts.map +1 -0
  105. package/dist/contracts/provider.js +26 -0
  106. package/dist/contracts/provider.js.map +1 -0
  107. package/dist/contracts/tools.d.ts +217 -0
  108. package/dist/contracts/tools.d.ts.map +1 -0
  109. package/dist/contracts/tools.js +16 -0
  110. package/dist/contracts/tools.js.map +1 -0
  111. package/dist/errors.d.ts +112 -0
  112. package/dist/errors.d.ts.map +1 -0
  113. package/dist/errors.js +190 -0
  114. package/dist/errors.js.map +1 -0
  115. package/dist/index.d.ts +34 -0
  116. package/dist/index.d.ts.map +1 -0
  117. package/dist/index.js +20 -0
  118. package/dist/index.js.map +1 -0
  119. package/dist/internal/concurrency.d.ts +11 -0
  120. package/dist/internal/concurrency.d.ts.map +1 -0
  121. package/dist/internal/concurrency.js +86 -0
  122. package/dist/internal/concurrency.js.map +1 -0
  123. package/dist/internal/stream.d.ts +25 -0
  124. package/dist/internal/stream.d.ts.map +1 -0
  125. package/dist/internal/stream.js +97 -0
  126. package/dist/internal/stream.js.map +1 -0
  127. package/dist/internal/validate.d.ts +30 -0
  128. package/dist/internal/validate.d.ts.map +1 -0
  129. package/dist/internal/validate.js +480 -0
  130. package/dist/internal/validate.js.map +1 -0
  131. package/dist/providers/kit/errors.d.ts +40 -0
  132. package/dist/providers/kit/errors.d.ts.map +1 -0
  133. package/dist/providers/kit/errors.js +48 -0
  134. package/dist/providers/kit/errors.js.map +1 -0
  135. package/dist/providers/kit/index.d.ts +10 -0
  136. package/dist/providers/kit/index.d.ts.map +1 -0
  137. package/dist/providers/kit/index.js +10 -0
  138. package/dist/providers/kit/index.js.map +1 -0
  139. package/dist/providers/kit/retry.d.ts +43 -0
  140. package/dist/providers/kit/retry.d.ts.map +1 -0
  141. package/dist/providers/kit/retry.js +118 -0
  142. package/dist/providers/kit/retry.js.map +1 -0
  143. package/dist/providers/kit/sse.d.ts +22 -0
  144. package/dist/providers/kit/sse.d.ts.map +1 -0
  145. package/dist/providers/kit/sse.js +70 -0
  146. package/dist/providers/kit/sse.js.map +1 -0
  147. package/dist/providers/openai-responses/citations.d.ts +21 -0
  148. package/dist/providers/openai-responses/citations.d.ts.map +1 -0
  149. package/dist/providers/openai-responses/citations.js +65 -0
  150. package/dist/providers/openai-responses/citations.js.map +1 -0
  151. package/dist/providers/openai-responses/continuation.d.ts +19 -0
  152. package/dist/providers/openai-responses/continuation.d.ts.map +1 -0
  153. package/dist/providers/openai-responses/continuation.js +28 -0
  154. package/dist/providers/openai-responses/continuation.js.map +1 -0
  155. package/dist/providers/openai-responses/errors.d.ts +28 -0
  156. package/dist/providers/openai-responses/errors.d.ts.map +1 -0
  157. package/dist/providers/openai-responses/errors.js +103 -0
  158. package/dist/providers/openai-responses/errors.js.map +1 -0
  159. package/dist/providers/openai-responses/history.d.ts +8 -0
  160. package/dist/providers/openai-responses/history.d.ts.map +1 -0
  161. package/dist/providers/openai-responses/history.js +93 -0
  162. package/dist/providers/openai-responses/history.js.map +1 -0
  163. package/dist/providers/openai-responses/items.d.ts +106 -0
  164. package/dist/providers/openai-responses/items.d.ts.map +1 -0
  165. package/dist/providers/openai-responses/items.js +124 -0
  166. package/dist/providers/openai-responses/items.js.map +1 -0
  167. package/dist/providers/openai-responses/parameter-schema.d.ts +11 -0
  168. package/dist/providers/openai-responses/parameter-schema.d.ts.map +1 -0
  169. package/dist/providers/openai-responses/parameter-schema.js +186 -0
  170. package/dist/providers/openai-responses/parameter-schema.js.map +1 -0
  171. package/dist/providers/openai-responses/provider.d.ts +54 -0
  172. package/dist/providers/openai-responses/provider.d.ts.map +1 -0
  173. package/dist/providers/openai-responses/provider.js +270 -0
  174. package/dist/providers/openai-responses/provider.js.map +1 -0
  175. package/dist/providers/openai-responses/request.d.ts +41 -0
  176. package/dist/providers/openai-responses/request.d.ts.map +1 -0
  177. package/dist/providers/openai-responses/request.js +276 -0
  178. package/dist/providers/openai-responses/request.js.map +1 -0
  179. package/dist/providers/openai-responses/response.d.ts +7 -0
  180. package/dist/providers/openai-responses/response.d.ts.map +1 -0
  181. package/dist/providers/openai-responses/response.js +354 -0
  182. package/dist/providers/openai-responses/response.js.map +1 -0
  183. package/dist/providers/openai-responses/stored-items.d.ts +9 -0
  184. package/dist/providers/openai-responses/stored-items.d.ts.map +1 -0
  185. package/dist/providers/openai-responses/stored-items.js +133 -0
  186. package/dist/providers/openai-responses/stored-items.js.map +1 -0
  187. package/dist/providers/openai-responses/tool-search.d.ts +12 -0
  188. package/dist/providers/openai-responses/tool-search.d.ts.map +1 -0
  189. package/dist/providers/openai-responses/tool-search.js +68 -0
  190. package/dist/providers/openai-responses/tool-search.js.map +1 -0
  191. package/dist/providers/openai-responses/tools.d.ts +33 -0
  192. package/dist/providers/openai-responses/tools.d.ts.map +1 -0
  193. package/dist/providers/openai-responses/tools.js +53 -0
  194. package/dist/providers/openai-responses/tools.js.map +1 -0
  195. package/dist/providers/openai-responses/web-search.d.ts +5 -0
  196. package/dist/providers/openai-responses/web-search.d.ts.map +1 -0
  197. package/dist/providers/openai-responses/web-search.js +114 -0
  198. package/dist/providers/openai-responses/web-search.js.map +1 -0
  199. package/dist/providers/openai-responses/websocket.d.ts +29 -0
  200. package/dist/providers/openai-responses/websocket.d.ts.map +1 -0
  201. package/dist/providers/openai-responses/websocket.js +400 -0
  202. package/dist/providers/openai-responses/websocket.js.map +1 -0
  203. package/dist/tools/dispatch.d.ts +65 -0
  204. package/dist/tools/dispatch.d.ts.map +1 -0
  205. package/dist/tools/dispatch.js +536 -0
  206. package/dist/tools/dispatch.js.map +1 -0
  207. package/dist/tools/display-title.d.ts +18 -0
  208. package/dist/tools/display-title.d.ts.map +1 -0
  209. package/dist/tools/display-title.js +50 -0
  210. package/dist/tools/display-title.js.map +1 -0
  211. package/dist/tools/search.d.ts +36 -0
  212. package/dist/tools/search.d.ts.map +1 -0
  213. package/dist/tools/search.js +224 -0
  214. package/dist/tools/search.js.map +1 -0
  215. package/dist/tools/tool.d.ts +200 -0
  216. package/dist/tools/tool.d.ts.map +1 -0
  217. package/dist/tools/tool.js +275 -0
  218. package/dist/tools/tool.js.map +1 -0
  219. package/dist/tools/truncate.d.ts +18 -0
  220. package/dist/tools/truncate.d.ts.map +1 -0
  221. package/dist/tools/truncate.js +76 -0
  222. package/dist/tools/truncate.js.map +1 -0
  223. package/package.json +67 -4
@@ -0,0 +1,67 @@
1
+ import { canRunInBackground, mayEndTurn } from "../contracts/tools.js";
2
+ import { admitToolCalls, loadDeferredCalls } from "./tool-admission.js";
3
+ import { hookCall } from "./guards.js";
4
+ export const isBackgroundCall = (call, meta, mode) => call.argumentError === undefined &&
5
+ meta?.background === true &&
6
+ canRunInBackground(meta) &&
7
+ (mode === "message" || call.toolCall.async === true);
8
+ export class StreamingTools {
9
+ options;
10
+ ids = new Set();
11
+ pending = [];
12
+ constructor(options) {
13
+ this.options = options;
14
+ }
15
+ async start(raw, checkpoint) {
16
+ const { run, view } = this.options;
17
+ const meta = view.metas.get(raw.function.name);
18
+ if (mayEndTurn(meta) || this.ids.has(raw.id) || !(await this.options.canStart()))
19
+ return;
20
+ const { calls, deferredNames } = admitToolCalls({
21
+ rawCalls: [raw],
22
+ view,
23
+ displayTitle: run.wiring.toolset.displayTitle
24
+ });
25
+ const call = calls[0];
26
+ if (call === undefined)
27
+ return;
28
+ if (!(await run.budget.reserveToolCalls(1, run.wiring.config.maxToolCalls)))
29
+ return;
30
+ await loadDeferredCalls({
31
+ calls,
32
+ deferredNames,
33
+ load: (names) => run.wiring.toolset.load(names)
34
+ });
35
+ await checkpoint();
36
+ this.ids.add(raw.id);
37
+ if (isBackgroundCall(call, meta, view.asyncMode)) {
38
+ const output = await run.background.launch({
39
+ calls: [call],
40
+ metas: view.metas,
41
+ mode: view.asyncMode
42
+ });
43
+ if (output.completions.length > 0 || output.paused.length > 0)
44
+ this.pending.push(Promise.resolve({ kind: "completed", output, messages: [] }));
45
+ return;
46
+ }
47
+ const isolated = [...run.messages];
48
+ const offset = isolated.length;
49
+ this.pending.push(this.options.execute(call, isolated).then((output) => ({ kind: "completed", output, messages: isolated.slice(offset) }), (cause) => ({ kind: "failed", cause })));
50
+ }
51
+ async settle() {
52
+ const completions = [];
53
+ const paused = [];
54
+ for (const pending of this.pending) {
55
+ const settled = await pending;
56
+ if (settled.kind === "failed")
57
+ throw settled.cause;
58
+ this.options.run.messages.push(...settled.messages);
59
+ completions.push(...settled.output.completions);
60
+ paused.push(...settled.output.paused);
61
+ }
62
+ if (this.pending.length > 0)
63
+ await this.options.run.history.checkpoint((messages, change) => hookCall("onCheckpoint", () => this.options.run.wiring.hooks.onCheckpoint?.(messages, change)));
64
+ return { ids: this.ids, output: { completions, paused } };
65
+ }
66
+ }
67
+ //# sourceMappingURL=streaming-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming-tools.js","sourceRoot":"","sources":["../../src/agent/streaming-tools.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAClB,UAAU,EAGX,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAGtC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,IAAqB,EACrB,IAA0B,EAC1B,IAA0B,EACjB,EAAE,CACX,IAAI,CAAC,aAAa,KAAK,SAAS;IAChC,IAAI,EAAE,UAAU,KAAK,IAAI;IACzB,kBAAkB,CAAC,IAAI,CAAC;IACxB,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,IAAI,CAAC,CAAA;AAetD,MAAM,OAAO,cAAc;IAKN,OAAO;IAJT,GAAG,GAAG,IAAI,GAAG,EAAU,CAAA;IACvB,OAAO,GAA+B,EAAE,CAAA;IAEzD,YACmB,OAKhB;uBALgB,OAAO;IAMvB,CAAC;IAEJ,KAAK,CAAC,KAAK,CAAC,GAAa,EAAE,UAA+B;QACxD,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAA;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QAC9C,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YAAE,OAAM;QACxF,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,cAAc,CAAC;YAC9C,QAAQ,EAAE,CAAC,GAAG,CAAC;YACf,IAAI;YACJ,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY;SAC9C,CAAC,CAAA;QACF,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACrB,IAAI,IAAI,KAAK,SAAS;YAAE,OAAM;QAC9B,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAAE,OAAM;QACnF,MAAM,iBAAiB,CAAC;YACtB,KAAK;YACL,aAAa;YACb,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;SAChD,CAAC,CAAA;QACF,MAAM,UAAU,EAAE,CAAA;QAClB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACpB,IAAI,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACjD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;gBACzC,KAAK,EAAE,CAAC,IAAI,CAAC;gBACb,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI,EAAE,IAAI,CAAC,SAAS;aACrB,CAAC,CAAA;YACF,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;gBAC3D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;YACjF,OAAM;QACR,CAAC;QACD,MAAM,QAAQ,GAAG,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAA;QAClC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAA;QAC9B,IAAI,CAAC,OAAO,CAAC,IAAI,CACf,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,IAAI,CACvC,CAAC,MAAM,EAAc,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EACzF,CAAC,KAAc,EAAc,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAC5D,CACF,CAAA;IACH,CAAC;IAED,KAAK,CAAC,MAAM;QACV,MAAM,WAAW,GAAiD,EAAE,CAAA;QACpE,MAAM,MAAM,GAA4C,EAAE,CAAA;QAC1D,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAA;YAC7B,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ;gBAAE,MAAM,OAAO,CAAC,KAAK,CAAA;YAClD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;YACnD,WAAW,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;YAC/C,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QACvC,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YACzB,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAC7D,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE,CAC5B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAC/D,CACF,CAAA;QACH,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,CAAA;IAC3D,CAAC;CACF"}
@@ -0,0 +1,27 @@
1
+ import type { StandardSchemaV1 } from "../contracts/messages.js";
2
+ import type { JsonSchemaConverter } from "../tools/tool.js";
3
+ /**
4
+ * Structured output for one invocation. The JSON-Schema response format is
5
+ * carried to the provider on every model request of the run (a format only
6
+ * constrains emitted text, so tool-calling turns are unaffected); validation
7
+ * applies to the FINAL text turn only. On validation failure the loop makes
8
+ * ONE correction retry — a user message quoting the issues, then a re-run of
9
+ * the final turn — before failing with `StructuredOutputError`.
10
+ */
11
+ export interface AgentOutputOptions {
12
+ readonly schema: StandardSchemaV1;
13
+ /** Host-supplied Standard-Schema→JSON-Schema conversion (e.g. `z.toJSONSchema`). */
14
+ readonly toJsonSchema: JsonSchemaConverter;
15
+ /** Provider-facing schema name (default "output"). */
16
+ readonly name?: string;
17
+ }
18
+ export declare const formatIssues: (issues: ReadonlyArray<StandardSchemaV1.Issue>) => string;
19
+ export declare const correctionContent: (issues: ReadonlyArray<StandardSchemaV1.Issue>) => string;
20
+ type OutputValidation = {
21
+ readonly value: unknown;
22
+ } | {
23
+ readonly issues: ReadonlyArray<StandardSchemaV1.Issue>;
24
+ };
25
+ export declare const validateOutputText: (schema: StandardSchemaV1, text: string) => Promise<OutputValidation>;
26
+ export {};
27
+ //# sourceMappingURL=structured-output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structured-output.d.ts","sourceRoot":"","sources":["../../src/agent/structured-output.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAChE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAG3D;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAA;IACjC,oFAAoF;IACpF,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAAA;IAC1C,sDAAsD;IACtD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,eAAO,MAAM,YAAY,WAAY,aAAa,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAG,MAU9D,CAAA;AAEf,eAAO,MAAM,iBAAiB,WAAY,aAAa,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAG,MAG9B,CAAA;AAEpD,KAAK,gBAAgB,GACjB;IAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAA;CAAE,CAAA;AAE9D,eAAO,MAAM,kBAAkB,WACrB,gBAAgB,QAClB,MAAM,KACX,OAAO,CAAC,gBAAgB,CAU1B,CAAA"}
@@ -0,0 +1,26 @@
1
+ import { errorMessage } from "@arden-hq/std/errors";
2
+ export const formatIssues = (issues) => issues
3
+ .map((issue) => {
4
+ const path = (issue.path ?? [])
5
+ .map((segment) => String(typeof segment === "object" && segment !== null ? segment.key : segment))
6
+ .join(".");
7
+ return path.length > 0 ? `${path}: ${issue.message}` : issue.message;
8
+ })
9
+ .join("; ");
10
+ export const correctionContent = (issues) => "Your final answer must be a single JSON object matching the required output schema. " +
11
+ `It failed validation: ${formatIssues(issues) || "the value does not match the schema"}. ` +
12
+ "Reply again with only the corrected JSON object.";
13
+ export const validateOutputText = async (schema, text) => {
14
+ let parsed;
15
+ try {
16
+ parsed = JSON.parse(text);
17
+ }
18
+ catch (cause) {
19
+ return { issues: [{ message: `the final text is not valid JSON: ${errorMessage(cause)}` }] };
20
+ }
21
+ let validated = schema["~standard"].validate(parsed);
22
+ if (validated instanceof Promise)
23
+ validated = await validated;
24
+ return validated.issues === undefined ? { value: validated.value } : { issues: validated.issues };
25
+ };
26
+ //# sourceMappingURL=structured-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structured-output.js","sourceRoot":"","sources":["../../src/agent/structured-output.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAkBnD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAA6C,EAAU,EAAE,CACpF,MAAM;KACH,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;IACb,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;SAC5B,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CACf,MAAM,CAAC,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAChF;SACA,IAAI,CAAC,GAAG,CAAC,CAAA;IACZ,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAA;AACtE,CAAC,CAAC;KACD,IAAI,CAAC,IAAI,CAAC,CAAA;AAEf,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,MAA6C,EAAU,EAAE,CACzF,sFAAsF;IACtF,yBAAyB,YAAY,CAAC,MAAM,CAAC,IAAI,qCAAqC,IAAI;IAC1F,kDAAkD,CAAA;AAMpD,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EACrC,MAAwB,EACxB,IAAY,EACe,EAAE;IAC7B,IAAI,MAAe,CAAA;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,qCAAqC,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,CAAA;IAC9F,CAAC;IACD,IAAI,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IACpD,IAAI,SAAS,YAAY,OAAO;QAAE,SAAS,GAAG,MAAM,SAAS,CAAA;IAC7D,OAAO,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,CAAA;AACnG,CAAC,CAAA"}
@@ -0,0 +1,18 @@
1
+ import type { ProviderToolCall, ToolCall } from "../contracts/messages.js";
2
+ import type { PendingToolCall, ToolDisplayTitle, Toolset } from "../contracts/tools.js";
3
+ import type { StepView } from "./run-state.js";
4
+ export declare const admitToolCalls: ({ rawCalls, view, displayTitle }: {
5
+ readonly rawCalls: ReadonlyArray<ToolCall>;
6
+ readonly view: Pick<StepView, "tools" | "deferredTools">;
7
+ readonly displayTitle: ToolDisplayTitle | undefined;
8
+ }) => {
9
+ readonly calls: ReadonlyArray<PendingToolCall>;
10
+ readonly deferredNames: ReadonlySet<string>;
11
+ };
12
+ export declare const loadDeferredCalls: ({ calls, deferredNames, load, providerCalls }: {
13
+ readonly calls: ReadonlyArray<PendingToolCall>;
14
+ readonly deferredNames: ReadonlySet<string>;
15
+ readonly load: Toolset["load"];
16
+ readonly providerCalls?: ReadonlyArray<ProviderToolCall>;
17
+ }) => Promise<ReadonlySet<string>>;
18
+ //# sourceMappingURL=tool-admission.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-admission.d.ts","sourceRoot":"","sources":["../../src/agent/tool-admission.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAC1E,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAEvF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAE9C,eAAO,MAAM,cAAc,qCAIxB;IACD,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;IAC1C,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,eAAe,CAAC,CAAA;IACxD,QAAQ,CAAC,YAAY,EAAE,gBAAgB,GAAG,SAAS,CAAA;CACpD,KAAG;IACF,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,eAAe,CAAC,CAAA;IAC9C,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAY5C,CAAA;AAED,eAAO,MAAM,iBAAiB,kDAK3B;IACD,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,eAAe,CAAC,CAAA;IAC9C,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAC3C,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAA;CACzD,KAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAW9B,CAAA"}
@@ -0,0 +1,22 @@
1
+ import { gateUnavailableCalls, parseToolCalls } from "../tools/dispatch.js";
2
+ export const admitToolCalls = ({ rawCalls, view, displayTitle }) => {
3
+ const visible = view.tools.map((tool) => tool.name).sort();
4
+ const deferredNames = new Set(view.deferredTools.map((tool) => tool.name));
5
+ return {
6
+ calls: gateUnavailableCalls(parseToolCalls(rawCalls, displayTitle), new Set([...visible, ...deferredNames]), visible),
7
+ deferredNames
8
+ };
9
+ };
10
+ export const loadDeferredCalls = async ({ calls, deferredNames, load, providerCalls = [] }) => {
11
+ const loaded = new Set(calls.filter((call) => deferredNames.has(call.name)).map((call) => call.name));
12
+ for (const call of providerCalls) {
13
+ for (const name of call.loaded_tool_names ?? []) {
14
+ if (deferredNames.has(name))
15
+ loaded.add(name);
16
+ }
17
+ }
18
+ if (loaded.size > 0)
19
+ await load(loaded);
20
+ return loaded;
21
+ };
22
+ //# sourceMappingURL=tool-admission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-admission.js","sourceRoot":"","sources":["../../src/agent/tool-admission.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAG3E,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAC7B,QAAQ,EACR,IAAI,EACJ,YAAY,EAKb,EAGC,EAAE;IACF,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAA;IAC1D,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IAC1E,OAAO;QACL,KAAK,EAAE,oBAAoB,CACzB,cAAc,CAAC,QAAQ,EAAE,YAAY,CAAC,EACtC,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,aAAa,CAAC,CAAC,EACvC,OAAO,CACR;QACD,aAAa;KACd,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,EACtC,KAAK,EACL,aAAa,EACb,IAAI,EACJ,aAAa,GAAG,EAAE,EAMnB,EAAgC,EAAE;IACjC,MAAM,MAAM,GAAG,IAAI,GAAG,CACpB,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAC9E,CAAA;IACD,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,iBAAiB,IAAI,EAAE,EAAE,CAAC;YAChD,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC/C,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC;QAAE,MAAM,IAAI,CAAC,MAAM,CAAC,CAAA;IACvC,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
@@ -0,0 +1,236 @@
1
+ import type { AssistantTextPhase, ChatMessage, ContentBlock, JsonObject, MaybePromise, Metadata } from "./messages.js";
2
+ import type { CompletionResponse, Usage } from "./provider.js";
3
+ import type { HistoryChange } from "../agent/history-journal.js";
4
+ import type { HeldToolCall, PendingToolCall, ToolResult } from "./tools.js";
5
+ export declare const StopReason: {
6
+ readonly END_TURN: "end_turn";
7
+ readonly MAX_ITERATIONS: "max_iterations";
8
+ readonly MAX_TOOL_CALLS: "max_tool_calls";
9
+ readonly NO_PROGRESS: "no_progress";
10
+ readonly MAX_WALL_TIME: "max_wall_time";
11
+ readonly MAX_COST: "max_cost";
12
+ readonly MAX_TOKEN_BUDGET: "max_token_budget";
13
+ readonly MAX_OUTPUT_LENGTH: "max_output_length";
14
+ readonly CANCELLED: "cancelled";
15
+ readonly PAUSED: "paused";
16
+ };
17
+ export type StopReason = (typeof StopReason)[keyof typeof StopReason];
18
+ export interface EventBase {
19
+ readonly depth?: number;
20
+ readonly parent_id?: string | null;
21
+ readonly timestamp?: number;
22
+ }
23
+ export interface TextStarted extends EventBase {
24
+ readonly _tag: "TextStarted";
25
+ readonly message_id: string;
26
+ }
27
+ export interface TextEnded extends EventBase {
28
+ readonly _tag: "TextEnded";
29
+ readonly message_id: string;
30
+ readonly content: string;
31
+ }
32
+ export interface TextPhaseResolved extends EventBase {
33
+ readonly _tag: "TextPhaseResolved";
34
+ readonly message_id: string;
35
+ readonly phase: AssistantTextPhase;
36
+ }
37
+ export interface TextDelta extends EventBase {
38
+ readonly _tag: "TextDelta";
39
+ readonly content: string;
40
+ readonly message_id: string | null;
41
+ }
42
+ export interface ReasoningStarted extends EventBase {
43
+ readonly _tag: "ReasoningStarted";
44
+ readonly message_id: string;
45
+ }
46
+ export interface ReasoningDelta extends EventBase {
47
+ readonly _tag: "ReasoningDelta";
48
+ readonly message_id: string;
49
+ readonly content: string;
50
+ }
51
+ export interface ReasoningEnded extends EventBase {
52
+ readonly _tag: "ReasoningEnded";
53
+ readonly message_id: string;
54
+ }
55
+ export interface ModelStreamRetry extends EventBase {
56
+ readonly _tag: "ModelStreamRetry";
57
+ /** 1-based transport attempt that just failed. */
58
+ readonly attempt: number;
59
+ /** Total attempts before the failure stands and the run fails. */
60
+ readonly max_attempts: number;
61
+ }
62
+ /**
63
+ * The run took an owner message into its history: its first step started on
64
+ * one, or a step boundary drained a new one. Live status only, never persisted.
65
+ * Whatever the model does next (a tool call, answer text) is the reply.
66
+ */
67
+ export interface InputTaken extends EventBase {
68
+ readonly _tag: "InputTaken";
69
+ }
70
+ export interface ModelResponseReset extends EventBase {
71
+ readonly _tag: "ModelResponseReset";
72
+ readonly message_ids: ReadonlyArray<string>;
73
+ readonly tool_call_ids: ReadonlyArray<string>;
74
+ }
75
+ /**
76
+ * The final-text check (`hooks.checkFinalText`) rejected the run's answer:
77
+ * Loop appended the correction and the model writes the answer again. The
78
+ * rejected answer's records stay in this run's history, so the model sees
79
+ * what it fixes; a host may drop them, and the correction, once the new
80
+ * answer stands.
81
+ */
82
+ export interface FinalTextSuperseded extends EventBase {
83
+ readonly _tag: "FinalTextSuperseded";
84
+ /** The assistant records of the model call that wrote the rejected answer. */
85
+ readonly message_ids: ReadonlyArray<string>;
86
+ /** The meta user message that carries the correction. */
87
+ readonly correction_message_id: string;
88
+ }
89
+ export interface ToolInputStarted extends EventBase {
90
+ readonly _tag: "ToolInputStarted";
91
+ readonly tool_id: string;
92
+ readonly name: string;
93
+ readonly host: Metadata;
94
+ }
95
+ export interface ToolInputDelta extends EventBase {
96
+ readonly _tag: "ToolInputDelta";
97
+ readonly tool_id: string;
98
+ readonly delta: string;
99
+ }
100
+ export interface ToolInputEnded extends EventBase {
101
+ readonly _tag: "ToolInputEnded";
102
+ readonly tool_id: string;
103
+ }
104
+ export interface ToolStarted extends EventBase {
105
+ readonly _tag: "ToolStarted";
106
+ readonly tool_id: string;
107
+ readonly name: string;
108
+ readonly args: Readonly<Record<string, unknown>>;
109
+ readonly host: Metadata;
110
+ readonly execution?: "runtime" | "provider";
111
+ }
112
+ export interface ToolPaused extends EventBase {
113
+ readonly _tag: "ToolPaused";
114
+ readonly tool_id: string;
115
+ readonly name: string;
116
+ readonly args: Readonly<Record<string, unknown>>;
117
+ readonly reason: string;
118
+ readonly detail: string;
119
+ }
120
+ /**
121
+ * A live progress update emitted by a running tool via `ToolContext.emit`.
122
+ * Streamed between ToolStarted and ToolCompleted in emission order and never
123
+ * persisted to history. Parallel tools interleave their progress events.
124
+ */
125
+ export interface ToolProgress extends EventBase {
126
+ readonly _tag: "ToolProgress";
127
+ readonly tool_call_id: string;
128
+ readonly name: string;
129
+ readonly message: string;
130
+ readonly data?: Readonly<Record<string, unknown>>;
131
+ }
132
+ export interface ToolCompleted extends EventBase {
133
+ readonly _tag: "ToolCompleted";
134
+ readonly tool_id: string;
135
+ readonly name: string;
136
+ readonly result: string;
137
+ readonly preview: string;
138
+ readonly duration_ms: number;
139
+ readonly is_error: boolean;
140
+ readonly data: JsonObject | null;
141
+ readonly retryable: boolean | null;
142
+ readonly message_extras: Metadata;
143
+ readonly host: Metadata;
144
+ readonly execution?: "runtime" | "provider";
145
+ readonly model_content: ReadonlyArray<ContentBlock>;
146
+ readonly ends_turn: boolean;
147
+ }
148
+ export type AgentEvent = TextStarted | TextEnded | TextPhaseResolved | TextDelta | ReasoningStarted | ReasoningDelta | ReasoningEnded | ModelStreamRetry | InputTaken | ModelResponseReset | FinalTextSuperseded | ToolInputStarted | ToolInputDelta | ToolInputEnded | ToolStarted | ToolProgress | ToolPaused | ToolCompleted;
149
+ export interface PendingToolRequest {
150
+ readonly tool_call_id: string;
151
+ readonly name: string;
152
+ readonly args: Readonly<Record<string, unknown>>;
153
+ readonly reason: string;
154
+ readonly detail: string;
155
+ }
156
+ /** The terminal stream value. Deliberately tag-less: hosts discriminate via `"_tag" in event`. */
157
+ export interface Result {
158
+ readonly text: string;
159
+ /** Parsed structured output; present only when the run validated an `output` schema. */
160
+ readonly object?: unknown;
161
+ readonly stop_reason: StopReason;
162
+ readonly steps: number;
163
+ readonly usage: Usage;
164
+ readonly last_input_tokens: number | null;
165
+ readonly cost: number;
166
+ readonly duration_ms: number;
167
+ readonly tool_time_ms: number;
168
+ readonly paused_tools: ReadonlyArray<PendingToolRequest>;
169
+ readonly messages: ReadonlyArray<ChatMessage>;
170
+ }
171
+ export type AgentStreamEvent = AgentEvent | Result;
172
+ export interface AgentHooks {
173
+ /** Persist pending-call identity before background execution starts. */
174
+ readonly onCheckpoint?: (messages: ReadonlyArray<ChatMessage>, change: HistoryChange) => MaybePromise<void>;
175
+ readonly onResponse?: (response: CompletionResponse, messages: ReadonlyArray<ChatMessage>, change: HistoryChange) => MaybePromise<void>;
176
+ readonly onStepFinish?: (step: number, response: CompletionResponse | null, messages: ReadonlyArray<ChatMessage>, change: HistoryChange) => MaybePromise<void>;
177
+ readonly onError?: (cause: unknown) => MaybePromise<void>;
178
+ readonly onFinish?: (text: string, steps: number, messages: ReadonlyArray<ChatMessage>) => MaybePromise<void>;
179
+ /** Non-consuming input admission check. Excludes background completion notifications. */
180
+ readonly hasPendingInput?: () => MaybePromise<boolean>;
181
+ /**
182
+ * Which user messages a person wrote, for `InputTaken`. Defaults to
183
+ * `isHumanMessage` (no harness or agent interaction, not meta). A host that
184
+ * also feeds plain user messages that no person typed (a headless client)
185
+ * narrows it.
186
+ */
187
+ readonly isOwnerMessage?: (message: ChatMessage) => boolean;
188
+ readonly getPendingMessages?: () => MaybePromise<ReadonlyArray<ChatMessage>>;
189
+ /**
190
+ * Resolves when input may be waiting for `getPendingMessages`. Loop races it
191
+ * against background calls it waits on, so a message steers the run while a
192
+ * long call keeps running. Stop listening when `signal` aborts.
193
+ */
194
+ readonly waitForPendingMessages?: (signal: AbortSignal) => Promise<void>;
195
+ readonly recoverToolCalls?: (calls: ReadonlyArray<PendingToolCall>) => MaybePromise<ReadonlyMap<string, ToolResult>>;
196
+ /**
197
+ * A pause leaves the run's background calls running. The host keeps them,
198
+ * keyed by call id, so a resumed run can claim them and a stop of the run
199
+ * (cancel, delete) can still abort them through `stop`.
200
+ */
201
+ readonly holdBackgroundCalls?: (calls: ReadonlyArray<HeldToolCall>) => MaybePromise<void>;
202
+ /**
203
+ * The resumed run's pending background calls still alive in this process,
204
+ * from what `holdBackgroundCalls` kept. A claimed call is waited on and
205
+ * delivered, never recovered as uncertain; the rest go to `recoverToolCalls`.
206
+ */
207
+ readonly claimBackgroundCalls?: (toolCallIds: ReadonlyArray<string>) => MaybePromise<ReadonlyMap<string, HeldToolCall>>;
208
+ /**
209
+ * Checks the run's final text before the run ends. A returned string is a
210
+ * correction: Loop appends it as a meta user message and the model writes
211
+ * its final answer again. Called at most once per run; the second answer
212
+ * stands whatever it holds.
213
+ */
214
+ readonly checkFinalText?: (text: string) => MaybePromise<string | undefined>;
215
+ }
216
+ export interface RunBudgetSnapshot {
217
+ readonly toolCalls: number;
218
+ readonly outputTokens: number;
219
+ readonly totalOutputTokens?: number;
220
+ }
221
+ export interface RunBudget {
222
+ readonly snapshot: () => MaybePromise<RunBudgetSnapshot>;
223
+ readonly reserveToolCalls: (count: number, limit?: number) => MaybePromise<boolean>;
224
+ readonly addOutputTokens: (count: number) => MaybePromise<RunBudgetSnapshot>;
225
+ }
226
+ export interface RunBudgetOptions {
227
+ readonly toolCalls?: number;
228
+ readonly outputTokens?: number;
229
+ readonly totalOutputTokens?: number;
230
+ }
231
+ export interface RunPolicy {
232
+ readonly finalizeInstruction?: string;
233
+ readonly fallbackResultText?: (messages: ReadonlyArray<ChatMessage>, reason: StopReason) => string;
234
+ readonly budgetDenialContent?: (reason: StopReason) => string;
235
+ }
236
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/contracts/events.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export const StopReason = {
2
+ END_TURN: "end_turn",
3
+ MAX_ITERATIONS: "max_iterations",
4
+ MAX_TOOL_CALLS: "max_tool_calls",
5
+ NO_PROGRESS: "no_progress",
6
+ MAX_WALL_TIME: "max_wall_time",
7
+ MAX_COST: "max_cost",
8
+ MAX_TOKEN_BUDGET: "max_token_budget",
9
+ MAX_OUTPUT_LENGTH: "max_output_length",
10
+ CANCELLED: "cancelled",
11
+ PAUSED: "paused"
12
+ };
13
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/contracts/events.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,QAAQ,EAAE,UAAU;IACpB,cAAc,EAAE,gBAAgB;IAChC,cAAc,EAAE,gBAAgB;IAChC,WAAW,EAAE,aAAa;IAC1B,aAAa,EAAE,eAAe;IAC9B,QAAQ,EAAE,UAAU;IACpB,gBAAgB,EAAE,kBAAkB;IACpC,iBAAiB,EAAE,mBAAmB;IACtC,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,QAAQ;CACR,CAAA"}