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.
- package/bin/alchemy.js +1518 -1204
- package/bin/commands/deploy.ts +2 -0
- package/bin/commands/dev.ts +2 -0
- package/bin/services/execute-alchemy.ts +11 -0
- package/bin/services/template-manager.ts +2 -0
- package/bin/types.ts +2 -1
- package/lib/alchemy.d.ts +6 -22
- package/lib/alchemy.d.ts.map +1 -1
- package/lib/alchemy.js +65 -169
- package/lib/alchemy.js.map +1 -1
- package/lib/apply.d.ts +0 -2
- package/lib/apply.d.ts.map +1 -1
- package/lib/apply.js +2 -16
- package/lib/apply.js.map +1 -1
- package/lib/aws/account-id.d.ts.map +1 -1
- package/lib/aws/account-id.js +3 -2
- package/lib/aws/account-id.js.map +1 -1
- package/lib/aws/bucket.d.ts +8 -2
- package/lib/aws/bucket.d.ts.map +1 -1
- package/lib/aws/bucket.js +21 -14
- package/lib/aws/bucket.js.map +1 -1
- package/lib/aws/ec2/security-group.d.ts +8 -2
- package/lib/aws/ec2/security-group.d.ts.map +1 -1
- package/lib/aws/ec2/security-group.js +7 -2
- package/lib/aws/ec2/security-group.js.map +1 -1
- package/lib/aws/function.d.ts +9 -3
- package/lib/aws/function.d.ts.map +1 -1
- package/lib/aws/function.js +35 -26
- package/lib/aws/function.js.map +1 -1
- package/lib/aws/policy-attachment.d.ts.map +1 -1
- package/lib/aws/policy-attachment.js +2 -1
- package/lib/aws/policy-attachment.js.map +1 -1
- package/lib/aws/policy.d.ts +8 -2
- package/lib/aws/policy.d.ts.map +1 -1
- package/lib/aws/policy.js +13 -4
- package/lib/aws/policy.js.map +1 -1
- package/lib/aws/queue.d.ts +8 -2
- package/lib/aws/queue.d.ts.map +1 -1
- package/lib/aws/queue.js +22 -14
- package/lib/aws/queue.js.map +1 -1
- package/lib/aws/role.d.ts +8 -2
- package/lib/aws/role.d.ts.map +1 -1
- package/lib/aws/role.js +10 -3
- package/lib/aws/role.js.map +1 -1
- package/lib/aws/ses.d.ts +1 -1
- package/lib/aws/ses.d.ts.map +1 -1
- package/lib/aws/ses.js +2 -1
- package/lib/aws/ses.js.map +1 -1
- package/lib/aws/ssm-parameter.d.ts +8 -2
- package/lib/aws/ssm-parameter.d.ts.map +1 -1
- package/lib/aws/ssm-parameter.js +15 -10
- package/lib/aws/ssm-parameter.js.map +1 -1
- package/lib/aws/table.d.ts +8 -2
- package/lib/aws/table.d.ts.map +1 -1
- package/lib/aws/table.js +17 -9
- package/lib/aws/table.js.map +1 -1
- package/lib/cloudflare/account-api-token.d.ts +2 -2
- package/lib/cloudflare/account-api-token.d.ts.map +1 -1
- package/lib/cloudflare/account-api-token.js +7 -6
- package/lib/cloudflare/account-api-token.js.map +1 -1
- package/lib/cloudflare/ai-gateway.d.ts +9 -4
- package/lib/cloudflare/ai-gateway.d.ts.map +1 -1
- package/lib/cloudflare/ai-gateway.js +20 -24
- package/lib/cloudflare/ai-gateway.js.map +1 -1
- package/lib/cloudflare/api-schema.d.ts +2 -2
- package/lib/cloudflare/api-schema.d.ts.map +1 -1
- package/lib/cloudflare/api-schema.js +6 -2
- package/lib/cloudflare/api-schema.js.map +1 -1
- package/lib/cloudflare/api-shield.d.ts +5 -1
- package/lib/cloudflare/api-shield.d.ts.map +1 -1
- package/lib/cloudflare/api-shield.js +6 -1
- package/lib/cloudflare/api-shield.js.map +1 -1
- package/lib/cloudflare/assets.d.ts +1 -1
- package/lib/cloudflare/assets.d.ts.map +1 -1
- package/lib/cloudflare/astro/astro.d.ts.map +1 -1
- package/lib/cloudflare/astro/astro.js +3 -1
- package/lib/cloudflare/astro/astro.js.map +1 -1
- package/lib/cloudflare/astro/plugin.d.ts +2 -1
- package/lib/cloudflare/astro/plugin.d.ts.map +1 -1
- package/lib/cloudflare/astro/plugin.js.map +1 -1
- package/lib/cloudflare/bindings.d.ts +2 -2
- package/lib/cloudflare/bindings.d.ts.map +1 -1
- package/lib/cloudflare/bound.d.ts +1 -1
- package/lib/cloudflare/bound.d.ts.map +1 -1
- package/lib/cloudflare/bucket.d.ts +120 -1
- package/lib/cloudflare/bucket.d.ts.map +1 -1
- package/lib/cloudflare/bucket.js +80 -2
- package/lib/cloudflare/bucket.js.map +1 -1
- package/lib/cloudflare/compatibility-date.gen.d.ts +1 -1
- package/lib/cloudflare/compatibility-date.gen.js +1 -1
- package/lib/cloudflare/container.d.ts +10 -4
- package/lib/cloudflare/container.d.ts.map +1 -1
- package/lib/cloudflare/container.js +12 -9
- package/lib/cloudflare/container.js.map +1 -1
- package/lib/cloudflare/custom-domain.js +2 -1
- package/lib/cloudflare/custom-domain.js.map +1 -1
- package/lib/cloudflare/d1-database.d.ts +1 -1
- package/lib/cloudflare/d1-database.d.ts.map +1 -1
- package/lib/cloudflare/d1-database.js +7 -3
- package/lib/cloudflare/d1-database.js.map +1 -1
- package/lib/cloudflare/dispatch-namespace.d.ts +2 -0
- package/lib/cloudflare/dispatch-namespace.d.ts.map +1 -1
- package/lib/cloudflare/dispatch-namespace.js +7 -5
- package/lib/cloudflare/dispatch-namespace.js.map +1 -1
- package/lib/cloudflare/hyperdrive.d.ts +7 -1
- package/lib/cloudflare/hyperdrive.d.ts.map +1 -1
- package/lib/cloudflare/hyperdrive.js +2 -1
- package/lib/cloudflare/hyperdrive.js.map +1 -1
- package/lib/cloudflare/kv-namespace.d.ts +3 -0
- package/lib/cloudflare/kv-namespace.d.ts.map +1 -1
- package/lib/cloudflare/kv-namespace.js +11 -2
- package/lib/cloudflare/kv-namespace.js.map +1 -1
- package/lib/cloudflare/miniflare/miniflare-worker-proxy.js +3 -1
- package/lib/cloudflare/miniflare/miniflare-worker-proxy.js.map +1 -1
- package/lib/cloudflare/miniflare/paths.d.ts +4 -0
- package/lib/cloudflare/miniflare/paths.d.ts.map +1 -1
- package/lib/cloudflare/miniflare/paths.js +11 -0
- package/lib/cloudflare/miniflare/paths.js.map +1 -1
- package/lib/cloudflare/pipeline.d.ts +14 -3
- package/lib/cloudflare/pipeline.d.ts.map +1 -1
- package/lib/cloudflare/pipeline.js +31 -2
- package/lib/cloudflare/pipeline.js.map +1 -1
- package/lib/cloudflare/queue-consumer.js +1 -1
- package/lib/cloudflare/queue-consumer.js.map +1 -1
- package/lib/cloudflare/queue.d.ts +6 -4
- package/lib/cloudflare/queue.d.ts.map +1 -1
- package/lib/cloudflare/queue.js +13 -9
- package/lib/cloudflare/queue.js.map +1 -1
- package/lib/cloudflare/react-router/plugin.d.ts +1 -1
- package/lib/cloudflare/react-router/plugin.d.ts.map +1 -1
- package/lib/cloudflare/react-router/react-router.d.ts.map +1 -1
- package/lib/cloudflare/react-router/react-router.js +32 -2
- package/lib/cloudflare/react-router/react-router.js.map +1 -1
- package/lib/cloudflare/redwood/plugin.d.ts +2 -1
- package/lib/cloudflare/redwood/plugin.d.ts.map +1 -1
- package/lib/cloudflare/redwood/plugin.js.map +1 -1
- package/lib/cloudflare/route.js +1 -1
- package/lib/cloudflare/route.js.map +1 -1
- package/lib/cloudflare/ruleset.d.ts +3 -1
- package/lib/cloudflare/ruleset.d.ts.map +1 -1
- package/lib/cloudflare/ruleset.js +3 -2
- package/lib/cloudflare/ruleset.js.map +1 -1
- package/lib/cloudflare/secret.d.ts +6 -23
- package/lib/cloudflare/secret.d.ts.map +1 -1
- package/lib/cloudflare/secret.js +8 -4
- package/lib/cloudflare/secret.js.map +1 -1
- package/lib/cloudflare/secrets-store.d.ts +1 -1
- package/lib/cloudflare/secrets-store.d.ts.map +1 -1
- package/lib/cloudflare/secrets-store.js +5 -2
- package/lib/cloudflare/secrets-store.js.map +1 -1
- package/lib/cloudflare/tunnel.d.ts +5 -1
- package/lib/cloudflare/tunnel.d.ts.map +1 -1
- package/lib/cloudflare/tunnel.js +5 -1
- package/lib/cloudflare/tunnel.js.map +1 -1
- package/lib/cloudflare/vectorize-index.d.ts +7 -1
- package/lib/cloudflare/vectorize-index.d.ts.map +1 -1
- package/lib/cloudflare/vectorize-index.js +5 -2
- package/lib/cloudflare/vectorize-index.js.map +1 -1
- package/lib/cloudflare/vite/plugin.d.ts +2 -1
- package/lib/cloudflare/vite/plugin.d.ts.map +1 -1
- package/lib/cloudflare/vite/plugin.js.map +1 -1
- package/lib/cloudflare/vite/vite.d.ts +1 -1
- package/lib/cloudflare/vite/vite.d.ts.map +1 -1
- package/lib/cloudflare/vite/vite.js +1 -1
- package/lib/cloudflare/vite/vite.js.map +1 -1
- package/lib/cloudflare/website.js +1 -1
- package/lib/cloudflare/website.js.map +1 -1
- package/lib/cloudflare/worker.d.ts +1 -1
- package/lib/cloudflare/worker.d.ts.map +1 -1
- package/lib/cloudflare/worker.js +12 -7
- package/lib/cloudflare/worker.js.map +1 -1
- package/lib/cloudflare/wrangler.json.d.ts +1 -1
- package/lib/cloudflare/wrangler.json.d.ts.map +1 -1
- package/lib/cloudflare/wrangler.json.js +5 -3
- package/lib/cloudflare/wrangler.json.js.map +1 -1
- package/lib/docker/container.d.ts +6 -0
- package/lib/docker/container.d.ts.map +1 -1
- package/lib/docker/container.js +5 -1
- package/lib/docker/container.js.map +1 -1
- package/lib/docker/network.d.ts +8 -2
- package/lib/docker/network.d.ts.map +1 -1
- package/lib/docker/network.js +7 -2
- package/lib/docker/network.js.map +1 -1
- package/lib/docker/volume.d.ts +8 -2
- package/lib/docker/volume.d.ts.map +1 -1
- package/lib/docker/volume.js +6 -4
- package/lib/docker/volume.js.map +1 -1
- package/lib/esbuild/bundle.d.ts +1 -1
- package/lib/fs/index.d.ts +0 -8
- package/lib/fs/index.d.ts.map +1 -1
- package/lib/fs/index.js +0 -8
- package/lib/fs/index.js.map +1 -1
- package/lib/github/client.d.ts +1 -1
- package/lib/github/client.d.ts.map +1 -1
- package/lib/github/client.js +2 -1
- package/lib/github/client.js.map +1 -1
- package/lib/github/repository-environment.d.ts +8 -2
- package/lib/github/repository-environment.d.ts.map +1 -1
- package/lib/github/repository-environment.js +16 -12
- package/lib/github/repository-environment.js.map +1 -1
- package/lib/neon/project.d.ts +7 -1
- package/lib/neon/project.d.ts.map +1 -1
- package/lib/neon/project.js +10 -6
- package/lib/neon/project.js.map +1 -1
- package/lib/planetscale/branch.d.ts +4 -2
- package/lib/planetscale/branch.d.ts.map +1 -1
- package/lib/planetscale/branch.js +18 -12
- package/lib/planetscale/branch.js.map +1 -1
- package/lib/planetscale/database.d.ts +8 -2
- package/lib/planetscale/database.d.ts.map +1 -1
- package/lib/planetscale/database.js +24 -16
- package/lib/planetscale/database.js.map +1 -1
- package/lib/planetscale/password.d.ts +8 -2
- package/lib/planetscale/password.d.ts.map +1 -1
- package/lib/planetscale/password.js +2 -2
- package/lib/planetscale/password.js.map +1 -1
- package/lib/resource.d.ts +0 -2
- package/lib/resource.d.ts.map +1 -1
- package/lib/resource.js +1 -9
- package/lib/resource.js.map +1 -1
- package/lib/scope.d.ts +9 -3
- package/lib/scope.d.ts.map +1 -1
- package/lib/scope.js +21 -34
- package/lib/scope.js.map +1 -1
- package/lib/sentry/client-key.d.ts +7 -1
- package/lib/sentry/client-key.d.ts.map +1 -1
- package/lib/sentry/client-key.js +45 -6
- package/lib/sentry/client-key.js.map +1 -1
- package/lib/sentry/project.d.ts +8 -2
- package/lib/sentry/project.d.ts.map +1 -1
- package/lib/sentry/project.js +35 -5
- package/lib/sentry/project.js.map +1 -1
- package/lib/sentry/team.d.ts +8 -2
- package/lib/sentry/team.d.ts.map +1 -1
- package/lib/sentry/team.js +36 -6
- package/lib/sentry/team.js.map +1 -1
- package/lib/serde.d.ts +0 -5
- package/lib/serde.d.ts.map +1 -1
- package/lib/serde.js +0 -28
- package/lib/serde.js.map +1 -1
- package/lib/state/d1-state-store.d.ts +1 -1
- package/lib/state/d1-state-store.d.ts.map +1 -1
- package/lib/state/d1-state-store.js +5 -5
- package/lib/state/d1-state-store.js.map +1 -1
- package/lib/state/sqlite-state-store.d.ts.map +1 -1
- package/lib/state/sqlite-state-store.js +7 -11
- package/lib/state/sqlite-state-store.js.map +1 -1
- package/lib/stripe/card.d.ts.map +1 -1
- package/lib/stripe/card.js +3 -2
- package/lib/stripe/card.js.map +1 -1
- package/lib/stripe/client.d.ts +2 -2
- package/lib/stripe/client.d.ts.map +1 -1
- package/lib/stripe/client.js +4 -3
- package/lib/stripe/client.js.map +1 -1
- package/lib/stripe/coupon.d.ts.map +1 -1
- package/lib/stripe/coupon.js +4 -3
- package/lib/stripe/coupon.js.map +1 -1
- package/lib/stripe/customer.js +2 -2
- package/lib/stripe/customer.js.map +1 -1
- package/lib/stripe/entitlements-feature.d.ts.map +1 -1
- package/lib/stripe/entitlements-feature.js +3 -2
- package/lib/stripe/entitlements-feature.js.map +1 -1
- package/lib/stripe/file.d.ts.map +1 -1
- package/lib/stripe/file.js +3 -2
- package/lib/stripe/file.js.map +1 -1
- package/lib/stripe/meter.js +2 -2
- package/lib/stripe/meter.js.map +1 -1
- package/lib/stripe/portal-configuration.d.ts.map +1 -1
- package/lib/stripe/portal-configuration.js +3 -2
- package/lib/stripe/portal-configuration.js.map +1 -1
- package/lib/stripe/price.d.ts.map +1 -1
- package/lib/stripe/price.js +3 -2
- package/lib/stripe/price.js.map +1 -1
- package/lib/stripe/product-feature.d.ts.map +1 -1
- package/lib/stripe/product-feature.js +3 -2
- package/lib/stripe/product-feature.js.map +1 -1
- package/lib/stripe/product.d.ts.map +1 -1
- package/lib/stripe/product.js +3 -2
- package/lib/stripe/product.js.map +1 -1
- package/lib/stripe/promotion-code.d.ts.map +1 -1
- package/lib/stripe/promotion-code.js +3 -2
- package/lib/stripe/promotion-code.js.map +1 -1
- package/lib/stripe/shipping-rate.d.ts.map +1 -1
- package/lib/stripe/shipping-rate.js +4 -3
- package/lib/stripe/shipping-rate.js.map +1 -1
- package/lib/stripe/tax-rate.d.ts.map +1 -1
- package/lib/stripe/tax-rate.js +3 -2
- package/lib/stripe/tax-rate.js.map +1 -1
- package/lib/stripe/webhook.d.ts.map +1 -1
- package/lib/stripe/webhook.js +4 -3
- package/lib/stripe/webhook.js.map +1 -1
- package/lib/test/vitest.d.ts.map +1 -1
- package/lib/test/vitest.js +1 -0
- package/lib/test/vitest.js.map +1 -1
- package/lib/upstash/redis.d.ts +8 -2
- package/lib/upstash/redis.d.ts.map +1 -1
- package/lib/upstash/redis.js +5 -4
- package/lib/upstash/redis.js.map +1 -1
- package/lib/util/ignore-matcher.d.ts.map +1 -1
- package/lib/util/ignore-matcher.js +3 -1
- package/lib/util/ignore-matcher.js.map +1 -1
- package/lib/util/peer.d.ts +10 -0
- package/lib/util/peer.d.ts.map +1 -0
- package/lib/util/peer.js +42 -0
- package/lib/util/peer.js.map +1 -0
- package/lib/util/telemetry/constants.d.ts.map +1 -1
- package/lib/util/telemetry/constants.js +2 -2
- package/lib/util/telemetry/constants.js.map +1 -1
- package/lib/vercel/project.d.ts +7 -1
- package/lib/vercel/project.d.ts.map +1 -1
- package/lib/vercel/project.js +28 -0
- package/lib/vercel/project.js.map +1 -1
- package/package.json +88 -74
- package/src/alchemy.ts +76 -222
- package/src/apply.ts +6 -19
- package/src/aws/account-id.ts +6 -3
- package/src/aws/bucket.ts +43 -32
- package/src/aws/ec2/security-group.ts +15 -3
- package/src/aws/function.ts +65 -39
- package/src/aws/policy-attachment.ts +10 -6
- package/src/aws/policy.ts +33 -15
- package/src/aws/queue.ts +50 -29
- package/src/aws/role.ts +37 -20
- package/src/aws/ses.ts +24 -20
- package/src/aws/ssm-parameter.ts +40 -20
- package/src/aws/table.ts +35 -17
- package/src/cloudflare/account-api-token.ts +9 -7
- package/src/cloudflare/ai-gateway.ts +37 -34
- package/src/cloudflare/api-schema.ts +33 -26
- package/src/cloudflare/api-shield.ts +15 -2
- package/src/cloudflare/astro/astro.ts +5 -1
- package/src/cloudflare/astro/plugin.ts +2 -1
- package/src/cloudflare/bindings.ts +2 -2
- package/src/cloudflare/bound.ts +1 -1
- package/src/cloudflare/bucket.ts +242 -3
- package/src/cloudflare/compatibility-date.gen.ts +1 -1
- package/src/cloudflare/container.ts +23 -12
- package/src/cloudflare/custom-domain.ts +2 -2
- package/src/cloudflare/d1-database.ts +11 -4
- package/src/cloudflare/dispatch-namespace.ts +10 -7
- package/src/cloudflare/hyperdrive.ts +13 -3
- package/src/cloudflare/kv-namespace.ts +25 -2
- package/src/cloudflare/miniflare/miniflare-worker-proxy.ts +3 -1
- package/src/cloudflare/miniflare/paths.ts +13 -0
- package/src/cloudflare/pipeline.ts +76 -28
- package/src/cloudflare/queue-consumer.ts +1 -1
- package/src/cloudflare/queue.ts +65 -54
- package/src/cloudflare/react-router/react-router.ts +28 -2
- package/src/cloudflare/redwood/plugin.ts +3 -2
- package/src/cloudflare/route.ts +1 -1
- package/src/cloudflare/ruleset.ts +7 -2
- package/src/cloudflare/secret.ts +20 -31
- package/src/cloudflare/secrets-store.ts +7 -3
- package/src/cloudflare/tunnel.ts +13 -2
- package/src/cloudflare/vectorize-index.ts +14 -3
- package/src/cloudflare/vite/plugin.ts +3 -2
- package/src/cloudflare/vite/vite.ts +2 -3
- package/src/cloudflare/website.ts +1 -1
- package/src/cloudflare/worker.ts +35 -23
- package/src/cloudflare/wrangler.json.ts +7 -4
- package/src/docker/container.ts +13 -1
- package/src/docker/network.ts +18 -3
- package/src/docker/volume.ts +17 -6
- package/src/fs/index.ts +0 -8
- package/src/github/client.ts +6 -2
- package/src/github/repository-environment.ts +27 -13
- package/src/neon/project.ts +20 -6
- package/src/planetscale/branch.ts +24 -13
- package/src/planetscale/database.ts +38 -17
- package/src/planetscale/password.ts +10 -3
- package/src/resource.ts +1 -10
- package/src/scope.ts +29 -38
- package/src/sentry/client-key.ts +74 -6
- package/src/sentry/project.ts +59 -6
- package/src/sentry/team.ts +55 -7
- package/src/serde.ts +0 -44
- package/src/state/d1-state-store.ts +13 -6
- package/src/state/sqlite-state-store.ts +16 -17
- package/src/stripe/card.ts +5 -2
- package/src/stripe/client.ts +10 -3
- package/src/stripe/coupon.ts +4 -3
- package/src/stripe/customer.ts +2 -2
- package/src/stripe/entitlements-feature.ts +5 -2
- package/src/stripe/file.ts +3 -2
- package/src/stripe/meter.ts +2 -2
- package/src/stripe/portal-configuration.ts +5 -2
- package/src/stripe/price.ts +3 -2
- package/src/stripe/product-feature.ts +5 -2
- package/src/stripe/product.ts +3 -2
- package/src/stripe/promotion-code.ts +3 -2
- package/src/stripe/shipping-rate.ts +4 -3
- package/src/stripe/tax-rate.ts +3 -2
- package/src/stripe/webhook.ts +4 -3
- package/src/test/vitest.ts +1 -0
- package/src/upstash/redis.ts +15 -5
- package/src/util/ignore-matcher.ts +3 -1
- package/src/util/peer.ts +53 -0
- package/src/util/telemetry/constants.ts +2 -2
- package/src/vercel/project.ts +46 -1
- package/templates/astro/_gitignore +2 -1
- package/templates/hono/README.md +19 -0
- package/templates/hono/_env +1 -0
- package/templates/hono/_env.example +1 -0
- package/templates/hono/_gitignore +34 -0
- package/templates/hono/alchemy.run.ts +22 -0
- package/templates/hono/package.json +18 -0
- package/templates/hono/src/index.ts +17 -0
- package/templates/hono/tsconfig.json +13 -0
- package/templates/hono/types/env.d.ts +16 -0
- package/templates/nuxt/_gitignore +2 -1
- package/templates/react-router/_gitignore +1 -0
- package/templates/react-router/vite.config.ts +5 -3
- package/templates/rwsdk/_gitignore +2 -3
- package/templates/sveltekit/_gitignore +2 -1
- package/templates/tanstack-start/_gitignore +2 -1
- package/templates/typescript/_gitignore +2 -1
- package/templates/vite/_gitignore +2 -1
- package/workers/cloudflare-state-store.js +69 -74
- package/workers/dofs-state-store.js +1 -1
- package/bin/bootstrap-s3.ts +0 -255
- package/lib/ai/ark.d.ts +0 -12
- package/lib/ai/ark.d.ts.map +0 -1
- package/lib/ai/ark.js +0 -87
- package/lib/ai/ark.js.map +0 -1
- package/lib/ai/astro-file.d.ts +0 -138
- package/lib/ai/astro-file.d.ts.map +0 -1
- package/lib/ai/astro-file.js +0 -158
- package/lib/ai/astro-file.js.map +0 -1
- package/lib/ai/client.d.ts +0 -51
- package/lib/ai/client.d.ts.map +0 -1
- package/lib/ai/client.js +0 -58
- package/lib/ai/client.js.map +0 -1
- package/lib/ai/css-file.d.ts +0 -132
- package/lib/ai/css-file.d.ts.map +0 -1
- package/lib/ai/css-file.js +0 -142
- package/lib/ai/css-file.js.map +0 -1
- package/lib/ai/data.d.ts +0 -152
- package/lib/ai/data.d.ts.map +0 -1
- package/lib/ai/data.js +0 -120
- package/lib/ai/data.js.map +0 -1
- package/lib/ai/document.d.ts +0 -208
- package/lib/ai/document.d.ts.map +0 -1
- package/lib/ai/document.js +0 -206
- package/lib/ai/document.js.map +0 -1
- package/lib/ai/html-file.d.ts +0 -129
- package/lib/ai/html-file.d.ts.map +0 -1
- package/lib/ai/html-file.js +0 -139
- package/lib/ai/html-file.js.map +0 -1
- package/lib/ai/index.d.ts +0 -11
- package/lib/ai/index.d.ts.map +0 -1
- package/lib/ai/index.js +0 -11
- package/lib/ai/index.js.map +0 -1
- package/lib/ai/json-file.d.ts +0 -161
- package/lib/ai/json-file.d.ts.map +0 -1
- package/lib/ai/json-file.js +0 -188
- package/lib/ai/json-file.js.map +0 -1
- package/lib/ai/typescript-file.d.ts +0 -140
- package/lib/ai/typescript-file.d.ts.map +0 -1
- package/lib/ai/typescript-file.js +0 -146
- package/lib/ai/typescript-file.js.map +0 -1
- package/lib/ai/vue-file.d.ts +0 -127
- package/lib/ai/vue-file.d.ts.map +0 -1
- package/lib/ai/vue-file.js +0 -137
- package/lib/ai/vue-file.js.map +0 -1
- package/lib/ai/yaml-file.d.ts +0 -170
- package/lib/ai/yaml-file.d.ts.map +0 -1
- package/lib/ai/yaml-file.js +0 -201
- package/lib/ai/yaml-file.js.map +0 -1
- package/lib/fs/static-astro-file.d.ts +0 -35
- package/lib/fs/static-astro-file.d.ts.map +0 -1
- package/lib/fs/static-astro-file.js +0 -40
- package/lib/fs/static-astro-file.js.map +0 -1
- package/lib/fs/static-css-file.d.ts +0 -25
- package/lib/fs/static-css-file.d.ts.map +0 -1
- package/lib/fs/static-css-file.js +0 -30
- package/lib/fs/static-css-file.js.map +0 -1
- package/lib/fs/static-html-file.d.ts +0 -32
- package/lib/fs/static-html-file.d.ts.map +0 -1
- package/lib/fs/static-html-file.js +0 -37
- package/lib/fs/static-html-file.js.map +0 -1
- package/lib/fs/static-json-file.d.ts +0 -18
- package/lib/fs/static-json-file.d.ts.map +0 -1
- package/lib/fs/static-json-file.js +0 -19
- package/lib/fs/static-json-file.js.map +0 -1
- package/lib/fs/static-text-file.d.ts +0 -13
- package/lib/fs/static-text-file.d.ts.map +0 -1
- package/lib/fs/static-text-file.js +0 -9
- package/lib/fs/static-text-file.js.map +0 -1
- package/lib/fs/static-typescript-file.d.ts +0 -20
- package/lib/fs/static-typescript-file.d.ts.map +0 -1
- package/lib/fs/static-typescript-file.js +0 -16
- package/lib/fs/static-typescript-file.js.map +0 -1
- package/lib/fs/static-vue-file.d.ts +0 -29
- package/lib/fs/static-vue-file.d.ts.map +0 -1
- package/lib/fs/static-vue-file.js +0 -34
- package/lib/fs/static-vue-file.js.map +0 -1
- package/lib/fs/static-yaml-file.d.ts +0 -23
- package/lib/fs/static-yaml-file.d.ts.map +0 -1
- package/lib/fs/static-yaml-file.js +0 -10
- package/lib/fs/static-yaml-file.js.map +0 -1
- package/lib/internal/docs/providers.d.ts +0 -34
- package/lib/internal/docs/providers.d.ts.map +0 -1
- package/lib/internal/docs/providers.js +0 -200
- package/lib/internal/docs/providers.js.map +0 -1
- package/lib/runtime/bind.d.ts +0 -25
- package/lib/runtime/bind.d.ts.map +0 -1
- package/lib/runtime/bind.js +0 -76
- package/lib/runtime/bind.js.map +0 -1
- package/lib/runtime/global.d.ts +0 -8
- package/lib/runtime/global.d.ts.map +0 -1
- package/lib/runtime/global.js +0 -3
- package/lib/runtime/global.js.map +0 -1
- package/lib/runtime/plugin.d.ts +0 -35
- package/lib/runtime/plugin.d.ts.map +0 -1
- package/lib/runtime/plugin.js +0 -134
- package/lib/runtime/plugin.js.map +0 -1
- package/lib/runtime/shims.d.ts +0 -6
- package/lib/runtime/shims.d.ts.map +0 -1
- package/lib/runtime/shims.js +0 -27
- package/lib/runtime/shims.js.map +0 -1
- package/lib/runtime/state.d.ts +0 -5
- package/lib/runtime/state.d.ts.map +0 -1
- package/lib/runtime/state.js +0 -4
- package/lib/runtime/state.js.map +0 -1
- package/lib/web/astro.d.ts +0 -148
- package/lib/web/astro.d.ts.map +0 -1
- package/lib/web/astro.js +0 -419
- package/lib/web/astro.js.map +0 -1
- package/lib/web/shadcn-component.d.ts +0 -30
- package/lib/web/shadcn-component.d.ts.map +0 -1
- package/lib/web/shadcn-component.js +0 -25
- package/lib/web/shadcn-component.js.map +0 -1
- package/lib/web/shadcn.d.ts +0 -98
- package/lib/web/shadcn.d.ts.map +0 -1
- package/lib/web/shadcn.js +0 -102
- package/lib/web/shadcn.js.map +0 -1
- package/lib/web/tailwind.d.ts +0 -65
- package/lib/web/tailwind.d.ts.map +0 -1
- package/lib/web/tailwind.js +0 -98
- package/lib/web/tailwind.js.map +0 -1
- package/lib/web/vite.d.ts +0 -96
- package/lib/web/vite.d.ts.map +0 -1
- package/lib/web/vite.js +0 -232
- package/lib/web/vite.js.map +0 -1
- package/lib/web/vitepress/config.d.ts +0 -12
- package/lib/web/vitepress/config.d.ts.map +0 -1
- package/lib/web/vitepress/config.js +0 -33
- package/lib/web/vitepress/config.js.map +0 -1
- package/lib/web/vitepress/custom-theme.d.ts +0 -174
- package/lib/web/vitepress/custom-theme.d.ts.map +0 -1
- package/lib/web/vitepress/custom-theme.js +0 -337
- package/lib/web/vitepress/custom-theme.js.map +0 -1
- package/lib/web/vitepress/dependencies.d.ts +0 -13
- package/lib/web/vitepress/dependencies.d.ts.map +0 -1
- package/lib/web/vitepress/dependencies.js +0 -37
- package/lib/web/vitepress/dependencies.js.map +0 -1
- package/lib/web/vitepress/home-page.d.ts +0 -247
- package/lib/web/vitepress/home-page.d.ts.map +0 -1
- package/lib/web/vitepress/home-page.js +0 -146
- package/lib/web/vitepress/home-page.js.map +0 -1
- package/lib/web/vitepress/index.d.ts +0 -6
- package/lib/web/vitepress/index.d.ts.map +0 -1
- package/lib/web/vitepress/index.js +0 -6
- package/lib/web/vitepress/index.js.map +0 -1
- package/lib/web/vitepress/process-front-matter-files.d.ts +0 -19
- package/lib/web/vitepress/process-front-matter-files.d.ts.map +0 -1
- package/lib/web/vitepress/process-front-matter-files.js +0 -73
- package/lib/web/vitepress/process-front-matter-files.js.map +0 -1
- package/lib/web/vitepress/vitepress.d.ts +0 -75
- package/lib/web/vitepress/vitepress.d.ts.map +0 -1
- package/lib/web/vitepress/vitepress.js +0 -254
- package/lib/web/vitepress/vitepress.js.map +0 -1
- package/src/ai/ark.ts +0 -118
- package/src/ai/astro-file.ts +0 -270
- package/src/ai/client.ts +0 -117
- package/src/ai/css-file.ts +0 -247
- package/src/ai/data.ts +0 -221
- package/src/ai/document.ts +0 -367
- package/src/ai/html-file.ts +0 -244
- package/src/ai/index.ts +0 -10
- package/src/ai/json-file.ts +0 -325
- package/src/ai/typescript-file.ts +0 -259
- package/src/ai/vue-file.ts +0 -242
- package/src/ai/yaml-file.ts +0 -328
- package/src/fs/static-astro-file.ts +0 -45
- package/src/fs/static-css-file.ts +0 -35
- package/src/fs/static-html-file.ts +0 -42
- package/src/fs/static-json-file.ts +0 -38
- package/src/fs/static-text-file.ts +0 -23
- package/src/fs/static-typescript-file.ts +0 -37
- package/src/fs/static-vue-file.ts +0 -39
- package/src/fs/static-yaml-file.ts +0 -33
- package/src/internal/docs/providers.ts +0 -286
- package/src/runtime/bind.ts +0 -95
- package/src/runtime/global.ts +0 -10
- package/src/runtime/plugin.ts +0 -163
- package/src/runtime/shims.js +0 -34
- package/src/runtime/state.ts +0 -9
- package/src/web/astro.ts +0 -643
- package/src/web/shadcn-component.ts +0 -72
- package/src/web/shadcn.ts +0 -221
- package/src/web/tailwind.ts +0 -167
- package/src/web/vite.ts +0 -407
- package/src/web/vitepress/config.ts +0 -50
- package/src/web/vitepress/custom-theme.ts +0 -514
- package/src/web/vitepress/dependencies.ts +0 -69
- package/src/web/vitepress/home-page.ts +0 -378
- package/src/web/vitepress/index.ts +0 -5
- package/src/web/vitepress/process-front-matter-files.ts +0 -107
- package/src/web/vitepress/vitepress.ts +0 -372
- package/templates/sveltekit/bun.lock +0 -1099
package/src/ai/css-file.ts
DELETED
|
@@ -1,247 +0,0 @@
|
|
|
1
|
-
import { generateText } from "ai";
|
|
2
|
-
import type { Context } from "../context.ts";
|
|
3
|
-
import { StaticCSSFile } from "../fs/static-css-file.ts";
|
|
4
|
-
import { Resource } from "../resource.ts";
|
|
5
|
-
import type { Secret } from "../secret.ts";
|
|
6
|
-
import { type ModelConfig, createModel } from "./client.ts";
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Properties for creating or updating a CSSFile
|
|
10
|
-
*/
|
|
11
|
-
export interface CSSFileProps {
|
|
12
|
-
/**
|
|
13
|
-
* Path to the CSS file
|
|
14
|
-
*/
|
|
15
|
-
path: string;
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Base URL for the OpenAI API
|
|
19
|
-
* @default 'https://api.openai.com/v1'
|
|
20
|
-
*/
|
|
21
|
-
baseURL?: string;
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Prompt for generating content
|
|
25
|
-
* Use alchemy template literals to include file context:
|
|
26
|
-
* @example
|
|
27
|
-
* prompt: await alchemy`
|
|
28
|
-
* Generate CSS styles for:
|
|
29
|
-
* ${alchemy.file("src/components/Button.jsx")}
|
|
30
|
-
* `
|
|
31
|
-
*/
|
|
32
|
-
prompt: string;
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* System prompt for the model
|
|
36
|
-
* This is used to provide instructions to the model about how to format the response
|
|
37
|
-
* The default system prompt instructs the model to return CSS code inside ```css fences
|
|
38
|
-
* @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."
|
|
39
|
-
*/
|
|
40
|
-
system?: string;
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* OpenAI API key to use for generating content
|
|
44
|
-
* If not provided, will use OPENAI_API_KEY environment variable
|
|
45
|
-
*/
|
|
46
|
-
apiKey?: Secret;
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Model configuration
|
|
50
|
-
*/
|
|
51
|
-
model?: ModelConfig;
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Temperature for controlling randomness in generation.
|
|
55
|
-
* Higher values (e.g., 0.8) make output more random,
|
|
56
|
-
* lower values (e.g., 0.2) make it more deterministic.
|
|
57
|
-
* @default 0.7
|
|
58
|
-
*/
|
|
59
|
-
temperature?: number;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* A CSS file that can be created, updated, and deleted
|
|
64
|
-
*/
|
|
65
|
-
export interface CSSFile extends CSSFileProps, Resource<"ai::CSSFile"> {
|
|
66
|
-
/**
|
|
67
|
-
* Content of the CSS file
|
|
68
|
-
*/
|
|
69
|
-
content: string;
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Time at which the file was created
|
|
73
|
-
*/
|
|
74
|
-
createdAt: number;
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* Time at which the file was last updated
|
|
78
|
-
*/
|
|
79
|
-
updatedAt: number;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* Default system prompt for CSS file generation
|
|
84
|
-
*/
|
|
85
|
-
const DEFAULT_CSS_SYSTEM_PROMPT =
|
|
86
|
-
"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.";
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Resource for generating CSS files using AI models.
|
|
90
|
-
* Extracts CSS code from between ```css fences and validates the response.
|
|
91
|
-
*
|
|
92
|
-
* @example
|
|
93
|
-
* // Create styles for a website
|
|
94
|
-
* const mainStyles = await CSSFile("main-styles", {
|
|
95
|
-
* path: "./public/css/main.css",
|
|
96
|
-
* prompt: await alchemy`
|
|
97
|
-
* Generate modern CSS styles for a company website with:
|
|
98
|
-
* - Clean, minimalist design
|
|
99
|
-
* - Primary color: #0062ff
|
|
100
|
-
* - Secondary color: #6c757d
|
|
101
|
-
* - Light gray background
|
|
102
|
-
* - Responsive layout for mobile, tablet, and desktop
|
|
103
|
-
* - Custom styles for buttons, cards, and navigation
|
|
104
|
-
* `,
|
|
105
|
-
* model: {
|
|
106
|
-
* id: "gpt-4o",
|
|
107
|
-
* provider: "openai"
|
|
108
|
-
* }
|
|
109
|
-
* });
|
|
110
|
-
*
|
|
111
|
-
* @example
|
|
112
|
-
* // Generate CSS based on existing HTML
|
|
113
|
-
* const componentStyles = await CSSFile("component-styles", {
|
|
114
|
-
* path: "./src/styles/component.css",
|
|
115
|
-
* prompt: await alchemy`
|
|
116
|
-
* Create CSS styles for this HTML component:
|
|
117
|
-
* ${alchemy.file("src/components/Card.html")}
|
|
118
|
-
*
|
|
119
|
-
* The styles should be:
|
|
120
|
-
* - Modern and clean
|
|
121
|
-
* - Include hover effects and transitions
|
|
122
|
-
* - Support both light and dark themes
|
|
123
|
-
* - Use CSS variables for colors and spacing
|
|
124
|
-
* `,
|
|
125
|
-
* temperature: 0.2
|
|
126
|
-
* });
|
|
127
|
-
*
|
|
128
|
-
* @example
|
|
129
|
-
* // Generate CSS animation with custom system prompt
|
|
130
|
-
* const animationStyles = await CSSFile("animations", {
|
|
131
|
-
* path: "./src/styles/animations.css",
|
|
132
|
-
* prompt: await alchemy`
|
|
133
|
-
* Create CSS animations for:
|
|
134
|
-
* - Fade in/out
|
|
135
|
-
* - Slide in from different directions
|
|
136
|
-
* - Pulse effect
|
|
137
|
-
* - Bounce effect
|
|
138
|
-
* - Scale in/out
|
|
139
|
-
* - Rotate
|
|
140
|
-
*
|
|
141
|
-
* Each animation should be reusable via class names.
|
|
142
|
-
* `,
|
|
143
|
-
* 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.",
|
|
144
|
-
* model: {
|
|
145
|
-
* id: "claude-3-opus-20240229",
|
|
146
|
-
* provider: "anthropic"
|
|
147
|
-
* }
|
|
148
|
-
* });
|
|
149
|
-
*/
|
|
150
|
-
export const CSSFile = Resource(
|
|
151
|
-
"ai::CSSFile",
|
|
152
|
-
async function (
|
|
153
|
-
this: Context<CSSFile>,
|
|
154
|
-
_id: string,
|
|
155
|
-
props: CSSFileProps,
|
|
156
|
-
): Promise<CSSFile> {
|
|
157
|
-
// Handle deletion phase
|
|
158
|
-
if (this.phase === "delete") {
|
|
159
|
-
return this.destroy();
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
// Use provided system prompt or default
|
|
163
|
-
const system = props.system || DEFAULT_CSS_SYSTEM_PROMPT;
|
|
164
|
-
|
|
165
|
-
// Generate initial content
|
|
166
|
-
const { text } = await generateText({
|
|
167
|
-
model: createModel(props),
|
|
168
|
-
prompt: props.prompt,
|
|
169
|
-
system,
|
|
170
|
-
providerOptions: props.model?.options,
|
|
171
|
-
...(props.temperature === undefined
|
|
172
|
-
? {}
|
|
173
|
-
: { temperature: props.temperature }),
|
|
174
|
-
});
|
|
175
|
-
|
|
176
|
-
// Extract and validate CSS code
|
|
177
|
-
let { code, error } = await extractCSSCode(text);
|
|
178
|
-
|
|
179
|
-
// Re-prompt if there are validation errors
|
|
180
|
-
if (error) {
|
|
181
|
-
const errorSystem = `${system}\n\nERROR: ${error}\n\nPlease try again and ensure your response contains exactly one CSS code block inside \`\`\`css fences.`;
|
|
182
|
-
|
|
183
|
-
const { text: retryText } = await generateText({
|
|
184
|
-
model: createModel(props),
|
|
185
|
-
prompt: props.prompt,
|
|
186
|
-
system: errorSystem,
|
|
187
|
-
providerOptions: props.model?.options,
|
|
188
|
-
...(props.temperature === undefined
|
|
189
|
-
? {}
|
|
190
|
-
: { temperature: props.temperature }),
|
|
191
|
-
});
|
|
192
|
-
|
|
193
|
-
const retryResult = await extractCSSCode(retryText);
|
|
194
|
-
|
|
195
|
-
if (retryResult.error) {
|
|
196
|
-
throw new Error(
|
|
197
|
-
`Failed to generate valid CSS code: ${retryResult.error}\n${retryText}`,
|
|
198
|
-
);
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
code = retryResult.code;
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
// Use StaticCSSFile to create/update the file
|
|
205
|
-
const file = await StaticCSSFile("file", props.path, code);
|
|
206
|
-
|
|
207
|
-
// Return the resource
|
|
208
|
-
return this({
|
|
209
|
-
...props,
|
|
210
|
-
content: file.content,
|
|
211
|
-
createdAt: Date.now(),
|
|
212
|
-
updatedAt: Date.now(),
|
|
213
|
-
});
|
|
214
|
-
},
|
|
215
|
-
);
|
|
216
|
-
|
|
217
|
-
/**
|
|
218
|
-
* Extracts CSS code from between ```css fences
|
|
219
|
-
* Validates that exactly one CSS code block exists
|
|
220
|
-
*
|
|
221
|
-
* @param text The text to extract CSS code from
|
|
222
|
-
* @returns The extracted CSS code or error message
|
|
223
|
-
*/
|
|
224
|
-
async function extractCSSCode(
|
|
225
|
-
text: string,
|
|
226
|
-
): Promise<{ code: string; error?: string }> {
|
|
227
|
-
const cssCodeRegex = /```css\s*([\s\S]*?)```/g;
|
|
228
|
-
const matches = Array.from(text.matchAll(cssCodeRegex));
|
|
229
|
-
|
|
230
|
-
if (matches.length === 0) {
|
|
231
|
-
return {
|
|
232
|
-
code: "",
|
|
233
|
-
error:
|
|
234
|
-
"No CSS code block found in the response. Please include your code within ```css fences.",
|
|
235
|
-
};
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
if (matches.length > 1) {
|
|
239
|
-
return {
|
|
240
|
-
code: "",
|
|
241
|
-
error:
|
|
242
|
-
"Multiple CSS code blocks found in the response. Please provide exactly one code block within ```css fences.",
|
|
243
|
-
};
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
return { code: matches[0][1].trim() };
|
|
247
|
-
}
|
package/src/ai/data.ts
DELETED
|
@@ -1,221 +0,0 @@
|
|
|
1
|
-
import { generateObject, 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 { ark } from "./ark.ts";
|
|
7
|
-
import { createModel, type ModelConfig } from "./client.ts";
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Properties for creating or updating an AI Object
|
|
11
|
-
*/
|
|
12
|
-
export interface DataProps<T extends Type<any, any>> {
|
|
13
|
-
/**
|
|
14
|
-
* The ArkType schema to validate and structure the generated content
|
|
15
|
-
*/
|
|
16
|
-
schema: T | JsonSchema;
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Prompt for generating the content
|
|
20
|
-
* Use alchemy template literals to include file context:
|
|
21
|
-
* @example
|
|
22
|
-
* prompt: await alchemy`
|
|
23
|
-
* Generate a description for:
|
|
24
|
-
* ${alchemy.file("src/data.ts")}
|
|
25
|
-
* `
|
|
26
|
-
*/
|
|
27
|
-
prompt?: string;
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Message history for the conversation
|
|
31
|
-
* If provided, this will be used instead of the prompt
|
|
32
|
-
*/
|
|
33
|
-
messages?: CoreMessage[];
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* System prompt to guide the AI's behavior
|
|
37
|
-
* @example
|
|
38
|
-
* system: "You are a technical writer tasked with describing code"
|
|
39
|
-
*/
|
|
40
|
-
system?: string;
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Temperature for controlling randomness in generation.
|
|
44
|
-
* Higher values (e.g., 0.8) make output more random,
|
|
45
|
-
* lower values (e.g., 0.2) make it more deterministic.
|
|
46
|
-
* @default 0.7
|
|
47
|
-
*/
|
|
48
|
-
temperature?: number;
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Base URL for the OpenAI API
|
|
52
|
-
* @default 'https://api.openai.com/v1'
|
|
53
|
-
*/
|
|
54
|
-
baseURL?: string;
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* OpenAI API key to use for generating content
|
|
58
|
-
* If not provided, will use OPENAI_API_KEY environment variable
|
|
59
|
-
*/
|
|
60
|
-
apiKey?: Secret;
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Model configuration
|
|
64
|
-
*/
|
|
65
|
-
model?: ModelConfig;
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Whether to freeze the generated object
|
|
69
|
-
* @default false
|
|
70
|
-
*/
|
|
71
|
-
freeze?: boolean;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* A resource that uses AI to generate structured content based on a schema
|
|
76
|
-
*/
|
|
77
|
-
export interface Data<T> extends Resource<"ai::Object"> {
|
|
78
|
-
type: JsonSchema;
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* The generated content, typed according to the provided schema
|
|
82
|
-
*/
|
|
83
|
-
object: T;
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* Updated message history with the AI's response appended
|
|
87
|
-
*/
|
|
88
|
-
messages: CoreMessage[];
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* Time at which the content was generated
|
|
92
|
-
*/
|
|
93
|
-
createdAt: number;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
/**
|
|
97
|
-
* Resource for generating structured content using the Vercel AI SDK.
|
|
98
|
-
* Supports powerful context handling through the alchemy template literal tag.
|
|
99
|
-
*
|
|
100
|
-
* @example
|
|
101
|
-
* // Generate a product description with specific fields
|
|
102
|
-
* const productSchema = type({
|
|
103
|
-
* name: "string",
|
|
104
|
-
* description: "string",
|
|
105
|
-
* features: "string[]",
|
|
106
|
-
* price: "number"
|
|
107
|
-
* });
|
|
108
|
-
*
|
|
109
|
-
* const product = await Data("new-product", {
|
|
110
|
-
* schema: productSchema,
|
|
111
|
-
* prompt: "Generate a product description for a new smartphone",
|
|
112
|
-
* system: "You are a product copywriter specializing in tech products",
|
|
113
|
-
* model: {
|
|
114
|
-
* id: "gpt-4o",
|
|
115
|
-
* provider: "openai",
|
|
116
|
-
* options: {
|
|
117
|
-
* temperature: 0.7
|
|
118
|
-
* }
|
|
119
|
-
* }
|
|
120
|
-
* });
|
|
121
|
-
*
|
|
122
|
-
* console.log(product.object); // Typed as per schema
|
|
123
|
-
*
|
|
124
|
-
* @example
|
|
125
|
-
* // Generate code documentation with context
|
|
126
|
-
* const docSchema = type({
|
|
127
|
-
* summary: "string",
|
|
128
|
-
* parameters: {
|
|
129
|
-
* name: "string",
|
|
130
|
-
* type: "string",
|
|
131
|
-
* description: "string"
|
|
132
|
-
* }[],
|
|
133
|
-
* returns: "string"
|
|
134
|
-
* });
|
|
135
|
-
*
|
|
136
|
-
* const docs = await Data("function-docs", {
|
|
137
|
-
* schema: docSchema,
|
|
138
|
-
* prompt: await alchemy`
|
|
139
|
-
* Generate documentation for this function:
|
|
140
|
-
* ${alchemy.file("src/utils/format.ts")}
|
|
141
|
-
* `,
|
|
142
|
-
* system: "You are a technical documentation writer",
|
|
143
|
-
* temperature: 0.2
|
|
144
|
-
* });
|
|
145
|
-
*
|
|
146
|
-
* @example
|
|
147
|
-
* // Using message history for iterative generation
|
|
148
|
-
* const feedbackSchema = type({
|
|
149
|
-
* rating: "number",
|
|
150
|
-
* positives: "string[]",
|
|
151
|
-
* improvements: "string[]",
|
|
152
|
-
* summary: "string"
|
|
153
|
-
* });
|
|
154
|
-
*
|
|
155
|
-
* const feedback = await Data("product-feedback", {
|
|
156
|
-
* schema: feedbackSchema,
|
|
157
|
-
* messages: [
|
|
158
|
-
* { role: "user", content: "I'd like feedback on my product design" },
|
|
159
|
-
* { role: "assistant", content: "I'd be happy to provide feedback. What's your product?" },
|
|
160
|
-
* { role: "user", content: "It's a new smart home device that..." }
|
|
161
|
-
* ],
|
|
162
|
-
* system: "You are a product design expert providing structured feedback",
|
|
163
|
-
* temperature: 0.3
|
|
164
|
-
* });
|
|
165
|
-
*/
|
|
166
|
-
export const Data = Resource("ai::Object", async function <
|
|
167
|
-
const T extends Type<any, any>,
|
|
168
|
-
>(this: Context<Data<any>>, _id: string, props: DataProps<T>): Promise<
|
|
169
|
-
Data<type.infer<T>>
|
|
170
|
-
> {
|
|
171
|
-
if (this.phase === "delete") {
|
|
172
|
-
return this.destroy();
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
// Validate that either prompt or messages is provided
|
|
176
|
-
if (!props.prompt && !props.messages) {
|
|
177
|
-
throw new Error("Either prompt or messages must be provided");
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
if (this.phase === "update" && props.freeze) {
|
|
181
|
-
return this(this.output);
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
// Create messages array if only prompt is provided
|
|
185
|
-
const messages = props.messages || [{ role: "user", content: props.prompt! }];
|
|
186
|
-
|
|
187
|
-
// Generate structured output using generateObject
|
|
188
|
-
const { object } = await generateObject({
|
|
189
|
-
model: createModel(props),
|
|
190
|
-
// Convert ArkType schema to Zod schema for generateObject
|
|
191
|
-
// This is needed because generateObject expects a Zod schema
|
|
192
|
-
schema: ark.schema<type.infer<T>>(props.schema),
|
|
193
|
-
providerOptions: props.model?.options,
|
|
194
|
-
system:
|
|
195
|
-
props.system ||
|
|
196
|
-
"You are an AI assistant tasked with generating structured content.",
|
|
197
|
-
messages,
|
|
198
|
-
...(props.temperature === undefined
|
|
199
|
-
? {}
|
|
200
|
-
: // some models error if you provide it (rather than ignoring it)
|
|
201
|
-
{ temperature: props.temperature }),
|
|
202
|
-
});
|
|
203
|
-
|
|
204
|
-
// Create updated message history with the structured response
|
|
205
|
-
const responseText = JSON.stringify(object);
|
|
206
|
-
const updatedMessages = [
|
|
207
|
-
...messages,
|
|
208
|
-
{
|
|
209
|
-
role: "assistant" as const,
|
|
210
|
-
content: responseText,
|
|
211
|
-
},
|
|
212
|
-
];
|
|
213
|
-
|
|
214
|
-
// Return the resource with typed content and updated messages
|
|
215
|
-
return this({
|
|
216
|
-
type: props.schema,
|
|
217
|
-
object: object,
|
|
218
|
-
messages: updatedMessages,
|
|
219
|
-
createdAt: Date.now(),
|
|
220
|
-
});
|
|
221
|
-
});
|