@zhivex-ai/core 1.5.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/README.md +39 -0
  2. package/dist/agent-handoff-contracts.d.ts +12 -0
  3. package/dist/agent-handoff-contracts.d.ts.map +1 -0
  4. package/dist/agent-handoff-contracts.js +18 -0
  5. package/dist/agent-handoff-contracts.js.map +1 -0
  6. package/dist/agent-handoff.d.ts +2 -11
  7. package/dist/agent-handoff.d.ts.map +1 -1
  8. package/dist/agent-handoff.js +1 -18
  9. package/dist/agent-handoff.js.map +1 -1
  10. package/dist/agent-trace.d.ts +1 -5
  11. package/dist/agent-trace.d.ts.map +1 -1
  12. package/dist/agent-trace.js.map +1 -1
  13. package/dist/agent.d.ts +1 -0
  14. package/dist/agent.d.ts.map +1 -1
  15. package/dist/agent.js +358 -215
  16. package/dist/agent.js.map +1 -1
  17. package/dist/api-stability.d.ts.map +1 -1
  18. package/dist/api-stability.js +36 -25
  19. package/dist/api-stability.js.map +1 -1
  20. package/dist/artifact.d.ts +32 -9
  21. package/dist/artifact.d.ts.map +1 -1
  22. package/dist/artifact.js +428 -82
  23. package/dist/artifact.js.map +1 -1
  24. package/dist/catalog.d.ts +42 -3
  25. package/dist/catalog.d.ts.map +1 -1
  26. package/dist/catalog.js +269 -7
  27. package/dist/catalog.js.map +1 -1
  28. package/dist/contracts.d.ts +8 -0
  29. package/dist/contracts.d.ts.map +1 -0
  30. package/dist/contracts.js +2 -0
  31. package/dist/contracts.js.map +1 -0
  32. package/dist/generate-text.d.ts.map +1 -1
  33. package/dist/generate-text.js +6 -3
  34. package/dist/generate-text.js.map +1 -1
  35. package/dist/google.d.ts +1 -60
  36. package/dist/google.d.ts.map +1 -1
  37. package/dist/google.js +0 -198
  38. package/dist/google.js.map +1 -1
  39. package/dist/index.d.ts +13 -7
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +7 -4
  42. package/dist/index.js.map +1 -1
  43. package/dist/live-agent.js +1 -1
  44. package/dist/live-agent.js.map +1 -1
  45. package/dist/middleware.d.ts +16 -0
  46. package/dist/middleware.d.ts.map +1 -1
  47. package/dist/middleware.js +476 -110
  48. package/dist/middleware.js.map +1 -1
  49. package/dist/model-capabilities.d.ts +66 -0
  50. package/dist/model-capabilities.d.ts.map +1 -0
  51. package/dist/model-capabilities.js +136 -0
  52. package/dist/model-capabilities.js.map +1 -0
  53. package/dist/node.d.ts +8 -0
  54. package/dist/node.d.ts.map +1 -0
  55. package/dist/node.js +8 -0
  56. package/dist/node.js.map +1 -0
  57. package/dist/observability.d.ts +57 -10
  58. package/dist/observability.d.ts.map +1 -1
  59. package/dist/observability.js +535 -114
  60. package/dist/observability.js.map +1 -1
  61. package/dist/pricing.d.ts +7 -0
  62. package/dist/pricing.d.ts.map +1 -0
  63. package/dist/pricing.js +2 -0
  64. package/dist/pricing.js.map +1 -0
  65. package/dist/provider-resources.d.ts +61 -0
  66. package/dist/provider-resources.d.ts.map +1 -0
  67. package/dist/provider-resources.js +199 -0
  68. package/dist/provider-resources.js.map +1 -0
  69. package/dist/runner.js +1 -1
  70. package/dist/runner.js.map +1 -1
  71. package/dist/runtime-entry.d.ts +15 -0
  72. package/dist/runtime-entry.d.ts.map +1 -0
  73. package/dist/runtime-entry.js +14 -0
  74. package/dist/runtime-entry.js.map +1 -0
  75. package/dist/runtime.d.ts +9 -1
  76. package/dist/runtime.d.ts.map +1 -1
  77. package/dist/runtime.js +35 -8
  78. package/dist/runtime.js.map +1 -1
  79. package/dist/secure-id-node.d.ts +2 -0
  80. package/dist/secure-id-node.d.ts.map +1 -0
  81. package/dist/secure-id-node.js +3 -0
  82. package/dist/secure-id-node.js.map +1 -0
  83. package/dist/secure-id.d.ts.map +1 -1
  84. package/dist/secure-id.js +6 -2
  85. package/dist/secure-id.js.map +1 -1
  86. package/dist/testing.d.ts +4 -0
  87. package/dist/testing.d.ts.map +1 -0
  88. package/dist/testing.js +4 -0
  89. package/dist/testing.js.map +1 -0
  90. package/dist/types.d.ts +74 -6
  91. package/dist/types.d.ts.map +1 -1
  92. package/dist/ui-entry.d.ts +6 -0
  93. package/dist/ui-entry.d.ts.map +1 -0
  94. package/dist/ui-entry.js +5 -0
  95. package/dist/ui-entry.js.map +1 -0
  96. package/dist/ui.js +1 -1
  97. package/dist/ui.js.map +1 -1
  98. package/dist/workflow-observability.d.ts +13 -0
  99. package/dist/workflow-observability.d.ts.map +1 -0
  100. package/dist/workflow-observability.js +186 -0
  101. package/dist/workflow-observability.js.map +1 -0
  102. package/dist/workflow-state-contracts.d.ts +76 -0
  103. package/dist/workflow-state-contracts.d.ts.map +1 -0
  104. package/dist/workflow-state-contracts.js +49 -0
  105. package/dist/workflow-state-contracts.js.map +1 -0
  106. package/dist/workflow-state-service.d.ts +3 -34
  107. package/dist/workflow-state-service.d.ts.map +1 -1
  108. package/dist/workflow-state-service.js +2 -2
  109. package/dist/workflow-state-service.js.map +1 -1
  110. package/dist/workflow.d.ts +53 -42
  111. package/dist/workflow.d.ts.map +1 -1
  112. package/dist/workflow.js +258 -125
  113. package/dist/workflow.js.map +1 -1
  114. package/dist/workflows-entry.d.ts +9 -0
  115. package/dist/workflows-entry.d.ts.map +1 -0
  116. package/dist/workflows-entry.js +5 -0
  117. package/dist/workflows-entry.js.map +1 -0
  118. package/package.json +42 -1
  119. package/secure-id-internal.d.ts +1 -0
@@ -1,9 +1,8 @@
1
1
  import type { AgentSession, Runner, SessionService } from "./runner.js";
2
- import type { AgentApprovalRequest, AgentApprovalResponse, AgentStatus, JsonValue, LanguageModel } from "./types.js";
3
- import type { WorkflowStateService } from "./workflow-state-service.js";
4
- export declare const WORKFLOW_RUN_STATE_SCHEMA_VERSION: 1;
5
- export type WorkflowStatus = "running" | "completed" | "waiting_approval" | "failed";
6
- export type WorkflowStepStatus = "pending" | "running" | "completed" | "waiting_approval" | "failed";
2
+ import type { AgentApprovalRequest, AgentApprovalResponse, JsonValue, LanguageModel } from "./types.js";
3
+ import { type WorkflowRunState, type WorkflowStateService, type WorkflowStatus, type WorkflowStepResult, type WorkflowStepStatus } from "./workflow-state-contracts.js";
4
+ export { migrateWorkflowRunState, normalizeWorkflowRunState, WORKFLOW_RUN_STATE_SCHEMA_VERSION } from "./workflow-state-contracts.js";
5
+ export type { PersistedWorkflowRunState, WorkflowRunState, WorkflowRunStateMigrationTarget, WorkflowStatus, WorkflowStepResult, WorkflowStepStatus } from "./workflow-state-contracts.js";
7
6
  export interface WorkflowPromptContext {
8
7
  workflowId?: string;
9
8
  runId: string;
@@ -57,9 +56,12 @@ export interface WorkflowLoopStep<TModel extends LanguageModel = LanguageModel>
57
56
  export type WorkflowStep<TModel extends LanguageModel = LanguageModel> = WorkflowTaskStep<TModel> | WorkflowParallelStep | WorkflowLoopStep<TModel>;
58
57
  export interface WorkflowDefinition {
59
58
  id?: string;
59
+ name?: string;
60
60
  steps: WorkflowStep[];
61
61
  metadata?: Record<string, JsonValue>;
62
62
  persistence?: WorkflowPersistenceOptions;
63
+ /** Best-effort operational telemetry. Observer failures never fail workflow execution. */
64
+ onTelemetryEvent?: WorkflowTelemetryObserver;
63
65
  }
64
66
  export interface WorkflowPersistenceOptions {
65
67
  appName: string;
@@ -71,6 +73,7 @@ export interface WorkflowPersistenceOptions {
71
73
  export interface WorkflowRunInput {
72
74
  userId: string;
73
75
  sessionId?: string;
76
+ abortSignal?: AbortSignal;
74
77
  input?: JsonValue;
75
78
  state?: WorkflowRunState;
76
79
  approvals?: AgentApprovalResponse[];
@@ -78,42 +81,9 @@ export interface WorkflowRunInput {
78
81
  eventMetadata?: Record<string, JsonValue>;
79
82
  metadata?: Record<string, JsonValue>;
80
83
  resumeFromPersistedState?: boolean;
84
+ /** Overrides the definition observer for this invocation. Fail-open by contract. */
85
+ onTelemetryEvent?: WorkflowTelemetryObserver;
81
86
  }
82
- export interface WorkflowStepResult {
83
- id: string;
84
- kind?: "task" | "parallel" | "loop";
85
- status: WorkflowStepStatus;
86
- outputKey?: string;
87
- outputText?: string;
88
- runId?: string;
89
- agentStatus?: AgentStatus;
90
- approvals?: AgentApprovalRequest[];
91
- children?: WorkflowStepResult[];
92
- startedAt?: number;
93
- finishedAt?: number;
94
- error?: {
95
- message: string;
96
- };
97
- metadata?: Record<string, JsonValue>;
98
- }
99
- export interface WorkflowRunState {
100
- schemaVersion: typeof WORKFLOW_RUN_STATE_SCHEMA_VERSION;
101
- workflowId?: string;
102
- runId: string;
103
- userId: string;
104
- sessionId: string;
105
- status: WorkflowStatus;
106
- input?: JsonValue;
107
- outputs: Record<string, JsonValue>;
108
- steps: WorkflowStepResult[];
109
- currentStepIndex: number;
110
- session?: AgentSession;
111
- metadata?: Record<string, JsonValue>;
112
- createdAt: number;
113
- updatedAt: number;
114
- }
115
- export type PersistedWorkflowRunState = Omit<WorkflowRunState, "session">;
116
- export type WorkflowRunStateMigrationTarget = typeof WORKFLOW_RUN_STATE_SCHEMA_VERSION;
117
87
  export interface WorkflowStateLookup {
118
88
  userId: string;
119
89
  sessionId: string;
@@ -125,6 +95,49 @@ export interface WorkflowRunOutput {
125
95
  steps: WorkflowStepResult[];
126
96
  session?: AgentSession;
127
97
  }
98
+ export type WorkflowTelemetryTerminalStatus = "completed" | "waiting_approval" | "failed" | "cancelled";
99
+ export type WorkflowTelemetryStepKind = "task" | "parallel" | "loop";
100
+ export interface WorkflowTelemetryContext {
101
+ runId: string;
102
+ workflowId?: string;
103
+ workflowName?: string;
104
+ userId: string;
105
+ sessionId?: string;
106
+ }
107
+ export interface WorkflowTelemetryStartEvent extends WorkflowTelemetryContext {
108
+ type: "workflow-start";
109
+ startedAt: number;
110
+ }
111
+ export interface WorkflowTelemetryStepStartEvent extends WorkflowTelemetryContext {
112
+ type: "workflow-step-start";
113
+ stepId: string;
114
+ stepIndex: number;
115
+ stepKind: WorkflowTelemetryStepKind;
116
+ startedAt: number;
117
+ }
118
+ export interface WorkflowTelemetryStepFinishEvent extends WorkflowTelemetryContext {
119
+ type: "workflow-step-finish";
120
+ stepId: string;
121
+ stepIndex: number;
122
+ stepKind: WorkflowTelemetryStepKind;
123
+ status: WorkflowTelemetryTerminalStatus;
124
+ startedAt: number;
125
+ finishedAt: number;
126
+ error?: Error;
127
+ }
128
+ export interface WorkflowTelemetryFinishEvent extends WorkflowTelemetryContext {
129
+ type: "workflow-finish";
130
+ status: WorkflowTelemetryTerminalStatus;
131
+ startedAt: number;
132
+ finishedAt: number;
133
+ error?: Error;
134
+ }
135
+ export type WorkflowTelemetryEvent = WorkflowTelemetryStartEvent | WorkflowTelemetryStepStartEvent | WorkflowTelemetryStepFinishEvent | WorkflowTelemetryFinishEvent;
136
+ export interface WorkflowTelemetryObserver {
137
+ (event: WorkflowTelemetryEvent): void | Promise<void>;
138
+ /** Runs a step while an observer-specific context is active. Implementations must invoke callback once. */
139
+ withStepContext?<T>(runId: string, stepIndex: number, callback: () => Promise<T>): Promise<T>;
140
+ }
128
141
  export type WorkflowReplayTimelineEvent = {
129
142
  type: "workflow-start";
130
143
  runId: string;
@@ -196,8 +209,6 @@ export interface WorkflowReplayResult {
196
209
  timeline: WorkflowReplayTimelineEvent[];
197
210
  outputs: Record<string, JsonValue>;
198
211
  }
199
- export declare const normalizeWorkflowRunState: (value: unknown) => WorkflowRunState;
200
- export declare const migrateWorkflowRunState: (value: unknown, targetVersion?: WorkflowRunStateMigrationTarget) => WorkflowRunState;
201
212
  export declare const loadWorkflowState: (workflow: WorkflowDefinition, input: WorkflowStateLookup) => Promise<WorkflowRunState | undefined>;
202
213
  export declare const saveWorkflowState: (workflow: WorkflowDefinition, state: WorkflowRunState) => Promise<AgentSession | undefined>;
203
214
  export declare const createWorkflow: (definition: WorkflowDefinition) => WorkflowDefinition;
@@ -1 +1 @@
1
- {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"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"}
package/dist/workflow.js CHANGED
@@ -1,8 +1,8 @@
1
- import { ValidationError } from "./errors.js";
2
- import { createSecureId } from "./secure-id.js";
1
+ import { normalizeWorkflowRunState, WORKFLOW_RUN_STATE_SCHEMA_VERSION } from "./workflow-state-contracts.js";
2
+ import { createSecureId } from "#secure-id";
3
+ export { migrateWorkflowRunState, normalizeWorkflowRunState, WORKFLOW_RUN_STATE_SCHEMA_VERSION } from "./workflow-state-contracts.js";
3
4
  const randomId = createSecureId;
4
5
  const cloneJson = (value) => JSON.parse(JSON.stringify(value));
5
- export const WORKFLOW_RUN_STATE_SCHEMA_VERSION = 1;
6
6
  const toOutput = (state) => ({
7
7
  status: state.status,
8
8
  state: cloneJson(state),
@@ -28,50 +28,6 @@ const createBaseState = (workflow, input) => {
28
28
  updatedAt: now
29
29
  };
30
30
  };
31
- export const normalizeWorkflowRunState = (value) => {
32
- if (!value || typeof value !== "object" || Array.isArray(value)) {
33
- throw new ValidationError("WorkflowRunState must be an object.");
34
- }
35
- const state = value;
36
- if (state.schemaVersion !== undefined && state.schemaVersion > WORKFLOW_RUN_STATE_SCHEMA_VERSION) {
37
- throw new ValidationError(`Unsupported WorkflowRunState schemaVersion ${state.schemaVersion}.`);
38
- }
39
- if (typeof state.runId !== "string" ||
40
- typeof state.userId !== "string" ||
41
- typeof state.sessionId !== "string" ||
42
- typeof state.status !== "string" ||
43
- !state.outputs ||
44
- typeof state.outputs !== "object" ||
45
- Array.isArray(state.outputs) ||
46
- !Array.isArray(state.steps) ||
47
- typeof state.currentStepIndex !== "number" ||
48
- typeof state.createdAt !== "number" ||
49
- typeof state.updatedAt !== "number") {
50
- throw new ValidationError("WorkflowRunState is missing required fields.");
51
- }
52
- return {
53
- schemaVersion: WORKFLOW_RUN_STATE_SCHEMA_VERSION,
54
- workflowId: state.workflowId,
55
- runId: state.runId,
56
- userId: state.userId,
57
- sessionId: state.sessionId,
58
- status: state.status,
59
- input: state.input === undefined ? undefined : cloneJson(state.input),
60
- outputs: cloneJson(state.outputs),
61
- steps: cloneJson(state.steps),
62
- currentStepIndex: state.currentStepIndex,
63
- session: state.session ? cloneJson(state.session) : undefined,
64
- metadata: state.metadata ? cloneJson(state.metadata) : undefined,
65
- createdAt: state.createdAt,
66
- updatedAt: state.updatedAt
67
- };
68
- };
69
- export const migrateWorkflowRunState = (value, targetVersion = WORKFLOW_RUN_STATE_SCHEMA_VERSION) => {
70
- if (targetVersion !== WORKFLOW_RUN_STATE_SCHEMA_VERSION) {
71
- throw new ValidationError(`Unsupported WorkflowRunState migration target ${targetVersion}.`);
72
- }
73
- return normalizeWorkflowRunState(value);
74
- };
75
31
  const normalizeState = (state) => normalizeWorkflowRunState(state);
76
32
  const workflowPersistenceKey = (workflow) => workflow.persistence?.workflowKey ?? workflow.id ?? "default";
77
33
  const workflowMetadataKey = (workflow) => workflow.persistence?.metadataKey ?? "workflowRuns";
@@ -350,6 +306,7 @@ const runTaskStep = async (workflow, state, step, input, options) => {
350
306
  userId: state.userId,
351
307
  sessionId: state.sessionId,
352
308
  approvals: input.approvals,
309
+ abortSignal: input.abortSignal,
353
310
  sessionMetadata: input.sessionMetadata,
354
311
  eventMetadata: input.eventMetadata
355
312
  }
@@ -358,6 +315,7 @@ const runTaskStep = async (workflow, state, step, input, options) => {
358
315
  sessionId: state.sessionId,
359
316
  prompt: await resolveTaskPrompt(workflow, state, step, input),
360
317
  system: step.system,
318
+ abortSignal: input.abortSignal,
361
319
  sessionMetadata: input.sessionMetadata,
362
320
  eventMetadata: {
363
321
  ...(input.eventMetadata ?? {}),
@@ -506,103 +464,278 @@ const runLoopStep = async (workflow, state, step, input, existingResult, started
506
464
  session: state.session
507
465
  };
508
466
  };
467
+ const workflowTelemetryContext = (workflow, state) => ({
468
+ runId: state.runId,
469
+ workflowId: workflow.id,
470
+ workflowName: workflow.name,
471
+ userId: state.userId,
472
+ sessionId: state.sessionId
473
+ });
474
+ const preStartWorkflowTelemetryContext = (workflow, input) => ({
475
+ runId: input.state && typeof input.state.runId === "string" && input.state.runId
476
+ ? input.state.runId
477
+ : randomId("wfr"),
478
+ workflowId: workflow.id,
479
+ workflowName: workflow.name,
480
+ userId: input.userId,
481
+ sessionId: input.state && typeof input.state.sessionId === "string" && input.state.sessionId
482
+ ? input.state.sessionId
483
+ : input.sessionId
484
+ });
485
+ const emitWorkflowTelemetry = async (observer, event) => {
486
+ if (!observer) {
487
+ return;
488
+ }
489
+ try {
490
+ await observer(event);
491
+ }
492
+ catch {
493
+ // Workflow telemetry is operational and fail-open by contract.
494
+ }
495
+ };
496
+ const runWithWorkflowStepContext = async (observer, runId, stepIndex, callback) => {
497
+ if (!observer?.withStepContext) {
498
+ return callback();
499
+ }
500
+ let execution;
501
+ const executeOnce = () => {
502
+ execution ??= callback();
503
+ return execution;
504
+ };
505
+ try {
506
+ await observer.withStepContext(runId, stepIndex, executeOnce);
507
+ }
508
+ catch {
509
+ // Ignore context/exporter failures; the business callback result remains authoritative.
510
+ }
511
+ return execution ? await execution : callback();
512
+ };
513
+ const workflowStepKind = (step) => isParallelStep(step) ? "parallel" : isLoopStep(step) ? "loop" : "task";
514
+ const toWorkflowError = (error, fallback) => error instanceof Error ? error : new Error(error === undefined ? fallback : String(error));
515
+ const isCancellationError = (error) => error instanceof Error && (error.name === "AbortError" || error.name === "CancellationError");
516
+ const hasCancelledAgentResult = (result) => result.agentStatus === "cancelled" || (result.children?.some(hasCancelledAgentResult) ?? false);
517
+ const workflowStepTelemetryStatus = (result, input, error) => {
518
+ if (hasCancelledAgentResult(result) ||
519
+ isCancellationError(error) ||
520
+ (result.status === "failed" && input.abortSignal?.aborted)) {
521
+ return "cancelled";
522
+ }
523
+ if (result.status === "completed" || result.status === "waiting_approval" || result.status === "failed") {
524
+ return result.status;
525
+ }
526
+ return "failed";
527
+ };
528
+ const workflowStepTelemetryError = (result, status, input, error) => {
529
+ if (status === "cancelled") {
530
+ const cancellation = toWorkflowError(error ?? input.abortSignal?.reason, "Workflow execution was cancelled.");
531
+ cancellation.name = "AbortError";
532
+ return cancellation;
533
+ }
534
+ if (status === "failed") {
535
+ return toWorkflowError(error ?? result.error?.message, "Workflow step failed.");
536
+ }
537
+ return undefined;
538
+ };
509
539
  export const runWorkflow = async (workflow, input) => {
510
- const definition = validateWorkflow(workflow);
511
- const state = await resolveInitialState(definition, input);
540
+ const invocationStartedAt = Date.now();
541
+ const observer = input.onTelemetryEvent ?? workflow.onTelemetryEvent;
542
+ let definition;
543
+ let state;
544
+ try {
545
+ definition = validateWorkflow(workflow);
546
+ state = await resolveInitialState(definition, input);
547
+ }
548
+ catch (error) {
549
+ const telemetryContext = preStartWorkflowTelemetryContext(workflow, input);
550
+ const telemetryError = toWorkflowError(error, "Workflow initialization failed.");
551
+ await emitWorkflowTelemetry(observer, {
552
+ ...telemetryContext,
553
+ type: "workflow-start",
554
+ startedAt: invocationStartedAt
555
+ });
556
+ await emitWorkflowTelemetry(observer, {
557
+ ...telemetryContext,
558
+ type: "workflow-finish",
559
+ status: "failed",
560
+ startedAt: invocationStartedAt,
561
+ finishedAt: Date.now(),
562
+ error: telemetryError
563
+ });
564
+ throw error;
565
+ }
512
566
  state.status = "running";
513
567
  state.updatedAt = Date.now();
514
- const waitingIndex = state.steps.findIndex((step) => step.status === "waiting_approval");
515
- if (waitingIndex >= 0 && !input.approvals?.length) {
516
- state.status = "waiting_approval";
517
- state.currentStepIndex = waitingIndex;
518
- state.updatedAt = Date.now();
519
- return finalizeWorkflowOutput(definition, state);
520
- }
521
- const startIndex = waitingIndex >= 0 ? waitingIndex : state.currentStepIndex;
522
- for (let index = startIndex; index < definition.steps.length; index += 1) {
523
- const step = definition.steps[index];
524
- const startedAt = Date.now();
525
- state.currentStepIndex = index;
526
- const existingResult = state.steps[index];
527
- setStepResult(state, index, isParallelStep(step)
528
- ? {
529
- id: step.id,
530
- kind: "parallel",
531
- status: "running",
532
- children: existingResult?.children,
533
- metadata: step.metadata ? cloneJson(step.metadata) : undefined,
534
- startedAt
535
- }
536
- : isLoopStep(step)
568
+ const telemetryContext = workflowTelemetryContext(definition, state);
569
+ let terminalEventEmitted = false;
570
+ await emitWorkflowTelemetry(observer, {
571
+ ...telemetryContext,
572
+ type: "workflow-start",
573
+ startedAt: invocationStartedAt
574
+ });
575
+ const emitWorkflowFinish = async (status, error) => {
576
+ if (terminalEventEmitted) {
577
+ return;
578
+ }
579
+ terminalEventEmitted = true;
580
+ await emitWorkflowTelemetry(observer, {
581
+ ...telemetryContext,
582
+ type: "workflow-finish",
583
+ status,
584
+ startedAt: invocationStartedAt,
585
+ finishedAt: Date.now(),
586
+ error
587
+ });
588
+ };
589
+ const finalizeInvocation = async (status, error) => {
590
+ const output = await finalizeWorkflowOutput(definition, state);
591
+ await emitWorkflowFinish(status, error);
592
+ return output;
593
+ };
594
+ try {
595
+ const waitingIndex = state.steps.findIndex((step) => step.status === "waiting_approval");
596
+ if (waitingIndex >= 0 && !input.approvals?.length) {
597
+ state.status = "waiting_approval";
598
+ state.currentStepIndex = waitingIndex;
599
+ state.updatedAt = Date.now();
600
+ return await finalizeInvocation("waiting_approval");
601
+ }
602
+ const startIndex = waitingIndex >= 0 ? waitingIndex : state.currentStepIndex;
603
+ for (let index = startIndex; index < definition.steps.length; index += 1) {
604
+ const step = definition.steps[index];
605
+ const stepKind = workflowStepKind(step);
606
+ const startedAt = Date.now();
607
+ state.currentStepIndex = index;
608
+ const existingResult = state.steps[index];
609
+ setStepResult(state, index, isParallelStep(step)
537
610
  ? {
538
611
  id: step.id,
539
- kind: "loop",
612
+ kind: "parallel",
540
613
  status: "running",
541
614
  children: existingResult?.children,
542
615
  metadata: step.metadata ? cloneJson(step.metadata) : undefined,
543
616
  startedAt
544
617
  }
545
- : {
546
- id: step.id,
547
- kind: "task",
548
- status: "running",
549
- outputKey: step.outputKey,
550
- metadata: step.metadata ? cloneJson(step.metadata) : undefined,
551
- startedAt
552
- });
553
- try {
554
- const stepRun = isParallelStep(step)
555
- ? await runParallelStep(definition, state, step, input, existingResult, startedAt)
556
618
  : isLoopStep(step)
557
- ? await runLoopStep(definition, state, step, input, existingResult, startedAt)
558
- : await runTaskStep(definition, state, step, input, {
559
- startedAt,
560
- isApprovalResume: index === waitingIndex && Boolean(input.approvals?.length)
619
+ ? {
620
+ id: step.id,
621
+ kind: "loop",
622
+ status: "running",
623
+ children: existingResult?.children,
624
+ metadata: step.metadata ? cloneJson(step.metadata) : undefined,
625
+ startedAt
626
+ }
627
+ : {
628
+ id: step.id,
629
+ kind: "task",
630
+ status: "running",
631
+ outputKey: step.outputKey,
632
+ metadata: step.metadata ? cloneJson(step.metadata) : undefined,
633
+ startedAt
561
634
  });
562
- const { result } = stepRun;
563
- const output = "output" in stepRun ? stepRun.output : undefined;
564
- const session = "session" in stepRun ? stepRun.session : undefined;
565
- if (output?.session) {
566
- state.session = output.session;
567
- }
568
- else if (session) {
569
- state.session = session;
570
- }
571
- const status = result.status;
572
- setStepResult(state, index, result);
573
- if (status === "completed") {
574
- if (!isParallelStep(step) && !isLoopStep(step)) {
575
- collectStepOutputs(state.outputs, step, result, output);
635
+ await emitWorkflowTelemetry(observer, {
636
+ ...telemetryContext,
637
+ type: "workflow-step-start",
638
+ stepId: step.id,
639
+ stepIndex: index,
640
+ stepKind,
641
+ startedAt
642
+ });
643
+ let stepTerminalEventEmitted = false;
644
+ try {
645
+ const stepRun = await runWithWorkflowStepContext(observer, state.runId, index, () => isParallelStep(step)
646
+ ? runParallelStep(definition, state, step, input, existingResult, startedAt)
647
+ : isLoopStep(step)
648
+ ? runLoopStep(definition, state, step, input, existingResult, startedAt)
649
+ : runTaskStep(definition, state, step, input, {
650
+ startedAt,
651
+ isApprovalResume: index === waitingIndex && Boolean(input.approvals?.length)
652
+ }));
653
+ const { result } = stepRun;
654
+ const output = stepRun.output;
655
+ const session = stepRun.session;
656
+ if (output?.session) {
657
+ state.session = output.session;
576
658
  }
577
- state.currentStepIndex = index + 1;
659
+ else if (session) {
660
+ state.session = session;
661
+ }
662
+ const status = result.status;
663
+ setStepResult(state, index, result);
664
+ const telemetryStatus = workflowStepTelemetryStatus(result, input);
665
+ const telemetryError = workflowStepTelemetryError(result, telemetryStatus, input);
666
+ await emitWorkflowTelemetry(observer, {
667
+ ...telemetryContext,
668
+ type: "workflow-step-finish",
669
+ stepId: step.id,
670
+ stepIndex: index,
671
+ stepKind,
672
+ status: telemetryStatus,
673
+ startedAt,
674
+ finishedAt: result.finishedAt ?? Date.now(),
675
+ error: telemetryError
676
+ });
677
+ stepTerminalEventEmitted = true;
678
+ if (status === "completed") {
679
+ if (!isParallelStep(step) && !isLoopStep(step)) {
680
+ collectStepOutputs(state.outputs, step, result, output);
681
+ }
682
+ state.currentStepIndex = index + 1;
683
+ state.updatedAt = Date.now();
684
+ continue;
685
+ }
686
+ state.status = status === "waiting_approval" ? "waiting_approval" : "failed";
687
+ state.currentStepIndex = index;
578
688
  state.updatedAt = Date.now();
579
- continue;
689
+ return await finalizeInvocation(telemetryStatus, telemetryError);
580
690
  }
581
- state.status = status === "waiting_approval" ? "waiting_approval" : "failed";
582
- state.currentStepIndex = index;
583
- state.updatedAt = Date.now();
584
- return finalizeWorkflowOutput(definition, state);
585
- }
586
- catch (error) {
587
- setStepResult(state, index, isParallelStep(step)
588
- ? createParallelResult(step, "failed", startedAt, existingResult?.children ?? [], {
589
- message: error instanceof Error ? error.message : String(error)
590
- })
591
- : isLoopStep(step)
592
- ? createLoopResult(step, "failed", startedAt, existingResult?.children ?? [], {
691
+ catch (error) {
692
+ if (stepTerminalEventEmitted) {
693
+ throw error;
694
+ }
695
+ const result = isParallelStep(step)
696
+ ? createParallelResult(step, "failed", startedAt, existingResult?.children ?? [], {
593
697
  message: error instanceof Error ? error.message : String(error)
594
698
  })
595
- : createStepResult(step, "failed", startedAt, undefined, error));
596
- state.status = "failed";
597
- state.currentStepIndex = index;
598
- state.updatedAt = Date.now();
599
- return finalizeWorkflowOutput(definition, state);
699
+ : isLoopStep(step)
700
+ ? createLoopResult(step, "failed", startedAt, existingResult?.children ?? [], {
701
+ message: error instanceof Error ? error.message : String(error)
702
+ })
703
+ : createStepResult(step, "failed", startedAt, undefined, error);
704
+ setStepResult(state, index, result);
705
+ const telemetryStatus = workflowStepTelemetryStatus(result, input, error);
706
+ const telemetryError = workflowStepTelemetryError(result, telemetryStatus, input, error);
707
+ await emitWorkflowTelemetry(observer, {
708
+ ...telemetryContext,
709
+ type: "workflow-step-finish",
710
+ stepId: step.id,
711
+ stepIndex: index,
712
+ stepKind,
713
+ status: telemetryStatus,
714
+ startedAt,
715
+ finishedAt: result.finishedAt ?? Date.now(),
716
+ error: telemetryError
717
+ });
718
+ stepTerminalEventEmitted = true;
719
+ state.status = "failed";
720
+ state.currentStepIndex = index;
721
+ state.updatedAt = Date.now();
722
+ return await finalizeInvocation(telemetryStatus, telemetryError);
723
+ }
600
724
  }
725
+ state.status = "completed";
726
+ state.currentStepIndex = definition.steps.length;
727
+ state.updatedAt = Date.now();
728
+ return await finalizeInvocation("completed");
729
+ }
730
+ catch (error) {
731
+ const terminalStatus = isCancellationError(error) || input.abortSignal?.aborted ? "cancelled" : "failed";
732
+ const terminalError = toWorkflowError(error ?? input.abortSignal?.reason, terminalStatus === "cancelled" ? "Workflow execution was cancelled." : "Workflow execution failed.");
733
+ if (terminalStatus === "cancelled") {
734
+ terminalError.name = "AbortError";
735
+ }
736
+ await emitWorkflowFinish(terminalStatus, terminalError);
737
+ throw error;
601
738
  }
602
- state.status = "completed";
603
- state.currentStepIndex = definition.steps.length;
604
- state.updatedAt = Date.now();
605
- return finalizeWorkflowOutput(definition, state);
606
739
  };
607
740
  export const replayWorkflowRun = (state) => {
608
741
  const timeline = [