@mastra/inngest 0.0.0-tool-call-parts-20250630193309 → 0.0.0-transpile-packages-20250730132657

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { randomUUID } from 'crypto';
2
2
  import { subscribe } from '@inngest/realtime';
3
3
  import { RuntimeContext } from '@mastra/core/di';
4
- import { Tool } from '@mastra/core/tools';
4
+ import { ToolStream, Tool } from '@mastra/core/tools';
5
5
  import { Run, Workflow, DefaultExecutionEngine } from '@mastra/core/workflows';
6
6
  import { EMITTER_SYMBOL } from '@mastra/core/workflows/_constants';
7
7
  import { serve as serve$1 } from 'inngest/hono';
@@ -10,13 +10,17 @@ import { z } from 'zod';
10
10
  // src/index.ts
11
11
  function serve({ mastra, inngest }) {
12
12
  const wfs = mastra.getWorkflows();
13
- const functions = Object.values(wfs).flatMap((wf) => {
14
- if (wf instanceof InngestWorkflow) {
15
- wf.__registerMastra(mastra);
16
- return wf.getFunctions();
17
- }
18
- return [];
19
- });
13
+ const functions = Array.from(
14
+ new Set(
15
+ Object.values(wfs).flatMap((wf) => {
16
+ if (wf instanceof InngestWorkflow) {
17
+ wf.__registerMastra(mastra);
18
+ return wf.getFunctions();
19
+ }
20
+ return [];
21
+ })
22
+ )
23
+ );
20
24
  return serve$1({
21
25
  client: inngest,
22
26
  functions
@@ -46,8 +50,15 @@ var InngestRun = class extends Run {
46
50
  while (runs?.[0]?.status !== "Completed" || runs?.[0]?.event_id !== eventId) {
47
51
  await new Promise((resolve) => setTimeout(resolve, 1e3));
48
52
  runs = await this.getRuns(eventId);
49
- if (runs?.[0]?.status === "Failed" || runs?.[0]?.status === "Cancelled") {
53
+ if (runs?.[0]?.status === "Failed") {
54
+ console.log("run", runs?.[0]);
50
55
  throw new Error(`Function run ${runs?.[0]?.status}`);
56
+ } else if (runs?.[0]?.status === "Cancelled") {
57
+ const snapshot = await this.#mastra?.storage?.loadWorkflowSnapshot({
58
+ workflowName: this.workflowId,
59
+ runId: this.runId
60
+ });
61
+ return { output: { result: { steps: snapshot?.context, status: "canceled" } } };
51
62
  }
52
63
  }
53
64
  return runs?.[0];
@@ -58,6 +69,28 @@ var InngestRun = class extends Run {
58
69
  data
59
70
  });
60
71
  }
72
+ async cancel() {
73
+ await this.inngest.send({
74
+ name: `cancel.workflow.${this.workflowId}`,
75
+ data: {
76
+ runId: this.runId
77
+ }
78
+ });
79
+ const snapshot = await this.#mastra?.storage?.loadWorkflowSnapshot({
80
+ workflowName: this.workflowId,
81
+ runId: this.runId
82
+ });
83
+ if (snapshot) {
84
+ await this.#mastra?.storage?.persistWorkflowSnapshot({
85
+ workflowName: this.workflowId,
86
+ runId: this.runId,
87
+ snapshot: {
88
+ ...snapshot,
89
+ status: "canceled"
90
+ }
91
+ });
92
+ }
93
+ }
61
94
  async start({
62
95
  inputData
63
96
  }) {
@@ -120,6 +153,7 @@ var InngestRun = class extends Run {
120
153
  data: {
121
154
  inputData: params.resumeData,
122
155
  runId: this.runId,
156
+ workflowId: this.workflowId,
123
157
  stepResults: snapshot?.context,
124
158
  resume: {
125
159
  steps,
@@ -322,8 +356,12 @@ var InngestWorkflow = class _InngestWorkflow extends Workflow {
322
356
  return this.function;
323
357
  }
324
358
  this.function = this.inngest.createFunction(
325
- // @ts-ignore
326
- { id: `workflow.${this.id}`, retries: this.retryConfig?.attempts ?? 0 },
359
+ {
360
+ id: `workflow.${this.id}`,
361
+ // @ts-ignore
362
+ retries: this.retryConfig?.attempts ?? 0,
363
+ cancelOn: [{ event: `cancel.workflow.${this.id}` }]
364
+ },
327
365
  { event: `workflow.${this.id}` },
328
366
  async ({ event, step, attempt, publish }) => {
329
367
  let { inputData, runId, resume } = event.data;
@@ -365,7 +403,8 @@ var InngestWorkflow = class _InngestWorkflow extends Workflow {
365
403
  retryConfig: this.retryConfig,
366
404
  runtimeContext: new RuntimeContext(),
367
405
  // TODO
368
- resume
406
+ resume,
407
+ abortController: new AbortController()
369
408
  });
370
409
  return { result, runId };
371
410
  }
@@ -409,7 +448,7 @@ function createStep(params) {
409
448
  outputSchema: z.object({
410
449
  text: z.string()
411
450
  }),
412
- execute: async ({ inputData, [EMITTER_SYMBOL]: emitter, runtimeContext }) => {
451
+ execute: async ({ inputData, [EMITTER_SYMBOL]: emitter, runtimeContext, abortSignal, abort }) => {
413
452
  let streamPromise = {};
414
453
  streamPromise.promise = new Promise((resolve, reject) => {
415
454
  streamPromise.resolve = resolve;
@@ -429,8 +468,12 @@ function createStep(params) {
429
468
  runtimeContext,
430
469
  onFinish: (result) => {
431
470
  streamPromise.resolve(result.text);
432
- }
471
+ },
472
+ abortSignal
433
473
  });
474
+ if (abortSignal.aborted) {
475
+ return abort();
476
+ }
434
477
  for await (const chunk of fullStream) {
435
478
  switch (chunk.type) {
436
479
  case "text-delta":
@@ -605,7 +648,9 @@ var InngestExecutionEngine = class extends DefaultExecutionEngine {
605
648
  resume,
606
649
  prevOutput,
607
650
  emitter,
608
- runtimeContext
651
+ abortController,
652
+ runtimeContext,
653
+ writableStream
609
654
  }) {
610
655
  return super.executeStep({
611
656
  workflowId,
@@ -616,11 +661,132 @@ var InngestExecutionEngine = class extends DefaultExecutionEngine {
616
661
  resume,
617
662
  prevOutput,
618
663
  emitter,
619
- runtimeContext
664
+ abortController,
665
+ runtimeContext,
666
+ writableStream
620
667
  });
621
668
  }
622
- async executeSleep({ id, duration }) {
623
- await this.inngestStep.sleep(id, duration);
669
+ // async executeSleep({ id, duration }: { id: string; duration: number }): Promise<void> {
670
+ // await this.inngestStep.sleep(id, duration);
671
+ // }
672
+ async executeSleep({
673
+ workflowId,
674
+ runId,
675
+ entry,
676
+ prevOutput,
677
+ stepResults,
678
+ emitter,
679
+ abortController,
680
+ runtimeContext,
681
+ writableStream
682
+ }) {
683
+ let { duration, fn } = entry;
684
+ if (fn) {
685
+ const stepCallId = randomUUID();
686
+ duration = await this.inngestStep.run(`workflow.${workflowId}.sleep.${entry.id}`, async () => {
687
+ return await fn({
688
+ runId,
689
+ workflowId,
690
+ mastra: this.mastra,
691
+ runtimeContext,
692
+ inputData: prevOutput,
693
+ runCount: -1,
694
+ getInitData: () => stepResults?.input,
695
+ getStepResult: (step) => {
696
+ if (!step?.id) {
697
+ return null;
698
+ }
699
+ const result = stepResults[step.id];
700
+ if (result?.status === "success") {
701
+ return result.output;
702
+ }
703
+ return null;
704
+ },
705
+ // TODO: this function shouldn't have suspend probably?
706
+ suspend: async (_suspendPayload) => {
707
+ },
708
+ bail: () => {
709
+ },
710
+ abort: () => {
711
+ abortController?.abort();
712
+ },
713
+ [EMITTER_SYMBOL]: emitter,
714
+ engine: { step: this.inngestStep },
715
+ abortSignal: abortController?.signal,
716
+ writer: new ToolStream(
717
+ {
718
+ prefix: "step",
719
+ callId: stepCallId,
720
+ name: "sleep",
721
+ runId
722
+ },
723
+ writableStream
724
+ )
725
+ });
726
+ });
727
+ }
728
+ await this.inngestStep.sleep(entry.id, !duration || duration < 0 ? 0 : duration);
729
+ }
730
+ async executeSleepUntil({
731
+ workflowId,
732
+ runId,
733
+ entry,
734
+ prevOutput,
735
+ stepResults,
736
+ emitter,
737
+ abortController,
738
+ runtimeContext,
739
+ writableStream
740
+ }) {
741
+ let { date, fn } = entry;
742
+ if (fn) {
743
+ date = await this.inngestStep.run(`workflow.${workflowId}.sleepUntil.${entry.id}`, async () => {
744
+ const stepCallId = randomUUID();
745
+ return await fn({
746
+ runId,
747
+ workflowId,
748
+ mastra: this.mastra,
749
+ runtimeContext,
750
+ inputData: prevOutput,
751
+ runCount: -1,
752
+ getInitData: () => stepResults?.input,
753
+ getStepResult: (step) => {
754
+ if (!step?.id) {
755
+ return null;
756
+ }
757
+ const result = stepResults[step.id];
758
+ if (result?.status === "success") {
759
+ return result.output;
760
+ }
761
+ return null;
762
+ },
763
+ // TODO: this function shouldn't have suspend probably?
764
+ suspend: async (_suspendPayload) => {
765
+ },
766
+ bail: () => {
767
+ },
768
+ abort: () => {
769
+ abortController?.abort();
770
+ },
771
+ [EMITTER_SYMBOL]: emitter,
772
+ engine: { step: this.inngestStep },
773
+ abortSignal: abortController?.signal,
774
+ writer: new ToolStream(
775
+ {
776
+ prefix: "step",
777
+ callId: stepCallId,
778
+ name: "sleep",
779
+ runId
780
+ },
781
+ writableStream
782
+ )
783
+ });
784
+ });
785
+ }
786
+ if (!(date instanceof Date)) {
787
+ return;
788
+ }
789
+ await this.inngestStep.sleepUntil(entry.id, date);
624
790
  }
625
791
  async executeWaitForEvent({ event, timeout }) {
626
792
  const eventData = await this.inngestStep.waitForEvent(`user-event-${event}`, {
@@ -639,7 +805,9 @@ var InngestExecutionEngine = class extends DefaultExecutionEngine {
639
805
  resume,
640
806
  prevOutput,
641
807
  emitter,
642
- runtimeContext
808
+ abortController,
809
+ runtimeContext,
810
+ writableStream
643
811
  }) {
644
812
  const startedAt = await this.inngestStep.run(
645
813
  `workflow.${executionContext.workflowId}.run.${executionContext.runId}.step.${step.id}.running_ev`,
@@ -670,7 +838,9 @@ var InngestExecutionEngine = class extends DefaultExecutionEngine {
670
838
  type: "step-start",
671
839
  payload: {
672
840
  id: step.id,
673
- status: "running"
841
+ status: "running",
842
+ payload: prevOutput,
843
+ startedAt: startedAt2
674
844
  }
675
845
  });
676
846
  return startedAt2;
@@ -856,6 +1026,7 @@ var InngestExecutionEngine = class extends DefaultExecutionEngine {
856
1026
  runId: executionContext.runId,
857
1027
  mastra: this.mastra,
858
1028
  runtimeContext,
1029
+ writableStream,
859
1030
  inputData: prevOutput,
860
1031
  resumeData: resume?.steps[0] === step.id ? resume?.resumePayload : void 0,
861
1032
  getInitData: () => stepResults?.input,
@@ -882,7 +1053,8 @@ var InngestExecutionEngine = class extends DefaultExecutionEngine {
882
1053
  [EMITTER_SYMBOL]: emitter,
883
1054
  engine: {
884
1055
  step: this.inngestStep
885
- }
1056
+ },
1057
+ abortSignal: abortController.signal
886
1058
  });
887
1059
  const endedAt = Date.now();
888
1060
  execResults = {
@@ -1013,7 +1185,9 @@ var InngestExecutionEngine = class extends DefaultExecutionEngine {
1013
1185
  resume,
1014
1186
  executionContext,
1015
1187
  emitter,
1016
- runtimeContext
1188
+ abortController,
1189
+ runtimeContext,
1190
+ writableStream
1017
1191
  }) {
1018
1192
  let execResults;
1019
1193
  const truthyIndexes = (await Promise.all(
@@ -1022,6 +1196,7 @@ var InngestExecutionEngine = class extends DefaultExecutionEngine {
1022
1196
  try {
1023
1197
  const result = await cond({
1024
1198
  runId,
1199
+ workflowId,
1025
1200
  mastra: this.mastra,
1026
1201
  runtimeContext,
1027
1202
  runCount: -1,
@@ -1042,10 +1217,23 @@ var InngestExecutionEngine = class extends DefaultExecutionEngine {
1042
1217
  },
1043
1218
  bail: () => {
1044
1219
  },
1220
+ abort: () => {
1221
+ abortController.abort();
1222
+ },
1045
1223
  [EMITTER_SYMBOL]: emitter,
1046
1224
  engine: {
1047
1225
  step: this.inngestStep
1048
- }
1226
+ },
1227
+ abortSignal: abortController.signal,
1228
+ writer: new ToolStream(
1229
+ {
1230
+ prefix: "step",
1231
+ callId: randomUUID(),
1232
+ name: "conditional",
1233
+ runId
1234
+ },
1235
+ writableStream
1236
+ )
1049
1237
  });
1050
1238
  return result ? index : null;
1051
1239
  } catch (e) {
@@ -1074,7 +1262,9 @@ var InngestExecutionEngine = class extends DefaultExecutionEngine {
1074
1262
  executionSpan: executionContext.executionSpan
1075
1263
  },
1076
1264
  emitter,
1077
- runtimeContext
1265
+ abortController,
1266
+ runtimeContext,
1267
+ writableStream
1078
1268
  })
1079
1269
  )
1080
1270
  );
@@ -2,9 +2,9 @@ version: '3'
2
2
 
3
3
  services:
4
4
  inngest:
5
- image: inngest/inngest
6
- command: inngest dev -u http://host.docker.internal:3000/api/inngest --poll-interval=1
5
+ image: inngest/inngest:v1.8.2
6
+ command: inngest dev -p 4000 -u http://host.docker.internal:4001/inngest/api --poll-interval=1
7
7
  ports:
8
- - '8288:8288'
8
+ - '4000:4000'
9
9
  extra_hosts:
10
10
  - 'host.docker.internal:host-gateway'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mastra/inngest",
3
- "version": "0.0.0-tool-call-parts-20250630193309",
3
+ "version": "0.0.0-transpile-packages-20250730132657",
4
4
  "description": "Mastra Inngest integration",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -21,34 +21,35 @@
21
21
  "dependencies": {
22
22
  "@inngest/realtime": "^0.3.1",
23
23
  "@opentelemetry/api": "^1.9.0",
24
- "inngest": "^3.39.1",
24
+ "inngest": "^3.40.0",
25
25
  "zod": "^3.25.67"
26
26
  },
27
27
  "devDependencies": {
28
+ "inngest-cli": "1.8.2",
28
29
  "@ai-sdk/openai": "^1.3.22",
29
30
  "@hono/node-server": "^1.14.4",
30
31
  "@microsoft/api-extractor": "^7.52.8",
31
32
  "@types/node": "^20.19.0",
32
33
  "ai": "^4.3.16",
33
- "eslint": "^9.29.0",
34
+ "eslint": "^9.30.1",
34
35
  "execa": "^9.6.0",
35
36
  "get-port": "7.1.0",
36
- "hono": "^4.8.3",
37
+ "hono": "^4.8.4",
37
38
  "tsup": "^8.5.0",
38
39
  "typescript": "^5.8.3",
39
- "vitest": "^2.1.9",
40
- "@mastra/core": "0.0.0-tool-call-parts-20250630193309",
41
- "@mastra/libsql": "0.0.0-tool-call-parts-20250630193309",
42
- "@internal/lint": "0.0.0-tool-call-parts-20250630193309",
43
- "@mastra/deployer": "0.0.0-tool-call-parts-20250630193309"
40
+ "vitest": "^3.2.4",
41
+ "@mastra/core": "0.0.0-transpile-packages-20250730132657",
42
+ "@mastra/libsql": "0.0.0-transpile-packages-20250730132657",
43
+ "@mastra/deployer": "0.0.0-transpile-packages-20250730132657",
44
+ "@internal/lint": "0.0.0-transpile-packages-20250730132657"
44
45
  },
45
46
  "peerDependencies": {
46
- "@mastra/core": "0.0.0-tool-call-parts-20250630193309"
47
+ "@mastra/core": "0.0.0-transpile-packages-20250730132657"
47
48
  },
48
49
  "scripts": {
49
50
  "build": "tsup src/index.ts --format esm,cjs --experimental-dts --clean --treeshake=smallest --splitting",
50
51
  "build:watch": "pnpm build --watch",
51
- "test": "vitest run",
52
+ "test": "docker-compose up -d && vitest run --no-isolate --bail=1 --retry=1 && docker-compose down",
52
53
  "lint": "eslint ."
53
54
  }
54
55
  }