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
@@ -4,21 +4,15 @@
4
4
  * OpenAI structured output accepts only a subset of JSON Schema. This module
5
5
  * converts an Effect `Schema.Codec` into a provider-compatible JSON Schema and
6
6
  * a matching codec for decoding the model response back into the original
7
- * application type. When possible, unsupported schema shapes are rewritten into
8
- * supported ones; schema kinds that cannot be represented safely fail during
9
- * conversion.
7
+ * application type. Unsupported constraints can be omitted from the provider
8
+ * schema and remain enforced by the returned codec.
10
9
  *
11
10
  * @since 4.0.0
12
11
  */
13
- import * as Arr from "../../Array.js";
14
12
  import * as JsonSchema from "../../JsonSchema.js";
15
- import * as Option from "../../Option.js";
16
- import * as Predicate from "../../Predicate.js";
17
13
  import * as Rec from "../../Record.js";
18
14
  import * as Schema from "../../Schema.js";
19
- import * as SchemaAST from "../../SchemaAST.js";
20
- import * as SchemaTransformation from "../../SchemaTransformation.js";
21
- import * as Tool from "./Tool.js";
15
+ import * as InternalStructuredOutput from "./internal/structured-output.js";
22
16
  /**
23
17
  * Converts a `Schema.Codec` to OpenAI structured-output JSON Schema and a
24
18
  * matching codec for model output.
@@ -26,35 +20,49 @@ import * as Tool from "./Tool.js";
26
20
  * **When to use**
27
21
  *
28
22
  * Use when you send Effect Schema-backed structured output requests to OpenAI
29
- * and need provider-compatible JSON Schema without losing the decoded
30
- * application type.
23
+ * standard models and need provider-compatible JSON Schema without losing the
24
+ * decoded application type.
31
25
  *
32
26
  * **Details**
33
27
  *
34
28
  * Returns the JSON Schema to include in the request and the codec to use when
35
- * decoding the model response. If the input schema already fits OpenAI's
36
- * supported JSON Schema subset, the original codec is returned unchanged.
29
+ * decoding the model response. The codec remains authoritative: the provider
30
+ * JSON Schema can be a lossy, less restrictive representation when OpenAI
31
+ * cannot express an Effect Schema constraint. Conversion throws when the
32
+ * resulting root is not an object or contains `anyOf`.
37
33
  *
38
34
  * **Gotchas**
39
35
  *
40
36
  * - Some schemas use a provider-safe encoded shape: tuples become objects with
41
- * numeric string keys, records become arrays of `[key, value]` pairs, and
42
- * optional properties become required nullable properties.
37
+ * numeric string keys, objects with index signatures become arrays of
38
+ * `[key, value]` pairs, and optional properties become required nullable
39
+ * properties.
43
40
  * - `oneOf` unions are emitted as `anyOf` unions.
44
- * - Regex patterns from multiple filters are merged into one `pattern` because
45
- * OpenAI structured output does not support `allOf`.
46
- * - Unsupported schema kinds throw during conversion instead of producing a
47
- * lossy schema.
41
+ * - Compatible regex patterns are merged because OpenAI structured output does
42
+ * not support `allOf`.
43
+ * - The root JSON Schema must be an object and cannot use `anyOf`.
44
+ * - Constraints inside `allOf` are retained only when they have an explicit,
45
+ * semantics-preserving normalization rule.
46
+ * - Structural constraints inside `allOf`, such as `properties`, `required`,
47
+ * `additionalProperties`, and `items`, are omitted instead of being merged
48
+ * with a different meaning.
49
+ * - Unsupported constraints are removed from the provider schema and are still
50
+ * checked while decoding with the returned codec.
51
+ * - Compatibility targets standard OpenAI models. Fine-tuned models support a
52
+ * smaller JSON Schema subset.
48
53
  *
49
54
  * @category Codec Transformation
50
55
  * @since 4.0.0
51
56
  */
52
57
  export function toCodecOpenAI(schema) {
53
- const to = schema.ast;
54
- const from = recurOpenAI(SchemaAST.toEncoded(to));
55
- const codec = from === to ? schema : Schema.make(SchemaAST.decodeTo(from, to, SchemaTransformation.passthrough()));
56
- const document = JsonSchema.resolveTopLevel$ref(Schema.toJsonSchemaDocument(codec));
58
+ const codec = InternalStructuredOutput.toCodec(schema);
59
+ const document = JsonSchema.resolveTopLevel$ref(Schema.toJsonSchemaDocument(codec, {
60
+ generateDescriptions: true
61
+ }));
57
62
  const jsonSchema = rewriteOpenAI(document.schema);
63
+ if (jsonSchema.type !== "object" || jsonSchema.anyOf !== undefined) {
64
+ throw new Error(`OpenAiStructuredOutput: Root JSON Schema must have type "object" and must not use "anyOf"`);
65
+ }
58
66
  if (Object.keys(document.definitions).length > 0) {
59
67
  jsonSchema.$defs = Rec.map(document.definitions, rewriteOpenAI);
60
68
  }
@@ -63,375 +71,183 @@ export function toCodecOpenAI(schema) {
63
71
  jsonSchema
64
72
  };
65
73
  }
66
- /**
67
- * Post-processes the JSON schema produced by `Schema.toJsonSchemaDocument`,
68
- * recursively flattening `allOf` arrays by merging each member's keys into
69
- * the parent object. This is necessary because OpenAI structured output does
70
- * not support `allOf`.
71
- */
72
74
  function rewriteOpenAI(schema) {
73
- const out = {};
74
- for (const [k, v] of Object.entries(schema)) {
75
- if (k === "allOf" && Array.isArray(v)) {
76
- for (const member of v) {
77
- Object.assign(out, rewriteOpenAI(member));
75
+ return InternalStructuredOutput.walkJsonSchema(schema, schema => {
76
+ const normalized = normalizeAllOf(schema);
77
+ const out = {};
78
+ let unsupportedFormat;
79
+ for (const [key, value] of Object.entries(normalized)) {
80
+ if (key === "format") {
81
+ if (typeof value === "string" && formats.has(value) && supportsType(key, normalized.type)) out.format = value;else if (typeof value === "string") unsupportedFormat = value;
82
+ } else if (supportedKeywords.has(key) && supportsType(key, normalized.type)) {
83
+ if (key !== "additionalProperties" || value === false) out[key] = value;
78
84
  }
79
- } else if (Array.isArray(v)) {
80
- out[k] = v.map(item => typeof item === "object" && item !== null && !Array.isArray(item) ? rewriteOpenAI(item) : item);
81
- } else if (typeof v === "object" && v !== null) {
82
- out[k] = rewriteOpenAI(v);
83
- } else {
84
- out[k] = v;
85
85
  }
86
+ if (unsupportedFormat !== undefined) {
87
+ InternalStructuredOutput.appendDescription(out, `a value with a format of ${unsupportedFormat}`);
88
+ }
89
+ if (out.type === "object" && out.properties === undefined && out.additionalProperties === false) {
90
+ out.properties = {};
91
+ }
92
+ return out;
93
+ });
94
+ }
95
+ function supportsType(key, type) {
96
+ if (typeof type !== "string") return true;
97
+ switch (key) {
98
+ case "pattern":
99
+ case "format":
100
+ return type === "string";
101
+ case "multipleOf":
102
+ case "minimum":
103
+ case "exclusiveMinimum":
104
+ case "maximum":
105
+ case "exclusiveMaximum":
106
+ return type === "number" || type === "integer";
107
+ case "items":
108
+ case "minItems":
109
+ case "maxItems":
110
+ return type === "array";
111
+ case "properties":
112
+ case "patternProperties":
113
+ case "required":
114
+ case "additionalProperties":
115
+ return type === "object";
116
+ default:
117
+ return true;
86
118
  }
87
- if (out.type === "object" && out.properties === undefined && out.additionalProperties === false) {
88
- out.properties = {};
119
+ }
120
+ function normalizeAllOf(schema) {
121
+ if (!Array.isArray(schema.allOf)) return schema;
122
+ const out = {};
123
+ const patterns = [];
124
+ const baseKeywords = new Set();
125
+ const memberKeywords = new Set();
126
+ const ambiguousKeywords = new Set();
127
+ for (const [key, value] of Object.entries(schema)) {
128
+ if (key === "allOf") continue;
129
+ baseKeywords.add(key);
130
+ if (key === "pattern" && typeof value === "string") patterns.push(value);else out[key] = value;
131
+ }
132
+ for (const member of schema.allOf) {
133
+ if (!InternalStructuredOutput.isJsonSchema(member)) continue;
134
+ for (const [key, value] of Object.entries(member)) {
135
+ mergeAllOfKeyword(out, key, value, patterns, baseKeywords, memberKeywords, ambiguousKeywords);
136
+ }
137
+ }
138
+ const uniquePatterns = Array.from(new Set(patterns));
139
+ if (uniquePatterns.length === 1) {
140
+ out.pattern = uniquePatterns[0];
141
+ } else if (uniquePatterns.length > 1) {
142
+ const combined = uniquePatterns.map(source => `(?=[\\s\\S]*?(?:${source}))`).join("");
143
+ out.pattern = `^${combined}`;
89
144
  }
90
145
  return out;
91
146
  }
92
- function recurOpenAI(ast) {
93
- switch (ast._tag) {
94
- case "Declaration":
95
- case "Void":
96
- case "Never":
97
- case "Unknown":
98
- case "Any":
99
- case "BigInt":
100
- case "Symbol":
101
- case "UniqueSymbol":
102
- case "ObjectKeyword":
103
- case "Enum":
104
- case "TemplateLiteral":
105
- return unsupportedAst(ast, "OpenAI structured output does not support this schema kind; consider transforming the schema or using a different provider");
106
- case "Undefined":
107
- return unsupportedAst(ast, "OpenAI structured output does not support undefined; consider transforming the schema or using a different provider; if using `Schema.optional`, consider using `Schema.optionalKey` instead");
108
- case "Null":
109
- return ast;
110
- case "String":
111
- {
112
- const {
113
- annotations,
114
- filters
115
- } = get(ast);
116
- if (annotations !== undefined || filters !== undefined) {
117
- return new SchemaAST.String(annotations, filters);
118
- }
119
- return ast;
120
- }
121
- case "Number":
122
- {
123
- const {
124
- annotations,
125
- filters
126
- } = get(ast);
127
- if (annotations !== undefined || filters !== undefined) {
128
- return new SchemaAST.Number(annotations, filters);
129
- }
130
- return ast;
131
- }
132
- case "Boolean":
133
- return ast;
134
- case "Literal":
135
- {
136
- const literal = ast.literal;
137
- if (typeof literal === "string" || typeof literal === "number" || typeof literal === "boolean") {
138
- const {
139
- annotations,
140
- filters
141
- } = get(ast);
142
- if (annotations !== undefined || filters !== undefined) {
143
- return new SchemaAST.Literal(ast.literal, annotations, filters);
144
- }
145
- return ast;
146
- }
147
- throw new Error(`${errorPrefix}: Unsupported literal type ${typeof literal} (value: ${String(literal)}) (supported: string | number | boolean)`);
148
- }
149
- case "Union":
150
- {
151
- if (ast.mode === "oneOf") {
152
- return new SchemaAST.Union(ast.types, "anyOf", ast.annotations, ast.checks);
153
- }
154
- const types = SchemaAST.mapOrSame(ast.types, recurOpenAI);
155
- const {
156
- annotations,
157
- filters
158
- } = get(ast);
159
- if (types !== ast.types || annotations !== undefined || filters !== undefined) {
160
- return new SchemaAST.Union(types, "anyOf", annotations, filters);
161
- }
162
- return ast;
163
- }
164
- case "Arrays":
165
- {
166
- if (ast.rest.length > 1) {
167
- throw new Error(`${errorPrefix}: Post-rest elements are not supported for arrays (rest length: ${ast.rest.length})`);
168
- }
169
- let {
170
- annotations,
171
- filters
172
- } = get(ast);
173
- if (ast.elements.length > 0) {
174
- // tuples are not supported by OpenAI, we translate them to objects with string keys
175
- if (annotations !== undefined && typeof annotations.description === "string") {
176
- annotations.description = `${TUPLE_DESCRIPTION}; ${annotations.description}`;
177
- } else {
178
- annotations ??= {};
179
- annotations.description = TUPLE_DESCRIPTION;
180
- }
181
- const propertySignatures = ast.elements.map((e, i) => {
182
- return new SchemaAST.PropertySignature(String(i), e);
183
- });
184
- if (ast.rest.length === 1) {
185
- propertySignatures.push(new SchemaAST.PropertySignature(REST_PROPERTY_NAME, new SchemaAST.Arrays(false, [], ast.rest)));
186
- }
187
- return SchemaAST.decodeTo(recurOpenAI(new SchemaAST.Objects(propertySignatures, [], annotations, filters)), ast, SchemaTransformation.transform({
188
- decode: o => {
189
- let t = [];
190
- for (let i = 0; i < ast.elements.length; i++) {
191
- const k = String(i);
192
- if (o[k] !== undefined) {
193
- t.push(o[k]);
194
- }
195
- }
196
- if (REST_PROPERTY_NAME in o) {
197
- t = [...t, ...o[REST_PROPERTY_NAME]];
198
- }
199
- return t;
200
- },
201
- encode: t => {
202
- const o = {};
203
- for (let i = 0; i < ast.elements.length; i++) {
204
- if (t.length >= i) {
205
- o[String(i)] = t[i];
206
- }
207
- }
208
- if (ast.rest.length === 1) {
209
- o[REST_PROPERTY_NAME] = t.length >= ast.elements.length ? t.slice(ast.elements.length) : [];
210
- }
211
- return o;
212
- }
213
- }));
214
- } else {
215
- const rest = SchemaAST.mapOrSame(ast.rest, recurOpenAI);
216
- if (rest !== ast.rest || annotations !== undefined || filters !== undefined) {
217
- return new SchemaAST.Arrays(false, [], rest, annotations, filters);
218
- }
219
- return ast;
220
- }
221
- }
222
- case "Objects":
223
- {
224
- let {
225
- annotations,
226
- filters
227
- } = get(ast);
228
- if (ast.indexSignatures.length === 0) {
229
- const propertySignatures = SchemaAST.mapOrSame(ast.propertySignatures, ps => {
230
- if (typeof ps.name !== "string") {
231
- throw new Error(`${errorPrefix}: Property names must be strings (got ${typeof ps.name})`);
232
- }
233
- let type = recurOpenAI(ps.type);
234
- // optional properties are not supported by OpenAI, so we translate them to nullable unions
235
- if (SchemaAST.isOptional(ps.type)) {
236
- type = SchemaAST.decodeTo(new SchemaAST.Union([type, SchemaAST.null], "anyOf"), SchemaAST.optionalKey(type), SchemaTransformation.transformOptional({
237
- decode: Option.filter(Predicate.isNotNull),
238
- encode: Option.orElseSome(() => null)
239
- }));
240
- }
241
- if (type === ps.type) {
242
- return ps;
243
- }
244
- return new SchemaAST.PropertySignature(ps.name, type);
245
- });
246
- if (propertySignatures !== ast.propertySignatures || annotations !== undefined || filters !== undefined) {
247
- return new SchemaAST.Objects(propertySignatures, [], annotations, filters);
248
- }
249
- } else if (ast.indexSignatures.length === 1 && ast.propertySignatures.length === 0) {
250
- const is = ast.indexSignatures[0];
251
- if (Tool.isEmptyParamsRecord(is)) {
252
- return ast;
253
- }
254
- // records are not supported by OpenAI, so we translate them to arrays of key-value pairs
255
- if (annotations !== undefined && typeof annotations.description === "string") {
256
- annotations.description = `${RECORD_DESCRIPTION}; ${annotations.description}`;
257
- } else {
258
- annotations ??= {};
259
- annotations.description = RECORD_DESCRIPTION;
260
- }
261
- return SchemaAST.decodeTo(recurOpenAI(new SchemaAST.Arrays(false, [], [new SchemaAST.Arrays(false, [is.parameter, is.type], [])], annotations)), ast, SchemaTransformation.transform({
262
- decode: Object.fromEntries,
263
- encode: Object.entries
264
- }));
265
- } else {
266
- throw new Error(`${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)`);
267
- }
268
- return ast;
269
- }
270
- case "Suspend":
271
- {
272
- const cached = cache.get(ast);
273
- if (cached) return cached;
274
- const {
275
- annotations
276
- } = get(ast);
277
- const out = new SchemaAST.Suspend(() => recurOpenAI(ast.thunk()), annotations);
278
- cache.set(ast, out);
279
- return out;
147
+ function mergeAllOfKeyword(out, key, value, patterns, baseKeywords, memberKeywords, ambiguousKeywords) {
148
+ switch (key) {
149
+ case "description":
150
+ if (typeof value === "string") InternalStructuredOutput.appendDescription(out, value);
151
+ return;
152
+ case "pattern":
153
+ if (typeof value === "string") patterns.push(value);
154
+ return;
155
+ case "minimum":
156
+ case "exclusiveMinimum":
157
+ mergeLowerBound(out, key, value);
158
+ return;
159
+ case "maximum":
160
+ case "exclusiveMaximum":
161
+ mergeUpperBound(out, key, value);
162
+ return;
163
+ case "minItems":
164
+ mergeMinimum(out, key, value);
165
+ return;
166
+ case "maxItems":
167
+ mergeMaximum(out, key, value);
168
+ return;
169
+ default:
170
+ if (!normalizableAllOfKeywords.has(key) || baseKeywords.has(key) || ambiguousKeywords.has(key)) return;
171
+ if (!memberKeywords.has(key)) {
172
+ out[key] = value;
173
+ memberKeywords.add(key);
174
+ } else if (out[key] !== value) {
175
+ delete out[key];
176
+ memberKeywords.delete(key);
177
+ ambiguousKeywords.add(key);
280
178
  }
179
+ return;
281
180
  }
282
181
  }
283
- const cache = /*#__PURE__*/new Map();
284
- const errorPrefix = "OpenAiStructuredOutput";
285
- function unsupportedAst(ast, details) {
286
- const base = `Unsupported AST ${ast._tag}`;
287
- const full = `${errorPrefix}: ${base}`;
288
- throw new Error(details !== undefined ? `${full} (${details})` : full);
182
+ function mergeMinimum(schema, key, value) {
183
+ if (typeof value !== "number") return;
184
+ const current = schema[key];
185
+ if (typeof current !== "number" || value > current) schema[key] = value;
289
186
  }
290
- const REST_PROPERTY_NAME = "__rest__";
291
- const RECORD_DESCRIPTION = "Object encoded as array of [key, value] pairs. Apply object constraints to the decoded object";
292
- const TUPLE_DESCRIPTION = "Tuple encoded as an object with numeric string keys ('0', '1', ...). If present, '__rest__' contains remaining elements";
293
- const get = ast => {
294
- const annotations = {};
295
- const filters = [];
296
- const regexSources = [];
297
- const checks = getChecks(ast, SchemaAST.isArrays(ast));
298
- if (checks.length > 0) {
299
- for (const check of checks) {
300
- switch (check._tag) {
301
- case "description":
302
- {
303
- if (annotations.description !== undefined) {
304
- annotations.description += ` and ${check.description}`;
305
- } else {
306
- annotations.description = check.description;
307
- }
308
- break;
309
- }
310
- case "format":
311
- {
312
- annotations.format = check.format;
313
- break;
314
- }
315
- case "filter":
316
- {
317
- filters.push(check.filter);
318
- break;
319
- }
320
- case "regex":
321
- {
322
- regexSources.push(check.source);
323
- break;
324
- }
325
- }
326
- }
327
- }
328
- // OpenAI does not support allOf, so we merge multiple regex patterns into a single isPattern filter
329
- if (regexSources.length === 1) {
330
- filters.push(SchemaAST.isPattern(new RegExp(regexSources[0])));
331
- } else if (regexSources.length > 1) {
332
- const combined = regexSources.map(s => `(?=[\\s\\S]*?(?:${s}))`).join("");
333
- filters.push(SchemaAST.isPattern(new RegExp(`^${combined}`)));
187
+ function mergeMaximum(schema, key, value) {
188
+ if (typeof value !== "number") return;
189
+ const current = schema[key];
190
+ if (typeof current !== "number" || value < current) schema[key] = value;
191
+ }
192
+ function mergeLowerBound(schema, key, value) {
193
+ if (typeof value !== "number") {
194
+ if (!Object.hasOwn(schema, key)) schema[key] = value;
195
+ return;
334
196
  }
335
- return {
336
- annotations: Object.keys(annotations).length > 0 ? annotations : undefined,
337
- filters: Arr.isArrayNonEmpty(filters) ? filters : undefined
197
+ const minimum = typeof schema.minimum === "number" ? schema.minimum : undefined;
198
+ const exclusiveMinimum = typeof schema.exclusiveMinimum === "number" ? schema.exclusiveMinimum : undefined;
199
+ let current;
200
+ if (minimum !== undefined) current = {
201
+ value: minimum,
202
+ exclusive: false
338
203
  };
339
- };
340
- const getChecks = (ast, isArray) => [...(ast.checks !== undefined ? getFilters(ast.checks, isArray) : []), ...getAnnotations(ast.annotations)];
341
- const getAnnotations = annotations => {
342
- const out = [];
343
- if (annotations !== undefined) {
344
- const description = annotations?.description ?? (annotations.meta?._tag === "isInt" || annotations.meta?._tag === "isFinite" ? undefined : annotations?.expected);
345
- if (typeof description === "string") {
346
- out.push({
347
- _tag: "description",
348
- description
349
- });
350
- }
351
- const format = annotations?.format;
352
- if (typeof format === "string") {
353
- if (formats.includes(format)) {
354
- out.push({
355
- _tag: "format",
356
- format
357
- });
358
- } else {
359
- out.push({
360
- _tag: "description",
361
- description: `a value with a format of ${format}`
362
- });
363
- }
364
- }
204
+ if (exclusiveMinimum !== undefined && (current === undefined || exclusiveMinimum >= current.value)) {
205
+ current = {
206
+ value: exclusiveMinimum,
207
+ exclusive: true
208
+ };
365
209
  }
366
- return out;
367
- };
368
- function getFilter(filter, isArray) {
369
- let out = [];
370
- const annotations = getAnnotations(filter.annotations);
371
- const meta = filter.annotations?.meta;
372
- if (meta !== undefined) {
373
- switch (meta._tag) {
374
- case "isMinLength":
375
- case "isMaxLength":
376
- case "isLengthBetween":
377
- {
378
- out = out.concat(annotations);
379
- if (isArray) {
380
- out.push({
381
- _tag: "filter",
382
- filter: resetFilter(filter)
383
- });
384
- }
385
- break;
386
- }
387
- case "isInt":
388
- case "isFinite":
389
- case "isGreaterThan":
390
- case "isGreaterThanOrEqualTo":
391
- case "isLessThan":
392
- case "isLessThanOrEqualTo":
393
- case "isBetween":
394
- case "isMultipleOf":
395
- {
396
- out = out.concat(annotations);
397
- out.push({
398
- _tag: "filter",
399
- filter: resetFilter(filter)
400
- });
401
- break;
402
- }
403
- default:
404
- {
405
- out = out.concat(annotations);
406
- break;
407
- }
408
- }
409
- if ("regExp" in meta && meta.regExp instanceof RegExp) {
410
- out.push({
411
- _tag: "regex",
412
- source: meta.regExp.source
413
- });
414
- }
210
+ const candidate = {
211
+ value,
212
+ exclusive: key === "exclusiveMinimum"
213
+ };
214
+ if (current === undefined || candidate.value > current.value || candidate.value === current.value && candidate.exclusive) {
215
+ current = candidate;
415
216
  }
416
- return out;
417
- }
418
- function resetFilter(filter) {
419
- return filter.annotate({
420
- description: undefined,
421
- expected: undefined,
422
- title: undefined,
423
- format: undefined
424
- });
217
+ delete schema.minimum;
218
+ delete schema.exclusiveMinimum;
219
+ schema[current.exclusive ? "exclusiveMinimum" : "minimum"] = current.value;
425
220
  }
426
- function getFilters(checks, isArray) {
427
- return checks.flatMap(check => {
428
- switch (check._tag) {
429
- case "Filter":
430
- return getFilter(check, isArray);
431
- case "FilterGroup":
432
- return getFilters(check.checks, isArray);
433
- }
434
- });
221
+ function mergeUpperBound(schema, key, value) {
222
+ if (typeof value !== "number") {
223
+ if (!Object.hasOwn(schema, key)) schema[key] = value;
224
+ return;
225
+ }
226
+ const maximum = typeof schema.maximum === "number" ? schema.maximum : undefined;
227
+ const exclusiveMaximum = typeof schema.exclusiveMaximum === "number" ? schema.exclusiveMaximum : undefined;
228
+ let current;
229
+ if (maximum !== undefined) current = {
230
+ value: maximum,
231
+ exclusive: false
232
+ };
233
+ if (exclusiveMaximum !== undefined && (current === undefined || exclusiveMaximum <= current.value)) {
234
+ current = {
235
+ value: exclusiveMaximum,
236
+ exclusive: true
237
+ };
238
+ }
239
+ const candidate = {
240
+ value,
241
+ exclusive: key === "exclusiveMaximum"
242
+ };
243
+ if (current === undefined || candidate.value < current.value || candidate.value === current.value && candidate.exclusive) {
244
+ current = candidate;
245
+ }
246
+ delete schema.maximum;
247
+ delete schema.exclusiveMaximum;
248
+ schema[current.exclusive ? "exclusiveMaximum" : "maximum"] = current.value;
435
249
  }
436
- const formats = ["date-time", "time", "date", "duration", "email", "hostname", "uri", "ipv4", "ipv6", "uuid"];
250
+ const supportedKeywords = /*#__PURE__*/new Set(["$ref", "type", "title", "description", "enum", "anyOf", "properties", "required", "additionalProperties", "items", "pattern", "multipleOf", "minimum", "exclusiveMinimum", "maximum", "exclusiveMaximum", "minItems", "maxItems"]);
251
+ const normalizableAllOfKeywords = /*#__PURE__*/new Set(["$ref", "title", "enum", "anyOf", "format", "multipleOf"]);
252
+ const formats = /*#__PURE__*/new Set(["date-time", "time", "date", "duration", "email", "hostname", "ipv4", "ipv6", "uuid"]);
437
253
  //# sourceMappingURL=OpenAiStructuredOutput.js.map