effect 4.0.0-beta.100 → 4.0.0-beta.102

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 (502) hide show
  1. package/dist/Array.d.ts.map +1 -1
  2. package/dist/Array.js +81 -5
  3. package/dist/Array.js.map +1 -1
  4. package/dist/Channel.d.ts.map +1 -1
  5. package/dist/Channel.js +27 -9
  6. package/dist/Channel.js.map +1 -1
  7. package/dist/Config.d.ts +1 -1
  8. package/dist/Config.d.ts.map +1 -1
  9. package/dist/Config.js +6 -5
  10. package/dist/Config.js.map +1 -1
  11. package/dist/ConfigProvider.js +7 -7
  12. package/dist/ConfigProvider.js.map +1 -1
  13. package/dist/Data.d.ts.map +1 -1
  14. package/dist/Data.js +2 -1
  15. package/dist/Data.js.map +1 -1
  16. package/dist/Effect.d.ts +61 -100
  17. package/dist/Effect.d.ts.map +1 -1
  18. package/dist/Effect.js +66 -39
  19. package/dist/Effect.js.map +1 -1
  20. package/dist/FiberHandle.d.ts.map +1 -1
  21. package/dist/FiberHandle.js +3 -2
  22. package/dist/FiberHandle.js.map +1 -1
  23. package/dist/Iterable.d.ts.map +1 -1
  24. package/dist/Iterable.js +2 -1
  25. package/dist/Iterable.js.map +1 -1
  26. package/dist/JsonPatch.d.ts.map +1 -1
  27. package/dist/JsonPatch.js +4 -3
  28. package/dist/JsonPatch.js.map +1 -1
  29. package/dist/JsonSchema.d.ts.map +1 -1
  30. package/dist/JsonSchema.js +9 -11
  31. package/dist/JsonSchema.js.map +1 -1
  32. package/dist/Logger.d.ts.map +1 -1
  33. package/dist/Logger.js +3 -2
  34. package/dist/Logger.js.map +1 -1
  35. package/dist/ManagedRuntime.d.ts +9 -0
  36. package/dist/ManagedRuntime.d.ts.map +1 -1
  37. package/dist/ManagedRuntime.js +3 -0
  38. package/dist/ManagedRuntime.js.map +1 -1
  39. package/dist/Metric.d.ts.map +1 -1
  40. package/dist/Metric.js +4 -3
  41. package/dist/Metric.js.map +1 -1
  42. package/dist/MutableList.d.ts.map +1 -1
  43. package/dist/MutableList.js +4 -0
  44. package/dist/MutableList.js.map +1 -1
  45. package/dist/Optic.d.ts.map +1 -1
  46. package/dist/Optic.js +5 -4
  47. package/dist/Optic.js.map +1 -1
  48. package/dist/Option.d.ts.map +1 -1
  49. package/dist/Option.js +2 -1
  50. package/dist/Option.js.map +1 -1
  51. package/dist/PartitionedSemaphore.d.ts.map +1 -1
  52. package/dist/PartitionedSemaphore.js +1 -4
  53. package/dist/PartitionedSemaphore.js.map +1 -1
  54. package/dist/Record.d.ts +93 -1
  55. package/dist/Record.d.ts.map +1 -1
  56. package/dist/Record.js +57 -19
  57. package/dist/Record.js.map +1 -1
  58. package/dist/References.d.ts +0 -45
  59. package/dist/References.d.ts.map +1 -1
  60. package/dist/References.js +0 -45
  61. package/dist/References.js.map +1 -1
  62. package/dist/Request.d.ts.map +1 -1
  63. package/dist/Request.js +9 -6
  64. package/dist/Request.js.map +1 -1
  65. package/dist/Result.d.ts.map +1 -1
  66. package/dist/Result.js +2 -1
  67. package/dist/Result.js.map +1 -1
  68. package/dist/Schema.d.ts +1269 -496
  69. package/dist/Schema.d.ts.map +1 -1
  70. package/dist/Schema.js +2308 -614
  71. package/dist/Schema.js.map +1 -1
  72. package/dist/SchemaAST.d.ts +2 -2
  73. package/dist/SchemaAST.d.ts.map +1 -1
  74. package/dist/SchemaAST.js +189 -130
  75. package/dist/SchemaAST.js.map +1 -1
  76. package/dist/SchemaError.js +1 -1
  77. package/dist/SchemaError.js.map +1 -1
  78. package/dist/SchemaGetter.d.ts +13 -11
  79. package/dist/SchemaGetter.d.ts.map +1 -1
  80. package/dist/SchemaGetter.js +34 -24
  81. package/dist/SchemaGetter.js.map +1 -1
  82. package/dist/SchemaIssue.js +1 -1
  83. package/dist/SchemaIssue.js.map +1 -1
  84. package/dist/SchemaParser.d.ts.map +1 -1
  85. package/dist/SchemaParser.js +1 -12
  86. package/dist/SchemaParser.js.map +1 -1
  87. package/dist/SchemaRepresentation.d.ts +403 -1504
  88. package/dist/SchemaRepresentation.d.ts.map +1 -1
  89. package/dist/SchemaRepresentation.js +294 -2852
  90. package/dist/SchemaRepresentation.js.map +1 -1
  91. package/dist/SchemaTransformation.d.ts +2 -2
  92. package/dist/SchemaTransformation.js +3 -3
  93. package/dist/SchemaTransformation.js.map +1 -1
  94. package/dist/Semaphore.d.ts +5 -3
  95. package/dist/Semaphore.d.ts.map +1 -1
  96. package/dist/Semaphore.js.map +1 -1
  97. package/dist/Stream.d.ts +15 -9
  98. package/dist/Stream.d.ts.map +1 -1
  99. package/dist/Stream.js +46 -16
  100. package/dist/Stream.js.map +1 -1
  101. package/dist/Struct.d.ts.map +1 -1
  102. package/dist/Struct.js +5 -4
  103. package/dist/Struct.js.map +1 -1
  104. package/dist/Types.d.ts +1 -3
  105. package/dist/Types.d.ts.map +1 -1
  106. package/dist/index.d.ts +0 -4
  107. package/dist/index.d.ts.map +1 -1
  108. package/dist/index.js +0 -4
  109. package/dist/index.js.map +1 -1
  110. package/dist/internal/core.js +3 -2
  111. package/dist/internal/core.js.map +1 -1
  112. package/dist/internal/effect.js +119 -53
  113. package/dist/internal/effect.js.map +1 -1
  114. package/dist/internal/matcher.js +1 -1
  115. package/dist/internal/matcher.js.map +1 -1
  116. package/dist/internal/record.d.ts +0 -3
  117. package/dist/internal/record.d.ts.map +1 -1
  118. package/dist/internal/record.js +10 -5
  119. package/dist/internal/record.js.map +1 -1
  120. package/dist/internal/references.js +0 -4
  121. package/dist/internal/references.js.map +1 -1
  122. package/dist/internal/schema/annotations.js +12 -0
  123. package/dist/internal/schema/annotations.js.map +1 -1
  124. package/dist/internal/schema/fromJsonSchemaDocument.d.ts +2 -0
  125. package/dist/internal/schema/fromJsonSchemaDocument.d.ts.map +1 -0
  126. package/dist/internal/schema/fromJsonSchemaDocument.js +743 -0
  127. package/dist/internal/schema/fromJsonSchemaDocument.js.map +1 -0
  128. package/dist/internal/schema/fromRepresentation.d.ts +2 -0
  129. package/dist/internal/schema/fromRepresentation.d.ts.map +1 -0
  130. package/dist/internal/schema/fromRepresentation.js +252 -0
  131. package/dist/internal/schema/fromRepresentation.js.map +1 -0
  132. package/dist/internal/schema/schema.js +28 -40
  133. package/dist/internal/schema/schema.js.map +1 -1
  134. package/dist/internal/schema/{arbitrary.d.ts → toArbitrary.d.ts} +1 -1
  135. package/dist/internal/schema/toArbitrary.d.ts.map +1 -0
  136. package/dist/internal/schema/{arbitrary.js → toArbitrary.js} +8 -9
  137. package/dist/internal/schema/toArbitrary.js.map +1 -0
  138. package/dist/internal/schema/toCodeDocument.d.ts +2 -0
  139. package/dist/internal/schema/toCodeDocument.d.ts.map +1 -0
  140. package/dist/internal/schema/toCodeDocument.js +438 -0
  141. package/dist/internal/schema/toCodeDocument.js.map +1 -0
  142. package/dist/internal/schema/toEquivalence.d.ts +2 -0
  143. package/dist/internal/schema/toEquivalence.d.ts.map +1 -0
  144. package/dist/internal/schema/{equivalence.js → toEquivalence.js} +15 -13
  145. package/dist/internal/schema/toEquivalence.js.map +1 -0
  146. package/dist/internal/schema/toJsonSchemaDocument.d.ts +2 -0
  147. package/dist/internal/schema/toJsonSchemaDocument.d.ts.map +1 -0
  148. package/dist/internal/schema/toJsonSchemaDocument.js +466 -0
  149. package/dist/internal/schema/toJsonSchemaDocument.js.map +1 -0
  150. package/dist/internal/schema/toRepresentation.d.ts +2 -0
  151. package/dist/internal/schema/toRepresentation.d.ts.map +1 -0
  152. package/dist/internal/schema/toRepresentation.js +369 -0
  153. package/dist/internal/schema/toRepresentation.js.map +1 -0
  154. package/dist/internal/stackTraceLimit.js +3 -6
  155. package/dist/internal/stackTraceLimit.js.map +1 -1
  156. package/dist/testing/TestClock.js +4 -1
  157. package/dist/testing/TestClock.js.map +1 -1
  158. package/dist/unstable/ai/AiError.d.ts +26 -26
  159. package/dist/unstable/ai/AiError.d.ts.map +1 -1
  160. package/dist/unstable/ai/AiError.js +5 -4
  161. package/dist/unstable/ai/AiError.js.map +1 -1
  162. package/dist/unstable/ai/AnthropicStructuredOutput.d.ts +21 -6
  163. package/dist/unstable/ai/AnthropicStructuredOutput.d.ts.map +1 -1
  164. package/dist/unstable/ai/AnthropicStructuredOutput.js +86 -316
  165. package/dist/unstable/ai/AnthropicStructuredOutput.js.map +1 -1
  166. package/dist/unstable/ai/EmbeddingModel.d.ts +1 -1
  167. package/dist/unstable/ai/EmbeddingModel.js +1 -1
  168. package/dist/unstable/ai/EmbeddingModel.js.map +1 -1
  169. package/dist/unstable/ai/LanguageModel.d.ts +4 -1
  170. package/dist/unstable/ai/LanguageModel.d.ts.map +1 -1
  171. package/dist/unstable/ai/LanguageModel.js +19 -17
  172. package/dist/unstable/ai/LanguageModel.js.map +1 -1
  173. package/dist/unstable/ai/McpSchema.d.ts +197 -197
  174. package/dist/unstable/ai/McpSchema.d.ts.map +1 -1
  175. package/dist/unstable/ai/McpSchema.js +13 -13
  176. package/dist/unstable/ai/McpSchema.js.map +1 -1
  177. package/dist/unstable/ai/McpServer.d.ts +4 -4
  178. package/dist/unstable/ai/McpServer.d.ts.map +1 -1
  179. package/dist/unstable/ai/McpServer.js +116 -49
  180. package/dist/unstable/ai/McpServer.js.map +1 -1
  181. package/dist/unstable/ai/OpenAiStructuredOutput.d.ts +32 -10
  182. package/dist/unstable/ai/OpenAiStructuredOutput.d.ts.map +1 -1
  183. package/dist/unstable/ai/OpenAiStructuredOutput.js +193 -377
  184. package/dist/unstable/ai/OpenAiStructuredOutput.js.map +1 -1
  185. package/dist/unstable/ai/Response.d.ts +19 -19
  186. package/dist/unstable/ai/Response.d.ts.map +1 -1
  187. package/dist/unstable/ai/Response.js +14 -14
  188. package/dist/unstable/ai/Response.js.map +1 -1
  189. package/dist/unstable/ai/Tool.d.ts +4 -0
  190. package/dist/unstable/ai/Tool.d.ts.map +1 -1
  191. package/dist/unstable/ai/Tool.js +11 -3
  192. package/dist/unstable/ai/Tool.js.map +1 -1
  193. package/dist/unstable/ai/Toolkit.d.ts +9 -1
  194. package/dist/unstable/ai/Toolkit.d.ts.map +1 -1
  195. package/dist/unstable/ai/Toolkit.js +14 -10
  196. package/dist/unstable/ai/Toolkit.js.map +1 -1
  197. package/dist/unstable/ai/internal/codec-transformer.js +15 -12
  198. package/dist/unstable/ai/internal/codec-transformer.js.map +1 -1
  199. package/dist/unstable/ai/internal/structured-output.d.ts +2 -0
  200. package/dist/unstable/ai/internal/structured-output.d.ts.map +1 -0
  201. package/dist/unstable/ai/internal/structured-output.js +316 -0
  202. package/dist/unstable/ai/internal/structured-output.js.map +1 -0
  203. package/dist/unstable/cli/CliError.d.ts +40 -2
  204. package/dist/unstable/cli/CliError.d.ts.map +1 -1
  205. package/dist/unstable/cli/CliError.js +45 -6
  206. package/dist/unstable/cli/CliError.js.map +1 -1
  207. package/dist/unstable/cli/Command.js +14 -5
  208. package/dist/unstable/cli/Command.js.map +1 -1
  209. package/dist/unstable/cli/Param.js +3 -3
  210. package/dist/unstable/cli/Param.js.map +1 -1
  211. package/dist/unstable/cli/Primitive.js +1 -1
  212. package/dist/unstable/cli/Primitive.js.map +1 -1
  213. package/dist/unstable/cli/internal/command.d.ts +3 -1
  214. package/dist/unstable/cli/internal/command.d.ts.map +1 -1
  215. package/dist/unstable/cli/internal/command.js +11 -4
  216. package/dist/unstable/cli/internal/command.js.map +1 -1
  217. package/dist/unstable/cli/internal/config.d.ts +0 -48
  218. package/dist/unstable/cli/internal/config.d.ts.map +1 -1
  219. package/dist/unstable/cli/internal/config.js +8 -10
  220. package/dist/unstable/cli/internal/config.js.map +1 -1
  221. package/dist/unstable/cluster/ClusterWorkflowEngine.js +1 -1
  222. package/dist/unstable/cluster/ClusterWorkflowEngine.js.map +1 -1
  223. package/dist/unstable/cluster/Entity.js +1 -1
  224. package/dist/unstable/cluster/Entity.js.map +1 -1
  225. package/dist/unstable/cluster/Envelope.d.ts.map +1 -1
  226. package/dist/unstable/cluster/Envelope.js +2 -1
  227. package/dist/unstable/cluster/Envelope.js.map +1 -1
  228. package/dist/unstable/cluster/Reply.js +1 -1
  229. package/dist/unstable/cluster/Reply.js.map +1 -1
  230. package/dist/unstable/cluster/Runner.d.ts +1 -1
  231. package/dist/unstable/cluster/Runner.js +1 -1
  232. package/dist/unstable/cluster/Runner.js.map +1 -1
  233. package/dist/unstable/cluster/RunnerAddress.d.ts +1 -1
  234. package/dist/unstable/cluster/RunnerAddress.js +1 -1
  235. package/dist/unstable/cluster/RunnerAddress.js.map +1 -1
  236. package/dist/unstable/cluster/ShardId.js +1 -1
  237. package/dist/unstable/cluster/ShardId.js.map +1 -1
  238. package/dist/unstable/cluster/Sharding.d.ts.map +1 -1
  239. package/dist/unstable/cluster/Sharding.js +125 -24
  240. package/dist/unstable/cluster/Sharding.js.map +1 -1
  241. package/dist/unstable/cluster/ShardingConfig.d.ts +10 -2
  242. package/dist/unstable/cluster/ShardingConfig.d.ts.map +1 -1
  243. package/dist/unstable/cluster/ShardingConfig.js.map +1 -1
  244. package/dist/unstable/cluster/SingleRunner.d.ts +4 -2
  245. package/dist/unstable/cluster/SingleRunner.d.ts.map +1 -1
  246. package/dist/unstable/cluster/SingleRunner.js +2 -1
  247. package/dist/unstable/cluster/SingleRunner.js.map +1 -1
  248. package/dist/unstable/cluster/SqlMessageStorage.d.ts +7 -4
  249. package/dist/unstable/cluster/SqlMessageStorage.d.ts.map +1 -1
  250. package/dist/unstable/cluster/SqlMessageStorage.js +55 -24
  251. package/dist/unstable/cluster/SqlMessageStorage.js.map +1 -1
  252. package/dist/unstable/cluster/SqlRunnerStorage.d.ts.map +1 -1
  253. package/dist/unstable/cluster/SqlRunnerStorage.js +109 -62
  254. package/dist/unstable/cluster/SqlRunnerStorage.js.map +1 -1
  255. package/dist/unstable/cluster/internal/entityManager.js +19 -7
  256. package/dist/unstable/cluster/internal/entityManager.js.map +1 -1
  257. package/dist/unstable/cluster/internal/shardLock.d.ts +2 -0
  258. package/dist/unstable/cluster/internal/shardLock.d.ts.map +1 -0
  259. package/dist/unstable/cluster/internal/shardLock.js +4 -0
  260. package/dist/unstable/cluster/internal/shardLock.js.map +1 -0
  261. package/dist/unstable/devtools/DevToolsSchema.d.ts +20 -20
  262. package/dist/unstable/devtools/DevToolsSchema.d.ts.map +1 -1
  263. package/dist/unstable/devtools/DevToolsSchema.js +8 -5
  264. package/dist/unstable/devtools/DevToolsSchema.js.map +1 -1
  265. package/dist/unstable/eventlog/EventJournal.d.ts +1 -1
  266. package/dist/unstable/eventlog/EventJournal.js +1 -1
  267. package/dist/unstable/eventlog/EventJournal.js.map +1 -1
  268. package/dist/unstable/eventlog/EventLog.d.ts.map +1 -1
  269. package/dist/unstable/eventlog/EventLog.js +15 -11
  270. package/dist/unstable/eventlog/EventLog.js.map +1 -1
  271. package/dist/unstable/eventlog/EventLogEncryption.d.ts +1 -1
  272. package/dist/unstable/eventlog/EventLogEncryption.js +1 -1
  273. package/dist/unstable/eventlog/EventLogEncryption.js.map +1 -1
  274. package/dist/unstable/eventlog/EventLogMessage.d.ts +26 -26
  275. package/dist/unstable/eventlog/EventLogMessage.d.ts.map +1 -1
  276. package/dist/unstable/eventlog/EventLogMessage.js +8 -3
  277. package/dist/unstable/eventlog/EventLogMessage.js.map +1 -1
  278. package/dist/unstable/eventlog/EventLogRemote.d.ts +1 -1
  279. package/dist/unstable/eventlog/SqlEventJournal.js +2 -2
  280. package/dist/unstable/eventlog/SqlEventJournal.js.map +1 -1
  281. package/dist/unstable/eventlog/SqlEventLogServerEncrypted.js +1 -1
  282. package/dist/unstable/eventlog/SqlEventLogServerEncrypted.js.map +1 -1
  283. package/dist/unstable/eventlog/SqlEventLogServerUnencrypted.js +3 -3
  284. package/dist/unstable/eventlog/SqlEventLogServerUnencrypted.js.map +1 -1
  285. package/dist/unstable/http/Cookies.d.ts.map +1 -1
  286. package/dist/unstable/http/Cookies.js +24 -22
  287. package/dist/unstable/http/Cookies.js.map +1 -1
  288. package/dist/unstable/http/Headers.js +8 -8
  289. package/dist/unstable/http/Headers.js.map +1 -1
  290. package/dist/unstable/http/HttpClientRequest.d.ts +44 -0
  291. package/dist/unstable/http/HttpClientRequest.d.ts.map +1 -1
  292. package/dist/unstable/http/HttpClientRequest.js +14 -0
  293. package/dist/unstable/http/HttpClientRequest.js.map +1 -1
  294. package/dist/unstable/http/HttpRouter.d.ts +2 -2
  295. package/dist/unstable/http/HttpRouter.d.ts.map +1 -1
  296. package/dist/unstable/http/HttpRouter.js.map +1 -1
  297. package/dist/unstable/http/HttpServerRequest.d.ts.map +1 -1
  298. package/dist/unstable/http/HttpServerRequest.js +5 -4
  299. package/dist/unstable/http/HttpServerRequest.js.map +1 -1
  300. package/dist/unstable/http/Multipart.d.ts.map +1 -1
  301. package/dist/unstable/http/Multipart.js +17 -15
  302. package/dist/unstable/http/Multipart.js.map +1 -1
  303. package/dist/unstable/http/Template.js +1 -1
  304. package/dist/unstable/http/Template.js.map +1 -1
  305. package/dist/unstable/http/UrlParams.d.ts.map +1 -1
  306. package/dist/unstable/http/UrlParams.js +17 -14
  307. package/dist/unstable/http/UrlParams.js.map +1 -1
  308. package/dist/unstable/httpapi/HttpApi.js +3 -3
  309. package/dist/unstable/httpapi/HttpApi.js.map +1 -1
  310. package/dist/unstable/httpapi/HttpApiClient.js +5 -5
  311. package/dist/unstable/httpapi/HttpApiClient.js.map +1 -1
  312. package/dist/unstable/httpapi/HttpApiGroup.js +1 -1
  313. package/dist/unstable/httpapi/HttpApiGroup.js.map +1 -1
  314. package/dist/unstable/httpapi/OpenApi.d.ts.map +1 -1
  315. package/dist/unstable/httpapi/OpenApi.js +37 -24
  316. package/dist/unstable/httpapi/OpenApi.js.map +1 -1
  317. package/dist/unstable/observability/OtlpExporter.d.ts +72 -1
  318. package/dist/unstable/observability/OtlpExporter.d.ts.map +1 -1
  319. package/dist/unstable/observability/OtlpExporter.js +69 -4
  320. package/dist/unstable/observability/OtlpExporter.js.map +1 -1
  321. package/dist/unstable/observability/OtlpLogger.d.ts +4 -3
  322. package/dist/unstable/observability/OtlpLogger.d.ts.map +1 -1
  323. package/dist/unstable/observability/OtlpLogger.js +2 -2
  324. package/dist/unstable/observability/OtlpLogger.js.map +1 -1
  325. package/dist/unstable/observability/OtlpMetrics.d.ts +7 -3
  326. package/dist/unstable/observability/OtlpMetrics.d.ts.map +1 -1
  327. package/dist/unstable/observability/OtlpMetrics.js +5 -2
  328. package/dist/unstable/observability/OtlpMetrics.js.map +1 -1
  329. package/dist/unstable/observability/OtlpTracer.d.ts +4 -3
  330. package/dist/unstable/observability/OtlpTracer.d.ts.map +1 -1
  331. package/dist/unstable/observability/OtlpTracer.js +2 -2
  332. package/dist/unstable/observability/OtlpTracer.js.map +1 -1
  333. package/dist/unstable/persistence/Persistable.d.ts.map +1 -1
  334. package/dist/unstable/persistence/Persistable.js +2 -1
  335. package/dist/unstable/persistence/Persistable.js.map +1 -1
  336. package/dist/unstable/persistence/RateLimiter.d.ts +2 -2
  337. package/dist/unstable/persistence/RateLimiter.js +2 -2
  338. package/dist/unstable/persistence/RateLimiter.js.map +1 -1
  339. package/dist/unstable/persistence/Redis.d.ts.map +1 -1
  340. package/dist/unstable/persistence/Redis.js +2 -2
  341. package/dist/unstable/persistence/Redis.js.map +1 -1
  342. package/dist/unstable/process/ChildProcessSpawner.js +3 -1
  343. package/dist/unstable/process/ChildProcessSpawner.js.map +1 -1
  344. package/dist/unstable/reactivity/AsyncResult.d.ts.map +1 -1
  345. package/dist/unstable/reactivity/AsyncResult.js +4 -3
  346. package/dist/unstable/reactivity/AsyncResult.js.map +1 -1
  347. package/dist/unstable/reactivity/Atom.d.ts +83 -0
  348. package/dist/unstable/reactivity/Atom.d.ts.map +1 -1
  349. package/dist/unstable/reactivity/Atom.js +31 -0
  350. package/dist/unstable/reactivity/Atom.js.map +1 -1
  351. package/dist/unstable/reactivity/AtomRegistry.js +1 -1
  352. package/dist/unstable/reactivity/AtomRegistry.js.map +1 -1
  353. package/dist/unstable/rpc/RpcClient.d.ts.map +1 -1
  354. package/dist/unstable/rpc/RpcClient.js +2 -1
  355. package/dist/unstable/rpc/RpcClient.js.map +1 -1
  356. package/dist/unstable/schema/VariantSchema.d.ts +1 -2
  357. package/dist/unstable/schema/VariantSchema.d.ts.map +1 -1
  358. package/dist/unstable/schema/VariantSchema.js +13 -10
  359. package/dist/unstable/schema/VariantSchema.js.map +1 -1
  360. package/dist/unstable/socket/Socket.d.ts +1 -1
  361. package/dist/unstable/socket/Socket.js +1 -1
  362. package/dist/unstable/socket/Socket.js.map +1 -1
  363. package/dist/unstable/sql/SqlError.d.ts +2 -2
  364. package/dist/unstable/sql/SqlError.js +2 -2
  365. package/dist/unstable/sql/SqlError.js.map +1 -1
  366. package/dist/unstable/sql/Statement.d.ts.map +1 -1
  367. package/dist/unstable/sql/Statement.js +7 -6
  368. package/dist/unstable/sql/Statement.js.map +1 -1
  369. package/package.json +1 -1
  370. package/src/Array.ts +86 -25
  371. package/src/Channel.ts +32 -14
  372. package/src/Config.ts +6 -5
  373. package/src/ConfigProvider.ts +7 -7
  374. package/src/Data.ts +3 -2
  375. package/src/Effect.ts +70 -116
  376. package/src/FiberHandle.ts +3 -2
  377. package/src/Iterable.ts +2 -1
  378. package/src/JsonPatch.ts +4 -3
  379. package/src/JsonSchema.ts +9 -11
  380. package/src/Logger.ts +3 -2
  381. package/src/ManagedRuntime.ts +13 -0
  382. package/src/Metric.ts +4 -3
  383. package/src/MutableList.ts +4 -0
  384. package/src/Optic.ts +5 -4
  385. package/src/Option.ts +2 -1
  386. package/src/PartitionedSemaphore.ts +1 -4
  387. package/src/Record.ts +119 -22
  388. package/src/References.ts +0 -46
  389. package/src/Request.ts +5 -7
  390. package/src/Result.ts +2 -1
  391. package/src/Schema.ts +2538 -987
  392. package/src/SchemaAST.ts +228 -149
  393. package/src/SchemaError.ts +1 -1
  394. package/src/SchemaGetter.ts +36 -29
  395. package/src/SchemaIssue.ts +1 -1
  396. package/src/SchemaParser.ts +1 -25
  397. package/src/SchemaRepresentation.ts +697 -3398
  398. package/src/SchemaTransformation.ts +3 -3
  399. package/src/Semaphore.ts +5 -3
  400. package/src/Stream.ts +63 -19
  401. package/src/Struct.ts +5 -4
  402. package/src/Types.ts +1 -3
  403. package/src/index.ts +0 -5
  404. package/src/internal/core.ts +4 -3
  405. package/src/internal/effect.ts +132 -70
  406. package/src/internal/matcher.ts +1 -1
  407. package/src/internal/record.ts +11 -7
  408. package/src/internal/references.ts +0 -5
  409. package/src/internal/schema/annotations.ts +44 -0
  410. package/src/internal/schema/fromJsonSchemaDocument.ts +957 -0
  411. package/src/internal/schema/fromRepresentation.ts +345 -0
  412. package/src/internal/schema/schema.ts +45 -46
  413. package/src/internal/schema/{arbitrary.ts → toArbitrary.ts} +8 -10
  414. package/src/internal/schema/toCodeDocument.ts +572 -0
  415. package/src/internal/schema/{equivalence.ts → toEquivalence.ts} +12 -7
  416. package/src/internal/schema/toJsonSchemaDocument.ts +475 -0
  417. package/src/internal/schema/toRepresentation.ts +401 -0
  418. package/src/internal/stackTraceLimit.ts +3 -7
  419. package/src/testing/TestClock.ts +1 -1
  420. package/src/unstable/ai/AiError.ts +5 -4
  421. package/src/unstable/ai/AnthropicStructuredOutput.ts +102 -333
  422. package/src/unstable/ai/EmbeddingModel.ts +1 -1
  423. package/src/unstable/ai/LanguageModel.ts +30 -28
  424. package/src/unstable/ai/McpSchema.ts +15 -15
  425. package/src/unstable/ai/McpServer.ts +172 -56
  426. package/src/unstable/ai/OpenAiStructuredOutput.ts +230 -395
  427. package/src/unstable/ai/Response.ts +24 -24
  428. package/src/unstable/ai/Tool.ts +22 -4
  429. package/src/unstable/ai/Toolkit.ts +19 -7
  430. package/src/unstable/ai/internal/codec-transformer.ts +13 -7
  431. package/src/unstable/ai/internal/structured-output.ts +458 -0
  432. package/src/unstable/cli/CliError.ts +51 -5
  433. package/src/unstable/cli/Command.ts +4 -4
  434. package/src/unstable/cli/Param.ts +3 -3
  435. package/src/unstable/cli/Primitive.ts +1 -1
  436. package/src/unstable/cli/internal/command.ts +13 -5
  437. package/src/unstable/cli/internal/config.ts +8 -10
  438. package/src/unstable/cluster/ClusterWorkflowEngine.ts +3 -3
  439. package/src/unstable/cluster/Entity.ts +1 -1
  440. package/src/unstable/cluster/Envelope.ts +2 -1
  441. package/src/unstable/cluster/Reply.ts +1 -1
  442. package/src/unstable/cluster/Runner.ts +1 -1
  443. package/src/unstable/cluster/RunnerAddress.ts +1 -1
  444. package/src/unstable/cluster/ShardId.ts +1 -1
  445. package/src/unstable/cluster/Sharding.ts +161 -34
  446. package/src/unstable/cluster/ShardingConfig.ts +5 -1
  447. package/src/unstable/cluster/SingleRunner.ts +4 -2
  448. package/src/unstable/cluster/SqlMessageStorage.ts +83 -35
  449. package/src/unstable/cluster/SqlRunnerStorage.ts +186 -116
  450. package/src/unstable/cluster/internal/entityManager.ts +31 -10
  451. package/src/unstable/cluster/internal/shardLock.ts +9 -0
  452. package/src/unstable/devtools/DevToolsSchema.ts +10 -5
  453. package/src/unstable/eventlog/EventJournal.ts +1 -1
  454. package/src/unstable/eventlog/EventLog.ts +21 -11
  455. package/src/unstable/eventlog/EventLogEncryption.ts +1 -1
  456. package/src/unstable/eventlog/EventLogMessage.ts +10 -3
  457. package/src/unstable/eventlog/SqlEventJournal.ts +2 -2
  458. package/src/unstable/eventlog/SqlEventLogServerEncrypted.ts +1 -1
  459. package/src/unstable/eventlog/SqlEventLogServerUnencrypted.ts +6 -3
  460. package/src/unstable/http/Cookies.ts +29 -24
  461. package/src/unstable/http/Headers.ts +8 -8
  462. package/src/unstable/http/HttpClientRequest.ts +57 -0
  463. package/src/unstable/http/HttpRouter.ts +6 -3
  464. package/src/unstable/http/HttpServerRequest.ts +5 -4
  465. package/src/unstable/http/Multipart.ts +16 -13
  466. package/src/unstable/http/Template.ts +1 -1
  467. package/src/unstable/http/UrlParams.ts +17 -14
  468. package/src/unstable/httpapi/HttpApi.ts +3 -3
  469. package/src/unstable/httpapi/HttpApiClient.ts +5 -5
  470. package/src/unstable/httpapi/HttpApiGroup.ts +1 -1
  471. package/src/unstable/httpapi/OpenApi.ts +52 -28
  472. package/src/unstable/observability/OtlpExporter.ts +109 -5
  473. package/src/unstable/observability/OtlpLogger.ts +5 -5
  474. package/src/unstable/observability/OtlpMetrics.ts +8 -4
  475. package/src/unstable/observability/OtlpTracer.ts +8 -4
  476. package/src/unstable/persistence/Persistable.ts +3 -2
  477. package/src/unstable/persistence/RateLimiter.ts +2 -2
  478. package/src/unstable/persistence/Redis.ts +2 -2
  479. package/src/unstable/process/ChildProcessSpawner.ts +1 -1
  480. package/src/unstable/reactivity/AsyncResult.ts +4 -3
  481. package/src/unstable/reactivity/Atom.ts +92 -0
  482. package/src/unstable/reactivity/AtomRegistry.ts +1 -1
  483. package/src/unstable/rpc/RpcClient.ts +2 -1
  484. package/src/unstable/schema/VariantSchema.ts +14 -24
  485. package/src/unstable/socket/Socket.ts +1 -1
  486. package/src/unstable/sql/SqlError.ts +2 -2
  487. package/src/unstable/sql/Statement.ts +7 -6
  488. package/dist/SchemaUtils.d.ts +0 -28
  489. package/dist/SchemaUtils.d.ts.map +0 -1
  490. package/dist/SchemaUtils.js +0 -45
  491. package/dist/SchemaUtils.js.map +0 -1
  492. package/dist/internal/schema/arbitrary.d.ts.map +0 -1
  493. package/dist/internal/schema/arbitrary.js.map +0 -1
  494. package/dist/internal/schema/equivalence.d.ts +0 -2
  495. package/dist/internal/schema/equivalence.d.ts.map +0 -1
  496. package/dist/internal/schema/equivalence.js.map +0 -1
  497. package/dist/internal/schema/representation.d.ts +0 -2
  498. package/dist/internal/schema/representation.d.ts.map +0 -1
  499. package/dist/internal/schema/representation.js +0 -865
  500. package/dist/internal/schema/representation.js.map +0 -1
  501. package/src/SchemaUtils.ts +0 -51
  502. package/src/internal/schema/representation.ts +0 -795
@@ -3,24 +3,18 @@
3
3
  * structured output.
4
4
  *
5
5
  * The main entry point returns the JSON Schema to send to Anthropic and a codec
6
- * for decoding the model response back into the original application type. When
7
- * Anthropic cannot express the original schema shape directly, the conversion
8
- * rewrites supported cases such as tuples, records, optional properties, and
9
- * `oneOf` unions. Schema kinds that cannot be represented throw during
10
- * conversion instead of producing a lossy schema.
6
+ * for decoding the model response back into the original application type.
7
+ * Unsupported constraints can be omitted from the provider schema and remain
8
+ * enforced by the returned codec.
11
9
  *
12
10
  * @since 4.0.0
13
11
  */
14
- import * as Arr from "../../Array.ts"
15
12
  import * as JsonSchema from "../../JsonSchema.ts"
16
- import * as Option from "../../Option.ts"
17
- import * as Predicate from "../../Predicate.ts"
13
+ import * as Rec from "../../Record.ts"
18
14
  import * as Schema from "../../Schema.ts"
19
- import * as SchemaAST from "../../SchemaAST.ts"
20
- import * as SchemaTransformation from "../../SchemaTransformation.ts"
15
+ import * as InternalStructuredOutput from "./internal/structured-output.ts"
21
16
  import * as LanguageModel from "./LanguageModel.ts"
22
17
  import * as OpenAiStructuredOutput from "./OpenAiStructuredOutput.ts"
23
- import * as Tool from "./Tool.ts"
24
18
 
25
19
  /**
26
20
  * Converts a `Schema.Codec` to Anthropic structured-output JSON Schema and a
@@ -35,17 +29,21 @@ import * as Tool from "./Tool.ts"
35
29
  * **Details**
36
30
  *
37
31
  * Returns the JSON Schema to include in the request and the codec to use when
38
- * decoding the model response. If the input schema already fits Anthropic's
39
- * supported JSON Schema subset, the original codec is returned unchanged.
32
+ * decoding the model response. The codec remains authoritative: the provider
33
+ * JSON Schema can be a lossy, less restrictive representation when Anthropic
34
+ * cannot express an Effect Schema constraint.
40
35
  *
41
36
  * **Gotchas**
42
37
  *
43
38
  * - Some schemas use a provider-safe encoded shape: tuples become objects with
44
- * numeric string keys, records become arrays of `[key, value]` pairs, and
45
- * optional properties become required nullable properties.
39
+ * numeric string keys, objects with index signatures become arrays of
40
+ * `[key, value]` pairs, and optional properties become required nullable
41
+ * properties.
46
42
  * - `oneOf` unions are emitted as `anyOf` unions.
47
- * - Unsupported schema kinds throw during conversion instead of producing a
48
- * lossy schema.
43
+ * - Unsupported constraints are removed from the provider schema and are still
44
+ * checked while decoding with the returned codec.
45
+ * - Recursive schemas throw during conversion because Anthropic structured
46
+ * output does not support recursive references.
49
47
  *
50
48
  * @see {@link LanguageModel.CodecTransformer} for the structured-output transformer contract
51
49
  * @see {@link OpenAiStructuredOutput.toCodecOpenAI} for the OpenAI-specific transformer
@@ -59,349 +57,120 @@ export function toCodecAnthropic<T, E, RD, RE>(
59
57
  readonly codec: Schema.ConstraintCodec<T, unknown, RD, RE>
60
58
  readonly jsonSchema: JsonSchema.JsonSchema
61
59
  } {
62
- const to = schema.ast
63
- const from = recur(SchemaAST.toEncoded(to))
64
- const codec = from === to
65
- ? schema
66
- : Schema.make<typeof schema>(SchemaAST.decodeTo(from, to, SchemaTransformation.passthrough()))
67
- const document = JsonSchema.resolveTopLevel$ref(Schema.toJsonSchemaDocument(codec))
68
- const jsonSchema = { ...document.schema }
60
+ const codec = InternalStructuredOutput.toCodec(schema)
61
+ const unresolvedDocument = Schema.toJsonSchemaDocument(codec, { generateDescriptions: true })
62
+ if (hasReferenceCycle(unresolvedDocument.schema, unresolvedDocument.definitions)) {
63
+ throw new Error("AnthropicStructuredOutput: Recursive schemas are not supported")
64
+ }
65
+ const document = JsonSchema.resolveTopLevel$ref(unresolvedDocument)
66
+ const jsonSchema = rewriteAnthropic(document.schema)
69
67
  if (Object.keys(document.definitions).length > 0) {
70
- jsonSchema.$defs = document.definitions
68
+ jsonSchema.$defs = Rec.map(document.definitions, rewriteAnthropic)
71
69
  }
72
70
  return { codec, jsonSchema }
73
71
  }
74
72
 
75
- function recur(ast: SchemaAST.AST): SchemaAST.AST {
76
- switch (ast._tag) {
77
- case "Declaration":
78
- case "Void":
79
- case "Never":
80
- case "Unknown":
81
- case "Any":
82
- case "BigInt":
83
- case "Symbol":
84
- case "UniqueSymbol":
85
- case "ObjectKeyword":
86
- case "Enum":
87
- case "TemplateLiteral":
88
- case "Suspend":
89
- return unsupportedAst(
90
- ast,
91
- "Anthropic structured output does not support this schema kind; consider transforming the schema or using a different provider"
92
- )
93
- case "Undefined":
94
- return unsupportedAst(
95
- ast,
96
- "Anthropic structured output does not support undefined; consider transforming the schema or using a different provider; if using `Schema.optional`, consider using `Schema.optionalKey` instead"
97
- )
98
- case "Null":
99
- return ast
100
- case "String": {
101
- const { annotations, filters } = get(ast)
102
- if (annotations !== undefined || filters !== undefined) {
103
- return new SchemaAST.String(annotations, filters)
104
- }
105
- return ast
106
- }
107
- case "Number": {
108
- const { annotations, filters } = get(ast)
109
- if (annotations !== undefined || filters !== undefined) {
110
- return new SchemaAST.Number(annotations, filters)
111
- }
112
- return ast
113
- }
114
- case "Boolean":
115
- return ast
116
- case "Literal": {
117
- const literal = ast.literal
118
- if (typeof literal === "string" || typeof literal === "number" || typeof literal === "boolean") {
119
- const { annotations, filters } = get(ast)
120
- if (annotations !== undefined || filters !== undefined) {
121
- return new SchemaAST.Literal(ast.literal, annotations, filters)
122
- }
123
- return ast
124
- }
125
- throw new Error(
126
- `${errorPrefix}: Unsupported literal type ${typeof literal} (value: ${
127
- String(literal)
128
- }) (supported: string | number | boolean)`
129
- )
130
- }
131
- case "Union": {
132
- if (ast.mode === "oneOf") {
133
- return new SchemaAST.Union(ast.types, "anyOf", ast.annotations, ast.checks)
134
- }
135
- const types = SchemaAST.mapOrSame(ast.types, recur)
136
- const { annotations, filters } = get(ast)
137
- if (types !== ast.types || annotations !== undefined || filters !== undefined) {
138
- return new SchemaAST.Union(types, "anyOf", annotations, filters)
139
- }
140
- return ast
141
- }
142
- case "Arrays": {
143
- if (ast.rest.length > 1) {
144
- throw new Error(
145
- `${errorPrefix}: Post-rest elements are not supported for arrays (rest length: ${ast.rest.length})`
146
- )
147
- }
148
- let { annotations, filters } = get(ast)
149
- if (ast.elements.length > 0) {
150
- // tuples are not supported by Anthropic, we translate them to objects with string keys
151
- if (annotations !== undefined && typeof annotations.description === "string") {
152
- annotations.description = `${TUPLE_DESCRIPTION}; ${annotations.description}`
153
- } else {
154
- annotations ??= {}
155
- annotations.description = TUPLE_DESCRIPTION
156
- }
157
- const propertySignatures = ast.elements.map((e, i) => {
158
- return new SchemaAST.PropertySignature(String(i), e)
159
- })
160
- if (ast.rest.length === 1) {
161
- propertySignatures.push(
162
- new SchemaAST.PropertySignature(REST_PROPERTY_NAME, new SchemaAST.Arrays(false, [], ast.rest))
163
- )
164
- }
165
- return SchemaAST.decodeTo(
166
- recur(new SchemaAST.Objects(propertySignatures, [], annotations, filters)),
167
- ast,
168
- SchemaTransformation.transform({
169
- decode: (o) => {
170
- let t: Array<unknown> = []
171
- for (let i = 0; i < ast.elements.length; i++) {
172
- const k = String(i)
173
- if (o[k] !== undefined) {
174
- t.push(o[k])
175
- }
176
- }
177
- if (REST_PROPERTY_NAME in o) {
178
- t = [...t, ...o[REST_PROPERTY_NAME]]
179
- }
180
- return t
181
- },
182
- encode: (t) => {
183
- const o: Record<string, unknown> = {}
184
- for (let i = 0; i < ast.elements.length; i++) {
185
- if (t.length >= i) {
186
- o[String(i)] = t[i]
187
- }
188
- }
189
- if (ast.rest.length === 1) {
190
- o[REST_PROPERTY_NAME] = t.length >= ast.elements.length ? t.slice(ast.elements.length) : []
191
- }
192
- return o
193
- }
194
- })
195
- )
196
- } else {
197
- const rest = SchemaAST.mapOrSame(ast.rest, recur)
198
- if (rest !== ast.rest || annotations !== undefined || filters !== undefined) {
199
- return new SchemaAST.Arrays(false, [], rest, annotations, filters)
200
- }
201
- return ast
202
- }
203
- }
204
- case "Objects": {
205
- let { annotations, filters } = get(ast)
206
- if (ast.indexSignatures.length === 0) {
207
- const propertySignatures = SchemaAST.mapOrSame(ast.propertySignatures, (ps) => {
208
- if (typeof ps.name !== "string") {
209
- throw new Error(
210
- `${errorPrefix}: Property names must be strings (got ${typeof ps.name})`
211
- )
212
- }
213
- let type = recur(ps.type)
214
- // opttional properties are not supported by Anthropic, so we translate them to nullable unions
215
- if (SchemaAST.isOptional(ps.type)) {
216
- type = SchemaAST.decodeTo(
217
- new SchemaAST.Union([type, SchemaAST.null], "anyOf"),
218
- SchemaAST.optionalKey(type),
219
- SchemaTransformation.transformOptional({
220
- decode: Option.filter(Predicate.isNotNull),
221
- encode: Option.orElseSome(() => null)
222
- })
223
- )
224
- }
225
- if (type === ps.type) {
226
- return ps
227
- }
228
- return new SchemaAST.PropertySignature(ps.name, type)
229
- })
230
- if (
231
- propertySignatures !== ast.propertySignatures || annotations !== undefined || filters !== undefined
232
- ) {
233
- return new SchemaAST.Objects(propertySignatures, [], annotations, filters)
234
- }
235
- } else if (ast.indexSignatures.length === 1 && ast.propertySignatures.length === 0) {
236
- const is = ast.indexSignatures[0]
237
- if (Tool.isEmptyParamsRecord(is)) {
238
- return ast
239
- }
240
- // records are not supported by Anthropic, so we translate them to arrays of key-value pairs
241
- if (annotations !== undefined && typeof annotations.description === "string") {
242
- annotations.description = `${RECORD_DESCRIPTION}; ${annotations.description}`
243
- } else {
244
- annotations ??= {}
245
- annotations.description = RECORD_DESCRIPTION
246
- }
247
- return SchemaAST.decodeTo(
248
- recur(
249
- new SchemaAST.Arrays(false, [], [new SchemaAST.Arrays(false, [is.parameter, is.type], [])], annotations)
250
- ),
251
- ast,
252
- SchemaTransformation.transform({
253
- decode: Object.fromEntries,
254
- encode: Object.entries
255
- })
256
- )
257
- } else {
258
- throw new Error(
259
- `${errorPrefix}: unsupported object schema shape (properties: ${ast.propertySignatures.length}, indexSignatures: ${ast.indexSignatures.length}). Supported: plain objects (properties only) or records (single index signature, no properties)`
260
- )
73
+ function hasReferenceCycle(
74
+ root: JsonSchema.JsonSchema,
75
+ definitions: JsonSchema.Definitions
76
+ ): boolean {
77
+ const visiting = new Set<JsonSchema.JsonSchema>()
78
+ const visited = new Set<JsonSchema.JsonSchema>()
79
+
80
+ function visit(schema: JsonSchema.JsonSchema): boolean {
81
+ if (visiting.has(schema)) return true
82
+ if (visited.has(schema)) return false
83
+
84
+ visiting.add(schema)
85
+ let cycle = false
86
+ InternalStructuredOutput.walkJsonSchema(schema, (node) => {
87
+ if (!cycle && typeof node.$ref === "string") {
88
+ const target = node.$ref === "#" ? root : JsonSchema.resolve$ref(node.$ref, definitions)
89
+ if (target !== undefined && visit(target)) cycle = true
261
90
  }
262
- return ast
263
- }
91
+ return node
92
+ })
93
+ visiting.delete(schema)
94
+ visited.add(schema)
95
+ return cycle
264
96
  }
265
- }
266
-
267
- const errorPrefix = "AnthropicStructuredOutput"
268
97
 
269
- function unsupportedAst(ast: SchemaAST.AST, details?: string): never {
270
- const base = `Unsupported AST ${ast._tag}`
271
- const full = `${errorPrefix}: ${base}`
272
- throw new Error(details !== undefined ? `${full} (${details})` : full)
98
+ return visit(root)
273
99
  }
274
100
 
275
- const REST_PROPERTY_NAME = "__rest__"
276
-
277
- const RECORD_DESCRIPTION =
278
- "Object encoded as array of [key, value] pairs. Apply object constraints to the decoded object"
279
-
280
- const TUPLE_DESCRIPTION =
281
- "Tuple encoded as an object with numeric string keys ('0', '1', ...). If present, '__rest__' contains remaining elements"
282
-
283
- type Annotation =
284
- | { readonly _tag: "description"; readonly description: string }
285
- | { readonly _tag: "format"; readonly format: string }
286
-
287
- type Filter =
288
- | Annotation
289
- | { readonly _tag: "filter"; readonly filter: SchemaAST.Filter<any> }
290
-
291
- const get = (ast: SchemaAST.AST): {
292
- annotations: Record<string, string> | undefined
293
- filters: [SchemaAST.Check<any>, ...SchemaAST.Check<any>[]] | undefined
294
- } => {
295
- const annotations: Record<string, string> = {}
296
- const filters: Array<SchemaAST.Filter<any>> = []
297
- const checks = getChecks(ast)
298
- if (checks.length > 0) {
299
- for (const check of checks) {
300
- switch (check._tag) {
301
- case "description": {
302
- if (annotations.description !== undefined) {
303
- annotations.description += ` and ${check.description}`
304
- } else {
305
- annotations.description = check.description
306
- }
307
- break
308
- }
309
- case "format": {
310
- annotations.format = check.format
311
- break
312
- }
313
- case "filter": {
314
- filters.push(check.filter)
315
- break
316
- }
101
+ function rewriteAnthropic(schema: JsonSchema.JsonSchema): JsonSchema.JsonSchema {
102
+ return InternalStructuredOutput.walkJsonSchema(schema, (schema) => {
103
+ const normalized = hoistAllOfDescriptions(schema)
104
+ const out: JsonSchema.JsonSchema = {}
105
+ let unsupportedFormat: string | undefined
106
+ for (const [key, value] of Object.entries(normalized)) {
107
+ if (key === "format") {
108
+ if (
109
+ typeof value === "string" && formats.has(value) &&
110
+ (normalized.type === undefined || normalized.type === "string")
111
+ ) {
112
+ out.format = value
113
+ } else if (typeof value === "string") unsupportedFormat = value
114
+ } else if (supportedKeywords.has(key)) {
115
+ if (key !== "additionalProperties" || value === false) out[key] = value
317
116
  }
318
117
  }
319
- }
320
- return {
321
- annotations: Object.keys(annotations).length > 0 ? annotations : undefined,
322
- filters: Arr.isArrayNonEmpty(filters) ? filters : undefined
323
- }
118
+ if (unsupportedFormat !== undefined) {
119
+ InternalStructuredOutput.appendDescription(out, `a value with a format of ${unsupportedFormat}`)
120
+ }
121
+ return out
122
+ })
324
123
  }
325
124
 
326
- const getChecks = (ast: SchemaAST.AST): Array<Filter> => [
327
- ...(ast.checks !== undefined ? getFilters(ast.checks) : []),
328
- ...getAnnotations(ast.annotations)
329
- ]
125
+ function hoistAllOfDescriptions(schema: JsonSchema.JsonSchema): JsonSchema.JsonSchema {
126
+ if (!Array.isArray(schema.allOf)) return schema
330
127
 
331
- const getAnnotations = (annotations: Schema.Annotations.Filter | undefined): Array<Annotation> => {
332
- const out: Array<Annotation> = []
333
- if (annotations !== undefined) {
334
- const description = annotations?.description
335
- ?? (annotations.meta?._tag === "isInt" || annotations.meta?._tag === "isFinite"
336
- ? undefined
337
- : annotations?.expected)
338
- if (typeof description === "string") {
339
- out.push({ _tag: "description", description })
340
- }
341
- const format = annotations?.format
342
- if (typeof format === "string") {
343
- if (formats.includes(format)) {
344
- out.push({ _tag: "format", format })
345
- } else {
346
- out.push({ _tag: "description", description: `a value with a format of ${format}` })
347
- }
348
- }
128
+ const out: JsonSchema.JsonSchema = {}
129
+ for (const [key, value] of Object.entries(schema)) {
130
+ if (key !== "allOf") out[key] = value
349
131
  }
350
- return out
351
- }
352
-
353
- function getFilter(filter: SchemaAST.Filter<any>): Array<Filter> {
354
- let out: Array<Filter> = []
355
- const annotations = getAnnotations(filter.annotations)
356
- const meta = filter.annotations?.meta
357
- if (meta !== undefined) {
358
- switch (meta._tag) {
359
- case "isInt":
360
- case "isFinite": {
361
- out = out.concat(annotations)
362
- out.push({ _tag: "filter", filter: resetFilter(filter) })
363
- break
364
- }
365
- default: {
366
- out = out.concat(annotations)
367
- break
368
- }
369
- }
370
- if ("regExp" in meta && meta.regExp instanceof RegExp) {
371
- out.push({ _tag: "filter", filter: resetFilter(filter) })
132
+ const members: Array<JsonSchema.JsonSchema> = []
133
+ for (const member of schema.allOf) {
134
+ if (!InternalStructuredOutput.isJsonSchema(member)) continue
135
+ const { description, format, title, ...memberRest } = member
136
+ const rest = { ...memberRest }
137
+ if (schema.type !== undefined && schema.type !== "string") delete rest.pattern
138
+ if (typeof description === "string") {
139
+ InternalStructuredOutput.appendDescription(out, description)
372
140
  }
141
+ if (out.format === undefined && typeof format === "string") out.format = format
142
+ if (out.title === undefined && typeof title === "string") out.title = title
143
+ if (Object.keys(rest).length > 0) members.push(rest)
373
144
  }
145
+ if (members.length > 0) out.allOf = members
374
146
  return out
375
147
  }
376
148
 
377
- function resetFilter(filter: SchemaAST.Filter<any>): SchemaAST.Filter<any> {
378
- return filter.annotate({
379
- description: undefined,
380
- expected: undefined,
381
- title: undefined,
382
- format: undefined
383
- })
384
- }
385
-
386
- function getFilters(checks: readonly [SchemaAST.Check<any>, ...SchemaAST.Check<any>[]]): Array<Filter> {
387
- return checks.flatMap((check) => {
388
- switch (check._tag) {
389
- case "Filter":
390
- return getFilter(check)
391
- case "FilterGroup":
392
- return getFilters(check.checks)
393
- }
394
- })
395
- }
396
-
397
- const formats = [
149
+ const supportedKeywords = new Set([
150
+ "$ref",
151
+ "type",
152
+ "title",
153
+ "description",
154
+ "enum",
155
+ "const",
156
+ "anyOf",
157
+ "allOf",
158
+ "properties",
159
+ "required",
160
+ "additionalProperties",
161
+ "items",
162
+ "pattern"
163
+ ])
164
+
165
+ const formats = new Set([
398
166
  "date-time",
399
167
  "time",
400
168
  "date",
401
169
  "duration",
402
170
  "email",
403
171
  "hostname",
172
+ "uri",
404
173
  "ipv4",
405
174
  "ipv6",
406
175
  "uuid"
407
- ]
176
+ ])
@@ -69,7 +69,7 @@ export class Dimensions extends Context.Service<Dimensions, number>()(
69
69
  export class EmbeddingUsage extends Schema.Class<EmbeddingUsage>(
70
70
  "effect/ai/EmbeddingModel/EmbeddingUsage"
71
71
  )({
72
- inputTokens: Schema.UndefinedOr(Schema.Finite)
72
+ inputTokens: Schema.optional(Schema.Finite)
73
73
  }) {}
74
74
 
75
75
  /**