alchemy 0.62.2 → 0.63.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (611) hide show
  1. package/bin/alchemy.js +1518 -1204
  2. package/bin/commands/deploy.ts +2 -0
  3. package/bin/commands/dev.ts +2 -0
  4. package/bin/services/execute-alchemy.ts +11 -0
  5. package/bin/services/template-manager.ts +2 -0
  6. package/bin/types.ts +2 -1
  7. package/lib/alchemy.d.ts +6 -22
  8. package/lib/alchemy.d.ts.map +1 -1
  9. package/lib/alchemy.js +65 -169
  10. package/lib/alchemy.js.map +1 -1
  11. package/lib/apply.d.ts +0 -2
  12. package/lib/apply.d.ts.map +1 -1
  13. package/lib/apply.js +2 -16
  14. package/lib/apply.js.map +1 -1
  15. package/lib/aws/account-id.d.ts.map +1 -1
  16. package/lib/aws/account-id.js +3 -2
  17. package/lib/aws/account-id.js.map +1 -1
  18. package/lib/aws/bucket.d.ts +8 -2
  19. package/lib/aws/bucket.d.ts.map +1 -1
  20. package/lib/aws/bucket.js +21 -14
  21. package/lib/aws/bucket.js.map +1 -1
  22. package/lib/aws/ec2/security-group.d.ts +8 -2
  23. package/lib/aws/ec2/security-group.d.ts.map +1 -1
  24. package/lib/aws/ec2/security-group.js +7 -2
  25. package/lib/aws/ec2/security-group.js.map +1 -1
  26. package/lib/aws/function.d.ts +9 -3
  27. package/lib/aws/function.d.ts.map +1 -1
  28. package/lib/aws/function.js +35 -26
  29. package/lib/aws/function.js.map +1 -1
  30. package/lib/aws/policy-attachment.d.ts.map +1 -1
  31. package/lib/aws/policy-attachment.js +2 -1
  32. package/lib/aws/policy-attachment.js.map +1 -1
  33. package/lib/aws/policy.d.ts +8 -2
  34. package/lib/aws/policy.d.ts.map +1 -1
  35. package/lib/aws/policy.js +13 -4
  36. package/lib/aws/policy.js.map +1 -1
  37. package/lib/aws/queue.d.ts +8 -2
  38. package/lib/aws/queue.d.ts.map +1 -1
  39. package/lib/aws/queue.js +22 -14
  40. package/lib/aws/queue.js.map +1 -1
  41. package/lib/aws/role.d.ts +8 -2
  42. package/lib/aws/role.d.ts.map +1 -1
  43. package/lib/aws/role.js +10 -3
  44. package/lib/aws/role.js.map +1 -1
  45. package/lib/aws/ses.d.ts +1 -1
  46. package/lib/aws/ses.d.ts.map +1 -1
  47. package/lib/aws/ses.js +2 -1
  48. package/lib/aws/ses.js.map +1 -1
  49. package/lib/aws/ssm-parameter.d.ts +8 -2
  50. package/lib/aws/ssm-parameter.d.ts.map +1 -1
  51. package/lib/aws/ssm-parameter.js +15 -10
  52. package/lib/aws/ssm-parameter.js.map +1 -1
  53. package/lib/aws/table.d.ts +8 -2
  54. package/lib/aws/table.d.ts.map +1 -1
  55. package/lib/aws/table.js +17 -9
  56. package/lib/aws/table.js.map +1 -1
  57. package/lib/cloudflare/account-api-token.d.ts +2 -2
  58. package/lib/cloudflare/account-api-token.d.ts.map +1 -1
  59. package/lib/cloudflare/account-api-token.js +7 -6
  60. package/lib/cloudflare/account-api-token.js.map +1 -1
  61. package/lib/cloudflare/ai-gateway.d.ts +9 -4
  62. package/lib/cloudflare/ai-gateway.d.ts.map +1 -1
  63. package/lib/cloudflare/ai-gateway.js +20 -24
  64. package/lib/cloudflare/ai-gateway.js.map +1 -1
  65. package/lib/cloudflare/api-schema.d.ts +2 -2
  66. package/lib/cloudflare/api-schema.d.ts.map +1 -1
  67. package/lib/cloudflare/api-schema.js +6 -2
  68. package/lib/cloudflare/api-schema.js.map +1 -1
  69. package/lib/cloudflare/api-shield.d.ts +5 -1
  70. package/lib/cloudflare/api-shield.d.ts.map +1 -1
  71. package/lib/cloudflare/api-shield.js +6 -1
  72. package/lib/cloudflare/api-shield.js.map +1 -1
  73. package/lib/cloudflare/assets.d.ts +1 -1
  74. package/lib/cloudflare/assets.d.ts.map +1 -1
  75. package/lib/cloudflare/astro/astro.d.ts.map +1 -1
  76. package/lib/cloudflare/astro/astro.js +3 -1
  77. package/lib/cloudflare/astro/astro.js.map +1 -1
  78. package/lib/cloudflare/astro/plugin.d.ts +2 -1
  79. package/lib/cloudflare/astro/plugin.d.ts.map +1 -1
  80. package/lib/cloudflare/astro/plugin.js.map +1 -1
  81. package/lib/cloudflare/bindings.d.ts +2 -2
  82. package/lib/cloudflare/bindings.d.ts.map +1 -1
  83. package/lib/cloudflare/bound.d.ts +1 -1
  84. package/lib/cloudflare/bound.d.ts.map +1 -1
  85. package/lib/cloudflare/bucket.d.ts +120 -1
  86. package/lib/cloudflare/bucket.d.ts.map +1 -1
  87. package/lib/cloudflare/bucket.js +80 -2
  88. package/lib/cloudflare/bucket.js.map +1 -1
  89. package/lib/cloudflare/compatibility-date.gen.d.ts +1 -1
  90. package/lib/cloudflare/compatibility-date.gen.js +1 -1
  91. package/lib/cloudflare/container.d.ts +10 -4
  92. package/lib/cloudflare/container.d.ts.map +1 -1
  93. package/lib/cloudflare/container.js +12 -9
  94. package/lib/cloudflare/container.js.map +1 -1
  95. package/lib/cloudflare/custom-domain.js +2 -1
  96. package/lib/cloudflare/custom-domain.js.map +1 -1
  97. package/lib/cloudflare/d1-database.d.ts +1 -1
  98. package/lib/cloudflare/d1-database.d.ts.map +1 -1
  99. package/lib/cloudflare/d1-database.js +7 -3
  100. package/lib/cloudflare/d1-database.js.map +1 -1
  101. package/lib/cloudflare/dispatch-namespace.d.ts +2 -0
  102. package/lib/cloudflare/dispatch-namespace.d.ts.map +1 -1
  103. package/lib/cloudflare/dispatch-namespace.js +7 -5
  104. package/lib/cloudflare/dispatch-namespace.js.map +1 -1
  105. package/lib/cloudflare/hyperdrive.d.ts +7 -1
  106. package/lib/cloudflare/hyperdrive.d.ts.map +1 -1
  107. package/lib/cloudflare/hyperdrive.js +2 -1
  108. package/lib/cloudflare/hyperdrive.js.map +1 -1
  109. package/lib/cloudflare/kv-namespace.d.ts +3 -0
  110. package/lib/cloudflare/kv-namespace.d.ts.map +1 -1
  111. package/lib/cloudflare/kv-namespace.js +11 -2
  112. package/lib/cloudflare/kv-namespace.js.map +1 -1
  113. package/lib/cloudflare/miniflare/miniflare-worker-proxy.js +3 -1
  114. package/lib/cloudflare/miniflare/miniflare-worker-proxy.js.map +1 -1
  115. package/lib/cloudflare/miniflare/paths.d.ts +4 -0
  116. package/lib/cloudflare/miniflare/paths.d.ts.map +1 -1
  117. package/lib/cloudflare/miniflare/paths.js +11 -0
  118. package/lib/cloudflare/miniflare/paths.js.map +1 -1
  119. package/lib/cloudflare/pipeline.d.ts +14 -3
  120. package/lib/cloudflare/pipeline.d.ts.map +1 -1
  121. package/lib/cloudflare/pipeline.js +31 -2
  122. package/lib/cloudflare/pipeline.js.map +1 -1
  123. package/lib/cloudflare/queue-consumer.js +1 -1
  124. package/lib/cloudflare/queue-consumer.js.map +1 -1
  125. package/lib/cloudflare/queue.d.ts +6 -4
  126. package/lib/cloudflare/queue.d.ts.map +1 -1
  127. package/lib/cloudflare/queue.js +13 -9
  128. package/lib/cloudflare/queue.js.map +1 -1
  129. package/lib/cloudflare/react-router/plugin.d.ts +1 -1
  130. package/lib/cloudflare/react-router/plugin.d.ts.map +1 -1
  131. package/lib/cloudflare/react-router/react-router.d.ts.map +1 -1
  132. package/lib/cloudflare/react-router/react-router.js +32 -2
  133. package/lib/cloudflare/react-router/react-router.js.map +1 -1
  134. package/lib/cloudflare/redwood/plugin.d.ts +2 -1
  135. package/lib/cloudflare/redwood/plugin.d.ts.map +1 -1
  136. package/lib/cloudflare/redwood/plugin.js.map +1 -1
  137. package/lib/cloudflare/route.js +1 -1
  138. package/lib/cloudflare/route.js.map +1 -1
  139. package/lib/cloudflare/ruleset.d.ts +3 -1
  140. package/lib/cloudflare/ruleset.d.ts.map +1 -1
  141. package/lib/cloudflare/ruleset.js +3 -2
  142. package/lib/cloudflare/ruleset.js.map +1 -1
  143. package/lib/cloudflare/secret.d.ts +6 -23
  144. package/lib/cloudflare/secret.d.ts.map +1 -1
  145. package/lib/cloudflare/secret.js +8 -4
  146. package/lib/cloudflare/secret.js.map +1 -1
  147. package/lib/cloudflare/secrets-store.d.ts +1 -1
  148. package/lib/cloudflare/secrets-store.d.ts.map +1 -1
  149. package/lib/cloudflare/secrets-store.js +5 -2
  150. package/lib/cloudflare/secrets-store.js.map +1 -1
  151. package/lib/cloudflare/tunnel.d.ts +5 -1
  152. package/lib/cloudflare/tunnel.d.ts.map +1 -1
  153. package/lib/cloudflare/tunnel.js +5 -1
  154. package/lib/cloudflare/tunnel.js.map +1 -1
  155. package/lib/cloudflare/vectorize-index.d.ts +7 -1
  156. package/lib/cloudflare/vectorize-index.d.ts.map +1 -1
  157. package/lib/cloudflare/vectorize-index.js +5 -2
  158. package/lib/cloudflare/vectorize-index.js.map +1 -1
  159. package/lib/cloudflare/vite/plugin.d.ts +2 -1
  160. package/lib/cloudflare/vite/plugin.d.ts.map +1 -1
  161. package/lib/cloudflare/vite/plugin.js.map +1 -1
  162. package/lib/cloudflare/vite/vite.d.ts +1 -1
  163. package/lib/cloudflare/vite/vite.d.ts.map +1 -1
  164. package/lib/cloudflare/vite/vite.js +1 -1
  165. package/lib/cloudflare/vite/vite.js.map +1 -1
  166. package/lib/cloudflare/website.js +1 -1
  167. package/lib/cloudflare/website.js.map +1 -1
  168. package/lib/cloudflare/worker.d.ts +1 -1
  169. package/lib/cloudflare/worker.d.ts.map +1 -1
  170. package/lib/cloudflare/worker.js +12 -7
  171. package/lib/cloudflare/worker.js.map +1 -1
  172. package/lib/cloudflare/wrangler.json.d.ts +1 -1
  173. package/lib/cloudflare/wrangler.json.d.ts.map +1 -1
  174. package/lib/cloudflare/wrangler.json.js +5 -3
  175. package/lib/cloudflare/wrangler.json.js.map +1 -1
  176. package/lib/docker/container.d.ts +6 -0
  177. package/lib/docker/container.d.ts.map +1 -1
  178. package/lib/docker/container.js +5 -1
  179. package/lib/docker/container.js.map +1 -1
  180. package/lib/docker/network.d.ts +8 -2
  181. package/lib/docker/network.d.ts.map +1 -1
  182. package/lib/docker/network.js +7 -2
  183. package/lib/docker/network.js.map +1 -1
  184. package/lib/docker/volume.d.ts +8 -2
  185. package/lib/docker/volume.d.ts.map +1 -1
  186. package/lib/docker/volume.js +6 -4
  187. package/lib/docker/volume.js.map +1 -1
  188. package/lib/esbuild/bundle.d.ts +1 -1
  189. package/lib/fs/index.d.ts +0 -8
  190. package/lib/fs/index.d.ts.map +1 -1
  191. package/lib/fs/index.js +0 -8
  192. package/lib/fs/index.js.map +1 -1
  193. package/lib/github/client.d.ts +1 -1
  194. package/lib/github/client.d.ts.map +1 -1
  195. package/lib/github/client.js +2 -1
  196. package/lib/github/client.js.map +1 -1
  197. package/lib/github/repository-environment.d.ts +8 -2
  198. package/lib/github/repository-environment.d.ts.map +1 -1
  199. package/lib/github/repository-environment.js +16 -12
  200. package/lib/github/repository-environment.js.map +1 -1
  201. package/lib/neon/project.d.ts +7 -1
  202. package/lib/neon/project.d.ts.map +1 -1
  203. package/lib/neon/project.js +10 -6
  204. package/lib/neon/project.js.map +1 -1
  205. package/lib/planetscale/branch.d.ts +4 -2
  206. package/lib/planetscale/branch.d.ts.map +1 -1
  207. package/lib/planetscale/branch.js +18 -12
  208. package/lib/planetscale/branch.js.map +1 -1
  209. package/lib/planetscale/database.d.ts +8 -2
  210. package/lib/planetscale/database.d.ts.map +1 -1
  211. package/lib/planetscale/database.js +24 -16
  212. package/lib/planetscale/database.js.map +1 -1
  213. package/lib/planetscale/password.d.ts +8 -2
  214. package/lib/planetscale/password.d.ts.map +1 -1
  215. package/lib/planetscale/password.js +2 -2
  216. package/lib/planetscale/password.js.map +1 -1
  217. package/lib/resource.d.ts +0 -2
  218. package/lib/resource.d.ts.map +1 -1
  219. package/lib/resource.js +1 -9
  220. package/lib/resource.js.map +1 -1
  221. package/lib/scope.d.ts +9 -3
  222. package/lib/scope.d.ts.map +1 -1
  223. package/lib/scope.js +21 -34
  224. package/lib/scope.js.map +1 -1
  225. package/lib/sentry/client-key.d.ts +7 -1
  226. package/lib/sentry/client-key.d.ts.map +1 -1
  227. package/lib/sentry/client-key.js +45 -6
  228. package/lib/sentry/client-key.js.map +1 -1
  229. package/lib/sentry/project.d.ts +8 -2
  230. package/lib/sentry/project.d.ts.map +1 -1
  231. package/lib/sentry/project.js +35 -5
  232. package/lib/sentry/project.js.map +1 -1
  233. package/lib/sentry/team.d.ts +8 -2
  234. package/lib/sentry/team.d.ts.map +1 -1
  235. package/lib/sentry/team.js +36 -6
  236. package/lib/sentry/team.js.map +1 -1
  237. package/lib/serde.d.ts +0 -5
  238. package/lib/serde.d.ts.map +1 -1
  239. package/lib/serde.js +0 -28
  240. package/lib/serde.js.map +1 -1
  241. package/lib/state/d1-state-store.d.ts +1 -1
  242. package/lib/state/d1-state-store.d.ts.map +1 -1
  243. package/lib/state/d1-state-store.js +5 -5
  244. package/lib/state/d1-state-store.js.map +1 -1
  245. package/lib/state/sqlite-state-store.d.ts.map +1 -1
  246. package/lib/state/sqlite-state-store.js +7 -11
  247. package/lib/state/sqlite-state-store.js.map +1 -1
  248. package/lib/stripe/card.d.ts.map +1 -1
  249. package/lib/stripe/card.js +3 -2
  250. package/lib/stripe/card.js.map +1 -1
  251. package/lib/stripe/client.d.ts +2 -2
  252. package/lib/stripe/client.d.ts.map +1 -1
  253. package/lib/stripe/client.js +4 -3
  254. package/lib/stripe/client.js.map +1 -1
  255. package/lib/stripe/coupon.d.ts.map +1 -1
  256. package/lib/stripe/coupon.js +4 -3
  257. package/lib/stripe/coupon.js.map +1 -1
  258. package/lib/stripe/customer.js +2 -2
  259. package/lib/stripe/customer.js.map +1 -1
  260. package/lib/stripe/entitlements-feature.d.ts.map +1 -1
  261. package/lib/stripe/entitlements-feature.js +3 -2
  262. package/lib/stripe/entitlements-feature.js.map +1 -1
  263. package/lib/stripe/file.d.ts.map +1 -1
  264. package/lib/stripe/file.js +3 -2
  265. package/lib/stripe/file.js.map +1 -1
  266. package/lib/stripe/meter.js +2 -2
  267. package/lib/stripe/meter.js.map +1 -1
  268. package/lib/stripe/portal-configuration.d.ts.map +1 -1
  269. package/lib/stripe/portal-configuration.js +3 -2
  270. package/lib/stripe/portal-configuration.js.map +1 -1
  271. package/lib/stripe/price.d.ts.map +1 -1
  272. package/lib/stripe/price.js +3 -2
  273. package/lib/stripe/price.js.map +1 -1
  274. package/lib/stripe/product-feature.d.ts.map +1 -1
  275. package/lib/stripe/product-feature.js +3 -2
  276. package/lib/stripe/product-feature.js.map +1 -1
  277. package/lib/stripe/product.d.ts.map +1 -1
  278. package/lib/stripe/product.js +3 -2
  279. package/lib/stripe/product.js.map +1 -1
  280. package/lib/stripe/promotion-code.d.ts.map +1 -1
  281. package/lib/stripe/promotion-code.js +3 -2
  282. package/lib/stripe/promotion-code.js.map +1 -1
  283. package/lib/stripe/shipping-rate.d.ts.map +1 -1
  284. package/lib/stripe/shipping-rate.js +4 -3
  285. package/lib/stripe/shipping-rate.js.map +1 -1
  286. package/lib/stripe/tax-rate.d.ts.map +1 -1
  287. package/lib/stripe/tax-rate.js +3 -2
  288. package/lib/stripe/tax-rate.js.map +1 -1
  289. package/lib/stripe/webhook.d.ts.map +1 -1
  290. package/lib/stripe/webhook.js +4 -3
  291. package/lib/stripe/webhook.js.map +1 -1
  292. package/lib/test/vitest.d.ts.map +1 -1
  293. package/lib/test/vitest.js +1 -0
  294. package/lib/test/vitest.js.map +1 -1
  295. package/lib/upstash/redis.d.ts +8 -2
  296. package/lib/upstash/redis.d.ts.map +1 -1
  297. package/lib/upstash/redis.js +5 -4
  298. package/lib/upstash/redis.js.map +1 -1
  299. package/lib/util/ignore-matcher.d.ts.map +1 -1
  300. package/lib/util/ignore-matcher.js +3 -1
  301. package/lib/util/ignore-matcher.js.map +1 -1
  302. package/lib/util/peer.d.ts +10 -0
  303. package/lib/util/peer.d.ts.map +1 -0
  304. package/lib/util/peer.js +42 -0
  305. package/lib/util/peer.js.map +1 -0
  306. package/lib/util/telemetry/constants.d.ts.map +1 -1
  307. package/lib/util/telemetry/constants.js +2 -2
  308. package/lib/util/telemetry/constants.js.map +1 -1
  309. package/lib/vercel/project.d.ts +7 -1
  310. package/lib/vercel/project.d.ts.map +1 -1
  311. package/lib/vercel/project.js +28 -0
  312. package/lib/vercel/project.js.map +1 -1
  313. package/package.json +88 -74
  314. package/src/alchemy.ts +76 -222
  315. package/src/apply.ts +6 -19
  316. package/src/aws/account-id.ts +6 -3
  317. package/src/aws/bucket.ts +43 -32
  318. package/src/aws/ec2/security-group.ts +15 -3
  319. package/src/aws/function.ts +65 -39
  320. package/src/aws/policy-attachment.ts +10 -6
  321. package/src/aws/policy.ts +33 -15
  322. package/src/aws/queue.ts +50 -29
  323. package/src/aws/role.ts +37 -20
  324. package/src/aws/ses.ts +24 -20
  325. package/src/aws/ssm-parameter.ts +40 -20
  326. package/src/aws/table.ts +35 -17
  327. package/src/cloudflare/account-api-token.ts +9 -7
  328. package/src/cloudflare/ai-gateway.ts +37 -34
  329. package/src/cloudflare/api-schema.ts +33 -26
  330. package/src/cloudflare/api-shield.ts +15 -2
  331. package/src/cloudflare/astro/astro.ts +5 -1
  332. package/src/cloudflare/astro/plugin.ts +2 -1
  333. package/src/cloudflare/bindings.ts +2 -2
  334. package/src/cloudflare/bound.ts +1 -1
  335. package/src/cloudflare/bucket.ts +242 -3
  336. package/src/cloudflare/compatibility-date.gen.ts +1 -1
  337. package/src/cloudflare/container.ts +23 -12
  338. package/src/cloudflare/custom-domain.ts +2 -2
  339. package/src/cloudflare/d1-database.ts +11 -4
  340. package/src/cloudflare/dispatch-namespace.ts +10 -7
  341. package/src/cloudflare/hyperdrive.ts +13 -3
  342. package/src/cloudflare/kv-namespace.ts +25 -2
  343. package/src/cloudflare/miniflare/miniflare-worker-proxy.ts +3 -1
  344. package/src/cloudflare/miniflare/paths.ts +13 -0
  345. package/src/cloudflare/pipeline.ts +76 -28
  346. package/src/cloudflare/queue-consumer.ts +1 -1
  347. package/src/cloudflare/queue.ts +65 -54
  348. package/src/cloudflare/react-router/react-router.ts +28 -2
  349. package/src/cloudflare/redwood/plugin.ts +3 -2
  350. package/src/cloudflare/route.ts +1 -1
  351. package/src/cloudflare/ruleset.ts +7 -2
  352. package/src/cloudflare/secret.ts +20 -31
  353. package/src/cloudflare/secrets-store.ts +7 -3
  354. package/src/cloudflare/tunnel.ts +13 -2
  355. package/src/cloudflare/vectorize-index.ts +14 -3
  356. package/src/cloudflare/vite/plugin.ts +3 -2
  357. package/src/cloudflare/vite/vite.ts +2 -3
  358. package/src/cloudflare/website.ts +1 -1
  359. package/src/cloudflare/worker.ts +35 -23
  360. package/src/cloudflare/wrangler.json.ts +7 -4
  361. package/src/docker/container.ts +13 -1
  362. package/src/docker/network.ts +18 -3
  363. package/src/docker/volume.ts +17 -6
  364. package/src/fs/index.ts +0 -8
  365. package/src/github/client.ts +6 -2
  366. package/src/github/repository-environment.ts +27 -13
  367. package/src/neon/project.ts +20 -6
  368. package/src/planetscale/branch.ts +24 -13
  369. package/src/planetscale/database.ts +38 -17
  370. package/src/planetscale/password.ts +10 -3
  371. package/src/resource.ts +1 -10
  372. package/src/scope.ts +29 -38
  373. package/src/sentry/client-key.ts +74 -6
  374. package/src/sentry/project.ts +59 -6
  375. package/src/sentry/team.ts +55 -7
  376. package/src/serde.ts +0 -44
  377. package/src/state/d1-state-store.ts +13 -6
  378. package/src/state/sqlite-state-store.ts +16 -17
  379. package/src/stripe/card.ts +5 -2
  380. package/src/stripe/client.ts +10 -3
  381. package/src/stripe/coupon.ts +4 -3
  382. package/src/stripe/customer.ts +2 -2
  383. package/src/stripe/entitlements-feature.ts +5 -2
  384. package/src/stripe/file.ts +3 -2
  385. package/src/stripe/meter.ts +2 -2
  386. package/src/stripe/portal-configuration.ts +5 -2
  387. package/src/stripe/price.ts +3 -2
  388. package/src/stripe/product-feature.ts +5 -2
  389. package/src/stripe/product.ts +3 -2
  390. package/src/stripe/promotion-code.ts +3 -2
  391. package/src/stripe/shipping-rate.ts +4 -3
  392. package/src/stripe/tax-rate.ts +3 -2
  393. package/src/stripe/webhook.ts +4 -3
  394. package/src/test/vitest.ts +1 -0
  395. package/src/upstash/redis.ts +15 -5
  396. package/src/util/ignore-matcher.ts +3 -1
  397. package/src/util/peer.ts +53 -0
  398. package/src/util/telemetry/constants.ts +2 -2
  399. package/src/vercel/project.ts +46 -1
  400. package/templates/astro/_gitignore +2 -1
  401. package/templates/hono/README.md +19 -0
  402. package/templates/hono/_env +1 -0
  403. package/templates/hono/_env.example +1 -0
  404. package/templates/hono/_gitignore +34 -0
  405. package/templates/hono/alchemy.run.ts +22 -0
  406. package/templates/hono/package.json +18 -0
  407. package/templates/hono/src/index.ts +17 -0
  408. package/templates/hono/tsconfig.json +13 -0
  409. package/templates/hono/types/env.d.ts +16 -0
  410. package/templates/nuxt/_gitignore +2 -1
  411. package/templates/react-router/_gitignore +1 -0
  412. package/templates/react-router/vite.config.ts +5 -3
  413. package/templates/rwsdk/_gitignore +2 -3
  414. package/templates/sveltekit/_gitignore +2 -1
  415. package/templates/tanstack-start/_gitignore +2 -1
  416. package/templates/typescript/_gitignore +2 -1
  417. package/templates/vite/_gitignore +2 -1
  418. package/workers/cloudflare-state-store.js +69 -74
  419. package/workers/dofs-state-store.js +1 -1
  420. package/bin/bootstrap-s3.ts +0 -255
  421. package/lib/ai/ark.d.ts +0 -12
  422. package/lib/ai/ark.d.ts.map +0 -1
  423. package/lib/ai/ark.js +0 -87
  424. package/lib/ai/ark.js.map +0 -1
  425. package/lib/ai/astro-file.d.ts +0 -138
  426. package/lib/ai/astro-file.d.ts.map +0 -1
  427. package/lib/ai/astro-file.js +0 -158
  428. package/lib/ai/astro-file.js.map +0 -1
  429. package/lib/ai/client.d.ts +0 -51
  430. package/lib/ai/client.d.ts.map +0 -1
  431. package/lib/ai/client.js +0 -58
  432. package/lib/ai/client.js.map +0 -1
  433. package/lib/ai/css-file.d.ts +0 -132
  434. package/lib/ai/css-file.d.ts.map +0 -1
  435. package/lib/ai/css-file.js +0 -142
  436. package/lib/ai/css-file.js.map +0 -1
  437. package/lib/ai/data.d.ts +0 -152
  438. package/lib/ai/data.d.ts.map +0 -1
  439. package/lib/ai/data.js +0 -120
  440. package/lib/ai/data.js.map +0 -1
  441. package/lib/ai/document.d.ts +0 -208
  442. package/lib/ai/document.d.ts.map +0 -1
  443. package/lib/ai/document.js +0 -206
  444. package/lib/ai/document.js.map +0 -1
  445. package/lib/ai/html-file.d.ts +0 -129
  446. package/lib/ai/html-file.d.ts.map +0 -1
  447. package/lib/ai/html-file.js +0 -139
  448. package/lib/ai/html-file.js.map +0 -1
  449. package/lib/ai/index.d.ts +0 -11
  450. package/lib/ai/index.d.ts.map +0 -1
  451. package/lib/ai/index.js +0 -11
  452. package/lib/ai/index.js.map +0 -1
  453. package/lib/ai/json-file.d.ts +0 -161
  454. package/lib/ai/json-file.d.ts.map +0 -1
  455. package/lib/ai/json-file.js +0 -188
  456. package/lib/ai/json-file.js.map +0 -1
  457. package/lib/ai/typescript-file.d.ts +0 -140
  458. package/lib/ai/typescript-file.d.ts.map +0 -1
  459. package/lib/ai/typescript-file.js +0 -146
  460. package/lib/ai/typescript-file.js.map +0 -1
  461. package/lib/ai/vue-file.d.ts +0 -127
  462. package/lib/ai/vue-file.d.ts.map +0 -1
  463. package/lib/ai/vue-file.js +0 -137
  464. package/lib/ai/vue-file.js.map +0 -1
  465. package/lib/ai/yaml-file.d.ts +0 -170
  466. package/lib/ai/yaml-file.d.ts.map +0 -1
  467. package/lib/ai/yaml-file.js +0 -201
  468. package/lib/ai/yaml-file.js.map +0 -1
  469. package/lib/fs/static-astro-file.d.ts +0 -35
  470. package/lib/fs/static-astro-file.d.ts.map +0 -1
  471. package/lib/fs/static-astro-file.js +0 -40
  472. package/lib/fs/static-astro-file.js.map +0 -1
  473. package/lib/fs/static-css-file.d.ts +0 -25
  474. package/lib/fs/static-css-file.d.ts.map +0 -1
  475. package/lib/fs/static-css-file.js +0 -30
  476. package/lib/fs/static-css-file.js.map +0 -1
  477. package/lib/fs/static-html-file.d.ts +0 -32
  478. package/lib/fs/static-html-file.d.ts.map +0 -1
  479. package/lib/fs/static-html-file.js +0 -37
  480. package/lib/fs/static-html-file.js.map +0 -1
  481. package/lib/fs/static-json-file.d.ts +0 -18
  482. package/lib/fs/static-json-file.d.ts.map +0 -1
  483. package/lib/fs/static-json-file.js +0 -19
  484. package/lib/fs/static-json-file.js.map +0 -1
  485. package/lib/fs/static-text-file.d.ts +0 -13
  486. package/lib/fs/static-text-file.d.ts.map +0 -1
  487. package/lib/fs/static-text-file.js +0 -9
  488. package/lib/fs/static-text-file.js.map +0 -1
  489. package/lib/fs/static-typescript-file.d.ts +0 -20
  490. package/lib/fs/static-typescript-file.d.ts.map +0 -1
  491. package/lib/fs/static-typescript-file.js +0 -16
  492. package/lib/fs/static-typescript-file.js.map +0 -1
  493. package/lib/fs/static-vue-file.d.ts +0 -29
  494. package/lib/fs/static-vue-file.d.ts.map +0 -1
  495. package/lib/fs/static-vue-file.js +0 -34
  496. package/lib/fs/static-vue-file.js.map +0 -1
  497. package/lib/fs/static-yaml-file.d.ts +0 -23
  498. package/lib/fs/static-yaml-file.d.ts.map +0 -1
  499. package/lib/fs/static-yaml-file.js +0 -10
  500. package/lib/fs/static-yaml-file.js.map +0 -1
  501. package/lib/internal/docs/providers.d.ts +0 -34
  502. package/lib/internal/docs/providers.d.ts.map +0 -1
  503. package/lib/internal/docs/providers.js +0 -200
  504. package/lib/internal/docs/providers.js.map +0 -1
  505. package/lib/runtime/bind.d.ts +0 -25
  506. package/lib/runtime/bind.d.ts.map +0 -1
  507. package/lib/runtime/bind.js +0 -76
  508. package/lib/runtime/bind.js.map +0 -1
  509. package/lib/runtime/global.d.ts +0 -8
  510. package/lib/runtime/global.d.ts.map +0 -1
  511. package/lib/runtime/global.js +0 -3
  512. package/lib/runtime/global.js.map +0 -1
  513. package/lib/runtime/plugin.d.ts +0 -35
  514. package/lib/runtime/plugin.d.ts.map +0 -1
  515. package/lib/runtime/plugin.js +0 -134
  516. package/lib/runtime/plugin.js.map +0 -1
  517. package/lib/runtime/shims.d.ts +0 -6
  518. package/lib/runtime/shims.d.ts.map +0 -1
  519. package/lib/runtime/shims.js +0 -27
  520. package/lib/runtime/shims.js.map +0 -1
  521. package/lib/runtime/state.d.ts +0 -5
  522. package/lib/runtime/state.d.ts.map +0 -1
  523. package/lib/runtime/state.js +0 -4
  524. package/lib/runtime/state.js.map +0 -1
  525. package/lib/web/astro.d.ts +0 -148
  526. package/lib/web/astro.d.ts.map +0 -1
  527. package/lib/web/astro.js +0 -419
  528. package/lib/web/astro.js.map +0 -1
  529. package/lib/web/shadcn-component.d.ts +0 -30
  530. package/lib/web/shadcn-component.d.ts.map +0 -1
  531. package/lib/web/shadcn-component.js +0 -25
  532. package/lib/web/shadcn-component.js.map +0 -1
  533. package/lib/web/shadcn.d.ts +0 -98
  534. package/lib/web/shadcn.d.ts.map +0 -1
  535. package/lib/web/shadcn.js +0 -102
  536. package/lib/web/shadcn.js.map +0 -1
  537. package/lib/web/tailwind.d.ts +0 -65
  538. package/lib/web/tailwind.d.ts.map +0 -1
  539. package/lib/web/tailwind.js +0 -98
  540. package/lib/web/tailwind.js.map +0 -1
  541. package/lib/web/vite.d.ts +0 -96
  542. package/lib/web/vite.d.ts.map +0 -1
  543. package/lib/web/vite.js +0 -232
  544. package/lib/web/vite.js.map +0 -1
  545. package/lib/web/vitepress/config.d.ts +0 -12
  546. package/lib/web/vitepress/config.d.ts.map +0 -1
  547. package/lib/web/vitepress/config.js +0 -33
  548. package/lib/web/vitepress/config.js.map +0 -1
  549. package/lib/web/vitepress/custom-theme.d.ts +0 -174
  550. package/lib/web/vitepress/custom-theme.d.ts.map +0 -1
  551. package/lib/web/vitepress/custom-theme.js +0 -337
  552. package/lib/web/vitepress/custom-theme.js.map +0 -1
  553. package/lib/web/vitepress/dependencies.d.ts +0 -13
  554. package/lib/web/vitepress/dependencies.d.ts.map +0 -1
  555. package/lib/web/vitepress/dependencies.js +0 -37
  556. package/lib/web/vitepress/dependencies.js.map +0 -1
  557. package/lib/web/vitepress/home-page.d.ts +0 -247
  558. package/lib/web/vitepress/home-page.d.ts.map +0 -1
  559. package/lib/web/vitepress/home-page.js +0 -146
  560. package/lib/web/vitepress/home-page.js.map +0 -1
  561. package/lib/web/vitepress/index.d.ts +0 -6
  562. package/lib/web/vitepress/index.d.ts.map +0 -1
  563. package/lib/web/vitepress/index.js +0 -6
  564. package/lib/web/vitepress/index.js.map +0 -1
  565. package/lib/web/vitepress/process-front-matter-files.d.ts +0 -19
  566. package/lib/web/vitepress/process-front-matter-files.d.ts.map +0 -1
  567. package/lib/web/vitepress/process-front-matter-files.js +0 -73
  568. package/lib/web/vitepress/process-front-matter-files.js.map +0 -1
  569. package/lib/web/vitepress/vitepress.d.ts +0 -75
  570. package/lib/web/vitepress/vitepress.d.ts.map +0 -1
  571. package/lib/web/vitepress/vitepress.js +0 -254
  572. package/lib/web/vitepress/vitepress.js.map +0 -1
  573. package/src/ai/ark.ts +0 -118
  574. package/src/ai/astro-file.ts +0 -270
  575. package/src/ai/client.ts +0 -117
  576. package/src/ai/css-file.ts +0 -247
  577. package/src/ai/data.ts +0 -221
  578. package/src/ai/document.ts +0 -367
  579. package/src/ai/html-file.ts +0 -244
  580. package/src/ai/index.ts +0 -10
  581. package/src/ai/json-file.ts +0 -325
  582. package/src/ai/typescript-file.ts +0 -259
  583. package/src/ai/vue-file.ts +0 -242
  584. package/src/ai/yaml-file.ts +0 -328
  585. package/src/fs/static-astro-file.ts +0 -45
  586. package/src/fs/static-css-file.ts +0 -35
  587. package/src/fs/static-html-file.ts +0 -42
  588. package/src/fs/static-json-file.ts +0 -38
  589. package/src/fs/static-text-file.ts +0 -23
  590. package/src/fs/static-typescript-file.ts +0 -37
  591. package/src/fs/static-vue-file.ts +0 -39
  592. package/src/fs/static-yaml-file.ts +0 -33
  593. package/src/internal/docs/providers.ts +0 -286
  594. package/src/runtime/bind.ts +0 -95
  595. package/src/runtime/global.ts +0 -10
  596. package/src/runtime/plugin.ts +0 -163
  597. package/src/runtime/shims.js +0 -34
  598. package/src/runtime/state.ts +0 -9
  599. package/src/web/astro.ts +0 -643
  600. package/src/web/shadcn-component.ts +0 -72
  601. package/src/web/shadcn.ts +0 -221
  602. package/src/web/tailwind.ts +0 -167
  603. package/src/web/vite.ts +0 -407
  604. package/src/web/vitepress/config.ts +0 -50
  605. package/src/web/vitepress/custom-theme.ts +0 -514
  606. package/src/web/vitepress/dependencies.ts +0 -69
  607. package/src/web/vitepress/home-page.ts +0 -378
  608. package/src/web/vitepress/index.ts +0 -5
  609. package/src/web/vitepress/process-front-matter-files.ts +0 -107
  610. package/src/web/vitepress/vitepress.ts +0 -372
  611. package/templates/sveltekit/bun.lock +0 -1099
@@ -1,51 +0,0 @@
1
- import type { Secret } from "../secret.ts";
2
- /**
3
- * Model configuration for AI operations
4
- */
5
- export interface ModelConfig {
6
- /**
7
- * Model ID to use
8
- * @default 'gpt-4o'
9
- */
10
- id?: string;
11
- /**
12
- * Model provider name
13
- * @default 'openai'
14
- */
15
- provider?: string;
16
- /**
17
- * Model-specific options
18
- */
19
- options?: Record<string, any>;
20
- }
21
- /**
22
- * Configuration for creating an OpenAI client
23
- */
24
- export interface ClientConfig {
25
- /**
26
- * Base URL for the OpenAI API
27
- * @default 'https://api.openai.com/v1'
28
- */
29
- baseURL?: string;
30
- /**
31
- * OpenAI API key to use for generating content
32
- * If not provided, will use OPENAI_API_KEY environment variable
33
- */
34
- apiKey?: Secret;
35
- /**
36
- * Model configuration
37
- */
38
- model?: ModelConfig;
39
- }
40
- /**
41
- * Creates an OpenAI-compatible client with the given configuration
42
- */
43
- export declare function createModel(config: ClientConfig): import("ai").LanguageModelV1;
44
- /**
45
- * Handles rate limiting with exponential backoff
46
- * @param fn Function to retry
47
- * @returns Result of the function
48
- * @throws Error if max retries or time is exceeded
49
- */
50
- export declare function withRateLimitRetry<T>(fn: () => Promise<T>): Promise<T>;
51
- //# sourceMappingURL=client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/ai/client.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAG3C;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IAEZ;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,gCAK/C;AAiBD;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAoC5E"}
package/lib/ai/client.js DELETED
@@ -1,58 +0,0 @@
1
- import { anthropic } from "@ai-sdk/anthropic";
2
- import { openai } from "@ai-sdk/openai";
3
- import { logger } from "../util/logger.js";
4
- /**
5
- * Creates an OpenAI-compatible client with the given configuration
6
- */
7
- export function createModel(config) {
8
- if (config.model?.provider === "anthropic") {
9
- return anthropic(config.model?.id ?? "claude-3-7-sonnet-latest");
10
- }
11
- return openai(config.model?.id ?? "gpt-4o");
12
- }
13
- /**
14
- * Maximum time to retry in milliseconds (5 minutes)
15
- */
16
- const MAX_RETRY_TIME = 5 * 60 * 1000;
17
- /**
18
- * Initial delay between retries in milliseconds
19
- */
20
- const INITIAL_RETRY_DELAY = 1000;
21
- /**
22
- * Maximum number of retries
23
- */
24
- const MAX_RETRIES = 10;
25
- /**
26
- * Handles rate limiting with exponential backoff
27
- * @param fn Function to retry
28
- * @returns Result of the function
29
- * @throws Error if max retries or time is exceeded
30
- */
31
- export async function withRateLimitRetry(fn) {
32
- let retryCount = 0;
33
- let _lastError = null;
34
- const startTime = Date.now();
35
- while (true) {
36
- try {
37
- return await fn();
38
- }
39
- catch (error) {
40
- _lastError = error;
41
- logger.log("retry error", error);
42
- // Check if we should retry
43
- const isRateLimit = error.statusCode === 429;
44
- const timeElapsed = Date.now() - startTime;
45
- const shouldRetry = isRateLimit && retryCount < MAX_RETRIES && timeElapsed < MAX_RETRY_TIME;
46
- if (!shouldRetry) {
47
- throw error;
48
- }
49
- // Calculate delay with exponential backoff
50
- const delay = Math.min(INITIAL_RETRY_DELAY * 2 ** retryCount, MAX_RETRY_TIME - timeElapsed);
51
- logger.log(`Retrying in ${delay}ms`);
52
- // Wait before retrying
53
- await new Promise((resolve) => setTimeout(resolve, delay));
54
- retryCount++;
55
- }
56
- }
57
- }
58
- //# sourceMappingURL=client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/ai/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AA8C3C;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,MAAoB;IAC9C,IAAI,MAAM,CAAC,KAAK,EAAE,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC3C,OAAO,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,IAAI,0BAA0B,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,IAAI,QAAQ,CAAC,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAErC;;GAEG;AACH,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAEjC;;GAEG;AACH,MAAM,WAAW,GAAG,EAAE,CAAC;AAEvB;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAI,EAAoB;IAC9D,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,UAAU,GAAiB,IAAI,CAAC;IACpC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,UAAU,GAAG,KAAK,CAAC;YAEnB,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;YAEjC,2BAA2B;YAC3B,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,KAAK,GAAG,CAAC;YAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAC3C,MAAM,WAAW,GACf,WAAW,IAAI,UAAU,GAAG,WAAW,IAAI,WAAW,GAAG,cAAc,CAAC;YAE1E,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,KAAK,CAAC;YACd,CAAC;YAED,2CAA2C;YAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,mBAAmB,GAAG,CAAC,IAAI,UAAU,EACrC,cAAc,GAAG,WAAW,CAC7B,CAAC;YAEF,MAAM,CAAC,GAAG,CAAC,eAAe,KAAK,IAAI,CAAC,CAAC;YAErC,uBAAuB;YACvB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YAC3D,UAAU,EAAE,CAAC;QACf,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -1,132 +0,0 @@
1
- import type { Context } from "../context.ts";
2
- import { Resource } from "../resource.ts";
3
- import type { Secret } from "../secret.ts";
4
- import { type ModelConfig } from "./client.ts";
5
- /**
6
- * Properties for creating or updating a CSSFile
7
- */
8
- export interface CSSFileProps {
9
- /**
10
- * Path to the CSS file
11
- */
12
- path: string;
13
- /**
14
- * Base URL for the OpenAI API
15
- * @default 'https://api.openai.com/v1'
16
- */
17
- baseURL?: string;
18
- /**
19
- * Prompt for generating content
20
- * Use alchemy template literals to include file context:
21
- * @example
22
- * prompt: await alchemy`
23
- * Generate CSS styles for:
24
- * ${alchemy.file("src/components/Button.jsx")}
25
- * `
26
- */
27
- prompt: string;
28
- /**
29
- * System prompt for the model
30
- * This is used to provide instructions to the model about how to format the response
31
- * The default system prompt instructs the model to return CSS code inside ```css fences
32
- * @default "You are a CSS code generator. Create CSS code based on the user's requirements. Your response MUST include only CSS code inside ```css fences. Do not include any other text, explanations, or multiple code blocks."
33
- */
34
- system?: string;
35
- /**
36
- * OpenAI API key to use for generating content
37
- * If not provided, will use OPENAI_API_KEY environment variable
38
- */
39
- apiKey?: Secret;
40
- /**
41
- * Model configuration
42
- */
43
- model?: ModelConfig;
44
- /**
45
- * Temperature for controlling randomness in generation.
46
- * Higher values (e.g., 0.8) make output more random,
47
- * lower values (e.g., 0.2) make it more deterministic.
48
- * @default 0.7
49
- */
50
- temperature?: number;
51
- }
52
- /**
53
- * A CSS file that can be created, updated, and deleted
54
- */
55
- export interface CSSFile extends CSSFileProps, Resource<"ai::CSSFile"> {
56
- /**
57
- * Content of the CSS file
58
- */
59
- content: string;
60
- /**
61
- * Time at which the file was created
62
- */
63
- createdAt: number;
64
- /**
65
- * Time at which the file was last updated
66
- */
67
- updatedAt: number;
68
- }
69
- /**
70
- * Resource for generating CSS files using AI models.
71
- * Extracts CSS code from between ```css fences and validates the response.
72
- *
73
- * @example
74
- * // Create styles for a website
75
- * const mainStyles = await CSSFile("main-styles", {
76
- * path: "./public/css/main.css",
77
- * prompt: await alchemy`
78
- * Generate modern CSS styles for a company website with:
79
- * - Clean, minimalist design
80
- * - Primary color: #0062ff
81
- * - Secondary color: #6c757d
82
- * - Light gray background
83
- * - Responsive layout for mobile, tablet, and desktop
84
- * - Custom styles for buttons, cards, and navigation
85
- * `,
86
- * model: {
87
- * id: "gpt-4o",
88
- * provider: "openai"
89
- * }
90
- * });
91
- *
92
- * @example
93
- * // Generate CSS based on existing HTML
94
- * const componentStyles = await CSSFile("component-styles", {
95
- * path: "./src/styles/component.css",
96
- * prompt: await alchemy`
97
- * Create CSS styles for this HTML component:
98
- * ${alchemy.file("src/components/Card.html")}
99
- *
100
- * The styles should be:
101
- * - Modern and clean
102
- * - Include hover effects and transitions
103
- * - Support both light and dark themes
104
- * - Use CSS variables for colors and spacing
105
- * `,
106
- * temperature: 0.2
107
- * });
108
- *
109
- * @example
110
- * // Generate CSS animation with custom system prompt
111
- * const animationStyles = await CSSFile("animations", {
112
- * path: "./src/styles/animations.css",
113
- * prompt: await alchemy`
114
- * Create CSS animations for:
115
- * - Fade in/out
116
- * - Slide in from different directions
117
- * - Pulse effect
118
- * - Bounce effect
119
- * - Scale in/out
120
- * - Rotate
121
- *
122
- * Each animation should be reusable via class names.
123
- * `,
124
- * system: "You are an expert CSS animator. Create a single CSS file inside ```css fences with no additional text. Use modern CSS animation techniques and include vendor prefixes where needed for browser compatibility.",
125
- * model: {
126
- * id: "claude-3-opus-20240229",
127
- * provider: "anthropic"
128
- * }
129
- * });
130
- */
131
- export declare const CSSFile: (((this: any, id: string, props?: {}) => never) & (new (_: never) => never)) | ((this: Context<CSSFile>, _id: string, props: CSSFileProps) => Promise<CSSFile>);
132
- //# sourceMappingURL=css-file.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"css-file.d.ts","sourceRoot":"","sources":["../../src/ai/css-file.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,KAAK,WAAW,EAAe,MAAM,aAAa,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;;;;;OAQG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;IAEpB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,OAAQ,SAAQ,YAAY,EAAE,QAAQ,CAAC,aAAa,CAAC;IACpE;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB;AAQD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6DG;AACH,eAAO,MAAM,OAAO,yFAGV,OAAO,CAAC,OAAO,CAAC,OACjB,MAAM,SACJ,YAAY,KAClB,OAAO,CAAC,OAAO,CAAC,CA2DpB,CAAC"}
@@ -1,142 +0,0 @@
1
- import { generateText } from "ai";
2
- import { StaticCSSFile } from "../fs/static-css-file.js";
3
- import { Resource } from "../resource.js";
4
- import { createModel } from "./client.js";
5
- /**
6
- * Default system prompt for CSS file generation
7
- */
8
- const DEFAULT_CSS_SYSTEM_PROMPT = "You are a CSS code generator. Create CSS code based on the user's requirements. Your response MUST include only CSS code inside ```css fences. Do not include any other text, explanations, or multiple code blocks.";
9
- /**
10
- * Resource for generating CSS files using AI models.
11
- * Extracts CSS code from between ```css fences and validates the response.
12
- *
13
- * @example
14
- * // Create styles for a website
15
- * const mainStyles = await CSSFile("main-styles", {
16
- * path: "./public/css/main.css",
17
- * prompt: await alchemy`
18
- * Generate modern CSS styles for a company website with:
19
- * - Clean, minimalist design
20
- * - Primary color: #0062ff
21
- * - Secondary color: #6c757d
22
- * - Light gray background
23
- * - Responsive layout for mobile, tablet, and desktop
24
- * - Custom styles for buttons, cards, and navigation
25
- * `,
26
- * model: {
27
- * id: "gpt-4o",
28
- * provider: "openai"
29
- * }
30
- * });
31
- *
32
- * @example
33
- * // Generate CSS based on existing HTML
34
- * const componentStyles = await CSSFile("component-styles", {
35
- * path: "./src/styles/component.css",
36
- * prompt: await alchemy`
37
- * Create CSS styles for this HTML component:
38
- * ${alchemy.file("src/components/Card.html")}
39
- *
40
- * The styles should be:
41
- * - Modern and clean
42
- * - Include hover effects and transitions
43
- * - Support both light and dark themes
44
- * - Use CSS variables for colors and spacing
45
- * `,
46
- * temperature: 0.2
47
- * });
48
- *
49
- * @example
50
- * // Generate CSS animation with custom system prompt
51
- * const animationStyles = await CSSFile("animations", {
52
- * path: "./src/styles/animations.css",
53
- * prompt: await alchemy`
54
- * Create CSS animations for:
55
- * - Fade in/out
56
- * - Slide in from different directions
57
- * - Pulse effect
58
- * - Bounce effect
59
- * - Scale in/out
60
- * - Rotate
61
- *
62
- * Each animation should be reusable via class names.
63
- * `,
64
- * system: "You are an expert CSS animator. Create a single CSS file inside ```css fences with no additional text. Use modern CSS animation techniques and include vendor prefixes where needed for browser compatibility.",
65
- * model: {
66
- * id: "claude-3-opus-20240229",
67
- * provider: "anthropic"
68
- * }
69
- * });
70
- */
71
- export const CSSFile = Resource("ai::CSSFile", async function (_id, props) {
72
- // Handle deletion phase
73
- if (this.phase === "delete") {
74
- return this.destroy();
75
- }
76
- // Use provided system prompt or default
77
- const system = props.system || DEFAULT_CSS_SYSTEM_PROMPT;
78
- // Generate initial content
79
- const { text } = await generateText({
80
- model: createModel(props),
81
- prompt: props.prompt,
82
- system,
83
- providerOptions: props.model?.options,
84
- ...(props.temperature === undefined
85
- ? {}
86
- : { temperature: props.temperature }),
87
- });
88
- // Extract and validate CSS code
89
- let { code, error } = await extractCSSCode(text);
90
- // Re-prompt if there are validation errors
91
- if (error) {
92
- const errorSystem = `${system}\n\nERROR: ${error}\n\nPlease try again and ensure your response contains exactly one CSS code block inside \`\`\`css fences.`;
93
- const { text: retryText } = await generateText({
94
- model: createModel(props),
95
- prompt: props.prompt,
96
- system: errorSystem,
97
- providerOptions: props.model?.options,
98
- ...(props.temperature === undefined
99
- ? {}
100
- : { temperature: props.temperature }),
101
- });
102
- const retryResult = await extractCSSCode(retryText);
103
- if (retryResult.error) {
104
- throw new Error(`Failed to generate valid CSS code: ${retryResult.error}\n${retryText}`);
105
- }
106
- code = retryResult.code;
107
- }
108
- // Use StaticCSSFile to create/update the file
109
- const file = await StaticCSSFile("file", props.path, code);
110
- // Return the resource
111
- return this({
112
- ...props,
113
- content: file.content,
114
- createdAt: Date.now(),
115
- updatedAt: Date.now(),
116
- });
117
- });
118
- /**
119
- * Extracts CSS code from between ```css fences
120
- * Validates that exactly one CSS code block exists
121
- *
122
- * @param text The text to extract CSS code from
123
- * @returns The extracted CSS code or error message
124
- */
125
- async function extractCSSCode(text) {
126
- const cssCodeRegex = /```css\s*([\s\S]*?)```/g;
127
- const matches = Array.from(text.matchAll(cssCodeRegex));
128
- if (matches.length === 0) {
129
- return {
130
- code: "",
131
- error: "No CSS code block found in the response. Please include your code within ```css fences.",
132
- };
133
- }
134
- if (matches.length > 1) {
135
- return {
136
- code: "",
137
- error: "Multiple CSS code blocks found in the response. Please provide exactly one code block within ```css fences.",
138
- };
139
- }
140
- return { code: matches[0][1].trim() };
141
- }
142
- //# sourceMappingURL=css-file.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"css-file.js","sourceRoot":"","sources":["../../src/ai/css-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAoB,WAAW,EAAE,MAAM,aAAa,CAAC;AA4E5D;;GAEG;AACH,MAAM,yBAAyB,GAC7B,sNAAsN,CAAC;AAEzN;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6DG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAC7B,aAAa,EACb,KAAK,WAEH,GAAW,EACX,KAAmB;IAEnB,wBAAwB;IACxB,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;IAED,wCAAwC;IACxC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,yBAAyB,CAAC;IAEzD,2BAA2B;IAC3B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,YAAY,CAAC;QAClC,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC;QACzB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM;QACN,eAAe,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO;QACrC,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS;YACjC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;KACxC,CAAC,CAAC;IAEH,gCAAgC;IAChC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;IAEjD,2CAA2C;IAC3C,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,WAAW,GAAG,GAAG,MAAM,cAAc,KAAK,4GAA4G,CAAC;QAE7J,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,YAAY,CAAC;YAC7C,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC;YACzB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,MAAM,EAAE,WAAW;YACnB,eAAe,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO;YACrC,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS;gBACjC,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;SACxC,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,SAAS,CAAC,CAAC;QAEpD,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,sCAAsC,WAAW,CAAC,KAAK,KAAK,SAAS,EAAE,CACxE,CAAC;QACJ,CAAC;QAED,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;IAC1B,CAAC;IAED,8CAA8C;IAC9C,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAE3D,sBAAsB;IACtB,OAAO,IAAI,CAAC;QACV,GAAG,KAAK;QACR,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAC,CAAC;AACL,CAAC,CACF,CAAC;AAEF;;;;;;GAMG;AACH,KAAK,UAAU,cAAc,CAC3B,IAAY;IAEZ,MAAM,YAAY,GAAG,yBAAyB,CAAC;IAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IAExD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO;YACL,IAAI,EAAE,EAAE;YACR,KAAK,EACH,yFAAyF;SAC5F,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,IAAI,EAAE,EAAE;YACR,KAAK,EACH,6GAA6G;SAChH,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;AACxC,CAAC"}
package/lib/ai/data.d.ts DELETED
@@ -1,152 +0,0 @@
1
- import { type CoreMessage } from "ai";
2
- import type { JsonSchema, Type, type } from "arktype";
3
- import type { Context } from "../context.ts";
4
- import { Resource } from "../resource.ts";
5
- import type { Secret } from "../secret.ts";
6
- import { type ModelConfig } from "./client.ts";
7
- /**
8
- * Properties for creating or updating an AI Object
9
- */
10
- export interface DataProps<T extends Type<any, any>> {
11
- /**
12
- * The ArkType schema to validate and structure the generated content
13
- */
14
- schema: T | JsonSchema;
15
- /**
16
- * Prompt for generating the content
17
- * Use alchemy template literals to include file context:
18
- * @example
19
- * prompt: await alchemy`
20
- * Generate a description for:
21
- * ${alchemy.file("src/data.ts")}
22
- * `
23
- */
24
- prompt?: string;
25
- /**
26
- * Message history for the conversation
27
- * If provided, this will be used instead of the prompt
28
- */
29
- messages?: CoreMessage[];
30
- /**
31
- * System prompt to guide the AI's behavior
32
- * @example
33
- * system: "You are a technical writer tasked with describing code"
34
- */
35
- system?: string;
36
- /**
37
- * Temperature for controlling randomness in generation.
38
- * Higher values (e.g., 0.8) make output more random,
39
- * lower values (e.g., 0.2) make it more deterministic.
40
- * @default 0.7
41
- */
42
- temperature?: number;
43
- /**
44
- * Base URL for the OpenAI API
45
- * @default 'https://api.openai.com/v1'
46
- */
47
- baseURL?: string;
48
- /**
49
- * OpenAI API key to use for generating content
50
- * If not provided, will use OPENAI_API_KEY environment variable
51
- */
52
- apiKey?: Secret;
53
- /**
54
- * Model configuration
55
- */
56
- model?: ModelConfig;
57
- /**
58
- * Whether to freeze the generated object
59
- * @default false
60
- */
61
- freeze?: boolean;
62
- }
63
- /**
64
- * A resource that uses AI to generate structured content based on a schema
65
- */
66
- export interface Data<T> extends Resource<"ai::Object"> {
67
- type: JsonSchema;
68
- /**
69
- * The generated content, typed according to the provided schema
70
- */
71
- object: T;
72
- /**
73
- * Updated message history with the AI's response appended
74
- */
75
- messages: CoreMessage[];
76
- /**
77
- * Time at which the content was generated
78
- */
79
- createdAt: number;
80
- }
81
- /**
82
- * Resource for generating structured content using the Vercel AI SDK.
83
- * Supports powerful context handling through the alchemy template literal tag.
84
- *
85
- * @example
86
- * // Generate a product description with specific fields
87
- * const productSchema = type({
88
- * name: "string",
89
- * description: "string",
90
- * features: "string[]",
91
- * price: "number"
92
- * });
93
- *
94
- * const product = await Data("new-product", {
95
- * schema: productSchema,
96
- * prompt: "Generate a product description for a new smartphone",
97
- * system: "You are a product copywriter specializing in tech products",
98
- * model: {
99
- * id: "gpt-4o",
100
- * provider: "openai",
101
- * options: {
102
- * temperature: 0.7
103
- * }
104
- * }
105
- * });
106
- *
107
- * console.log(product.object); // Typed as per schema
108
- *
109
- * @example
110
- * // Generate code documentation with context
111
- * const docSchema = type({
112
- * summary: "string",
113
- * parameters: {
114
- * name: "string",
115
- * type: "string",
116
- * description: "string"
117
- * }[],
118
- * returns: "string"
119
- * });
120
- *
121
- * const docs = await Data("function-docs", {
122
- * schema: docSchema,
123
- * prompt: await alchemy`
124
- * Generate documentation for this function:
125
- * ${alchemy.file("src/utils/format.ts")}
126
- * `,
127
- * system: "You are a technical documentation writer",
128
- * temperature: 0.2
129
- * });
130
- *
131
- * @example
132
- * // Using message history for iterative generation
133
- * const feedbackSchema = type({
134
- * rating: "number",
135
- * positives: "string[]",
136
- * improvements: "string[]",
137
- * summary: "string"
138
- * });
139
- *
140
- * const feedback = await Data("product-feedback", {
141
- * schema: feedbackSchema,
142
- * messages: [
143
- * { role: "user", content: "I'd like feedback on my product design" },
144
- * { role: "assistant", content: "I'd be happy to provide feedback. What's your product?" },
145
- * { role: "user", content: "It's a new smart home device that..." }
146
- * ],
147
- * system: "You are a product design expert providing structured feedback",
148
- * temperature: 0.3
149
- * });
150
- */
151
- export declare const Data: (((this: any, id: string, props?: {}) => never) & (new (_: never) => never)) | (<const T extends Type<any, any>>(this: Context<Data<any>>, _id: string, props: DataProps<T>) => Promise<Data<type.infer<T>>>);
152
- //# sourceMappingURL=data.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/ai/data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,IAAI,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,SAAS,CAAC,CAAC,SAAS,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACjD;;OAEG;IACH,MAAM,EAAE,CAAC,GAAG,UAAU,CAAC;IAEvB;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IAEzB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;IAEpB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,IAAI,CAAC,CAAC,CAAE,SAAQ,QAAQ,CAAC,YAAY,CAAC;IACrD,IAAI,EAAE,UAAU,CAAC;IAEjB;;OAEG;IACH,MAAM,EAAE,CAAC,CAAC;IAEV;;OAEG;IACH,QAAQ,EAAE,WAAW,EAAE,CAAC;IAExB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqEG;AACH,eAAO,MAAM,IAAI,yFACT,CAAC,SAAS,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,QACxB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,MAAM,SAAS,SAAS,CAAC,CAAC,CAAC,KAAG,OAAO,CACpE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CACpB,CAmDC,CAAC"}
package/lib/ai/data.js DELETED
@@ -1,120 +0,0 @@
1
- import { generateObject } from "ai";
2
- import { Resource } from "../resource.js";
3
- import { ark } from "./ark.js";
4
- import { createModel } from "./client.js";
5
- /**
6
- * Resource for generating structured content using the Vercel AI SDK.
7
- * Supports powerful context handling through the alchemy template literal tag.
8
- *
9
- * @example
10
- * // Generate a product description with specific fields
11
- * const productSchema = type({
12
- * name: "string",
13
- * description: "string",
14
- * features: "string[]",
15
- * price: "number"
16
- * });
17
- *
18
- * const product = await Data("new-product", {
19
- * schema: productSchema,
20
- * prompt: "Generate a product description for a new smartphone",
21
- * system: "You are a product copywriter specializing in tech products",
22
- * model: {
23
- * id: "gpt-4o",
24
- * provider: "openai",
25
- * options: {
26
- * temperature: 0.7
27
- * }
28
- * }
29
- * });
30
- *
31
- * console.log(product.object); // Typed as per schema
32
- *
33
- * @example
34
- * // Generate code documentation with context
35
- * const docSchema = type({
36
- * summary: "string",
37
- * parameters: {
38
- * name: "string",
39
- * type: "string",
40
- * description: "string"
41
- * }[],
42
- * returns: "string"
43
- * });
44
- *
45
- * const docs = await Data("function-docs", {
46
- * schema: docSchema,
47
- * prompt: await alchemy`
48
- * Generate documentation for this function:
49
- * ${alchemy.file("src/utils/format.ts")}
50
- * `,
51
- * system: "You are a technical documentation writer",
52
- * temperature: 0.2
53
- * });
54
- *
55
- * @example
56
- * // Using message history for iterative generation
57
- * const feedbackSchema = type({
58
- * rating: "number",
59
- * positives: "string[]",
60
- * improvements: "string[]",
61
- * summary: "string"
62
- * });
63
- *
64
- * const feedback = await Data("product-feedback", {
65
- * schema: feedbackSchema,
66
- * messages: [
67
- * { role: "user", content: "I'd like feedback on my product design" },
68
- * { role: "assistant", content: "I'd be happy to provide feedback. What's your product?" },
69
- * { role: "user", content: "It's a new smart home device that..." }
70
- * ],
71
- * system: "You are a product design expert providing structured feedback",
72
- * temperature: 0.3
73
- * });
74
- */
75
- export const Data = Resource("ai::Object", async function (_id, props) {
76
- if (this.phase === "delete") {
77
- return this.destroy();
78
- }
79
- // Validate that either prompt or messages is provided
80
- if (!props.prompt && !props.messages) {
81
- throw new Error("Either prompt or messages must be provided");
82
- }
83
- if (this.phase === "update" && props.freeze) {
84
- return this(this.output);
85
- }
86
- // Create messages array if only prompt is provided
87
- const messages = props.messages || [{ role: "user", content: props.prompt }];
88
- // Generate structured output using generateObject
89
- const { object } = await generateObject({
90
- model: createModel(props),
91
- // Convert ArkType schema to Zod schema for generateObject
92
- // This is needed because generateObject expects a Zod schema
93
- schema: ark.schema(props.schema),
94
- providerOptions: props.model?.options,
95
- system: props.system ||
96
- "You are an AI assistant tasked with generating structured content.",
97
- messages,
98
- ...(props.temperature === undefined
99
- ? {}
100
- : // some models error if you provide it (rather than ignoring it)
101
- { temperature: props.temperature }),
102
- });
103
- // Create updated message history with the structured response
104
- const responseText = JSON.stringify(object);
105
- const updatedMessages = [
106
- ...messages,
107
- {
108
- role: "assistant",
109
- content: responseText,
110
- },
111
- ];
112
- // Return the resource with typed content and updated messages
113
- return this({
114
- type: props.schema,
115
- object: object,
116
- messages: updatedMessages,
117
- createdAt: Date.now(),
118
- });
119
- });
120
- //# sourceMappingURL=data.js.map