@effect-uai/core 0.17.0 → 0.19.0-dev-20261109183959

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 (218) hide show
  1. package/README.md +5 -5
  2. package/dist/Content-D_Qfn8Ja.d.mts +48 -0
  3. package/dist/Content-D_Qfn8Ja.d.mts.map +1 -0
  4. package/dist/File-B923KvZ9.d.mts +46 -0
  5. package/dist/File-B923KvZ9.d.mts.map +1 -0
  6. package/dist/{Image-Cv6iBLTy.d.mts → Image-Bzc1H_UK.d.mts} +19 -8
  7. package/dist/Image-Bzc1H_UK.d.mts.map +1 -0
  8. package/dist/{Items-C7MyrYPX.d.mts → Items-Bvx8s9QH.d.mts} +109 -16
  9. package/dist/Items-Bvx8s9QH.d.mts.map +1 -0
  10. package/dist/{Loop-ChpaO-ya.d.mts → Loop-CeA0AelN.d.mts} +7 -6
  11. package/dist/Loop-CeA0AelN.d.mts.map +1 -0
  12. package/dist/Tool-Bkryw6-h.d.mts +206 -0
  13. package/dist/Tool-Bkryw6-h.d.mts.map +1 -0
  14. package/dist/ToolEvent-9inLx5cI.d.mts +22 -0
  15. package/dist/ToolEvent-9inLx5cI.d.mts.map +1 -0
  16. package/dist/ToolOutput-BNTIQgGB.d.mts +151 -0
  17. package/dist/ToolOutput-BNTIQgGB.d.mts.map +1 -0
  18. package/dist/Toolkit-D2VGeD5R.d.mts +212 -0
  19. package/dist/Toolkit-D2VGeD5R.d.mts.map +1 -0
  20. package/dist/browser/BrowserTool.d.mts +84 -22
  21. package/dist/browser/BrowserTool.d.mts.map +1 -1
  22. package/dist/browser/BrowserTool.mjs +5 -0
  23. package/dist/browser/BrowserTool.mjs.map +1 -1
  24. package/dist/capabilities/Capabilities.d.mts +1 -1
  25. package/dist/decision-model/Decision.test.mjs +4 -4
  26. package/dist/dist-B5K-y4Be.mjs +191 -0
  27. package/dist/dist-B5K-y4Be.mjs.map +1 -0
  28. package/dist/dist-CorQTQL-.mjs +1533 -0
  29. package/dist/dist-CorQTQL-.mjs.map +1 -0
  30. package/dist/dist-DNeuh84d.mjs +7 -0
  31. package/dist/dist-DNeuh84d.mjs.map +1 -0
  32. package/dist/dist-DzeSyeYF.mjs +10253 -0
  33. package/dist/dist-DzeSyeYF.mjs.map +1 -0
  34. package/dist/domain/File.d.mts +2 -0
  35. package/dist/domain/File.mjs +51 -0
  36. package/dist/domain/File.mjs.map +1 -0
  37. package/dist/domain/Image.d.mts +2 -2
  38. package/dist/domain/Image.mjs +12 -2
  39. package/dist/domain/Image.mjs.map +1 -1
  40. package/dist/domain/Items.d.mts +2 -2
  41. package/dist/domain/Items.mjs +65 -4
  42. package/dist/domain/Items.mjs.map +1 -1
  43. package/dist/domain/Realtime.d.mts +72 -490
  44. package/dist/domain/Realtime.d.mts.map +1 -1
  45. package/dist/domain/Research.d.mts +1 -1
  46. package/dist/domain/Transcript.test.mjs +3 -3
  47. package/dist/domain/Turn.d.mts +57 -262
  48. package/dist/domain/Turn.d.mts.map +1 -1
  49. package/dist/domain/Turn.mjs +1 -1
  50. package/dist/domain/Turn.test.mjs +2 -2
  51. package/dist/embedding-model/Embedding.d.mts +1 -1
  52. package/dist/embedding-model/EmbeddingModel.test.mjs +2 -2
  53. package/dist/embedding-model/EmbeddingModel.test.mjs.map +1 -1
  54. package/dist/image-generator/ImageGenerator.d.mts +10 -66
  55. package/dist/image-generator/ImageGenerator.d.mts.map +1 -1
  56. package/dist/index.C4tKZ0yW-LuFnBtmu.mjs +7042 -0
  57. package/dist/index.C4tKZ0yW-LuFnBtmu.mjs.map +1 -0
  58. package/dist/index.d.mts +10 -9
  59. package/dist/index.mjs +7 -6
  60. package/dist/language-model/LanguageModel.d.mts +2 -2
  61. package/dist/language-model/LanguageModel.test.mjs +2 -2
  62. package/dist/loop/Loop.d.mts +1 -1
  63. package/dist/loop/Loop.mjs.map +1 -1
  64. package/dist/loop/Loop.test.mjs +3 -3
  65. package/dist/math/Probability.test.mjs +2 -2
  66. package/dist/messenger/Messenger.d.mts +43 -289
  67. package/dist/messenger/Messenger.d.mts.map +1 -1
  68. package/dist/messenger/MessengerAdapter.test.mjs +3 -3
  69. package/dist/music-generator/MusicGenerator.test.mjs +3 -3
  70. package/dist/observability/Metrics.d.mts +1 -1
  71. package/dist/observability/Metrics.test.mjs +3 -3
  72. package/dist/observability/Telemetry.d.mts +1 -1
  73. package/dist/observability/Telemetry.mjs +1 -1
  74. package/dist/observability/Telemetry.mjs.map +1 -1
  75. package/dist/observability/Telemetry.test.mjs +4 -4
  76. package/dist/observability/Telemetry.test.mjs.map +1 -1
  77. package/dist/realtime/RealtimeSession.d.mts +1 -1
  78. package/dist/realtime/RealtimeSession.test.mjs +4 -4
  79. package/dist/retry/Retry.test.mjs +2 -2
  80. package/dist/sandbox/Sandbox.d.mts +32 -237
  81. package/dist/sandbox/Sandbox.d.mts.map +1 -1
  82. package/dist/speech-synthesizer/SpeechSynthesizer.test.mjs +3 -3
  83. package/dist/streaming/JSONL.test.mjs +2 -2
  84. package/dist/streaming/Multipart.d.mts +1 -1
  85. package/dist/streaming/Multipart.mjs +3 -2
  86. package/dist/streaming/Multipart.mjs.map +1 -1
  87. package/dist/streaming/Multipart.test.mjs +28 -0
  88. package/dist/streaming/Multipart.test.mjs.map +1 -0
  89. package/dist/streaming/SSE.d.mts +1 -1
  90. package/dist/streaming/SSE.mjs +2 -2
  91. package/dist/streaming/SSE.mjs.map +1 -1
  92. package/dist/streaming/SSE.test.mjs +2 -2
  93. package/dist/streaming/Settle.test.mjs +3 -3
  94. package/dist/streaming/WebSocketSession.d.mts +5 -3
  95. package/dist/streaming/WebSocketSession.d.mts.map +1 -1
  96. package/dist/streaming/WebSocketSession.mjs +22 -10
  97. package/dist/streaming/WebSocketSession.mjs.map +1 -1
  98. package/dist/streaming/WebSocketSession.test.mjs +41 -5
  99. package/dist/streaming/WebSocketSession.test.mjs.map +1 -1
  100. package/dist/structured-format/StructuredFormat.mjs.map +1 -1
  101. package/dist/structured-format/StructuredFormat.test.mjs +2 -2
  102. package/dist/testing/FakeWebSocket.d.mts +5 -1
  103. package/dist/testing/FakeWebSocket.d.mts.map +1 -1
  104. package/dist/testing/FakeWebSocket.mjs +12 -6
  105. package/dist/testing/FakeWebSocket.mjs.map +1 -1
  106. package/dist/testing/MockMessenger.d.mts +19 -134
  107. package/dist/testing/MockMessenger.d.mts.map +1 -1
  108. package/dist/testing/MockProvider.d.mts +1 -1
  109. package/dist/testing/MockSandbox.d.mts +65 -446
  110. package/dist/testing/MockSandbox.d.mts.map +1 -1
  111. package/dist/tool/Content.d.mts +2 -0
  112. package/dist/tool/Content.mjs +46 -0
  113. package/dist/tool/Content.mjs.map +1 -0
  114. package/dist/tool/Content.test.d.mts +1 -0
  115. package/dist/tool/Content.test.mjs +48 -0
  116. package/dist/tool/Content.test.mjs.map +1 -0
  117. package/dist/tool/HistoryCheck.d.mts +6 -15
  118. package/dist/tool/HistoryCheck.d.mts.map +1 -1
  119. package/dist/tool/HistoryCheck.mjs +10 -24
  120. package/dist/tool/HistoryCheck.mjs.map +1 -1
  121. package/dist/tool/Tool.d.mts +2 -2
  122. package/dist/tool/Tool.mjs +55 -130
  123. package/dist/tool/Tool.mjs.map +1 -1
  124. package/dist/tool/Tool.test.mjs +222 -178
  125. package/dist/tool/Tool.test.mjs.map +1 -1
  126. package/dist/tool/ToolDecision.d.mts +164 -0
  127. package/dist/tool/ToolDecision.d.mts.map +1 -0
  128. package/dist/tool/ToolDecision.mjs +146 -0
  129. package/dist/tool/ToolDecision.mjs.map +1 -0
  130. package/dist/tool/ToolDecision.test.d.mts +1 -0
  131. package/dist/tool/ToolDecision.test.mjs +330 -0
  132. package/dist/tool/ToolDecision.test.mjs.map +1 -0
  133. package/dist/tool/ToolEvent.d.mts +2 -2
  134. package/dist/tool/ToolEvent.mjs +2 -34
  135. package/dist/tool/ToolEvent.mjs.map +1 -1
  136. package/dist/tool/ToolOutput.d.mts +2 -0
  137. package/dist/tool/ToolOutput.mjs +128 -0
  138. package/dist/tool/ToolOutput.mjs.map +1 -0
  139. package/dist/tool/ToolOutput.test.d.mts +1 -0
  140. package/dist/tool/ToolOutput.test.mjs +153 -0
  141. package/dist/tool/ToolOutput.test.mjs.map +1 -0
  142. package/dist/tool/Toolkit.d.mts +2 -2
  143. package/dist/tool/Toolkit.mjs +230 -165
  144. package/dist/tool/Toolkit.mjs.map +1 -1
  145. package/dist/tool/Toolkit.test.mjs +433 -391
  146. package/dist/tool/Toolkit.test.mjs.map +1 -1
  147. package/dist/transcriber/Transcriber.test.mjs +3 -3
  148. package/dist/web-read/WebReadTool.d.mts +2 -2
  149. package/dist/web-read/WebReadTool.mjs +1 -0
  150. package/dist/web-read/WebReadTool.mjs.map +1 -1
  151. package/dist/web-search/WebSearchTool.d.mts +2 -2
  152. package/dist/web-search/WebSearchTool.mjs +1 -0
  153. package/dist/web-search/WebSearchTool.mjs.map +1 -1
  154. package/package.json +18 -10
  155. package/src/browser/BrowserTool.ts +5 -0
  156. package/src/domain/File.ts +79 -0
  157. package/src/domain/Image.ts +14 -4
  158. package/src/domain/Items.ts +39 -3
  159. package/src/embedding-model/EmbeddingModel.test.ts +2 -2
  160. package/src/index.ts +3 -2
  161. package/src/loop/Loop.ts +25 -14
  162. package/src/observability/Telemetry.test.ts +1 -1
  163. package/src/observability/Telemetry.ts +2 -2
  164. package/src/streaming/Multipart.test.ts +26 -0
  165. package/src/streaming/Multipart.ts +6 -5
  166. package/src/streaming/SSE.ts +2 -2
  167. package/src/streaming/WebSocketSession.test.ts +54 -2
  168. package/src/streaming/WebSocketSession.ts +27 -6
  169. package/src/structured-format/StructuredFormat.ts +1 -1
  170. package/src/testing/FakeWebSocket.ts +21 -6
  171. package/src/tool/Content.test.ts +40 -0
  172. package/src/tool/Content.ts +38 -0
  173. package/src/tool/HistoryCheck.ts +21 -26
  174. package/src/tool/Tool.test.ts +240 -241
  175. package/src/tool/Tool.ts +204 -309
  176. package/src/tool/ToolDecision.test.ts +301 -0
  177. package/src/tool/ToolDecision.ts +360 -0
  178. package/src/tool/ToolEvent.ts +21 -41
  179. package/src/tool/ToolOutput.test.ts +132 -0
  180. package/src/tool/ToolOutput.ts +198 -0
  181. package/src/tool/Toolkit.test.ts +594 -454
  182. package/src/tool/Toolkit.ts +631 -356
  183. package/src/web-read/WebReadTool.ts +2 -1
  184. package/src/web-search/WebSearchTool.ts +2 -1
  185. package/dist/Image-Cv6iBLTy.d.mts.map +0 -1
  186. package/dist/Items-C7MyrYPX.d.mts.map +0 -1
  187. package/dist/Loop-ChpaO-ya.d.mts.map +0 -1
  188. package/dist/Tool-BF78QWtn.d.mts +0 -314
  189. package/dist/Tool-BF78QWtn.d.mts.map +0 -1
  190. package/dist/ToolEvent-Di4a723B.d.mts +0 -144
  191. package/dist/ToolEvent-Di4a723B.d.mts.map +0 -1
  192. package/dist/ToolResult-BsYQRjmW.d.mts +0 -152
  193. package/dist/ToolResult-BsYQRjmW.d.mts.map +0 -1
  194. package/dist/Toolkit-tlL0F2YR.d.mts +0 -193
  195. package/dist/Toolkit-tlL0F2YR.d.mts.map +0 -1
  196. package/dist/dist-BaenoU1A.mjs +0 -145
  197. package/dist/dist-BaenoU1A.mjs.map +0 -1
  198. package/dist/dist-nohcnkD6.mjs +0 -182
  199. package/dist/dist-nohcnkD6.mjs.map +0 -1
  200. package/dist/magic-string.es-CB2hOw9v.mjs +0 -1014
  201. package/dist/magic-string.es-CB2hOw9v.mjs.map +0 -1
  202. package/dist/test.DNmyFkvJ-YPzDR0Co.mjs +0 -10254
  203. package/dist/test.DNmyFkvJ-YPzDR0Co.mjs.map +0 -1
  204. package/dist/tool/Approval.d.mts +0 -113
  205. package/dist/tool/Approval.d.mts.map +0 -1
  206. package/dist/tool/Approval.mjs +0 -80
  207. package/dist/tool/Approval.mjs.map +0 -1
  208. package/dist/tool/Approval.test.mjs +0 -371
  209. package/dist/tool/Approval.test.mjs.map +0 -1
  210. package/dist/tool/ToolResult.d.mts +0 -2
  211. package/dist/tool/ToolResult.mjs +0 -85
  212. package/dist/tool/ToolResult.mjs.map +0 -1
  213. package/dist/utils-CiH_DjFW.mjs +0 -3918
  214. package/dist/utils-CiH_DjFW.mjs.map +0 -1
  215. package/src/tool/Approval.test.ts +0 -400
  216. package/src/tool/Approval.ts +0 -181
  217. package/src/tool/ToolResult.ts +0 -114
  218. /package/dist/{tool/Approval.test.d.mts → streaming/Multipart.test.d.mts} +0 -0
@@ -0,0 +1,153 @@
1
+ import { imageBytes } from "../domain/Image.mjs";
2
+ import { Image, image } from "./Content.mjs";
3
+ import { RunError, UnknownTool, ValueParts, encoded, failure, make, success, value } from "./ToolOutput.mjs";
4
+ import { m as describe } from "../dist-DzeSyeYF.mjs";
5
+ import { n as globalExpect } from "../index.C4tKZ0yW-LuFnBtmu.mjs";
6
+ import { t as it } from "../dist-B5K-y4Be.mjs";
7
+ import { Effect, Schema, SchemaTransformation } from "effect";
8
+ //#region src/tool/ToolOutput.test.ts
9
+ const call = { call_id: "c1" };
10
+ const png = image(imageBytes(new Uint8Array([
11
+ 1,
12
+ 2,
13
+ 3
14
+ ]), "image/png"));
15
+ describe("ToolOutput.success", () => {
16
+ it.effect("splits only top-level media: text, JSON and arrays without media stay one part", () => Effect.gen(function* () {
17
+ const outputs = yield* Effect.forEach([
18
+ "hello",
19
+ { hits: [1, 2] },
20
+ [1, 2],
21
+ png
22
+ ], (value) => make(call, value));
23
+ globalExpect(outputs.map((o) => o.output.map((p) => p.type))).toEqual([
24
+ ["input_text"],
25
+ ["input_json"],
26
+ ["input_json"],
27
+ ["input_image"]
28
+ ]);
29
+ }));
30
+ it.effect("takes JSON from the schema's encoded side and media from the value", () => Effect.gen(function* () {
31
+ const Shot = Schema.Tuple([Schema.Struct({
32
+ title: Schema.String,
33
+ at: Schema.DateFromString
34
+ }), Image]);
35
+ const value = [{
36
+ title: "Home",
37
+ at: /* @__PURE__ */ new Date("2026-01-01T00:00:00.000Z")
38
+ }, png];
39
+ const out = yield* success(call, Shot, value);
40
+ globalExpect(out.output).toEqual([{
41
+ type: "input_json",
42
+ value: {
43
+ title: "Home",
44
+ at: "2026-01-01T00:00:00.000Z"
45
+ }
46
+ }, {
47
+ type: "input_image",
48
+ source: png.source
49
+ }]);
50
+ globalExpect(out.isError).toBeUndefined();
51
+ const back = yield* encoded(out.output).pipe(Effect.flatMap(Schema.decodeUnknownEffect(Shot)));
52
+ globalExpect(back).toEqual(value);
53
+ }));
54
+ it.effect("keeps the JSON whole when the schema encodes a mixed array to another shape", () => Effect.gen(function* () {
55
+ const Reshaped = Schema.Struct({
56
+ title: Schema.String,
57
+ shot: Schema.toEncoded(Image)
58
+ }).pipe(Schema.decodeTo(Schema.Tuple([Schema.String, Image]), SchemaTransformation.transform({
59
+ decode: ({ title, shot }) => [title, shot],
60
+ encode: ([title, shot]) => ({
61
+ title,
62
+ shot
63
+ })
64
+ })));
65
+ const out = yield* success(call, Reshaped, ["Home", png]);
66
+ globalExpect(out.output).toHaveLength(1);
67
+ globalExpect(out.output[0]).toMatchObject({
68
+ type: "input_json",
69
+ value: {
70
+ title: "Home",
71
+ shot: { _tag: "Image" }
72
+ }
73
+ });
74
+ }));
75
+ });
76
+ describe("ToolOutput.failure", () => {
77
+ it.effect("encodes the error as JSON and flags the output", () => Effect.gen(function* () {
78
+ const out = yield* failure(call, RunError, new UnknownTool({ message: "no tool named nope" }));
79
+ globalExpect(out).toEqual({
80
+ type: "function_call_output",
81
+ call_id: "c1",
82
+ output: [{
83
+ type: "input_json",
84
+ value: {
85
+ _tag: "UnknownTool",
86
+ message: "no tool named nope"
87
+ }
88
+ }],
89
+ isError: true
90
+ });
91
+ }));
92
+ });
93
+ describe("ToolOutput.value", () => {
94
+ it.effect("reads parts back as the value that made them, media as classes", () => Effect.gen(function* () {
95
+ const value$1 = [
96
+ { title: "Home" },
97
+ png,
98
+ "caption"
99
+ ];
100
+ const out = yield* make(call, value$1);
101
+ globalExpect(out.output.map((p) => p.type)).toEqual([
102
+ "input_json",
103
+ "input_image",
104
+ "input_text"
105
+ ]);
106
+ const back = value(out.output);
107
+ globalExpect(back).toEqual(value$1);
108
+ globalExpect(Array.isArray(back) && back[1]).toBeInstanceOf(Image);
109
+ }));
110
+ });
111
+ describe("ToolOutput.ValueParts", () => {
112
+ const encode = Schema.encodeEffect(ValueParts);
113
+ const decode = Schema.decodeUnknownEffect(ValueParts);
114
+ it.effect("JSON shaped like an image stays JSON through the wire", () => Effect.gen(function* () {
115
+ const lookalike = {
116
+ _tag: "Image",
117
+ source: {
118
+ _tag: "url",
119
+ url: "https://x/cat.png"
120
+ }
121
+ };
122
+ const wire = yield* encode(lookalike);
123
+ globalExpect(wire).toEqual([{
124
+ type: "input_json",
125
+ value: lookalike
126
+ }]);
127
+ const back = yield* decode(JSON.parse(JSON.stringify(wire)));
128
+ globalExpect(back).toEqual(lookalike);
129
+ globalExpect(back).not.toBeInstanceOf(Image);
130
+ }));
131
+ it.effect("media round-trips as a class, bytes as base64 on the wire", () => Effect.gen(function* () {
132
+ const value = [
133
+ { title: "Home" },
134
+ png,
135
+ "caption"
136
+ ];
137
+ const wire = yield* encode(value);
138
+ globalExpect(wire[1]).toEqual({
139
+ type: "input_image",
140
+ source: {
141
+ _tag: "bytes",
142
+ bytes: "AQID",
143
+ mimeType: "image/png"
144
+ }
145
+ });
146
+ const back = yield* decode(JSON.parse(JSON.stringify(wire)));
147
+ globalExpect(back).toEqual(value);
148
+ }));
149
+ });
150
+ //#endregion
151
+ export {};
152
+
153
+ //# sourceMappingURL=ToolOutput.test.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolOutput.test.mjs","names":["Content.image","ToolOutput.make","Content.Image","ToolOutput.success","ToolOutput.encoded","ToolOutput.failure","ToolOutput.RunError","ToolOutput.UnknownTool","value","ToolOutput.value","ToolOutput.ValueParts"],"sources":["../../src/tool/ToolOutput.test.ts"],"sourcesContent":["import { describe, expect, it } from \"@effect/vitest\"\nimport { Effect, Schema, SchemaTransformation } from \"effect\"\nimport { imageBytes } from \"../domain/Image.js\"\nimport * as Content from \"./Content.js\"\nimport * as ToolOutput from \"./ToolOutput.js\"\n\nconst call = { call_id: \"c1\" }\nconst png = Content.image(imageBytes(new Uint8Array([1, 2, 3]), \"image/png\"))\n\ndescribe(\"ToolOutput.success\", () => {\n it.effect(\"splits only top-level media: text, JSON and arrays without media stay one part\", () =>\n Effect.gen(function* () {\n const outputs = yield* Effect.forEach([\"hello\", { hits: [1, 2] }, [1, 2], png], (value) =>\n ToolOutput.make(call, value),\n )\n expect(outputs.map((o) => o.output.map((p) => p.type))).toEqual([\n [\"input_text\"],\n [\"input_json\"],\n [\"input_json\"],\n [\"input_image\"],\n ])\n }),\n )\n\n it.effect(\"takes JSON from the schema's encoded side and media from the value\", () =>\n Effect.gen(function* () {\n const Shot = Schema.Tuple([\n Schema.Struct({ title: Schema.String, at: Schema.DateFromString }),\n Content.Image,\n ])\n const value = [{ title: \"Home\", at: new Date(\"2026-01-01T00:00:00.000Z\") }, png] as const\n\n const out = yield* ToolOutput.success(call, Shot, value)\n expect(out.output).toEqual([\n { type: \"input_json\", value: { title: \"Home\", at: \"2026-01-01T00:00:00.000Z\" } },\n { type: \"input_image\", source: png.source },\n ])\n expect(out.isError).toBeUndefined()\n\n const back = yield* ToolOutput.encoded(out.output).pipe(\n Effect.flatMap(Schema.decodeUnknownEffect(Shot)),\n )\n expect(back).toEqual(value)\n }),\n )\n\n it.effect(\"keeps the JSON whole when the schema encodes a mixed array to another shape\", () =>\n Effect.gen(function* () {\n const Encoded = Schema.Struct({\n title: Schema.String,\n shot: Schema.toEncoded(Content.Image),\n })\n const Reshaped = Encoded.pipe(\n Schema.decodeTo(\n Schema.Tuple([Schema.String, Content.Image]),\n SchemaTransformation.transform({\n decode: ({ title, shot }) => [title, shot] as const,\n encode: ([title, shot]) => ({ title, shot }),\n }),\n ),\n )\n const out = yield* ToolOutput.success(call, Reshaped, [\"Home\", png] as const)\n expect(out.output).toHaveLength(1)\n expect(out.output[0]).toMatchObject({\n type: \"input_json\",\n value: { title: \"Home\", shot: { _tag: \"Image\" } },\n })\n }),\n )\n})\n\ndescribe(\"ToolOutput.failure\", () => {\n it.effect(\"encodes the error as JSON and flags the output\", () =>\n Effect.gen(function* () {\n const out = yield* ToolOutput.failure(\n call,\n ToolOutput.RunError,\n new ToolOutput.UnknownTool({ message: \"no tool named nope\" }),\n )\n expect(out).toEqual({\n type: \"function_call_output\",\n call_id: \"c1\",\n output: [\n { type: \"input_json\", value: { _tag: \"UnknownTool\", message: \"no tool named nope\" } },\n ],\n isError: true,\n })\n }),\n )\n})\n\ndescribe(\"ToolOutput.value\", () => {\n it.effect(\"reads parts back as the value that made them, media as classes\", () =>\n Effect.gen(function* () {\n const value = [{ title: \"Home\" }, png, \"caption\"]\n const out = yield* ToolOutput.make(call, value)\n expect(out.output.map((p) => p.type)).toEqual([\"input_json\", \"input_image\", \"input_text\"])\n const back = ToolOutput.value(out.output)\n expect(back).toEqual(value)\n expect(Array.isArray(back) && back[1]).toBeInstanceOf(Content.Image)\n }),\n )\n})\n\ndescribe(\"ToolOutput.ValueParts\", () => {\n const encode = Schema.encodeEffect(ToolOutput.ValueParts)\n const decode = Schema.decodeUnknownEffect(ToolOutput.ValueParts)\n\n it.effect(\"JSON shaped like an image stays JSON through the wire\", () =>\n Effect.gen(function* () {\n const lookalike = { _tag: \"Image\", source: { _tag: \"url\", url: \"https://x/cat.png\" } }\n const wire = yield* encode(lookalike)\n expect(wire).toEqual([{ type: \"input_json\", value: lookalike }])\n const back = yield* decode(JSON.parse(JSON.stringify(wire)))\n expect(back).toEqual(lookalike)\n expect(back).not.toBeInstanceOf(Content.Image)\n }),\n )\n\n it.effect(\"media round-trips as a class, bytes as base64 on the wire\", () =>\n Effect.gen(function* () {\n const value = [{ title: \"Home\" }, png, \"caption\"]\n const wire = yield* encode(value)\n expect(wire[1]).toEqual({\n type: \"input_image\",\n source: { _tag: \"bytes\", bytes: \"AQID\", mimeType: \"image/png\" },\n })\n const back = yield* decode(JSON.parse(JSON.stringify(wire)))\n expect(back).toEqual(value)\n }),\n )\n})\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import { S as wrap, _ as fromArray, a as ToolMap, b as namespace, c as ToolkitR, d as appendToolResults, f as collectResults, g as descriptors, h as describeFailures, i as NoDuplicateNames, m as continueWithResults, n as ExecuteOptions, o as Toolkit, p as compose, r as Middleware, s as ToolkitE, t as DuplicateToolName, u as UniqueTools, v as make, x as run, y as makeNamespaced } from "../Toolkit-tlL0F2YR.mjs";
2
- export { DuplicateToolName, ExecuteOptions, Middleware, NoDuplicateNames, ToolMap, Toolkit, ToolkitE, ToolkitR, UniqueTools, appendToolResults, collectResults, compose, continueWithResults, describeFailures, descriptors, fromArray, make, makeNamespaced, namespace, run, wrap };
1
+ import { A as namespace, C as decode, D as isOutcome, E as fromArray, F as withFailures, I as wrap, M as output, N as run, O as make, P as split, S as continueWith, T as descriptors, _ as UniqueTools, a as Handler, b as complete, c as Outcome, d as Toolkit, f as ToolkitE, g as UndeclaredFailure, i as ExecuteOptions, j as next, k as makeNamespaced, l as Split, m as ToolkitR, n as DuplicateToolName, o as Middleware, p as ToolkitFailure, r as Event, s as NoDuplicateNames, t as DeclaredCall, u as ToolMap, v as appendResults, w as describeFailures, x as compose, y as close } from "../Toolkit-D2VGeD5R.mjs";
2
+ export { DeclaredCall, DuplicateToolName, Event, ExecuteOptions, Handler, Middleware, NoDuplicateNames, Outcome, Split, ToolMap, Toolkit, ToolkitE, ToolkitFailure, ToolkitR, UndeclaredFailure, UniqueTools, appendResults, close, complete, compose, continueWith, decode, describeFailures, descriptors, fromArray, isOutcome, make, makeNamespaced, namespace, next, output, run, split, withFailures, wrap };