diff --git a/.dockerignore b/.dockerignore index d3f8720a9e..1830379f25 100644 --- a/.dockerignore +++ b/.dockerignore @@ -40,6 +40,7 @@ docs examples out references +test-projects CHANGESETS.md CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 12e85c33b7..7f6195d972 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -17,7 +17,6 @@ branch are tagged into a release periodically. - [Node.js](https://nodejs.org/en) version 20.11.1 - [pnpm package manager](https://pnpm.io/installation) version 8.15.5 - [Docker](https://www.docker.com/get-started/) -- [protobuf](https://github.com/protocolbuffers/protobuf) ### Setup @@ -62,15 +61,13 @@ branch are tagged into a release periodically. pnpm run docker ``` - This will also start and run a local instance of [pgAdmin](https://www.pgadmin.org/) on [localhost:5480](http://localhost:5480), preconfigured with email `admin@example.com` and pwd `admin`. Then use `postgres` as the password to the Trigger.dev server. - 9. Migrate the database ``` pnpm run db:migrate ``` -10. Build the server app +10. Build everything ``` - pnpm run build --filter webapp + pnpm run build --filter webapp && pnpm run build --filter trigger.dev && pnpm run build --filter @trigger.dev/sdk ``` 11. Run the app. See the section below. @@ -88,7 +85,7 @@ branch are tagged into a release periodically. ## Manual testing using v3-catalog -We use the `/references/v3-catalog` subdirectory as a staging ground for testing changes to the SDK (`@trigger.dev/sdk` at `/packages/trigger-sdk`), the Core package (`@trigger.dev/core` at `packages/core`), the CLI (`trigger.dev` at `/packages/cli-v3`) and the platform (The remix app at `/apps/webapp`). The instructions below will get you started on using the `v3-catalog` for local development of Trigger.dev (v3). +We use the `/test-projects/v3-catalog` subdirectory as a staging ground for testing changes to the SDK (`@trigger.dev/sdk` at `/packages/trigger-sdk`), the Core package (`@trigger.dev/core` at `packages/core`), the CLI (`trigger.dev` at `/packages/cli-v3`) and the platform (The remix app at `/apps/webapp`). The instructions below will get you started on using the `v3-catalog` for local development of Trigger.dev (v3). ### First-time setup @@ -109,10 +106,10 @@ pnpm run build --filter trigger.dev pnpm i ``` -5. Change into the `/references/v3-catalog` directory and authorize the CLI to the local server: +5. Change into the `/test-projects/v3-catalog` directory and authorize the CLI to the local server: ```sh -cd references/v3-catalog +cd test-projects/v3-catalog cp .env.example .env pnpm exec trigger login -a http://localhost:3030 ``` @@ -122,7 +119,7 @@ This will open a new browser window and authorize the CLI against your local use You can optionally pass a `--profile` flag to the `login` command, which will allow you to use the CLI with separate accounts/servers. We suggest using a profile called `local` for your local development: ```sh -cd references/v3-catalog +cd test-projects/v3-catalog pnpm exec trigger login -a http://localhost:3030 --profile local # later when you run the dev or deploy command: pnpm exec trigger dev --profile local @@ -141,7 +138,7 @@ The following steps should be followed any time you start working on a new featu pnpm run dev --filter trigger.dev --filter "@trigger.dev/*" ``` -3. Open another terminal window, and change into the `/references/v3-catalog` directory. +3. Open another terminal window, and change into the `/test-projects/v3-catalog` directory. 4. You'll need to run the following commands to setup prisma and migrate the database: @@ -153,14 +150,14 @@ pnpm run generate:prisma 5. Run the `dev` command, which will register all the local tasks with the platform and allow you to start testing task execution: ```sh -# in /references/v3-catalog +# in /test-projects/v3-catalog pnpm exec trigger dev ``` If you want additional debug logging, you can use the `--log-level debug` flag: ```sh -# in /references/v3-catalog +# in /test-projects/v3-catalog pnpm exec trigger dev --log-level debug ``` @@ -168,7 +165,7 @@ pnpm exec trigger dev --log-level debug 7. Navigate to the `v3-catalog` project in your local dashboard at localhost:3030 and you should see the list of tasks. -8. Go to the "Test" page in the sidebar and select a task. Then enter a payload and click "Run test". You can tell what the payloads should be by looking at the relevant task file inside the `/references/v3-catalog/src/trigger` folder. Many of them accept an empty payload. +8. Go to the "Test" page in the sidebar and select a task. Then enter a payload and click "Run test". You can tell what the payloads should be by looking at the relevant task file inside the `/test-projects/v3-catalog/src/trigger` folder. Many of them accept an empty payload. 9. Feel free to add additional files in `v3-catalog/src/trigger` to test out specific aspects of the system, or add in edge cases. @@ -180,14 +177,14 @@ To run the end-to-end tests, follow the steps below: ```sh cp ./.env.example ./.env -cp ./references/nextjs-test/.env.example ./references/nextjs-test/.env.local +cp ./test-projects/nextjs-test/.env.example ./test-projects/nextjs-test/.env.local ``` 2. Set up dependencies ```sh # Build packages -pnpm run build --filter @references/nextjs-test^... +pnpm run build --filter @test-projects/nextjs-test^... pnpm --filter @trigger.dev/database generate # Move trigger-cli bin to correct place @@ -251,9 +248,9 @@ This executes the migrations against your database and applies changes to the da ## Add sample jobs -The [references/job-catalog](./references/job-catalog/) project defines simple jobs you can get started with. +The [test-projects/job-catalog](./test-projects/job-catalog/) project defines simple jobs you can get started with. -1. `cd` into `references/job-catalog` +1. `cd` into `test-projects/job-catalog` 2. Create a `.env` file with the following content, replacing `` with an actual key: @@ -277,7 +274,7 @@ This will open up a local server using `express` on port 8080. Then in a new ter pnpm run dev:trigger ``` -See the [Job Catalog](./references/job-catalog/README.md) file for more. +See the [Job Catalog](./test-projects/job-catalog/README.md) file for more. 4. Navigate to your trigger.dev instance ([http://localhost:3030](http://localhost:3030/)), to see the jobs. You can use the test feature to trigger them. diff --git a/ai/references/repo.md b/ai/references/repo.md index 0e9b49b460..2b32652f3c 100644 --- a/ai/references/repo.md +++ b/ai/references/repo.md @@ -27,7 +27,7 @@ This is a pnpm 8.15.5 monorepo that uses turborepo @turbo.json. The following wo ## References -- /references/\* are test workspaces that we use to write and test the system. Not quite e2e tests or automated, but just a useful place to help develop new features +- /test-projects/\* are test workspaces that we use to write and test the system. Not quite e2e tests or automated, but just a useful place to help develop new features ## Other diff --git a/apps/supervisor/README.md b/apps/supervisor/README.md index 2d225ca186..86b447269d 100644 --- a/apps/supervisor/README.md +++ b/apps/supervisor/README.md @@ -36,7 +36,7 @@ TRIGGER_WORKER_TOKEN=tr_wgt_... pnpm dev ``` -4. Build CLI, then deploy a reference project +4. Build CLI, then deploy a test project ```sh pnpm exec trigger deploy --self-hosted diff --git a/apps/webapp/app/routes/api.v1.projects.$projectRef.$env.ts b/apps/webapp/app/routes/api.v1.projects.$projectRef.$env.ts index bfcf174df9..ad92e0a995 100644 --- a/apps/webapp/app/routes/api.v1.projects.$projectRef.$env.ts +++ b/apps/webapp/app/routes/api.v1.projects.$projectRef.$env.ts @@ -88,7 +88,7 @@ export async function loader({ request, params }: LoaderFunctionArgs) { const result: GetProjectEnvResponse = { apiKey: runtimeEnv.apiKey, name: project.name, - apiUrl: processEnv.APP_ORIGIN, + apiUrl: processEnv.API_ORIGIN ?? processEnv.APP_ORIGIN, projectId: project.id, }; diff --git a/packages/cli-v3/DEVELOPMENT.md b/packages/cli-v3/DEVELOPMENT.md index 254da81379..01d760373e 100644 --- a/packages/cli-v3/DEVELOPMENT.md +++ b/packages/cli-v3/DEVELOPMENT.md @@ -7,7 +7,7 @@ cd packages/cli-v3 pnpm run dev ``` -2. Test the local CLI using the job-catalogs located in the `/references` directory +2. Test the local CLI using the job-catalogs located in the `/test-projects` directory ```sh pnpm i diff --git a/packages/cli-v3/src/deploy/buildImage.ts b/packages/cli-v3/src/deploy/buildImage.ts index 73e377796a..6721317e40 100644 --- a/packages/cli-v3/src/deploy/buildImage.ts +++ b/packages/cli-v3/src/deploy/buildImage.ts @@ -327,7 +327,7 @@ async function selfHostedBuildImage( "--build-arg", `TRIGGER_PROJECT_REF=${options.projectRef}`, "--build-arg", - `TRIGGER_API_URL=${options.apiUrl}`, + `TRIGGER_API_URL=${normalizeApiUrlForBuild(options.apiUrl)}`, "--build-arg", `TRIGGER_SECRET_KEY=${options.apiKey}`, ...(buildArgs || []), @@ -723,3 +723,13 @@ ENTRYPOINT [ "dumb-init", "node", "${options.entrypoint}" ] CMD [] `; } + +// If apiUrl is something like http://localhost:3030, AND we are on macOS, we need to convert it to http://host.docker.internal:3030 +// this way the indexing will work because the docker image can reach the local server +function normalizeApiUrlForBuild(apiUrl: string) { + if (process.platform === "darwin") { + return apiUrl.replace("localhost", "host.docker.internal"); + } + + return apiUrl; +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 56c69c4e99..4ee4a54fb4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1804,20 +1804,7 @@ importers: specifier: 3.23.8 version: 3.23.8 - references/bun-catalog: - dependencies: - '@trigger.dev/sdk': - specifier: workspace:* - version: link:../../packages/trigger-sdk - devDependencies: - '@types/bun': - specifier: ^1.1.6 - version: 1.1.6 - trigger.dev: - specifier: workspace:* - version: link:../../packages/cli-v3 - - references/d3-chat: + test-projects/d3-chat: dependencies: '@ai-sdk/anthropic': specifier: ^1.2.4 @@ -1923,95 +1910,7 @@ importers: specifier: ^5 version: 5.5.4 - references/d3-openai-agents: - dependencies: - '@ai-sdk/openai': - specifier: 1.3.3 - version: 1.3.3(zod@3.23.8) - '@slack/web-api': - specifier: ^6.8.1 - version: 6.8.1 - '@trigger.dev/python': - specifier: workspace:* - version: link:../../packages/python - '@trigger.dev/react-hooks': - specifier: workspace:* - version: link:../../packages/react-hooks - '@trigger.dev/sdk': - specifier: workspace:* - version: link:../../packages/trigger-sdk - '@vercel/postgres': - specifier: ^0.10.0 - version: 0.10.0 - ai: - specifier: 4.2.5 - version: 4.2.5(react@19.0.0)(zod@3.23.8) - class-variance-authority: - specifier: ^0.7.1 - version: 0.7.1 - clsx: - specifier: ^2.1.1 - version: 2.1.1 - lucide-react: - specifier: ^0.484.0 - version: 0.484.0(react@19.0.0) - nanoid: - specifier: ^5.1.5 - version: 5.1.5 - next: - specifier: 15.2.4 - version: 15.2.4(@opentelemetry/api@1.9.0)(@playwright/test@1.37.0)(react-dom@19.0.0)(react@19.0.0) - react: - specifier: ^19.0.0 - version: 19.0.0 - react-dom: - specifier: ^19.0.0 - version: 19.0.0(react@19.0.0) - tailwind-merge: - specifier: ^3.0.2 - version: 3.0.2 - tw-animate-css: - specifier: ^1.2.4 - version: 1.2.4 - zod: - specifier: 3.23.8 - version: 3.23.8 - zod-to-json-schema: - specifier: ^3.24.5 - version: 3.24.5(zod@3.23.8) - devDependencies: - '@tailwindcss/postcss': - specifier: ^4 - version: 4.0.17 - '@trigger.dev/build': - specifier: workspace:* - version: link:../../packages/build - '@types/node': - specifier: ^20 - version: 20.14.14 - '@types/react': - specifier: ^19 - version: 19.0.12 - '@types/react-dom': - specifier: ^19 - version: 19.0.4(@types/react@19.0.12) - dotenv: - specifier: 16.4.7 - version: 16.4.7 - tailwindcss: - specifier: ^4.0.17 - version: 4.0.17 - trigger.dev: - specifier: workspace:* - version: link:../../packages/cli-v3 - tsx: - specifier: 4.19.3 - version: 4.19.3 - typescript: - specifier: ^5 - version: 5.5.4 - - references/hello-world: + test-projects/hello-world: dependencies: '@trigger.dev/sdk': specifier: workspace:* @@ -2030,23 +1929,23 @@ importers: specifier: workspace:* version: link:../../packages/cli-v3 - references/init-shell: + test-projects/init-shell: devDependencies: trigger.dev: specifier: workspace:* version: link:../../packages/cli-v3 - references/init-shell-js: + test-projects/init-shell-js: devDependencies: trigger.dev: specifier: workspace:* version: link:../../packages/cli-v3 - references/nextjs-realtime: + test-projects/nextjs-realtime: dependencies: '@ai-sdk/openai': specifier: ^1.0.1 - version: 1.0.1(zod@3.23.8) + version: 1.3.3(zod@3.23.8) '@fal-ai/serverless-client': specifier: ^0.15.0 version: 0.15.0 @@ -2058,22 +1957,22 @@ importers: version: 0.57.0(@opentelemetry/api@1.9.0) '@radix-ui/react-dialog': specifier: ^1.0.3 - version: 1.0.4(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.3.1) + version: 1.0.4(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-icons': specifier: ^1.3.0 version: 1.3.0(react@18.3.1) '@radix-ui/react-progress': specifier: ^1.1.1 - version: 1.1.1(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.3.1) + version: 1.1.1(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-scroll-area': specifier: ^1.2.0 - version: 1.2.0(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.3.1) + version: 1.2.0(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-slot': specifier: ^1.1.0 - version: 1.1.0(@types/react@18.3.1)(react@18.3.1) + version: 1.1.2(@types/react@18.3.1)(react@18.3.1) '@radix-ui/react-tabs': specifier: ^1.0.3 - version: 1.0.3(react-dom@18.2.0)(react@18.3.1) + version: 1.0.3(react-dom@18.3.1)(react@18.3.1) '@trigger.dev/react-hooks': specifier: workspace:* version: link:../../packages/react-hooks @@ -2085,10 +1984,10 @@ importers: version: 7.0.3(next@14.2.21)(react@18.3.1)(uploadthing@7.1.0) ai: specifier: ^4.0.0 - version: 4.0.0(react@18.3.1)(zod@3.23.8) + version: 4.2.5(react@18.3.1)(zod@3.23.8) class-variance-authority: specifier: ^0.7.0 - version: 0.7.0 + version: 0.7.1 clsx: specifier: ^2.1.1 version: 2.1.1 @@ -2097,22 +1996,22 @@ importers: version: 4.1.0 langsmith: specifier: ^0.2.15 - version: 0.2.15(openai@4.68.4) + version: 0.2.15(openai@4.97.0) lucide-react: specifier: ^0.451.0 version: 0.451.0(react@18.3.1) next: specifier: 14.2.21 - version: 14.2.21(@opentelemetry/api@1.9.0)(@playwright/test@1.37.0)(react-dom@18.2.0)(react@18.3.1) + version: 14.2.21(@opentelemetry/api@1.9.0)(@playwright/test@1.37.0)(react-dom@18.3.1)(react@18.3.1) openai: specifier: ^4.68.4 - version: 4.68.4(zod@3.23.8) + version: 4.97.0(zod@3.23.8) react: specifier: ^18 version: 18.3.1 react-dom: specifier: ^18 - version: 18.2.0(react@18.3.1) + version: 18.3.1(react@18.3.1) tailwind-merge: specifier: ^2.5.3 version: 2.5.3 @@ -2140,7 +2039,7 @@ importers: version: 18.2.7 postcss: specifier: ^8 - version: 8.4.44 + version: 8.5.3 tailwindcss: specifier: ^3.4.1 version: 3.4.1(ts-node@10.9.1) @@ -2148,7 +2047,7 @@ importers: specifier: workspace:* version: link:../../packages/cli-v3 - references/python-catalog: + test-projects/python-catalog: dependencies: '@trigger.dev/python': specifier: workspace:* @@ -2170,26 +2069,7 @@ importers: specifier: ^5.5.4 version: 5.5.4 - references/test-tasks: - dependencies: - '@trigger.dev/sdk': - specifier: workspace:* - version: link:../../packages/trigger-sdk - zod: - specifier: 3.23.8 - version: 3.23.8 - devDependencies: - '@trigger.dev/build': - specifier: workspace:* - version: link:../../packages/build - trigger.dev: - specifier: workspace:* - version: link:../../packages/cli-v3 - typescript: - specifier: ^5.5.4 - version: 5.5.4 - - references/v3-catalog: + test-projects/v3-catalog: dependencies: '@effect/schema': specifier: ^0.75.5 @@ -2235,13 +2115,13 @@ importers: version: 0.14.0(@sinclair/typebox@0.33.17) ai: specifier: ^3.3.24 - version: 3.3.24(openai@4.56.0)(react@19.0.0-rc.0)(svelte@5.28.2)(vue@3.5.13)(zod@3.23.8) + version: 3.4.33(openai@4.97.0)(react@19.0.0-rc.0)(svelte@5.28.2)(vue@3.5.13)(zod@3.23.8) arktype: specifier: 2.0.0-rc.17 version: 2.0.0-rc.17 dotenv: specifier: ^16.4.5 - version: 16.4.5 + version: 16.4.7 email-reply-parser: specifier: ^1.8.0 version: 1.8.0 @@ -2262,10 +2142,10 @@ importers: version: 2.3.5(typescript@5.5.4) openai: specifier: ^4.47.0 - version: 4.56.0(zod@3.23.8) + version: 4.97.0(zod@3.23.8) pg: specifier: ^8.11.5 - version: 8.11.5 + version: 8.15.6 playwright: specifier: ^1.50.1 version: 1.50.1 @@ -2295,7 +2175,7 @@ importers: version: 2.0.2 typeorm: specifier: ^0.3.20 - version: 0.3.20(pg@8.11.5)(ts-node@10.9.2) + version: 0.3.20(pg@8.15.6)(ts-node@10.9.2) valibot: specifier: ^0.42.1 version: 0.42.1(typescript@5.5.4) @@ -2314,7 +2194,7 @@ importers: devDependencies: '@opentelemetry/core': specifier: ^1.22.0 - version: 1.25.1(@opentelemetry/api@1.4.1) + version: 1.30.1(@opentelemetry/api@1.4.1) '@opentelemetry/exporter-logs-otlp-http': specifier: ^0.49.1 version: 0.49.1(@opentelemetry/api@1.4.1) @@ -2353,7 +2233,7 @@ importers: version: 1.25.1(@opentelemetry/api@1.4.1) '@opentelemetry/semantic-conventions': specifier: ^1.22.0 - version: 1.25.1 + version: 1.28.0 '@trigger.dev/build': specifier: workspace:* version: link:../../packages/build @@ -2405,17 +2285,6 @@ packages: zod: 3.23.8 dev: false - /@ai-sdk/openai@1.0.1(zod@3.23.8): - resolution: {integrity: sha512-snZge8457afWlosVNUn+BG60MrxAPOOm3zmIMxJZih8tneNSiRbTVCbSzAtq/9vsnOHDe5RR83PRl85juOYEnA==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - dependencies: - '@ai-sdk/provider': 1.0.0 - '@ai-sdk/provider-utils': 2.0.0(zod@3.23.8) - zod: 3.23.8 - dev: false - /@ai-sdk/openai@1.3.3(zod@3.23.8): resolution: {integrity: sha512-CH57tonLB4DwkwqwnMmTCoIOR7cNW3bP5ciyloI7rBGJS/Bolemsoo+vn5YnwkyT9O1diWJyvYeTh7A4UfiYOw==} engines: {node: '>=18'} @@ -2427,22 +2296,6 @@ packages: zod: 3.23.8 dev: false - /@ai-sdk/provider-utils@1.0.17(zod@3.23.8): - resolution: {integrity: sha512-2VyeTH5DQ6AxqvwdyytKIeiZyYTyJffpufWjE67zM2sXMIHgYl7fivo8m5wVl6Cbf1dFPSGKq//C9s+lz+NHrQ==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - peerDependenciesMeta: - zod: - optional: true - dependencies: - '@ai-sdk/provider': 0.0.22 - eventsource-parser: 1.1.2 - nanoid: 3.3.6 - secure-json-parse: 2.7.0 - zod: 3.23.8 - dev: false - /@ai-sdk/provider-utils@1.0.22(zod@3.23.8): resolution: {integrity: sha512-YHK2rpj++wnLVc9vPGzGFP3Pjeld2MwhKinetA0zKXOoHAT/Jit5O8kZsxcSlJPu9wvcGT1UGZEjZrtO7PfFOQ==} engines: {node: '>=18'} @@ -2457,23 +2310,6 @@ packages: nanoid: 3.3.8 secure-json-parse: 2.7.0 zod: 3.23.8 - dev: true - - /@ai-sdk/provider-utils@2.0.0(zod@3.23.8): - resolution: {integrity: sha512-uITgVJByhtzuQU2ZW+2CidWRmQqTUTp6KADevy+4aRnmILZxY2LCt+UZ/ZtjJqq0MffwkuQPPY21ExmFAQ6kKA==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - peerDependenciesMeta: - zod: - optional: true - dependencies: - '@ai-sdk/provider': 1.0.0 - eventsource-parser: 3.0.0 - nanoid: 5.1.5 - secure-json-parse: 2.7.0 - zod: 3.23.8 - dev: false /@ai-sdk/provider-utils@2.2.1(zod@3.23.8): resolution: {integrity: sha512-BuExLp+NcpwsAVj1F4bgJuQkSqO/+roV9wM7RdIO+NVrcT8RBUTdXzf5arHt5T58VpK7bZyB2V9qigjaPHE+Dg==} @@ -2498,26 +2334,11 @@ packages: zod: 3.23.8 dev: false - /@ai-sdk/provider@0.0.22: - resolution: {integrity: sha512-smZ1/2jL/JSKnbhC6ama/PxI2D/psj+YAe0c0qpd5ComQCNFltg72VFf0rpUSFMmFuj1pCCNoBOCrvyl8HTZHQ==} - engines: {node: '>=18'} - dependencies: - json-schema: 0.4.0 - dev: false - /@ai-sdk/provider@0.0.26: resolution: {integrity: sha512-dQkfBDs2lTYpKM8389oopPdQgIU007GQyCbuPPrV+K6MtSII3HBfE0stUIMXUb44L+LK1t6GXPP7wjSzjO6uKg==} engines: {node: '>=18'} dependencies: json-schema: 0.4.0 - dev: true - - /@ai-sdk/provider@1.0.0: - resolution: {integrity: sha512-Sj29AzooJ7SYvhPd+AAWt/E7j63E9+AzRnoMHUaJPRYzOd/WDrVNxxv85prF9gDcQ7XPVlSk9j6oAZV9/DXYpA==} - engines: {node: '>=18'} - dependencies: - json-schema: 0.4.0 - dev: false /@ai-sdk/provider@1.1.0: resolution: {integrity: sha512-0M+qjp+clUD0R1E5eWQFhxEvWLNaOtGQRUaBn8CUABnSKredagq92hUS9VjOzGsTm37xLfpaxl97AVtbeOsHew==} @@ -2525,25 +2346,6 @@ packages: dependencies: json-schema: 0.4.0 - /@ai-sdk/react@0.0.53(react@19.0.0-rc.0)(zod@3.23.8): - resolution: {integrity: sha512-sIsmTFoR/QHvUUkltmHwP4bPjwy2vko6j/Nj8ayxLhEHs04Ug+dwXQyfA7MwgimEE3BcDQpWL8ikVj0m3ZILWQ==} - engines: {node: '>=18'} - peerDependencies: - react: ^18 || ^19 - zod: ^3.0.0 - peerDependenciesMeta: - react: - optional: true - zod: - optional: true - dependencies: - '@ai-sdk/provider-utils': 1.0.17(zod@3.23.8) - '@ai-sdk/ui-utils': 0.0.40(zod@3.23.8) - react: 19.0.0-rc.0 - swr: 2.2.5(react@19.0.0-rc.0) - zod: 3.23.8 - dev: false - /@ai-sdk/react@0.0.70(react@18.3.1)(zod@3.23.8): resolution: {integrity: sha512-GnwbtjW4/4z7MleLiW+TOZC2M29eCg1tOUpuEiYFMmFNZK8mkrqM0PFZMo6UsYeUYMWqEOOcPOU9OQVJMJh7IQ==} engines: {node: '>=18'} @@ -2564,8 +2366,8 @@ packages: zod: 3.23.8 dev: true - /@ai-sdk/react@1.0.0(react@18.3.1)(zod@3.23.8): - resolution: {integrity: sha512-BDrZqQA07Btg64JCuhFvBgYV+tt2B8cXINzEqWknGoxqcwgdE8wSLG2gkXoLzyC2Rnj7oj0HHpOhLUxDCmoKZg==} + /@ai-sdk/react@0.0.70(react@19.0.0-rc.0)(zod@3.23.8): + resolution: {integrity: sha512-GnwbtjW4/4z7MleLiW+TOZC2M29eCg1tOUpuEiYFMmFNZK8mkrqM0PFZMo6UsYeUYMWqEOOcPOU9OQVJMJh7IQ==} engines: {node: '>=18'} peerDependencies: react: ^18 || ^19 || ^19.0.0-rc @@ -2576,10 +2378,10 @@ packages: zod: optional: true dependencies: - '@ai-sdk/provider-utils': 2.0.0(zod@3.23.8) - '@ai-sdk/ui-utils': 1.0.0(zod@3.23.8) - react: 18.3.1 - swr: 2.2.5(react@18.3.1) + '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8) + '@ai-sdk/ui-utils': 0.0.50(zod@3.23.8) + react: 19.0.0-rc.0 + swr: 2.2.5(react@19.0.0-rc.0) throttleit: 2.1.0 zod: 3.23.8 dev: false @@ -2600,7 +2402,6 @@ packages: swr: 2.2.5(react@18.3.1) throttleit: 2.1.0 zod: 3.23.8 - dev: true /@ai-sdk/react@1.2.2(react@19.0.0)(zod@3.23.8): resolution: {integrity: sha512-rxyNTFjUd3IilVOJFuUJV5ytZBYAIyRi50kFS2gNmSEiG4NHMBBm31ddrxI/i86VpY8gzZVp1/igtljnWBihUA==} @@ -2620,21 +2421,6 @@ packages: zod: 3.23.8 dev: false - /@ai-sdk/solid@0.0.43(zod@3.23.8): - resolution: {integrity: sha512-7PlPLaeMAu97oOY2gjywvKZMYHF+GDfUxYNcuJ4AZ3/MRBatzs/U2r4ClT1iH8uMOcMg02RX6UKzP5SgnUBjVw==} - engines: {node: '>=18'} - peerDependencies: - solid-js: ^1.7.7 - peerDependenciesMeta: - solid-js: - optional: true - dependencies: - '@ai-sdk/provider-utils': 1.0.17(zod@3.23.8) - '@ai-sdk/ui-utils': 0.0.40(zod@3.23.8) - transitivePeerDependencies: - - zod - dev: false - /@ai-sdk/solid@0.0.54(zod@3.23.8): resolution: {integrity: sha512-96KWTVK+opdFeRubqrgaJXoNiDP89gNxFRWUp0PJOotZW816AbhUf4EnDjBjXTLjXL1n0h8tGSE9sZsRkj9wQQ==} engines: {node: '>=18'} @@ -2648,24 +2434,6 @@ packages: '@ai-sdk/ui-utils': 0.0.50(zod@3.23.8) transitivePeerDependencies: - zod - dev: true - - /@ai-sdk/svelte@0.0.45(svelte@5.28.2)(zod@3.23.8): - resolution: {integrity: sha512-w5Sdl0ArFIM3Fp8BbH4TUvlrS84WP/jN/wC1+fghMOXd7ceVO3Yhs9r71wTqndhgkLC7LAEX9Ll7ZEPfW9WBDA==} - engines: {node: '>=18'} - peerDependencies: - svelte: ^3.0.0 || ^4.0.0 - peerDependenciesMeta: - svelte: - optional: true - dependencies: - '@ai-sdk/provider-utils': 1.0.17(zod@3.23.8) - '@ai-sdk/ui-utils': 0.0.40(zod@3.23.8) - sswr: 2.1.0(svelte@5.28.2) - svelte: 5.28.2 - transitivePeerDependencies: - - zod - dev: false /@ai-sdk/svelte@0.0.57(svelte@5.28.2)(zod@3.23.8): resolution: {integrity: sha512-SyF9ItIR9ALP9yDNAD+2/5Vl1IT6kchgyDH8xkmhysfJI6WrvJbtO1wdQ0nylvPLcsPoYu+cAlz1krU4lFHcYw==} @@ -2682,24 +2450,6 @@ packages: svelte: 5.28.2 transitivePeerDependencies: - zod - dev: true - - /@ai-sdk/ui-utils@0.0.40(zod@3.23.8): - resolution: {integrity: sha512-f0eonPUBO13pIO8jA9IGux7IKMeqpvWK22GBr3tOoSRnO5Wg5GEpXZU1V0Po+unpeZHyEPahrWbj5JfXcyWCqw==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - peerDependenciesMeta: - zod: - optional: true - dependencies: - '@ai-sdk/provider': 0.0.22 - '@ai-sdk/provider-utils': 1.0.17(zod@3.23.8) - json-schema: 0.4.0 - secure-json-parse: 2.7.0 - zod: 3.23.8 - zod-to-json-schema: 3.23.2(zod@3.23.8) - dev: false /@ai-sdk/ui-utils@0.0.50(zod@3.23.8): resolution: {integrity: sha512-Z5QYJVW+5XpSaJ4jYCCAVG7zIAuKOOdikhgpksneNmKvx61ACFaf98pmOd+xnjahl0pIlc/QIe6O4yVaJ1sEaw==} @@ -2716,22 +2466,6 @@ packages: secure-json-parse: 2.7.0 zod: 3.23.8 zod-to-json-schema: 3.24.5(zod@3.23.8) - dev: true - - /@ai-sdk/ui-utils@1.0.0(zod@3.23.8): - resolution: {integrity: sha512-oXBDIM/0niWeTWyw77RVl505dNxBUDLLple7bTsqo2d3i1UKwGlzBUX8XqZsh7GbY7I6V05nlG0Y8iGlWxv1Aw==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - peerDependenciesMeta: - zod: - optional: true - dependencies: - '@ai-sdk/provider': 1.0.0 - '@ai-sdk/provider-utils': 2.0.0(zod@3.23.8) - zod: 3.23.8 - zod-to-json-schema: 3.24.5(zod@3.23.8) - dev: false /@ai-sdk/ui-utils@1.2.1(zod@3.23.8): resolution: {integrity: sha512-BzvMbYm7LHBlbWuLlcG1jQh4eu14MGpz7L+wrGO1+F4oQ+O0fAjgUSNwPWGlZpKmg4NrcVq/QLmxiVJrx2R4Ew==} @@ -2744,23 +2478,6 @@ packages: zod: 3.23.8 zod-to-json-schema: 3.24.5(zod@3.23.8) - /@ai-sdk/vue@0.0.45(vue@3.5.13)(zod@3.23.8): - resolution: {integrity: sha512-bqeoWZqk88TQmfoPgnFUKkrvhOIcOcSH5LMPgzZ8XwDqz5tHHrMHzpPfHCj7XyYn4ROTFK/2kKdC/ta6Ko0fMw==} - engines: {node: '>=18'} - peerDependencies: - vue: ^3.3.4 - peerDependenciesMeta: - vue: - optional: true - dependencies: - '@ai-sdk/provider-utils': 1.0.17(zod@3.23.8) - '@ai-sdk/ui-utils': 0.0.40(zod@3.23.8) - swrv: 1.0.4(vue@3.5.13) - vue: 3.5.13(typescript@5.5.4) - transitivePeerDependencies: - - zod - dev: false - /@ai-sdk/vue@0.0.59(vue@3.5.13)(zod@3.23.8): resolution: {integrity: sha512-+ofYlnqdc8c4F6tM0IKF0+7NagZRAiqBJpGDJ+6EYhDW8FHLUP/JFBgu32SjxSxC6IKFZxEnl68ZoP/Z38EMlw==} engines: {node: '>=18'} @@ -2776,7 +2493,6 @@ packages: vue: 3.5.13(typescript@5.5.4) transitivePeerDependencies: - zod - dev: true /@alloc/quick-lru@5.2.0: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} @@ -3811,6 +3527,7 @@ packages: dependencies: '@babel/highlight': 7.22.13 chalk: 2.4.2 + dev: true /@babel/code-frame@7.24.7: resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} @@ -3826,21 +3543,15 @@ packages: '@babel/helper-validator-identifier': 7.25.9 js-tokens: 4.0.0 picocolors: 1.1.1 - dev: true /@babel/compat-data@7.22.9: resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==} engines: {node: '>=6.9.0'} - - /@babel/compat-data@7.25.4: - resolution: {integrity: sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==} - engines: {node: '>=6.9.0'} - dev: false + dev: true /@babel/compat-data@7.26.8: resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} engines: {node: '>=6.9.0'} - dev: true /@babel/core@7.22.17: resolution: {integrity: sha512-2EENLmhpwplDux5PSsZnSbnSkB3tZ6QTksgO25xwEL7pIDcNOMhF5v/s6RzwjMZzZzw9Ofc30gHv5ChCC8pifQ==} @@ -3863,20 +3574,21 @@ packages: semver: 6.3.1 transitivePeerDependencies: - supports-color + dev: true /@babel/core@7.24.5: resolution: {integrity: sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/helper-compilation-targets': 7.25.2 - '@babel/helper-module-transforms': 7.25.2(@babel/core@7.24.5) - '@babel/helpers': 7.25.6 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.27.0 + '@babel/helper-compilation-targets': 7.27.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.24.5) + '@babel/helpers': 7.27.0 '@babel/parser': 7.27.0 - '@babel/template': 7.24.7 - '@babel/traverse': 7.24.7 + '@babel/template': 7.27.0 + '@babel/traverse': 7.27.0 '@babel/types': 7.27.0 convert-source-map: 2.0.0 debug: 4.4.0(supports-color@10.0.0) @@ -3908,7 +3620,6 @@ packages: semver: 6.3.1 transitivePeerDependencies: - supports-color - dev: true /@babel/eslint-parser@7.21.8(@babel/core@7.22.17)(eslint@8.31.0): resolution: {integrity: sha512-HLhI+2q+BP3sf78mFUZNCGc10KEmoUqtUT1OCdMZsN+qr4qFeLUod62/zAnF3jNQstwyasDkZnVXwfK2Bml7MQ==} @@ -3932,6 +3643,7 @@ packages: '@jridgewell/gen-mapping': 0.3.2 '@jridgewell/trace-mapping': 0.3.19 jsesc: 2.5.2 + dev: true /@babel/generator@7.24.7: resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==} @@ -3941,16 +3653,7 @@ packages: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 - - /@babel/generator@7.25.6: - resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.27.0 - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 - dev: false + dev: true /@babel/generator@7.27.0: resolution: {integrity: sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==} @@ -3961,7 +3664,6 @@ packages: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.1.0 - dev: true /@babel/helper-annotate-as-pure@7.22.5: resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} @@ -3987,17 +3689,7 @@ packages: browserslist: 4.24.4 lru-cache: 5.1.1 semver: 6.3.1 - - /@babel/helper-compilation-targets@7.25.2: - resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/compat-data': 7.25.4 - '@babel/helper-validator-option': 7.24.8 - browserslist: 4.24.4 - lru-cache: 5.1.1 - semver: 6.3.1 - dev: false + dev: true /@babel/helper-compilation-targets@7.27.0: resolution: {integrity: sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==} @@ -4008,7 +3700,6 @@ packages: browserslist: 4.24.4 lru-cache: 5.1.1 semver: 6.3.1 - dev: true /@babel/helper-create-class-features-plugin@7.21.8(@babel/core@7.22.17): resolution: {integrity: sha512-+THiN8MqiH2AczyuZrnrKL6cAxFRRQDKW9h1YkBvbgKmAm6mwiacig1qT73DHIWMGo40GRnsEfN3LA+E6NtmSw==} @@ -4093,6 +3784,7 @@ packages: /@babel/helper-environment-visitor@7.22.20: resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} engines: {node: '>=6.9.0'} + dev: true /@babel/helper-environment-visitor@7.22.5: resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} @@ -4104,6 +3796,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.27.0 + dev: true /@babel/helper-explode-assignable-expression@7.18.6: resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==} @@ -4124,7 +3817,7 @@ packages: resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.24.7 + '@babel/template': 7.27.0 '@babel/types': 7.27.0 dev: true @@ -4134,6 +3827,7 @@ packages: dependencies: '@babel/template': 7.24.7 '@babel/types': 7.27.0 + dev: true /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} @@ -4147,6 +3841,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.27.0 + dev: true /@babel/helper-member-expression-to-functions@7.21.5: resolution: {integrity: sha512-nIcGfgwpH2u4n9GG1HpStW5Ogx7x7ekiFHbjjFRKXbn5zUvqO9ZgotCO4x1aNbKn/x/xOUaXEhyNHCwtFCpxWg==} @@ -4167,16 +3862,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.27.0 - - /@babel/helper-module-imports@7.24.7: - resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/traverse': 7.25.6 - '@babel/types': 7.27.0 - transitivePeerDependencies: - - supports-color - dev: false + dev: true /@babel/helper-module-imports@7.25.9: resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} @@ -4186,7 +3872,6 @@ packages: '@babel/types': 7.27.0 transitivePeerDependencies: - supports-color - dev: true /@babel/helper-module-transforms@7.22.17(@babel/core@7.22.17): resolution: {integrity: sha512-XouDDhQESrLHTpnBtCKExJdyY4gJCdrvH2Pyv8r8kovX2U8G0dRUOT45T9XlbLtuu9CLXP15eusnkprhoPV5iQ==} @@ -4200,18 +3885,18 @@ packages: '@babel/helper-simple-access': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.25.9 + dev: true - /@babel/helper-module-transforms@7.25.2(@babel/core@7.24.5): - resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} + /@babel/helper-module-transforms@7.26.0(@babel/core@7.24.5): + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.24.5 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-simple-access': 7.24.7 + '@babel/helper-module-imports': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.25.6 + '@babel/traverse': 7.27.0 transitivePeerDependencies: - supports-color dev: false @@ -4228,7 +3913,6 @@ packages: '@babel/traverse': 7.27.0 transitivePeerDependencies: - supports-color - dev: true /@babel/helper-optimise-call-expression@7.18.6: resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} @@ -4276,8 +3960,8 @@ packages: '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/template': 7.24.7 - '@babel/traverse': 7.24.7 + '@babel/template': 7.27.0 + '@babel/traverse': 7.27.0 '@babel/types': 7.27.0 transitivePeerDependencies: - supports-color @@ -4300,16 +3984,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.27.0 - - /@babel/helper-simple-access@7.24.7: - resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/traverse': 7.25.6 - '@babel/types': 7.27.0 - transitivePeerDependencies: - - supports-color - dev: false + dev: true /@babel/helper-skip-transparent-expression-wrappers@7.20.0: resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==} @@ -4330,12 +4005,14 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.27.0 + dev: true /@babel/helper-split-export-declaration@7.24.7: resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.27.0 + dev: true /@babel/helper-string-parser@7.24.7: resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} @@ -4356,16 +4033,11 @@ packages: /@babel/helper-validator-option@7.22.15: resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} engines: {node: '>=6.9.0'} - - /@babel/helper-validator-option@7.24.8: - resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} - engines: {node: '>=6.9.0'} - dev: false + dev: true /@babel/helper-validator-option@7.25.9: resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} engines: {node: '>=6.9.0'} - dev: true /@babel/helper-wrap-function@7.20.5: resolution: {integrity: sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==} @@ -4388,14 +4060,7 @@ packages: '@babel/types': 7.27.0 transitivePeerDependencies: - supports-color - - /@babel/helpers@7.25.6: - resolution: {integrity: sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.25.0 - '@babel/types': 7.27.0 - dev: false + dev: true /@babel/helpers@7.27.0: resolution: {integrity: sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==} @@ -4403,7 +4068,6 @@ packages: dependencies: '@babel/template': 7.27.0 '@babel/types': 7.27.0 - dev: true /@babel/highlight@7.22.13: resolution: {integrity: sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==} @@ -4412,6 +4076,7 @@ packages: '@babel/helper-validator-identifier': 7.25.9 chalk: 2.4.2 js-tokens: 4.0.0 + dev: true /@babel/highlight@7.24.7: resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} @@ -5484,13 +5149,13 @@ packages: engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 + dev: false /@babel/runtime@7.27.0: resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 - dev: false /@babel/template@7.22.15: resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} @@ -5499,6 +5164,7 @@ packages: '@babel/code-frame': 7.22.13 '@babel/parser': 7.27.0 '@babel/types': 7.27.0 + dev: true /@babel/template@7.24.7: resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} @@ -5507,15 +5173,7 @@ packages: '@babel/code-frame': 7.24.7 '@babel/parser': 7.27.0 '@babel/types': 7.27.0 - - /@babel/template@7.25.0: - resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/parser': 7.27.0 - '@babel/types': 7.27.0 - dev: false + dev: true /@babel/template@7.27.0: resolution: {integrity: sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==} @@ -5524,7 +5182,6 @@ packages: '@babel/code-frame': 7.26.2 '@babel/parser': 7.27.0 '@babel/types': 7.27.0 - dev: true /@babel/traverse@7.22.17: resolution: {integrity: sha512-xK4Uwm0JnAMvxYZxOVecss85WxTEIbTa7bnGyf/+EgCL5Zt3U7htUpEOWv9detPlamGKuRzCqw74xVglDWpPdg==} @@ -5560,21 +5217,7 @@ packages: globals: 11.12.0 transitivePeerDependencies: - supports-color - - /@babel/traverse@7.25.6: - resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.6 - '@babel/parser': 7.27.0 - '@babel/template': 7.25.0 - '@babel/types': 7.27.0 - debug: 4.4.0(supports-color@10.0.0) - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: false + dev: true /@babel/traverse@7.27.0: resolution: {integrity: sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==} @@ -5589,7 +5232,6 @@ packages: globals: 11.12.0 transitivePeerDependencies: - supports-color - dev: true /@babel/types@7.24.0: resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} @@ -5598,6 +5240,7 @@ packages: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 to-fast-properties: 2.0.0 + dev: true /@babel/types@7.24.7: resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} @@ -5664,7 +5307,7 @@ packages: /@changesets/apply-release-plan@6.1.4: resolution: {integrity: sha512-FMpKF1fRlJyCZVYHr3CbinpZZ+6MwvOtWUuO8uo+svcATEoc1zRDcj23pAurJ2TZ/uVz1wFHH6K3NlACy0PLew==} dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@changesets/config': 2.3.1 '@changesets/get-version-range-type': 0.3.2 '@changesets/git': 2.0.0 @@ -5682,7 +5325,7 @@ packages: /@changesets/assemble-release-plan@5.2.4(patch_hash=3wuhjtl4hjck4itk3w32z4cd5u): resolution: {integrity: sha512-xJkWX+1/CUaOUWTguXEbCDTyWJFECEhmdtbkjhn5GVBGxdP/JwaHBIU9sW3FR6gD07UwZ7ovpiPclQZs+j+mvg==} dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@changesets/errors': 0.1.4 '@changesets/get-dependents-graph': 1.3.6 '@changesets/types': 5.2.1 @@ -5776,7 +5419,7 @@ packages: /@changesets/get-release-plan@3.0.17: resolution: {integrity: sha512-6IwKTubNEgoOZwDontYc2x2cWXfr6IKxP3IhKeK+WjyD6y3M4Gl/jdQvBw+m/5zWILSOCAaGLu2ZF6Q+WiPniw==} dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@changesets/assemble-release-plan': 5.2.4(patch_hash=3wuhjtl4hjck4itk3w32z4cd5u) '@changesets/config': 2.3.1 '@changesets/pre': 1.0.14 @@ -5792,7 +5435,7 @@ packages: /@changesets/git@2.0.0: resolution: {integrity: sha512-enUVEWbiqUTxqSnmesyJGWfzd51PY4H7mH9yUw0hPVpZBJ6tQZFMU3F3mT/t9OJ/GjyiM4770i+sehAn6ymx6A==} dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@changesets/errors': 0.1.4 '@changesets/types': 5.2.1 '@manypkg/get-packages': 1.1.3 @@ -5817,7 +5460,7 @@ packages: /@changesets/pre@1.0.14: resolution: {integrity: sha512-dTsHmxQWEQekHYHbg+M1mDVYFvegDh9j/kySNuDKdylwfMEevTeDouR7IfHNyVodxZXu17sXoJuf2D0vi55FHQ==} dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@changesets/errors': 0.1.4 '@changesets/types': 5.2.1 '@manypkg/get-packages': 1.1.3 @@ -5827,7 +5470,7 @@ packages: /@changesets/read@0.5.9: resolution: {integrity: sha512-T8BJ6JS6j1gfO1HFq50kU3qawYxa4NTbI/ASNVVCBTsKquy2HYwM9r7ZnzkiMe8IEObAJtUVGSrePCOxAK2haQ==} dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@changesets/git': 2.0.0 '@changesets/logger': 0.0.5 '@changesets/parse': 0.3.16 @@ -5847,7 +5490,7 @@ packages: /@changesets/write@0.2.3: resolution: {integrity: sha512-Dbamr7AIMvslKnNYsLFafaVORx4H0pvCA2MHqgtNCySMe1blImEyAEOzDmcgKAkgz4+uwoLz7demIrX+JBr/Xw==} dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@changesets/types': 5.2.1 fs-extra: 7.0.1 human-id: 1.0.2 @@ -6327,20 +5970,22 @@ packages: /@effect/schema@0.72.2(effect@3.7.2): resolution: {integrity: sha512-/x1BIA2pqcUidNrOMmwYe6Z58KtSgHSc5iJu7bNwIxi2LHMVuUao1BvpI5x6i7T/zkoi4dd1S6qasZzJIYDjdw==} + deprecated: this package has been merged into the main effect package peerDependencies: effect: ^3.7.2 dependencies: effect: 3.7.2 - fast-check: 3.22.0 + fast-check: 3.23.2 dev: false /@effect/schema@0.75.5(effect@3.14.14): resolution: {integrity: sha512-TQInulTVCuF+9EIbJpyLP6dvxbQJMphrnRqgexm/Ze39rSjfhJuufF7XvU3SxTgg3HnL7B/kpORTJbHhlE6thw==} + deprecated: this package has been merged into the main effect package peerDependencies: effect: ^3.9.2 dependencies: effect: 3.14.14 - fast-check: 3.22.0 + fast-check: 3.23.2 dev: false /@electric-sql/client@0.4.0: @@ -8244,6 +7889,7 @@ packages: dependencies: '@grpc/proto-loader': 0.7.7 '@types/node': 20.14.14 + dev: false /@grpc/proto-loader@0.7.13: resolution: {integrity: sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==} @@ -8265,6 +7911,7 @@ packages: long: 4.0.0 protobufjs: 7.3.2 yargs: 17.7.2 + dev: false /@hapi/boom@10.0.1: resolution: {integrity: sha512-ERcCZaEjdH3OgSJlyjVk8pHIFeus91CjKP3v+MpgBNp5IvGzP2l/bRiD78nqYcKPaZdbKkK5vDBVPd2ohHBlsA==} @@ -8729,7 +8376,7 @@ packages: /@internationalized/number@3.5.0: resolution: {integrity: sha512-ZY1BW8HT9WKYvaubbuqXbbDdHhOUMfE2zHHFJeTppid0S+pc8HtdIxFxaYMsGjCb4UsF+MEJ4n2TfU7iHnUK8w==} dependencies: - '@swc/helpers': 0.5.2 + '@swc/helpers': 0.5.15 dev: false /@internationalized/number@3.5.3: @@ -8741,7 +8388,7 @@ packages: /@internationalized/string@3.2.0: resolution: {integrity: sha512-Xx3Sy3f2c9ctT+vh8c7euEaEHQZltp0euZ3Hy4UfT3E13r6lxpUS3kgKyumEjboJZSnaZv7JhqWz3D75v+IxQg==} dependencies: - '@swc/helpers': 0.5.2 + '@swc/helpers': 0.5.15 dev: false /@internationalized/string@3.2.3: @@ -8791,6 +8438,7 @@ packages: '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 + dev: true /@jridgewell/gen-mapping@0.3.5: resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} @@ -8841,6 +8489,7 @@ packages: dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.5.0 + dev: true /@jridgewell/trace-mapping@0.3.25: resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} @@ -9004,7 +8653,7 @@ packages: /@manypkg/find-root@1.1.0: resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@types/node': 12.20.55 find-up: 4.1.0 fs-extra: 8.1.0 @@ -9012,7 +8661,7 @@ packages: /@manypkg/get-packages@1.1.3: resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@changesets/types': 4.1.0 '@manypkg/find-root': 1.1.0 fs-extra: 8.1.0 @@ -9464,8 +9113,8 @@ packages: engines: {node: ^16.14.0 || >=18.0.0} dependencies: agent-base: 7.1.1 - http-proxy-agent: 7.0.0 - https-proxy-agent: 7.0.2 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.5 lru-cache: 10.4.3 socks-proxy-agent: 8.0.4 transitivePeerDependencies: @@ -9628,6 +9277,7 @@ packages: dependencies: '@opentelemetry/api': 1.4.1 '@opentelemetry/semantic-conventions': 1.25.1 + dev: true /@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0): resolution: {integrity: sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==} @@ -9649,6 +9299,15 @@ packages: '@opentelemetry/semantic-conventions': 1.28.0 dev: false + /@opentelemetry/core@1.30.1(@opentelemetry/api@1.4.1): + resolution: {integrity: sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + dependencies: + '@opentelemetry/api': 1.4.1 + '@opentelemetry/semantic-conventions': 1.28.0 + /@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0): resolution: {integrity: sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==} engines: {node: '>=14'} @@ -9693,7 +9352,7 @@ packages: peerDependencies: '@opentelemetry/api': ^1.0.0 dependencies: - '@grpc/grpc-js': 1.8.17 + '@grpc/grpc-js': 1.12.6 '@opentelemetry/api': 1.4.1 '@opentelemetry/core': 1.22.0(@opentelemetry/api@1.4.1) '@opentelemetry/otlp-grpc-exporter-base': 0.49.1(@opentelemetry/api@1.4.1) @@ -9909,7 +9568,7 @@ packages: '@opentelemetry/api': ^1.7.0 dependencies: '@opentelemetry/api': 1.4.1 - '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.4.1) + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.4.1) '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.4.1) transitivePeerDependencies: - supports-color @@ -10055,7 +9714,7 @@ packages: peerDependencies: '@opentelemetry/api': ^1.0.0 dependencies: - '@grpc/grpc-js': 1.8.17 + '@grpc/grpc-js': 1.12.6 '@opentelemetry/api': 1.4.1 '@opentelemetry/core': 1.22.0(@opentelemetry/api@1.4.1) '@opentelemetry/otlp-exporter-base': 0.49.1(@opentelemetry/api@1.4.1) @@ -10522,7 +10181,6 @@ packages: /@opentelemetry/semantic-conventions@1.28.0: resolution: {integrity: sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==} engines: {node: '>=14'} - dev: false /@pkgjs/parseargs@0.11.0: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} @@ -10801,10 +10459,11 @@ packages: progress: 2.0.3 proxy-agent: 6.4.0 semver: 7.6.3 - tar-fs: 3.0.6 + tar-fs: 3.0.8 unbzip2-stream: 1.4.3 yargs: 17.7.2 transitivePeerDependencies: + - bare-buffer - supports-color dev: false @@ -10876,7 +10535,7 @@ packages: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -10895,7 +10554,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.3.1) '@types/react': 18.3.1 '@types/react-dom': 18.2.7 @@ -10939,7 +10598,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.1)(react@18.3.1) '@radix-ui/react-context': 1.0.1(@types/react@18.3.1)(react@18.3.1) @@ -10969,7 +10628,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-collection@1.0.2(react-dom@18.2.0)(react@18.3.1): + /@radix-ui/react-collection@1.0.2(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-s8WdQQ6wNXpaxdZ308KSr8fEWGrg4un8i4r/w7fhiS4ElRNjk5rRcl0/C6TANG2LvLOGIxtzo/jAg6Qf73TEBw==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 @@ -10978,10 +10637,10 @@ packages: '@babel/runtime': 7.26.7 '@radix-ui/react-compose-refs': 1.0.0(react@18.3.1) '@radix-ui/react-context': 1.0.0(react@18.3.1) - '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.2(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-slot': 1.0.1(react@18.3.1) react: 18.3.1 - react-dom: 18.2.0(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) dev: false /@radix-ui/react-collection@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0): @@ -11073,7 +10732,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@types/react': 18.2.69 react: 18.3.1 dev: false @@ -11087,7 +10746,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@types/react': 18.3.1 react: 18.3.1 dev: false @@ -11158,7 +10817,7 @@ packages: peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 react: 18.3.1 dev: false @@ -11185,7 +10844,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@types/react': 18.3.1 react: 18.3.1 dev: false @@ -11277,7 +10936,7 @@ packages: react-remove-scroll: 2.5.5(@types/react@18.2.69)(react@18.2.0) dev: false - /@radix-ui/react-dialog@1.0.4(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.3.1): + /@radix-ui/react-dialog@1.0.4(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-hJtRy/jPULGQZceSAP2Re6/4NpKo8im6V8P2hUqZsdFiSL8l35kYsw3qbRI6Ay5mQd2+wlLqje770eq+RJ3yZg==} peerDependencies: '@types/react': '*' @@ -11290,24 +10949,24 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.27.0 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.1)(react@18.3.1) '@radix-ui/react-context': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-id': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.3.1) + '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-slot': 1.0.2(@types/react@18.3.1)(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.1)(react@18.3.1) '@types/react': 18.3.1 '@types/react-dom': 18.2.7 - aria-hidden: 1.2.3 + aria-hidden: 1.2.4 react: 18.3.1 - react-dom: 18.2.0(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) react-remove-scroll: 2.5.5(@types/react@18.3.1)(react@18.3.1) dev: false @@ -11325,7 +10984,7 @@ packages: peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 react: 18.3.1 dev: false @@ -11399,7 +11058,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.69)(react@18.2.0) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) @@ -11424,7 +11083,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.1)(react@18.3.1) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.3.1) @@ -11436,6 +11095,31 @@ packages: react-dom: 18.2.0(react@18.3.1) dev: false + /@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.27.0 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.1)(react@18.3.1) + '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.3.1)(react@18.3.1) + '@types/react': 18.3.1 + '@types/react-dom': 18.2.7 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: false + /@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.3.1): resolution: {integrity: sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==} peerDependencies: @@ -11449,7 +11133,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.1)(react@18.3.1) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.3.1) @@ -11479,7 +11163,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@types/react': 18.2.69 react: 18.2.0 dev: false @@ -11493,7 +11177,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@types/react': 18.3.1 react: 18.3.1 dev: false @@ -11525,7 +11209,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.69)(react@18.2.0) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.69)(react@18.2.0) @@ -11535,7 +11219,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-focus-scope@1.0.3(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.3.1): + /@radix-ui/react-focus-scope@1.0.3(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==} peerDependencies: '@types/react': '*' @@ -11548,14 +11232,14 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.1)(react@18.3.1) '@types/react': 18.3.1 '@types/react-dom': 18.2.7 react: 18.3.1 - react-dom: 18.2.0(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) dev: false /@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.3.1): @@ -11571,7 +11255,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.1)(react@18.3.1) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.1)(react@18.3.1) @@ -11604,7 +11288,7 @@ packages: peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/react-use-layout-effect': 1.0.0(react@18.3.1) react: 18.3.1 dev: false @@ -11618,7 +11302,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.69)(react@18.2.0) '@types/react': 18.2.69 react: 18.2.0 @@ -11633,7 +11317,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.1)(react@18.3.1) '@types/react': 18.3.1 react: 18.3.1 @@ -11692,7 +11376,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.1)(react@18.3.1) '@radix-ui/react-context': 1.0.1(@types/react@18.3.1)(react@18.3.1) @@ -11750,7 +11434,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@floating-ui/react-dom': 2.0.9(react-dom@18.2.0)(react@18.3.1) '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.3.1) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.1)(react@18.3.1) @@ -11780,7 +11464,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@floating-ui/react-dom': 2.0.9(react-dom@18.2.0)(react@18.3.1) '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.3.1) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.1)(react@18.3.1) @@ -11822,7 +11506,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) '@types/react': 18.2.69 '@types/react-dom': 18.2.7 @@ -11843,7 +11527,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.3.1) '@types/react': 18.3.1 '@types/react-dom': 18.2.7 @@ -11851,6 +11535,27 @@ packages: react-dom: 18.2.0(react@18.3.1) dev: false + /@radix-ui/react-portal@1.0.3(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.27.0 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) + '@types/react': 18.3.1 + '@types/react-dom': 18.2.7 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: false + /@radix-ui/react-portal@1.0.4(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.3.1): resolution: {integrity: sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==} peerDependencies: @@ -11864,7 +11569,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.3.1) '@types/react': 18.3.1 '@types/react-dom': 18.2.7 @@ -11885,17 +11590,17 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-presence@1.0.0(react-dom@18.2.0)(react@18.3.1): + /@radix-ui/react-presence@1.0.0(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/react-compose-refs': 1.0.0(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.0.0(react@18.3.1) react: 18.3.1 - react-dom: 18.2.0(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) dev: false /@radix-ui/react-presence@1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0): @@ -11911,7 +11616,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.69)(react@18.2.0) '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.69)(react@18.2.0) '@types/react': 18.2.69 @@ -11933,7 +11638,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.1)(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.1)(react@18.3.1) '@types/react': 18.3.1 @@ -11942,7 +11647,29 @@ packages: react-dom: 18.2.0(react@18.3.1) dev: false - /@radix-ui/react-presence@1.1.1(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.3.1): + /@radix-ui/react-presence@1.0.1(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.27.0 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.1)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.1)(react@18.3.1) + '@types/react': 18.3.1 + '@types/react-dom': 18.2.7 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: false + + /@radix-ui/react-presence@1.1.1(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==} peerDependencies: '@types/react': '*' @@ -11960,7 +11687,7 @@ packages: '@types/react': 18.3.1 '@types/react-dom': 18.2.7 react: 18.3.1 - react-dom: 18.2.0(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) dev: false /@radix-ui/react-primitive@1.0.2(react-dom@18.2.0)(react@18.2.0): @@ -11969,22 +11696,22 @@ packages: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/react-slot': 1.0.1(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-primitive@1.0.2(react-dom@18.2.0)(react@18.3.1): + /@radix-ui/react-primitive@1.0.2(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-zY6G5Qq4R8diFPNwtyoLRZBxzu1Z+SXMlfYpChN7Dv8gvmx9X3qhDqiLWvKseKVJMuedFeU/Sa0Sy/Ia+t06Dw==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/react-slot': 1.0.1(react@18.3.1) react: 18.3.1 - react-dom: 18.2.0(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) dev: false /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0): @@ -12000,7 +11727,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/react-slot': 1.0.2(@types/react@18.2.69)(react@18.2.0) '@types/react': 18.2.69 '@types/react-dom': 18.2.7 @@ -12021,7 +11748,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/react-slot': 1.0.2(@types/react@18.3.1)(react@18.3.1) '@types/react': 18.3.1 '@types/react-dom': 18.2.7 @@ -12029,7 +11756,28 @@ packages: react-dom: 18.2.0(react@18.3.1) dev: false - /@radix-ui/react-primitive@2.0.0(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.3.1): + /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.27.0 + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.1)(react@18.3.1) + '@types/react': 18.3.1 + '@types/react-dom': 18.2.7 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: false + + /@radix-ui/react-primitive@2.0.0(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==} peerDependencies: '@types/react': '*' @@ -12046,10 +11794,10 @@ packages: '@types/react': 18.3.1 '@types/react-dom': 18.2.7 react: 18.3.1 - react-dom: 18.2.0(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) dev: false - /@radix-ui/react-primitive@2.0.1(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.3.1): + /@radix-ui/react-primitive@2.0.1(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-sHCWTtxwNn3L3fH8qAfnF3WbUZycW93SM1j3NFDzXBiz8D6F5UTTy8G1+WFEaiCdvCVRJWj6N2R4Xq6HdiHmDg==} peerDependencies: '@types/react': '*' @@ -12066,7 +11814,7 @@ packages: '@types/react': 18.3.1 '@types/react-dom': 18.2.7 react: 18.3.1 - react-dom: 18.2.0(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) dev: false /@radix-ui/react-primitive@2.0.2(@types/react-dom@19.0.4)(@types/react@19.0.12)(react-dom@19.0.0)(react@19.0.0): @@ -12089,7 +11837,7 @@ packages: react-dom: 19.0.0(react@19.0.0) dev: false - /@radix-ui/react-progress@1.1.1(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.3.1): + /@radix-ui/react-progress@1.1.1(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-6diOawA84f/eMxFHcWut0aE1C2kyE9dOyCTQOMRR2C/qPiXz/X0SaiA/RLbapQaXUCmy0/hLMf9meSccD1N0pA==} peerDependencies: '@types/react': '*' @@ -12103,11 +11851,11 @@ packages: optional: true dependencies: '@radix-ui/react-context': 1.1.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) '@types/react': 18.3.1 '@types/react-dom': 18.2.7 react: 18.3.1 - react-dom: 18.2.0(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) dev: false /@radix-ui/react-radio-group@1.1.3(@types/react-dom@18.2.7)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0): @@ -12160,24 +11908,24 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-roving-focus@1.0.3(react-dom@18.2.0)(react@18.3.1): + /@radix-ui/react-roving-focus@1.0.3(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-stjCkIoMe6h+1fWtXlA6cRfikdBzCLp3SnVk7c48cv/uy3DTGoXhN76YaOYUJuy3aEDvDIKwKR5KSmvrtPvQPQ==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/primitive': 1.0.0 - '@radix-ui/react-collection': 1.0.2(react-dom@18.2.0)(react@18.3.1) + '@radix-ui/react-collection': 1.0.2(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-compose-refs': 1.0.0(react@18.3.1) '@radix-ui/react-context': 1.0.0(react@18.3.1) '@radix-ui/react-direction': 1.0.0(react@18.3.1) '@radix-ui/react-id': 1.0.0(react@18.3.1) - '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.2(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.0.0(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.0.0(react@18.3.1) react: 18.3.1 - react-dom: 18.2.0(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) dev: false /@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0): @@ -12222,7 +11970,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.3.1) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.1)(react@18.3.1) @@ -12238,7 +11986,7 @@ packages: react-dom: 18.2.0(react@18.3.1) dev: false - /@radix-ui/react-scroll-area@1.2.0(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.3.1): + /@radix-ui/react-scroll-area@1.2.0(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-q2jMBdsJ9zB7QG6ngQNzNwlvxLQqONyL58QbEGwuyRZZb/ARQwk3uQVbCF7GvQVOtV6EU/pDxAw3zRzJZI3rpQ==} peerDependencies: '@types/react': '*' @@ -12256,14 +12004,14 @@ packages: '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.1)(react@18.3.1) '@radix-ui/react-context': 1.1.1(@types/react@18.3.1)(react@18.3.1) '@radix-ui/react-direction': 1.1.0(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.3.1) + '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.1)(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.1)(react@18.3.1) '@types/react': 18.3.1 '@types/react-dom': 18.2.7 react: 18.3.1 - react-dom: 18.2.0(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) dev: false /@radix-ui/react-select@1.2.1(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0): @@ -12360,7 +12108,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.69)(react@18.2.0) '@types/react': 18.2.69 react: 18.2.0 @@ -12375,7 +12123,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.69)(react@18.3.1) '@types/react': 18.2.69 react: 18.3.1 @@ -12390,7 +12138,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.1)(react@18.3.1) '@types/react': 18.3.1 react: 18.3.1 @@ -12424,6 +12172,20 @@ packages: react: 18.3.1 dev: false + /@radix-ui/react-slot@1.1.2(@types/react@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.1)(react@18.3.1) + '@types/react': 18.3.1 + react: 18.3.1 + dev: false + /@radix-ui/react-slot@1.1.2(@types/react@19.0.12)(react@19.0.0): resolution: {integrity: sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==} peerDependencies: @@ -12484,23 +12246,23 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-tabs@1.0.3(react-dom@18.2.0)(react@18.3.1): + /@radix-ui/react-tabs@1.0.3(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-4CkF/Rx1GcrusI/JZ1Rvyx4okGUs6wEenWA0RG/N+CwkRhTy7t54y7BLsWUXrAz/GRbBfHQg/Odfs/RoW0CiRA==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.27.0 '@radix-ui/primitive': 1.0.0 '@radix-ui/react-context': 1.0.0(react@18.3.1) '@radix-ui/react-direction': 1.0.0(react@18.3.1) '@radix-ui/react-id': 1.0.0(react@18.3.1) - '@radix-ui/react-presence': 1.0.0(react-dom@18.2.0)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.3.1) - '@radix-ui/react-roving-focus': 1.0.3(react-dom@18.2.0)(react@18.3.1) + '@radix-ui/react-presence': 1.0.0(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.2(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-roving-focus': 1.0.3(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.0.0(react@18.3.1) react: 18.3.1 - react-dom: 18.2.0(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) dev: false /@radix-ui/react-toggle-group@1.0.4(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.3.1): @@ -12516,7 +12278,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-context': 1.0.1(@types/react@18.3.1)(react@18.3.1) '@radix-ui/react-direction': 1.0.1(@types/react@18.3.1)(react@18.3.1) @@ -12543,7 +12305,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.1)(react@18.3.1) @@ -12591,7 +12353,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.1)(react@18.3.1) '@radix-ui/react-context': 1.0.1(@types/react@18.3.1)(react@18.3.1) @@ -12637,7 +12399,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@types/react': 18.2.69 react: 18.2.0 dev: false @@ -12651,7 +12413,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@types/react': 18.3.1 react: 18.3.1 dev: false @@ -12697,7 +12459,7 @@ packages: peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/react-use-callback-ref': 1.0.0(react@18.3.1) react: 18.3.1 dev: false @@ -12711,7 +12473,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.69)(react@18.2.0) '@types/react': 18.2.69 react: 18.2.0 @@ -12726,7 +12488,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.1)(react@18.3.1) '@types/react': 18.3.1 react: 18.3.1 @@ -12737,7 +12499,7 @@ packages: peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) react: 18.2.0 dev: false @@ -12751,7 +12513,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.69)(react@18.2.0) '@types/react': 18.2.69 react: 18.2.0 @@ -12766,7 +12528,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.1)(react@18.3.1) '@types/react': 18.3.1 react: 18.3.1 @@ -12872,7 +12634,7 @@ packages: peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/rect': 1.0.0 react: 18.2.0 dev: false @@ -12886,7 +12648,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/rect': 1.0.1 '@types/react': 18.3.1 react: 18.3.1 @@ -12897,7 +12659,7 @@ packages: peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0) react: 18.2.0 dev: false @@ -12957,7 +12719,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.3.1) '@types/react': 18.3.1 '@types/react-dom': 18.2.7 @@ -12968,13 +12730,13 @@ packages: /@radix-ui/rect@1.0.0: resolution: {integrity: sha512-d0O68AYy/9oeEy1DdC07bz1/ZXX+DqCskRd3i4JzLSTXwefzaepQrKjXC7aNM8lTHjFLDO0pDgaEiQ7jEk+HVg==} dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 dev: false /@radix-ui/rect@1.0.1: resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==} dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 dev: false /@react-aria/breadcrumbs@3.5.16(react@18.2.0): @@ -13298,7 +13060,7 @@ packages: '@react-aria/interactions': 3.20.1(react@18.2.0) '@react-aria/utils': 3.23.0(react@18.2.0) '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + '@swc/helpers': 0.5.15 clsx: 2.1.1 react: 18.2.0 dev: false @@ -13325,7 +13087,7 @@ packages: '@react-aria/utils': 3.23.0(react@18.2.0) '@react-stately/form': 3.0.0(react@18.2.0) '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + '@swc/helpers': 0.5.15 react: 18.2.0 dev: false @@ -13441,7 +13203,7 @@ packages: '@react-aria/ssr': 3.9.1(react@18.2.0) '@react-aria/utils': 3.23.0(react@18.2.0) '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + '@swc/helpers': 0.5.15 react: 18.2.0 dev: false @@ -13469,7 +13231,7 @@ packages: '@react-aria/ssr': 3.9.1(react@18.2.0) '@react-aria/utils': 3.23.0(react@18.2.0) '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + '@swc/helpers': 0.5.15 react: 18.2.0 dev: false @@ -13503,7 +13265,7 @@ packages: dependencies: '@react-aria/utils': 3.23.0(react@18.2.0) '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + '@swc/helpers': 0.5.15 react: 18.2.0 dev: false @@ -13984,7 +13746,7 @@ packages: '@react-aria/utils': 3.23.0(react@18.2.0) '@react-types/button': 3.9.1(react@18.2.0) '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + '@swc/helpers': 0.5.15 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -14278,7 +14040,7 @@ packages: '@react-aria/ssr': 3.9.1(react@18.2.0) '@react-stately/utils': 3.9.0(react@18.2.0) '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + '@swc/helpers': 0.5.15 clsx: 2.1.1 react: 18.2.0 dev: false @@ -14841,7 +14603,7 @@ packages: html-to-text: 9.0.5 js-beautify: 1.15.1 react: 18.3.1 - react-dom: 18.2.0(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) dev: false /@react-email/render@1.0.1(react-dom@18.3.1)(react@19.0.0-rc.0): @@ -15158,7 +14920,7 @@ packages: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + '@swc/helpers': 0.5.15 react: 18.2.0 dev: false @@ -15292,7 +15054,7 @@ packages: dependencies: '@react-stately/utils': 3.9.0(react@18.2.0) '@react-types/overlays': 3.8.4(react@18.2.0) - '@swc/helpers': 0.5.2 + '@swc/helpers': 0.5.15 react: 18.2.0 dev: false @@ -15562,7 +15324,7 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@swc/helpers': 0.5.2 + '@swc/helpers': 0.5.15 react: 18.2.0 dev: false @@ -16509,7 +16271,7 @@ packages: resolution: {integrity: sha512-TwEEW4FeEJ5Mamp4fGnktfVjzN77KAW0xFQsEPuxZtOAPG17zX/PGvdyRX/TE1jkZWhTzqUDIdgzqlNLjyEnUw==} engines: {node: '>= 14'} dependencies: - '@babel/core': 7.22.17 + '@babel/core': 7.26.10 '@sentry/babel-plugin-component-annotate': 2.22.2 '@sentry/cli': 2.33.1 dotenv: 16.4.7 @@ -16614,7 +16376,7 @@ packages: dependencies: '@sentry/bundler-plugin-core': 2.22.2 unplugin: 1.0.1 - uuid: 9.0.0 + uuid: 9.0.1 transitivePeerDependencies: - encoding - supports-color @@ -18017,7 +17779,7 @@ packages: engines: {node: '>=12'} dependencies: '@babel/code-frame': 7.22.13 - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 '@types/aria-query': 5.0.1 aria-query: 5.3.0 chalk: 4.1.2 @@ -18058,12 +17820,12 @@ packages: resolution: {integrity: sha512-rp1J6FOJLNZ1M08xsz2B84STNV3AGKxCq+44w7mgadOCyI6GDw7a1lbLo+wTV0dxnt34HPBBdrvRXCFHd3JK9Q==} engines: {node: '>=14'} dependencies: - '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.4.1) + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.4.1) '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.4.1) '@opentelemetry/semantic-conventions': 1.28.0 '@traceloop/ai-semantic-conventions': 0.10.0 js-tiktoken: 1.0.14 - tslib: 2.6.2 + tslib: 2.8.1 transitivePeerDependencies: - '@opentelemetry/api' - supports-color @@ -18118,12 +17880,6 @@ packages: '@types/node': 20.14.14 dev: true - /@types/bun@1.1.6: - resolution: {integrity: sha512-uJgKjTdX0GkWEHZzQzFsJkWp5+43ZS7HC8sZPFnOwnSo1AsNl2q9o2bFeS23disNDqbggEgyFkKCHl/w8iZsMA==} - dependencies: - bun-types: 1.1.17 - dev: true - /@types/caseless@0.12.5: resolution: {integrity: sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==} dev: false @@ -18293,6 +18049,7 @@ packages: /@types/estree@1.0.6: resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + dev: true /@types/estree@1.0.7: resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} @@ -18412,6 +18169,7 @@ packages: /@types/long@4.0.2: resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} + dev: false /@types/marked@4.0.8: resolution: {integrity: sha512-HVNzMT5QlWCOdeuBsgXP8EZzKUf0+AXzN+sLmjvaB3ZlLqO+e4u0uXrdw9ub69wBKFs+c6/pA4r9sy6cCDvImw==} @@ -18501,12 +18259,6 @@ packages: undici-types: 5.26.5 dev: false - /@types/node@20.12.14: - resolution: {integrity: sha512-scnD59RpYD91xngrQQLGkE+6UrHUPzeKZWhhjBSa3HSkwjbQc38+q3RoIVEwxQGRw3M+j5hpNAM+lgV3cVormg==} - dependencies: - undici-types: 5.26.5 - dev: true - /@types/node@20.14.14: resolution: {integrity: sha512-d64f00982fS9YoOgJkAMolK7MN8Iq3TDdVjchbYHdEmjth/DHowx82GnoA+tVUAN+7vxfYUgAzi+JXbKNd2SDQ==} dependencies: @@ -18804,6 +18556,7 @@ packages: resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} dependencies: '@types/node': 20.14.14 + dev: false /@types/ws@8.5.12: resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==} @@ -19058,7 +18811,7 @@ packages: dependencies: '@uploadthing/shared': 7.0.3 file-selector: 0.6.0 - next: 14.2.21(@opentelemetry/api@1.9.0)(@playwright/test@1.37.0)(react-dom@18.2.0)(react@18.3.1) + next: 14.2.21(@opentelemetry/api@1.9.0)(@playwright/test@1.37.0)(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 uploadthing: 7.1.0(next@14.2.21)(tailwindcss@3.4.1) dev: false @@ -19093,7 +18846,7 @@ packages: /@vanilla-extract/babel-plugin-debug-ids@1.0.2: resolution: {integrity: sha512-LjnbQWGeMwaydmovx8jWUR8BxLtLiPyq0xz5C8G5OvFhsuJxvavLdrBHNNizvr1dq7/3qZGlPv0znsvU4P44YA==} dependencies: - '@babel/core': 7.22.17 + '@babel/core': 7.26.10 transitivePeerDependencies: - supports-color dev: true @@ -19772,12 +19525,12 @@ packages: negotiator: 1.0.0 dev: false - /acorn-import-assertions@1.9.0(acorn@8.12.1): + /acorn-import-assertions@1.9.0(acorn@8.14.1): resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} peerDependencies: acorn: ^8 dependencies: - acorn: 8.12.1 + acorn: 8.14.1 /acorn-import-attributes@1.9.5(acorn@8.12.1): resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} @@ -19785,6 +19538,15 @@ packages: acorn: ^8 dependencies: acorn: 8.12.1 + dev: false + + /acorn-import-attributes@1.9.5(acorn@8.14.1): + resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} + peerDependencies: + acorn: ^8 + dependencies: + acorn: 8.14.1 + dev: true /acorn-jsx@5.3.2(acorn@8.12.1): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} @@ -19793,6 +19555,13 @@ packages: dependencies: acorn: 8.12.1 + /acorn-jsx@5.3.2(acorn@8.14.1): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.14.1 + /acorn-node@1.8.2: resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} dependencies: @@ -19855,14 +19624,6 @@ packages: - supports-color dev: false - /agent-base@7.1.0: - resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} - engines: {node: '>= 14'} - dependencies: - debug: 4.4.0(supports-color@10.0.0) - transitivePeerDependencies: - - supports-color - /agent-base@7.1.1: resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} engines: {node: '>= 14'} @@ -19897,14 +19658,14 @@ packages: resolution: {integrity: sha512-hCOfMzbFx5IDutmWLAt6MZwOUjIfSM9G9FyVxytmE4Rs/5YDPWQrD/+IR1w+FweD9H2oOZEnv36TmkjhNURBVA==} dev: true - /ai@3.3.24(openai@4.56.0)(react@19.0.0-rc.0)(svelte@5.28.2)(vue@3.5.13)(zod@3.23.8): - resolution: {integrity: sha512-hhyczvEdCQeeEMWBWP4Af8k1YIzsheC+dHv6lAsti8NBiOnySFhnjS1sTiIrLyuCgciHXoFYLhlA2+/3AtBLAQ==} + /ai@3.4.33(openai@4.97.0)(react@19.0.0-rc.0)(svelte@5.28.2)(vue@3.5.13)(zod@3.23.8): + resolution: {integrity: sha512-plBlrVZKwPoRTmM8+D1sJac9Bq8eaa2jiZlHLZIWekKWI1yMWYZvCCEezY9ASPwRhULYDJB2VhKOBUUeg3S5JQ==} engines: {node: '>=18'} peerDependencies: openai: ^4.42.0 - react: ^18 || ^19 + react: ^18 || ^19 || ^19.0.0-rc sswr: ^2.1.0 - svelte: ^3.0.0 || ^4.0.0 + svelte: ^3.0.0 || ^4.0.0 || ^5.0.0 zod: ^3.0.0 peerDependenciesMeta: openai: @@ -19918,24 +19679,23 @@ packages: zod: optional: true dependencies: - '@ai-sdk/provider': 0.0.22 - '@ai-sdk/provider-utils': 1.0.17(zod@3.23.8) - '@ai-sdk/react': 0.0.53(react@19.0.0-rc.0)(zod@3.23.8) - '@ai-sdk/solid': 0.0.43(zod@3.23.8) - '@ai-sdk/svelte': 0.0.45(svelte@5.28.2)(zod@3.23.8) - '@ai-sdk/ui-utils': 0.0.40(zod@3.23.8) - '@ai-sdk/vue': 0.0.45(vue@3.5.13)(zod@3.23.8) + '@ai-sdk/provider': 0.0.26 + '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8) + '@ai-sdk/react': 0.0.70(react@19.0.0-rc.0)(zod@3.23.8) + '@ai-sdk/solid': 0.0.54(zod@3.23.8) + '@ai-sdk/svelte': 0.0.57(svelte@5.28.2)(zod@3.23.8) + '@ai-sdk/ui-utils': 0.0.50(zod@3.23.8) + '@ai-sdk/vue': 0.0.59(vue@3.5.13)(zod@3.23.8) '@opentelemetry/api': 1.9.0 eventsource-parser: 1.1.2 json-schema: 0.4.0 jsondiffpatch: 0.6.0 - nanoid: 3.3.6 - openai: 4.56.0(zod@3.23.8) + openai: 4.97.0(zod@3.23.8) react: 19.0.0-rc.0 secure-json-parse: 2.7.0 svelte: 5.28.2 zod: 3.23.8 - zod-to-json-schema: 3.23.2(zod@3.23.8) + zod-to-json-schema: 3.24.5(zod@3.23.8) transitivePeerDependencies: - solid-js - vue @@ -19983,29 +19743,6 @@ packages: - vue dev: true - /ai@4.0.0(react@18.3.1)(zod@3.23.8): - resolution: {integrity: sha512-cqf2GCaXnOPhUU+Ccq6i+5I0jDjnFkzfq7t6mc0SUSibSa1wDPn5J4p8+Joh2fDGDYZOJ44rpTW9hSs40rXNAw==} - engines: {node: '>=18'} - peerDependencies: - react: ^18 || ^19 || ^19.0.0-rc - zod: ^3.0.0 - peerDependenciesMeta: - react: - optional: true - zod: - optional: true - dependencies: - '@ai-sdk/provider': 1.0.0 - '@ai-sdk/provider-utils': 2.0.0(zod@3.23.8) - '@ai-sdk/react': 1.0.0(react@18.3.1)(zod@3.23.8) - '@ai-sdk/ui-utils': 1.0.0(zod@3.23.8) - '@opentelemetry/api': 1.9.0 - jsondiffpatch: 0.6.0 - react: 18.3.1 - zod: 3.23.8 - zod-to-json-schema: 3.24.5(zod@3.23.8) - dev: false - /ai@4.2.5(react@18.3.1)(zod@3.23.8): resolution: {integrity: sha512-URJEslI3cgF/atdTJHtz+Sj0W1JTmiGmD3znw9KensL3qV605odktDim+GTazNJFPR4QaIu1lUio5b8RymvOjA==} engines: {node: '>=18'} @@ -20024,7 +19761,6 @@ packages: jsondiffpatch: 0.6.0 react: 18.3.1 zod: 3.23.8 - dev: true /ai@4.2.5(react@19.0.0)(zod@3.23.8): resolution: {integrity: sha512-URJEslI3cgF/atdTJHtz+Sj0W1JTmiGmD3znw9KensL3qV605odktDim+GTazNJFPR4QaIu1lUio5b8RymvOjA==} @@ -20729,27 +20465,11 @@ packages: /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - /bare-events@2.4.2: - resolution: {integrity: sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==} - requiresBuild: true - dev: false - optional: true - /bare-events@2.5.4: resolution: {integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==} requiresBuild: true optional: true - /bare-fs@2.3.5: - resolution: {integrity: sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw==} - requiresBuild: true - dependencies: - bare-events: 2.4.2 - bare-path: 2.1.3 - bare-stream: 2.3.0 - dev: false - optional: true - /bare-fs@4.1.4: resolution: {integrity: sha512-r8+26Voz8dGX3AYpJdFb1ZPaUSM8XOLCZvy+YGpRTmwPHIxA7Z3Jov/oMPtV7hfRQbOnH8qGlLTzQAbgtdNN0Q==} engines: {bare: '>=1.16.0'} @@ -20763,28 +20483,12 @@ packages: bare-events: 2.5.4 bare-path: 3.0.0 bare-stream: 2.6.5(bare-events@2.5.4) - dev: true - optional: true - - /bare-os@2.4.4: - resolution: {integrity: sha512-z3UiI2yi1mK0sXeRdc4O1Kk8aOa/e+FNWZcTiPB/dfTWyLypuE99LibgRaQki914Jq//yAWylcAt+mknKdixRQ==} - requiresBuild: true - dev: false optional: true /bare-os@3.6.1: resolution: {integrity: sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g==} engines: {bare: '>=1.14.0'} requiresBuild: true - dev: true - optional: true - - /bare-path@2.1.3: - resolution: {integrity: sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==} - requiresBuild: true - dependencies: - bare-os: 2.4.4 - dev: false optional: true /bare-path@3.0.0: @@ -20792,16 +20496,6 @@ packages: requiresBuild: true dependencies: bare-os: 3.6.1 - dev: true - optional: true - - /bare-stream@2.3.0: - resolution: {integrity: sha512-pVRWciewGUeCyKEuRxwv06M079r+fRjAQjBEK2P6OYGrO43O+Z0LrPZZEjlc4mB6C2RpZ9AxJ1s7NLEtOHO6eA==} - requiresBuild: true - dependencies: - b4a: 1.6.6 - streamx: 2.20.1 - dev: false optional: true /bare-stream@2.6.5(bare-events@2.5.4): @@ -20818,7 +20512,6 @@ packages: dependencies: bare-events: 2.5.4 streamx: 2.22.0 - dev: true optional: true /base64-js@1.5.1: @@ -20960,17 +20653,6 @@ packages: update-browserslist-db: 1.0.11(browserslist@4.21.4) dev: true - /browserslist@4.23.3: - resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - dependencies: - caniuse-lite: 1.0.30001707 - electron-to-chromium: 1.5.13 - node-releases: 2.0.18 - update-browserslist-db: 1.1.0(browserslist@4.23.3) - dev: false - /browserslist@4.24.4: resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -21027,13 +20709,6 @@ packages: semver: 7.6.3 dev: true - /bun-types@1.1.17: - resolution: {integrity: sha512-Z4+OplcSd/YZq7ZsrfD00DKJeCwuNY96a1IDJyR73+cTBaFIS7SC6LhpY/W3AMEXO9iYq5NJ58WAwnwL1p5vKg==} - dependencies: - '@types/node': 20.12.14 - '@types/ws': 8.5.10 - dev: true - /bundle-name@4.1.0: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} engines: {node: '>=18'} @@ -21206,10 +20881,6 @@ packages: resolution: {integrity: sha512-rs2ZygrG1PNXMfmncM0B5H1hndY5ZCC9b5TkFaVNfZ+AUlyqcMyVIQtc3fsezi0NUCk5XZfDf9WS6WxMxnfdrg==} dev: true - /caniuse-lite@1.0.30001699: - resolution: {integrity: sha512-b+uH5BakXZ9Do9iK+CkDmctUSEqZl+SP056vc5usa0PL+ev5OHw003rZXcnjNDv3L8P5j6rwT6C0BPKSikW08w==} - dev: false - /caniuse-lite@1.0.30001707: resolution: {integrity: sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==} @@ -21463,12 +21134,6 @@ packages: typescript: 5.5.4 dev: false - /class-variance-authority@0.7.0: - resolution: {integrity: sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==} - dependencies: - clsx: 2.0.0 - dev: false - /class-variance-authority@0.7.1: resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} dependencies: @@ -21588,11 +21253,6 @@ packages: engines: {node: '>=6'} dev: false - /clsx@2.0.0: - resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==} - engines: {node: '>=6'} - dev: false - /clsx@2.1.0: resolution: {integrity: sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==} engines: {node: '>=6'} @@ -21807,6 +21467,7 @@ packages: /convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + dev: true /convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -22682,7 +22343,7 @@ packages: /dom-helpers@5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 csstype: 3.1.3 dev: false @@ -22736,6 +22397,7 @@ packages: /dotenv@16.4.7: resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} engines: {node: '>=12'} + dev: false /dotenv@8.6.0: resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} @@ -22831,10 +22493,6 @@ packages: resolution: {integrity: sha512-MGO1k0w1RgrfdbLVwmXcDhHHuxCn2qRgR7dYsJvWFKDttvYPx6FNzCGG0c/fBBvzK2LDh3UV7Tt9awnHnvAAUQ==} dev: true - /electron-to-chromium@1.5.13: - resolution: {integrity: sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==} - dev: false - /electron-to-chromium@1.5.98: resolution: {integrity: sha512-bI/LbtRBxU2GzK7KK5xxFd2y9Lf9XguHooPYbcXWy6wUoT8NMnffsvRhPmSeUHLSDKAEtKuTaEtK4Ms15zkIEA==} @@ -24046,8 +23704,8 @@ packages: resolution: {integrity: sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.12.1 - acorn-jsx: 5.3.2(acorn@8.12.1) + acorn: 8.14.1 + acorn-jsx: 5.3.2(acorn@8.14.1) eslint-visitor-keys: 3.4.2 /esprima@4.0.1: @@ -25430,7 +25088,7 @@ packages: /hast-util-to-jsx-runtime@2.3.6: resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 '@types/hast': 3.0.4 '@types/unist': 3.0.3 comma-separated-tokens: 2.0.3 @@ -25463,10 +25121,10 @@ packages: resolution: {integrity: sha512-UeR5q/hGY6o78wH9T5hBIdhTQ7kraw90jb+bhAuvcpEI6aEfzguYhNf33uxT2qbnOoSg8hFd0YCJtiEqujMPRg==} engines: {node: '>=16.0.0'} dependencies: - browserslist: 4.23.3 + browserslist: 4.24.4 generative-bayesian-network: 2.1.55 ow: 0.28.2 - tslib: 2.6.2 + tslib: 2.8.1 dev: false /headers-polyfill@4.0.2: @@ -25550,10 +25208,11 @@ packages: resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==} engines: {node: '>= 14'} dependencies: - agent-base: 7.1.0 + agent-base: 7.1.1 debug: 4.4.0(supports-color@10.0.0) transitivePeerDependencies: - supports-color + dev: true /http-proxy-agent@7.0.2: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} @@ -25592,6 +25251,7 @@ packages: debug: 4.4.0(supports-color@10.0.0) transitivePeerDependencies: - supports-color + dev: true /https-proxy-agent@7.0.5: resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} @@ -25701,16 +25361,16 @@ packages: /import-in-the-middle@1.7.1: resolution: {integrity: sha512-1LrZPDtW+atAxH42S6288qyDFNQ2YCty+2mxEPRtfazH6Z5QwkaBSTS2ods7hnVJioF6rkRfNoA6A/MstpFXLg==} dependencies: - acorn: 8.12.1 - acorn-import-assertions: 1.9.0(acorn@8.12.1) + acorn: 8.14.1 + acorn-import-assertions: 1.9.0(acorn@8.14.1) cjs-module-lexer: 1.2.3 module-details-from-path: 1.0.3 /import-in-the-middle@1.7.4: resolution: {integrity: sha512-Lk+qzWmiQuRPPulGQeK5qq0v32k2bHnWrRPFgqyvhw7Kkov5L6MOLOIU3pcWeujc9W4q54Cp3Q2WV16eQkc7Bg==} dependencies: - acorn: 8.12.1 - acorn-import-attributes: 1.9.5(acorn@8.12.1) + acorn: 8.14.1 + acorn-import-attributes: 1.9.5(acorn@8.14.1) cjs-module-lexer: 1.2.3 module-details-from-path: 1.0.3 dev: true @@ -26427,6 +26087,7 @@ packages: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} hasBin: true + dev: true /jsesc@3.0.2: resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} @@ -26438,7 +26099,6 @@ packages: resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} engines: {node: '>=6'} hasBin: true - dev: true /json-buffer@3.0.0: resolution: {integrity: sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==} @@ -26584,7 +26244,7 @@ packages: engines: {node: '>=14.0.0'} dev: false - /langsmith@0.2.15(openai@4.68.4): + /langsmith@0.2.15(openai@4.97.0): resolution: {integrity: sha512-homtJU41iitqIZVuuLW7iarCzD4f39KcfP9RTBWav9jifhrsDa1Ez89Ejr+4qi72iuBu8Y5xykchsGVgiEZ93w==} peerDependencies: openai: '*' @@ -26594,7 +26254,7 @@ packages: dependencies: '@types/uuid': 10.0.0 commander: 10.0.1 - openai: 4.68.4(zod@3.23.8) + openai: 4.97.0(zod@3.23.8) p-queue: 6.6.2 p-retry: 4.6.2 semver: 7.6.3 @@ -26958,6 +26618,7 @@ packages: /lodash.isequal@4.5.0: resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead. dev: false /lodash.isfunction@3.0.9: @@ -27011,6 +26672,7 @@ packages: /long@4.0.0: resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} + dev: false /long@5.2.3: resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} @@ -27098,14 +26760,6 @@ packages: react: 18.3.1 dev: false - /lucide-react@0.484.0(react@19.0.0): - resolution: {integrity: sha512-oZy8coK9kZzvqhSgfbGkPtTgyjpBvs3ukLgDPv14dSOZtBtboryWF5o8i3qen7QbGg7JhiJBz5mK1p8YoMZTLQ==} - peerDependencies: - react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 - dependencies: - react: 19.0.0 - dev: false - /lucide-react@0.486.0(react@19.0.0): resolution: {integrity: sha512-xWop/wMsC1ikiEVLZrxXjPKw4vU/eAip33G2mZHgbWnr4Nr5Rt4Vx4s/q1D3B/rQVbxjOuqASkEZcUxDEKzecw==} peerDependencies: @@ -27522,7 +27176,7 @@ packages: /media-query-parser@2.0.2: resolution: {integrity: sha512-1N4qp+jE0pL5Xv4uEcwVUhIkwdUO3S/9gML90nqKA7v7FcOS5vUtatfzok9S9U1EJU8dHWlcv95WLnKmmxZI9w==} dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 dev: true /media-typer@0.3.0: @@ -27678,8 +27332,8 @@ packages: /micromark-extension-mdxjs@1.0.0: resolution: {integrity: sha512-TZZRZgeHvtgm+IhtgC2+uDMR7h8eTKF0QUX9YsgoL9+bADBpBY6SiLvWqnBlLbCEevITmTqmEuY3FoxMKVs1rQ==} dependencies: - acorn: 8.12.1 - acorn-jsx: 5.3.2(acorn@8.12.1) + acorn: 8.14.1 + acorn-jsx: 5.3.2(acorn@8.14.1) micromark-extension-mdx-expression: 1.0.3 micromark-extension-mdx-jsx: 1.0.3 micromark-extension-mdx-md: 1.0.0 @@ -28096,13 +27750,13 @@ packages: hasBin: true dependencies: '@cspotcode/source-map-support': 0.8.1 - acorn: 8.12.1 + acorn: 8.14.1 acorn-walk: 8.3.2 capnp-ts: 0.7.0 exit-hook: 2.2.1 glob-to-regexp: 0.4.1 stoppable: 1.1.0 - undici: 5.28.4 + undici: 5.29.0 workerd: 1.20240806.0 ws: 8.18.0(bufferutil@4.0.9) youch: 3.3.3 @@ -28376,7 +28030,7 @@ packages: outvariant: 1.4.2 path-to-regexp: 6.2.1 strict-event-emitter: 0.5.1 - type-fest: 4.10.3 + type-fest: 4.33.0 typescript: 5.5.4 yargs: 17.7.2 dev: false @@ -28402,14 +28056,9 @@ packages: object-assign: 4.1.1 thenify-all: 1.6.0 - /nan@2.20.0: - resolution: {integrity: sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==} - dev: false - /nan@2.22.2: resolution: {integrity: sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==} requiresBuild: true - optional: true /nano-css@5.3.5(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-vSB9X12bbNu4ALBu7nigJgRViZ6ja3OU7CeuiV1zMIbXOdmkLahgtPmh3GBOlDxbKY0CitqlPdOReGlBLSp+yg==} @@ -28429,12 +28078,6 @@ packages: stylis: 4.3.0 dev: false - /nanoid@3.3.6: - resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: false - /nanoid@3.3.8: resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -28530,7 +28173,7 @@ packages: - babel-plugin-macros dev: false - /next@14.2.21(@opentelemetry/api@1.9.0)(@playwright/test@1.37.0)(react-dom@18.2.0)(react@18.3.1): + /next@14.2.21(@opentelemetry/api@1.9.0)(@playwright/test@1.37.0)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-rZmLwucLHr3/zfDMYbJXbw0ZeoBpirxkXuvsJbk7UPorvPYZhP7vq7aHbKnU7dQNCYIimRrbB2pp3xmf+wsYUg==} engines: {node: '>=18.17.0'} hasBin: true @@ -28553,11 +28196,11 @@ packages: '@playwright/test': 1.37.0 '@swc/helpers': 0.5.5 busboy: 1.6.0 - caniuse-lite: 1.0.30001699 + caniuse-lite: 1.0.30001707 graceful-fs: 4.2.11 postcss: 8.4.31 react: 18.3.1 - react-dom: 18.2.0(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) styled-jsx: 5.1.1(react@18.3.1) optionalDependencies: '@next/swc-darwin-arm64': 14.2.21 @@ -28769,10 +28412,6 @@ packages: resolution: {integrity: sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==} dev: true - /node-releases@2.0.18: - resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} - dev: false - /node-releases@2.0.19: resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} @@ -29160,48 +28799,6 @@ packages: - encoding dev: false - /openai@4.56.0(zod@3.23.8): - resolution: {integrity: sha512-zcag97+3bG890MNNa0DQD9dGmmTWL8unJdNkulZzWRXrl+QeD+YkBI4H58rJcwErxqGK6a0jVPZ4ReJjhDGcmw==} - hasBin: true - peerDependencies: - zod: ^3.23.8 - peerDependenciesMeta: - zod: - optional: true - dependencies: - '@types/node': 18.19.20 - '@types/node-fetch': 2.6.4 - abort-controller: 3.0.0 - agentkeepalive: 4.5.0 - form-data-encoder: 1.7.2 - formdata-node: 4.4.1 - node-fetch: 2.6.12 - zod: 3.23.8 - transitivePeerDependencies: - - encoding - dev: false - - /openai@4.68.4(zod@3.23.8): - resolution: {integrity: sha512-LRinV8iU9VQplkr25oZlyrsYGPGasIwYN8KFMAAFTHHLHjHhejtJ5BALuLFrkGzY4wfbKhOhuT+7lcHZ+F3iEA==} - hasBin: true - peerDependencies: - zod: ^3.23.8 - peerDependenciesMeta: - zod: - optional: true - dependencies: - '@types/node': 18.19.20 - '@types/node-fetch': 2.6.4 - abort-controller: 3.0.0 - agentkeepalive: 4.5.0 - form-data-encoder: 1.7.2 - formdata-node: 4.4.1 - node-fetch: 2.6.12 - zod: 3.23.8 - transitivePeerDependencies: - - encoding - dev: false - /openai@4.97.0(zod@3.23.8): resolution: {integrity: sha512-LRoiy0zvEf819ZUEJhgfV8PfsE8G5WpQi4AwA1uCV8SKvvtXQkoWUFkepD6plqyJQRghy2+AEPQ07FrJFKHZ9Q==} hasBin: true @@ -30277,15 +29874,6 @@ packages: picocolors: 1.1.1 source-map-js: 1.2.1 - /postcss@8.4.44: - resolution: {integrity: sha512-Aweb9unOEpQ3ezu4Q00DPvvM2ZTUitJdNKeP/+uQgr1IBIqu574IaZoURId7BKtWMREwzKa9OgzPzezWGPWFQw==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.8 - picocolors: 1.1.1 - source-map-js: 1.2.0 - dev: true - /postcss@8.5.3: resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} engines: {node: ^10 || ^12 || >=14} @@ -30710,6 +30298,7 @@ packages: typed-query-selector: 2.12.0 ws: 8.18.0(bufferutil@4.0.9) transitivePeerDependencies: + - bare-buffer - bufferutil - supports-color - utf-8-validate @@ -30728,6 +30317,7 @@ packages: puppeteer-core: 23.4.0 typed-query-selector: 2.12.0 transitivePeerDependencies: + - bare-buffer - bufferutil - supports-color - typescript @@ -30780,9 +30370,6 @@ packages: /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - /queue-tick@1.0.1: - resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} - /quick-lru@4.0.1: resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} engines: {node: '>=8'} @@ -30844,7 +30431,7 @@ packages: requiresBuild: true dependencies: install-artifact-from-github: 1.3.5 - nan: 2.20.0 + nan: 2.22.2 node-gyp: 10.2.0 transitivePeerDependencies: - supports-color @@ -30968,7 +30555,17 @@ packages: dependencies: loose-envify: 1.4.0 react: 18.3.1 - scheduler: 0.23.0 + scheduler: 0.23.2 + dev: false + + /react-dom@18.3.1(react@18.3.1): + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 + dependencies: + loose-envify: 1.4.0 + react: 18.3.1 + scheduler: 0.23.2 dev: false /react-dom@18.3.1(react@19.0.0-rc.0): @@ -31353,7 +30950,7 @@ packages: react: '>=16.6.0' react-dom: '>=16.6.0' dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -31639,7 +31236,7 @@ packages: /regenerator-transform@0.15.1: resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==} dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 dev: true /regexp-to-ast@0.5.0: @@ -32153,7 +31750,7 @@ packages: /rtl-css-js@1.16.1: resolution: {integrity: sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==} dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 dev: false /run-applescript@7.0.0: @@ -32189,7 +31786,7 @@ packages: resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} requiresBuild: true dependencies: - tslib: 2.6.2 + tslib: 2.8.1 dev: true optional: true @@ -32819,6 +32416,7 @@ packages: /source-map-js@1.2.0: resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} + dev: false /source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} @@ -33051,15 +32649,6 @@ packages: engines: {node: '>=10.0.0'} dev: false - /streamx@2.20.1: - resolution: {integrity: sha512-uTa0mU6WUC65iUvzKH4X9hEdvSW7rbPxPtwfWiLMSj3qTdQbAiUboZTxauKfpFuGIGa1C2BYijZ7wgdUXICJhA==} - dependencies: - fast-fifo: 1.3.2 - queue-tick: 1.0.1 - text-decoder: 1.2.0 - optionalDependencies: - bare-events: 2.5.4 - /streamx@2.22.0: resolution: {integrity: sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==} requiresBuild: true @@ -33068,8 +32657,6 @@ packages: text-decoder: 1.2.0 optionalDependencies: bare-events: 2.5.4 - dev: true - optional: true /strict-event-emitter@0.5.1: resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} @@ -33218,7 +32805,7 @@ packages: /strip-literal@1.0.1: resolution: {integrity: sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==} dependencies: - acorn: 8.12.1 + acorn: 8.14.1 dev: true /strip-literal@2.1.0: @@ -33232,7 +32819,7 @@ packages: engines: {node: '>=12.*'} dependencies: '@types/node': 20.14.14 - qs: 6.11.0 + qs: 6.14.0 dev: false /strnum@1.0.5: @@ -33516,17 +33103,13 @@ packages: /tailwind-merge@2.2.0: resolution: {integrity: sha512-SqqhhaL0T06SW59+JVNfAqKdqLs0497esifRrZ7jOaefP3o64fdFNDMrAQWZFMxTLJPiHVjRLUywT8uFz1xNWQ==} dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.27.0 dev: false /tailwind-merge@2.5.3: resolution: {integrity: sha512-d9ZolCAIzom1nf/5p4LdD5zvjmgSxY0BGgdSvmXIoMYAiPdAW/dSpP7joCDYFY7r/HkEa2qmPtkgsu0xjQeQtw==} dev: false - /tailwind-merge@3.0.2: - resolution: {integrity: sha512-l7z+OYZ7mu3DTqrL88RiKrKIqO3NcpEO8V/Od04bNpvk0kiIFndGEoqfuzvj4yuhRkHKjRkII2z+KS2HfPcSxw==} - dev: false - /tailwind-merge@3.1.0: resolution: {integrity: sha512-aV27Oj8B7U/tAOMhJsSGdWqelfmudnGMdXIlMnk1JfsjwSjts6o8HyfN7SFH3EztzH4YH8kk6GbLTHzITJO39Q==} dev: false @@ -33691,16 +33274,6 @@ packages: tar-stream: 2.2.0 dev: true - /tar-fs@3.0.6: - resolution: {integrity: sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==} - dependencies: - pump: 3.0.0 - tar-stream: 3.1.7 - optionalDependencies: - bare-fs: 2.3.5 - bare-path: 2.1.3 - dev: false - /tar-fs@3.0.8: resolution: {integrity: sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg==} dependencies: @@ -33711,7 +33284,6 @@ packages: bare-path: 3.0.0 transitivePeerDependencies: - bare-buffer - dev: true /tar-stream@2.2.0: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} @@ -33728,7 +33300,7 @@ packages: dependencies: b4a: 1.6.6 fast-fifo: 1.3.2 - streamx: 2.20.1 + streamx: 2.22.0 /tar@6.1.13: resolution: {integrity: sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==} @@ -33858,7 +33430,7 @@ packages: hasBin: true dependencies: '@jridgewell/source-map': 0.3.3 - acorn: 8.12.1 + acorn: 8.14.1 commander: 2.20.3 source-map-support: 0.5.21 dev: false @@ -34250,7 +33822,7 @@ packages: '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.3 '@types/node': 20.14.14 - acorn: 8.12.1 + acorn: 8.14.1 acorn-walk: 8.3.2 arg: 4.1.3 create-require: 1.1.1 @@ -34374,6 +33946,7 @@ packages: /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + dev: false /tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -34454,17 +34027,6 @@ packages: fsevents: 2.3.3 dev: true - /tsx@4.19.3: - resolution: {integrity: sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ==} - engines: {node: '>=18.0.0'} - hasBin: true - dependencies: - esbuild: 0.25.1 - get-tsconfig: 4.7.6 - optionalDependencies: - fsevents: 2.3.3 - dev: true - /tsx@4.7.1: resolution: {integrity: sha512-8d6VuibXHtlN5E3zFkgY8u4DX7Y3Z27zvvPKVmLon/D4AjuKzarkUBTLDBgj9iTQ0hg5xM7c/mYiRVM+HETf0g==} engines: {node: '>=18.0.0'} @@ -34611,11 +34173,6 @@ packages: engines: {node: '>=12.20'} dev: false - /type-fest@4.10.3: - resolution: {integrity: sha512-JLXyjizi072smKGGcZiAJDCNweT8J+AuRxmPZ1aG7TERg4ijx9REl8CNhbr36RV4qXqL1gO1FF9HL8OkVmmrsA==} - engines: {node: '>=16'} - dev: false - /type-fest@4.33.0: resolution: {integrity: sha512-s6zVrxuyKbbAsSAD5ZPTB77q4YIdRctkTbJ2/Dqlinwz+8ooH2gd+YA7VA6Pa93KML9GockVvoxjZ2vHP+mu8g==} engines: {node: '>=16'} @@ -34698,7 +34255,7 @@ packages: resolution: {integrity: sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==} dev: false - /typeorm@0.3.20(pg@8.11.5)(ts-node@10.9.2): + /typeorm@0.3.20(pg@8.15.6)(ts-node@10.9.2): resolution: {integrity: sha512-sJ0T08dV5eoZroaq9uPKBoNcGslHBR4E4y+EBHs//SiGbblGe7IeduP/IH4ddCcj0qp3PHwDwGnuvqEAnKlq/Q==} engines: {node: '>=16.13.0'} hasBin: true @@ -34762,16 +34319,16 @@ packages: chalk: 4.1.2 cli-highlight: 2.1.11 dayjs: 1.11.13 - debug: 4.3.4 + debug: 4.4.0(supports-color@10.0.0) dotenv: 16.4.7 - glob: 10.3.10 + glob: 10.4.5 mkdirp: 2.1.6 - pg: 8.11.5 + pg: 8.15.6 reflect-metadata: 0.2.2 sha.js: 2.4.11 ts-node: 10.9.2(@types/node@20.14.14)(typescript@5.5.4) - tslib: 2.6.2 - uuid: 9.0.0 + tslib: 2.8.1 + uuid: 9.0.1 yargs: 17.7.2 transitivePeerDependencies: - supports-color @@ -34856,7 +34413,6 @@ packages: engines: {node: '>=14.0'} dependencies: '@fastify/busboy': 2.0.0 - dev: true /unenv-nightly@1.10.0-1717606461.a117952: resolution: {integrity: sha512-u3TfBX02WzbHTpaEfWEKwDijDSFAHcgXkayUZ+MVDrjhLFvgAJzFGTSTmwlEhwWi2exyRQey23ah9wELMM6etg==} @@ -35054,7 +34610,7 @@ packages: /unplugin@1.0.1: resolution: {integrity: sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA==} dependencies: - acorn: 8.12.1 + acorn: 8.14.1 chokidar: 3.6.0 webpack-sources: 3.2.3 webpack-virtual-modules: 0.5.0 @@ -35071,17 +34627,6 @@ packages: picocolors: 1.1.1 dev: true - /update-browserslist-db@1.1.0(browserslist@4.23.3): - resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - dependencies: - browserslist: 4.23.3 - escalade: 3.2.0 - picocolors: 1.1.1 - dev: false - /update-browserslist-db@1.1.2(browserslist@4.24.4): resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==} hasBin: true @@ -35118,7 +34663,7 @@ packages: '@uploadthing/mime-types': 0.3.0 '@uploadthing/shared': 7.0.3 effect: 3.7.2 - next: 14.2.21(@opentelemetry/api@1.9.0)(@playwright/test@1.37.0)(react-dom@18.2.0)(react@18.3.1) + next: 14.2.21(@opentelemetry/api@1.9.0)(@playwright/test@1.37.0)(react-dom@18.3.1)(react@18.3.1) tailwindcss: 3.4.1(ts-node@10.9.1) dev: false @@ -36005,7 +35550,7 @@ packages: hasBin: true dependencies: '@discoveryjs/json-ext': 0.5.7 - acorn: 8.12.1 + acorn: 8.14.1 acorn-walk: 8.3.2 commander: 7.2.0 debounce: 1.2.1 @@ -36045,8 +35590,8 @@ packages: '@webassemblyjs/ast': 1.11.5 '@webassemblyjs/wasm-edit': 1.11.5 '@webassemblyjs/wasm-parser': 1.11.5 - acorn: 8.12.1 - acorn-import-assertions: 1.9.0(acorn@8.12.1) + acorn: 8.14.1 + acorn-import-assertions: 1.9.0(acorn@8.14.1) browserslist: 4.24.4 chrome-trace-event: 1.0.3 enhanced-resolve: 5.18.1 @@ -36556,14 +36101,6 @@ packages: zod: 3.23.8 dev: false - /zod-to-json-schema@3.23.2(zod@3.23.8): - resolution: {integrity: sha512-uSt90Gzc/tUfyNqxnjlfBs8W6WSGpNBv0rVsNxP/BVSMHMKGdthPYff4xtCHYloJGM0CFxFsb3NbC0eqPhfImw==} - peerDependencies: - zod: ^3.23.3 - dependencies: - zod: 3.23.8 - dev: false - /zod-to-json-schema@3.24.3(zod@3.23.8): resolution: {integrity: sha512-HIAfWdYIt1sssHfYZFCXp4rU1w2r8hVVXYIlmoa0r0gABLs5di3RCqPU5DDROogVz1pAdYBaz7HK5n9pSUNs3A==} peerDependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index a97140d11e..b93b689690 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -2,6 +2,6 @@ packages: - "packages/*" - "internal-packages/*" - "apps/**" - - "references/*" + - "test-projects/*" - "docs" - "!packages/cli-v3/e2e/**" diff --git a/references/bun-catalog/.env.example b/references/bun-catalog/.env.example deleted file mode 100644 index 9001181b66..0000000000 --- a/references/bun-catalog/.env.example +++ /dev/null @@ -1,3 +0,0 @@ -TRIGGER_SECRET_KEY= -TRIGGER_API_URL= -OPENAI_API_KEY="My API Key" \ No newline at end of file diff --git a/references/bun-catalog/package.json b/references/bun-catalog/package.json deleted file mode 100644 index 519296c6ca..0000000000 --- a/references/bun-catalog/package.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "references-bun-catalog", - "private": true, - "type": "module", - "scripts": { - "dev:trigger": "trigger dev", - "deploy": "trigger deploy" - }, - "dependencies": { - "@trigger.dev/sdk": "workspace:*" - }, - "devDependencies": { - "@types/bun": "^1.1.6", - "trigger.dev": "workspace:*" - } -} \ No newline at end of file diff --git a/references/bun-catalog/src/trigger/bun.ts b/references/bun-catalog/src/trigger/bun.ts deleted file mode 100644 index ef6e8d9f25..0000000000 --- a/references/bun-catalog/src/trigger/bun.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Database } from "bun:sqlite"; -import { task } from "@trigger.dev/sdk/v3"; - -export const bunTask = task({ - id: "bun-task", - run: async (payload: { query: string }) => { - const db = new Database(":memory:"); - const query = db.query("select 'Hello world' as message;"); - console.log(query.get()); // => { message: "Hello world" } - - return { - message: "Query executed", - bunVersion: Bun.version, - }; - }, -}); diff --git a/references/bun-catalog/trigger.config.ts b/references/bun-catalog/trigger.config.ts deleted file mode 100644 index a2deb7398e..0000000000 --- a/references/bun-catalog/trigger.config.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { defineConfig } from "@trigger.dev/sdk/v3"; - -export default defineConfig({ - runtime: "bun", - project: "proj_uxbxncnbsyamyxeqtucu", - maxDuration: 3600, - machine: "small-2x", - retries: { - enabledInDev: true, - default: { - maxAttempts: 4, - minTimeoutInMs: 10000, - maxTimeoutInMs: 10000, - factor: 2, - randomize: true, - }, - }, - enableConsoleLogging: false, - logLevel: "info", - onStart: async (payload, { ctx }) => { - console.log(`Task ${ctx.task.id} started ${ctx.run.id}`); - }, - onFailure: async (payload, error, { ctx }) => { - console.log(`Task ${ctx.task.id} failed ${ctx.run.id}`); - }, -}); diff --git a/references/d3-openai-agents/.gitignore b/references/d3-openai-agents/.gitignore deleted file mode 100644 index 5ef6a52078..0000000000 --- a/references/d3-openai-agents/.gitignore +++ /dev/null @@ -1,41 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.* -.yarn/* -!.yarn/patches -!.yarn/plugins -!.yarn/releases -!.yarn/versions - -# testing -/coverage - -# next.js -/.next/ -/out/ - -# production -/build - -# misc -.DS_Store -*.pem - -# debug -npm-debug.log* -yarn-debug.log* -yarn-error.log* -.pnpm-debug.log* - -# env files (can opt-in for committing if needed) -.env* - -# vercel -.vercel - -# typescript -*.tsbuildinfo -next-env.d.ts diff --git a/references/d3-openai-agents/components.json b/references/d3-openai-agents/components.json deleted file mode 100644 index ffe928f5b6..0000000000 --- a/references/d3-openai-agents/components.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "$schema": "https://ui.shadcn.com/schema.json", - "style": "new-york", - "rsc": true, - "tsx": true, - "tailwind": { - "config": "", - "css": "src/app/globals.css", - "baseColor": "neutral", - "cssVariables": true, - "prefix": "" - }, - "aliases": { - "components": "@/components", - "utils": "@/lib/utils", - "ui": "@/components/ui", - "lib": "@/lib", - "hooks": "@/hooks" - }, - "iconLibrary": "lucide" -} \ No newline at end of file diff --git a/references/d3-openai-agents/next.config.ts b/references/d3-openai-agents/next.config.ts deleted file mode 100644 index e9ffa3083a..0000000000 --- a/references/d3-openai-agents/next.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type { NextConfig } from "next"; - -const nextConfig: NextConfig = { - /* config options here */ -}; - -export default nextConfig; diff --git a/references/d3-openai-agents/package.json b/references/d3-openai-agents/package.json deleted file mode 100644 index b405b9d83e..0000000000 --- a/references/d3-openai-agents/package.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "name": "references-d3-openai-agents", - "version": "0.1.0", - "private": true, - "scripts": { - "dev": "next dev", - "build": "next build", - "start": "next start", - "lint": "next lint", - "dev:trigger": "trigger dev", - "deploy": "pnpm run python:compile-requirements && trigger deploy", - "python:install-requirements": "uv pip sync requirements.txt", - "python:compile-requirements": "uv pip compile requirements.in -o requirements.txt", - "python:install": "pnpm run python:compile-requirements && pnpm run python:install-requirements", - "python:create-env": "uv venv .venv", - "db:migrate": "tsx -r dotenv/config src/lib/migrate.ts up", - "db:migrate:down": "tsx -r dotenv/config src/lib/migrate.ts down" - }, - "dependencies": { - "@ai-sdk/openai": "1.3.3", - "@slack/web-api": "^6.8.1", - "@trigger.dev/python": "workspace:*", - "@trigger.dev/react-hooks": "workspace:*", - "@trigger.dev/sdk": "workspace:*", - "@vercel/postgres": "^0.10.0", - "ai": "4.2.5", - "class-variance-authority": "^0.7.1", - "clsx": "^2.1.1", - "lucide-react": "^0.484.0", - "nanoid": "^5.1.5", - "next": "15.2.4", - "react": "^19.0.0", - "react-dom": "^19.0.0", - "tailwind-merge": "^3.0.2", - "tw-animate-css": "^1.2.4", - "zod": "3.23.8", - "zod-to-json-schema": "^3.24.5" - }, - "devDependencies": { - "@tailwindcss/postcss": "^4", - "@trigger.dev/build": "workspace:*", - "@types/node": "^20", - "@types/react": "^19", - "@types/react-dom": "^19", - "dotenv": "16.4.7", - "tailwindcss": "^4.0.17", - "trigger.dev": "workspace:*", - "tsx": "4.19.3", - "typescript": "^5" - } -} \ No newline at end of file diff --git a/references/d3-openai-agents/postcss.config.mjs b/references/d3-openai-agents/postcss.config.mjs deleted file mode 100644 index c7bcb4b1ee..0000000000 --- a/references/d3-openai-agents/postcss.config.mjs +++ /dev/null @@ -1,5 +0,0 @@ -const config = { - plugins: ["@tailwindcss/postcss"], -}; - -export default config; diff --git a/references/d3-openai-agents/public/file.svg b/references/d3-openai-agents/public/file.svg deleted file mode 100644 index 004145cddf..0000000000 --- a/references/d3-openai-agents/public/file.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/references/d3-openai-agents/public/globe.svg b/references/d3-openai-agents/public/globe.svg deleted file mode 100644 index 567f17b0d7..0000000000 --- a/references/d3-openai-agents/public/globe.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/references/d3-openai-agents/public/next.svg b/references/d3-openai-agents/public/next.svg deleted file mode 100644 index 5174b28c56..0000000000 --- a/references/d3-openai-agents/public/next.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/references/d3-openai-agents/public/vercel.svg b/references/d3-openai-agents/public/vercel.svg deleted file mode 100644 index 7705396033..0000000000 --- a/references/d3-openai-agents/public/vercel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/references/d3-openai-agents/public/window.svg b/references/d3-openai-agents/public/window.svg deleted file mode 100644 index b2b2a44f6e..0000000000 --- a/references/d3-openai-agents/public/window.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/references/d3-openai-agents/requirements.in b/references/d3-openai-agents/requirements.in deleted file mode 100644 index 0616e8d8d7..0000000000 --- a/references/d3-openai-agents/requirements.in +++ /dev/null @@ -1,5 +0,0 @@ -crawl4ai -playwright -openai-agents -urllib3<2.0.0 -logfire \ No newline at end of file diff --git a/references/d3-openai-agents/requirements.txt b/references/d3-openai-agents/requirements.txt deleted file mode 100644 index 5b1cfec6cc..0000000000 --- a/references/d3-openai-agents/requirements.txt +++ /dev/null @@ -1,309 +0,0 @@ -# This file was autogenerated by uv via the following command: -# uv pip compile requirements.in -o requirements.txt -aiofiles==24.1.0 - # via crawl4ai -aiohappyeyeballs==2.6.1 - # via aiohttp -aiohttp==3.11.14 - # via - # crawl4ai - # litellm -aiosignal==1.3.2 - # via aiohttp -aiosqlite==0.21.0 - # via crawl4ai -annotated-types==0.7.0 - # via pydantic -anyio==4.9.0 - # via - # httpx - # mcp - # openai - # sse-starlette - # starlette -attrs==25.3.0 - # via - # aiohttp - # jsonschema - # referencing -beautifulsoup4==4.13.3 - # via crawl4ai -certifi==2025.1.31 - # via - # httpcore - # httpx - # requests -cffi==1.17.1 - # via cryptography -charset-normalizer==3.4.1 - # via requests -click==8.1.8 - # via - # crawl4ai - # litellm - # nltk - # uvicorn -colorama==0.4.6 - # via - # crawl4ai - # griffe -crawl4ai==0.5.0.post8 - # via -r requirements.in -cryptography==44.0.2 - # via pyopenssl -cssselect==1.3.0 - # via crawl4ai -deprecated==1.2.18 - # via - # opentelemetry-api - # opentelemetry-exporter-otlp-proto-http - # opentelemetry-semantic-conventions -distro==1.9.0 - # via openai -executing==2.2.0 - # via logfire -fake-http-header==0.3.5 - # via tf-playwright-stealth -fake-useragent==2.1.0 - # via crawl4ai -faust-cchardet==2.1.19 - # via crawl4ai -filelock==3.18.0 - # via huggingface-hub -frozenlist==1.5.0 - # via - # aiohttp - # aiosignal -fsspec==2025.3.0 - # via huggingface-hub -googleapis-common-protos==1.69.2 - # via opentelemetry-exporter-otlp-proto-http -greenlet==3.1.1 - # via playwright -griffe==1.6.3 - # via openai-agents -h11==0.14.0 - # via - # httpcore - # uvicorn -httpcore==1.0.7 - # via httpx -httpx==0.28.1 - # via - # crawl4ai - # litellm - # mcp - # openai -httpx-sse==0.4.0 - # via mcp -huggingface-hub==0.29.3 - # via tokenizers -humanize==4.12.2 - # via crawl4ai -idna==3.10 - # via - # anyio - # httpx - # requests - # yarl -importlib-metadata==8.6.1 - # via - # litellm - # opentelemetry-api -jinja2==3.1.6 - # via litellm -jiter==0.9.0 - # via openai -joblib==1.4.2 - # via nltk -jsonschema==4.23.0 - # via litellm -jsonschema-specifications==2024.10.1 - # via jsonschema -litellm==1.64.1 - # via crawl4ai -logfire==3.11.0 - # via -r requirements.in -lxml==5.3.1 - # via crawl4ai -markdown-it-py==3.0.0 - # via rich -markupsafe==3.0.2 - # via jinja2 -mcp==1.5.0 - # via openai-agents -mdurl==0.1.2 - # via markdown-it-py -multidict==6.2.0 - # via - # aiohttp - # yarl -nltk==3.9.1 - # via crawl4ai -numpy==2.2.4 - # via - # crawl4ai - # rank-bm25 -openai==1.68.2 - # via - # litellm - # openai-agents -openai-agents==0.0.7 - # via -r requirements.in -opentelemetry-api==1.31.1 - # via - # opentelemetry-exporter-otlp-proto-http - # opentelemetry-instrumentation - # opentelemetry-sdk - # opentelemetry-semantic-conventions -opentelemetry-exporter-otlp-proto-common==1.31.1 - # via opentelemetry-exporter-otlp-proto-http -opentelemetry-exporter-otlp-proto-http==1.31.1 - # via logfire -opentelemetry-instrumentation==0.52b1 - # via logfire -opentelemetry-proto==1.31.1 - # via - # opentelemetry-exporter-otlp-proto-common - # opentelemetry-exporter-otlp-proto-http -opentelemetry-sdk==1.31.1 - # via - # logfire - # opentelemetry-exporter-otlp-proto-http -opentelemetry-semantic-conventions==0.52b1 - # via - # opentelemetry-instrumentation - # opentelemetry-sdk -packaging==24.2 - # via - # huggingface-hub - # opentelemetry-instrumentation -pillow==10.4.0 - # via crawl4ai -playwright==1.51.0 - # via - # -r requirements.in - # crawl4ai - # tf-playwright-stealth -propcache==0.3.1 - # via - # aiohttp - # yarl -protobuf==5.29.4 - # via - # googleapis-common-protos - # logfire - # opentelemetry-proto -psutil==7.0.0 - # via crawl4ai -pycparser==2.22 - # via cffi -pydantic==2.10.6 - # via - # crawl4ai - # litellm - # mcp - # openai - # openai-agents - # pydantic-settings -pydantic-core==2.27.2 - # via pydantic -pydantic-settings==2.8.1 - # via mcp -pyee==12.1.1 - # via playwright -pygments==2.19.1 - # via rich -pyopenssl==25.0.0 - # via crawl4ai -pyperclip==1.9.0 - # via crawl4ai -python-dotenv==1.1.0 - # via - # crawl4ai - # litellm - # pydantic-settings -pyyaml==6.0.2 - # via huggingface-hub -rank-bm25==0.2.2 - # via crawl4ai -referencing==0.36.2 - # via - # jsonschema - # jsonschema-specifications -regex==2024.11.6 - # via - # nltk - # tiktoken -requests==2.32.3 - # via - # crawl4ai - # huggingface-hub - # openai-agents - # opentelemetry-exporter-otlp-proto-http - # tiktoken -rich==13.9.4 - # via - # crawl4ai - # logfire -rpds-py==0.24.0 - # via - # jsonschema - # referencing -sniffio==1.3.1 - # via - # anyio - # openai -snowballstemmer==2.2.0 - # via crawl4ai -soupsieve==2.6 - # via beautifulsoup4 -sse-starlette==2.2.1 - # via mcp -starlette==0.46.1 - # via - # mcp - # sse-starlette -tf-playwright-stealth==1.1.2 - # via crawl4ai -tiktoken==0.9.0 - # via litellm -tokenizers==0.21.1 - # via litellm -tqdm==4.67.1 - # via - # huggingface-hub - # nltk - # openai -types-requests==2.31.0.6 - # via openai-agents -types-urllib3==1.26.25.14 - # via types-requests -typing-extensions==4.13.0 - # via - # aiosqlite - # beautifulsoup4 - # huggingface-hub - # logfire - # openai - # openai-agents - # opentelemetry-sdk - # pydantic - # pydantic-core - # pyee -urllib3==1.26.20 - # via - # -r requirements.in - # requests -uvicorn==0.34.0 - # via mcp -wrapt==1.17.2 - # via - # deprecated - # opentelemetry-instrumentation -xxhash==3.5.0 - # via crawl4ai -yarl==1.18.3 - # via aiohttp -zipp==3.21.0 - # via importlib-metadata diff --git a/references/d3-openai-agents/src/app/api/slack/interaction/route.ts b/references/d3-openai-agents/src/app/api/slack/interaction/route.ts deleted file mode 100644 index a5e18f81b0..0000000000 --- a/references/d3-openai-agents/src/app/api/slack/interaction/route.ts +++ /dev/null @@ -1,79 +0,0 @@ -import { NextResponse } from "next/server"; -import { wait, auth } from "@trigger.dev/sdk"; - -// Verify Slack requests middleware -function verifySlackRequest(request: Request) { - // TODO: Implement Slack request verification using signing secret - // https://api.slack.com/authentication/verifying-requests-from-slack - return true; -} - -export async function POST(request: Request) { - // Verify the request is from Slack - if (!verifySlackRequest(request)) { - return new NextResponse("Unauthorized", { status: 401 }); - } - - try { - // Parse the urlencoded body from Slack - const formData = await request.formData(); - const payload = JSON.parse(formData.get("payload") as string); - - console.log("Received Slack payload:", JSON.stringify(payload, null, 2)); - - // Extract the action and values - const action = payload.actions[0]; - const value = JSON.parse(action.value); - const { tokenId, publicAccessToken, action: actionType } = value; - - console.log("Parsed action values:", { tokenId, actionType }); - - await auth.withAuth({ accessToken: publicAccessToken }, async () => { - // Complete the token based on the action - if (actionType === "approve") { - console.log("Completing token with approval"); - await wait.completeToken(tokenId, { approved: true }); - } else if (actionType === "deny") { - console.log("Completing token with denial"); - await wait.completeToken(tokenId, { approved: false }); - } - }); - - // Update the message to show it's been processed - const blocks = payload.message.blocks.filter((block: any) => block.type !== "actions"); - blocks.push({ - type: "context", - elements: [ - { - type: "mrkdwn", - text: `✅ ${actionType === "approve" ? "Approved" : "Denied"} by <@${ - payload.user.id - }> at ${new Date().toLocaleTimeString()}`, - }, - ], - }); - - // Send the update to Slack's response_url - const updateResponse = await fetch(payload.response_url, { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify({ - replace_original: true, - text: actionType === "approve" ? "Query approved" : "Query denied", - blocks, - }), - }); - - if (!updateResponse.ok) { - console.error("Failed to update Slack message:", await updateResponse.text()); - } - - // Return an empty 200 OK response - return new NextResponse(null, { status: 200 }); - } catch (error) { - console.error("Error processing Slack interaction:", error); - return new NextResponse("Internal Server Error", { status: 500 }); - } -} diff --git a/references/d3-openai-agents/src/app/globals.css b/references/d3-openai-agents/src/app/globals.css deleted file mode 100644 index dc98be74c4..0000000000 --- a/references/d3-openai-agents/src/app/globals.css +++ /dev/null @@ -1,122 +0,0 @@ -@import "tailwindcss"; -@import "tw-animate-css"; - -@custom-variant dark (&:is(.dark *)); - -@theme inline { - --color-background: var(--background); - --color-foreground: var(--foreground); - --font-sans: var(--font-geist-sans); - --font-mono: var(--font-geist-mono); - --color-sidebar-ring: var(--sidebar-ring); - --color-sidebar-border: var(--sidebar-border); - --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); - --color-sidebar-accent: var(--sidebar-accent); - --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); - --color-sidebar-primary: var(--sidebar-primary); - --color-sidebar-foreground: var(--sidebar-foreground); - --color-sidebar: var(--sidebar); - --color-chart-5: var(--chart-5); - --color-chart-4: var(--chart-4); - --color-chart-3: var(--chart-3); - --color-chart-2: var(--chart-2); - --color-chart-1: var(--chart-1); - --color-ring: var(--ring); - --color-input: var(--input); - --color-border: var(--border); - --color-destructive: var(--destructive); - --color-accent-foreground: var(--accent-foreground); - --color-accent: var(--accent); - --color-muted-foreground: var(--muted-foreground); - --color-muted: var(--muted); - --color-secondary-foreground: var(--secondary-foreground); - --color-secondary: var(--secondary); - --color-primary-foreground: var(--primary-foreground); - --color-primary: var(--primary); - --color-popover-foreground: var(--popover-foreground); - --color-popover: var(--popover); - --color-card-foreground: var(--card-foreground); - --color-card: var(--card); - --radius-sm: calc(var(--radius) - 4px); - --radius-md: calc(var(--radius) - 2px); - --radius-lg: var(--radius); - --radius-xl: calc(var(--radius) + 4px); -} - -:root { - --radius: 0.625rem; - --background: oklch(1 0 0); - --foreground: oklch(0.145 0 0); - --card: oklch(1 0 0); - --card-foreground: oklch(0.145 0 0); - --popover: oklch(1 0 0); - --popover-foreground: oklch(0.145 0 0); - --primary: oklch(0.205 0 0); - --primary-foreground: oklch(0.985 0 0); - --secondary: oklch(0.97 0 0); - --secondary-foreground: oklch(0.205 0 0); - --muted: oklch(0.97 0 0); - --muted-foreground: oklch(0.556 0 0); - --accent: oklch(0.97 0 0); - --accent-foreground: oklch(0.205 0 0); - --destructive: oklch(0.577 0.245 27.325); - --border: oklch(0.922 0 0); - --input: oklch(0.922 0 0); - --ring: oklch(0.708 0 0); - --chart-1: oklch(0.646 0.222 41.116); - --chart-2: oklch(0.6 0.118 184.704); - --chart-3: oklch(0.398 0.07 227.392); - --chart-4: oklch(0.828 0.189 84.429); - --chart-5: oklch(0.769 0.188 70.08); - --sidebar: oklch(0.985 0 0); - --sidebar-foreground: oklch(0.145 0 0); - --sidebar-primary: oklch(0.205 0 0); - --sidebar-primary-foreground: oklch(0.985 0 0); - --sidebar-accent: oklch(0.97 0 0); - --sidebar-accent-foreground: oklch(0.205 0 0); - --sidebar-border: oklch(0.922 0 0); - --sidebar-ring: oklch(0.708 0 0); -} - -.dark { - --background: oklch(0.145 0 0); - --foreground: oklch(0.985 0 0); - --card: oklch(0.205 0 0); - --card-foreground: oklch(0.985 0 0); - --popover: oklch(0.205 0 0); - --popover-foreground: oklch(0.985 0 0); - --primary: oklch(0.922 0 0); - --primary-foreground: oklch(0.205 0 0); - --secondary: oklch(0.269 0 0); - --secondary-foreground: oklch(0.985 0 0); - --muted: oklch(0.269 0 0); - --muted-foreground: oklch(0.708 0 0); - --accent: oklch(0.269 0 0); - --accent-foreground: oklch(0.985 0 0); - --destructive: oklch(0.704 0.191 22.216); - --border: oklch(1 0 0 / 10%); - --input: oklch(1 0 0 / 15%); - --ring: oklch(0.556 0 0); - --chart-1: oklch(0.488 0.243 264.376); - --chart-2: oklch(0.696 0.17 162.48); - --chart-3: oklch(0.769 0.188 70.08); - --chart-4: oklch(0.627 0.265 303.9); - --chart-5: oklch(0.645 0.246 16.439); - --sidebar: oklch(0.205 0 0); - --sidebar-foreground: oklch(0.985 0 0); - --sidebar-primary: oklch(0.488 0.243 264.376); - --sidebar-primary-foreground: oklch(0.985 0 0); - --sidebar-accent: oklch(0.269 0 0); - --sidebar-accent-foreground: oklch(0.985 0 0); - --sidebar-border: oklch(1 0 0 / 10%); - --sidebar-ring: oklch(0.556 0 0); -} - -@layer base { - * { - @apply border-border outline-ring/50; - } - body { - @apply bg-background text-foreground; - } -} diff --git a/references/d3-openai-agents/src/app/layout.tsx b/references/d3-openai-agents/src/app/layout.tsx deleted file mode 100644 index f7fa87eb87..0000000000 --- a/references/d3-openai-agents/src/app/layout.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import type { Metadata } from "next"; -import { Geist, Geist_Mono } from "next/font/google"; -import "./globals.css"; - -const geistSans = Geist({ - variable: "--font-geist-sans", - subsets: ["latin"], -}); - -const geistMono = Geist_Mono({ - variable: "--font-geist-mono", - subsets: ["latin"], -}); - -export const metadata: Metadata = { - title: "Create Next App", - description: "Generated by create next app", -}; - -export default function RootLayout({ - children, -}: Readonly<{ - children: React.ReactNode; -}>) { - return ( - - - {children} - - - ); -} diff --git a/references/d3-openai-agents/src/app/page.tsx b/references/d3-openai-agents/src/app/page.tsx deleted file mode 100644 index 8bb6d2b9a0..0000000000 --- a/references/d3-openai-agents/src/app/page.tsx +++ /dev/null @@ -1,8 +0,0 @@ -import MainApp from "@/components/main-app"; -import { auth } from "@trigger.dev/sdk"; - -export default async function Home() { - const publicAccessToken = await auth.createTriggerPublicToken("chat-example"); - - return ; -} diff --git a/references/d3-openai-agents/src/components/chat-interface.tsx b/references/d3-openai-agents/src/components/chat-interface.tsx deleted file mode 100644 index 75f2cc5b35..0000000000 --- a/references/d3-openai-agents/src/components/chat-interface.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { cn } from "@/lib/utils" - -interface Message { - role: "user" | "assistant" - content: string -} - -interface ChatInterfaceProps { - messages: Message[] -} - -export default function ChatInterface({ messages }: ChatInterfaceProps) { - return ( -
- {messages.map((message, index) => ( -
-
- {message.content} -
-
- ))} -
- ) -} - diff --git a/references/d3-openai-agents/src/components/initial-prompt.tsx b/references/d3-openai-agents/src/components/initial-prompt.tsx deleted file mode 100644 index bf76b6ff18..0000000000 --- a/references/d3-openai-agents/src/components/initial-prompt.tsx +++ /dev/null @@ -1,15 +0,0 @@ -export default function InitialPrompt() { - return ( -
-

Welcome to the Chatbot

-

Start a conversation by typing a message below.

-
- 💬 -
-

- This is a simulated chatbot interface. Your messages will receive automated responses. -

-
- ) -} - diff --git a/references/d3-openai-agents/src/components/main-app.tsx b/references/d3-openai-agents/src/components/main-app.tsx deleted file mode 100644 index fd10af527c..0000000000 --- a/references/d3-openai-agents/src/components/main-app.tsx +++ /dev/null @@ -1,131 +0,0 @@ -"use client"; - -import type React from "react"; - -import { useState } from "react"; -import { Send } from "lucide-react"; -import ChatInterface from "@/components/chat-interface"; -import InitialPrompt from "@/components/initial-prompt"; -import { useRealtimeTaskTriggerWithStreams, useWaitToken } from "@trigger.dev/react-hooks"; -import type { chatExample } from "@/trigger/chat"; -import { AgentLoopMetadata } from "@/trigger/schemas"; -import type { TextStreamPart } from "ai"; - -type ChatConversation = Array<{ role: "user" | "assistant"; content: string }>; - -type ResponseStreams = { - [K in `responses.${number | string}`]: TextStreamPart<{}>; -}; - -export function useChat({ publicAccessToken }: { publicAccessToken: string }) { - const triggerInstance = useRealtimeTaskTriggerWithStreams( - "chat-example", - { - accessToken: publicAccessToken, - baseURL: process.env.NEXT_PUBLIC_TRIGGER_API_URL, - } - ); - const [conversation, setConversation] = useState([]); - const [isLoading, setIsLoading] = useState(false); - const [waitToken, setWaitToken] = useState(null); - - const waitTokenInstance = useWaitToken(waitToken?.waitToken.id, { - enabled: !!waitToken?.waitToken.id, - accessToken: waitToken?.waitToken.publicAccessToken, - baseURL: process.env.NEXT_PUBLIC_TRIGGER_API_URL, - }); - - const waitTokenStream = waitToken?.waitToken.id - ? triggerInstance.streams[`responses.${waitToken?.waitToken.id}`] - : undefined; - - const textStream = waitTokenStream - ?.map((part) => { - if (part.type === "text-delta") { - return part.textDelta; - } - }) - .join(""); - - console.log("textStream", textStream); - - if (triggerInstance.run) { - console.log("run", triggerInstance.run); - - const metadata = AgentLoopMetadata.safeParse(triggerInstance.run.metadata); - - if (!metadata.success) { - console.error("Failed to parse metadata", metadata.error); - } else { - console.log("metadata", metadata.data); - - setWaitToken(metadata.data); - } - } - - return { - continueConversation: (prompt: string) => { - if (waitTokenInstance.isReady) { - waitTokenInstance.complete({ - message: prompt, - }); - } else { - const result = triggerInstance.submit({ - model: "gpt-4o-mini", - prompt, - }); - - setConversation((prev) => [...prev, { role: "user", content: prompt }]); - - return result; - } - }, - conversation, - isLoading, - }; -} - -export default function MainApp({ publicAccessToken }: { publicAccessToken: string }) { - const { continueConversation, conversation, isLoading } = useChat({ publicAccessToken }); - const [input, setInput] = useState(""); - - const handleSubmit = (e: React.FormEvent) => { - e.preventDefault(); - - if (!input.trim()) return; - - continueConversation(input); - setInput(""); - }; - - return ( -
-
-
- {conversation.length === 0 ? ( - - ) : ( - - )} -
- -
- setInput(e.target.value)} - placeholder="Type a message..." - className="flex-1 p-3 rounded-lg border border-gray-300 focus:outline-none focus:ring-2 focus:ring-primary" - /> - -
-
-
- ); -} diff --git a/references/d3-openai-agents/src/extensions/playwright.ts b/references/d3-openai-agents/src/extensions/playwright.ts deleted file mode 100644 index 178bed23d1..0000000000 --- a/references/d3-openai-agents/src/extensions/playwright.ts +++ /dev/null @@ -1,36 +0,0 @@ -import type { BuildContext, BuildExtension } from "@trigger.dev/build"; - -// This is a custom build extension to install Playwright and Chromium -export function installPlaywrightChromium(): BuildExtension { - return { - name: "InstallPlaywrightChromium", - onBuildComplete(context: BuildContext) { - const instructions = [ - // Base and Chromium dependencies - `RUN apt-get update && apt-get install -y --no-install-recommends \ - curl unzip npm libnspr4 libatk1.0-0 libatk-bridge2.0-0 libatspi2.0-0 \ - libasound2 libnss3 libxcomposite1 libxdamage1 libxfixes3 libxrandr2 \ - libgbm1 libxkbcommon0 \ - && apt-get clean && rm -rf /var/lib/apt/lists/*`, - - // Install Playwright and Chromium - `RUN npm install -g playwright`, - `RUN mkdir -p /ms-playwright`, - `RUN PLAYWRIGHT_BROWSERS_PATH=/ms-playwright python -m playwright install --with-deps chromium`, - ]; - - context.addLayer({ - id: "playwright", - image: { instructions }, - deploy: { - env: { - PLAYWRIGHT_BROWSERS_PATH: "/ms-playwright", - PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: "1", - PLAYWRIGHT_SKIP_BROWSER_VALIDATION: "1", - }, - override: true, - }, - }); - }, - }; -} diff --git a/references/d3-openai-agents/src/lib/migrate.ts b/references/d3-openai-agents/src/lib/migrate.ts deleted file mode 100644 index 7a32a1bc48..0000000000 --- a/references/d3-openai-agents/src/lib/migrate.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { sql } from "@vercel/postgres"; - -export async function migrate(direction: "up" | "down") { - if (direction === "up") { - await migrateUp(); - } else { - await migrateDown(); - } -} - -export async function migrateUp() { - const createTable = await sql` - CREATE TABLE IF NOT EXISTS todos ( - id VARCHAR(255) PRIMARY KEY, - user_id VARCHAR(255) NOT NULL, - title VARCHAR(255) NOT NULL, - description TEXT, - status VARCHAR(50) NOT NULL DEFAULT 'pending', - priority INTEGER NOT NULL DEFAULT 3, - due_date TIMESTAMP WITH TIME ZONE, - created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, - completed_at TIMESTAMP WITH TIME ZONE, - tags TEXT[], -- Array of tags - assigned_to VARCHAR(255) - ); - `; - - console.log(`Created "todos" table`); - - return { - createTable, - }; -} - -export async function migrateDown() { - const dropTable = await sql` - DROP TABLE IF EXISTS todos; - `; - - console.log(`Dropped "todos" table`); -} - -async function main() { - const direction = process.argv[2]; - await migrate(direction as "up" | "down"); -} - -main().catch(console.error); diff --git a/references/d3-openai-agents/src/trigger/approval.ts b/references/d3-openai-agents/src/trigger/approval.ts deleted file mode 100644 index ee6be8e2aa..0000000000 --- a/references/d3-openai-agents/src/trigger/approval.ts +++ /dev/null @@ -1,313 +0,0 @@ -import { openai } from "@ai-sdk/openai"; -import { logger, metadata, schemaTask, wait } from "@trigger.dev/sdk/v3"; -import { sql } from "@vercel/postgres"; -import { streamText, TextStreamPart } from "ai"; -import { nanoid } from "nanoid"; -import { z } from "zod"; -import { WebClient } from "@slack/web-api"; -import { QueryApproval } from "./schemas"; -import { tool } from "ai"; -import { ai } from "@trigger.dev/sdk/ai"; - -const queryApprovalTask = schemaTask({ - id: "query-approval", - description: "Get approval for a SQL query from an admin", - schema: z.object({ - userId: z.string().describe("The user_id to get approval for"), - input: z.string().describe("The input to get approval for"), - query: z.string().describe("The SQL query to execute"), - }), - run: async ({ userId, input, query }) => { - const toolOptions = ai.currentToolOptions(); - - if (toolOptions) { - logger.info("tool options", { - toolOptions, - }); - } - - const token = await wait.createToken({ - tags: [`user:${userId}`, "approval"], - timeout: "1m", - }); - - logger.info("waiting for approval", { - query, - }); - - await sendSQLApprovalMessage({ - query, - userId, - tokenId: token.id, - publicAccessToken: token.publicAccessToken, - input, - }); - - const result = await wait.forToken(token); - - if (!result.ok) { - return { - approved: false, - }; - } else { - if (result.output.approved) { - logger.info("query approved", { - query, - }); - } else { - logger.warn("query denied", { - query, - }); - } - - return { - approved: result.output.approved, - }; - } - }, -}); - -const queryApproval = ai.tool(queryApprovalTask); - -const executeSql = tool({ - description: "Use this tool to execute a SQL query", - parameters: z.object({ - query: z.string().describe("The SQL query to execute"), - }), - execute: async ({ query }) => { - return await sql.query(query); - }, -}); - -const generateId = tool({ - description: "Use this tool to generate a unique ID for a todo", - parameters: z.object({ - prefix: z.string().describe("The prefix for the ID (defaults to 'todo')").default("todo"), - }), - execute: async ({ prefix }) => { - return `${prefix}_${nanoid(12)}`; - }, -}); - -const getUserTodos = tool({ - description: "Use this tool to get all todos for a user", - parameters: z.object({ - userId: z.string().describe("The user_id to get todos for"), - }), - execute: async ({ userId }) => { - const result = await sql`SELECT * FROM todos WHERE user_id = ${userId}`; - - return result.rows; - }, -}); - -export type STREAM = { - ai: TextStreamPart<{ - queryApproval: typeof queryApproval; - executeSql: typeof executeSql; - generateId: typeof generateId; - getUserTodos: typeof getUserTodos; - }>; -}; - -export const generateAndExecuteSQL = schemaTask({ - id: "generate-and-execute-sql", - description: "Generate and execute SQL", - schema: z.object({ - model: z.string().default("gpt-4o"), - input: z.string().describe("The input to generate the SQL from"), - userId: z.string().describe("The user_id to generate the SQL for"), - }), - run: async ({ model, input, userId }) => { - const system = ` - You are a SQL (postgres) expert who can turn natural language descriptions for a todo app - into a SQL query which can then be executed against a SQL database. Here is the schema: - - CREATE TABLE IF NOT EXISTS todos ( - id VARCHAR(255) PRIMARY KEY, - user_id VARCHAR(255) NOT NULL, - title VARCHAR(255) NOT NULL, - description TEXT, - status VARCHAR(50) NOT NULL DEFAULT 'pending', - priority INTEGER NOT NULL DEFAULT 3, - due_date TIMESTAMP WITH TIME ZONE, - created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, - completed_at TIMESTAMP WITH TIME ZONE, - tags TEXT[], -- Array of tags - assigned_to VARCHAR(255) - ); - - Only Create, Read, Update, and Delete operations are allowed. - - The input will be a user_id and a prompt. - - The output will be a SQL query. - - If the query produced is a mutation, you will need to get approval first from an admin using the queryApproval tool. - If the queryApproval tool returns false, you will need to stop and return an error message. - If the queryApproval tool returns true, you will need to execute the query using the executeSql tool. - - The executeSql tool will return the results of the query - - The current time is ${new Date().toISOString()}. - - When creating a todo, you'll need to generate a unique ID for the todo, using the generateId tool. - For updates, you'll need to use the getUserTodos tool to find the todo first. - - IMPORTANT: Don't ask the user to provide any more information to help you generate the SQL query, do your best to generate the query based on the input alone. - - After successfully executing a mutation query, get the latest user todos and summarize them along with what has been updated. - After successfully executing a read query, summarize the results in a human readable format. - `; - - const prompt = ` - User ${userId} has the following prompt: ${input} - - Generate a SQL query to execute. - `; - - const result = streamText({ - model: openai(model), - system, - prompt, - maxSteps: 10, - tools: { - queryApproval, - executeSql, - generateId, - getUserTodos, - }, - experimental_telemetry: { - isEnabled: true, - }, - }); - - const stream = await metadata.stream("ai", result.fullStream); - - const textDeltas: string[] = []; - - for await (const chunk of stream) { - switch (chunk.type) { - case "text-delta": { - textDeltas.push(chunk.textDelta); - break; - } - } - } - - return textDeltas.join(""); - }, -}); - -// Initialize the Slack client -const slack = new WebClient(process.env.SLACK_BOT_TOKEN); - -type SendApprovalMessageParams = { - query: string; - userId: string; - tokenId: string; - publicAccessToken: string; - input: string; -}; - -export async function sendSQLApprovalMessage({ - query, - userId, - tokenId, - publicAccessToken, - input, -}: SendApprovalMessageParams) { - return await logger.trace( - "sendSQLApprovalMessage", - async (span) => { - const response = await slack.chat.postMessage({ - channel: process.env.SLACK_CHANNEL_ID!, - text: `SQL Query Approval Required for user ${userId}`, // Fallback text for notifications - blocks: [ - { - type: "header", - text: { - type: "plain_text", - text: "🚨 SQL Query Approval Required", - emoji: true, - }, - }, - { - type: "context", - elements: [ - { - type: "mrkdwn", - text: `*Requested by:* <@${userId}>`, - }, - ], - }, - { - type: "section", - text: { - type: "mrkdwn", - text: "*User Request:*\n" + input, - }, - }, - { - type: "section", - text: { - type: "mrkdwn", - text: "*Generated Query:*\n```sql\n" + query + "\n```", - }, - }, - { - type: "actions", - block_id: "sql_approval_actions", - elements: [ - { - type: "button", - text: { - type: "plain_text", - text: "Approve ✅", - emoji: true, - }, - style: "primary", - value: JSON.stringify({ - tokenId, - publicAccessToken, - action: "approve", - }), - action_id: "sql_approve", - }, - { - type: "button", - text: { - type: "plain_text", - text: "Deny ❌", - emoji: true, - }, - style: "danger", - value: JSON.stringify({ - tokenId, - publicAccessToken, - action: "deny", - }), - action_id: "sql_deny", - }, - ], - }, - { - type: "context", - elements: [ - { - type: "mrkdwn", - text: "⚠️ This action cannot be undone", - }, - ], - }, - ], - }); - - return response; - }, - { - icon: "tabler-brand-slack", - } - ); -} diff --git a/references/d3-openai-agents/src/trigger/chat.ts b/references/d3-openai-agents/src/trigger/chat.ts deleted file mode 100644 index c2ca19821e..0000000000 --- a/references/d3-openai-agents/src/trigger/chat.ts +++ /dev/null @@ -1,98 +0,0 @@ -import { openai } from "@ai-sdk/openai"; -import { CompleteTaskWithOutput, logger, metadata, schemaTask, wait } from "@trigger.dev/sdk/v3"; -import { CoreMessage, streamText } from "ai"; -import { z } from "zod"; - -const MAX_STEPS = 10; - -export const chatExample = schemaTask({ - id: "chat-example", - description: "Chat example", - schema: z.object({ - model: z.string().default("chatgpt-4o-latest"), - prompt: z.string().default("Hello, how are you?"), - }), - run: async ({ model, prompt }) => { - const aiModel = openai(model); - - let messages: CoreMessage[] = [ - { - role: "system", - content: - "You are a helpful assistant that can answer questions and help with tasks. Please be very concise and to the point.", - }, - { - role: "user", - content: prompt, - }, - ]; - - let step = 0; - - while (step < MAX_STEPS) { - step++; - - await logger.trace( - `Step ${step}`, - async (span) => { - // This token will expire in 1 day - const token = await wait.createToken({ timeout: "1d" }); - - metadata.set("waitToken", token); - await metadata.flush(); - - const result = streamText({ - model: aiModel, - messages, - experimental_telemetry: { - isEnabled: true, - }, - }); - - logger.info("Received result from streamText"); - - const stream = await metadata.stream(`responses.${token.id}`, result.fullStream); - - logger.info("Gathering the text from the stream"); - - let assistantResponse = ""; - - for await (const chunk of stream) { - if (chunk.type === "text-delta") { - assistantResponse += chunk.textDelta; - } - } - - logger.info("Assistant response", { assistantResponse }); - - messages.push({ - role: "assistant", - content: assistantResponse, - }); - - // Now wait for the next message - const nextMessage = await wait.forToken<{ message: string }>(token); - - if (nextMessage.ok) { - logger.info("Next message", { nextMessage: nextMessage.output.message }); - - messages.push({ - role: "user", - content: nextMessage.output.message, - }); - } else { - logger.info("No next message", { nextMessage }); - - throw new CompleteTaskWithOutput({ waitpoint: token.id }); - } - }, - { - attributes: { - step, - }, - icon: "tabler-repeat", - } - ); - } - }, -}); diff --git a/references/d3-openai-agents/src/trigger/openaiAgent.ts b/references/d3-openai-agents/src/trigger/openaiAgent.ts deleted file mode 100644 index 148d8c8d07..0000000000 --- a/references/d3-openai-agents/src/trigger/openaiAgent.ts +++ /dev/null @@ -1,197 +0,0 @@ -import { batch, logger, schemaTask, wait } from "@trigger.dev/sdk/v3"; -import { createHash } from "node:crypto"; -import { z } from "zod"; -import { zodToJsonSchema } from "zod-to-json-schema"; -import { CSVRowPayload, RowEnrichmentResult } from "./schemas"; -import { python } from "@trigger.dev/python"; - -export const d3Demo = schemaTask({ - id: "d3-demo", - description: "D3 Demo - Enriches a CSV dataset using Trigger.dev and the python OpenAI Agent SDK", - schema: z.object({ - url: z.string().url().describe("The URL of the CSV dataset to enrich"), - }), - run: async ({ url }) => { - const response = await fetch(url); - const csv = await response.text(); - - const header = csv.split("\n")[0]; - const rows = csv.split("\n").slice(1); - - // Each payload has a header, url, and a single row - const payloads = rows.map((row) => ({ - header, - url, - row, - })); - - const chunkedPayloads = []; - - for (let i = 0; i < payloads.length; i += 500) { - chunkedPayloads.push(payloads.slice(i, i + 500)); - } - - // Process each chunk - for (const chunk of chunkedPayloads) { - const results = await batch.triggerAndWait( - chunk.map((payload) => ({ - id: "handle-csv-row", - payload, - options: { - idempotencyKey: createIdempotencyKey(payload), - }, - })) - ); - - for (const result of results.runs) { - if (result.ok) { - // Pretty print the result of the enrichment - logger.log(`Enriched row ${result.output.row}`, result.output); - } else { - logger.error(`Error enriching row: ${result.error}`); - } - } - } - }, -}); - -const ROW_AGENT_RUNNER_COUNT = 10; - -export const handleCSVRow = schemaTask({ - id: "handle-csv-row", - description: "Handles a single row of a CSV dataset", - schema: CSVRowPayload, - run: async ({ header, row, url }) => { - // Batch trigger the rowAgentCoordinator to try 10 different enrichments on the same row - const results = await batch.triggerAndWait( - Array.from({ length: ROW_AGENT_RUNNER_COUNT }, () => ({ - id: "row-agent-coordinator" as const, - payload: { row: { header, row, url } }, - })) - ); - - const outputs = results.runs.filter((result) => result.ok).map((result) => result.output); - - const enrichment = await enrichmentResultsEvaluator - .triggerAndWait({ - results: outputs, - }) - .unwrap(); - - return { - enrichment, - header, - row, - url, - }; - }, -}); - -export const rowAgentCoordinator = schemaTask({ - id: "row-agent-coordinator", - description: "Coordinators the row agent", - schema: z.object({ - row: CSVRowPayload, - }), - run: async ({ row }) => { - const waitToken = await wait.createToken({ - timeout: "2m", - }); - - const jsonSchema = zodToJsonSchema(RowEnrichmentResult); - - await rowAgentRunner.trigger({ - row, - waitToken, - jsonSchema, - }); - - const result = await wait.forToken(waitToken.id); - - if (!result.ok) { - throw result.error; - } - - return result.output; - }, -}); - -export const rowAgentRunner = schemaTask({ - id: "row-agent-runner", - description: "Runs the row agent", - schema: z.object({ - row: CSVRowPayload, - waitToken: z.object({ - id: z - .string() - .describe( - "The wait token that the OpenAI Agent SDK will use to signal back to the coordinator" - ), - publicAccessToken: z - .string() - .describe( - "The public access token that the OpenAI Agent SDK will use to signal back to the coordinator" - ), - }), - jsonSchema: z.any().describe("The JSON schema of the result"), - disableWaitTokenCompletion: z - .boolean() - .default(false) - .describe("Whether to disable wait token completion"), - }), - run: async ({ row, waitToken, jsonSchema, disableWaitTokenCompletion }) => { - const inputData = JSON.stringify({ - row, - waitToken, - jsonSchema, - disableWaitTokenCompletion, - }); - - logger.info("process.env", { - env: process.env, - }); - - const result = await python.runScript("./src/trigger/python/agent.py", [inputData]); - - logger.debug("row-agent-runner", { - result, - }); - - return {} as unknown as RowEnrichmentResult; - }, - catchError: async ({ error }) => { - logger.error("row-agent-runner", { - error, - }); - }, -}); - -export const enrichmentResultsEvaluator = schemaTask({ - id: "enrichment-results-evaluator", - description: "Evaluates the enrichment results", - schema: z.object({ - results: z.array(RowEnrichmentResult), - }), - run: async ({ results }) => { - // Combine the results into a single object (this is a placeholder for a more complex evaluation) - const combinedResult = results.reduce( - (acc, result) => ({ - ...acc, - ...result, - }), - {} as RowEnrichmentResult - ); - - return combinedResult; - }, -}); - -// Create a hash of the payload using Node.js crypto -// Ideally, you'd do a stable serialization of the payload before hashing, to ensure the same payload always results in the same hash -function createIdempotencyKey(payload: CSVRowPayload): string { - const content = `${payload.header}\n${payload.row}`; - - const hash = createHash("sha256"); - hash.update(content); - return hash.digest("hex"); -} diff --git a/references/d3-openai-agents/src/trigger/python/agent.py b/references/d3-openai-agents/src/trigger/python/agent.py deleted file mode 100644 index 7b91296429..0000000000 --- a/references/d3-openai-agents/src/trigger/python/agent.py +++ /dev/null @@ -1,171 +0,0 @@ -import asyncio -import sys -import os -import json -import requests -from typing import Optional -from pydantic import BaseModel, Field -from agents import Agent, Runner, WebSearchTool, trace -import logfire -from opentelemetry.trace.propagation.tracecontext import TraceContextTextMapPropagator -from logfire.propagate import attach_context - -logfire.configure( - service_name='d3-demo', - send_to_logfire="if-token-present", - distributed_tracing=True -) -logfire.instrument_openai_agents() - -class CSVRowPayload(BaseModel): - header: str = Field(description="The header of the CSV dataset") - row: str = Field(description="The row to handle") - url: str = Field(description="The URL of the CSV dataset") - -class WaitToken(BaseModel): - id: str = Field(description="The wait token ID") - publicAccessToken: str = Field(description="The public access token for authorization") - -class AgentInput(BaseModel): - row: CSVRowPayload - waitToken: WaitToken - jsonSchema: dict - disableWaitTokenCompletion: bool = Field(default=False, description="Whether to disable wait token completion") - -class BasicInfo(BaseModel): - name: str = Field(description="The name of the row") - email: str = Field(description="The email of the row") - firstName: Optional[str] = Field(None, description="The first name of the row") - lastName: Optional[str] = Field(None, description="The last name of the row") - preferredName: Optional[str] = Field(None, description="The preferred name of the row") - -class CompanyInfo(BaseModel): - name: str = Field(description="The name of the company") - industry: str = Field(description="The industry of the company") - -class SocialInfo(BaseModel): - twitter: Optional[str] = Field(None, description="The Twitter username of the person") - linkedin: Optional[str] = Field(None, description="The LinkedIn username of the person") - facebook: Optional[str] = Field(None, description="The Facebook username of the person") - instagram: Optional[str] = Field(None, description="The Instagram username of the person") - -class RowEnrichmentResult(BaseModel): - basicInfo: BasicInfo - companyInfo: CompanyInfo - socialInfo: SocialInfo - -def complete_wait_token(wait_token: WaitToken, result: dict): - """Send the enrichment result back to Trigger.dev""" - with trace("complete_wait_token"): - url = f"{os.environ['TRIGGER_API_URL']}/api/v1/waitpoints/tokens/{wait_token.id}/complete" - headers = { - "Authorization": f"Bearer {wait_token.publicAccessToken}", - "Content-Type": "application/json" - } - response = requests.post(url, json={"data": result}, headers=headers) - response.raise_for_status() - return response.json() - -basic_info_agent = Agent( - name="Basic Info Agent", - instructions=f"""You are an expert at extracting basic information from a person's contact details. - """, - tools=[WebSearchTool()], - output_type=BasicInfo -) - -company_info_agent = Agent( - name="Company Info Agent", - instructions=f"""You are an expert at extracting company information from a person's contact details. - """, - tools=[WebSearchTool()], - output_type=CompanyInfo -) - -social_info_agent = Agent( - name="Social Info Agent", - instructions=f"""You are an expert at extracting social media information from a person's contact details. - """, - tools=[WebSearchTool()], - output_type=SocialInfo -) - -agent = Agent( - name="CSV Row Enrichment Agent", - instructions=f"""You are an expert at enriching contact information data. - Your task is to use web search to find additional information about a person - based on their basic contact details. - - Please find the basic information, company information, and social media information for the person. - - The input data is from an unspecified CSV dataset, but most likely a CSV dump from a CRM or other source like Mailchimp, etc. - - You'll receive the header row and a single row from the dataset to enrich, in their raw form. - - Only include information you are confident about from reliable sources. - Use null for fields where you cannot find reliable information. - """, - tools=[ - basic_info_agent.as_tool( - tool_name="basic_info_agent", - tool_description="Extract basic information from a person's contact details" - ), - company_info_agent.as_tool( - tool_name="company_info_agent", - tool_description="Extract company information from a person's contact details" - ), - social_info_agent.as_tool( - tool_name="social_info_agent", - tool_description="Extract social media information from a person's contact details" - ) - ], - output_type=RowEnrichmentResult -) - -async def main(agent_input: AgentInput): - # Run the agent - result = await Runner.run( - agent, - f""" - Header row: {agent_input.row.header} - Row to enrich: {agent_input.row.row} - CSV URL: {agent_input.row.url} - """ - ) - - enriched_data = result.final_output - if isinstance(enriched_data, BaseModel): - enriched_data = enriched_data.model_dump() - - print("Final Output:") - # Pretty print the final output - print(json.dumps(enriched_data, indent=2)) - - if not agent_input.disableWaitTokenCompletion: - try: - # Send the result back to Trigger.dev - complete_wait_token(agent_input.waitToken, enriched_data) - - print("Successfully enriched data and notified Trigger.dev") - - except json.JSONDecodeError: - print("Error: Agent output was not valid JSON") - sys.exit(1) - - # Make sure to flush the logfire context - logfire.force_flush() - -if __name__ == "__main__": - # Parse command line input as JSON - if len(sys.argv) < 2: - print("Usage: python agent.py ''") - sys.exit(1) - - # Extract the traceparent os.environ['TRACEPARENT'] - carrier ={'traceparent': os.environ['TRACEPARENT']} - ctx = TraceContextTextMapPropagator().extract(carrier=carrier) - - with attach_context(carrier=carrier, third_party=True): - # Parse the input JSON into our Pydantic model - input_data = AgentInput.model_validate_json(sys.argv[1]) - asyncio.run(main(input_data)) \ No newline at end of file diff --git a/references/d3-openai-agents/src/trigger/schemas.ts b/references/d3-openai-agents/src/trigger/schemas.ts deleted file mode 100644 index c2e5982a1b..0000000000 --- a/references/d3-openai-agents/src/trigger/schemas.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { z } from "zod"; - -export const AgentLoopMetadata = z.object({ - waitToken: z.object({ - id: z.string(), - publicAccessToken: z.string(), - }), -}); - -export type AgentLoopMetadata = z.infer; - -export const CSVRowPayload = z.object({ - header: z.string().describe("The header of the CSV dataset"), - row: z.string().describe("The row to handle"), - url: z.string().url().describe("The URL of the CSV dataset"), -}); - -export type CSVRowPayload = z.infer; - -export const RowEnrichmentResult = z.object({ - basicInfo: z.object({ - name: z.string().describe("The name of the row"), - email: z.string().email().describe("The email of the row"), - firstName: z.string().optional().describe("The first name of the row"), - lastName: z.string().optional().describe("The last name of the row"), - preferredName: z.string().optional().describe("The preferred name of the row"), - }), - companyInfo: z.object({ - name: z.string().describe("The name of the company"), - industry: z.string().describe("The industry of the company"), - }), - socialInfo: z.object({ - twitter: z.string().url().optional().describe("The Twitter URL of the person"), - linkedin: z.string().url().optional().describe("The LinkedIn URL of the person"), - facebook: z.string().url().optional().describe("The Facebook URL of the person"), - instagram: z.string().url().optional().describe("The Instagram URL of the person"), - }), -}); - -export type RowEnrichmentResult = z.infer; - -export const QueryApproval = z.object({ - approved: z.boolean().describe("Whether the query has been approved"), -}); - -export type QueryApproval = z.infer; diff --git a/references/d3-openai-agents/tailwind.config.ts b/references/d3-openai-agents/tailwind.config.ts deleted file mode 100644 index 555f65867f..0000000000 --- a/references/d3-openai-agents/tailwind.config.ts +++ /dev/null @@ -1,81 +0,0 @@ -import type { Config } from "tailwindcss" - -const config: Config = { - darkMode: ["class"], - content: [ - "./pages/**/*.{ts,tsx}", - "./components/**/*.{ts,tsx}", - "./app/**/*.{ts,tsx}", - "./src/**/*.{ts,tsx}", - "*.{js,ts,jsx,tsx,mdx}", - ], - theme: { - container: { - center: true, - padding: "2rem", - screens: { - "2xl": "1400px", - }, - }, - extend: { - colors: { - border: "hsl(var(--border))", - input: "hsl(var(--input))", - ring: "hsl(var(--ring))", - background: "hsl(var(--background))", - foreground: "hsl(var(--foreground))", - primary: { - DEFAULT: "hsl(var(--primary))", - foreground: "hsl(var(--primary-foreground))", - }, - secondary: { - DEFAULT: "hsl(var(--secondary))", - foreground: "hsl(var(--secondary-foreground))", - }, - destructive: { - DEFAULT: "hsl(var(--destructive))", - foreground: "hsl(var(--destructive-foreground))", - }, - muted: { - DEFAULT: "hsl(var(--muted))", - foreground: "hsl(var(--muted-foreground))", - }, - accent: { - DEFAULT: "hsl(var(--accent))", - foreground: "hsl(var(--accent-foreground))", - }, - popover: { - DEFAULT: "hsl(var(--popover))", - foreground: "hsl(var(--popover-foreground))", - }, - card: { - DEFAULT: "hsl(var(--card))", - foreground: "hsl(var(--card-foreground))", - }, - }, - borderRadius: { - lg: "var(--radius)", - md: "calc(var(--radius) - 2px)", - sm: "calc(var(--radius) - 4px)", - }, - keyframes: { - "accordion-down": { - from: { height: "0" }, - to: { height: "var(--radix-accordion-content-height)" }, - }, - "accordion-up": { - from: { height: "var(--radix-accordion-content-height)" }, - to: { height: "0" }, - }, - }, - animation: { - "accordion-down": "accordion-down 0.2s ease-out", - "accordion-up": "accordion-up 0.2s ease-out", - }, - }, - }, - plugins: [], -} - -export default config - diff --git a/references/d3-openai-agents/trigger.config.ts b/references/d3-openai-agents/trigger.config.ts deleted file mode 100644 index 77bce09ee8..0000000000 --- a/references/d3-openai-agents/trigger.config.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { defineConfig } from "@trigger.dev/sdk"; -import { pythonExtension } from "@trigger.dev/python/extension"; -import { installPlaywrightChromium } from "./src/extensions/playwright"; - -export default defineConfig({ - project: "proj_wkbbtayxrmeyqhankehb", - dirs: ["./src/trigger"], - maxDuration: 3600, - build: { - extensions: [ - // This is required to use the Python extension - pythonExtension({ - requirementsFile: "./requirements.txt", // Optional: Path to your requirements file - devPythonBinaryPath: `.venv/bin/python`, // Optional: Custom Python binary path - scripts: ["src/trigger/python/**/*.py"], // List of Python scripts to include - }), - installPlaywrightChromium(), - ], - }, -}); diff --git a/references/d3-openai-agents/tsconfig.json b/references/d3-openai-agents/tsconfig.json deleted file mode 100644 index c1334095f8..0000000000 --- a/references/d3-openai-agents/tsconfig.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2017", - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": true, - "skipLibCheck": true, - "strict": true, - "noEmit": true, - "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "bundler", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve", - "incremental": true, - "plugins": [ - { - "name": "next" - } - ], - "paths": { - "@/*": ["./src/*"] - } - }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - "exclude": ["node_modules"] -} diff --git a/references/nextjs-realtime/README.md b/references/nextjs-realtime/README.md deleted file mode 100644 index e215bc4ccf..0000000000 --- a/references/nextjs-realtime/README.md +++ /dev/null @@ -1,36 +0,0 @@ -This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app). - -## Getting Started - -First, run the development server: - -```bash -npm run dev -# or -yarn dev -# or -pnpm dev -# or -bun dev -``` - -Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. - -You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. - -This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel. - -## Learn More - -To learn more about Next.js, take a look at the following resources: - -- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. -- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. - -You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome! - -## Deploy on Vercel - -The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. - -Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details. diff --git a/references/nextjs-realtime/src/app/favicon.ico b/references/nextjs-realtime/src/app/favicon.ico deleted file mode 100644 index 718d6fea48..0000000000 Binary files a/references/nextjs-realtime/src/app/favicon.ico and /dev/null differ diff --git a/references/nextjs-realtime/src/lib/utils.ts b/references/nextjs-realtime/src/lib/utils.ts deleted file mode 100644 index bd0c391ddd..0000000000 --- a/references/nextjs-realtime/src/lib/utils.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { clsx, type ClassValue } from "clsx" -import { twMerge } from "tailwind-merge" - -export function cn(...inputs: ClassValue[]) { - return twMerge(clsx(inputs)) -} diff --git a/references/python-catalog/tsconfig.json b/references/python-catalog/tsconfig.json deleted file mode 100644 index 635ecdb766..0000000000 --- a/references/python-catalog/tsconfig.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "compilerOptions": { - "target": "esnext", - "module": "NodeNext", - "moduleResolution": "NodeNext", - "esModuleInterop": true, - "strict": true, - "outDir": "dist", - "skipLibCheck": true, - "customConditions": ["@triggerdotdev/source"], - "jsx": "preserve", - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "lib": ["DOM", "DOM.Iterable"], - "paths": { - "@/*": ["./src/*"] - } - }, - "include": ["./src/**/*.ts", "trigger.config.ts"] -} diff --git a/references/test-tasks/package.json b/references/test-tasks/package.json deleted file mode 100644 index 6739b44b30..0000000000 --- a/references/test-tasks/package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "references-test-tasks", - "private": true, - "type": "module", - "scripts": { - "dev": "trigger dev", - "deploy": "trigger deploy --self-hosted --load-image" - }, - "dependencies": { - "@trigger.dev/sdk": "workspace:*", - "zod": "3.23.8" - }, - "devDependencies": { - "@trigger.dev/build": "workspace:*", - "trigger.dev": "workspace:*", - "typescript": "^5.5.4" - } -} \ No newline at end of file diff --git a/references/test-tasks/src/trigger/helpers.ts b/references/test-tasks/src/trigger/helpers.ts deleted file mode 100644 index ed47c198a1..0000000000 --- a/references/test-tasks/src/trigger/helpers.ts +++ /dev/null @@ -1,205 +0,0 @@ -import { BatchResult, logger, queue, task, wait } from "@trigger.dev/sdk/v3"; - -export const recursiveTask = task({ - id: "recursive-task", - queue: { - concurrencyLimit: 1, - }, - retry: { - maxAttempts: 1, - }, - run: async ( - { delayMs, depth, useBatch = false }: { delayMs: number; depth: number; useBatch: boolean }, - { ctx } - ) => { - if (depth === 0) { - return; - } - - await new Promise((resolve) => setTimeout(resolve, delayMs)); - - if (useBatch) { - const batchResult = await recursiveTask.batchTriggerAndWait([ - { - payload: { delayMs, depth: depth - 1, useBatch }, - options: { tags: ["recursive"] }, - }, - ]); - - const firstRun = batchResult.runs[0] as any; - - return { - ok: firstRun.ok, - }; - } else { - const result = (await recursiveTask.triggerAndWait({ - delayMs, - depth: depth - 1, - useBatch, - })) as any; - - return { - ok: result.ok, - }; - } - }, -}); - -export const singleQueue = queue({ - name: "single-queue", - concurrencyLimit: 1, -}); - -export const delayTask = task({ - id: "delay-task", - retry: { - maxAttempts: 1, - }, - run: async (payload: { delayMs: number }, { ctx }) => { - await new Promise((resolve) => setTimeout(resolve, payload.delayMs)); - }, -}); - -export const retryTask = task({ - id: "retry-task", - queue: singleQueue, - retry: { - maxAttempts: 2, - }, - run: async ( - payload: { delayMs: number; throwError: boolean; failureCount: number; retryDelayMs?: number }, - { ctx } - ) => { - await new Promise((resolve) => setTimeout(resolve, payload.delayMs)); - - if (payload.throwError && ctx.attempt.number <= payload.failureCount) { - throw new Error("Error"); - } - }, - handleError: async ({ ctx, payload, error }) => { - if (!payload.throwError) { - return { - skipRetrying: true, - }; - } else { - return { - retryDelayInMs: payload.retryDelayMs, - }; - } - }, -}); - -export const durationWaitTask = task({ - id: "duration-wait-task", - queue: { - concurrencyLimit: 1, - }, - run: async ( - { - waitDurationInSeconds = 5, - doWait = true, - }: { waitDurationInSeconds: number; doWait: boolean }, - { ctx } - ) => { - if (doWait) { - await wait.for({ seconds: waitDurationInSeconds }); - } else { - await new Promise((resolve) => setTimeout(resolve, waitDurationInSeconds * 1000)); - } - }, -}); - -export const resumeParentTask = task({ - id: "resume-parent-task", - queue: { - concurrencyLimit: 1, - }, - run: async ( - { - delayMs = 5_000, - triggerChildTask, - useBatch = false, - }: { delayMs: number; triggerChildTask: boolean; useBatch: boolean }, - { ctx } - ) => { - if (triggerChildTask) { - if (useBatch) { - const batchResult = await resumeChildTask.batchTriggerAndWait([ - { - payload: { delayMs }, - options: { tags: ["resume-child"] }, - }, - ]); - - unwrapBatchResult(batchResult); - } else { - await resumeChildTask.triggerAndWait({ delayMs }, { tags: ["resume-child"] }).unwrap(); - } - } else { - await new Promise((resolve) => setTimeout(resolve, delayMs)); - } - }, -}); - -export const resumeChildTask = task({ - id: "resume-child-task", - run: async (payload: { delayMs: number }, { ctx }) => { - await new Promise((resolve) => setTimeout(resolve, payload.delayMs)); - }, -}); - -export const genericParentTask = task({ - id: "generic-parent-task", - run: async ( - { - delayMs = 5_000, - triggerChildTask, - useBatch = false, - }: { delayMs: number; triggerChildTask: boolean; useBatch: boolean }, - { ctx } - ) => { - if (triggerChildTask) { - if (useBatch) { - const batchResult = await genericChildTask.batchTriggerAndWait([ - { - payload: { delayMs }, - options: { tags: ["resume-child"] }, - }, - ]); - - return unwrapBatchResult(batchResult); - } else { - await genericChildTask.triggerAndWait({ delayMs }, { tags: ["resume-child"] }).unwrap(); - } - } else { - await new Promise((resolve) => setTimeout(resolve, delayMs)); - } - }, -}); - -function unwrapBatchResult(batchResult: BatchResult) { - if (batchResult.runs.some((run) => !run.ok)) { - throw new Error(`Child task failed: ${batchResult.runs.find((run) => !run.ok)?.error}`); - } - - return batchResult.runs; -} - -export const genericChildTask = task({ - id: "generic-child-task", - run: async (payload: { delayMs: number }, { ctx }) => { - logger.debug("Running generic child task"); - - await new Promise((resolve) => setTimeout(resolve, payload.delayMs)); - }, -}); - -export const eventLoopLagTask = task({ - id: "event-loop-lag-task", - run: async ({ delayMs }: { delayMs: number }, { ctx }) => { - const start = Date.now(); - while (Date.now() - start < delayMs) { - // Do nothing - } - }, -}); diff --git a/references/test-tasks/src/trigger/test-heartbeats.ts b/references/test-tasks/src/trigger/test-heartbeats.ts deleted file mode 100644 index c62dcc438e..0000000000 --- a/references/test-tasks/src/trigger/test-heartbeats.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { waitForRunStatus } from "@/utils.js"; -import { logger, task } from "@trigger.dev/sdk/v3"; -import assert from "assert"; -import { genericChildTask } from "./helpers.js"; - -export const describeHeartbeats = task({ - id: "describe/heartbeats", - retry: { - maxAttempts: 1, - }, - run: async ( - { visibilityTimeoutSeconds = 100 }: { visibilityTimeoutSeconds?: number }, - { ctx } - ) => { - await testHeartbeats.triggerAndWait({ visibilityTimeoutSeconds }).unwrap(); - }, -}); - -export const testHeartbeats = task({ - id: "test/heartbeats", - retry: { - maxAttempts: 1, - }, - run: async ( - { visibilityTimeoutSeconds = 100 }: { visibilityTimeoutSeconds?: number }, - { ctx } - ) => { - const run = await genericChildTask.trigger({ - delayMs: visibilityTimeoutSeconds * 1_000 + 5 * 1000, - }); - - await waitForRunStatus(run.id, ["EXECUTING"]); - - logger.info("Heartbeat test: run is executing"); - - const completedRun = await waitForRunStatus( - run.id, - ["COMPLETED", "FAILED", "SYSTEM_FAILURE", "CRASHED"], - visibilityTimeoutSeconds + 30, - 5_000 - ); - - assert(completedRun.status === "COMPLETED", `Run failed with status ${completedRun.status}`); - - logger.info("Heartbeat test: run is completed"); - }, -}); diff --git a/references/test-tasks/src/trigger/test-reserve-concurrency-system.ts b/references/test-tasks/src/trigger/test-reserve-concurrency-system.ts deleted file mode 100644 index 4a0b044791..0000000000 --- a/references/test-tasks/src/trigger/test-reserve-concurrency-system.ts +++ /dev/null @@ -1,400 +0,0 @@ -import { batch, logger, task } from "@trigger.dev/sdk/v3"; -import assert from "assert"; -import { - getEnvironmentStats, - updateEnvironmentConcurrencyLimit, - waitForRunStatus, -} from "../utils.js"; -import { - retryTask, - resumeParentTask, - durationWaitTask, - delayTask, - genericParentTask, - recursiveTask, -} from "./helpers.js"; - -export const describeReserveConcurrencySystem = task({ - id: "describe/reserve-concurrency-system", - retry: { - maxAttempts: 1, - }, - run: async (payload: any, { ctx }) => { - await testRetryPriority.triggerAndWait({}).unwrap(); - - logger.info("✅ Tested retry priority, now testing resume priority"); - - await testResumePriority.triggerAndWait({ initialDelayMs: 5_000, useBatch: false }).unwrap(); - await testResumePriority.triggerAndWait({ initialDelayMs: 30_000, useBatch: false }).unwrap(); - - logger.info("✅ Tested resume priority with triggerAndWait"); - - await testResumePriority.triggerAndWait({ initialDelayMs: 5_000, useBatch: true }).unwrap(); - await testResumePriority.triggerAndWait({ initialDelayMs: 30_000, useBatch: true }).unwrap(); - - logger.info("✅ Tested resume priority with batchTriggerAndWait"); - - await testResumeDurationPriority.triggerAndWait({ waitDurationInSeconds: 30 }).unwrap(); - await testResumeDurationPriority.triggerAndWait({ waitDurationInSeconds: 65 }).unwrap(); - - logger.info("✅ Tested resume duration priority with wait.for"); - - await testEnvReserveConcurrency - .triggerAndWait({ envConcurrencyLimit: 4, holdTaskCount: 1, useBatch: false }) - .unwrap(); - - logger.info("✅ Tested env reserve concurrency system with triggerAndWait"); - - await testEnvReserveConcurrency - .triggerAndWait({ envConcurrencyLimit: 4, holdTaskCount: 1, useBatch: true }) - .unwrap(); - - logger.info("✅ Tested env reserve concurrency system with batchTriggerAndWait"); - - await testQueueReserveConcurrency.triggerAndWait({ useBatch: false }).unwrap(); - - logger.info("✅ Tested queue reserve concurrency system with triggerAndWait"); - - await testQueueReserveConcurrency.triggerAndWait({ useBatch: true }).unwrap(); - - logger.info("✅ Tested queue reserve concurrency system with batchTriggerAndWait"); - }, -}); - -export const testRetryPriority = task({ - id: "test/retry-priority", - retry: { - maxAttempts: 1, - }, - run: async (payload: any, { ctx }) => { - const startEnvStats = await getEnvironmentStats(ctx.environment.id); - - const retryDelayMs = ctx.environment.type === "DEVELOPMENT" ? 10_000 : 61_000; - - // We need to test the reserve concurrency system - // 1. Retries are prioritized over new runs - // Setup: Trigger a run that fails and will re-attempt in 5 seconds - // Trigger another run that uses the same concurrency, and hits the max concurrency of that queue - // Trigger a run on that same queue before the retry is attempted - // The "hold" run will then complete and the retry should be dequeued - // Once the retry completes successfully, the 3rd run should be dequeued - - const failureRun = await retryTask.trigger( - { delayMs: 0, throwError: true, failureCount: 1, retryDelayMs }, - { tags: ["failure"] } - ); - await waitForRunStatus(failureRun.id, ["EXECUTING", "REATTEMPTING"]); - - logger.info("Failure run is executing, triggering a run that will hit the concurrency limit"); - - const holdRun = await retryTask.trigger( - { delayMs: retryDelayMs + 2_000, throwError: false, failureCount: 0 }, - { tags: ["hold"] } - ); - await waitForRunStatus(holdRun.id, ["EXECUTING"]); - - logger.info("Hold run is executing, triggering a run that will be queued"); - - const queuedRun = await retryTask.trigger( - { delayMs: 0, throwError: false, failureCount: 0 }, - { tags: ["queued"] } - ); - - logger.info("Queued run is queued, waiting for the hold run to complete"); - - const completedFailureRun = await waitForRunStatus(failureRun.id, ["COMPLETED"]); - const completedQueuedRun = await waitForRunStatus(queuedRun.id, ["COMPLETED"]); - const completedHoldRun = await waitForRunStatus(holdRun.id, ["COMPLETED"]); - - logger.info("Runs completed", { - completedFailureRun, - completedQueuedRun, - completedHoldRun, - }); - - // Now we need to assert the completedFailureRun.completedAt is before completedQueuedRun.completedAt - assert( - completedFailureRun.finishedAt! < completedQueuedRun.finishedAt!, - "Failure run should complete before queued run" - ); - - // Lets also make sure the completedFailureRun.finishedAt is AFTER the completedHoldRun.finishedAt - assert( - completedFailureRun.finishedAt! > completedHoldRun.finishedAt!, - "Failure run should complete after hold run" - ); - - // Now lets make sure all the runs are completed - await waitForRunStatus(holdRun.id, ["COMPLETED"]); - - const envStats = await getEnvironmentStats(ctx.environment.id); - - logger.info("Environment stats", envStats); - - assert( - startEnvStats.reserveConcurrency - envStats.reserveConcurrency === 0, - "Reserve concurrency should be 0" - ); - - logger.info("✅ Failure run completed before queued run"); - }, -}); - -export const testResumePriority = task({ - id: "test/resume-priority", - retry: { - maxAttempts: 1, - }, - run: async ( - { initialDelayMs = 5_000, useBatch = false }: { initialDelayMs: number; useBatch: boolean }, - { ctx } - ) => { - const startEnvStats = await getEnvironmentStats(ctx.environment.id); - - // 2. Resumed runs are prioritized over new runs - const resumeRun = await resumeParentTask.trigger( - { delayMs: initialDelayMs, triggerChildTask: true, useBatch }, - { tags: ["resume"] } - ); - await waitForRunStatus(resumeRun.id, ["EXECUTING", "FROZEN"]); - - logger.info("Resume run is executing, triggering a run that should be queued"); - const queuedRun = await resumeParentTask.trigger( - { delayMs: 1_000, triggerChildTask: false, useBatch }, - { tags: ["queued"] } - ); - await waitForRunStatus(queuedRun.id, ["QUEUED"]); - - const completedResumeRun = await waitForRunStatus(resumeRun.id, ["COMPLETED"]); - const completedQueuedRun = await waitForRunStatus(queuedRun.id, ["COMPLETED"]); - - logger.info("Runs completed", { - completedResumeRun, - completedQueuedRun, - }); - - // Now we need to assert the completedResumeRun.completedAt is before completedQueuedRun.completedAt - assert( - completedResumeRun.finishedAt! < completedQueuedRun.finishedAt!, - "Resume run should complete before queued run" - ); - - const envStats = await getEnvironmentStats(ctx.environment.id); - - assert( - startEnvStats.reserveConcurrency - envStats.reserveConcurrency === 0, - "Reserve concurrency should be 0" - ); - - logger.info("✅ Resume run completed before queued run"); - }, -}); - -export const testResumeDurationPriority = task({ - id: "test/resume-duration-priority", - retry: { - maxAttempts: 1, - }, - run: async ({ waitDurationInSeconds = 5 }: { waitDurationInSeconds: number }, { ctx }) => { - const startEnvStats = await getEnvironmentStats(ctx.environment.id); - - // 2. Resumed runs are prioritized over new runs - const resumeRun = await durationWaitTask.trigger( - { waitDurationInSeconds, doWait: true }, - { tags: ["resume"] } - ); - await waitForRunStatus(resumeRun.id, ["EXECUTING", "FROZEN"]); - - logger.info( - "Resume run is executing, triggering a run that will hold the concurrency until both the resume run and the queued run are in the queue" - ); - - let holdRunId: string | undefined; - - if (ctx.environment.type !== "DEVELOPMENT") { - const holdRun = await durationWaitTask.trigger( - { waitDurationInSeconds: waitDurationInSeconds + 10, doWait: false }, - { tags: ["hold"] } - ); - - holdRunId = holdRun.id; - - await waitForRunStatus(holdRun.id, ["EXECUTING"]); - - logger.info("Hold run is executing, triggering a run that should be queued"); - } - - const queuedRun = await durationWaitTask.trigger( - { waitDurationInSeconds: 1, doWait: false }, - { tags: ["queued"] } - ); - await waitForRunStatus(queuedRun.id, ["QUEUED"]); - - const completedResumeRun = await waitForRunStatus(resumeRun.id, ["COMPLETED"]); - const completedQueuedRun = await waitForRunStatus(queuedRun.id, ["COMPLETED"]); - - logger.info("Runs completed", { - completedResumeRun, - completedQueuedRun, - }); - - // Now we need to assert the completedResumeRun.completedAt is before completedQueuedRun.completedAt - assert( - completedResumeRun.finishedAt! < completedQueuedRun.finishedAt!, - "Resume run should complete before queued run" - ); - - if (holdRunId) { - const completedHoldRun = await waitForRunStatus(holdRunId, ["COMPLETED"]); - - // Lets also make sure the completedResumeRun.finishedAt is AFTER the completedHoldRun.finishedAt - assert( - completedResumeRun.finishedAt! > completedHoldRun.finishedAt!, - "Resume run should complete after hold run" - ); - } - - const envStats = await getEnvironmentStats(ctx.environment.id); - - assert( - startEnvStats.reserveConcurrency - envStats.reserveConcurrency === 0, - "Reserve concurrency should be 0" - ); - - logger.info("✅ Resume run completed before queued run"); - }, -}); - -export const testEnvReserveConcurrency = task({ - id: "test/env-reserve-concurrency", - retry: { - maxAttempts: 1, - }, - run: async ( - { - envConcurrencyLimit = 3, - holdTaskCount = 1, - useBatch = false, - }: { envConcurrencyLimit: number; holdTaskCount: number; useBatch: boolean }, - { ctx } - ) => { - const startEnvStats = await getEnvironmentStats(ctx.environment.id); - - // 3. When a task triggerAndWaits another task, the parent run should be added to the envs reserve concurrency - // Giving the environment "back" another concurrency slot. Another task (not the parent task) can then be dequeued - // We need to be able to "fill" the env concurrency (sans 1), then trigger the parent task. The parent task then triggerAndWaits - // a child task. We need to make sure the child task executes - await updateEnvironmentConcurrencyLimit(ctx.environment.id, envConcurrencyLimit); - - const holdBatch = await delayTask.batchTrigger( - Array.from({ length: holdTaskCount }, (_, i) => ({ - payload: { delayMs: 30_000 }, - options: { tags: ["hold"] }, - })) - ); - - const retrievedHoldBatch = await batch.retrieve(holdBatch.batchId); - - // Wait for the hold tasks to be executing - await Promise.all(retrievedHoldBatch.runs.map((run) => waitForRunStatus(run, ["EXECUTING"]))); - - // Now we will trigger a parent task that will trigger a child task - const parentRun = await genericParentTask.trigger( - { delayMs: 1_000, triggerChildTask: true, useBatch }, - { tags: ["parent"] } - ); - - // Once the parentRun starts executing, we will be at the max concurrency limit - await waitForRunStatus(parentRun.id, ["EXECUTING"], 5); // timeout after 5 seconds, to ensure the parent task is executing - - // But because the parent task triggers a child task, the env reserve concurrency will allow the child task to execute - logger.info("Parent task is executing, waiting for child task to complete"); - - await waitForRunStatus(parentRun.id, ["COMPLETED"], 20); // timeout after 10 seconds, to ensure the child task finished before the delay runs - - logger.info( - "Parent task completed, which means the child task completed. Now waiting for the hold tasks to complete" - ); - - const envStats = await getEnvironmentStats(ctx.environment.id, "task/generic-parent-task"); - - assert( - startEnvStats.reserveConcurrency - envStats.reserveConcurrency === 0, - "Reserve concurrency should be 0" - ); - assert( - envStats.queueCurrentConcurrency === 0, - "generic-parent-task current concurrency should be 0" - ); - assert( - envStats.queueReserveConcurrency === 0, - "generic-parent-task reserve concurrency should be 0" - ); - - const childStats = await getEnvironmentStats(ctx.environment.id, "task/generic-child-task"); - - assert( - childStats.queueReserveConcurrency === 0, - "generic-child-task reserve concurrency should be 0" - ); - assert( - childStats.queueCurrentConcurrency === 0, - "generic-child-task current concurrency should be 0" - ); - - // Wait for the hold tasks to be completed - await Promise.all(retrievedHoldBatch.runs.map((run) => waitForRunStatus(run, ["COMPLETED"]))); - - await updateEnvironmentConcurrencyLimit(ctx.environment.id, 100); - - logger.info("✅ Environment reserve concurrency system is working as expected"); - }, -}); - -export const testQueueReserveConcurrency = task({ - id: "test/queue-reserve-concurrency", - retry: { - maxAttempts: 1, - }, - run: async ({ useBatch = false }: { useBatch: boolean }, { ctx }) => { - const startEnvStats = await getEnvironmentStats(ctx.environment.id); - // This test ensures that when triggerAndWait is called where the parent and the child share a queue, - // the queue reserve concurrency is used to allow the child to execute. - // We also want to test that the queue can only "reserve" at most up to the concurrency limit, and if - // the reservation fails, the child task will fail - const rootRecursiveRun = await recursiveTask.trigger( - { delayMs: 1_000, depth: 1, useBatch }, - { tags: ["root"] } - ); - - const completedRootRun = await waitForRunStatus(rootRecursiveRun.id, ["COMPLETED"]); - - assert(completedRootRun.status === "COMPLETED", "Root recursive run should be completed"); - - const failingRootRecursiveRun = await recursiveTask.trigger( - { delayMs: 1_000, depth: 2, useBatch }, - { tags: ["failing-root"] } - ); - - const failedRootRun = await waitForRunStatus(failingRootRecursiveRun.id, ["COMPLETED"]); - - assert(!failedRootRun.output?.ok, "Child of failing root run should fail"); - - const envStats = await getEnvironmentStats(ctx.environment.id, "task/recursive-task"); - - logger.info("Environment stats", envStats); - - assert( - startEnvStats.reserveConcurrency - envStats.reserveConcurrency === 0, - "Env reserve concurrency should be 0" - ); - assert( - envStats.queueCurrentConcurrency === 0, - "queue-reserve-concurrency current concurrency should be 0" - ); - assert( - envStats.queueReserveConcurrency === 0, - "queue-reserve-concurrency reserve concurrency should be 0" - ); - }, -}); diff --git a/references/test-tasks/src/utils.ts b/references/test-tasks/src/utils.ts deleted file mode 100644 index 5fa43866d7..0000000000 --- a/references/test-tasks/src/utils.ts +++ /dev/null @@ -1,108 +0,0 @@ -import { runs } from "@trigger.dev/sdk/v3"; -import { z } from "zod"; - -export type RunStatus = Awaited>["status"]; - -export async function waitForRunStatus( - id: string, - statuses: RunStatus[], - timeoutInSeconds?: number, - pollIntervalMs = 1_000 -) { - const run = await runs.retrieve(id); - - if (statuses.includes(run.status)) { - return run; - } - - const start = Date.now(); - - while (Date.now() - start < (timeoutInSeconds ?? 300) * 1_000) { - const run = await runs.retrieve(id); - - if (statuses.includes(run.status)) { - return run; - } - - await new Promise((resolve) => setTimeout(resolve, pollIntervalMs)); - } - - throw new Error( - `Run did not reach status ${statuses.join(" or ")} within ${timeoutInSeconds ?? 300} seconds` - ); -} - -export async function updateEnvironmentConcurrencyLimit( - environmentId: string, - concurrencyLimit: number -) { - if (!process.env.TRIGGER_API_URL) { - throw new Error("TRIGGER_API_URL is not set"); - } - - if (!process.env.TRIGGER_ACCESS_TOKEN) { - throw new Error("TRIGGER_ACCESS_TOKEN is not set"); - } - - // We need to make a request to baseURL + `/admin/api/v1/environments/${environmentId}` with a POST request - // The body needs to be a JSON object with the key `envMaximumConcurrencyLimit` and the value `concurrencyLimit`, and the key `orgMaximumConcurrencyLimit` with the value `concurrencyLimit` - // we also need a Authorization header that has the personal access token from process.env.TRIGGER_ACCESS_TOKEN - - const response = await fetch( - `${process.env.TRIGGER_API_URL}/admin/api/v1/environments/${environmentId}`, - { - method: "POST", - headers: { - "Content-Type": "application/json", - Authorization: `Bearer ${process.env.TRIGGER_ACCESS_TOKEN}`, - }, - body: JSON.stringify({ - envMaximumConcurrencyLimit: concurrencyLimit, - orgMaximumConcurrencyLimit: concurrencyLimit, - }), - } - ); - - if (!response.ok) { - throw new Error(`Failed to update environment concurrency limit: ${response.statusText}`); - } - - return response.json(); -} - -const EnvironmentStatsResponseBody = z.object({ - id: z.string(), - concurrencyLimit: z.number(), - currentConcurrency: z.number(), - queueConcurrency: z.number().optional(), - queueCurrentConcurrency: z.number().optional(), -}); - -export type EnvironmentStatsResponseBody = z.infer; - -export async function getEnvironmentStats( - environmentId: string, - queue?: string -): Promise { - const url = new URL(`${process.env.TRIGGER_API_URL}/admin/api/v1/environments/${environmentId}`); - - if (queue) { - url.searchParams.set("queue", queue); - } - - const response = await fetch(url.toString(), { - method: "GET", - headers: { - Accept: "application/json", - Authorization: `Bearer ${process.env.TRIGGER_ACCESS_TOKEN}`, - }, - }); - - if (!response.ok) { - throw new Error(`Failed to fetch environment stats: ${response.statusText}`); - } - - const responseBody = await response.json(); - - return EnvironmentStatsResponseBody.parse(responseBody); -} diff --git a/references/test-tasks/trigger.config.ts b/references/test-tasks/trigger.config.ts deleted file mode 100644 index b515908f41..0000000000 --- a/references/test-tasks/trigger.config.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { defineConfig } from "@trigger.dev/sdk/v3"; - -export default defineConfig({ - runtime: "node", - project: "proj_qwdshjjnuoepcuupfuvo", - machine: "small-1x", - maxDuration: 3600, - dirs: ["./src/trigger"], - retries: { - enabledInDev: true, - default: { - maxAttempts: 10, - minTimeoutInMs: 5_000, - maxTimeoutInMs: 30_000, - factor: 2, - randomize: true, - }, - }, -}); diff --git a/references/test-tasks/tsconfig.json b/references/test-tasks/tsconfig.json deleted file mode 100644 index 635ecdb766..0000000000 --- a/references/test-tasks/tsconfig.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "compilerOptions": { - "target": "esnext", - "module": "NodeNext", - "moduleResolution": "NodeNext", - "esModuleInterop": true, - "strict": true, - "outDir": "dist", - "skipLibCheck": true, - "customConditions": ["@triggerdotdev/source"], - "jsx": "preserve", - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "lib": ["DOM", "DOM.Iterable"], - "paths": { - "@/*": ["./src/*"] - } - }, - "include": ["./src/**/*.ts", "trigger.config.ts"] -} diff --git a/references/v3-catalog/.gitignore b/references/v3-catalog/.gitignore deleted file mode 100644 index 6524f048dc..0000000000 --- a/references/v3-catalog/.gitignore +++ /dev/null @@ -1 +0,0 @@ -.trigger \ No newline at end of file diff --git a/references/v3-catalog/README.md b/references/v3-catalog/README.md deleted file mode 100644 index b3e0768da1..0000000000 --- a/references/v3-catalog/README.md +++ /dev/null @@ -1,59 +0,0 @@ -# The v3 catalog - -You can test v3 tasks from inside the app in this project. It's designed to be used for testing features and functionality of the v3 SDK. - -## One-time setup - -1. In Postgres go to the "Organizations" table and on your org set the `v3Enabled` column to `true`. - -2. Create a v3 project in the UI of the webapp, you should now be able to select it from the dropdown. - -3. In Postgres go to the "Projects" table and for the project you create change the `externalRef` to `yubjwjsfkxnylobaqvqz`. - -This is so the `trigger.config.ts` file inside the v3-catalog doesn't keep getting changed by people accidentally pushing this. - -## How to use - -1. Make sure you're running the main webapp - -```bash -pnpm run dev --filter webapp -``` - -2. Build the v3 CLI (this needs to be done everytime a code changes is made to the CLI if you're working on it) - -```bash -pnpm run build --filter trigger.dev -``` - -3. CD into the v3-catalog directory - -```bash -cd references/v3-catalog -``` - -4. If you've never logged in to the CLI you'll see an error telling you to login. Do this: - -```bash -pnpm exec trigger login -a http://localhost:3030 -``` - -If this fails because you already are logged in you can create a new profile: - -```bash -pnpm exec trigger login -a http://localhost:3030 --profile local -``` - -Note: if you use a profile then you'll need to append `--profile local` to all commands, like `dev`. - -5. Run the v3 CLI - -```bash -pnpm exec trigger dev -``` - -6. You should see the v3 dev command spitting out messages, including that it's started a background worker. - -7. Go to the webapp now and inside your project you should see some tasks on the "Tasks" page. - -8. Go to the "Test" page in the sidebar and select a task. Then enter a payload and click "Run test". You can tell what the payloads should be by looking at the relevant task file inside the `/references/v3-catalog/src/trigger` folder. Many of them accept an empty payload. diff --git a/references/README.md b/test-projects/README.md similarity index 85% rename from references/README.md rename to test-projects/README.md index 5dba21962a..2d264f1b9e 100644 --- a/references/README.md +++ b/test-projects/README.md @@ -53,24 +53,28 @@ This guide assumes that you have followed the [Contributing.md](https://github.c #### Step-by-Step Instructions 1. **Run an HTTP tunnel**: -You will need to run an HTTP tunnel to expose your local webapp, it is required for some API calls during building the image to deploy on your local instance. This is *optional* if you do not plan to test deployment on your local instance. + You will need to run an HTTP tunnel to expose your local webapp, it is required for some API calls during building the image to deploy on your local instance. This is _optional_ if you do not plan to test deployment on your local instance. + - Download the ngrok CLI. This can be done by following the instructions on ngrok's [website](https://ngrok.com/docs/getting-started/). - Create an account on ngrok to obtain the authtoken and add it to the CLI. ```bash ngrok config add-authtoken ``` + Replace the with the token you obtain from ngrok. + - Run the tunnel. ```bash ngrok http ``` + Replace the with the webapp port, default is `3030`. 2. **Add your tunnel URL to the env**: -After running the ngrok tunnel, you will see URL in your terminal, it will look something like `https://.ngrok-free.app`. -Replace the `APP_ORIGIN` variable with this URL in your `.env` file in the root of the trigger.dev project. + After running the ngrok tunnel, you will see URL in your terminal, it will look something like `https://.ngrok-free.app`. + Replace the `APP_ORIGIN` variable with this URL in your `.env` file in the root of the trigger.dev project. 3. **Run the webapp on localhost**: @@ -89,21 +93,23 @@ pnpm i ``` 5. **Set up a new project in the webapp**: + - Open the webapp running on `localhost:3030`. - Create a new project in the webapp UI. -- Go to the *Project Settings* page and copy the project reference id from there. +- Go to the _Project Settings_ page and copy the project reference id from there. 6. **Copy the hello-world project as a template**: ```bash -cp -r references/hello-world references/ +cp -r test-projects/hello-world test-projects/ ``` Replace `` with your desired project name. 7. **Update project details**: + - Open `/package.json` and change the name field. -*(Tip: Use the same name as in the webapp to avoid confusion.)* + _(Tip: Use the same name as in the webapp to avoid confusion.)_ - Open `/trigger.config.ts` and update the project field with the project reference you copied from the webapp. @@ -116,7 +122,7 @@ pnpm exec trigger login -a http://localhost:3030 --profile local ``` 9. **Run the new project**: -You can now run your project using the CLI with the following command: + You can now run your project using the CLI with the following command: ```bash pnpm exec trigger dev --profile local diff --git a/references/d3-chat/.gitignore b/test-projects/d3-chat/.gitignore similarity index 100% rename from references/d3-chat/.gitignore rename to test-projects/d3-chat/.gitignore diff --git a/references/d3-chat/README.md b/test-projects/d3-chat/README.md similarity index 100% rename from references/d3-chat/README.md rename to test-projects/d3-chat/README.md diff --git a/references/d3-chat/components.json b/test-projects/d3-chat/components.json similarity index 100% rename from references/d3-chat/components.json rename to test-projects/d3-chat/components.json diff --git a/references/d3-chat/next.config.ts b/test-projects/d3-chat/next.config.ts similarity index 100% rename from references/d3-chat/next.config.ts rename to test-projects/d3-chat/next.config.ts diff --git a/references/d3-chat/package.json b/test-projects/d3-chat/package.json similarity index 100% rename from references/d3-chat/package.json rename to test-projects/d3-chat/package.json diff --git a/references/d3-chat/postcss.config.mjs b/test-projects/d3-chat/postcss.config.mjs similarity index 100% rename from references/d3-chat/postcss.config.mjs rename to test-projects/d3-chat/postcss.config.mjs diff --git a/references/d3-chat/public/file.svg b/test-projects/d3-chat/public/file.svg similarity index 100% rename from references/d3-chat/public/file.svg rename to test-projects/d3-chat/public/file.svg diff --git a/references/d3-chat/public/globe.svg b/test-projects/d3-chat/public/globe.svg similarity index 100% rename from references/d3-chat/public/globe.svg rename to test-projects/d3-chat/public/globe.svg diff --git a/references/d3-chat/public/next.svg b/test-projects/d3-chat/public/next.svg similarity index 100% rename from references/d3-chat/public/next.svg rename to test-projects/d3-chat/public/next.svg diff --git a/references/d3-chat/public/vercel.svg b/test-projects/d3-chat/public/vercel.svg similarity index 100% rename from references/d3-chat/public/vercel.svg rename to test-projects/d3-chat/public/vercel.svg diff --git a/references/d3-chat/public/window.svg b/test-projects/d3-chat/public/window.svg similarity index 100% rename from references/d3-chat/public/window.svg rename to test-projects/d3-chat/public/window.svg diff --git a/references/d3-chat/requirements.in b/test-projects/d3-chat/requirements.in similarity index 100% rename from references/d3-chat/requirements.in rename to test-projects/d3-chat/requirements.in diff --git a/references/d3-chat/requirements.txt b/test-projects/d3-chat/requirements.txt similarity index 100% rename from references/d3-chat/requirements.txt rename to test-projects/d3-chat/requirements.txt diff --git a/references/d3-chat/src/app/api/slack/interaction/route.ts b/test-projects/d3-chat/src/app/api/slack/interaction/route.ts similarity index 100% rename from references/d3-chat/src/app/api/slack/interaction/route.ts rename to test-projects/d3-chat/src/app/api/slack/interaction/route.ts diff --git a/references/d3-chat/src/app/favicon.ico b/test-projects/d3-chat/src/app/favicon.ico similarity index 100% rename from references/d3-chat/src/app/favicon.ico rename to test-projects/d3-chat/src/app/favicon.ico diff --git a/references/d3-chat/src/app/globals.css b/test-projects/d3-chat/src/app/globals.css similarity index 100% rename from references/d3-chat/src/app/globals.css rename to test-projects/d3-chat/src/app/globals.css diff --git a/references/d3-chat/src/app/layout.tsx b/test-projects/d3-chat/src/app/layout.tsx similarity index 100% rename from references/d3-chat/src/app/layout.tsx rename to test-projects/d3-chat/src/app/layout.tsx diff --git a/references/d3-chat/src/app/page.tsx b/test-projects/d3-chat/src/app/page.tsx similarity index 100% rename from references/d3-chat/src/app/page.tsx rename to test-projects/d3-chat/src/app/page.tsx diff --git a/references/d3-chat/src/components/chat-container.tsx b/test-projects/d3-chat/src/components/chat-container.tsx similarity index 100% rename from references/d3-chat/src/components/chat-container.tsx rename to test-projects/d3-chat/src/components/chat-container.tsx diff --git a/references/d3-chat/src/components/chat-input.tsx b/test-projects/d3-chat/src/components/chat-input.tsx similarity index 100% rename from references/d3-chat/src/components/chat-input.tsx rename to test-projects/d3-chat/src/components/chat-input.tsx diff --git a/references/d3-chat/src/components/chat-message.tsx b/test-projects/d3-chat/src/components/chat-message.tsx similarity index 100% rename from references/d3-chat/src/components/chat-message.tsx rename to test-projects/d3-chat/src/components/chat-message.tsx diff --git a/references/d3-chat/src/components/header.tsx b/test-projects/d3-chat/src/components/header.tsx similarity index 100% rename from references/d3-chat/src/components/header.tsx rename to test-projects/d3-chat/src/components/header.tsx diff --git a/references/d3-chat/src/components/tool-call-message.tsx b/test-projects/d3-chat/src/components/tool-call-message.tsx similarity index 100% rename from references/d3-chat/src/components/tool-call-message.tsx rename to test-projects/d3-chat/src/components/tool-call-message.tsx diff --git a/references/d3-chat/src/components/ui/avatar.tsx b/test-projects/d3-chat/src/components/ui/avatar.tsx similarity index 100% rename from references/d3-chat/src/components/ui/avatar.tsx rename to test-projects/d3-chat/src/components/ui/avatar.tsx diff --git a/references/d3-chat/src/extensions/playwright.ts b/test-projects/d3-chat/src/extensions/playwright.ts similarity index 100% rename from references/d3-chat/src/extensions/playwright.ts rename to test-projects/d3-chat/src/extensions/playwright.ts diff --git a/references/d3-chat/src/lib/migrate.ts b/test-projects/d3-chat/src/lib/migrate.ts similarity index 100% rename from references/d3-chat/src/lib/migrate.ts rename to test-projects/d3-chat/src/lib/migrate.ts diff --git a/references/d3-chat/src/lib/slack.ts b/test-projects/d3-chat/src/lib/slack.ts similarity index 100% rename from references/d3-chat/src/lib/slack.ts rename to test-projects/d3-chat/src/lib/slack.ts diff --git a/references/d3-chat/src/lib/utils.ts b/test-projects/d3-chat/src/lib/utils.ts similarity index 100% rename from references/d3-chat/src/lib/utils.ts rename to test-projects/d3-chat/src/lib/utils.ts diff --git a/references/d3-chat/src/trigger/chat.ts b/test-projects/d3-chat/src/trigger/chat.ts similarity index 100% rename from references/d3-chat/src/trigger/chat.ts rename to test-projects/d3-chat/src/trigger/chat.ts diff --git a/references/d3-chat/src/trigger/crawler.ts b/test-projects/d3-chat/src/trigger/crawler.ts similarity index 100% rename from references/d3-chat/src/trigger/crawler.ts rename to test-projects/d3-chat/src/trigger/crawler.ts diff --git a/references/d3-chat/src/trigger/python/crawler.py b/test-projects/d3-chat/src/trigger/python/crawler.py similarity index 100% rename from references/d3-chat/src/trigger/python/crawler.py rename to test-projects/d3-chat/src/trigger/python/crawler.py diff --git a/references/d3-chat/src/trigger/sandbox.ts b/test-projects/d3-chat/src/trigger/sandbox.ts similarity index 100% rename from references/d3-chat/src/trigger/sandbox.ts rename to test-projects/d3-chat/src/trigger/sandbox.ts diff --git a/references/d3-chat/src/trigger/schemas.ts b/test-projects/d3-chat/src/trigger/schemas.ts similarity index 100% rename from references/d3-chat/src/trigger/schemas.ts rename to test-projects/d3-chat/src/trigger/schemas.ts diff --git a/references/d3-chat/tailwind.config.ts b/test-projects/d3-chat/tailwind.config.ts similarity index 100% rename from references/d3-chat/tailwind.config.ts rename to test-projects/d3-chat/tailwind.config.ts diff --git a/references/d3-chat/trigger.config.ts b/test-projects/d3-chat/trigger.config.ts similarity index 100% rename from references/d3-chat/trigger.config.ts rename to test-projects/d3-chat/trigger.config.ts diff --git a/references/d3-chat/tsconfig.json b/test-projects/d3-chat/tsconfig.json similarity index 100% rename from references/d3-chat/tsconfig.json rename to test-projects/d3-chat/tsconfig.json diff --git a/references/bun-catalog/.gitignore b/test-projects/hello-world/.gitignore similarity index 100% rename from references/bun-catalog/.gitignore rename to test-projects/hello-world/.gitignore diff --git a/references/hello-world/package.json b/test-projects/hello-world/package.json similarity index 100% rename from references/hello-world/package.json rename to test-projects/hello-world/package.json diff --git a/references/hello-world/src/db.ts b/test-projects/hello-world/src/db.ts similarity index 100% rename from references/hello-world/src/db.ts rename to test-projects/hello-world/src/db.ts diff --git a/references/hello-world/src/index.ts b/test-projects/hello-world/src/index.ts similarity index 100% rename from references/hello-world/src/index.ts rename to test-projects/hello-world/src/index.ts diff --git a/references/hello-world/src/resourceMonitor.ts b/test-projects/hello-world/src/resourceMonitor.ts similarity index 100% rename from references/hello-world/src/resourceMonitor.ts rename to test-projects/hello-world/src/resourceMonitor.ts diff --git a/references/hello-world/src/trigger/deadlocks.ts b/test-projects/hello-world/src/trigger/deadlocks.ts similarity index 100% rename from references/hello-world/src/trigger/deadlocks.ts rename to test-projects/hello-world/src/trigger/deadlocks.ts diff --git a/references/hello-world/src/trigger/envvars.ts b/test-projects/hello-world/src/trigger/envvars.ts similarity index 100% rename from references/hello-world/src/trigger/envvars.ts rename to test-projects/hello-world/src/trigger/envvars.ts diff --git a/references/hello-world/src/trigger/example.ts b/test-projects/hello-world/src/trigger/example.ts similarity index 100% rename from references/hello-world/src/trigger/example.ts rename to test-projects/hello-world/src/trigger/example.ts diff --git a/references/hello-world/src/trigger/idempotency.ts b/test-projects/hello-world/src/trigger/idempotency.ts similarity index 100% rename from references/hello-world/src/trigger/idempotency.ts rename to test-projects/hello-world/src/trigger/idempotency.ts diff --git a/references/hello-world/src/trigger/init.ts b/test-projects/hello-world/src/trigger/init.ts similarity index 100% rename from references/hello-world/src/trigger/init.ts rename to test-projects/hello-world/src/trigger/init.ts diff --git a/references/hello-world/src/trigger/oom.ts b/test-projects/hello-world/src/trigger/oom.ts similarity index 100% rename from references/hello-world/src/trigger/oom.ts rename to test-projects/hello-world/src/trigger/oom.ts diff --git a/references/hello-world/src/trigger/parallel-waits.ts b/test-projects/hello-world/src/trigger/parallel-waits.ts similarity index 100% rename from references/hello-world/src/trigger/parallel-waits.ts rename to test-projects/hello-world/src/trigger/parallel-waits.ts diff --git a/references/hello-world/src/trigger/pendingVersions.ts b/test-projects/hello-world/src/trigger/pendingVersions.ts similarity index 100% rename from references/hello-world/src/trigger/pendingVersions.ts rename to test-projects/hello-world/src/trigger/pendingVersions.ts diff --git a/references/hello-world/src/trigger/prioritize-continuing.ts b/test-projects/hello-world/src/trigger/prioritize-continuing.ts similarity index 100% rename from references/hello-world/src/trigger/prioritize-continuing.ts rename to test-projects/hello-world/src/trigger/prioritize-continuing.ts diff --git a/references/hello-world/src/trigger/priority.ts b/test-projects/hello-world/src/trigger/priority.ts similarity index 100% rename from references/hello-world/src/trigger/priority.ts rename to test-projects/hello-world/src/trigger/priority.ts diff --git a/references/hello-world/src/trigger/queues.ts b/test-projects/hello-world/src/trigger/queues.ts similarity index 100% rename from references/hello-world/src/trigger/queues.ts rename to test-projects/hello-world/src/trigger/queues.ts diff --git a/references/hello-world/src/trigger/release-concurrency.ts b/test-projects/hello-world/src/trigger/release-concurrency.ts similarity index 100% rename from references/hello-world/src/trigger/release-concurrency.ts rename to test-projects/hello-world/src/trigger/release-concurrency.ts diff --git a/references/hello-world/src/trigger/retry.ts b/test-projects/hello-world/src/trigger/retry.ts similarity index 100% rename from references/hello-world/src/trigger/retry.ts rename to test-projects/hello-world/src/trigger/retry.ts diff --git a/references/hello-world/src/trigger/schedule.ts b/test-projects/hello-world/src/trigger/schedule.ts similarity index 100% rename from references/hello-world/src/trigger/schedule.ts rename to test-projects/hello-world/src/trigger/schedule.ts diff --git a/references/hello-world/src/trigger/tags.ts b/test-projects/hello-world/src/trigger/tags.ts similarity index 100% rename from references/hello-world/src/trigger/tags.ts rename to test-projects/hello-world/src/trigger/tags.ts diff --git a/references/hello-world/src/trigger/waits.ts b/test-projects/hello-world/src/trigger/waits.ts similarity index 100% rename from references/hello-world/src/trigger/waits.ts rename to test-projects/hello-world/src/trigger/waits.ts diff --git a/references/hello-world/trigger.config.ts b/test-projects/hello-world/trigger.config.ts similarity index 100% rename from references/hello-world/trigger.config.ts rename to test-projects/hello-world/trigger.config.ts diff --git a/references/hello-world/tsconfig.json b/test-projects/hello-world/tsconfig.json similarity index 100% rename from references/hello-world/tsconfig.json rename to test-projects/hello-world/tsconfig.json diff --git a/references/hello-world/.gitignore b/test-projects/init-shell-js/.gitignore similarity index 100% rename from references/hello-world/.gitignore rename to test-projects/init-shell-js/.gitignore diff --git a/references/init-shell-js/package.json b/test-projects/init-shell-js/package.json similarity index 100% rename from references/init-shell-js/package.json rename to test-projects/init-shell-js/package.json diff --git a/references/init-shell-js/src/index.js b/test-projects/init-shell-js/src/index.js similarity index 100% rename from references/init-shell-js/src/index.js rename to test-projects/init-shell-js/src/index.js diff --git a/references/init-shell/package.json b/test-projects/init-shell/package.json similarity index 100% rename from references/init-shell/package.json rename to test-projects/init-shell/package.json diff --git a/references/init-shell/src/index.ts b/test-projects/init-shell/src/index.ts similarity index 100% rename from references/init-shell/src/index.ts rename to test-projects/init-shell/src/index.ts diff --git a/references/init-shell/tsconfig.json b/test-projects/init-shell/tsconfig.json similarity index 100% rename from references/init-shell/tsconfig.json rename to test-projects/init-shell/tsconfig.json diff --git a/references/nextjs-realtime/.gitignore b/test-projects/nextjs-realtime/.gitignore similarity index 100% rename from references/nextjs-realtime/.gitignore rename to test-projects/nextjs-realtime/.gitignore diff --git a/references/d3-openai-agents/README.md b/test-projects/nextjs-realtime/README.md similarity index 100% rename from references/d3-openai-agents/README.md rename to test-projects/nextjs-realtime/README.md diff --git a/references/nextjs-realtime/batchinput.jsonl b/test-projects/nextjs-realtime/batchinput.jsonl similarity index 100% rename from references/nextjs-realtime/batchinput.jsonl rename to test-projects/nextjs-realtime/batchinput.jsonl diff --git a/references/nextjs-realtime/components.json b/test-projects/nextjs-realtime/components.json similarity index 100% rename from references/nextjs-realtime/components.json rename to test-projects/nextjs-realtime/components.json diff --git a/references/nextjs-realtime/next.config.mjs b/test-projects/nextjs-realtime/next.config.mjs similarity index 100% rename from references/nextjs-realtime/next.config.mjs rename to test-projects/nextjs-realtime/next.config.mjs diff --git a/references/nextjs-realtime/package.json b/test-projects/nextjs-realtime/package.json similarity index 100% rename from references/nextjs-realtime/package.json rename to test-projects/nextjs-realtime/package.json diff --git a/references/nextjs-realtime/postcss.config.mjs b/test-projects/nextjs-realtime/postcss.config.mjs similarity index 100% rename from references/nextjs-realtime/postcss.config.mjs rename to test-projects/nextjs-realtime/postcss.config.mjs diff --git a/references/nextjs-realtime/src/app/actions.ts b/test-projects/nextjs-realtime/src/app/actions.ts similarity index 100% rename from references/nextjs-realtime/src/app/actions.ts rename to test-projects/nextjs-realtime/src/app/actions.ts diff --git a/references/nextjs-realtime/src/app/ai/[id]/ClientAiDetails.tsx b/test-projects/nextjs-realtime/src/app/ai/[id]/ClientAiDetails.tsx similarity index 100% rename from references/nextjs-realtime/src/app/ai/[id]/ClientAiDetails.tsx rename to test-projects/nextjs-realtime/src/app/ai/[id]/ClientAiDetails.tsx diff --git a/references/nextjs-realtime/src/app/ai/[id]/page.tsx b/test-projects/nextjs-realtime/src/app/ai/[id]/page.tsx similarity index 100% rename from references/nextjs-realtime/src/app/ai/[id]/page.tsx rename to test-projects/nextjs-realtime/src/app/ai/[id]/page.tsx diff --git a/references/nextjs-realtime/src/app/api/uploadthing/core.ts b/test-projects/nextjs-realtime/src/app/api/uploadthing/core.ts similarity index 100% rename from references/nextjs-realtime/src/app/api/uploadthing/core.ts rename to test-projects/nextjs-realtime/src/app/api/uploadthing/core.ts diff --git a/references/nextjs-realtime/src/app/api/uploadthing/route.ts b/test-projects/nextjs-realtime/src/app/api/uploadthing/route.ts similarity index 100% rename from references/nextjs-realtime/src/app/api/uploadthing/route.ts rename to test-projects/nextjs-realtime/src/app/api/uploadthing/route.ts diff --git a/references/nextjs-realtime/src/app/batches/[id]/ClientBatchRunDetails.tsx b/test-projects/nextjs-realtime/src/app/batches/[id]/ClientBatchRunDetails.tsx similarity index 100% rename from references/nextjs-realtime/src/app/batches/[id]/ClientBatchRunDetails.tsx rename to test-projects/nextjs-realtime/src/app/batches/[id]/ClientBatchRunDetails.tsx diff --git a/references/nextjs-realtime/src/app/batches/[id]/page.tsx b/test-projects/nextjs-realtime/src/app/batches/[id]/page.tsx similarity index 100% rename from references/nextjs-realtime/src/app/batches/[id]/page.tsx rename to test-projects/nextjs-realtime/src/app/batches/[id]/page.tsx diff --git a/references/nextjs-realtime/src/app/csv/[id]/RealtimeCSVRun.tsx b/test-projects/nextjs-realtime/src/app/csv/[id]/RealtimeCSVRun.tsx similarity index 100% rename from references/nextjs-realtime/src/app/csv/[id]/RealtimeCSVRun.tsx rename to test-projects/nextjs-realtime/src/app/csv/[id]/RealtimeCSVRun.tsx diff --git a/references/nextjs-realtime/src/app/csv/[id]/page.tsx b/test-projects/nextjs-realtime/src/app/csv/[id]/page.tsx similarity index 100% rename from references/nextjs-realtime/src/app/csv/[id]/page.tsx rename to test-projects/nextjs-realtime/src/app/csv/[id]/page.tsx diff --git a/references/nextjs-realtime/src/app/csv/page.tsx b/test-projects/nextjs-realtime/src/app/csv/page.tsx similarity index 100% rename from references/nextjs-realtime/src/app/csv/page.tsx rename to test-projects/nextjs-realtime/src/app/csv/page.tsx diff --git a/references/d3-openai-agents/src/app/favicon.ico b/test-projects/nextjs-realtime/src/app/favicon.ico similarity index 100% rename from references/d3-openai-agents/src/app/favicon.ico rename to test-projects/nextjs-realtime/src/app/favicon.ico diff --git a/references/nextjs-realtime/src/app/fonts/GeistMonoVF.woff b/test-projects/nextjs-realtime/src/app/fonts/GeistMonoVF.woff similarity index 100% rename from references/nextjs-realtime/src/app/fonts/GeistMonoVF.woff rename to test-projects/nextjs-realtime/src/app/fonts/GeistMonoVF.woff diff --git a/references/nextjs-realtime/src/app/fonts/GeistVF.woff b/test-projects/nextjs-realtime/src/app/fonts/GeistVF.woff similarity index 100% rename from references/nextjs-realtime/src/app/fonts/GeistVF.woff rename to test-projects/nextjs-realtime/src/app/fonts/GeistVF.woff diff --git a/references/nextjs-realtime/src/app/globals.css b/test-projects/nextjs-realtime/src/app/globals.css similarity index 100% rename from references/nextjs-realtime/src/app/globals.css rename to test-projects/nextjs-realtime/src/app/globals.css diff --git a/references/nextjs-realtime/src/app/layout.tsx b/test-projects/nextjs-realtime/src/app/layout.tsx similarity index 100% rename from references/nextjs-realtime/src/app/layout.tsx rename to test-projects/nextjs-realtime/src/app/layout.tsx diff --git a/references/nextjs-realtime/src/app/openai/page.tsx b/test-projects/nextjs-realtime/src/app/openai/page.tsx similarity index 100% rename from references/nextjs-realtime/src/app/openai/page.tsx rename to test-projects/nextjs-realtime/src/app/openai/page.tsx diff --git a/references/nextjs-realtime/src/app/page.tsx b/test-projects/nextjs-realtime/src/app/page.tsx similarity index 100% rename from references/nextjs-realtime/src/app/page.tsx rename to test-projects/nextjs-realtime/src/app/page.tsx diff --git a/references/nextjs-realtime/src/app/realtime/[id]/page.tsx b/test-projects/nextjs-realtime/src/app/realtime/[id]/page.tsx similarity index 100% rename from references/nextjs-realtime/src/app/realtime/[id]/page.tsx rename to test-projects/nextjs-realtime/src/app/realtime/[id]/page.tsx diff --git a/references/nextjs-realtime/src/app/realtime/page.tsx b/test-projects/nextjs-realtime/src/app/realtime/page.tsx similarity index 100% rename from references/nextjs-realtime/src/app/realtime/page.tsx rename to test-projects/nextjs-realtime/src/app/realtime/page.tsx diff --git a/references/nextjs-realtime/src/app/runs/[id]/ClientRunDetails.tsx b/test-projects/nextjs-realtime/src/app/runs/[id]/ClientRunDetails.tsx similarity index 100% rename from references/nextjs-realtime/src/app/runs/[id]/ClientRunDetails.tsx rename to test-projects/nextjs-realtime/src/app/runs/[id]/ClientRunDetails.tsx diff --git a/references/nextjs-realtime/src/app/runs/[id]/page.tsx b/test-projects/nextjs-realtime/src/app/runs/[id]/page.tsx similarity index 100% rename from references/nextjs-realtime/src/app/runs/[id]/page.tsx rename to test-projects/nextjs-realtime/src/app/runs/[id]/page.tsx diff --git a/references/nextjs-realtime/src/app/uploads/[id]/ClientUploadDetails.tsx b/test-projects/nextjs-realtime/src/app/uploads/[id]/ClientUploadDetails.tsx similarity index 100% rename from references/nextjs-realtime/src/app/uploads/[id]/ClientUploadDetails.tsx rename to test-projects/nextjs-realtime/src/app/uploads/[id]/ClientUploadDetails.tsx diff --git a/references/nextjs-realtime/src/app/uploads/[id]/page.tsx b/test-projects/nextjs-realtime/src/app/uploads/[id]/page.tsx similarity index 100% rename from references/nextjs-realtime/src/app/uploads/[id]/page.tsx rename to test-projects/nextjs-realtime/src/app/uploads/[id]/page.tsx diff --git a/references/nextjs-realtime/src/components/BatchProgressIndicator.tsx b/test-projects/nextjs-realtime/src/components/BatchProgressIndicator.tsx similarity index 100% rename from references/nextjs-realtime/src/components/BatchProgressIndicator.tsx rename to test-projects/nextjs-realtime/src/components/BatchProgressIndicator.tsx diff --git a/references/nextjs-realtime/src/components/BatchRunButton.tsx b/test-projects/nextjs-realtime/src/components/BatchRunButton.tsx similarity index 100% rename from references/nextjs-realtime/src/components/BatchRunButton.tsx rename to test-projects/nextjs-realtime/src/components/BatchRunButton.tsx diff --git a/references/nextjs-realtime/src/components/BatchSubmissionForm.tsx b/test-projects/nextjs-realtime/src/components/BatchSubmissionForm.tsx similarity index 100% rename from references/nextjs-realtime/src/components/BatchSubmissionForm.tsx rename to test-projects/nextjs-realtime/src/components/BatchSubmissionForm.tsx diff --git a/references/nextjs-realtime/src/components/HandleUploadFooter.tsx b/test-projects/nextjs-realtime/src/components/HandleUploadFooter.tsx similarity index 100% rename from references/nextjs-realtime/src/components/HandleUploadFooter.tsx rename to test-projects/nextjs-realtime/src/components/HandleUploadFooter.tsx diff --git a/references/nextjs-realtime/src/components/ImageUploadButton.tsx b/test-projects/nextjs-realtime/src/components/ImageUploadButton.tsx similarity index 100% rename from references/nextjs-realtime/src/components/ImageUploadButton.tsx rename to test-projects/nextjs-realtime/src/components/ImageUploadButton.tsx diff --git a/references/nextjs-realtime/src/components/RealtimeComparison.tsx b/test-projects/nextjs-realtime/src/components/RealtimeComparison.tsx similarity index 100% rename from references/nextjs-realtime/src/components/RealtimeComparison.tsx rename to test-projects/nextjs-realtime/src/components/RealtimeComparison.tsx diff --git a/references/nextjs-realtime/src/components/RunButton.tsx b/test-projects/nextjs-realtime/src/components/RunButton.tsx similarity index 100% rename from references/nextjs-realtime/src/components/RunButton.tsx rename to test-projects/nextjs-realtime/src/components/RunButton.tsx diff --git a/references/nextjs-realtime/src/components/RunDetails.tsx b/test-projects/nextjs-realtime/src/components/RunDetails.tsx similarity index 100% rename from references/nextjs-realtime/src/components/RunDetails.tsx rename to test-projects/nextjs-realtime/src/components/RunDetails.tsx diff --git a/references/nextjs-realtime/src/components/RunRealtimeComparison.tsx b/test-projects/nextjs-realtime/src/components/RunRealtimeComparison.tsx similarity index 100% rename from references/nextjs-realtime/src/components/RunRealtimeComparison.tsx rename to test-projects/nextjs-realtime/src/components/RunRealtimeComparison.tsx diff --git a/references/nextjs-realtime/src/components/TriggerButton.tsx b/test-projects/nextjs-realtime/src/components/TriggerButton.tsx similarity index 100% rename from references/nextjs-realtime/src/components/TriggerButton.tsx rename to test-projects/nextjs-realtime/src/components/TriggerButton.tsx diff --git a/references/nextjs-realtime/src/components/TriggerButtonWithStreaming.tsx b/test-projects/nextjs-realtime/src/components/TriggerButtonWithStreaming.tsx similarity index 100% rename from references/nextjs-realtime/src/components/TriggerButtonWithStreaming.tsx rename to test-projects/nextjs-realtime/src/components/TriggerButtonWithStreaming.tsx diff --git a/references/nextjs-realtime/src/components/UploadImageDisplay.tsx b/test-projects/nextjs-realtime/src/components/UploadImageDisplay.tsx similarity index 100% rename from references/nextjs-realtime/src/components/UploadImageDisplay.tsx rename to test-projects/nextjs-realtime/src/components/UploadImageDisplay.tsx diff --git a/references/nextjs-realtime/src/components/ui/alert.tsx b/test-projects/nextjs-realtime/src/components/ui/alert.tsx similarity index 100% rename from references/nextjs-realtime/src/components/ui/alert.tsx rename to test-projects/nextjs-realtime/src/components/ui/alert.tsx diff --git a/references/nextjs-realtime/src/components/ui/badge.tsx b/test-projects/nextjs-realtime/src/components/ui/badge.tsx similarity index 100% rename from references/nextjs-realtime/src/components/ui/badge.tsx rename to test-projects/nextjs-realtime/src/components/ui/badge.tsx diff --git a/references/nextjs-realtime/src/components/ui/button.tsx b/test-projects/nextjs-realtime/src/components/ui/button.tsx similarity index 100% rename from references/nextjs-realtime/src/components/ui/button.tsx rename to test-projects/nextjs-realtime/src/components/ui/button.tsx diff --git a/references/nextjs-realtime/src/components/ui/card.tsx b/test-projects/nextjs-realtime/src/components/ui/card.tsx similarity index 100% rename from references/nextjs-realtime/src/components/ui/card.tsx rename to test-projects/nextjs-realtime/src/components/ui/card.tsx diff --git a/references/nextjs-realtime/src/components/ui/dialog.tsx b/test-projects/nextjs-realtime/src/components/ui/dialog.tsx similarity index 100% rename from references/nextjs-realtime/src/components/ui/dialog.tsx rename to test-projects/nextjs-realtime/src/components/ui/dialog.tsx diff --git a/references/nextjs-realtime/src/components/ui/progress.tsx b/test-projects/nextjs-realtime/src/components/ui/progress.tsx similarity index 100% rename from references/nextjs-realtime/src/components/ui/progress.tsx rename to test-projects/nextjs-realtime/src/components/ui/progress.tsx diff --git a/references/nextjs-realtime/src/components/ui/scroll-area.tsx b/test-projects/nextjs-realtime/src/components/ui/scroll-area.tsx similarity index 100% rename from references/nextjs-realtime/src/components/ui/scroll-area.tsx rename to test-projects/nextjs-realtime/src/components/ui/scroll-area.tsx diff --git a/references/nextjs-realtime/src/components/ui/table.tsx b/test-projects/nextjs-realtime/src/components/ui/table.tsx similarity index 100% rename from references/nextjs-realtime/src/components/ui/table.tsx rename to test-projects/nextjs-realtime/src/components/ui/table.tsx diff --git a/references/nextjs-realtime/src/components/ui/tabs.tsx b/test-projects/nextjs-realtime/src/components/ui/tabs.tsx similarity index 100% rename from references/nextjs-realtime/src/components/ui/tabs.tsx rename to test-projects/nextjs-realtime/src/components/ui/tabs.tsx diff --git a/references/nextjs-realtime/src/components/ui/textarea.tsx b/test-projects/nextjs-realtime/src/components/ui/textarea.tsx similarity index 100% rename from references/nextjs-realtime/src/components/ui/textarea.tsx rename to test-projects/nextjs-realtime/src/components/ui/textarea.tsx diff --git a/references/nextjs-realtime/src/hooks/useHandleUploadRun.ts b/test-projects/nextjs-realtime/src/hooks/useHandleUploadRun.ts similarity index 100% rename from references/nextjs-realtime/src/hooks/useHandleUploadRun.ts rename to test-projects/nextjs-realtime/src/hooks/useHandleUploadRun.ts diff --git a/references/d3-openai-agents/src/lib/utils.ts b/test-projects/nextjs-realtime/src/lib/utils.ts similarity index 100% rename from references/d3-openai-agents/src/lib/utils.ts rename to test-projects/nextjs-realtime/src/lib/utils.ts diff --git a/references/nextjs-realtime/src/trigger/ai.ts b/test-projects/nextjs-realtime/src/trigger/ai.ts similarity index 100% rename from references/nextjs-realtime/src/trigger/ai.ts rename to test-projects/nextjs-realtime/src/trigger/ai.ts diff --git a/references/nextjs-realtime/src/trigger/csv.ts b/test-projects/nextjs-realtime/src/trigger/csv.ts similarity index 100% rename from references/nextjs-realtime/src/trigger/csv.ts rename to test-projects/nextjs-realtime/src/trigger/csv.ts diff --git a/references/nextjs-realtime/src/trigger/example.ts b/test-projects/nextjs-realtime/src/trigger/example.ts similarity index 100% rename from references/nextjs-realtime/src/trigger/example.ts rename to test-projects/nextjs-realtime/src/trigger/example.ts diff --git a/references/nextjs-realtime/src/trigger/images.ts b/test-projects/nextjs-realtime/src/trigger/images.ts similarity index 100% rename from references/nextjs-realtime/src/trigger/images.ts rename to test-projects/nextjs-realtime/src/trigger/images.ts diff --git a/references/nextjs-realtime/src/trigger/openaiBatch.ts b/test-projects/nextjs-realtime/src/trigger/openaiBatch.ts similarity index 100% rename from references/nextjs-realtime/src/trigger/openaiBatch.ts rename to test-projects/nextjs-realtime/src/trigger/openaiBatch.ts diff --git a/references/nextjs-realtime/src/trigger/rsc.tsx b/test-projects/nextjs-realtime/src/trigger/rsc.tsx similarity index 100% rename from references/nextjs-realtime/src/trigger/rsc.tsx rename to test-projects/nextjs-realtime/src/trigger/rsc.tsx diff --git a/references/nextjs-realtime/src/trigger/schemas.ts b/test-projects/nextjs-realtime/src/trigger/schemas.ts similarity index 100% rename from references/nextjs-realtime/src/trigger/schemas.ts rename to test-projects/nextjs-realtime/src/trigger/schemas.ts diff --git a/references/nextjs-realtime/src/utils/schemas.ts b/test-projects/nextjs-realtime/src/utils/schemas.ts similarity index 100% rename from references/nextjs-realtime/src/utils/schemas.ts rename to test-projects/nextjs-realtime/src/utils/schemas.ts diff --git a/references/nextjs-realtime/src/utils/uploadthing.ts b/test-projects/nextjs-realtime/src/utils/uploadthing.ts similarity index 100% rename from references/nextjs-realtime/src/utils/uploadthing.ts rename to test-projects/nextjs-realtime/src/utils/uploadthing.ts diff --git a/references/nextjs-realtime/tailwind.config.ts b/test-projects/nextjs-realtime/tailwind.config.ts similarity index 100% rename from references/nextjs-realtime/tailwind.config.ts rename to test-projects/nextjs-realtime/tailwind.config.ts diff --git a/references/nextjs-realtime/trigger.config.ts b/test-projects/nextjs-realtime/trigger.config.ts similarity index 100% rename from references/nextjs-realtime/trigger.config.ts rename to test-projects/nextjs-realtime/trigger.config.ts diff --git a/references/nextjs-realtime/tsconfig.json b/test-projects/nextjs-realtime/tsconfig.json similarity index 100% rename from references/nextjs-realtime/tsconfig.json rename to test-projects/nextjs-realtime/tsconfig.json diff --git a/references/python-catalog/package.json b/test-projects/python-catalog/package.json similarity index 100% rename from references/python-catalog/package.json rename to test-projects/python-catalog/package.json diff --git a/references/python-catalog/requirements.txt b/test-projects/python-catalog/requirements.txt similarity index 100% rename from references/python-catalog/requirements.txt rename to test-projects/python-catalog/requirements.txt diff --git a/references/python-catalog/src/python/html2text_url.py b/test-projects/python-catalog/src/python/html2text_url.py similarity index 100% rename from references/python-catalog/src/python/html2text_url.py rename to test-projects/python-catalog/src/python/html2text_url.py diff --git a/references/python-catalog/src/trigger/pythonTasks.ts b/test-projects/python-catalog/src/trigger/pythonTasks.ts similarity index 100% rename from references/python-catalog/src/trigger/pythonTasks.ts rename to test-projects/python-catalog/src/trigger/pythonTasks.ts diff --git a/references/python-catalog/trigger.config.ts b/test-projects/python-catalog/trigger.config.ts similarity index 100% rename from references/python-catalog/trigger.config.ts rename to test-projects/python-catalog/trigger.config.ts diff --git a/references/bun-catalog/tsconfig.json b/test-projects/python-catalog/tsconfig.json similarity index 100% rename from references/bun-catalog/tsconfig.json rename to test-projects/python-catalog/tsconfig.json diff --git a/references/v3-catalog/.env.example b/test-projects/v3-catalog/.env.example similarity index 100% rename from references/v3-catalog/.env.example rename to test-projects/v3-catalog/.env.example diff --git a/references/init-shell-js/.gitignore b/test-projects/v3-catalog/.gitignore similarity index 100% rename from references/init-shell-js/.gitignore rename to test-projects/v3-catalog/.gitignore diff --git a/references/v3-catalog/.uploadable-env b/test-projects/v3-catalog/.uploadable-env similarity index 100% rename from references/v3-catalog/.uploadable-env rename to test-projects/v3-catalog/.uploadable-env diff --git a/references/bun-catalog/README.md b/test-projects/v3-catalog/README.md similarity index 100% rename from references/bun-catalog/README.md rename to test-projects/v3-catalog/README.md diff --git a/references/v3-catalog/package.json b/test-projects/v3-catalog/package.json similarity index 100% rename from references/v3-catalog/package.json rename to test-projects/v3-catalog/package.json diff --git a/references/v3-catalog/prisma/migrations/20240821142001_add_initial_schema/migration.sql b/test-projects/v3-catalog/prisma/migrations/20240821142001_add_initial_schema/migration.sql similarity index 100% rename from references/v3-catalog/prisma/migrations/20240821142001_add_initial_schema/migration.sql rename to test-projects/v3-catalog/prisma/migrations/20240821142001_add_initial_schema/migration.sql diff --git a/references/v3-catalog/prisma/migrations/migration_lock.toml b/test-projects/v3-catalog/prisma/migrations/migration_lock.toml similarity index 100% rename from references/v3-catalog/prisma/migrations/migration_lock.toml rename to test-projects/v3-catalog/prisma/migrations/migration_lock.toml diff --git a/references/v3-catalog/prisma/schema/post.prisma b/test-projects/v3-catalog/prisma/schema/post.prisma similarity index 100% rename from references/v3-catalog/prisma/schema/post.prisma rename to test-projects/v3-catalog/prisma/schema/post.prisma diff --git a/references/v3-catalog/prisma/schema/schema.prisma b/test-projects/v3-catalog/prisma/schema/schema.prisma similarity index 100% rename from references/v3-catalog/prisma/schema/schema.prisma rename to test-projects/v3-catalog/prisma/schema/schema.prisma diff --git a/references/v3-catalog/prisma/schema/user.prisma b/test-projects/v3-catalog/prisma/schema/user.prisma similarity index 100% rename from references/v3-catalog/prisma/schema/user.prisma rename to test-projects/v3-catalog/prisma/schema/user.prisma diff --git a/references/v3-catalog/prisma/sql/getUsersWithPosts.sql b/test-projects/v3-catalog/prisma/sql/getUsersWithPosts.sql similarity index 100% rename from references/v3-catalog/prisma/sql/getUsersWithPosts.sql rename to test-projects/v3-catalog/prisma/sql/getUsersWithPosts.sql diff --git a/references/v3-catalog/src/clientUsage.ts b/test-projects/v3-catalog/src/clientUsage.ts similarity index 100% rename from references/v3-catalog/src/clientUsage.ts rename to test-projects/v3-catalog/src/clientUsage.ts diff --git a/references/v3-catalog/src/db.ts b/test-projects/v3-catalog/src/db.ts similarity index 100% rename from references/v3-catalog/src/db.ts rename to test-projects/v3-catalog/src/db.ts diff --git a/references/v3-catalog/src/env.ts b/test-projects/v3-catalog/src/env.ts similarity index 100% rename from references/v3-catalog/src/env.ts rename to test-projects/v3-catalog/src/env.ts diff --git a/references/v3-catalog/src/kysely/types.ts b/test-projects/v3-catalog/src/kysely/types.ts similarity index 100% rename from references/v3-catalog/src/kysely/types.ts rename to test-projects/v3-catalog/src/kysely/types.ts diff --git a/references/v3-catalog/src/management.ts b/test-projects/v3-catalog/src/management.ts similarity index 100% rename from references/v3-catalog/src/management.ts rename to test-projects/v3-catalog/src/management.ts diff --git a/references/v3-catalog/src/queues.ts b/test-projects/v3-catalog/src/queues.ts similarity index 100% rename from references/v3-catalog/src/queues.ts rename to test-projects/v3-catalog/src/queues.ts diff --git a/references/v3-catalog/src/telemetry.ts b/test-projects/v3-catalog/src/telemetry.ts similarity index 100% rename from references/v3-catalog/src/telemetry.ts rename to test-projects/v3-catalog/src/telemetry.ts diff --git a/references/v3-catalog/src/tracer.ts b/test-projects/v3-catalog/src/tracer.ts similarity index 100% rename from references/v3-catalog/src/tracer.ts rename to test-projects/v3-catalog/src/tracer.ts diff --git a/references/v3-catalog/src/trigger/batch.ts b/test-projects/v3-catalog/src/trigger/batch.ts similarity index 100% rename from references/v3-catalog/src/trigger/batch.ts rename to test-projects/v3-catalog/src/trigger/batch.ts diff --git a/references/v3-catalog/src/trigger/binaries.ts b/test-projects/v3-catalog/src/trigger/binaries.ts similarity index 100% rename from references/v3-catalog/src/trigger/binaries.ts rename to test-projects/v3-catalog/src/trigger/binaries.ts diff --git a/references/v3-catalog/src/trigger/checkpoints.ts b/test-projects/v3-catalog/src/trigger/checkpoints.ts similarity index 100% rename from references/v3-catalog/src/trigger/checkpoints.ts rename to test-projects/v3-catalog/src/trigger/checkpoints.ts diff --git a/references/v3-catalog/src/trigger/concurrency.ts b/test-projects/v3-catalog/src/trigger/concurrency.ts similarity index 100% rename from references/v3-catalog/src/trigger/concurrency.ts rename to test-projects/v3-catalog/src/trigger/concurrency.ts diff --git a/references/v3-catalog/src/trigger/crash.ts b/test-projects/v3-catalog/src/trigger/crash.ts similarity index 100% rename from references/v3-catalog/src/trigger/crash.ts rename to test-projects/v3-catalog/src/trigger/crash.ts diff --git a/references/v3-catalog/src/trigger/decorators.ts b/test-projects/v3-catalog/src/trigger/decorators.ts similarity index 100% rename from references/v3-catalog/src/trigger/decorators.ts rename to test-projects/v3-catalog/src/trigger/decorators.ts diff --git a/references/v3-catalog/src/trigger/email.tsx b/test-projects/v3-catalog/src/trigger/email.tsx similarity index 100% rename from references/v3-catalog/src/trigger/email.tsx rename to test-projects/v3-catalog/src/trigger/email.tsx diff --git a/references/v3-catalog/src/trigger/emails/index.tsx b/test-projects/v3-catalog/src/trigger/emails/index.tsx similarity index 100% rename from references/v3-catalog/src/trigger/emails/index.tsx rename to test-projects/v3-catalog/src/trigger/emails/index.tsx diff --git a/references/v3-catalog/src/trigger/idempotencyKeys.ts b/test-projects/v3-catalog/src/trigger/idempotencyKeys.ts similarity index 100% rename from references/v3-catalog/src/trigger/idempotencyKeys.ts rename to test-projects/v3-catalog/src/trigger/idempotencyKeys.ts diff --git a/references/v3-catalog/src/trigger/init.ts b/test-projects/v3-catalog/src/trigger/init.ts similarity index 100% rename from references/v3-catalog/src/trigger/init.ts rename to test-projects/v3-catalog/src/trigger/init.ts diff --git a/references/v3-catalog/src/trigger/javascript-esm.mjs b/test-projects/v3-catalog/src/trigger/javascript-esm.mjs similarity index 100% rename from references/v3-catalog/src/trigger/javascript-esm.mjs rename to test-projects/v3-catalog/src/trigger/javascript-esm.mjs diff --git a/references/v3-catalog/src/trigger/javascript.cjs b/test-projects/v3-catalog/src/trigger/javascript.cjs similarity index 100% rename from references/v3-catalog/src/trigger/javascript.cjs rename to test-projects/v3-catalog/src/trigger/javascript.cjs diff --git a/references/v3-catalog/src/trigger/lazyAttempts.ts b/test-projects/v3-catalog/src/trigger/lazyAttempts.ts similarity index 100% rename from references/v3-catalog/src/trigger/lazyAttempts.ts rename to test-projects/v3-catalog/src/trigger/lazyAttempts.ts diff --git a/references/v3-catalog/src/trigger/logging.ts b/test-projects/v3-catalog/src/trigger/logging.ts similarity index 100% rename from references/v3-catalog/src/trigger/logging.ts rename to test-projects/v3-catalog/src/trigger/logging.ts diff --git a/references/v3-catalog/src/trigger/longRunning.ts b/test-projects/v3-catalog/src/trigger/longRunning.ts similarity index 100% rename from references/v3-catalog/src/trigger/longRunning.ts rename to test-projects/v3-catalog/src/trigger/longRunning.ts diff --git a/references/v3-catalog/src/trigger/maxDuration.ts b/test-projects/v3-catalog/src/trigger/maxDuration.ts similarity index 100% rename from references/v3-catalog/src/trigger/maxDuration.ts rename to test-projects/v3-catalog/src/trigger/maxDuration.ts diff --git a/references/v3-catalog/src/trigger/nullByte.ts b/test-projects/v3-catalog/src/trigger/nullByte.ts similarity index 100% rename from references/v3-catalog/src/trigger/nullByte.ts rename to test-projects/v3-catalog/src/trigger/nullByte.ts diff --git a/references/v3-catalog/src/trigger/openai.mts b/test-projects/v3-catalog/src/trigger/openai.mts similarity index 100% rename from references/v3-catalog/src/trigger/openai.mts rename to test-projects/v3-catalog/src/trigger/openai.mts diff --git a/references/v3-catalog/src/trigger/orm/index.ts b/test-projects/v3-catalog/src/trigger/orm/index.ts similarity index 100% rename from references/v3-catalog/src/trigger/orm/index.ts rename to test-projects/v3-catalog/src/trigger/orm/index.ts diff --git a/references/v3-catalog/src/trigger/other.ts b/test-projects/v3-catalog/src/trigger/other.ts similarity index 100% rename from references/v3-catalog/src/trigger/other.ts rename to test-projects/v3-catalog/src/trigger/other.ts diff --git a/references/v3-catalog/src/trigger/performance.ts b/test-projects/v3-catalog/src/trigger/performance.ts similarity index 100% rename from references/v3-catalog/src/trigger/performance.ts rename to test-projects/v3-catalog/src/trigger/performance.ts diff --git a/references/v3-catalog/src/trigger/playwrightTask.ts b/test-projects/v3-catalog/src/trigger/playwrightTask.ts similarity index 100% rename from references/v3-catalog/src/trigger/playwrightTask.ts rename to test-projects/v3-catalog/src/trigger/playwrightTask.ts diff --git a/references/v3-catalog/src/trigger/prismaTasks.ts b/test-projects/v3-catalog/src/trigger/prismaTasks.ts similarity index 100% rename from references/v3-catalog/src/trigger/prismaTasks.ts rename to test-projects/v3-catalog/src/trigger/prismaTasks.ts diff --git a/references/v3-catalog/src/trigger/puppeteerTask.ts b/test-projects/v3-catalog/src/trigger/puppeteerTask.ts similarity index 100% rename from references/v3-catalog/src/trigger/puppeteerTask.ts rename to test-projects/v3-catalog/src/trigger/puppeteerTask.ts diff --git a/references/v3-catalog/src/trigger/queues.ts b/test-projects/v3-catalog/src/trigger/queues.ts similarity index 100% rename from references/v3-catalog/src/trigger/queues.ts rename to test-projects/v3-catalog/src/trigger/queues.ts diff --git a/references/v3-catalog/src/trigger/retries.ts b/test-projects/v3-catalog/src/trigger/retries.ts similarity index 100% rename from references/v3-catalog/src/trigger/retries.ts rename to test-projects/v3-catalog/src/trigger/retries.ts diff --git a/references/v3-catalog/src/trigger/returnTypes.ts b/test-projects/v3-catalog/src/trigger/returnTypes.ts similarity index 100% rename from references/v3-catalog/src/trigger/returnTypes.ts rename to test-projects/v3-catalog/src/trigger/returnTypes.ts diff --git a/references/v3-catalog/src/trigger/runMetadata.ts b/test-projects/v3-catalog/src/trigger/runMetadata.ts similarity index 100% rename from references/v3-catalog/src/trigger/runMetadata.ts rename to test-projects/v3-catalog/src/trigger/runMetadata.ts diff --git a/references/v3-catalog/src/trigger/scheduled.ts b/test-projects/v3-catalog/src/trigger/scheduled.ts similarity index 100% rename from references/v3-catalog/src/trigger/scheduled.ts rename to test-projects/v3-catalog/src/trigger/scheduled.ts diff --git a/references/v3-catalog/src/trigger/sdkUsage.ts b/test-projects/v3-catalog/src/trigger/sdkUsage.ts similarity index 100% rename from references/v3-catalog/src/trigger/sdkUsage.ts rename to test-projects/v3-catalog/src/trigger/sdkUsage.ts diff --git a/references/v3-catalog/src/trigger/simple.ts b/test-projects/v3-catalog/src/trigger/simple.ts similarity index 100% rename from references/v3-catalog/src/trigger/simple.ts rename to test-projects/v3-catalog/src/trigger/simple.ts diff --git a/references/v3-catalog/src/trigger/stripe.ts b/test-projects/v3-catalog/src/trigger/stripe.ts similarity index 100% rename from references/v3-catalog/src/trigger/stripe.ts rename to test-projects/v3-catalog/src/trigger/stripe.ts diff --git a/references/v3-catalog/src/trigger/subdir/another/byeWorld.ts b/test-projects/v3-catalog/src/trigger/subdir/another/byeWorld.ts similarity index 100% rename from references/v3-catalog/src/trigger/subdir/another/byeWorld.ts rename to test-projects/v3-catalog/src/trigger/subdir/another/byeWorld.ts diff --git a/references/v3-catalog/src/trigger/subdir/helloWorld.ts b/test-projects/v3-catalog/src/trigger/subdir/helloWorld.ts similarity index 100% rename from references/v3-catalog/src/trigger/subdir/helloWorld.ts rename to test-projects/v3-catalog/src/trigger/subdir/helloWorld.ts diff --git a/references/v3-catalog/src/trigger/subtasks.ts b/test-projects/v3-catalog/src/trigger/subtasks.ts similarity index 100% rename from references/v3-catalog/src/trigger/subtasks.ts rename to test-projects/v3-catalog/src/trigger/subtasks.ts diff --git a/references/v3-catalog/src/trigger/superjson.ts b/test-projects/v3-catalog/src/trigger/superjson.ts similarity index 100% rename from references/v3-catalog/src/trigger/superjson.ts rename to test-projects/v3-catalog/src/trigger/superjson.ts diff --git a/references/v3-catalog/src/trigger/tags.ts b/test-projects/v3-catalog/src/trigger/tags.ts similarity index 100% rename from references/v3-catalog/src/trigger/tags.ts rename to test-projects/v3-catalog/src/trigger/tags.ts diff --git a/references/v3-catalog/src/trigger/taskHierarchy.ts b/test-projects/v3-catalog/src/trigger/taskHierarchy.ts similarity index 100% rename from references/v3-catalog/src/trigger/taskHierarchy.ts rename to test-projects/v3-catalog/src/trigger/taskHierarchy.ts diff --git a/references/v3-catalog/src/trigger/taskTypes.ts b/test-projects/v3-catalog/src/trigger/taskTypes.ts similarity index 100% rename from references/v3-catalog/src/trigger/taskTypes.ts rename to test-projects/v3-catalog/src/trigger/taskTypes.ts diff --git a/references/v3-catalog/src/trigger/triggerKitchenSink.ts b/test-projects/v3-catalog/src/trigger/triggerKitchenSink.ts similarity index 100% rename from references/v3-catalog/src/trigger/triggerKitchenSink.ts rename to test-projects/v3-catalog/src/trigger/triggerKitchenSink.ts diff --git a/references/v3-catalog/src/trigger/usage.ts b/test-projects/v3-catalog/src/trigger/usage.ts similarity index 100% rename from references/v3-catalog/src/trigger/usage.ts rename to test-projects/v3-catalog/src/trigger/usage.ts diff --git a/references/v3-catalog/src/trigger/utils/cache.ts b/test-projects/v3-catalog/src/trigger/utils/cache.ts similarity index 100% rename from references/v3-catalog/src/trigger/utils/cache.ts rename to test-projects/v3-catalog/src/trigger/utils/cache.ts diff --git a/references/v3-catalog/src/trigger/weird-file-names.ts b/test-projects/v3-catalog/src/trigger/weird-file-names.ts similarity index 100% rename from references/v3-catalog/src/trigger/weird-file-names.ts rename to test-projects/v3-catalog/src/trigger/weird-file-names.ts diff --git a/references/v3-catalog/src/trigger/wrangler.mts b/test-projects/v3-catalog/src/trigger/wrangler.mts similarity index 100% rename from references/v3-catalog/src/trigger/wrangler.mts rename to test-projects/v3-catalog/src/trigger/wrangler.mts diff --git a/references/v3-catalog/src/trigger2/helloWorld.ts b/test-projects/v3-catalog/src/trigger2/helloWorld.ts similarity index 100% rename from references/v3-catalog/src/trigger2/helloWorld.ts rename to test-projects/v3-catalog/src/trigger2/helloWorld.ts diff --git a/references/v3-catalog/src/triggerWithLargePayload.ts b/test-projects/v3-catalog/src/triggerWithLargePayload.ts similarity index 100% rename from references/v3-catalog/src/triggerWithLargePayload.ts rename to test-projects/v3-catalog/src/triggerWithLargePayload.ts diff --git a/references/v3-catalog/src/utils/types.ts b/test-projects/v3-catalog/src/utils/types.ts similarity index 100% rename from references/v3-catalog/src/utils/types.ts rename to test-projects/v3-catalog/src/utils/types.ts diff --git a/references/v3-catalog/trigger.config.ts b/test-projects/v3-catalog/trigger.config.ts similarity index 100% rename from references/v3-catalog/trigger.config.ts rename to test-projects/v3-catalog/trigger.config.ts diff --git a/references/v3-catalog/tsconfig.json b/test-projects/v3-catalog/tsconfig.json similarity index 100% rename from references/v3-catalog/tsconfig.json rename to test-projects/v3-catalog/tsconfig.json diff --git a/references/v3-catalog/wrangler/wrangler.toml b/test-projects/v3-catalog/wrangler/wrangler.toml similarity index 100% rename from references/v3-catalog/wrangler/wrangler.toml rename to test-projects/v3-catalog/wrangler/wrangler.toml