diff --git a/packages/trigger-sdk/package.json b/packages/trigger-sdk/package.json index 9ee58f659..84b1ee693 100644 --- a/packages/trigger-sdk/package.json +++ b/packages/trigger-sdk/package.json @@ -64,6 +64,7 @@ "ws": "^8.11.0" }, "devDependencies": { + "@trigger.dev/ai": "workspace:*", "@arethetypeswrong/cli": "^0.15.4", "@types/debug": "^4.1.7", "@types/slug": "^5.0.3", diff --git a/packages/trigger-sdk/src/v3/ai.test.ts b/packages/trigger-sdk/src/v3/ai.test.ts index 0d36f729a..d383b8d8e 100644 --- a/packages/trigger-sdk/src/v3/ai.test.ts +++ b/packages/trigger-sdk/src/v3/ai.test.ts @@ -1,6 +1,7 @@ import { describe, expect, it } from "vitest"; import { z } from "zod"; import { ai } from "./ai.js"; +import { ai as packageAi } from "@trigger.dev/ai"; import type { TaskWithSchema } from "@trigger.dev/core/v3"; describe("@trigger.dev/sdk/ai compatibility", function () { @@ -78,4 +79,64 @@ describe("@trigger.dev/sdk/ai compatibility", function () { ai.currentToolOptions(); }).toThrowError("Method not implemented."); }); + + it("matches behavior with @trigger.dev/ai tool helper", async function () { + const fakeTask = createSchemaTask(); + + const sdkTool = ai.tool(fakeTask); + const packageTool = packageAi.tool(fakeTask); + + const sdkResult = await sdkTool.execute?.( + { + name: "Lin", + }, + undefined as never + ); + + const packageResult = await packageTool.execute?.( + { + name: "Lin", + }, + undefined as never + ); + + expect(sdkResult).toEqual(packageResult); + expect(sdkResult).toEqual({ + greeting: "Hello Lin", + }); + }); }); + +function createSchemaTask() { + const fakeTask = { + id: "fake-task", + description: "A fake task", + schema: z.object({ + name: z.string(), + }), + triggerAndWait: function triggerAndWait(payload: { name: string }) { + const resultPromise = Promise.resolve({ + ok: true, + id: "run_123", + taskIdentifier: "fake-task", + output: { + greeting: `Hello ${payload.name}`, + }, + }); + + return Object.assign(resultPromise, { + unwrap: async function unwrap() { + return { + greeting: `Hello ${payload.name}`, + }; + }, + }); + }, + } as unknown as TaskWithSchema< + "fake-task", + z.ZodObject<{ name: z.ZodString }>, + { greeting: string } + >; + + return fakeTask; +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b3f39f4c3..4f7dc5030 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1101,7 +1101,7 @@ importers: version: 18.3.1 react-email: specifier: ^2.1.1 - version: 2.1.2(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.15)(bufferutil@4.0.9)(eslint@8.31.0) + version: 2.1.2(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.15)(eslint@8.31.0) resend: specifier: ^3.2.0 version: 3.2.0 @@ -2090,6 +2090,9 @@ importers: '@arethetypeswrong/cli': specifier: ^0.15.4 version: 0.15.4 + '@trigger.dev/ai': + specifier: workspace:* + version: link:../ai '@types/debug': specifier: ^4.1.7 version: 4.1.7 @@ -23191,7 +23194,7 @@ snapshots: '@epic-web/test-server@0.1.0(bufferutil@4.0.9)': dependencies: '@hono/node-server': 1.12.2(hono@4.5.11) - '@hono/node-ws': 1.0.4(@hono/node-server@1.12.2(hono@4.5.11))(bufferutil@4.0.9) + '@hono/node-ws': 1.0.4(@hono/node-server@1.12.2(hono@4.11.8))(bufferutil@4.0.9) '@open-draft/deferred-promise': 2.2.0 '@types/ws': 8.5.12 hono: 4.5.11 @@ -23946,7 +23949,7 @@ snapshots: dependencies: hono: 4.11.8 - '@hono/node-ws@1.0.4(@hono/node-server@1.12.2(hono@4.5.11))(bufferutil@4.0.9)': + '@hono/node-ws@1.0.4(@hono/node-server@1.12.2(hono@4.11.8))(bufferutil@4.0.9)': dependencies: '@hono/node-server': 1.12.2(hono@4.5.11) ws: 8.18.3(bufferutil@4.0.9) @@ -39232,7 +39235,7 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-email@2.1.2(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.15)(bufferutil@4.0.9)(eslint@8.31.0): + react-email@2.1.2(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.15)(eslint@8.31.0): dependencies: '@babel/parser': 7.24.1 '@radix-ui/colors': 1.0.1 @@ -39269,8 +39272,8 @@ snapshots: react: 18.3.1 react-dom: 18.2.0(react@18.3.1) shelljs: 0.8.5 - socket.io: 4.7.3(bufferutil@4.0.9) - socket.io-client: 4.7.3(bufferutil@4.0.9) + socket.io: 4.7.3 + socket.io-client: 4.7.3 sonner: 1.3.1(react-dom@18.2.0(react@18.3.1))(react@18.3.1) source-map-js: 1.0.2 stacktrace-parser: 0.1.10 @@ -40470,7 +40473,7 @@ snapshots: - supports-color - utf-8-validate - socket.io-client@4.7.3(bufferutil@4.0.9): + socket.io-client@4.7.3: dependencies: '@socket.io/component-emitter': 3.1.0 debug: 4.3.7(supports-color@10.0.0) @@ -40499,7 +40502,7 @@ snapshots: transitivePeerDependencies: - supports-color - socket.io@4.7.3(bufferutil@4.0.9): + socket.io@4.7.3: dependencies: accepts: 1.3.8 base64id: 2.0.0