@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,275 @@
1
+ import { PauseRequested, ToolExecutionError } from "../errors.js";
2
+ import { canRunInBackground } from "../contracts/tools.js";
3
+ import { normalizeToolResult } from "../internal/validate.js";
4
+ import { withToolDisplayTitleParameter } from "./display-title.js";
5
+ import { truncateToolResult } from "./truncate.js";
6
+ import { errorMessage } from "@arden-hq/std/errors";
7
+ /**
8
+ * The ONE place the converter's contravariant `never` parameter is bridged to
9
+ * a real schema — internally the loop only hands it schemas the host itself
10
+ * registered, so the cast is honest here and nowhere else.
11
+ */
12
+ export const applyJsonSchemaConverter = (converter, schema) => converter(schema);
13
+ const pathKey = (segment) => typeof segment === "object" ? segment.key : segment;
14
+ const withoutRefusedNulls = (value, issues) => issues.reduce((current, issue) => {
15
+ const path = (issue.path ?? []).map(pathKey);
16
+ return path.length === 0 ? current : removeNullAt(current, path);
17
+ }, value);
18
+ const removeNullAt = (value, path) => {
19
+ const [head, ...rest] = path;
20
+ if (value === null || typeof value !== "object" || head === undefined)
21
+ return value;
22
+ if (Array.isArray(value)) {
23
+ const index = typeof head === "number" ? head : Number(head);
24
+ if (!Number.isInteger(index) || rest.length === 0)
25
+ return value;
26
+ const item = removeNullAt(value[index], rest);
27
+ return item === value[index] ? value : value.map((entry, at) => (at === index ? item : entry));
28
+ }
29
+ const entries = Object.entries(value);
30
+ const found = entries.find(([key]) => key === String(head));
31
+ if (found === undefined)
32
+ return value;
33
+ if (rest.length === 0)
34
+ return found[1] === null
35
+ ? Object.fromEntries(entries.filter(([key]) => key !== found[0]))
36
+ : value;
37
+ const field = removeNullAt(found[1], rest);
38
+ return field === found[1]
39
+ ? value
40
+ : Object.fromEntries(entries.map(([key, entry]) => [key, key === found[0] ? field : entry]));
41
+ };
42
+ /** `data.outcome` of a call its schema rejected: the tool never ran. */
43
+ export const INVALID_ARGUMENTS_OUTCOME = "invalid_arguments";
44
+ const invalidArgumentsResult = (name, issues) => {
45
+ const detail = issues
46
+ .map((issue) => {
47
+ const path = (issue.path ?? [])
48
+ .map((segment) => String(typeof segment === "object" && segment !== null ? segment.key : segment))
49
+ .join(".");
50
+ return path.length > 0 ? `${path}: ${issue.message}` : issue.message;
51
+ })
52
+ .join("; ");
53
+ return normalizeToolResult({
54
+ content: `The ${name} tool was called with invalid arguments: ${detail || "the input does not match the schema"}. ` +
55
+ "Rewrite the input so it satisfies the schema and retry the tool call.",
56
+ preview: "Invalid tool arguments",
57
+ is_error: true,
58
+ retryable: false,
59
+ data: { outcome: INVALID_ARGUMENTS_OUTCOME }
60
+ });
61
+ };
62
+ const toMeta = (definition) => {
63
+ const metadata = definition.metadata;
64
+ return {
65
+ name: definition.name,
66
+ ...(metadata.background === true ? { background: true } : {}),
67
+ ...(metadata.detached === true ? { detached: true } : {}),
68
+ ...(metadata.hosted === true ? { hosted: true } : {}),
69
+ changes_state: metadata.changes_state ?? false,
70
+ concurrency_group: metadata.concurrency_group ?? null,
71
+ ends_turn: metadata.ends_turn ?? false,
72
+ deferred: metadata.deferred ?? false,
73
+ ...(metadata.group === undefined ? {} : { group: metadata.group }),
74
+ ...(metadata.input_sources === undefined ? {} : { input_sources: metadata.input_sources }),
75
+ host: hostRecord(metadata)
76
+ };
77
+ };
78
+ const hostRecord = (metadata) => ({ ...metadata });
79
+ const outputToResult = (output) => {
80
+ const value = typeof output === "string" ? { result: output } : output;
81
+ if (typeof value !== "object" || value === null || typeof value.result !== "string") {
82
+ throw new TypeError("tool execute must return a string or a { result } object");
83
+ }
84
+ return normalizeToolResult({
85
+ content: value.result,
86
+ preview: value.preview ?? value.result,
87
+ ...(value.data === undefined ? {} : { data: value.data }),
88
+ ...(value.host === undefined ? {} : { host: value.host }),
89
+ ...(value.model_content === undefined ? {} : { model_content: value.model_content })
90
+ });
91
+ };
92
+ const pauseUntilApproved = async (call, execute) => {
93
+ const { definition, input, ctx } = call;
94
+ const required = definition.approvalRequirement === undefined
95
+ ? undefined
96
+ : await definition.approvalRequirement(input, ctx);
97
+ if (ctx.approval !== undefined || (required === undefined && call.decision !== "ask"))
98
+ return execute(ctx);
99
+ const prompt = required ??
100
+ (definition.approvalPrompt === undefined
101
+ ? { preview: definition.description }
102
+ : await definition.approvalPrompt(input, ctx));
103
+ throw new PauseRequested("approval", prompt.preview, prompt);
104
+ };
105
+ /** Wrap one co-located definition with validation and approval gating. */
106
+ export const createTool = (definition) => {
107
+ if (typeof definition.name !== "string" || definition.name.length === 0) {
108
+ throw new TypeError("createTool requires a non-empty name");
109
+ }
110
+ if (typeof definition.metadata !== "object" || definition.metadata === null) {
111
+ throw new TypeError(`createTool(${definition.name}) requires a metadata object`);
112
+ }
113
+ if (typeof definition.parameters?.["~standard"]?.validate !== "function") {
114
+ throw new TypeError(`createTool(${definition.name}) requires Standard Schema parameters`);
115
+ }
116
+ if (definition.metadata.background === true && !canRunInBackground(definition.metadata)) {
117
+ throw new TypeError(`createTool(${definition.name}): hosted, turn-ending and detached tools cannot run in the background`);
118
+ }
119
+ const erased = definition;
120
+ const execute = async (args, ctx, options = {}) => {
121
+ const sent = ctx.approval?.edited?.arguments ?? args;
122
+ const validate = async (value) => await definition.parameters["~standard"].validate(value);
123
+ let validated = await validate(sent);
124
+ if (validated.issues !== undefined) {
125
+ const absent = withoutRefusedNulls(sent, validated.issues);
126
+ if (absent !== sent) {
127
+ const retried = await validate(absent);
128
+ if (retried.issues === undefined)
129
+ validated = retried;
130
+ }
131
+ }
132
+ if (validated.issues !== undefined) {
133
+ return invalidArgumentsResult(definition.name, validated.issues);
134
+ }
135
+ const input = validated.value;
136
+ const gate = options.gate ?? pauseUntilApproved;
137
+ options.phase?.("waiting");
138
+ return gate({
139
+ definition: erased,
140
+ input,
141
+ ctx,
142
+ decision: options.decision ?? (definition.metadata.approval === "ask" ? "ask" : "approve")
143
+ }, async (callCtx) => {
144
+ const refusal = await options.beforeExecute?.();
145
+ if (refusal !== undefined)
146
+ return normalizeToolResult(refusal);
147
+ options.phase?.("executing");
148
+ return outputToResult(await definition.execute(input, callCtx));
149
+ });
150
+ };
151
+ return Object.freeze({
152
+ definition: erased,
153
+ entry: (toJsonSchema, displayTitle) => {
154
+ const parameters = definition.parameterJsonSchema ??
155
+ applyJsonSchemaConverter(toJsonSchema, definition.parameters);
156
+ return {
157
+ description: definition.description,
158
+ parameters: displayTitle === undefined
159
+ ? parameters
160
+ : withToolDisplayTitleParameter(parameters, definition.name, displayTitle),
161
+ meta: toMeta(erased)
162
+ };
163
+ },
164
+ execute
165
+ });
166
+ };
167
+ const defaultExecuteError = (error, request) => new ToolExecutionError(errorMessage(error), {
168
+ diagnosticRef: `tool-call:${request.toolCallId}`,
169
+ retryable: null
170
+ });
171
+ const neverAborted = new AbortController().signal;
172
+ /**
173
+ * Bind a tool list into a per-run Toolset. The returned factory replaces
174
+ * per-call dependency provisioning: call it once per run with the typed run
175
+ * context.
176
+ */
177
+ export const createToolset = (tools, options) => {
178
+ if (typeof options?.toJsonSchema !== "function") {
179
+ throw new TypeError("createToolset requires a toJsonSchema converter");
180
+ }
181
+ const byName = new Map();
182
+ for (const tool of tools) {
183
+ if (byName.has(tool.definition.name)) {
184
+ throw new TypeError(`createToolset received duplicate tool name: ${tool.definition.name}`);
185
+ }
186
+ byName.set(tool.definition.name, tool);
187
+ }
188
+ const truncate = options.truncate;
189
+ if (truncate !== undefined) {
190
+ truncateToolResult("", truncate);
191
+ }
192
+ const applyTruncation = (result) => {
193
+ if (truncate === undefined)
194
+ return result;
195
+ const content = truncateToolResult(result.content, truncate);
196
+ return content === result.content ? result : { ...result, content };
197
+ };
198
+ const scope = options.scope === undefined ? null : new Set(options.scope);
199
+ const displayTitle = options.displayTitle;
200
+ const allEntries = tools.map((tool) => tool.entry(options.toJsonSchema, displayTitle));
201
+ const entries = scope === null ? allEntries : allEntries.filter((entry) => scope.has(entry.meta.name));
202
+ const metas = new Map(allEntries.map((entry) => [entry.meta.name, entry.meta]));
203
+ const entryNames = entries.map((entry) => entry.meta.name);
204
+ const onExecuteError = options.onExecuteError ?? defaultExecuteError;
205
+ const approvals = options.approvals;
206
+ return (run) => {
207
+ const loaded = new Set();
208
+ return {
209
+ ...(displayTitle === undefined ? {} : { displayTitle }),
210
+ entries: approvals === undefined
211
+ ? () => entries
212
+ : async () => {
213
+ const decisions = await approvals(run, entryNames);
214
+ return entries.filter((entry) => decisions[entry.meta.name] !== "deny");
215
+ },
216
+ metadata: (name) => metas.get(name),
217
+ loadedNames: () => new Set(loaded),
218
+ load: (names) => {
219
+ for (const name of names)
220
+ if (byName.has(name))
221
+ loaded.add(name);
222
+ },
223
+ seedLoadedNames: (names) => {
224
+ for (const name of names)
225
+ if (byName.has(name))
226
+ loaded.add(name);
227
+ },
228
+ execute: async (request) => {
229
+ const tool = byName.get(request.name);
230
+ if (tool === undefined) {
231
+ throw new ToolExecutionError(`Tool '${request.name}' does not exist in this toolset.`, {
232
+ retryable: false
233
+ });
234
+ }
235
+ try {
236
+ if (scope !== null && !scope.has(request.name)) {
237
+ throw new ToolExecutionError(options.refusal?.(request.name, "scope") ??
238
+ `Tool is outside this run's scope: ${request.name}`, { preview: "Tool out of scope", retryable: false });
239
+ }
240
+ const approvalDecision = approvals === undefined
241
+ ? undefined
242
+ : ((await approvals(run, [request.name]))[request.name] ?? "approve");
243
+ if (approvalDecision === "deny") {
244
+ throw new ToolExecutionError(options.refusal?.(request.name, "denied") ??
245
+ `Tool denied by settings: ${request.name}`, { preview: "Not allowed here", retryable: false });
246
+ }
247
+ return applyTruncation(await tool.execute(request.args, {
248
+ toolCallId: request.toolCallId,
249
+ signal: request.signal ?? neverAborted,
250
+ ...(request.approval === undefined ? {} : { approval: request.approval }),
251
+ run,
252
+ messages: request.messages ?? [],
253
+ ...(request.beforeExecute === undefined
254
+ ? {}
255
+ : { beforeExecute: request.beforeExecute }),
256
+ ...(request.emit === undefined ? {} : { emit: request.emit })
257
+ }, {
258
+ ...(approvalDecision === undefined ? {} : { decision: approvalDecision }),
259
+ ...(options.approvalGate === undefined ? {} : { gate: options.approvalGate }),
260
+ ...(request.beforeExecute === undefined
261
+ ? {}
262
+ : { beforeExecute: request.beforeExecute }),
263
+ ...(request.phase === undefined ? {} : { phase: request.phase })
264
+ }));
265
+ }
266
+ catch (cause) {
267
+ if (cause instanceof PauseRequested || cause instanceof ToolExecutionError)
268
+ throw cause;
269
+ throw onExecuteError(cause, request);
270
+ }
271
+ }
272
+ };
273
+ };
274
+ };
275
+ //# sourceMappingURL=tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool.js","sourceRoot":"","sources":["../../src/tools/tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /** The helper is pure — text in, text out. */
2
+ export declare const DEFAULT_TRUNCATE_MAX_BYTES: number;
3
+ export declare const DEFAULT_TRUNCATE_MAX_LINES = 2000;
4
+ export interface TruncateToolResultOptions {
5
+ /** UTF-8 byte cap for the kept text (default 51200). */
6
+ readonly maxBytes?: number;
7
+ /** Line cap for the kept text (default 2000). */
8
+ readonly maxLines?: number;
9
+ }
10
+ /**
11
+ * Truncate one tool result's model-facing text to the byte/line caps. Text
12
+ * within both caps returns unchanged. Oversized text keeps its head and tail
13
+ * (half the budget each) around an elision notice naming how many lines and
14
+ * bytes were cut — both ends usually matter (the command echo and the final
15
+ * error), which is why this keeps head+tail where opencode keeps one end.
16
+ */
17
+ export declare const truncateToolResult: (text: string, options?: TruncateToolResultOptions) => string;
18
+ //# sourceMappingURL=truncate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"truncate.d.ts","sourceRoot":"","sources":["../../src/tools/truncate.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAI9C,eAAO,MAAM,0BAA0B,QAAY,CAAA;AACnD,eAAO,MAAM,0BAA0B,OAAQ,CAAA;AAE/C,MAAM,WAAW,yBAAyB;IACxC,wDAAwD;IACxD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,iDAAiD;IACjD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAC3B;AAQD;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,SACvB,MAAM,YACH,yBAAyB,KACjC,MA8DF,CAAA"}
@@ -0,0 +1,76 @@
1
+ /** The helper is pure — text in, text out. */
2
+ import { utf8Prefix, utf8Suffix } from "@arden-hq/std/text";
3
+ export const DEFAULT_TRUNCATE_MAX_BYTES = 50 * 1024;
4
+ export const DEFAULT_TRUNCATE_MAX_LINES = 2_000;
5
+ const encoder = new TextEncoder();
6
+ const bytesOf = (text) => encoder.encode(text).length;
7
+ const positiveInteger = (value) => Number.isSafeInteger(value) && value >= 1;
8
+ /**
9
+ * Truncate one tool result's model-facing text to the byte/line caps. Text
10
+ * within both caps returns unchanged. Oversized text keeps its head and tail
11
+ * (half the budget each) around an elision notice naming how many lines and
12
+ * bytes were cut — both ends usually matter (the command echo and the final
13
+ * error), which is why this keeps head+tail where opencode keeps one end.
14
+ */
15
+ export const truncateToolResult = (text, options = {}) => {
16
+ const maxBytes = options.maxBytes ?? DEFAULT_TRUNCATE_MAX_BYTES;
17
+ const maxLines = options.maxLines ?? DEFAULT_TRUNCATE_MAX_LINES;
18
+ if (!positiveInteger(maxBytes))
19
+ throw new TypeError("truncateToolResult maxBytes must be a positive integer");
20
+ if (!positiveInteger(maxLines))
21
+ throw new TypeError("truncateToolResult maxLines must be a positive integer");
22
+ const totalBytes = bytesOf(text);
23
+ const lines = text.split("\n");
24
+ if (lines.length <= maxLines && totalBytes <= maxBytes)
25
+ return text;
26
+ const headLineBudget = Math.max(1, Math.floor(maxLines / 2));
27
+ const tailLineBudget = Math.max(0, maxLines - headLineBudget);
28
+ const headByteBudget = Math.max(1, Math.floor(maxBytes / 2));
29
+ const tailByteBudget = Math.max(0, maxBytes - headByteBudget);
30
+ const head = [];
31
+ let headBytes = 0;
32
+ for (const line of lines) {
33
+ if (head.length >= headLineBudget)
34
+ break;
35
+ const size = bytesOf(line) + (head.length > 0 ? 1 : 0);
36
+ if (headBytes + size > headByteBudget)
37
+ break;
38
+ head.push(line);
39
+ headBytes += size;
40
+ }
41
+ const firstLine = lines[0];
42
+ if (head.length === 0 && firstLine !== undefined) {
43
+ const slice = utf8Prefix(firstLine, headByteBudget);
44
+ if (slice.length > 0) {
45
+ head.push(slice);
46
+ headBytes = bytesOf(slice);
47
+ }
48
+ }
49
+ const tail = [];
50
+ let tailBytes = 0;
51
+ for (const line of lines.slice(head.length).reverse()) {
52
+ if (tail.length >= tailLineBudget)
53
+ break;
54
+ const size = bytesOf(line) + (tail.length > 0 ? 1 : 0);
55
+ if (tailBytes + size > tailByteBudget)
56
+ break;
57
+ tail.unshift(line);
58
+ tailBytes += size;
59
+ }
60
+ const lastLine = lines.at(-1);
61
+ if (tail.length === 0 && tailLineBudget > 0 && tailByteBudget > 0 && lastLine !== undefined) {
62
+ const slice = utf8Suffix(lastLine, tailByteBudget);
63
+ if (slice.length > 0) {
64
+ tail.unshift(slice);
65
+ tailBytes = bytesOf(slice);
66
+ }
67
+ }
68
+ const keptLines = head.length + tail.length;
69
+ const removedLines = Math.max(0, lines.length - keptLines);
70
+ const removedBytes = Math.max(0, totalBytes - headBytes - tailBytes);
71
+ const notice = removedLines > 0
72
+ ? `[... tool output truncated: ${removedLines} of ${lines.length} lines (~${removedBytes} bytes) elided ...]`
73
+ : `[... tool output truncated: ~${removedBytes} bytes elided ...]`;
74
+ return [head.join("\n"), notice, tail.join("\n")].filter((part) => part.length > 0).join("\n\n");
75
+ };
76
+ //# sourceMappingURL=truncate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"truncate.js","sourceRoot":"","sources":["../../src/tools/truncate.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,69 @@
1
1
  {
2
+ "$schema": "https://json.schemastore.org/package.json",
2
3
  "name": "@arden-hq/loop",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
4
+ "version": "0.1.0",
5
+ "description": "Provider-independent Promise and AsyncIterable runtime for tool-calling agents",
6
+ "license": "Apache-2.0",
7
+ "type": "module",
8
+ "engines": {
9
+ "node": ">=20.19"
10
+ },
11
+ "types": "./dist/index.d.ts",
12
+ "module": "./dist/index.js",
13
+ "exports": {
14
+ ".": {
15
+ "arden-source": "./src/index.ts",
16
+ "types": "./dist/index.d.ts",
17
+ "import": "./dist/index.js"
18
+ },
19
+ "./providers/openai-responses": {
20
+ "arden-source": "./src/providers/openai-responses/provider.ts",
21
+ "types": "./dist/providers/openai-responses/provider.d.ts",
22
+ "import": "./dist/providers/openai-responses/provider.js"
23
+ },
24
+ "./provider-kit": {
25
+ "arden-source": "./src/providers/kit/index.ts",
26
+ "types": "./dist/providers/kit/index.d.ts",
27
+ "import": "./dist/providers/kit/index.js"
28
+ }
29
+ },
30
+ "files": [
31
+ "dist/**/*.js",
32
+ "dist/**/*.d.ts",
33
+ "dist/**/*.js.map",
34
+ "dist/**/*.d.ts.map",
35
+ "LICENSE",
36
+ "README.md"
37
+ ],
38
+ "sideEffects": false,
39
+ "keywords": [
40
+ "agent",
41
+ "tool-calling",
42
+ "typescript"
43
+ ],
44
+ "scripts": {
45
+ "build": "tsc -b",
46
+ "clean": "node ../../tooling/clean-dist.mjs",
47
+ "prepack": "bun run clean && bun run build",
48
+ "typecheck": "tsc -p tsconfig.check.json --noEmit --pretty false --incremental --tsBuildInfoFile ../../node_modules/.cache/tsc/libs-loop.tsbuildinfo",
49
+ "test": "vitest run --exclude test/public-boundary.test.ts",
50
+ "test:dist": "bun run build && vitest run test/public-boundary.test.ts"
51
+ },
52
+ "devDependencies": {
53
+ "@types/node": "24.10.1",
54
+ "typescript": "7.0.2",
55
+ "vitest": "4.1.12"
56
+ },
57
+ "publishConfig": {
58
+ "access": "public"
59
+ },
60
+ "dependencies": {
61
+ "@arden-hq/std": "0.1.0",
62
+ "eventsource-parser": "4.1.0"
63
+ },
64
+ "repository": {
65
+ "type": "git",
66
+ "url": "git+https://github.com/arden-hq/arden-engine.git",
67
+ "directory": "libs/loop"
68
+ }
69
+ }