alchemy 2.0.0-beta.62 → 2.0.0-beta.63

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 (489) hide show
  1. package/README.md +12 -12
  2. package/bin/exec.js +1959 -70
  3. package/bin/exec.js.map +1 -1
  4. package/lib/AWS/AuthProvider.js +1 -1
  5. package/lib/AWS/AuthProvider.js.map +1 -1
  6. package/lib/AWS/EC2/hosted.d.ts.map +1 -1
  7. package/lib/AWS/EC2/hosted.js +2 -1
  8. package/lib/AWS/EC2/hosted.js.map +1 -1
  9. package/lib/AWS/ECS/Task.d.ts.map +1 -1
  10. package/lib/AWS/ECS/Task.js +2 -1
  11. package/lib/AWS/ECS/Task.js.map +1 -1
  12. package/lib/AWS/Lambda/Function.d.ts.map +1 -1
  13. package/lib/AWS/Lambda/Function.js +13 -40
  14. package/lib/AWS/Lambda/Function.js.map +1 -1
  15. package/lib/AWS/Lambda/MicrovmRuntimeContext.d.ts.map +1 -1
  16. package/lib/AWS/Lambda/MicrovmRuntimeContext.js +9 -21
  17. package/lib/AWS/Lambda/MicrovmRuntimeContext.js.map +1 -1
  18. package/lib/Action.d.ts +8 -0
  19. package/lib/Action.d.ts.map +1 -1
  20. package/lib/Action.js +16 -5
  21. package/lib/Action.js.map +1 -1
  22. package/lib/ActionRuntimeContext.d.ts +14 -0
  23. package/lib/ActionRuntimeContext.d.ts.map +1 -0
  24. package/lib/ActionRuntimeContext.js +56 -0
  25. package/lib/ActionRuntimeContext.js.map +1 -0
  26. package/lib/Apply.d.ts.map +1 -1
  27. package/lib/Apply.js +40 -6
  28. package/lib/Apply.js.map +1 -1
  29. package/lib/Auth/AuthProvider.d.ts +3 -3
  30. package/lib/Auth/AuthProvider.d.ts.map +1 -1
  31. package/lib/Auth/AuthProvider.js +1 -1
  32. package/lib/Auth/AuthProvider.js.map +1 -1
  33. package/lib/Auth/Lock.d.ts.map +1 -1
  34. package/lib/Auth/Lock.js +5 -2
  35. package/lib/Auth/Lock.js.map +1 -1
  36. package/lib/Bundle/PurePlugin.d.ts.map +1 -1
  37. package/lib/Bundle/PurePlugin.js +26 -1
  38. package/lib/Bundle/PurePlugin.js.map +1 -1
  39. package/lib/Bundle/Vite.d.ts +2 -0
  40. package/lib/Bundle/Vite.d.ts.map +1 -1
  41. package/lib/Bundle/Vite.js +24 -1
  42. package/lib/Bundle/Vite.js.map +1 -1
  43. package/lib/Cli/LoggingCli.d.ts.map +1 -1
  44. package/lib/Cli/LoggingCli.js +7 -4
  45. package/lib/Cli/LoggingCli.js.map +1 -1
  46. package/lib/Cli/commands/_shared.d.ts +19 -0
  47. package/lib/Cli/commands/_shared.d.ts.map +1 -1
  48. package/lib/Cli/commands/_shared.js +22 -0
  49. package/lib/Cli/commands/_shared.js.map +1 -1
  50. package/lib/Cli/commands/login.d.ts +7 -3
  51. package/lib/Cli/commands/login.d.ts.map +1 -1
  52. package/lib/Cli/commands/login.js +70 -12
  53. package/lib/Cli/commands/login.js.map +1 -1
  54. package/lib/Cli/commands/profile.d.ts.map +1 -1
  55. package/lib/Cli/commands/profile.js +7 -20
  56. package/lib/Cli/commands/profile.js.map +1 -1
  57. package/lib/Cloudflare/AI/LanguageModel.js +21 -4
  58. package/lib/Cloudflare/AI/LanguageModel.js.map +1 -1
  59. package/lib/Cloudflare/AI/QuerySearchLocal.d.ts +37 -0
  60. package/lib/Cloudflare/AI/QuerySearchLocal.d.ts.map +1 -0
  61. package/lib/Cloudflare/AI/QuerySearchLocal.js +53 -0
  62. package/lib/Cloudflare/AI/QuerySearchLocal.js.map +1 -0
  63. package/lib/Cloudflare/AI/QuerySearchNamespaceLocal.d.ts +35 -0
  64. package/lib/Cloudflare/AI/QuerySearchNamespaceLocal.d.ts.map +1 -0
  65. package/lib/Cloudflare/AI/QuerySearchNamespaceLocal.js +47 -0
  66. package/lib/Cloudflare/AI/QuerySearchNamespaceLocal.js.map +1 -0
  67. package/lib/Cloudflare/AI/SearchHttpClient.d.ts +34 -0
  68. package/lib/Cloudflare/AI/SearchHttpClient.d.ts.map +1 -0
  69. package/lib/Cloudflare/AI/SearchHttpClient.js +262 -0
  70. package/lib/Cloudflare/AI/SearchHttpClient.js.map +1 -0
  71. package/lib/Cloudflare/AI/index.d.ts +2 -0
  72. package/lib/Cloudflare/AI/index.d.ts.map +1 -1
  73. package/lib/Cloudflare/AI/index.js +2 -0
  74. package/lib/Cloudflare/AI/index.js.map +1 -1
  75. package/lib/Cloudflare/Auth/AuthProvider.js +1 -1
  76. package/lib/Cloudflare/Auth/AuthProvider.js.map +1 -1
  77. package/lib/Cloudflare/Containers/ContainerBundle.d.ts.map +1 -1
  78. package/lib/Cloudflare/Containers/ContainerBundle.js +11 -1
  79. package/lib/Cloudflare/Containers/ContainerBundle.js.map +1 -1
  80. package/lib/Cloudflare/Containers/ContainerPlatform.d.ts.map +1 -1
  81. package/lib/Cloudflare/Containers/ContainerPlatform.js +12 -33
  82. package/lib/Cloudflare/Containers/ContainerPlatform.js.map +1 -1
  83. package/lib/Cloudflare/D1/QueryDatabaseHttpClient.d.ts +24 -0
  84. package/lib/Cloudflare/D1/QueryDatabaseHttpClient.d.ts.map +1 -0
  85. package/lib/Cloudflare/D1/QueryDatabaseHttpClient.js +106 -0
  86. package/lib/Cloudflare/D1/QueryDatabaseHttpClient.js.map +1 -0
  87. package/lib/Cloudflare/D1/QueryDatabaseLocal.d.ts +38 -0
  88. package/lib/Cloudflare/D1/QueryDatabaseLocal.d.ts.map +1 -0
  89. package/lib/Cloudflare/D1/QueryDatabaseLocal.js +54 -0
  90. package/lib/Cloudflare/D1/QueryDatabaseLocal.js.map +1 -0
  91. package/lib/Cloudflare/D1/index.d.ts +1 -0
  92. package/lib/Cloudflare/D1/index.d.ts.map +1 -1
  93. package/lib/Cloudflare/D1/index.js +1 -0
  94. package/lib/Cloudflare/D1/index.js.map +1 -1
  95. package/lib/Cloudflare/DNS/DnsHttp.d.ts +16 -1
  96. package/lib/Cloudflare/DNS/DnsHttp.d.ts.map +1 -1
  97. package/lib/Cloudflare/DNS/DnsHttp.js +6 -1
  98. package/lib/Cloudflare/DNS/DnsHttp.js.map +1 -1
  99. package/lib/Cloudflare/DNS/DnsLocal.d.ts +22 -0
  100. package/lib/Cloudflare/DNS/DnsLocal.d.ts.map +1 -0
  101. package/lib/Cloudflare/DNS/DnsLocal.js +31 -0
  102. package/lib/Cloudflare/DNS/DnsLocal.js.map +1 -0
  103. package/lib/Cloudflare/DNS/ReadDnsHttp.d.ts +3 -3
  104. package/lib/Cloudflare/DNS/ReadDnsHttp.d.ts.map +1 -1
  105. package/lib/Cloudflare/DNS/ReadDnsHttp.js +3 -4
  106. package/lib/Cloudflare/DNS/ReadDnsHttp.js.map +1 -1
  107. package/lib/Cloudflare/DNS/ReadDnsLocal.d.ts +32 -0
  108. package/lib/Cloudflare/DNS/ReadDnsLocal.d.ts.map +1 -0
  109. package/lib/Cloudflare/DNS/ReadDnsLocal.js +35 -0
  110. package/lib/Cloudflare/DNS/ReadDnsLocal.js.map +1 -0
  111. package/lib/Cloudflare/DNS/ReadWriteDnsHttp.d.ts +3 -3
  112. package/lib/Cloudflare/DNS/ReadWriteDnsHttp.d.ts.map +1 -1
  113. package/lib/Cloudflare/DNS/ReadWriteDnsHttp.js +4 -4
  114. package/lib/Cloudflare/DNS/ReadWriteDnsHttp.js.map +1 -1
  115. package/lib/Cloudflare/DNS/ReadWriteDnsLocal.d.ts +40 -0
  116. package/lib/Cloudflare/DNS/ReadWriteDnsLocal.d.ts.map +1 -0
  117. package/lib/Cloudflare/DNS/ReadWriteDnsLocal.js +43 -0
  118. package/lib/Cloudflare/DNS/ReadWriteDnsLocal.js.map +1 -0
  119. package/lib/Cloudflare/DNS/WriteDnsHttp.d.ts +3 -3
  120. package/lib/Cloudflare/DNS/WriteDnsHttp.d.ts.map +1 -1
  121. package/lib/Cloudflare/DNS/WriteDnsHttp.js +3 -4
  122. package/lib/Cloudflare/DNS/WriteDnsHttp.js.map +1 -1
  123. package/lib/Cloudflare/DNS/WriteDnsLocal.d.ts +38 -0
  124. package/lib/Cloudflare/DNS/WriteDnsLocal.d.ts.map +1 -0
  125. package/lib/Cloudflare/DNS/WriteDnsLocal.js +41 -0
  126. package/lib/Cloudflare/DNS/WriteDnsLocal.js.map +1 -0
  127. package/lib/Cloudflare/DNS/index.d.ts +3 -0
  128. package/lib/Cloudflare/DNS/index.d.ts.map +1 -1
  129. package/lib/Cloudflare/DNS/index.js +3 -0
  130. package/lib/Cloudflare/DNS/index.js.map +1 -1
  131. package/lib/Cloudflare/Flagship/ReadFlagsHttpClient.d.ts +27 -0
  132. package/lib/Cloudflare/Flagship/ReadFlagsHttpClient.d.ts.map +1 -0
  133. package/lib/Cloudflare/Flagship/ReadFlagsHttpClient.js +86 -0
  134. package/lib/Cloudflare/Flagship/ReadFlagsHttpClient.js.map +1 -0
  135. package/lib/Cloudflare/Flagship/ReadFlagsLocal.d.ts +41 -0
  136. package/lib/Cloudflare/Flagship/ReadFlagsLocal.d.ts.map +1 -0
  137. package/lib/Cloudflare/Flagship/ReadFlagsLocal.js +57 -0
  138. package/lib/Cloudflare/Flagship/ReadFlagsLocal.js.map +1 -0
  139. package/lib/Cloudflare/Flagship/index.d.ts +1 -0
  140. package/lib/Cloudflare/Flagship/index.d.ts.map +1 -1
  141. package/lib/Cloudflare/Flagship/index.js +1 -0
  142. package/lib/Cloudflare/Flagship/index.js.map +1 -1
  143. package/lib/Cloudflare/KV/NamespaceHttp.d.ts +16 -1
  144. package/lib/Cloudflare/KV/NamespaceHttp.d.ts.map +1 -1
  145. package/lib/Cloudflare/KV/NamespaceHttp.js +8 -2
  146. package/lib/Cloudflare/KV/NamespaceHttp.js.map +1 -1
  147. package/lib/Cloudflare/KV/NamespaceLocal.d.ts +22 -0
  148. package/lib/Cloudflare/KV/NamespaceLocal.d.ts.map +1 -0
  149. package/lib/Cloudflare/KV/NamespaceLocal.js +32 -0
  150. package/lib/Cloudflare/KV/NamespaceLocal.js.map +1 -0
  151. package/lib/Cloudflare/KV/ReadNamespaceHttp.d.ts +2 -2
  152. package/lib/Cloudflare/KV/ReadNamespaceHttp.d.ts.map +1 -1
  153. package/lib/Cloudflare/KV/ReadNamespaceHttp.js +5 -6
  154. package/lib/Cloudflare/KV/ReadNamespaceHttp.js.map +1 -1
  155. package/lib/Cloudflare/KV/ReadNamespaceLocal.d.ts +27 -0
  156. package/lib/Cloudflare/KV/ReadNamespaceLocal.d.ts.map +1 -0
  157. package/lib/Cloudflare/KV/ReadNamespaceLocal.js +30 -0
  158. package/lib/Cloudflare/KV/ReadNamespaceLocal.js.map +1 -0
  159. package/lib/Cloudflare/KV/ReadWriteNamespaceHttp.d.ts +3 -3
  160. package/lib/Cloudflare/KV/ReadWriteNamespaceHttp.d.ts.map +1 -1
  161. package/lib/Cloudflare/KV/ReadWriteNamespaceHttp.js +6 -6
  162. package/lib/Cloudflare/KV/ReadWriteNamespaceHttp.js.map +1 -1
  163. package/lib/Cloudflare/KV/ReadWriteNamespaceLocal.d.ts +34 -0
  164. package/lib/Cloudflare/KV/ReadWriteNamespaceLocal.d.ts.map +1 -0
  165. package/lib/Cloudflare/KV/ReadWriteNamespaceLocal.js +37 -0
  166. package/lib/Cloudflare/KV/ReadWriteNamespaceLocal.js.map +1 -0
  167. package/lib/Cloudflare/KV/WriteNamespaceHttp.d.ts +2 -2
  168. package/lib/Cloudflare/KV/WriteNamespaceHttp.d.ts.map +1 -1
  169. package/lib/Cloudflare/KV/WriteNamespaceHttp.js +5 -6
  170. package/lib/Cloudflare/KV/WriteNamespaceHttp.js.map +1 -1
  171. package/lib/Cloudflare/KV/WriteNamespaceLocal.d.ts +27 -0
  172. package/lib/Cloudflare/KV/WriteNamespaceLocal.d.ts.map +1 -0
  173. package/lib/Cloudflare/KV/WriteNamespaceLocal.js +30 -0
  174. package/lib/Cloudflare/KV/WriteNamespaceLocal.js.map +1 -0
  175. package/lib/Cloudflare/KV/index.d.ts +3 -0
  176. package/lib/Cloudflare/KV/index.d.ts.map +1 -1
  177. package/lib/Cloudflare/KV/index.js +3 -0
  178. package/lib/Cloudflare/KV/index.js.map +1 -1
  179. package/lib/Cloudflare/Queues/QueueHttp.d.ts +20 -1
  180. package/lib/Cloudflare/Queues/QueueHttp.d.ts.map +1 -1
  181. package/lib/Cloudflare/Queues/QueueHttp.js +2 -2
  182. package/lib/Cloudflare/Queues/QueueHttp.js.map +1 -1
  183. package/lib/Cloudflare/Queues/WriteQueueHttp.d.ts +9 -3
  184. package/lib/Cloudflare/Queues/WriteQueueHttp.d.ts.map +1 -1
  185. package/lib/Cloudflare/Queues/WriteQueueHttp.js +11 -6
  186. package/lib/Cloudflare/Queues/WriteQueueHttp.js.map +1 -1
  187. package/lib/Cloudflare/Queues/WriteQueueLocal.d.ts +36 -0
  188. package/lib/Cloudflare/Queues/WriteQueueLocal.d.ts.map +1 -0
  189. package/lib/Cloudflare/Queues/WriteQueueLocal.js +51 -0
  190. package/lib/Cloudflare/Queues/WriteQueueLocal.js.map +1 -0
  191. package/lib/Cloudflare/Queues/index.d.ts +1 -0
  192. package/lib/Cloudflare/Queues/index.d.ts.map +1 -1
  193. package/lib/Cloudflare/Queues/index.js +1 -0
  194. package/lib/Cloudflare/Queues/index.js.map +1 -1
  195. package/lib/Cloudflare/R2/BucketHttp.d.ts +15 -1
  196. package/lib/Cloudflare/R2/BucketHttp.d.ts.map +1 -1
  197. package/lib/Cloudflare/R2/BucketHttp.js +3 -3
  198. package/lib/Cloudflare/R2/BucketHttp.js.map +1 -1
  199. package/lib/Cloudflare/R2/BucketLocal.d.ts +21 -0
  200. package/lib/Cloudflare/R2/BucketLocal.d.ts.map +1 -0
  201. package/lib/Cloudflare/R2/BucketLocal.js +32 -0
  202. package/lib/Cloudflare/R2/BucketLocal.js.map +1 -0
  203. package/lib/Cloudflare/R2/ReadBucketHttp.d.ts +2 -2
  204. package/lib/Cloudflare/R2/ReadBucketHttp.d.ts.map +1 -1
  205. package/lib/Cloudflare/R2/ReadBucketHttp.js +4 -4
  206. package/lib/Cloudflare/R2/ReadBucketHttp.js.map +1 -1
  207. package/lib/Cloudflare/R2/ReadBucketLocal.d.ts +27 -0
  208. package/lib/Cloudflare/R2/ReadBucketLocal.d.ts.map +1 -0
  209. package/lib/Cloudflare/R2/ReadBucketLocal.js +30 -0
  210. package/lib/Cloudflare/R2/ReadBucketLocal.js.map +1 -0
  211. package/lib/Cloudflare/R2/ReadWriteBucketHttp.d.ts +2 -2
  212. package/lib/Cloudflare/R2/ReadWriteBucketHttp.d.ts.map +1 -1
  213. package/lib/Cloudflare/R2/ReadWriteBucketHttp.js +5 -4
  214. package/lib/Cloudflare/R2/ReadWriteBucketHttp.js.map +1 -1
  215. package/lib/Cloudflare/R2/ReadWriteBucketLocal.d.ts +30 -0
  216. package/lib/Cloudflare/R2/ReadWriteBucketLocal.d.ts.map +1 -0
  217. package/lib/Cloudflare/R2/ReadWriteBucketLocal.js +33 -0
  218. package/lib/Cloudflare/R2/ReadWriteBucketLocal.js.map +1 -0
  219. package/lib/Cloudflare/R2/WriteBucketHttp.d.ts +2 -2
  220. package/lib/Cloudflare/R2/WriteBucketHttp.d.ts.map +1 -1
  221. package/lib/Cloudflare/R2/WriteBucketHttp.js +4 -4
  222. package/lib/Cloudflare/R2/WriteBucketHttp.js.map +1 -1
  223. package/lib/Cloudflare/R2/WriteBucketLocal.d.ts +27 -0
  224. package/lib/Cloudflare/R2/WriteBucketLocal.d.ts.map +1 -0
  225. package/lib/Cloudflare/R2/WriteBucketLocal.js +30 -0
  226. package/lib/Cloudflare/R2/WriteBucketLocal.js.map +1 -0
  227. package/lib/Cloudflare/R2/index.d.ts +3 -0
  228. package/lib/Cloudflare/R2/index.d.ts.map +1 -1
  229. package/lib/Cloudflare/R2/index.js +3 -0
  230. package/lib/Cloudflare/R2/index.js.map +1 -1
  231. package/lib/Cloudflare/StateStore/Api.d.ts +2 -0
  232. package/lib/Cloudflare/Tunnel/ReadTunnel.d.ts +3 -3
  233. package/lib/Cloudflare/Tunnel/ReadTunnel.d.ts.map +1 -1
  234. package/lib/Cloudflare/Tunnel/ReadTunnel.js +7 -8
  235. package/lib/Cloudflare/Tunnel/ReadTunnel.js.map +1 -1
  236. package/lib/Cloudflare/Tunnel/ReadTunnelLocal.d.ts +29 -0
  237. package/lib/Cloudflare/Tunnel/ReadTunnelLocal.d.ts.map +1 -0
  238. package/lib/Cloudflare/Tunnel/ReadTunnelLocal.js +30 -0
  239. package/lib/Cloudflare/Tunnel/ReadTunnelLocal.js.map +1 -0
  240. package/lib/Cloudflare/Tunnel/ReadWriteTunnel.d.ts +3 -3
  241. package/lib/Cloudflare/Tunnel/ReadWriteTunnel.d.ts.map +1 -1
  242. package/lib/Cloudflare/Tunnel/ReadWriteTunnel.js +4 -4
  243. package/lib/Cloudflare/Tunnel/ReadWriteTunnel.js.map +1 -1
  244. package/lib/Cloudflare/Tunnel/ReadWriteTunnelLocal.d.ts +35 -0
  245. package/lib/Cloudflare/Tunnel/ReadWriteTunnelLocal.d.ts.map +1 -0
  246. package/lib/Cloudflare/Tunnel/ReadWriteTunnelLocal.js +36 -0
  247. package/lib/Cloudflare/Tunnel/ReadWriteTunnelLocal.js.map +1 -0
  248. package/lib/Cloudflare/Tunnel/TunnelBinding.d.ts +17 -1
  249. package/lib/Cloudflare/Tunnel/TunnelBinding.d.ts.map +1 -1
  250. package/lib/Cloudflare/Tunnel/TunnelBinding.js +7 -1
  251. package/lib/Cloudflare/Tunnel/TunnelBinding.js.map +1 -1
  252. package/lib/Cloudflare/Tunnel/TunnelLocalBinding.d.ts +19 -0
  253. package/lib/Cloudflare/Tunnel/TunnelLocalBinding.d.ts.map +1 -0
  254. package/lib/Cloudflare/Tunnel/TunnelLocalBinding.js +29 -0
  255. package/lib/Cloudflare/Tunnel/TunnelLocalBinding.js.map +1 -0
  256. package/lib/Cloudflare/Tunnel/WarpConnector.d.ts +3 -3
  257. package/lib/Cloudflare/Tunnel/WarpConnector.d.ts.map +1 -1
  258. package/lib/Cloudflare/Tunnel/WarpConnector.js +7 -4
  259. package/lib/Cloudflare/Tunnel/WarpConnector.js.map +1 -1
  260. package/lib/Cloudflare/Tunnel/WriteTunnel.d.ts +3 -3
  261. package/lib/Cloudflare/Tunnel/WriteTunnel.d.ts.map +1 -1
  262. package/lib/Cloudflare/Tunnel/WriteTunnel.js +7 -8
  263. package/lib/Cloudflare/Tunnel/WriteTunnel.js.map +1 -1
  264. package/lib/Cloudflare/Tunnel/WriteTunnelLocal.d.ts +29 -0
  265. package/lib/Cloudflare/Tunnel/WriteTunnelLocal.d.ts.map +1 -0
  266. package/lib/Cloudflare/Tunnel/WriteTunnelLocal.js +30 -0
  267. package/lib/Cloudflare/Tunnel/WriteTunnelLocal.js.map +1 -0
  268. package/lib/Cloudflare/Tunnel/index.d.ts +3 -0
  269. package/lib/Cloudflare/Tunnel/index.d.ts.map +1 -1
  270. package/lib/Cloudflare/Tunnel/index.js +3 -0
  271. package/lib/Cloudflare/Tunnel/index.js.map +1 -1
  272. package/lib/Cloudflare/Vectorize/SearchIndexHttpClient.d.ts +30 -0
  273. package/lib/Cloudflare/Vectorize/SearchIndexHttpClient.d.ts.map +1 -0
  274. package/lib/Cloudflare/Vectorize/SearchIndexHttpClient.js +100 -0
  275. package/lib/Cloudflare/Vectorize/SearchIndexHttpClient.js.map +1 -0
  276. package/lib/Cloudflare/Vectorize/SearchIndexLocal.d.ts +42 -0
  277. package/lib/Cloudflare/Vectorize/SearchIndexLocal.d.ts.map +1 -0
  278. package/lib/Cloudflare/Vectorize/SearchIndexLocal.js +58 -0
  279. package/lib/Cloudflare/Vectorize/SearchIndexLocal.js.map +1 -0
  280. package/lib/Cloudflare/Vectorize/index.d.ts +1 -0
  281. package/lib/Cloudflare/Vectorize/index.d.ts.map +1 -1
  282. package/lib/Cloudflare/Vectorize/index.js +1 -0
  283. package/lib/Cloudflare/Vectorize/index.js.map +1 -1
  284. package/lib/Cloudflare/Workers/BrowserHttpClient.d.ts +32 -0
  285. package/lib/Cloudflare/Workers/BrowserHttpClient.d.ts.map +1 -0
  286. package/lib/Cloudflare/Workers/BrowserHttpClient.js +100 -0
  287. package/lib/Cloudflare/Workers/BrowserHttpClient.js.map +1 -0
  288. package/lib/Cloudflare/Workers/BrowserLocal.d.ts +37 -0
  289. package/lib/Cloudflare/Workers/BrowserLocal.d.ts.map +1 -0
  290. package/lib/Cloudflare/Workers/BrowserLocal.js +53 -0
  291. package/lib/Cloudflare/Workers/BrowserLocal.js.map +1 -0
  292. package/lib/Cloudflare/Workers/ConfigProvider.d.ts +8 -0
  293. package/lib/Cloudflare/Workers/ConfigProvider.d.ts.map +1 -1
  294. package/lib/Cloudflare/Workers/ConfigProvider.js +10 -1
  295. package/lib/Cloudflare/Workers/ConfigProvider.js.map +1 -1
  296. package/lib/Cloudflare/Workers/DurableObject.d.ts +137 -3
  297. package/lib/Cloudflare/Workers/DurableObject.d.ts.map +1 -1
  298. package/lib/Cloudflare/Workers/DurableObject.js +141 -6
  299. package/lib/Cloudflare/Workers/DurableObject.js.map +1 -1
  300. package/lib/Cloudflare/Workers/LocalWorkerProvider.d.ts +2 -185
  301. package/lib/Cloudflare/Workers/LocalWorkerProvider.d.ts.map +1 -1
  302. package/lib/Cloudflare/Workers/Vite.d.ts.map +1 -1
  303. package/lib/Cloudflare/Workers/Vite.js +81 -2
  304. package/lib/Cloudflare/Workers/Vite.js.map +1 -1
  305. package/lib/Cloudflare/Workers/Worker.d.ts +15 -1
  306. package/lib/Cloudflare/Workers/Worker.d.ts.map +1 -1
  307. package/lib/Cloudflare/Workers/Worker.js.map +1 -1
  308. package/lib/Cloudflare/Workers/WorkerAsyncBindings.d.ts.map +1 -1
  309. package/lib/Cloudflare/Workers/WorkerAsyncBindings.js +2 -1
  310. package/lib/Cloudflare/Workers/WorkerAsyncBindings.js.map +1 -1
  311. package/lib/Cloudflare/Workers/WorkerBinding.d.ts +22 -1
  312. package/lib/Cloudflare/Workers/WorkerBinding.d.ts.map +1 -1
  313. package/lib/Cloudflare/Workers/WorkerBinding.js.map +1 -1
  314. package/lib/Cloudflare/Workers/WorkerBridge.d.ts.map +1 -1
  315. package/lib/Cloudflare/Workers/WorkerBridge.js +7 -2
  316. package/lib/Cloudflare/Workers/WorkerBridge.js.map +1 -1
  317. package/lib/Cloudflare/Workers/WorkerProvider.d.ts +81 -0
  318. package/lib/Cloudflare/Workers/WorkerProvider.d.ts.map +1 -1
  319. package/lib/Cloudflare/Workers/WorkerProvider.js +450 -61
  320. package/lib/Cloudflare/Workers/WorkerProvider.js.map +1 -1
  321. package/lib/Cloudflare/Workers/WorkerRuntimeContext.d.ts.map +1 -1
  322. package/lib/Cloudflare/Workers/WorkerRuntimeContext.js +11 -37
  323. package/lib/Cloudflare/Workers/WorkerRuntimeContext.js.map +1 -1
  324. package/lib/Cloudflare/Workers/index.d.ts +1 -0
  325. package/lib/Cloudflare/Workers/index.d.ts.map +1 -1
  326. package/lib/Cloudflare/Workers/index.js +1 -0
  327. package/lib/Cloudflare/Workers/index.js.map +1 -1
  328. package/lib/Diff.d.ts +16 -0
  329. package/lib/Diff.d.ts.map +1 -1
  330. package/lib/Diff.js +33 -0
  331. package/lib/Diff.js.map +1 -1
  332. package/lib/GitHub/Secrets.d.ts +1 -1
  333. package/lib/GitHub/Secrets.js +1 -1
  334. package/lib/GitHub/Variables.d.ts +1 -1
  335. package/lib/GitHub/Variables.js +1 -1
  336. package/lib/Local/RpcSerialization.d.ts.map +1 -1
  337. package/lib/Local/RpcSerialization.js +6 -2
  338. package/lib/Local/RpcSerialization.js.map +1 -1
  339. package/lib/Local/RpcSpawner.d.ts.map +1 -1
  340. package/lib/Local/RpcSpawner.js +14 -8
  341. package/lib/Local/RpcSpawner.js.map +1 -1
  342. package/lib/Neon/AuthProvider.js +1 -1
  343. package/lib/Neon/AuthProvider.js.map +1 -1
  344. package/lib/Plan.d.ts.map +1 -1
  345. package/lib/Plan.js +11 -4
  346. package/lib/Plan.js.map +1 -1
  347. package/lib/Planetscale/Database.d.ts +2 -1
  348. package/lib/Planetscale/Database.d.ts.map +1 -1
  349. package/lib/Planetscale/MySQL/MySQLClusterSize.d.ts +41 -3
  350. package/lib/Planetscale/MySQL/MySQLClusterSize.d.ts.map +1 -1
  351. package/lib/Planetscale/MySQL/MySQLClusterSize.js +88 -11
  352. package/lib/Planetscale/MySQL/MySQLClusterSize.js.map +1 -1
  353. package/lib/Planetscale/MySQL/MySQLDatabase.d.ts +14 -0
  354. package/lib/Planetscale/MySQL/MySQLDatabase.d.ts.map +1 -1
  355. package/lib/Planetscale/MySQL/MySQLDatabase.js +24 -11
  356. package/lib/Planetscale/MySQL/MySQLDatabase.js.map +1 -1
  357. package/lib/Platform.d.ts.map +1 -1
  358. package/lib/Platform.js +11 -1
  359. package/lib/Platform.js.map +1 -1
  360. package/lib/Runtime.d.ts +23 -0
  361. package/lib/Runtime.d.ts.map +1 -1
  362. package/lib/Runtime.js +83 -0
  363. package/lib/Runtime.js.map +1 -1
  364. package/lib/RuntimeContext.d.ts +46 -0
  365. package/lib/RuntimeContext.d.ts.map +1 -1
  366. package/lib/RuntimeContext.js +60 -0
  367. package/lib/RuntimeContext.js.map +1 -1
  368. package/lib/Server/Process.d.ts +1 -1
  369. package/lib/Server/Process.d.ts.map +1 -1
  370. package/lib/Server/Process.js +8 -8
  371. package/lib/Server/Process.js.map +1 -1
  372. package/lib/Stack.js +1 -1
  373. package/lib/Stack.js.map +1 -1
  374. package/lib/State/HttpStateApi.d.ts +10 -10
  375. package/lib/Test/Alchemy.d.ts +74 -0
  376. package/lib/Test/Alchemy.d.ts.map +1 -0
  377. package/lib/Test/Alchemy.js +143 -0
  378. package/lib/Test/Alchemy.js.map +1 -0
  379. package/lib/Util/cached-function.d.ts +1 -1
  380. package/lib/Util/cached-function.d.ts.map +1 -1
  381. package/lib/Util/cached-function.js +2 -2
  382. package/lib/Util/cached-function.js.map +1 -1
  383. package/lib/Util/proxy-chain.js +3 -0
  384. package/lib/Util/proxy-chain.js.map +1 -1
  385. package/package.json +10 -10
  386. package/src/AWS/AuthProvider.ts +1 -1
  387. package/src/AWS/EC2/hosted.ts +2 -1
  388. package/src/AWS/ECS/Task.ts +2 -1
  389. package/src/AWS/Lambda/Function.ts +13 -47
  390. package/src/AWS/Lambda/MicrovmRuntimeContext.ts +11 -38
  391. package/src/Action.ts +39 -6
  392. package/src/ActionRuntimeContext.ts +68 -0
  393. package/src/Apply.ts +46 -8
  394. package/src/Auth/AuthProvider.ts +1 -1
  395. package/src/Auth/Lock.ts +5 -2
  396. package/src/Bundle/PurePlugin.ts +34 -1
  397. package/src/Bundle/Vite.ts +51 -1
  398. package/src/Cli/LoggingCli.ts +7 -4
  399. package/src/Cli/commands/_shared.ts +52 -0
  400. package/src/Cli/commands/login.ts +90 -14
  401. package/src/Cli/commands/profile.ts +7 -41
  402. package/src/Cloudflare/AI/LanguageModel.ts +25 -5
  403. package/src/Cloudflare/AI/QuerySearchLocal.ts +66 -0
  404. package/src/Cloudflare/AI/QuerySearchNamespaceLocal.ts +60 -0
  405. package/src/Cloudflare/AI/SearchHttpClient.ts +423 -0
  406. package/src/Cloudflare/AI/index.ts +2 -0
  407. package/src/Cloudflare/Auth/AuthProvider.ts +1 -1
  408. package/src/Cloudflare/Containers/ContainerBundle.ts +11 -1
  409. package/src/Cloudflare/Containers/ContainerPlatform.ts +14 -52
  410. package/src/Cloudflare/D1/QueryDatabaseHttpClient.ts +176 -0
  411. package/src/Cloudflare/D1/QueryDatabaseLocal.ts +66 -0
  412. package/src/Cloudflare/D1/index.ts +1 -0
  413. package/src/Cloudflare/DNS/DnsHttp.ts +24 -2
  414. package/src/Cloudflare/DNS/DnsLocal.ts +41 -0
  415. package/src/Cloudflare/DNS/ReadDnsHttp.ts +4 -5
  416. package/src/Cloudflare/DNS/ReadDnsLocal.ts +38 -0
  417. package/src/Cloudflare/DNS/ReadWriteDnsHttp.ts +5 -5
  418. package/src/Cloudflare/DNS/ReadWriteDnsLocal.ts +46 -0
  419. package/src/Cloudflare/DNS/WriteDnsHttp.ts +4 -5
  420. package/src/Cloudflare/DNS/WriteDnsLocal.ts +44 -0
  421. package/src/Cloudflare/DNS/index.ts +3 -0
  422. package/src/Cloudflare/Flagship/ReadFlagsHttpClient.ts +183 -0
  423. package/src/Cloudflare/Flagship/ReadFlagsLocal.ts +69 -0
  424. package/src/Cloudflare/Flagship/index.ts +1 -0
  425. package/src/Cloudflare/KV/NamespaceHttp.ts +25 -2
  426. package/src/Cloudflare/KV/NamespaceLocal.ts +42 -0
  427. package/src/Cloudflare/KV/ReadNamespaceHttp.ts +7 -6
  428. package/src/Cloudflare/KV/ReadNamespaceLocal.ts +35 -0
  429. package/src/Cloudflare/KV/ReadWriteNamespaceHttp.ts +11 -6
  430. package/src/Cloudflare/KV/ReadWriteNamespaceLocal.ts +42 -0
  431. package/src/Cloudflare/KV/WriteNamespaceHttp.ts +7 -6
  432. package/src/Cloudflare/KV/WriteNamespaceLocal.ts +35 -0
  433. package/src/Cloudflare/KV/index.ts +3 -0
  434. package/src/Cloudflare/Queues/QueueHttp.ts +24 -2
  435. package/src/Cloudflare/Queues/WriteQueueHttp.ts +16 -7
  436. package/src/Cloudflare/Queues/WriteQueueLocal.ts +64 -0
  437. package/src/Cloudflare/Queues/index.ts +1 -0
  438. package/src/Cloudflare/R2/BucketHttp.ts +20 -3
  439. package/src/Cloudflare/R2/BucketLocal.ts +47 -0
  440. package/src/Cloudflare/R2/ReadBucketHttp.ts +10 -5
  441. package/src/Cloudflare/R2/ReadBucketLocal.ts +33 -0
  442. package/src/Cloudflare/R2/ReadWriteBucketHttp.ts +11 -5
  443. package/src/Cloudflare/R2/ReadWriteBucketLocal.ts +36 -0
  444. package/src/Cloudflare/R2/WriteBucketHttp.ts +10 -5
  445. package/src/Cloudflare/R2/WriteBucketLocal.ts +33 -0
  446. package/src/Cloudflare/R2/index.ts +3 -0
  447. package/src/Cloudflare/Tunnel/ReadTunnel.ts +8 -9
  448. package/src/Cloudflare/Tunnel/ReadTunnelLocal.ts +33 -0
  449. package/src/Cloudflare/Tunnel/ReadWriteTunnel.ts +5 -5
  450. package/src/Cloudflare/Tunnel/ReadWriteTunnelLocal.ts +39 -0
  451. package/src/Cloudflare/Tunnel/TunnelBinding.ts +26 -2
  452. package/src/Cloudflare/Tunnel/TunnelLocalBinding.ts +38 -0
  453. package/src/Cloudflare/Tunnel/WarpConnector.ts +8 -5
  454. package/src/Cloudflare/Tunnel/WriteTunnel.ts +8 -9
  455. package/src/Cloudflare/Tunnel/WriteTunnelLocal.ts +33 -0
  456. package/src/Cloudflare/Tunnel/index.ts +3 -0
  457. package/src/Cloudflare/Vectorize/SearchIndexHttpClient.ts +183 -0
  458. package/src/Cloudflare/Vectorize/SearchIndexLocal.ts +70 -0
  459. package/src/Cloudflare/Vectorize/index.ts +1 -0
  460. package/src/Cloudflare/Workers/BrowserHttpClient.ts +201 -0
  461. package/src/Cloudflare/Workers/BrowserLocal.ts +65 -0
  462. package/src/Cloudflare/Workers/ConfigProvider.ts +15 -1
  463. package/src/Cloudflare/Workers/DurableObject.ts +227 -6
  464. package/src/Cloudflare/Workers/Vite.ts +93 -11
  465. package/src/Cloudflare/Workers/Worker.ts +19 -1
  466. package/src/Cloudflare/Workers/WorkerAsyncBindings.ts +6 -5
  467. package/src/Cloudflare/Workers/WorkerBinding.ts +20 -1
  468. package/src/Cloudflare/Workers/WorkerBridge.ts +12 -2
  469. package/src/Cloudflare/Workers/WorkerProvider.ts +664 -117
  470. package/src/Cloudflare/Workers/WorkerRuntimeContext.ts +14 -45
  471. package/src/Cloudflare/Workers/index.ts +1 -0
  472. package/src/Diff.ts +33 -0
  473. package/src/GitHub/Secrets.ts +1 -1
  474. package/src/GitHub/Variables.ts +1 -1
  475. package/src/Local/RpcSerialization.ts +6 -2
  476. package/src/Local/RpcSpawner.ts +21 -8
  477. package/src/Neon/AuthProvider.ts +1 -1
  478. package/src/Plan.ts +17 -4
  479. package/src/Planetscale/Database.ts +2 -1
  480. package/src/Planetscale/MySQL/MySQLClusterSize.ts +120 -21
  481. package/src/Planetscale/MySQL/MySQLDatabase.ts +84 -44
  482. package/src/Platform.ts +12 -3
  483. package/src/Runtime.ts +92 -0
  484. package/src/RuntimeContext.ts +79 -0
  485. package/src/Server/Process.ts +11 -18
  486. package/src/Stack.ts +1 -1
  487. package/src/Test/Alchemy.ts +282 -0
  488. package/src/Util/cached-function.ts +5 -5
  489. package/src/Util/proxy-chain.ts +3 -0
@@ -0,0 +1,423 @@
1
+ import type * as runtime from "@cloudflare/workers-types";
2
+ import * as aisearch from "@distilled.cloud/cloudflare/aisearch";
3
+ import * as Effect from "effect/Effect";
4
+ import * as Stream from "effect/Stream";
5
+ import type * as HttpClient from "effect/unstable/http/HttpClient";
6
+ import type { RuntimeContext } from "../../RuntimeContext.ts";
7
+ import type { Credentials } from "../Credentials.ts";
8
+ import { SearchError, type QuerySearchClient } from "./QuerySearch.ts";
9
+ import type { QuerySearchNamespaceClient } from "./QuerySearchNamespace.ts";
10
+
11
+ // Shared HTTP scaffolding for the AI Search `*Local` binding layers. NOT
12
+ // re-exported from `index.ts` — only the per-level `*Local` layers are public.
13
+ //
14
+ // The `ai_search` / `ai_search_namespace` Worker bindings proxy the same AI
15
+ // Search REST API that distilled wraps, so the whole data plane
16
+ // (`search` / `chatCompletions` / `info` / `stats` / `list`) is reachable over
17
+ // HTTP with the current credentials — no Worker host, no native binding.
18
+ //
19
+ // The one wrinkle: distilled decodes responses to **camelCase**, while the
20
+ // binding client contract types come from `@cloudflare/workers-types` and are
21
+ // the **snake_case** wire shape. These adapters translate both directions
22
+ // (mirroring the D1 `*Local` shim), passing user-controlled maps
23
+ // (`item.metadata`, retrieval `filters`) through untouched.
24
+
25
+ /**
26
+ * Injectable auth shared by a future Http (scoped-token) impl and the Local
27
+ * (current-credentials) impl. `authorize` discharges the
28
+ * `Credentials | HttpClient` requirement of a distilled op; `accountId` is the
29
+ * Cloudflare account the ops run against.
30
+ */
31
+ export interface SearchAuth {
32
+ authorize: <A, E>(
33
+ eff: Effect.Effect<A, E, Credentials | HttpClient.HttpClient>,
34
+ ) => Effect.Effect<A, E>;
35
+ accountId: string;
36
+ }
37
+
38
+ const u = <T>(v: T | null | undefined): T | undefined =>
39
+ v == null ? undefined : v;
40
+
41
+ const run = <A, E>(
42
+ auth: SearchAuth,
43
+ eff: Effect.Effect<A, E, Credentials | HttpClient.HttpClient>,
44
+ ): Effect.Effect<A, SearchError, RuntimeContext> =>
45
+ auth.authorize(eff).pipe(
46
+ Effect.mapError((cause) => {
47
+ const message =
48
+ cause instanceof Error
49
+ ? cause.message
50
+ : typeof (cause as { message?: unknown } | undefined)?.message ===
51
+ "string"
52
+ ? (cause as { message: string }).message
53
+ : "AI Search HTTP error";
54
+ return new SearchError({ message, cause });
55
+ }),
56
+ );
57
+
58
+ // ── response mappers (distilled camelCase -> runtime snake_case) ─────────────
59
+
60
+ type ChunkIn = aisearch.SearchNamespaceInstanceResponse["chunks"][number];
61
+
62
+ const mapChunk = (
63
+ c: ChunkIn,
64
+ ): runtime.AiSearchSearchResponse["chunks"][number] => ({
65
+ id: c.id,
66
+ type: c.type,
67
+ score: c.score,
68
+ text: c.text,
69
+ item: {
70
+ key: c.item?.key ?? "",
71
+ timestamp: u(c.item?.timestamp),
72
+ metadata: u(c.item?.metadata) as Record<string, unknown> | undefined,
73
+ },
74
+ scoring_details: c.scoringDetails
75
+ ? {
76
+ keyword_score: u(c.scoringDetails.keywordScore),
77
+ vector_score: u(c.scoringDetails.vectorScore),
78
+ keyword_rank: u(c.scoringDetails.keywordRank),
79
+ vector_rank: u(c.scoringDetails.vectorRank),
80
+ reranking_score: u(c.scoringDetails.rerankingScore),
81
+ fusion_method: u(c.scoringDetails.fusionMethod) as
82
+ | "rrf"
83
+ | "max"
84
+ | undefined,
85
+ }
86
+ : undefined,
87
+ });
88
+
89
+ const mapSearch = (
90
+ r: aisearch.SearchNamespaceInstanceResponse,
91
+ ): runtime.AiSearchSearchResponse => ({
92
+ search_query: r.searchQuery ?? "",
93
+ chunks: r.chunks.map(mapChunk),
94
+ });
95
+
96
+ const mapChat = (
97
+ r: aisearch.ChatCompletionsNamespaceInstanceResponse,
98
+ ): runtime.AiSearchChatCompletionsResponse => ({
99
+ id: u(r.id),
100
+ object: u(r.object),
101
+ model: u(r.model),
102
+ choices: r.choices.map((choice) => ({
103
+ index: u(choice.index),
104
+ message: {
105
+ role: choice.message.role as
106
+ | "system"
107
+ | "developer"
108
+ | "user"
109
+ | "assistant"
110
+ | "tool",
111
+ content:
112
+ typeof choice.message.content === "string"
113
+ ? choice.message.content
114
+ : choice.message.content == null
115
+ ? null
116
+ : JSON.stringify(choice.message.content),
117
+ },
118
+ })),
119
+ chunks: r.chunks.map(mapChunk),
120
+ });
121
+
122
+ const mapStats = (
123
+ r: aisearch.StatsNamespaceInstanceResponse,
124
+ ): runtime.AiSearchStatsResponse => ({
125
+ queued: u(r.queued),
126
+ running: u(r.running),
127
+ completed: u(r.completed),
128
+ error: u(r.error),
129
+ skipped: u(r.skipped),
130
+ outdated: u(r.outdated),
131
+ last_activity: u(r.lastActivity),
132
+ engine: r.engine
133
+ ? {
134
+ vectorize: r.engine.vectorize
135
+ ? {
136
+ vectorsCount: r.engine.vectorize.vectorsCount,
137
+ dimensions: r.engine.vectorize.dimensions,
138
+ }
139
+ : undefined,
140
+ r2: r.engine.r2
141
+ ? {
142
+ payloadSizeBytes: r.engine.r2.payloadSizeBytes,
143
+ metadataSizeBytes: r.engine.r2.metadataSizeBytes,
144
+ objectCount: r.engine.r2.objectCount,
145
+ }
146
+ : undefined,
147
+ }
148
+ : undefined,
149
+ });
150
+
151
+ const mapInfo = (
152
+ r: aisearch.ReadNamespaceInstanceResponse,
153
+ ): runtime.AiSearchInstanceInfo => ({
154
+ id: r.id,
155
+ type: u(r.type) as runtime.AiSearchInstanceInfo["type"],
156
+ source: u(r.source),
157
+ source_params: u(r.sourceParams),
158
+ paused: u(r.paused),
159
+ status: u(r.status),
160
+ namespace: u(r.namespace),
161
+ created_at: u(r.createdAt),
162
+ modified_at: u(r.modifiedAt),
163
+ token_id: u(r.tokenId),
164
+ ai_gateway_id: u(r.aiGatewayId),
165
+ rewrite_query: u(r.rewriteQuery),
166
+ reranking: u(r.reranking),
167
+ embedding_model: u(r.embeddingModel),
168
+ ai_search_model: u(r.aiSearchModel),
169
+ rewrite_model: u(r.rewriteModel),
170
+ reranking_model: u(r.rerankingModel),
171
+ hybrid_search_enabled: u(r.hybridSearchEnabled),
172
+ index_method: r.indexMethod
173
+ ? { vector: r.indexMethod.vector, keyword: r.indexMethod.keyword }
174
+ : undefined,
175
+ fusion_method: u(r.fusionMethod) as "max" | "rrf" | undefined,
176
+ indexing_options: r.indexingOptions
177
+ ? {
178
+ keyword_tokenizer: u(r.indexingOptions.keywordTokenizer) as
179
+ | "porter"
180
+ | "trigram"
181
+ | undefined,
182
+ }
183
+ : undefined,
184
+ retrieval_options: r.retrievalOptions
185
+ ? {
186
+ keyword_match_mode: u(r.retrievalOptions.keywordMatchMode) as
187
+ | "and"
188
+ | "or"
189
+ | undefined,
190
+ boost_by: u(r.retrievalOptions.boostBy)?.map((b) => ({
191
+ field: b.field,
192
+ direction: u(b.direction) as
193
+ | "asc"
194
+ | "desc"
195
+ | "exists"
196
+ | "not_exists"
197
+ | undefined,
198
+ })),
199
+ }
200
+ : undefined,
201
+ chunk_size: u(r.chunkSize),
202
+ chunk_overlap: u(r.chunkOverlap),
203
+ score_threshold: u(r.scoreThreshold),
204
+ max_num_results: u(r.maxNumResults),
205
+ cache: u(r.cache),
206
+ cache_threshold: u(
207
+ r.cacheThreshold,
208
+ ) as runtime.AiSearchInstanceInfo["cache_threshold"],
209
+ custom_metadata: u(r.customMetadata)?.map((m) => ({
210
+ field_name: m.fieldName,
211
+ data_type: m.dataType as "text" | "number" | "boolean" | "datetime",
212
+ })),
213
+ sync_interval: u(
214
+ r.syncInterval,
215
+ ) as runtime.AiSearchInstanceInfo["sync_interval"],
216
+ metadata: u(r.metadata) as Record<string, unknown> | undefined,
217
+ });
218
+
219
+ const mapList = (
220
+ result: aisearch.ReadNamespaceInstanceResponse[],
221
+ ): runtime.AiSearchListResponse => ({
222
+ result: result.map(mapInfo),
223
+ });
224
+
225
+ const mapMulti = (
226
+ r: aisearch.SearchNamespaceResponse,
227
+ ): runtime.AiSearchMultiSearchResponse => ({
228
+ search_query: r.searchQuery ?? "",
229
+ chunks: r.chunks.map((c) => ({ ...mapChunk(c), instance_id: c.instanceId })),
230
+ errors: u(r.errors)?.map((e) => ({
231
+ instance_id: e.instanceId,
232
+ message: e.message,
233
+ })),
234
+ });
235
+
236
+ // ── request mappers (runtime snake_case -> distilled camelCase) ──────────────
237
+
238
+ const mapMessages = (messages: runtime.AiSearchMessage[]) =>
239
+ messages.map((m) => ({
240
+ role: m.role as "system" | "developer" | "user" | "assistant" | "tool",
241
+ content:
242
+ typeof m.content === "string" || m.content == null
243
+ ? m.content
244
+ : (m.content as unknown[]).map((part) => {
245
+ const p = part as Record<string, unknown>;
246
+ if ("image_url" in p || "imageUrl" in p) {
247
+ const img = (p.image_url ?? p.imageUrl) as { url: string };
248
+ return { type: "image_url" as const, imageUrl: { url: img.url } };
249
+ }
250
+ return { type: "text" as const, text: p.text as string };
251
+ }),
252
+ }));
253
+
254
+ const mapOptions = (o: runtime.AiSearchOptions | undefined) => {
255
+ if (!o) return undefined;
256
+ return {
257
+ cache: o.cache
258
+ ? { enabled: o.cache.enabled, cacheThreshold: o.cache.cache_threshold }
259
+ : undefined,
260
+ queryRewrite: o.query_rewrite
261
+ ? {
262
+ enabled: o.query_rewrite.enabled,
263
+ model: o.query_rewrite.model,
264
+ rewritePrompt: o.query_rewrite.rewrite_prompt,
265
+ }
266
+ : undefined,
267
+ reranking: o.reranking
268
+ ? {
269
+ enabled: o.reranking.enabled,
270
+ model: o.reranking.model,
271
+ matchThreshold: o.reranking.match_threshold,
272
+ }
273
+ : undefined,
274
+ retrieval: o.retrieval
275
+ ? {
276
+ retrievalType: o.retrieval.retrieval_type,
277
+ fusionMethod: o.retrieval.fusion_method,
278
+ keywordMatchMode: o.retrieval.keyword_match_mode,
279
+ matchThreshold: o.retrieval.match_threshold,
280
+ maxNumResults: o.retrieval.max_num_results,
281
+ contextExpansion: o.retrieval.context_expansion,
282
+ returnOnFailure: o.retrieval.return_on_failure,
283
+ // `filters` is a Vectorize metadata filter over user-defined fields —
284
+ // pass through untouched.
285
+ filters: o.retrieval.filters as Record<string, unknown> | undefined,
286
+ boostBy: o.retrieval.boost_by,
287
+ }
288
+ : undefined,
289
+ };
290
+ };
291
+
292
+ // ── client builders ──────────────────────────────────────────────────────────
293
+
294
+ /** Effect resolving `{ name (namespace), id (instanceId) }` at apply time. */
295
+ export type InstanceRef = Effect.Effect<{ name: string; id: string }>;
296
+
297
+ /** Effect resolving the namespace `name` at apply time. */
298
+ export type NamespaceRef = Effect.Effect<string>;
299
+
300
+ const dieRaw = (kind: string): Effect.Effect<never> =>
301
+ Effect.die(
302
+ new Error(
303
+ `The AI Search ${kind} *Local binding runs over the HTTP API; the raw native runtime binding is only available inside a deployed Worker.`,
304
+ ),
305
+ );
306
+
307
+ /**
308
+ * Build a single-instance {@link QuerySearchClient} over the HTTP API. `ref`
309
+ * resolves the `{ namespace, instanceId }` at apply time.
310
+ */
311
+ export const makeLocalSearchClient = (
312
+ auth: SearchAuth,
313
+ ref: InstanceRef,
314
+ ): QuerySearchClient => {
315
+ const withRef = <A, E>(
316
+ fn: (r: {
317
+ name: string;
318
+ id: string;
319
+ }) => Effect.Effect<A, E, Credentials | HttpClient.HttpClient>,
320
+ ) => Effect.flatMap(ref, (r) => run(auth, fn(r)));
321
+
322
+ return {
323
+ raw: dieRaw("instance"),
324
+ search: (params) =>
325
+ withRef((r) =>
326
+ aisearch.searchNamespaceInstance({
327
+ accountId: auth.accountId,
328
+ name: r.name,
329
+ id: r.id,
330
+ ...("query" in params && params.query !== undefined
331
+ ? { query: params.query }
332
+ : { messages: mapMessages(params.messages ?? []) }),
333
+ aiSearchOptions: mapOptions(params.ai_search_options),
334
+ } as aisearch.SearchNamespaceInstanceRequest),
335
+ ).pipe(Effect.map(mapSearch)),
336
+ chatCompletions: (params) =>
337
+ withRef((r) =>
338
+ aisearch.chatCompletionsNamespaceInstance({
339
+ accountId: auth.accountId,
340
+ name: r.name,
341
+ id: r.id,
342
+ messages: mapMessages(params.messages),
343
+ aiSearchOptions: mapOptions(params.ai_search_options),
344
+ } as aisearch.ChatCompletionsNamespaceInstanceRequest),
345
+ ).pipe(Effect.map(mapChat)),
346
+ info: () =>
347
+ withRef((r) =>
348
+ aisearch.readNamespaceInstance({
349
+ accountId: auth.accountId,
350
+ name: r.name,
351
+ id: r.id,
352
+ }),
353
+ ).pipe(Effect.map(mapInfo)),
354
+ stats: () =>
355
+ withRef((r) =>
356
+ aisearch.statsNamespaceInstance({
357
+ accountId: auth.accountId,
358
+ name: r.name,
359
+ id: r.id,
360
+ }),
361
+ ).pipe(Effect.map(mapStats)),
362
+ } satisfies QuerySearchClient;
363
+ };
364
+
365
+ /**
366
+ * Build a namespace {@link QuerySearchNamespaceClient} over the HTTP API.
367
+ * `.get(instanceName)` scopes a single-instance client to `(namespace,
368
+ * instanceName)`.
369
+ */
370
+ export const makeLocalSearchNamespaceClient = (
371
+ auth: SearchAuth,
372
+ ref: NamespaceRef,
373
+ ): QuerySearchNamespaceClient => ({
374
+ raw: dieRaw("namespace"),
375
+ get: (instanceName) =>
376
+ makeLocalSearchClient(
377
+ auth,
378
+ Effect.map(ref, (name) => ({ name, id: instanceName })),
379
+ ),
380
+ list: (params) =>
381
+ Effect.flatMap(ref, (name) =>
382
+ run(
383
+ auth,
384
+ Stream.runCollect(
385
+ aisearch.listNamespaceInstances.pages({
386
+ accountId: auth.accountId,
387
+ name,
388
+ perPage: params?.per_page,
389
+ orderBy: params?.order_by,
390
+ orderByDirection: params?.order_by_direction,
391
+ search: params?.search,
392
+ }),
393
+ ),
394
+ ),
395
+ ).pipe(
396
+ Effect.map((chunk) =>
397
+ mapList(
398
+ Array.from(chunk).flatMap(
399
+ (page) =>
400
+ (page.result ??
401
+ []) as unknown as aisearch.ReadNamespaceInstanceResponse[],
402
+ ),
403
+ ),
404
+ ),
405
+ ),
406
+ search: (params) =>
407
+ Effect.flatMap(ref, (name) =>
408
+ run(
409
+ auth,
410
+ aisearch.searchNamespace({
411
+ accountId: auth.accountId,
412
+ name,
413
+ aiSearchOptions: {
414
+ instanceIds: params.ai_search_options.instance_ids,
415
+ ...mapOptions(params.ai_search_options),
416
+ },
417
+ ...("query" in params && params.query !== undefined
418
+ ? { query: params.query }
419
+ : { messages: mapMessages(params.messages ?? []) }),
420
+ } as aisearch.SearchNamespaceRequest),
421
+ ),
422
+ ).pipe(Effect.map(mapMulti)),
423
+ });
@@ -11,8 +11,10 @@ export * from "./QueryGateway.ts";
11
11
  export * from "./QueryGatewayBinding.ts";
12
12
  export * from "./QuerySearch.ts";
13
13
  export * from "./QuerySearchBinding.ts";
14
+ export * from "./QuerySearchLocal.ts";
14
15
  export * from "./QuerySearchNamespace.ts";
15
16
  export * from "./QuerySearchNamespaceBinding.ts";
17
+ export * from "./QuerySearchNamespaceLocal.ts";
16
18
  export * from "./Search.ts";
17
19
  export * from "./SearchInstance.ts";
18
20
  export * from "./SearchNamespace.ts";
@@ -416,7 +416,7 @@ export const CloudflareAuth = AuthProviderLayer<
416
416
  ? Effect.fail(
417
417
  new AuthError({
418
418
  message:
419
- "Cloudflare stored credentials not found. Run: alchemy-effect login --configure",
419
+ "Cloudflare stored credentials not found. Run: alchemy login --configure",
420
420
  }),
421
421
  )
422
422
  : Effect.gen(function* () {
@@ -199,8 +199,9 @@ const HttpServer = NodeHttpServer;
199
199
  `
200
200
  }
201
201
  import { Stack } from "alchemy/Stack";
202
- import { makeEntrypointLayer } from "alchemy/Runtime";
202
+ import { makeEntrypointLayer, reifyBoundConfigProvider } from "alchemy/Runtime";
203
203
  import { CloudflareEnvironment } from "alchemy/Cloudflare";
204
+ import * as ConfigProvider from "effect/ConfigProvider";
204
205
  import * as Effect from "effect/Effect";
205
206
  import * as FetchHttpClient from "effect/unstable/http/FetchHttpClient";
206
207
  import * as Layer from "effect/Layer";
@@ -249,6 +250,15 @@ const serverEffect = tag.pipe(
249
250
  )
250
251
  ),
251
252
  Layer.provideMerge(platform),
253
+ Layer.provideMerge(
254
+ Layer.succeed(
255
+ ConfigProvider.ConfigProvider,
256
+ // Auto-bound \`Config\` values arrive in the env as
257
+ // \`{"_tag":"Redacted","value":...}\` markers; reify them so a
258
+ // \`Config\` re-read inside a handler decodes the raw source value.
259
+ reifyBoundConfigProvider(ConfigProvider.fromEnv(), process.env)
260
+ )
261
+ ),
252
262
  Layer.provideMerge(
253
263
  Layer.succeed(
254
264
  MinimumLogLevel,
@@ -1,11 +1,13 @@
1
- import * as Config from "effect/Config";
2
1
  import * as Effect from "effect/Effect";
3
2
  import * as Option from "effect/Option";
4
- import * as Redacted from "effect/Redacted";
5
3
  import { HttpServer, type HttpEffect } from "../../Http.ts";
6
4
  import * as Output from "../../Output.ts";
7
5
  import { Platform } from "../../Platform.ts";
8
6
  import { serveRpc, type Rpc } from "../../Rpc.ts";
7
+ import {
8
+ packEnvValueKeepRedacted,
9
+ unpackEnvValue,
10
+ } from "../../RuntimeContext.ts";
9
11
  import * as Server from "../../Server/index.ts";
10
12
  import type { Fetcher } from "../Fetcher.ts";
11
13
  import { fromCloudflareFetcher, toCloudflareFetcher } from "../Fetcher.ts";
@@ -69,60 +71,20 @@ export const ContainerPlatform: Platform<
69
71
  set: (bindingId: string, output: Output.Output) =>
70
72
  Effect.sync(() => {
71
73
  const key = bindingId.replaceAll(/[^a-zA-Z0-9]/g, "_");
72
- // Preserve `Redacted`-ness across the Output → env → Cloudflare
73
- // boundary so the provider can deploy secrets through the
74
+ // `packEnvValueKeepRedacted` keeps the Redacted wrapper on the
75
+ // outside so the provider can deploy secrets through the
74
76
  // Secrets Store (referenced via `secrets`) instead of leaking
75
- // them as plain `environmentVariables`. The JSON payload carries
76
- // a `{_tag: "Redacted", …}` marker so the runtime `get` accessor
77
- // can rebuild the wrapper after Cloudflare hands the value back
78
- // as a plain env-var string. Mirrors `makeWorkerRuntimeContext`.
79
- env[key] = output.pipe(
80
- Output.map((value) =>
81
- Redacted.isRedacted(value)
82
- ? Redacted.make(
83
- JSON.stringify({
84
- _tag: "Redacted",
85
- value: Redacted.value(value),
86
- }),
87
- )
88
- : JSON.stringify(value),
89
- ),
90
- );
77
+ // them as plain `environmentVariables`, while the inner marker
78
+ // lets the runtime `get` accessor rebuild the wrapper after
79
+ // Cloudflare hands the value back as a plain env-var string.
80
+ // Mirrors `makeWorkerRuntimeContext`.
81
+ env[key] = output.pipe(Output.map(packEnvValueKeepRedacted));
91
82
  return key;
92
83
  }),
93
84
  get: <T>(key: string) =>
94
- Config.string(key).pipe(
95
- Effect.flatMap((value) =>
96
- Effect.try({
97
- try: () => {
98
- const parsed = JSON.parse(value) as T;
99
- // The `set` path serializes Redacted values as
100
- // `{_tag: "Redacted", value: ...}`. After JSON.parse the
101
- // result is a plain object — detect the marker shape and
102
- // rebuild the Redacted wrapper. Plain values pass through.
103
- if (
104
- typeof parsed === "object" &&
105
- parsed !== null &&
106
- (parsed as { _tag?: unknown })._tag === "Redacted" &&
107
- "value" in parsed
108
- ) {
109
- return Redacted.make(
110
- (parsed as { value: unknown }).value,
111
- ) as T;
112
- }
113
- return parsed;
114
- },
115
- catch: (error) => error as Error,
116
- }),
117
- ),
118
- Effect.catch((cause) =>
119
- Effect.die(
120
- new Error(`Failed to get environment variable: ${key}`, {
121
- cause,
122
- }),
123
- ),
124
- ),
125
- ),
85
+ // Read straight from `process.env` — see `unpackEnvValue` for why
86
+ // this must never resolve through `Config.string`.
87
+ Effect.sync(() => unpackEnvValue<T>(process.env[key]) as T),
126
88
  run: ((effect: Effect.Effect<void, never, any>) =>
127
89
  Effect.sync(() => {
128
90
  runners.push(effect);