@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,480 @@
1
+ import { InvalidModelResponseError, ModelProviderError, ProtocolContractError } from "../errors.js";
2
+ import { INTERACTION_OUTCOMES } from "../contracts/messages.js";
3
+ import { FinishReason } from "../contracts/provider.js";
4
+ import { isRecord } from "@arden-hq/std/json";
5
+ // The explicit annotation lets fail's never-return participate in
6
+ // control-flow narrowing at call sites.
7
+ const fail = (subject, detail) => {
8
+ throw new ProtocolContractError(subject, new TypeError(detail));
9
+ };
10
+ const checkMessageId = (message) => {
11
+ if ("message_id" in message &&
12
+ (typeof message.message_id !== "string" || message.message_id.length === 0)) {
13
+ fail("messages", "message_id must be a non-empty string");
14
+ }
15
+ };
16
+ const isBlockArray = (value) => Array.isArray(value) && value.every(isRecord);
17
+ const checkInteraction = (value) => {
18
+ if (!isRecord(value))
19
+ fail("messages", "interaction must be an object");
20
+ const actor = (candidate) => isRecord(candidate) &&
21
+ ["agent", "workflow", "tool", "harness", "user"].includes(String(candidate.type)) &&
22
+ typeof candidate.id === "string" &&
23
+ candidate.id.length > 0;
24
+ if (!actor(value.from) || !actor(value.to) || typeof value.content !== "string") {
25
+ fail("messages", "interaction needs valid actors and content");
26
+ }
27
+ if (!["message", "assignment", "completion", "event", "instruction"].includes(String(value.kind))) {
28
+ fail("messages", "interaction kind is invalid");
29
+ }
30
+ if (value.kind === "completion" &&
31
+ !INTERACTION_OUTCOMES.some((outcome) => outcome === value.outcome)) {
32
+ fail("messages", "completion interaction outcome is invalid");
33
+ }
34
+ if (value.causedBy !== undefined &&
35
+ (!isRecord(value.causedBy) ||
36
+ !["message", "run", "tool_call", "workflow"].includes(String(value.causedBy.type)) ||
37
+ typeof value.causedBy.id !== "string" ||
38
+ value.causedBy.id.length === 0)) {
39
+ fail("messages", "interaction reference is invalid");
40
+ }
41
+ };
42
+ const checkReplyContext = (value) => {
43
+ if (!isRecord(value) ||
44
+ typeof value.messageId !== "string" ||
45
+ value.messageId.length === 0 ||
46
+ (value.role !== "user" && value.role !== "assistant") ||
47
+ typeof value.content !== "string") {
48
+ fail("messages", "replyTo needs a message id, role, and content");
49
+ }
50
+ };
51
+ const checkToolCall = (value) => {
52
+ if (!isRecord(value))
53
+ fail("messages", "tool_calls entries must be objects");
54
+ const call = value;
55
+ if (typeof call.id !== "string")
56
+ fail("messages", "tool call id must be a string");
57
+ if (call.type !== "function")
58
+ fail("messages", 'tool call type must be "function"');
59
+ const fn = call.function;
60
+ if (!isRecord(fn) || typeof fn.name !== "string" || typeof fn.arguments !== "string") {
61
+ fail("messages", "tool call function must have string name and arguments");
62
+ }
63
+ };
64
+ const isAssistantOutputPart = (value) => {
65
+ if (!isRecord(value))
66
+ return false;
67
+ if (value.type === "reasoning") {
68
+ return typeof value.text === "string" && value.text.length > 0;
69
+ }
70
+ if (value.type === "text") {
71
+ return (typeof value.text === "string" &&
72
+ value.text.length > 0 &&
73
+ (value.phase === undefined || value.phase === "commentary" || value.phase === "final_answer"));
74
+ }
75
+ return (value.type === "tool_call" &&
76
+ typeof value.tool_call_id === "string" &&
77
+ value.tool_call_id.length > 0 &&
78
+ (value.execution === "runtime" || value.execution === "provider"));
79
+ };
80
+ const checkMessage = (value) => {
81
+ if (!isRecord(value))
82
+ fail("messages", "each message must be an object");
83
+ const message = value;
84
+ checkMessageId(message);
85
+ switch (message.role) {
86
+ case "system":
87
+ case "developer": {
88
+ if (typeof message.content !== "string" && !isBlockArray(message.content)) {
89
+ fail("messages", `${message.role} content must be a string or content-block array`);
90
+ }
91
+ return;
92
+ }
93
+ case "user": {
94
+ if ("interaction" in message && "replyTo" in message) {
95
+ fail("messages", "user messages cannot be both interactions and replies");
96
+ }
97
+ if ("interaction" in message)
98
+ checkInteraction(message.interaction);
99
+ if ("replyTo" in message)
100
+ checkReplyContext(message.replyTo);
101
+ if ("content" in message &&
102
+ message.content !== null &&
103
+ typeof message.content !== "string" &&
104
+ !isBlockArray(message.content)) {
105
+ fail("messages", "user content must be a string, null, or content-block array");
106
+ }
107
+ return;
108
+ }
109
+ case "assistant": {
110
+ if ("content" in message &&
111
+ message.content !== null &&
112
+ typeof message.content !== "string" &&
113
+ !isBlockArray(message.content)) {
114
+ fail("messages", "assistant content must be a string, null, or content-block array");
115
+ }
116
+ if ("tool_calls" in message) {
117
+ if (!Array.isArray(message.tool_calls))
118
+ fail("messages", "tool_calls must be an array");
119
+ for (const call of message.tool_calls)
120
+ checkToolCall(call);
121
+ }
122
+ if ("reasoning_content" in message &&
123
+ message.reasoning_content !== null &&
124
+ typeof message.reasoning_content !== "string") {
125
+ fail("messages", "reasoning_content must be a string or null");
126
+ }
127
+ if ("output_parts" in message &&
128
+ (!Array.isArray(message.output_parts) || !message.output_parts.every(isAssistantOutputPart))) {
129
+ fail("messages", "output_parts must contain valid ordered assistant parts");
130
+ }
131
+ return;
132
+ }
133
+ case "tool": {
134
+ if (typeof message.tool_call_id !== "string")
135
+ fail("messages", "tool message needs a tool_call_id");
136
+ if (typeof message.content !== "string")
137
+ fail("messages", "tool message content must be a string");
138
+ return;
139
+ }
140
+ default:
141
+ fail("messages", `unknown message role: ${String(message.role)}`);
142
+ }
143
+ };
144
+ /**
145
+ * Structural validation of one chat message; throws `ProtocolContractError`
146
+ * whose cause names the broken field. Extension fields ride through untouched.
147
+ */
148
+ export const decodeMessage = (value) => {
149
+ checkMessage(value);
150
+ return value;
151
+ };
152
+ /** Structural history validation. Extension fields ride through untouched. */
153
+ export const decodeMessages = (value) => {
154
+ if (!Array.isArray(value))
155
+ fail("messages", "messages must be an array");
156
+ return value.map(decodeMessage);
157
+ };
158
+ const invalidItem = (detail) => {
159
+ throw new ModelProviderError("model provider emitted an invalid stream item", new TypeError(detail));
160
+ };
161
+ const checkStreamRetry = (value) => {
162
+ if (!Number.isInteger(value.attempt) || value.attempt < 1) {
163
+ invalidItem("stream retry attempt must be a positive integer");
164
+ }
165
+ if (!Number.isInteger(value.maxAttempts) ||
166
+ value.maxAttempts < value.attempt) {
167
+ invalidItem("stream retry maxAttempts must be an integer at or above the attempt");
168
+ }
169
+ return {
170
+ _tag: "ProviderStreamRetry",
171
+ attempt: value.attempt,
172
+ maxAttempts: value.maxAttempts,
173
+ ...(typeof value.delayMs === "number" ? { delayMs: value.delayMs } : {})
174
+ };
175
+ };
176
+ const checkToolCallDelta = (value) => {
177
+ const delta = {
178
+ index: value.index,
179
+ tool_id: value.tool_id ?? null,
180
+ name: value.name ?? null,
181
+ arguments_delta: value.arguments_delta ?? null,
182
+ done: value.done ?? false
183
+ };
184
+ if (!Number.isInteger(delta.index))
185
+ invalidItem("tool call delta index must be an integer");
186
+ if (delta.tool_id !== null && typeof delta.tool_id !== "string")
187
+ invalidItem("tool call delta tool_id must be a string or null");
188
+ if (delta.name !== null && typeof delta.name !== "string")
189
+ invalidItem("tool call delta name must be a string or null");
190
+ if (delta.arguments_delta !== null && typeof delta.arguments_delta !== "string") {
191
+ invalidItem("arguments_delta must be a string or null");
192
+ }
193
+ if (typeof delta.done !== "boolean")
194
+ invalidItem("tool call delta done must be a boolean");
195
+ return delta;
196
+ };
197
+ const checkProviderToolCall = (raw) => {
198
+ if (!isRecord(raw))
199
+ return invalidItem("provider tool call must be an object");
200
+ const value = {
201
+ ...raw,
202
+ arguments: raw.arguments ?? {},
203
+ result: raw.result ?? "",
204
+ done: raw.done ?? true,
205
+ loaded_tool_names: raw.loaded_tool_names ?? [],
206
+ source_refs: raw.source_refs ?? []
207
+ };
208
+ if (typeof value.id !== "string" || value.id.trim().length === 0)
209
+ invalidItem("provider tool call id must not be empty");
210
+ if (typeof value.name !== "string" || value.name.trim().length === 0) {
211
+ invalidItem("provider tool call name must not be empty");
212
+ }
213
+ if (!isRecord(value.arguments))
214
+ invalidItem("provider tool call arguments must be an object");
215
+ if (typeof value.result !== "string")
216
+ invalidItem("provider tool call result must be a string");
217
+ if (typeof value.done !== "boolean")
218
+ invalidItem("provider tool call done must be a boolean");
219
+ const loaded = value.loaded_tool_names;
220
+ if (!Array.isArray(loaded) ||
221
+ loaded.some((name) => typeof name !== "string" || name.trim().length === 0)) {
222
+ invalidItem("loaded_tool_names must be an array of non-empty strings");
223
+ }
224
+ const sources = value.source_refs;
225
+ if (!Array.isArray(sources) ||
226
+ sources.length > 50 ||
227
+ sources.some((source) => !isRecord(source))) {
228
+ invalidItem("provider tool call source_refs must contain at most 50 objects");
229
+ }
230
+ return {
231
+ id: value.id,
232
+ name: value.name,
233
+ arguments: value.arguments,
234
+ result: value.result,
235
+ done: value.done,
236
+ loaded_tool_names: [...new Set(loaded)],
237
+ source_refs: sources
238
+ };
239
+ };
240
+ const finishReasons = new Set(Object.values(FinishReason));
241
+ const checkUniqueToolCallIds = (calls, execution) => {
242
+ const ids = calls.map((call) => call.id);
243
+ if (new Set(ids).size !== ids.length) {
244
+ invalidItem(`${execution} tool call ids must be unique`);
245
+ }
246
+ };
247
+ const checkCompletion = (value) => {
248
+ if (typeof value.model !== "string")
249
+ invalidItem("completion model must be a string");
250
+ if (!isRecord(value.message))
251
+ invalidItem("completion must contain a message object");
252
+ const usage = {
253
+ prompt_tokens: 0,
254
+ completion_tokens: 0,
255
+ cache_read_tokens: 0,
256
+ cache_write_tokens: 0,
257
+ ...(isRecord(value.usage) ? value.usage : {})
258
+ };
259
+ for (const field of [
260
+ "prompt_tokens",
261
+ "completion_tokens",
262
+ "cache_read_tokens",
263
+ "cache_write_tokens"
264
+ ]) {
265
+ if (!Number.isInteger(usage[field]))
266
+ invalidItem(`usage ${field} must be an integer`);
267
+ }
268
+ const message = {
269
+ content: null,
270
+ tool_calls: null,
271
+ reasoning_content: null,
272
+ ...value.message
273
+ };
274
+ if (message.role !== "system" &&
275
+ message.role !== "user" &&
276
+ message.role !== "assistant" &&
277
+ message.role !== "tool")
278
+ invalidItem("completion message role must be a chat role");
279
+ if (message.content !== null && typeof message.content !== "string") {
280
+ invalidItem("completion message content must be a string or null");
281
+ }
282
+ if (message.tool_calls !== null) {
283
+ if (!Array.isArray(message.tool_calls))
284
+ invalidItem("completion tool_calls must be an array or null");
285
+ for (const call of message.tool_calls) {
286
+ if (!isRecord(call))
287
+ invalidItem("tool_calls entries must be objects");
288
+ const toolCall = call;
289
+ if (typeof toolCall.id !== "string" || toolCall.type !== "function")
290
+ invalidItem("invalid tool call shape");
291
+ const fn = toolCall.function;
292
+ if (!isRecord(fn) || typeof fn.name !== "string" || typeof fn.arguments !== "string") {
293
+ invalidItem("invalid tool call function shape");
294
+ }
295
+ }
296
+ }
297
+ const runtimeCalls = message.tool_calls;
298
+ if (runtimeCalls !== null)
299
+ checkUniqueToolCallIds(runtimeCalls, "runtime");
300
+ if (message.reasoning_content !== null && typeof message.reasoning_content !== "string") {
301
+ invalidItem("reasoning_content must be a string or null");
302
+ }
303
+ let providerCalls;
304
+ if (message.provider_tool_calls !== undefined && message.provider_tool_calls !== null) {
305
+ if (!Array.isArray(message.provider_tool_calls))
306
+ invalidItem("provider_tool_calls must be an array or null");
307
+ providerCalls = message.provider_tool_calls.map(checkProviderToolCall);
308
+ checkUniqueToolCallIds(providerCalls, "provider");
309
+ }
310
+ else {
311
+ providerCalls = message.provider_tool_calls;
312
+ }
313
+ let outputParts;
314
+ if (message.output_parts !== undefined && message.output_parts !== null) {
315
+ if (!Array.isArray(message.output_parts) ||
316
+ !message.output_parts.every(isAssistantOutputPart)) {
317
+ invalidItem("output_parts must contain valid ordered assistant parts");
318
+ }
319
+ outputParts = message.output_parts;
320
+ const runtimeIds = new Set(runtimeCalls?.map((call) => call.id) ?? []);
321
+ const providerIds = new Set(providerCalls?.map((call) => call.id) ?? []);
322
+ const runtimeReferences = outputParts.flatMap((part) => part.type === "tool_call" && part.execution === "runtime" ? [part.tool_call_id] : []);
323
+ const providerReferences = outputParts.flatMap((part) => part.type === "tool_call" && part.execution === "provider" ? [part.tool_call_id] : []);
324
+ for (const part of outputParts) {
325
+ if (part.type !== "tool_call")
326
+ continue;
327
+ const ids = part.execution === "runtime" ? runtimeIds : providerIds;
328
+ if (!ids.has(part.tool_call_id)) {
329
+ invalidItem(`output_parts references an unknown ${part.execution} tool call`);
330
+ }
331
+ }
332
+ if (new Set(runtimeReferences).size !== runtimeReferences.length ||
333
+ runtimeReferences.length !== runtimeIds.size)
334
+ invalidItem("output_parts must reference every runtime tool call exactly once");
335
+ if (new Set(providerReferences).size !== providerReferences.length ||
336
+ providerReferences.length !== providerIds.size)
337
+ invalidItem("output_parts must reference every provider tool call exactly once");
338
+ const content = message.content;
339
+ const outputText = outputParts
340
+ .flatMap((part) => (part.type === "text" ? [part.text] : []))
341
+ .join("");
342
+ if (outputText !== (content ?? "")) {
343
+ invalidItem("output_parts text must exactly cover the assistant content");
344
+ }
345
+ const reasoning = message.reasoning_content;
346
+ const reasoningParts = outputParts.flatMap((part) => part.type === "reasoning" ? [part.text] : []);
347
+ const joinedReasoning = reasoningParts.join("");
348
+ const separatedReasoning = reasoningParts.join("\n\n");
349
+ if (joinedReasoning !== (reasoning ?? "") && separatedReasoning !== (reasoning ?? "")) {
350
+ invalidItem("output_parts reasoning must exactly cover the assistant reasoning");
351
+ }
352
+ }
353
+ else {
354
+ outputParts = message.output_parts;
355
+ }
356
+ if (message.provider_state !== undefined && !isRecord(message.provider_state)) {
357
+ invalidItem("provider_state must be an object");
358
+ }
359
+ if (value.finish_reason !== null && !finishReasons.has(value.finish_reason)) {
360
+ invalidItem(`unknown finish_reason: ${String(value.finish_reason)}`);
361
+ }
362
+ return {
363
+ _tag: "Completed",
364
+ ...(value.continuation === true ? { continuation: true } : {}),
365
+ message: {
366
+ role: message.role,
367
+ content: message.content,
368
+ tool_calls: runtimeCalls,
369
+ reasoning_content: message.reasoning_content,
370
+ ...(providerCalls === undefined ? {} : { provider_tool_calls: providerCalls }),
371
+ ...(outputParts === undefined ? {} : { output_parts: outputParts }),
372
+ ...(message.provider_state === undefined
373
+ ? {}
374
+ : { provider_state: message.provider_state })
375
+ },
376
+ finish_reason: value.finish_reason,
377
+ usage: usage,
378
+ model: value.model
379
+ };
380
+ };
381
+ const checkContentDelta = (value) => typeof value.content === "string"
382
+ ? value.content
383
+ : invalidItem(`${String(value._tag)} content must be a string`);
384
+ /** Validate one provider stream item by its tag; malformed items become ModelProviderError. */
385
+ export const parseModelItem = (raw) => {
386
+ if (!isRecord(raw))
387
+ return invalidItem(`unsupported stream item: ${String(raw)}`);
388
+ switch (raw._tag) {
389
+ case "TextDelta":
390
+ return { _tag: "TextDelta", content: checkContentDelta(raw) };
391
+ case "ReasoningDelta":
392
+ return { _tag: "ReasoningDelta", content: checkContentDelta(raw) };
393
+ case "ToolCallDelta":
394
+ return { _tag: "ToolCallDelta", delta: checkToolCallDelta(raw) };
395
+ case "OutputItemReady": {
396
+ const response = checkCompletion({
397
+ model: "",
398
+ message: raw.message,
399
+ finish_reason: "tool_calls",
400
+ usage: { completion_tokens: 0 }
401
+ });
402
+ if (response.message.role !== "assistant")
403
+ return invalidItem("completed output must be assistant content");
404
+ for (const call of response.message.tool_calls ?? []) {
405
+ if (call.id.length === 0 || call.function.name.length === 0)
406
+ return invalidItem("ready tool call identity must not be empty");
407
+ if (call.async !== undefined && typeof call.async !== "boolean")
408
+ return invalidItem("ready tool call async must be a boolean");
409
+ }
410
+ return { _tag: "OutputItemReady", message: response.message };
411
+ }
412
+ case "ProviderToolCall":
413
+ return { _tag: "ProviderToolCall", call: checkProviderToolCall(raw.call) };
414
+ case "ProviderStreamRetry":
415
+ return checkStreamRetry(raw);
416
+ case "Completed":
417
+ return checkCompletion(raw);
418
+ default:
419
+ return invalidItem(`unknown stream item tag: ${String(raw._tag)}`);
420
+ }
421
+ };
422
+ /** Terminal-response validation. Ported 1:1 from the previous runtime. */
423
+ export const validateCompletion = (response) => {
424
+ if (response.message.role !== "assistant") {
425
+ throw new InvalidModelResponseError("model response role must be assistant");
426
+ }
427
+ if (response.finish_reason === null) {
428
+ throw new InvalidModelResponseError("model response is missing its terminal reason");
429
+ }
430
+ if (response.finish_reason === FinishReason.CONTENT_FILTER) {
431
+ throw new InvalidModelResponseError("the provider blocked the model response");
432
+ }
433
+ if (response.finish_reason !== FinishReason.STOP &&
434
+ response.finish_reason !== FinishReason.TOOL_CALLS &&
435
+ response.finish_reason !== FinishReason.LENGTH) {
436
+ throw new InvalidModelResponseError(`unsupported model terminal reason: ${String(response.finish_reason)}`);
437
+ }
438
+ return response;
439
+ };
440
+ /** Fill ToolResult defaults; throws TypeError on a structurally invalid value. */
441
+ export const normalizeToolResult = (value) => {
442
+ if (!isRecord(value))
443
+ throw new TypeError("tool result must be an object");
444
+ const record = value;
445
+ if (typeof record.content !== "string")
446
+ throw new TypeError("tool result content must be a string");
447
+ if (typeof record.preview !== "string")
448
+ throw new TypeError("tool result preview must be a string");
449
+ const isError = record.is_error ?? false;
450
+ if (typeof isError !== "boolean")
451
+ throw new TypeError("tool result is_error must be a boolean");
452
+ const retryable = record.retryable ?? null;
453
+ if (retryable !== null && typeof retryable !== "boolean") {
454
+ throw new TypeError("tool result retryable must be a boolean or null");
455
+ }
456
+ const data = record.data ?? null;
457
+ if (data !== null && !isRecord(data))
458
+ throw new TypeError("tool result data must be an object or null");
459
+ const extras = record.message_extras ?? {};
460
+ if (!isRecord(extras))
461
+ throw new TypeError("tool result message_extras must be an object");
462
+ const host = record.host ?? {};
463
+ if (!isRecord(host))
464
+ throw new TypeError("tool result host must be an object");
465
+ const modelContent = record.model_content ?? [];
466
+ if (!Array.isArray(modelContent) || !modelContent.every(isRecord)) {
467
+ throw new TypeError("tool result model_content must be an array of content blocks");
468
+ }
469
+ return {
470
+ content: record.content,
471
+ preview: record.preview,
472
+ is_error: isError,
473
+ retryable,
474
+ data: data,
475
+ message_extras: extras,
476
+ host,
477
+ model_content: modelContent
478
+ };
479
+ };
480
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/internal/validate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import type { ProviderErrorCode } from "../../errors.js";
2
+ /**
3
+ * A classified provider failure. `code` is what the loop's `providerErrorCode`
4
+ * reads along the cause chain and hands to the host; `retryable` is what the
5
+ * kit's transport retry reads. Both are set where the failure is thrown, never
6
+ * re-derived from the message.
7
+ */
8
+ export declare class ProviderError extends Error {
9
+ readonly code: ProviderErrorCode;
10
+ readonly retryable: boolean;
11
+ constructor(message: string, options: {
12
+ readonly code: ProviderErrorCode;
13
+ readonly retryable: boolean;
14
+ });
15
+ }
16
+ /** A response the model itself rejected — never retried. */
17
+ export declare class SemanticResponseError extends ProviderError {
18
+ constructor(message: string, code?: ProviderErrorCode);
19
+ }
20
+ /** A transport-level failure eligible for the bounded transport retry. */
21
+ export declare class RetryableProviderError extends ProviderError {
22
+ constructor(message: string, code?: ProviderErrorCode);
23
+ }
24
+ /**
25
+ * A non-OK HTTP status with its retry headers. 408 (a server-side timeout),
26
+ * 429 and 5xx retry; every other status is terminal. The provider names the
27
+ * `code` and the message.
28
+ */
29
+ export declare class HttpStatusError extends ProviderError {
30
+ readonly status: number;
31
+ readonly retryAfter: string | null;
32
+ readonly retryAfterMs: string | null;
33
+ constructor(message: string, options: {
34
+ readonly status: number;
35
+ readonly retryAfter: string | null;
36
+ readonly retryAfterMs: string | null;
37
+ readonly code: ProviderErrorCode;
38
+ });
39
+ }
40
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/providers/kit/errors.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAExD;;;;;GAKG;AACH,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAA;IAChC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAE3B,YACE,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;QAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;KAAE,EAK3E;CACF;AAED,4DAA4D;AAC5D,qBAAa,qBAAsB,SAAQ,aAAa;IACtD,YAAY,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,iBAAoC,EAEtE;CACF;AAED,0EAA0E;AAC1E,qBAAa,sBAAuB,SAAQ,aAAa;IACvD,YAAY,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,iBAA0C,EAE5E;CACF;AAED;;;;GAIG;AACH,qBAAa,eAAgB,SAAQ,aAAa;IAChD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAEpC,YACE,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;QACP,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;QACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;QAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;QACpC,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAA;KACjC,EASF;CACF"}
@@ -0,0 +1,48 @@
1
+ import { retryableStatus } from "@arden-hq/std/retry";
2
+ /**
3
+ * A classified provider failure. `code` is what the loop's `providerErrorCode`
4
+ * reads along the cause chain and hands to the host; `retryable` is what the
5
+ * kit's transport retry reads. Both are set where the failure is thrown, never
6
+ * re-derived from the message.
7
+ */
8
+ export class ProviderError extends Error {
9
+ code;
10
+ retryable;
11
+ constructor(message, options) {
12
+ super(message);
13
+ this.code = options.code;
14
+ this.retryable = options.retryable;
15
+ }
16
+ }
17
+ /** A response the model itself rejected — never retried. */
18
+ export class SemanticResponseError extends ProviderError {
19
+ constructor(message, code = "provider_error") {
20
+ super(message, { code, retryable: false });
21
+ }
22
+ }
23
+ /** A transport-level failure eligible for the bounded transport retry. */
24
+ export class RetryableProviderError extends ProviderError {
25
+ constructor(message, code = "provider_unavailable") {
26
+ super(message, { code, retryable: true });
27
+ }
28
+ }
29
+ /**
30
+ * A non-OK HTTP status with its retry headers. 408 (a server-side timeout),
31
+ * 429 and 5xx retry; every other status is terminal. The provider names the
32
+ * `code` and the message.
33
+ */
34
+ export class HttpStatusError extends ProviderError {
35
+ status;
36
+ retryAfter;
37
+ retryAfterMs;
38
+ constructor(message, options) {
39
+ super(message, {
40
+ code: options.code,
41
+ retryable: retryableStatus(options.status)
42
+ });
43
+ this.status = options.status;
44
+ this.retryAfter = options.retryAfter;
45
+ this.retryAfterMs = options.retryAfterMs;
46
+ }
47
+ }
48
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/providers/kit/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAIrD;;;;;GAKG;AACH,MAAM,OAAO,aAAc,SAAQ,KAAK;IAC7B,IAAI,CAAmB;IACvB,SAAS,CAAS;IAE3B,YACE,OAAe,EACf,OAA0E;QAE1E,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;QACxB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;IACpC,CAAC;CACF;AAED,4DAA4D;AAC5D,MAAM,OAAO,qBAAsB,SAAQ,aAAa;IACtD,YAAY,OAAe,EAAE,IAAI,GAAsB,gBAAgB;QACrE,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;IAC5C,CAAC;CACF;AAED,0EAA0E;AAC1E,MAAM,OAAO,sBAAuB,SAAQ,aAAa;IACvD,YAAY,OAAe,EAAE,IAAI,GAAsB,sBAAsB;QAC3E,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC3C,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,eAAgB,SAAQ,aAAa;IACvC,MAAM,CAAQ;IACd,UAAU,CAAe;IACzB,YAAY,CAAe;IAEpC,YACE,OAAe,EACf,OAKC;QAED,KAAK,CAAC,OAAO,EAAE;YACb,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,SAAS,EAAE,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC;SAC3C,CAAC,CAAA;QACF,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;QAC5B,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAA;QACpC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAA;IAC1C,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * `@arden-hq/loop/provider-kit` — the transport pieces a model provider needs:
3
+ * classified errors, the bounded retry policy, the SSE body reader, and abort
4
+ * helpers. A provider imports this kit and the root contracts, nothing else.
5
+ */
6
+ export { isAbortError, raceAbort } from "../../abort.js";
7
+ export { HttpStatusError, ProviderError, RetryableProviderError, SemanticResponseError } from "./errors.js";
8
+ export { backoffSleep, DEFAULT_MAX_ATTEMPTS, isRetryableFailure, nextRetry, retryDelayMs, retrying, retryingFetch } from "./retry.js";
9
+ export { readSseEvents, type SseEvent, SseParser } from "./sse.js";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/kit/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AACxD,OAAO,EACL,eAAe,EACf,aAAa,EACb,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,kBAAkB,EAClB,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,aAAa,EACd,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,aAAa,EAAE,KAAK,QAAQ,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * `@arden-hq/loop/provider-kit` — the transport pieces a model provider needs:
3
+ * classified errors, the bounded retry policy, the SSE body reader, and abort
4
+ * helpers. A provider imports this kit and the root contracts, nothing else.
5
+ */
6
+ export { isAbortError, raceAbort } from "../../abort.js";
7
+ export { HttpStatusError, ProviderError, RetryableProviderError, SemanticResponseError } from "./errors.js";
8
+ export { backoffSleep, DEFAULT_MAX_ATTEMPTS, isRetryableFailure, nextRetry, retryDelayMs, retrying, retryingFetch } from "./retry.js";
9
+ export { readSseEvents, SseParser } from "./sse.js";
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/kit/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AACxD,OAAO,EACL,eAAe,EACf,aAAa,EACb,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,kBAAkB,EAClB,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,aAAa,EACd,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,aAAa,EAAiB,SAAS,EAAE,MAAM,UAAU,CAAA"}