@kb-labs/workflow-contracts 2.88.0 → 2.93.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { E as ExpressionContext, W as WorkflowInvocationSpec } from './rest-api-C7Ce_RPu.js';
2
- export { A as ApprovalReviewItem, a as ApprovalReviewItemSchema, b as ArtifactMergeConfig, c as ArtifactMergeConfigSchema, d as ArtifactMergeSource, e as ArtifactMergeSourceSchema, f as ArtifactMergeStrategy, g as ArtifactMergeStrategySchema, C as ConcurrencyGroup, h as ConcurrencyGroupSchema, i as CreateRunInput, j as CronInfo, k as CronInfoSchema, l as CronListResponse, m as CronListResponseSchema, n as CronRegistrationRequest, D as DashboardStatsResponse, o as DashboardStatsResponseSchema, p as ExecutionResult, q as ExecutionResultSchema, r as ExecutionTarget, s as ExecutionTargetSchema, I as IWorkflowEngine, t as IdempotencyKey, u as IdempotencyKeySchema, v as IsolationProfile, w as IsolationProfileSchema, J as JobArtifactsSchema, x as JobCancelResponse, y as JobCancelResponseSchema, z as JobConcurrencySchema, B as JobHooks, F as JobHooksSchema, G as JobListFilter, H as JobListResponse, K as JobListResponseSchema, L as JobLogsResponse, M as JobLogsResponseSchema, N as JobRun, O as JobRunSchema, P as JobSpec, Q as JobSpecSchema, R as JobStateSchema, S as JobStatusInfo, T as JobStatusInfoSchema, U as JobStatusSchema, V as JobStepInfo, X as JobStepInfoSchema, Y as JobStepsResponse, Z as JobStepsResponseSchema, _ as JobSubmissionRequest, $ as JobSubmissionResponse, a0 as ListRunsFilter, a1 as Phase, a2 as PhaseSchema, a3 as ResultError, a4 as ResultErrorSchema, a5 as ResultMetrics, a6 as ResultMetricsSchema, a7 as RetryModeSchema, a8 as RetryPolicy, a9 as RetryPolicySchema, aa as RunMetadata, ab as RunMetadataSchema, ac as RunSchema, ad as RunStateSchema, ae as RunTrigger, af as RunTriggerSchema, ag as StepArtifact, ah as StepArtifactSchema, ai as StepProgress, aj as StepProgressSchema, ak as StepRun, al as StepRunErrorSchema, am as StepRunSchema, an as StepSpec, ao as StepSpecSchema, ap as StepStateSchema, aq as TenantIdSchema, ar as TimeoutSchema, as as WorkflowInfo, at as WorkflowInfoSchema, au as WorkflowInputField, av as WorkflowInputFieldSchema, aw as WorkflowListResponse, ax as WorkflowListResponseSchema, ay as WorkflowLogEvent, az as WorkflowRun, aA as WorkflowRunHistoryResponse, aB as WorkflowRunHistoryResponseSchema, aC as WorkflowRunInfo, aD as WorkflowRunInfoSchema, aE as WorkflowRunRequest, aF as WorkflowRunRequestSchema, aG as WorkflowSpec, aH as WorkflowSpecSchema, aI as WorkflowTriggerSchema, aJ as WorkflowValidationResult } from './rest-api-C7Ce_RPu.js';
1
+ import { E as ExpressionContext, W as WorkflowInvocationSpec } from './rest-api-BVWeRsk-.js';
2
+ export { A as ApprovalReviewItem, a as ApprovalReviewItemSchema, b as ArtifactMergeConfig, c as ArtifactMergeConfigSchema, d as ArtifactMergeSource, e as ArtifactMergeSourceSchema, f as ArtifactMergeStrategy, g as ArtifactMergeStrategySchema, C as ConcurrencyGroup, h as ConcurrencyGroupSchema, i as CreateRunInput, j as CronInfo, k as CronInfoSchema, l as CronListResponse, m as CronListResponseSchema, n as CronRegistrationRequest, D as DashboardStatsResponse, o as DashboardStatsResponseSchema, p as ExecutionResult, q as ExecutionResultSchema, r as ExecutionTarget, s as ExecutionTargetSchema, I as IWorkflowEngine, t as IdempotencyKey, u as IdempotencyKeySchema, v as IsolationProfile, w as IsolationProfileSchema, J as JobArtifactsSchema, x as JobCancelResponse, y as JobCancelResponseSchema, z as JobConcurrencySchema, B as JobHooks, F as JobHooksSchema, G as JobListFilter, H as JobListResponse, K as JobListResponseSchema, L as JobLogsResponse, M as JobLogsResponseSchema, N as JobRun, O as JobRunSchema, P as JobSpec, Q as JobSpecSchema, R as JobStateSchema, S as JobStatusInfo, T as JobStatusInfoSchema, U as JobStatusSchema, V as JobStepInfo, X as JobStepInfoSchema, Y as JobStepsResponse, Z as JobStepsResponseSchema, _ as JobSubmissionRequest, $ as JobSubmissionResponse, a0 as ListRunsFilter, a1 as Phase, a2 as PhaseSchema, a3 as ResultError, a4 as ResultErrorSchema, a5 as ResultMetrics, a6 as ResultMetricsSchema, a7 as RetryModeSchema, a8 as RetryPolicy, a9 as RetryPolicySchema, aa as RunMetadata, ab as RunMetadataSchema, ac as RunSchema, ad as RunStateSchema, ae as RunTrigger, af as RunTriggerSchema, ag as StepArtifact, ah as StepArtifactSchema, ai as StepProgress, aj as StepProgressSchema, ak as StepRun, al as StepRunErrorSchema, am as StepRunSchema, an as StepSpec, ao as StepSpecSchema, ap as StepStateSchema, aq as TenantIdSchema, ar as TimeoutSchema, as as WorkflowInfo, at as WorkflowInfoSchema, au as WorkflowInputField, av as WorkflowInputFieldSchema, aw as WorkflowListResponse, ax as WorkflowListResponseSchema, ay as WorkflowLogEvent, az as WorkflowRun, aA as WorkflowRunHistoryResponse, aB as WorkflowRunHistoryResponseSchema, aC as WorkflowRunInfo, aD as WorkflowRunInfoSchema, aE as WorkflowRunRequest, aF as WorkflowRunRequestSchema, aG as WorkflowSpec, aH as WorkflowSpecSchema, aI as WorkflowTriggerSchema, aJ as WorkflowValidationResult } from './rest-api-BVWeRsk-.js';
3
3
  import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
4
4
  import { z } from 'zod';
5
5
 
@@ -180,20 +180,20 @@ declare const PluginCronJobSchema: z.ZodObject<{
180
180
  id: string;
181
181
  priority: "high" | "normal" | "low";
182
182
  schedule: string;
183
- handler: string;
184
183
  enabled: boolean;
184
+ handler: string;
185
185
  timezone?: string | undefined;
186
- metadata?: Record<string, unknown> | undefined;
187
186
  input?: Record<string, unknown> | undefined;
187
+ metadata?: Record<string, unknown> | undefined;
188
188
  }, {
189
189
  id: string;
190
190
  schedule: string;
191
191
  handler: string;
192
192
  priority?: "high" | "normal" | "low" | undefined;
193
193
  timezone?: string | undefined;
194
- metadata?: Record<string, unknown> | undefined;
195
- input?: Record<string, unknown> | undefined;
196
194
  enabled?: boolean | undefined;
195
+ input?: Record<string, unknown> | undefined;
196
+ metadata?: Record<string, unknown> | undefined;
197
197
  }>;
198
198
  type PluginCronJob = z.infer<typeof PluginCronJobSchema>;
199
199
  /**
@@ -211,24 +211,24 @@ declare const UserCronJobSchema: z.ZodObject<{
211
211
  jobs: z.ZodRecord<z.ZodString, z.ZodAny>;
212
212
  metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
213
213
  }, "strip", z.ZodTypeAny, {
214
- name: string;
215
214
  priority: "high" | "normal" | "low";
216
- schedule: string;
217
215
  jobs: Record<string, any>;
216
+ schedule: string;
218
217
  enabled: boolean;
218
+ name: string;
219
219
  autoStart: boolean;
220
- env?: Record<string, string> | undefined;
221
220
  timezone?: string | undefined;
221
+ env?: Record<string, string> | undefined;
222
222
  metadata?: Record<string, unknown> | undefined;
223
223
  }, {
224
- name: string;
225
- schedule: string;
226
224
  jobs: Record<string, any>;
227
- env?: Record<string, string> | undefined;
225
+ schedule: string;
226
+ name: string;
228
227
  priority?: "high" | "normal" | "low" | undefined;
229
228
  timezone?: string | undefined;
230
- metadata?: Record<string, unknown> | undefined;
231
229
  enabled?: boolean | undefined;
230
+ env?: Record<string, string> | undefined;
231
+ metadata?: Record<string, unknown> | undefined;
232
232
  autoStart?: boolean | undefined;
233
233
  }>;
234
234
  type UserCronJob = z.infer<typeof UserCronJobSchema>;
@@ -273,7 +273,7 @@ declare const CronExecutionSchema: z.ZodObject<{
273
273
  stack?: string | undefined;
274
274
  }>>;
275
275
  }, "strip", z.ZodTypeAny, {
276
- status: "running" | "success" | "failed" | "pending";
276
+ status: "pending" | "running" | "failed" | "success";
277
277
  runId: string;
278
278
  cronJobId: string;
279
279
  scheduledAt: string;
@@ -284,7 +284,7 @@ declare const CronExecutionSchema: z.ZodObject<{
284
284
  stack?: string | undefined;
285
285
  } | undefined;
286
286
  }, {
287
- status: "running" | "success" | "failed" | "pending";
287
+ status: "pending" | "running" | "failed" | "success";
288
288
  runId: string;
289
289
  cronJobId: string;
290
290
  scheduledAt: string;
package/dist/index.js CHANGED
@@ -192,7 +192,13 @@ var StepRunSchema = z.object({
192
192
  error: StepRunErrorSchema.optional(),
193
193
  outputs: z.record(z.string(), z.unknown()).optional(),
194
194
  skipReason: z.string().optional(),
195
- spec: StepSpecSchema
195
+ spec: StepSpecSchema,
196
+ /**
197
+ * Resolved (interpolated) inputs for this execution.
198
+ * Stored separately from spec.with so original ${{ }} templates are preserved
199
+ * and future re-executions (gate restartFrom) can re-interpolate correctly.
200
+ */
201
+ resolvedInputs: z.record(z.string(), z.unknown()).optional()
196
202
  });
197
203
  var JobRunSchema = z.object({
198
204
  id: z.string().min(1),
@@ -730,6 +736,7 @@ var WorkflowListResponseSchema = z.object({
730
736
  workflows: z.array(WorkflowInfoSchema)
731
737
  });
732
738
  var WorkflowRunRequestSchema = z.object({
739
+ inputs: z.record(z.unknown()).optional(),
733
740
  input: z.unknown().optional(),
734
741
  target: z.object({
735
742
  environmentId: z.string().min(1).optional(),
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/schemas.ts","../src/expressions.ts","../src/flags.ts","../src/cron.ts","../src/rest-api.ts","../src/routes.ts"],"names":["value","z"],"mappings":";;;;;AAYA,IAAM,gBAAA,GAAmB,UAAA;AACzB,IAAM,gBAAA,GAAmB,UAAA;AACzB,IAAM,iBAAA,GAAoB,WAAA;AAEnB,IAAM,cAAA,GAAiB,CAAA,CAAE,IAAA,CAAK,gBAAgB;AAC9C,IAAM,cAAA,GAAiB,CAAA,CAAE,IAAA,CAAK,gBAAgB;AAC9C,IAAM,eAAA,GAAkB,CAAA,CAAE,IAAA,CAAK,iBAAiB;AAEhD,IAAM,oBAAA,GAAuB,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,GAAG;AACtD,IAAM,sBAAA,GAAyB,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,GAAG;AAMxD,IAAM,iBAAiB,CAAA,CAC3B,MAAA,EAAO,CACP,GAAA,CAAI,CAAC,CAAA,CACL,GAAA,CAAI,EAAE,CAAA,CACN,MAAM,kBAAkB,CAAA,CACxB,QAAA,CAAS,mBAAmB,EAC5B,QAAA;AAEI,IAAM,kBAAkB,CAAA,CAAE,IAAA,CAAK,CAAC,KAAA,EAAO,KAAK,CAAC;AAE7C,IAAM,iBAAA,GAAoB,EAAE,MAAA,CAAO;AAAA,EACxC,KAAK,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,WAAA,EAAY;AAAA,EAClC,OAAA,EAAS,eAAA,CAAgB,OAAA,CAAQ,KAAK,CAAA;AAAA,EACtC,iBAAA,EAAmB,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,GAAI,CAAA;AAAA,EAC3D,aAAA,EAAe,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,GAAW,QAAA;AAC7C,CAAC;AAEM,IAAM,aAAA,GAAgB,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI,CAAE,QAAA,EAAS,CAAE,GAAA,CAAI,GAAA,GAAO,EAAA,GAAK,EAAA,GAAK,EAAE;AAEzE,IAAM,qBAAA,GAAwB,EAAE,MAAA,CAAO;AAAA,EAC5C,eAAe,CAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA,EAAS;AAAA,EAC1C,aAAa,CAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA,EAAS;AAAA,EACxC,WAAW,CAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA,EAAS;AAAA,EACtC,SAAS,CAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA;AAC7B,CAAC;AAEM,IAAM,yBAAyB,CAAA,CAAE,IAAA,CAAK,CAAC,QAAA,EAAU,UAAA,EAAY,SAAS,CAAC;AAOvE,IAAM,WAAA,GAAc,EAAE,MAAA,CAAO;AAAA,EAClC,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACvB,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAC1B,CAAC;AAGM,IAAM,kBAAA,GAAqB,EAAE,MAAA,CAAO;AAAA,EACzC,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACxB,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC;AAC1B,CAAC;AAGM,IAAM,kBAAA,GAAqB,EAAE,MAAA,CAAO;AAAA,EACzC,IAAA,EAAM,CAAA,CAAE,IAAA,CAAK,CAAC,UAAA,EAAY,QAAA,EAAU,OAAA,EAAS,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,MAAM,CAAC,CAAA;AAAA,EAC3E,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACxB,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACvB,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC5B,aAAA,EAAe,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AAC7B,CAAC;AAGM,IAAM,wBAAA,GAA2B,EAAE,MAAA,CAAO;AAAA,EAC/C,QAAA,EAAU,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EAC1B,QAAA,EAAU,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC/B,SAAA,EAAW,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AACzB,CAAC;AAIM,IAAM,cAAA,GAAiB,EAC3B,MAAA,CAAO;AAAA,EACN,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACtB,IAAA,EAAM,EACH,KAAA,CAAM;AAAA,IACL,CAAA,CAAE,QAAQ,eAAe,CAAA;AAAA,IACzB,CAAA,CAAE,QAAQ,kBAAkB,CAAA;AAAA,IAC5B,CAAA,CAAE,QAAQ,cAAc,CAAA;AAAA,IACxB,CAAA,CAAE,MAAA,EAAO,CAAE,KAAA,CAAM,4CAA4C;AAAA,GAC9D,EACA,QAAA,EAAS;AAAA;AAAA,EAEZ,GAAA,EAAK,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACzB,EAAA,EAAI,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,EAAE,CAAA,CAAE,KAAA,CAAM,kBAAkB,EAAE,QAAA,EAAS;AAAA,EACjE,EAAA,EAAI,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACxB,IAAA,EAAM,CAAA,CAAE,MAAA,CAAO,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,EAAS;AAAA,EACjD,GAAA,EAAK,CAAA,CAAE,MAAA,CAAO,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS;AAAA,EAC/C,OAAA,EAAS,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EAC7C,SAAA,EAAW,cAAc,QAAA,EAAS;AAAA,EAClC,eAAA,EAAiB,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA;AAAA,EAEtC,OAAA,EAAS,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC7B,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,QAAA,EAAU,mBAAmB,QAAA,EAAS;AAAA,EACtC,SAAA,EAAW,CAAA,CAAE,MAAA,CAAO,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,EAAG,kBAAkB,CAAA,CAAE,QAAA;AAC7D,CAAC,CAAA,CACA,SAAA,CAAU,CAAC,IAAA,KAAS;AAEnB,EAAA,IAAI,IAAA,CAAK,GAAA,IAAO,CAAC,IAAA,CAAK,IAAA,EAAM;AAC1B,IAAA,MAAM,EAAE,GAAA,EAAK,IAAA,EAAM,SAAA,EAAW,GAAG,MAAK,GAAI,IAAA;AAC1C,IAAA,OAAO;AAAA,MACL,GAAG,IAAA;AAAA,MACH,IAAA,EAAM,eAAA;AAAA,MACN,IAAA,EAAM,EAAE,GAAG,SAAA,EAAW,SAAS,GAAA;AAAI,KACrC;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT,CAAC;AAEI,IAAM,oBAAA,GAAuB,EAAE,MAAA,CAAO;AAAA,EAC3C,KAAA,EAAO,sBAAA;AAAA,EACP,gBAAA,EAAkB,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AAChC,CAAC;AAEM,IAAM,8BAA8B,CAAA,CAAE,IAAA,CAAK,CAAC,QAAA,EAAU,WAAA,EAAa,YAAY,CAAC;AAEhF,IAAM,yBAAA,GAA4B,EAAE,MAAA,CAAO;AAAA,EAChD,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACvB,OAAO,CAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA;AAC3B,CAAC;AAEM,IAAM,yBAAA,GAA4B,EAAE,MAAA,CAAO;AAAA,EAChD,QAAA,EAAU,2BAAA;AAAA,EACV,MAAM,CAAA,CAAE,KAAA,CAAM,yBAAyB,CAAA,CAAE,IAAI,CAAC;AAChD,CAAC;AAEM,IAAM,kBAAA,GAAqB,EAC/B,MAAA,CAAO;AAAA,EACN,OAAA,EAAS,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EAC7C,OAAA,EAAS,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EAC7C,KAAA,EAAO,0BAA0B,QAAA;AACnC,CAAC,EACA,QAAA;AAEI,IAAM,cAAA,GAAiB,EAC3B,MAAA,CAAO;AAAA,EACN,GAAA,EAAK,CAAA,CAAE,KAAA,CAAM,cAAc,EAAE,QAAA,EAAS;AAAA,EACtC,IAAA,EAAM,CAAA,CAAE,KAAA,CAAM,cAAc,EAAE,QAAA,EAAS;AAAA,EACvC,SAAA,EAAW,CAAA,CAAE,KAAA,CAAM,cAAc,EAAE,QAAA,EAAS;AAAA,EAC5C,SAAA,EAAW,CAAA,CAAE,KAAA,CAAM,cAAc,EAAE,QAAA;AACrC,CAAC,EACA,QAAA;AAEI,IAAM,aAAA,GAAgB,EAAE,MAAA,CAAO;AAAA,EACpC,QAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,OAAA,EAAS,SAAS,CAAC,CAAA;AAAA,EACnC,MAAA,EAAQ,sBAAsB,QAAA,EAAS;AAAA,EACvC,SAAA,EAAW,uBAAuB,QAAA,EAAS;AAAA,EAC3C,WAAA,EAAa,qBAAqB,QAAA,EAAS;AAAA,EAC3C,OAAO,CAAA,CAAE,KAAA,CAAM,cAAc,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA,EACpC,SAAA,EAAW,kBAAA;AAAA,EACX,KAAA,EAAO,cAAA;AAAA,EACP,EAAA,EAAI,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACxB,SAAA,EAAW,cAAc,QAAA,EAAS;AAAA,EAClC,OAAA,EAAS,kBAAkB,QAAA,EAAS;AAAA,EACpC,GAAA,EAAK,CAAA,CAAE,MAAA,CAAO,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS;AAAA,EAC/C,OAAA,EAAS,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EAC7C,KAAA,EAAO,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EAC3C,QAAA,EAAU,EAAE,IAAA,CAAK,CAAC,QAAQ,QAAA,EAAU,KAAK,CAAC,CAAA,CAAE,QAAA;AAC9C,CAAC;AAEM,IAAM,qBAAA,GAAwB,EAClC,MAAA,CAAO;AAAA,EACN,MAAA,EAAQ,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC7B,IAAA,EAAM,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC3B,OAAA,EAAS,EACN,KAAA,CAAM;AAAA,IACL,EAAE,OAAA,EAAQ;AAAA,IACV,EAAE,MAAA,CAAO;AAAA,MACP,QAAQ,CAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA,EAAS;AAAA,MACnC,MAAM,CAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA,EAAS;AAAA,MACjC,OAAA,EAAS,CAAA,CAAE,MAAA,CAAO,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA;AAAS,KACpD;AAAA,GACF,EACA,QAAA,EAAS;AAAA,EACZ,QAAA,EAAU,EACP,MAAA,CAAO;AAAA,IACN,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,IACtB,UAAU,CAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA;AAAS,GACtC,EACA,QAAA;AACL,CAAC,CAAA,CACA,MAAA;AAAA,EACC,CAAC,KAAA,KACC,KAAA,CAAM,MAAA,IAAU,KAAA,CAAM,IAAA,IAAQ,CAAC,CAAC,KAAA,CAAM,OAAA,IAAW,CAAC,CAAC,KAAA,CAAM,QAAA;AAAA,EAC3D;AAAA,IACE,OAAA,EAAS,sCAAA;AAAA,IACT,IAAA,EAAM,CAAC,QAAQ;AAAA;AAEnB;AAEK,IAAM,wBAAA,GAA2B,EAAE,MAAA,CAAO;AAAA,EAC/C,MAAM,CAAA,CAAE,IAAA,CAAK,CAAC,QAAA,EAAU,QAAA,EAAU,SAAS,CAAC,CAAA;AAAA,EAC5C,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,QAAA,EAAU,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC/B,OAAA,EAAS,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AACvB,CAAC;AAIM,IAAM,kBAAA,GAAqB,EAC/B,MAAA,CAAO;AAAA,EACN,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACtB,OAAA,EAAS,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACzB,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,MAAA,EAAQ,sBAAsB,QAAA,EAAS;AAAA,EACvC,SAAA,EAAW,uBAAuB,QAAA,EAAS;AAAA,EAC3C,EAAA,EAAI,qBAAA;AAAA,EACJ,MAAA,EAAQ,EAAE,MAAA,CAAO,CAAA,CAAE,QAAO,EAAG,wBAAwB,EAAE,QAAA,EAAS;AAAA,EAChE,GAAA,EAAK,CAAA,CAAE,MAAA,CAAO,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS;AAAA,EAC/C,OAAA,EAAS,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EAC7C,IAAA,EAAM,EAAE,MAAA,CAAO,CAAA,CAAE,QAAO,CAAE,GAAA,CAAI,CAAC,CAAA,EAAG,aAAa,CAAA;AAAA;AAAA,EAE/C,MAAA,EAAQ,CAAA,CAAE,MAAA,CAAO,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,EAAG,WAAW,CAAA,CAAE,QAAA;AACnD,CAAC,CAAA,CACA,MAAA;AAAA,EACC,CAAC,UACC,MAAA,CAAO,IAAA,CAAK,MAAM,IAAI,CAAA,CAAE,SAAS,CAAA,IACjC,MAAA,CAAO,KAAK,KAAA,CAAM,IAAI,EAAE,KAAA,CAAM,CAAC,QAAQ,GAAA,CAAI,IAAA,EAAK,CAAE,MAAA,GAAS,CAAC,CAAA;AAAA,EAC9D;AAAA,IACE,OAAA,EAAS,sDAAA;AAAA,IACT,IAAA,EAAM,CAAC,MAAM;AAAA;AAEjB;AAEK,IAAM,kBAAA,GAAqB,EAAE,MAAA,CAAO;AAAA,EACzC,OAAA,EAAS,EAAE,MAAA,EAAO;AAAA,EAClB,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC1B,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,SAAA,EAAW,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC/B,OAAA,EAAS,CAAA,CAAE,MAAA,CAAO,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA;AAC7C,CAAC;AAEM,IAAM,aAAA,GAAgB,EAAE,MAAA,CAAO;AAAA,EACpC,EAAA,EAAI,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACpB,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACvB,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACvB,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACtB,OAAO,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,WAAA,EAAY;AAAA,EACpC,MAAA,EAAQ,eAAA;AAAA,EACR,QAAA,EAAU,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,WAAW,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC1C,YAAY,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC3C,UAAA,EAAY,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,WAAA,GAAc,QAAA,EAAS;AAAA,EACpD,OAAA,EAAS,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,WAAA,EAAY,CAAE,OAAA,CAAQ,CAAC,CAAA;AAAA,EACjD,SAAA,EAAW,cAAc,QAAA,EAAS;AAAA,EAClC,eAAA,EAAiB,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EACtC,KAAA,EAAO,mBAAmB,QAAA,EAAS;AAAA,EACnC,OAAA,EAAS,CAAA,CAAE,MAAA,CAAO,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,EAAS;AAAA,EACpD,UAAA,EAAY,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChC,IAAA,EAAM;AACR,CAAC;AAEM,IAAM,YAAA,GAAe,EAAE,MAAA,CAAO;AAAA,EACnC,EAAA,EAAI,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACpB,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACvB,QAAA,EAAU,cAAA;AAAA;AAAA,EACV,OAAA,EAAS,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACzB,MAAA,EAAQ,cAAA;AAAA,EACR,QAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,OAAA,EAAS,SAAS,CAAC,CAAA;AAAA,EACnC,QAAA,EAAU,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,WAAW,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC1C,YAAY,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC3C,UAAA,EAAY,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,WAAA,GAAc,QAAA,EAAS;AAAA,EACpD,OAAA,EAAS,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,WAAA,EAAY,CAAE,OAAA,CAAQ,CAAC,CAAA;AAAA,EACjD,WAAA,EAAa,qBAAqB,QAAA,EAAS;AAAA,EAC3C,OAAA,EAAS,kBAAkB,QAAA,EAAS;AAAA,EACpC,SAAA,EAAW,cAAc,QAAA,EAAS;AAAA,EAClC,MAAA,EAAQ,sBAAsB,QAAA,EAAS;AAAA,EACvC,SAAA,EAAW,uBAAuB,QAAA,EAAS;AAAA,EAC3C,SAAA,EAAW,kBAAA;AAAA,EACX,KAAA,EAAO,mBAAmB,QAAA,EAAS;AAAA,EACnC,GAAA,EAAK,CAAA,CAAE,MAAA,CAAO,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS;AAAA,EAC/C,OAAA,EAAS,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EAC7C,KAAA,EAAO,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EAC3C,mBAAA,EAAqB,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EACzD,OAAA,EAAS,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC9B,QAAA,EAAU,EAAE,IAAA,CAAK,CAAC,QAAQ,QAAA,EAAU,KAAK,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EACrD,KAAA,EAAO,CAAA,CAAE,KAAA,CAAM,aAAa;AAC9B,CAAC;AAEM,IAAM,gBAAA,GAAmB,EAAE,MAAA,CAAO;AAAA,EACvC,IAAA,EAAM,EAAE,IAAA,CAAK,CAAC,UAAU,SAAA,EAAW,MAAA,EAAQ,UAAA,EAAY,UAAU,CAAC,CAAA;AAAA,EAClE,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,OAAA,EAAS,CAAA,CAAE,MAAA,CAAO,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,EAAS;AAAA,EACpD,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,YAAA,EAAc,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAClC,mBAAA,EAAqB,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAClC,CAAC;AAEM,IAAM,iBAAA,GAAoB,EAAE,MAAA,CAAO;AAAA,EACxC,cAAA,EAAgB,qBAAqB,QAAA,EAAS;AAAA,EAC9C,gBAAA,EAAkB,uBAAuB,QAAA,EAAS;AAAA,EAClD,MAAA,EAAQ,sBAAsB,QAAA,EAAS;AAAA,EACvC,SAAA,EAAW,uBAAuB,QAAA,EAAS;AAAA,EAC3C,UAAA,EAAY,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChC,aAAA,EAAe,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,WAAA,GAAc,QAAA,EAAS;AAAA,EACvD,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,YAAA,EAAc,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAC3B,CAAC;AAEM,IAAM,iBAAA,GAAoB,EAAE,MAAA,CAAO;AAAA,EACxC,OAAA,EAAS,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACzB,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC1B,OAAA,EAAS,CAAA,CAAE,MAAA,CAAO,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA;AAC7C,CAAC;AAEM,IAAM,mBAAA,GAAsB,EAAE,MAAA,CAAO;AAAA,EAC1C,MAAA,EAAQ,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,WAAA,GAAc,QAAA,EAAS;AAAA,EAChD,KAAA,EAAO,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,WAAA,GAAc,QAAA,EAAS;AAAA,EAC/C,OAAO,CAAA,CAAE,MAAA,EAAO,CAAE,WAAA,GAAc,QAAA,EAAS;AAAA,EACzC,SAAA,EAAW,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,WAAA,GAAc,QAAA,EAAS;AAAA,EACnD,aAAA,EAAe,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,WAAA,GAAc,QAAA,EAAS;AAAA,EACvD,UAAA,EAAY,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,WAAA,GAAc,QAAA,EAAS;AAAA,EACpD,aAAA,EAAe,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,WAAA,GAAc,QAAA,EAAS;AAAA,EACvD,UAAA,EAAY,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,WAAA,GAAc,QAAA,EAAS;AAAA,EACpD,WAAA,EAAa,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,WAAA,GAAc,QAAA,EAAS;AAAA,EACrD,cAAA,EAAgB,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,WAAA,GAAc,QAAA;AACjD,CAAC;AAEM,IAAM,qBAAA,GAAwB,EAAE,MAAA,CAAO;AAAA,EAC5C,MAAA,EAAQ,cAAA;AAAA,EACR,OAAA,EAAS,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC7B,WAAW,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC1C,aAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC5C,OAAA,EAAS,oBAAoB,QAAA,EAAS;AAAA,EACtC,OAAA,EAAS,CAAA,CAAE,MAAA,CAAO,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,EAAS;AAAA,EACpD,OAAA,EAAS,CAAA,CAAE,MAAA,CAAO,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,EAAS;AAAA,EACpD,KAAA,EAAO,kBAAkB,QAAA;AAC3B,CAAC;AAEM,IAAM,SAAA,GAAY,EAAE,MAAA,CAAO;AAAA,EAChC,EAAA,EAAI,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACpB,QAAA,EAAU,cAAA;AAAA;AAAA,EACV,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACtB,OAAA,EAAS,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACzB,MAAA,EAAQ,cAAA;AAAA,EACR,SAAA,EAAW,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC/B,QAAA,EAAU,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,WAAW,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC1C,YAAY,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC3C,UAAA,EAAY,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,WAAA,GAAc,QAAA,EAAS;AAAA,EACpD,OAAA,EAAS,gBAAA;AAAA,EACT,GAAA,EAAK,CAAA,CAAE,MAAA,CAAO,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS;AAAA,EAC/C,MAAA,EAAQ,CAAA,CAAE,MAAA,CAAO,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,EAAS;AAAA,EACnD,OAAA,EAAS,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EAC7C,IAAA,EAAM,CAAA,CAAE,KAAA,CAAM,YAAY,CAAA;AAAA,EAC1B,WAAW,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACxC,QAAA,EAAU,kBAAkB,QAAA,EAAS;AAAA,EACrC,MAAA,EAAQ,sBAAsB,QAAA;AAChC,CAAC;;;AC3WM,SAAS,kBAAkB,IAAA,EAA6C;AAC7E,EAAA,IAAI,CAAC,IAAA,CAAK,UAAA,CAAW,WAAW,CAAA,EAAG;AACjC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,MAAM,CAAA;AAChD,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,UAAA;AAAA,IACN,UAAA;AAAA,IACA,IAAA,EAAM,MAAA;AAAA;AAAA,IACN,UAAA,EAAY;AAAA;AAAA,GACd;AACF;AAKO,SAAS,mBAAmB,GAAA,EAAuB;AACxD,EAAA,MAAM,OAAA,GAAU,0BAAA;AAChB,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,IAAI,KAAA;AAEJ,EAAA,OAAA,CAAQ,KAAA,GAAQ,OAAA,CAAQ,IAAA,CAAK,GAAG,OAAO,IAAA,EAAM;AAC3C,IAAA,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAAG,MAAM,CAAA;AAAA,EAC/B;AAEA,EAAA,OAAO,OAAA;AACT;AAQO,SAAS,kBAAA,CACd,MACA,OAAA,EACS;AACT,EAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAG1B,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA,EAAG;AAC1B,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,CAAE,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAA;AACrD,IAAA,OAAO,MAAM,KAAA,CAAM,CAAC,SAAS,kBAAA,CAAmB,IAAA,EAAM,OAAO,CAAC,CAAA;AAAA,EAChE;AAEA,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA,EAAG;AAC1B,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,CAAE,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAA;AACrD,IAAA,OAAO,MAAM,IAAA,CAAK,CAAC,SAAS,kBAAA,CAAmB,IAAA,EAAM,OAAO,CAAC,CAAA;AAAA,EAC/D;AAGA,EAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,EAAG;AAC3B,IAAA,OAAO,CAAC,mBAAmB,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,IAAQ,OAAO,CAAA;AAAA,EAC7D;AAGA,EAAA,IAAI,QAAQ,UAAA,CAAW,GAAG,KAAK,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,EAAG;AACpD,IAAA,OAAO,kBAAA,CAAmB,QAAQ,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CAAE,IAAA,IAAQ,OAAO,CAAA;AAAA,EAChE;AAGA,EAAA,IAAI,YAAY,MAAA,EAAQ;AAAC,IAAA,OAAO,IAAA;AAAA,EAAI;AACpC,EAAA,IAAI,YAAY,OAAA,EAAS;AAAC,IAAA,OAAO,KAAA;AAAA,EAAK;AAGtC,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA,EAAG;AAC1B,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,CAAE,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAA;AACrD,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,IAAK,KAAA,CAAM,CAAC,CAAA,IAAK,KAAA,CAAM,CAAC,CAAA,EAAG;AAC9C,MAAA,MAAM,IAAA,GAAO,YAAA,CAAa,KAAA,CAAM,CAAC,GAAG,OAAO,CAAA;AAC3C,MAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,KAAA,CAAM,CAAC,GAAG,OAAO,CAAA;AAE5C,MAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,OAAO,UAAU,QAAA,EAAU;AACzD,QAAA,OAAO,IAAA,KAAS,KAAA;AAAA,MAClB;AAEA,MAAA,OAAO,cAAA,CAAe,IAAI,CAAA,KAAM,cAAA,CAAe,KAAK,CAAA;AAAA,IACtD;AAAA,EACF;AAEA,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA,EAAG;AAC1B,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,CAAE,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAA;AACrD,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,IAAK,KAAA,CAAM,CAAC,CAAA,IAAK,KAAA,CAAM,CAAC,CAAA,EAAG;AAC9C,MAAA,MAAM,IAAA,GAAO,YAAA,CAAa,KAAA,CAAM,CAAC,GAAG,OAAO,CAAA;AAC3C,MAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,KAAA,CAAM,CAAC,GAAG,OAAO,CAAA;AAE5C,MAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,OAAO,UAAU,QAAA,EAAU;AACzD,QAAA,OAAO,IAAA,KAAS,KAAA;AAAA,MAClB;AAEA,MAAA,OAAO,cAAA,CAAe,IAAI,CAAA,KAAM,cAAA,CAAe,KAAK,CAAA;AAAA,IACtD;AAAA,EACF;AAGA,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,WAAW,CAAA,EAAG;AACjC,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,gCAAgC,CAAA;AAC5D,IAAA,IAAI,SAAS,KAAA,CAAM,CAAC,CAAA,IAAK,KAAA,CAAM,CAAC,CAAA,EAAG;AACjC,MAAA,MAAMA,SAAQ,YAAA,CAAa,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,IAAQ,OAAO,CAAA;AACnD,MAAA,MAAM,MAAA,GAAS,MAAM,CAAC,CAAA,CAAE,MAAK,CAAE,OAAA,CAAQ,gBAAgB,EAAE,CAAA;AACzD,MAAA,OAAO,MAAA,CAAOA,MAAK,CAAA,CAAE,QAAA,CAAS,MAAM,CAAA;AAAA,IACtC;AAAA,EACF;AAEA,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,aAAa,CAAA,EAAG;AACnC,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,kCAAkC,CAAA;AAC9D,IAAA,IAAI,SAAS,KAAA,CAAM,CAAC,CAAA,IAAK,KAAA,CAAM,CAAC,CAAA,EAAG;AACjC,MAAA,MAAMA,SAAQ,YAAA,CAAa,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,IAAQ,OAAO,CAAA;AACnD,MAAA,MAAM,MAAA,GAAS,MAAM,CAAC,CAAA,CAAE,MAAK,CAAE,OAAA,CAAQ,gBAAgB,EAAE,CAAA;AACzD,MAAA,OAAO,MAAA,CAAOA,MAAK,CAAA,CAAE,UAAA,CAAW,MAAM,CAAA;AAAA,IACxC;AAAA,EACF;AAEA,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,WAAW,CAAA,EAAG;AACjC,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,gCAAgC,CAAA;AAC5D,IAAA,IAAI,SAAS,KAAA,CAAM,CAAC,CAAA,IAAK,KAAA,CAAM,CAAC,CAAA,EAAG;AACjC,MAAA,MAAMA,SAAQ,YAAA,CAAa,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,IAAQ,OAAO,CAAA;AACnD,MAAA,MAAM,MAAA,GAAS,MAAM,CAAC,CAAA,CAAE,MAAK,CAAE,OAAA,CAAQ,gBAAgB,EAAE,CAAA;AACzD,MAAA,OAAO,MAAA,CAAOA,MAAK,CAAA,CAAE,QAAA,CAAS,MAAM,CAAA;AAAA,IACtC;AAAA,EACF;AAGA,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,OAAA,EAAS,OAAO,CAAA;AAC3C,EAAA,OAAO,QAAQ,KAAK,CAAA;AACtB;AAKO,SAAS,YAAA,CAAa,MAAc,OAAA,EAAqC;AAE9E,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,OAAA,CAAQ,cAAA,EAAgB,EAAE,CAAA;AAGjD,EAAA,IAAI,SAAA,CAAU,UAAA,CAAW,MAAM,CAAA,EAAG;AAChC,IAAA,MAAM,GAAA,GAAM,SAAA,CAAU,KAAA,CAAM,MAAA,CAAO,MAAM,CAAA;AACzC,IAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA,IAAK,EAAA;AAAA,EAC7B;AAGA,EAAA,IAAI,SAAA,CAAU,UAAA,CAAW,UAAU,CAAA,EAAG;AACpC,IAAA,MAAM,GAAA,GAAM,SAAA,CAAU,KAAA,CAAM,UAAA,CAAW,MAAM,CAAA;AAC7C,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,OAAO,QAAQ,OAAA,CAAQ,IAAA;AAAA,IACzB;AACA,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,OAAO,OAAA,CAAQ,QAAQ,KAAA,IAAS,EAAA;AAAA,IAClC;AACA,IAAA,IAAI,GAAA,CAAI,UAAA,CAAW,UAAU,CAAA,EAAG;AAC9B,MAAA,MAAM,UAAA,GAAa,GAAA,CAAI,KAAA,CAAM,UAAA,CAAW,MAAM,CAAA;AAC9C,MAAA,OAAO,OAAA,CAAQ,OAAA,CAAQ,OAAA,GAAU,UAAU,CAAA,IAAK,EAAA;AAAA,IAClD;AACA,IAAA,OAAO,EAAA;AAAA,EACT;AAGA,EAAA,IAAI,SAAA,CAAU,UAAA,CAAW,QAAQ,CAAA,EAAG;AAClC,IAAA,MAAM,IAAA,GAAO,SAAA,CAAU,KAAA,CAAM,QAAA,CAAS,MAAM,CAAA;AAC5C,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,0BAA0B,CAAA;AACnD,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,MAAM,MAAA,GAAS,MAAM,CAAC,CAAA;AACtB,MAAA,MAAM,SAAA,GAAY,MAAM,CAAC,CAAA;AACzB,MAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,MAAM,CAAA,EAAG,OAAA;AACvC,MAAA,IAAI,YAAY,MAAA,EAAW;AAAC,QAAA,OAAO,EAAA;AAAA,MAAE;AAErC,MAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,KAAA,CAAM,GAAG,CAAA;AACjC,MAAA,IAAI,KAAA,GAAiB,OAAA;AACrB,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,IAAI,UAAU,MAAA,IAAa,KAAA,KAAU,IAAA,IAAQ,OAAO,UAAU,QAAA,EAAU;AAAC,UAAA,OAAO,EAAA;AAAA,QAAE;AAClF,QAAA,KAAA,GAAS,MAAkC,IAAI,CAAA;AAAA,MACjD;AACA,MAAA,OAAO,KAAA,KAAU,SAAY,KAAA,GAAQ,EAAA;AAAA,IACvC;AACA,IAAA,OAAO,EAAA;AAAA,EACT;AAGA,EAAA,IAAI,SAAA,CAAU,UAAA,CAAW,SAAS,CAAA,IAAK,QAAQ,MAAA,EAAQ;AACrD,IAAA,MAAM,GAAA,GAAM,SAAA,CAAU,KAAA,CAAM,SAAA,CAAU,MAAM,CAAA;AAC5C,IAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,GAAG,CAAA,IAAK,EAAA;AAAA,EAChC;AAGA,EAAA,IAAI,SAAA,CAAU,UAAA,CAAW,SAAS,CAAA,IAAK,QAAQ,MAAA,EAAQ;AACrD,IAAA,MAAM,GAAA,GAAM,SAAA,CAAU,KAAA,CAAM,SAAA,CAAU,MAAM,CAAA;AAC5C,IAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,GAAG,CAAA,IAAK,EAAA;AAAA,EAChC;AAGA,EAAA,MAAM,GAAA,GAAM,OAAO,SAAS,CAAA;AAC5B,EAAA,IAAI,CAAC,KAAA,CAAM,GAAG,CAAA,IAAK,QAAA,CAAS,GAAG,CAAA,EAAG;AAChC,IAAA,OAAO,GAAA;AAAA,EACT;AAGA,EAAA,IAAI,cAAc,MAAA,EAAQ;AAAC,IAAA,OAAO,IAAA;AAAA,EAAI;AACtC,EAAA,IAAI,cAAc,OAAA,EAAS;AAAC,IAAA,OAAO,KAAA;AAAA,EAAK;AAGxC,EAAA,OAAO,SAAA;AACT;AAKA,SAAS,eAAe,KAAA,EAAwB;AAC9C,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AACzC,IAAA,OAAO,EAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAO,UAAU,SAAA,EAAW;AAC9B,IAAA,OAAO,QAAQ,MAAA,GAAS,OAAA;AAAA,EAC1B;AACA,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;AAMO,SAAS,iBAAA,CACd,KACA,OAAA,EACQ;AACR,EAAA,MAAM,WAAA,GAAc,mBAAmB,GAAG,CAAA;AAC1C,EAAA,IAAI,MAAA,GAAS,GAAA;AAEb,EAAA,KAAA,MAAW,QAAQ,WAAA,EAAa;AAC9B,IAAA,MAAM,KAAA,GAAQ,wBAAA,CAAyB,IAAA,EAAM,OAAO,CAAA;AACpD,IAAA,MAAM,WAAA,GAAc,eAAe,KAAK,CAAA;AACxC,IAAA,MAAM,UAAU,IAAI,MAAA;AAAA,MAClB,CAAA,aAAA,EAAgB,WAAA,CAAY,IAAI,CAAC,CAAA,UAAA,CAAA;AAAA,MACjC;AAAA,KACF;AACA,IAAA,MAAA,GAAS,MAAA,CAAO,OAAA,CAAQ,OAAA,EAAS,WAAW,CAAA;AAAA,EAC9C;AAEA,EAAA,OAAO,MAAA;AACT;AAKA,SAAS,YAAY,GAAA,EAAqB;AACxC,EAAA,OAAO,GAAA,CAAI,OAAA,CAAQ,qBAAA,EAAuB,MAAM,CAAA;AAClD;AAOA,SAAS,wBAAA,CAAyB,MAAc,OAAA,EAAqC;AAEnF,EAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,IAAA,EAAM,IAAI,CAAA;AACxC,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,OAAO,aAAa,KAAA,CAAM,CAAC,CAAA,CAAG,IAAA,IAAQ,OAAO,CAAA;AAAA,EAC/C;AAGA,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,IAAA,MAAM,QAAQ,YAAA,CAAa,KAAA,CAAM,CAAC,CAAA,CAAG,IAAA,IAAQ,OAAO,CAAA;AAEpD,IAAA,IAAI,QAAA,CAAS,KAAK,CAAA,EAAG;AACnB,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,IAAI,CAAA,KAAM,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG;AAC1B,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,EAAA;AACT;AAMA,SAAS,eAAA,CAAgB,MAAc,EAAA,EAAsB;AAC3D,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,IAAI,OAAA,GAAU,EAAA;AACd,EAAA,IAAI,QAAA,GAAW,KAAA;AACf,EAAA,IAAI,QAAA,GAAW,KAAA;AACf,EAAA,IAAI,CAAA,GAAI,CAAA;AAER,EAAA,OAAO,CAAA,GAAI,KAAK,MAAA,EAAQ;AACtB,IAAA,MAAM,EAAA,GAAK,KAAK,CAAC,CAAA;AAEjB,IAAA,IAAI,EAAA,KAAO,GAAA,IAAO,CAAC,QAAA,EAAU;AAC3B,MAAA,QAAA,GAAW,CAAC,QAAA;AACZ,MAAA,OAAA,IAAW,EAAA;AACX,MAAA,CAAA,EAAA;AAAA,IACF,CAAA,MAAA,IAAW,EAAA,KAAO,GAAA,IAAO,CAAC,QAAA,EAAU;AAClC,MAAA,QAAA,GAAW,CAAC,QAAA;AACZ,MAAA,OAAA,IAAW,EAAA;AACX,MAAA,CAAA,EAAA;AAAA,IACF,CAAA,MAAA,IAAW,CAAC,QAAA,IAAY,CAAC,QAAA,IAAY,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,CAAA,GAAI,EAAA,CAAG,MAAM,CAAA,KAAM,EAAA,EAAI;AACxE,MAAA,KAAA,CAAM,KAAK,OAAO,CAAA;AAClB,MAAA,OAAA,GAAU,EAAA;AACV,MAAA,CAAA,IAAK,EAAA,CAAG,MAAA;AAAA,IACV,CAAA,MAAO;AACL,MAAA,OAAA,IAAW,EAAA;AACX,MAAA,CAAA,EAAA;AAAA,IACF;AAAA,EACF;AAEA,EAAA,KAAA,CAAM,KAAK,OAAO,CAAA;AAClB,EAAA,OAAO,KAAA;AACT;AAMA,SAAS,SAAS,KAAA,EAAyB;AACzC,EAAA,IAAI,KAAA,KAAU,MAAM,KAAA,KAAU,IAAA,IAAQ,UAAU,MAAA,IAAa,KAAA,KAAU,KAAA,IAAS,KAAA,KAAU,CAAA,EAAG;AAC3F,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT;AASO,SAAS,iBAAA,CACd,KACA,OAAA,EACS;AACT,EAAA,MAAM,OAAA,GAAU,IAAI,IAAA,EAAK;AAGzB,EAAA,MAAM,eAAA,GAAkB,OAAA,CAAQ,KAAA,CAAM,2BAA2B,CAAA;AACjE,EAAA,IAAI,eAAA,IAAmB,eAAA,CAAgB,CAAC,CAAA,EAAG;AACzC,IAAA,OAAO,yBAAyB,eAAA,CAAgB,CAAC,CAAA,CAAE,IAAA,IAAQ,OAAO,CAAA;AAAA,EACpE;AAGA,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,KAAK,CAAA,EAAG;AAC3B,IAAA,OAAO,iBAAA,CAAkB,SAAS,OAAO,CAAA;AAAA,EAC3C;AAGA,EAAA,OAAO,GAAA;AACT;AASO,SAAS,iBAAA,CACd,KACA,OAAA,EACyB;AACzB,EAAA,MAAM,SAAkC,EAAC;AAEzC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AAC9C,IAAA,MAAA,CAAO,GAAG,CAAA,GAAI,gBAAA,CAAiB,KAAA,EAAO,OAAO,CAAA;AAAA,EAC/C;AAEA,EAAA,OAAO,MAAA;AACT;AAKA,SAAS,gBAAA,CAAiB,OAAgB,OAAA,EAAqC;AAC7E,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,iBAAA,CAAkB,OAAO,OAAO,CAAA;AAAA,EACzC;AAEA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,MAAM,GAAA,CAAI,CAAC,SAAS,gBAAA,CAAiB,IAAA,EAAM,OAAO,CAAC,CAAA;AAAA,EAC5D;AAEA,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,QAAA,EAAU;AAC/C,IAAA,OAAO,iBAAA,CAAkB,OAAkC,OAAO,CAAA;AAAA,EACpE;AAGA,EAAA,OAAO,KAAA;AACT;ACtYO,IAAM,cAAc,WAAA,CAAY;AAAA,EACrC,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,uBAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA,EACA,QAAA,EAAU;AAAA,IACR,IAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAa;AAAA;AAEjB,CAAC;AAKM,IAAM,YAAY,WAAA,CAAY;AAAA,EACnC,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,uBAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA,EACA,QAAA,EAAU;AAAA,IACR,IAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAa;AAAA,GACf;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,qCAAA;AAAA,IACb,OAAA,EAAS;AAAA;AAEb,CAAC;AAKM,IAAM,eAAe,WAAA,CAAY;AAAA,EACtC,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,uBAAA;AAAA,IACb,OAAA,EAAS;AAAA;AAEb,CAAC;AAKM,IAAM,cAAc,WAAA,CAAY;AAAA,EACrC,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,uBAAA;AAAA,IACb,OAAA,EAAS;AAAA;AAEb,CAAC;AAKM,IAAM,YAAY,WAAA,CAAY;AAAA,EACnC,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,uBAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAa;AAAA,GACf;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAa;AAAA;AAEjB,CAAC;AAKM,IAAM,WAAW,WAAA,CAAY;AAAA,EAClC,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,uBAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA,EACA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAa;AAAA,GACf;AAAA,EACA,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAa;AAAA,GACf;AAAA,EACA,QAAA,EAAU;AAAA,IACR,IAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAa;AAAA,GACf;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,yBAAA;AAAA,IACb,OAAA,EAAS;AAAA;AAEb,CAAC;ACzGD,IAAM,mBAAA,GAAsB,cAAA;AASrB,IAAM,kBAAA,GAAqBC,CAAAA,CAC/B,MAAA,EAAO,CACP,KAAA;AAAA,EACC,sRAAA;AAAA,EACA;AACF,CAAA,CACC,SAAS,0BAA0B;AAM/B,IAAM,mBAAA,GAAsBA,EAAE,MAAA,CAAO;AAAA,EAC1C,EAAA,EAAIA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,EAAE,CAAA,CAAE,QAAA,CAAS,4BAA4B,CAAA;AAAA,EACnE,QAAA,EAAU,kBAAA;AAAA,EACV,OAAA,EAASA,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,SAAS,yCAAyC,CAAA;AAAA,EAC7E,KAAA,EAAOA,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,MAAA,EAAO,EAAGA,CAAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,EAAS,CAAE,SAAS,8BAA8B,CAAA;AAAA,EAC3F,UAAUA,CAAAA,CAAE,IAAA,CAAK,mBAAmB,CAAA,CAAE,QAAQ,QAAQ,CAAA;AAAA,EACtD,OAAA,EAASA,EAAE,OAAA,EAAQ,CAAE,QAAQ,IAAI,CAAA,CAAE,SAAS,6BAA6B,CAAA;AAAA,EACzE,UAAUA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,sCAAsC,CAAA;AAAA,EAC/E,QAAA,EAAUA,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,MAAA,EAAO,EAAGA,CAAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,EAAS,CAAE,SAAS,qBAAqB;AACvF,CAAC;AAQM,IAAM,iBAAA,GAAoBA,EAAE,MAAA,CAAO;AAAA,EACxC,IAAA,EAAMA,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,SAAS,yBAAyB,CAAA;AAAA,EAC1D,QAAA,EAAU,kBAAA;AAAA,EACV,SAAA,EAAWA,EAAE,OAAA,EAAQ,CAAE,QAAQ,IAAI,CAAA,CAAE,SAAS,2BAA2B,CAAA;AAAA,EACzE,UAAUA,CAAAA,CAAE,IAAA,CAAK,mBAAmB,CAAA,CAAE,QAAQ,QAAQ,CAAA;AAAA,EACtD,OAAA,EAASA,EAAE,OAAA,EAAQ,CAAE,QAAQ,IAAI,CAAA,CAAE,SAAS,6BAA6B,CAAA;AAAA,EACzE,UAAUA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,sCAAsC,CAAA;AAAA,EAC/E,GAAA,EAAKA,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,MAAA,EAAO,EAAGA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,SAAS,uBAAuB,CAAA;AAAA,EACjF,IAAA,EAAMA,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,MAAA,EAAO,EAAGA,CAAAA,CAAE,GAAA,EAAK,CAAA,CAAE,QAAA,CAAS,6BAA6B,CAAA;AAAA,EAC1E,QAAA,EAAUA,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,MAAA,EAAO,EAAGA,CAAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,EAAS,CAAE,SAAS,qBAAqB;AACvF,CAAC;AAiCM,IAAM,mBAAA,GAAsBA,EAAE,MAAA,CAAO;AAAA,EAC1C,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,EACpB,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,iBAAiB,CAAA;AAAA,EAC5C,aAAaA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,8BAA8B,CAAA;AAAA,EAC1E,SAAA,EAAWA,EAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,wBAAwB,CAAA;AAAA,EAC7E,UAAA,EAAYA,EAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,yBAAyB,CAAA;AAAA,EAC/E,MAAA,EAAQA,EAAE,IAAA,CAAK,CAAC,WAAW,SAAA,EAAW,SAAA,EAAW,QAAQ,CAAC,CAAA;AAAA,EAC1D,KAAA,EAAOA,EACJ,MAAA,CAAO;AAAA,IACN,OAAA,EAASA,EAAE,MAAA,EAAO;AAAA,IAClB,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAAS,GAC5B,EACA,QAAA;AACL,CAAC;ACwGM,IAAM,eAAA,GAAkBA,EAAE,IAAA,CAAK;AAAA,EACpC,SAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAC;AAKM,IAAM,mBAAA,GAAsBA,EAAE,MAAA,CAAO;AAAA,EAC1C,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA,EACb,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,MAAA,EAAQ,eAAA;AAAA,EACR,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,SAAA,EAAWA,CAAAA,CAAE,KAAA,CAAM,CAACA,CAAAA,CAAE,MAAA,EAAO,EAAGA,CAAAA,CAAE,IAAA,EAAM,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EACpD,SAAA,EAAWA,CAAAA,CAAE,KAAA,CAAM,CAACA,CAAAA,CAAE,MAAA,EAAO,EAAGA,CAAAA,CAAE,IAAA,EAAM,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EACpD,UAAA,EAAYA,CAAAA,CAAE,KAAA,CAAM,CAACA,CAAAA,CAAE,MAAA,EAAO,EAAGA,CAAAA,CAAE,IAAA,EAAM,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EACrD,OAAA,EAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC7B,UAAA,EAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChC,MAAA,EAAQA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC7B,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA,CAAE,QAAA,EAAS;AAAA,EAC9C,eAAA,EAAiBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAC9B,CAAC;AAKM,IAAM,qBAAA,GAAwBA,EAAE,MAAA,CAAO;AAAA,EAC5C,IAAA,EAAMA,CAAAA,CAAE,KAAA,CAAM,mBAAmB;AACnC,CAAC;AAKM,IAAM,uBAAA,GAA0BA,EAAE,MAAA,CAAO;AAAA,EAC9C,SAAA,EAAWA,EAAE,OAAA;AACf,CAAC;AAKM,IAAM,cAAA,GAAiBA,EAAE,MAAA,CAAO;AAAA,EACrC,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA,EACb,QAAA,EAAUA,EAAE,MAAA,EAAO;AAAA,EACnB,OAAA,EAASA,EAAE,MAAA,EAAO;AAAA,EAClB,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,OAAA,EAASA,EAAE,OAAA,EAAQ;AAAA,EACnB,OAAA,EAASA,CAAAA,CAAE,KAAA,CAAM,CAACA,CAAAA,CAAE,MAAA,EAAO,EAAGA,CAAAA,CAAE,IAAA,EAAM,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EAClD,OAAA,EAASA,CAAAA,CAAE,KAAA,CAAM,CAACA,CAAAA,CAAE,MAAA,EAAO,EAAGA,CAAAA,CAAE,IAAA,EAAM,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EAClD,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACvB,CAAC;AAKM,IAAM,sBAAA,GAAyBA,EAAE,MAAA,CAAO;AAAA,EAC7C,KAAA,EAAOA,CAAAA,CAAE,KAAA,CAAM,cAAc;AAC/B,CAAC;AAKM,IAAM,kBAAA,GAAqBA,EAAE,MAAA,CAAO;AAAA,EACzC,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA,EACb,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,QAAQA,CAAAA,CAAE,IAAA,CAAK,CAAC,UAAA,EAAY,YAAA,EAAc,QAAQ,CAAC,CAAA;AAAA,EACnD,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,MAAA,EAAQA,EAAE,IAAA,CAAK,CAAC,UAAU,UAAU,CAAC,EAAE,QAAA,EAAS;AAAA,EAChD,MAAMA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,EAAQ,EAAE,QAAA;AAC5B,CAAC;AAKM,IAAM,0BAAA,GAA6BA,EAAE,MAAA,CAAO;AAAA,EACjD,SAAA,EAAWA,CAAAA,CAAE,KAAA,CAAM,kBAAkB;AACvC,CAAC;AAKM,IAAM,wBAAA,GAA2BA,EAAE,MAAA,CAAO;AAAA,EAC/C,KAAA,EAAOA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC5B,MAAA,EAAQA,EAAE,MAAA,CAAO;AAAA,IACf,eAAeA,CAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA,EAAS;AAAA,IAC1C,aAAaA,CAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA,EAAS;AAAA,IACxC,WAAWA,CAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA,EAAS;AAAA,IACtC,SAASA,CAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA;AAAS,GACrC,EAAE,QAAA,EAAS;AAAA,EACZ,SAAA,EAAWA,EAAE,IAAA,CAAK,CAAC,UAAU,UAAA,EAAY,SAAS,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EAC9D,OAAA,EAASA,EAAE,MAAA,CAAO;AAAA,IAChB,MAAMA,CAAAA,CAAE,IAAA,CAAK,CAAC,QAAA,EAAU,KAAA,EAAO,MAAM,CAAC,CAAA;AAAA,IACtC,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAAS,GAC3B,EAAE,QAAA;AACL,CAAC;AAuJM,IAAM,4BAAA,GAA+BA,EAAE,MAAA,CAAO;AAAA,EACnD,SAAA,EAAWA,EAAE,MAAA,CAAO;AAAA,IAClB,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,IAChB,MAAA,EAAQA,EAAE,MAAA,EAAO;AAAA,IACjB,QAAA,EAAUA,EAAE,MAAA;AAAO,GACpB,CAAA;AAAA,EACD,IAAA,EAAMA,EAAE,MAAA,CAAO;AAAA,IACb,OAAA,EAASA,EAAE,MAAA,EAAO;AAAA,IAClB,OAAA,EAASA,EAAE,MAAA,EAAO;AAAA,IAClB,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,IACpB,MAAA,EAAQA,EAAE,MAAA;AAAO,GAClB,CAAA;AAAA,EACD,KAAA,EAAOA,EAAE,MAAA,CAAO;AAAA,IACd,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,IAChB,OAAA,EAASA,EAAE,MAAA,EAAO;AAAA,IAClB,QAAA,EAAUA,EAAE,MAAA;AAAO,GACpB,CAAA;AAAA,EACD,gBAAA,EAAkBA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,CAAO;AAAA,IACjC,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA,IACb,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,IACf,YAAA,EAAcA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IAClC,MAAA,EAAQA,CAAAA,CAAE,OAAA,CAAQ,SAAS,CAAA;AAAA,IAC3B,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA,CAAE,QAAA,EAAS;AAAA,IAC9C,eAAA,EAAiBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IACrC,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,IACpB,UAAA,EAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAAS,GACjC,CAAC,CAAA;AAAA,EACF,cAAA,EAAgBA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,CAAO;AAAA,IAC/B,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA,IACb,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,IACf,YAAA,EAAcA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IAClC,QAAQA,CAAAA,CAAE,IAAA,CAAK,CAAC,WAAA,EAAa,QAAA,EAAU,WAAW,CAAC,CAAA;AAAA,IACnD,UAAA,EAAYA,EAAE,MAAA,EAAO;AAAA,IACrB,UAAA,EAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IAChC,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAAS,GAC5B,CAAC;AACJ,CAAC;AAKM,IAAM,qBAAA,GAAwBA,EAAE,MAAA,CAAO;AAAA,EAC5C,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,IAAA,EAAMA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,CAAO;AAAA,IACrB,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,IACpB,KAAA,EAAOA,EAAE,IAAA,CAAK,CAAC,QAAQ,MAAA,EAAQ,OAAA,EAAS,OAAO,CAAC,CAAA;AAAA,IAChD,OAAA,EAASA,EAAE,MAAA,EAAO;AAAA,IAClB,SAASA,CAAAA,CAAE,MAAA,CAAOA,EAAE,OAAA,EAAS,EAAE,QAAA;AAAS,GACzC,CAAC,CAAA;AAAA,EACF,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,OAAA,EAASA,EAAE,OAAA;AACb,CAAC;AAKM,IAAM,iBAAA,GAAoBA,EAAE,MAAA,CAAO;AAAA,EACxC,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,OAAA,EAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC7B,MAAA,EAAQA,EAAE,IAAA,CAAK,CAAC,WAAW,SAAA,EAAW,WAAA,EAAa,QAAA,EAAU,SAAS,CAAC,CAAA;AAAA,EACvE,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA,CAAE,QAAA,EAAS;AAAA,EAC9C,SAAA,EAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC/B,UAAA,EAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChC,UAAA,EAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChC,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,MAAA,EAAQA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AACtB,CAAC;AAKM,IAAM,sBAAA,GAAyBA,EAAE,MAAA,CAAO;AAAA,EAC7C,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,YAAA,EAAcA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAClC,MAAA,EAAQA,EAAE,IAAA,CAAK,CAAC,WAAW,SAAA,EAAW,WAAA,EAAa,QAAA,EAAU,WAAW,CAAC,CAAA;AAAA,EACzE,KAAA,EAAOA,CAAAA,CAAE,KAAA,CAAM,iBAAiB,CAAA;AAAA,EAChC,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAC1B,CAAC;AAKM,IAAM,qBAAA,GAAwBA,EAAE,MAAA,CAAO;AAAA,EAC5C,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA,EACb,UAAA,EAAYA,EAAE,MAAA,EAAO;AAAA,EACrB,MAAA,EAAQA,EAAE,IAAA,CAAK,CAAC,WAAW,SAAA,EAAW,WAAA,EAAa,QAAA,EAAU,WAAW,CAAC,CAAA;AAAA,EACzE,OAAA,EAASA,EAAE,MAAA,CAAO;AAAA,IAChB,MAAMA,CAAAA,CAAE,IAAA,CAAK,CAAC,QAAA,EAAU,KAAA,EAAO,MAAM,CAAC,CAAA;AAAA,IACtC,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAAS,GAC3B,CAAA;AAAA,EACD,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,EACpB,UAAA,EAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChC,UAAA,EAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChC,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACpB,CAAC;AAKM,IAAM,gCAAA,GAAmCA,EAAE,MAAA,CAAO;AAAA,EACvD,UAAA,EAAYA,EAAE,MAAA,EAAO;AAAA,EACrB,IAAA,EAAMA,CAAAA,CAAE,KAAA,CAAM,qBAAqB,CAAA;AAAA,EACnC,KAAA,EAAOA,EAAE,MAAA;AACX,CAAC;;;ACniBM,IAAM,kBAAA,GAAqB;AAK3B,IAAM,eAAA,GAAkB;AAAA;AAAA,EAE7B,KAAA,EAAO,QAAA;AAAA;AAAA,EAEP,SAAA,EAAW,YAAA;AAAA;AAAA,EAEX,eAAA,EAAiB,gBAAA;AAAA;AAAA,EAEjB,YAAA,EAAc,oBAAA;AAAA;AAAA,EAEd,aAAA,EAAe,qBAAA;AAAA;AAAA,EAEf,mBAAA,EAAqB,+BAAA;AAAA;AAAA,EAErB,IAAA,EAAM,OAAA;AAAA;AAAA,EAEN,UAAA,EAAY,cAAA;AAAA;AAAA,EAEZ,IAAA,EAAM,OAAA;AAAA;AAAA,EAEN,UAAA,EAAY,cAAA;AAAA;AAAA,EAEZ,QAAA,EAAU,mBAAA;AAAA;AAAA,EAEV,SAAA,EAAW,oBAAA;AAAA;AAAA,EAEX,UAAA,EAAY,qBAAA;AAAA;AAAA,EAEZ,IAAA,EAAM,OAAA;AAAA;AAAA,EAEN,iBAAA,EAAmB,gCAAA;AAAA;AAAA,EAEnB,gBAAA,EAAkB;AACpB","file":"index.js","sourcesContent":["import { z } from 'zod'\nimport {\n RUN_STATES,\n JOB_STATES,\n STEP_STATES,\n type RunState,\n type JobState,\n type StepState,\n} from '@kb-labs/workflow-constants'\n\ntype NonEmptyTuple<T> = [T, ...T[]]\n\nconst RUN_STATE_VALUES = RUN_STATES as unknown as NonEmptyTuple<RunState>\nconst JOB_STATE_VALUES = JOB_STATES as unknown as NonEmptyTuple<JobState>\nconst STEP_STATE_VALUES = STEP_STATES as unknown as NonEmptyTuple<StepState>\n\nexport const RunStateSchema = z.enum(RUN_STATE_VALUES)\nexport const JobStateSchema = z.enum(JOB_STATE_VALUES)\nexport const StepStateSchema = z.enum(STEP_STATE_VALUES)\n\nexport const IdempotencyKeySchema = z.string().min(1).max(256)\nexport const ConcurrencyGroupSchema = z.string().min(1).max(256)\n\n/**\n * Tenant ID schema\n * Optional for backward compatibility with single-tenant deployments\n */\nexport const TenantIdSchema = z\n .string()\n .min(1)\n .max(64)\n .regex(/^[a-zA-Z0-9_-]+$/)\n .describe('Tenant identifier')\n .optional()\n\nexport const RetryModeSchema = z.enum(['exp', 'lin'])\n\nexport const RetryPolicySchema = z.object({\n max: z.number().int().nonnegative(),\n backoff: RetryModeSchema.default('exp'),\n initialIntervalMs: z.number().int().positive().default(1000),\n maxIntervalMs: z.number().int().positive().optional(),\n})\n\nexport const TimeoutSchema = z.number().int().positive().max(1000 * 60 * 60 * 24) // <= 24h\n\nexport const ExecutionTargetSchema = z.object({\n environmentId: z.string().min(1).optional(),\n workspaceId: z.string().min(1).optional(),\n namespace: z.string().min(1).optional(),\n workdir: z.string().min(1).optional(),\n})\n\nexport const IsolationProfileSchema = z.enum(['strict', 'balanced', 'relaxed'])\n\n// ─── Presentation layer schemas ──────────────────────────────────────────────\n// These fields are consumed by any client (Studio, CLI, API) to provide\n// human-readable context about workflow structure and step behavior.\n\n/** Workflow phase definition — semantic grouping of steps */\nexport const PhaseSchema = z.object({\n label: z.string().min(1),\n description: z.string().optional(),\n})\n\n/** Live progress binding — resolves a value from step outputs for display */\nexport const StepProgressSchema = z.object({\n source: z.string().min(1),\n format: z.string().min(1),\n})\n\n/** Step artifact declaration — what a step produces for review/display */\nexport const StepArtifactSchema = z.object({\n type: z.enum(['markdown', 'issues', 'table', 'diff', 'log', 'json', 'link']),\n source: z.string().min(1),\n label: z.string().min(1),\n digest: z.string().optional(),\n showInSummary: z.boolean().optional(),\n})\n\n/** Approval review item — references an artifact from a previous step */\nexport const ApprovalReviewItemSchema = z.object({\n artifact: z.string().min(1),\n editable: z.boolean().optional(),\n decisions: z.boolean().optional(),\n})\n\n// ─── Step spec ───────────────────────────────────────────────────────────────\n\nexport const StepSpecSchema = z\n .object({\n name: z.string().min(1),\n uses: z\n .union([\n z.literal('builtin:shell'),\n z.literal('builtin:approval'),\n z.literal('builtin:gate'),\n z.string().regex(/^(plugin:|workflow:)?[a-zA-Z0-9@/_:+#.-]+$/),\n ])\n .optional(),\n /** Shell command shorthand — equivalent to uses: builtin:shell with: { command: ... } */\n run: z.string().optional(),\n id: z.string().min(1).max(64).regex(/^[a-zA-Z0-9_-]+$/).optional(),\n if: z.string().optional(),\n with: z.record(z.string(), z.unknown()).optional(),\n env: z.record(z.string(), z.string()).optional(),\n secrets: z.array(z.string().min(1)).optional(),\n timeoutMs: TimeoutSchema.optional(),\n continueOnError: z.boolean().optional(),\n // Presentation layer\n summary: z.string().optional(),\n phase: z.string().optional(),\n progress: StepProgressSchema.optional(),\n artifacts: z.record(z.string().min(1), StepArtifactSchema).optional(),\n })\n .transform((step) => {\n // Normalize `run: cmd` → `uses: builtin:shell, with: { command: cmd }`\n if (step.run && !step.uses) {\n const { run, with: withField, ...rest } = step\n return {\n ...rest,\n uses: 'builtin:shell' as const,\n with: { ...withField, command: run },\n }\n }\n return step\n })\n\nexport const JobConcurrencySchema = z.object({\n group: ConcurrencyGroupSchema,\n cancelInProgress: z.boolean().optional(),\n})\n\nexport const ArtifactMergeStrategySchema = z.enum(['append', 'overwrite', 'json-merge'])\n\nexport const ArtifactMergeSourceSchema = z.object({\n runId: z.string().min(1),\n jobId: z.string().min(1).optional(),\n})\n\nexport const ArtifactMergeConfigSchema = z.object({\n strategy: ArtifactMergeStrategySchema,\n from: z.array(ArtifactMergeSourceSchema).min(1),\n})\n\nexport const JobArtifactsSchema = z\n .object({\n produce: z.array(z.string().min(1)).optional(),\n consume: z.array(z.string().min(1)).optional(),\n merge: ArtifactMergeConfigSchema.optional(),\n })\n .optional()\n\nexport const JobHooksSchema = z\n .object({\n pre: z.array(StepSpecSchema).optional(),\n post: z.array(StepSpecSchema).optional(),\n onFailure: z.array(StepSpecSchema).optional(),\n onSuccess: z.array(StepSpecSchema).optional(),\n })\n .optional()\n\nexport const JobSpecSchema = z.object({\n runsOn: z.enum(['local', 'sandbox']),\n target: ExecutionTargetSchema.optional(),\n isolation: IsolationProfileSchema.optional(),\n concurrency: JobConcurrencySchema.optional(),\n steps: z.array(StepSpecSchema).min(1),\n artifacts: JobArtifactsSchema,\n hooks: JobHooksSchema,\n if: z.string().optional(),\n timeoutMs: TimeoutSchema.optional(),\n retries: RetryPolicySchema.optional(),\n env: z.record(z.string(), z.string()).optional(),\n secrets: z.array(z.string().min(1)).optional(),\n needs: z.array(z.string().min(1)).optional(),\n priority: z.enum(['high', 'normal', 'low']).optional(),\n})\n\nexport const WorkflowTriggerSchema = z\n .object({\n manual: z.boolean().optional(),\n push: z.boolean().optional(),\n webhook: z\n .union([\n z.boolean(),\n z.object({\n secret: z.string().min(1).optional(),\n path: z.string().min(1).optional(),\n headers: z.record(z.string(), z.string()).optional(),\n }),\n ])\n .optional(),\n schedule: z\n .object({\n cron: z.string().min(1),\n timezone: z.string().min(1).optional(),\n })\n .optional(),\n })\n .refine(\n (value) =>\n value.manual || value.push || !!value.webhook || !!value.schedule,\n {\n message: 'At least one trigger must be defined',\n path: ['manual'],\n },\n )\n\nexport const WorkflowInputFieldSchema = z.object({\n type: z.enum(['string', 'number', 'boolean']),\n description: z.string().optional(),\n required: z.boolean().optional(),\n default: z.unknown().optional(),\n})\n\nexport type WorkflowInputField = z.infer<typeof WorkflowInputFieldSchema>\n\nexport const WorkflowSpecSchema = z\n .object({\n name: z.string().min(1),\n version: z.string().min(1),\n description: z.string().optional(),\n target: ExecutionTargetSchema.optional(),\n isolation: IsolationProfileSchema.optional(),\n on: WorkflowTriggerSchema,\n inputs: z.record(z.string(), WorkflowInputFieldSchema).optional(),\n env: z.record(z.string(), z.string()).optional(),\n secrets: z.array(z.string().min(1)).optional(),\n jobs: z.record(z.string().min(1), JobSpecSchema),\n // Presentation layer\n phases: z.record(z.string().min(1), PhaseSchema).optional(),\n })\n .refine(\n (value) =>\n Object.keys(value.jobs).length > 0 &&\n Object.keys(value.jobs).every((key) => key.trim().length > 0),\n {\n message: 'At least one job must be defined with a non-empty id',\n path: ['jobs'],\n },\n )\n\nexport const StepRunErrorSchema = z.object({\n message: z.string(),\n code: z.string().optional(),\n stack: z.string().optional(),\n timestamp: z.string().optional(),\n details: z.record(z.string(), z.unknown()).optional(),\n})\n\nexport const StepRunSchema = z.object({\n id: z.string().min(1),\n runId: z.string().min(1),\n jobId: z.string().min(1),\n name: z.string().min(1),\n index: z.number().int().nonnegative(),\n status: StepStateSchema,\n queuedAt: z.string().datetime(),\n startedAt: z.string().datetime().optional(),\n finishedAt: z.string().datetime().optional(),\n durationMs: z.number().int().nonnegative().optional(),\n attempt: z.number().int().nonnegative().default(0),\n timeoutMs: TimeoutSchema.optional(),\n continueOnError: z.boolean().optional(),\n error: StepRunErrorSchema.optional(),\n outputs: z.record(z.string(), z.unknown()).optional(),\n skipReason: z.string().optional(),\n spec: StepSpecSchema,\n})\n\nexport const JobRunSchema = z.object({\n id: z.string().min(1),\n runId: z.string().min(1),\n tenantId: TenantIdSchema, // ← Inherited from run for isolation\n jobName: z.string().min(1),\n status: JobStateSchema,\n runsOn: z.enum(['local', 'sandbox']),\n queuedAt: z.string().datetime(),\n startedAt: z.string().datetime().optional(),\n finishedAt: z.string().datetime().optional(),\n durationMs: z.number().int().nonnegative().optional(),\n attempt: z.number().int().nonnegative().default(0),\n concurrency: JobConcurrencySchema.optional(),\n retries: RetryPolicySchema.optional(),\n timeoutMs: TimeoutSchema.optional(),\n target: ExecutionTargetSchema.optional(),\n isolation: IsolationProfileSchema.optional(),\n artifacts: JobArtifactsSchema,\n error: StepRunErrorSchema.optional(),\n env: z.record(z.string(), z.string()).optional(),\n secrets: z.array(z.string().min(1)).optional(),\n needs: z.array(z.string().min(1)).optional(),\n pendingDependencies: z.array(z.string().min(1)).optional(),\n blocked: z.boolean().optional(),\n priority: z.enum(['high', 'normal', 'low']).optional(),\n steps: z.array(StepRunSchema),\n})\n\nexport const RunTriggerSchema = z.object({\n type: z.enum(['manual', 'webhook', 'push', 'schedule', 'workflow']),\n actor: z.string().optional(),\n payload: z.record(z.string(), z.unknown()).optional(),\n parentRunId: z.string().optional(),\n parentJobId: z.string().optional(),\n parentStepId: z.string().optional(),\n invokedByWorkflowId: z.string().optional(),\n})\n\nexport const RunMetadataSchema = z.object({\n idempotencyKey: IdempotencyKeySchema.optional(),\n concurrencyGroup: ConcurrencyGroupSchema.optional(),\n target: ExecutionTargetSchema.optional(),\n isolation: IsolationProfileSchema.optional(),\n workflowId: z.string().optional(),\n workflowDepth: z.number().int().nonnegative().optional(),\n parentRunId: z.string().optional(),\n parentJobId: z.string().optional(),\n parentStepId: z.string().optional(),\n})\n\nexport const ResultErrorSchema = z.object({\n message: z.string().min(1),\n code: z.string().optional(),\n details: z.record(z.string(), z.unknown()).optional(),\n})\n\nexport const ResultMetricsSchema = z.object({\n timeMs: z.number().int().nonnegative().optional(),\n cpuMs: z.number().int().nonnegative().optional(),\n memMb: z.number().nonnegative().optional(),\n jobsTotal: z.number().int().nonnegative().optional(),\n jobsSucceeded: z.number().int().nonnegative().optional(),\n jobsFailed: z.number().int().nonnegative().optional(),\n jobsCancelled: z.number().int().nonnegative().optional(),\n stepsTotal: z.number().int().nonnegative().optional(),\n stepsFailed: z.number().int().nonnegative().optional(),\n stepsCancelled: z.number().int().nonnegative().optional(),\n})\n\nexport const ExecutionResultSchema = z.object({\n status: RunStateSchema,\n summary: z.string().optional(),\n startedAt: z.string().datetime().optional(),\n completedAt: z.string().datetime().optional(),\n metrics: ResultMetricsSchema.optional(),\n details: z.record(z.string(), z.unknown()).optional(),\n outputs: z.record(z.string(), z.unknown()).optional(),\n error: ResultErrorSchema.optional(),\n})\n\nexport const RunSchema = z.object({\n id: z.string().min(1),\n tenantId: TenantIdSchema, // ← Multi-tenancy support\n name: z.string().min(1),\n version: z.string().min(1),\n status: RunStateSchema,\n createdAt: z.string().datetime(),\n queuedAt: z.string().datetime(),\n startedAt: z.string().datetime().optional(),\n finishedAt: z.string().datetime().optional(),\n durationMs: z.number().int().nonnegative().optional(),\n trigger: RunTriggerSchema,\n env: z.record(z.string(), z.string()).optional(),\n inputs: z.record(z.string(), z.unknown()).optional(),\n secrets: z.array(z.string().min(1)).optional(),\n jobs: z.array(JobRunSchema),\n artifacts: z.array(z.string()).optional(),\n metadata: RunMetadataSchema.optional(),\n result: ExecutionResultSchema.optional(),\n})\n\n\n","import type { ExpressionContext, WorkflowInvocationSpec } from './types'\n\n/**\n * Parse workflow: uses string into WorkflowInvocationSpec\n * @param uses - The uses string (e.g., \"workflow:workspace:ai-ci\")\n * @returns WorkflowInvocationSpec or null if not a workflow uses\n */\nexport function parseWorkflowUses(uses: string): WorkflowInvocationSpec | null {\n if (!uses.startsWith('workflow:')) {\n return null\n }\n\n const workflowId = uses.slice('workflow:'.length)\n if (!workflowId) {\n return null\n }\n\n return {\n type: 'workflow',\n workflowId,\n mode: 'wait', // default\n inheritEnv: true, // default\n }\n}\n\n/**\n * Extract all ${{ expression }} patterns from a string\n */\nexport function extractExpressions(str: string): string[] {\n const pattern = /\\$\\{\\{\\s*([^}]+)\\s*\\}\\}/g\n const matches: string[] = []\n let match: RegExpExecArray | null\n\n while ((match = pattern.exec(str)) !== null) {\n matches.push(match[1]!.trim())\n }\n\n return matches\n}\n\n/**\n * Evaluate a boolean expression\n * Supported operators: ==, !=, &&, ||, !\n * Supported functions: contains(), startsWith(), endsWith()\n * Supported contexts: env.*, trigger.*, steps.*.outputs.*\n */\nexport function evaluateExpression(\n expr: string,\n context: ExpressionContext,\n): boolean {\n const trimmed = expr.trim()\n\n // Handle logical operators\n if (trimmed.includes('&&')) {\n const parts = trimmed.split('&&').map((p) => p.trim())\n return parts.every((part) => evaluateExpression(part, context))\n }\n\n if (trimmed.includes('||')) {\n const parts = trimmed.split('||').map((p) => p.trim())\n return parts.some((part) => evaluateExpression(part, context))\n }\n\n // Handle negation\n if (trimmed.startsWith('!')) {\n return !evaluateExpression(trimmed.slice(1).trim(), context)\n }\n\n // Handle parentheses (simple case)\n if (trimmed.startsWith('(') && trimmed.endsWith(')')) {\n return evaluateExpression(trimmed.slice(1, -1).trim(), context)\n }\n\n // Handle boolean literals (before equality checks)\n if (trimmed === 'true') {return true}\n if (trimmed === 'false') {return false}\n\n // Handle equality/inequality\n if (trimmed.includes('==')) {\n const parts = trimmed.split('==').map((s) => s.trim())\n if (parts.length === 2 && parts[0] && parts[1]) {\n const left = resolveValue(parts[0], context)\n const right = resolveValue(parts[1], context)\n // For numeric comparison, try numeric first\n if (typeof left === 'number' && typeof right === 'number') {\n return left === right\n }\n // Otherwise coerce to string\n return coerceToString(left) === coerceToString(right)\n }\n }\n\n if (trimmed.includes('!=')) {\n const parts = trimmed.split('!=').map((s) => s.trim())\n if (parts.length === 2 && parts[0] && parts[1]) {\n const left = resolveValue(parts[0], context)\n const right = resolveValue(parts[1], context)\n // For numeric comparison, try numeric first\n if (typeof left === 'number' && typeof right === 'number') {\n return left !== right\n }\n // Otherwise coerce to string\n return coerceToString(left) !== coerceToString(right)\n }\n }\n\n // Handle functions\n if (trimmed.includes('contains(')) {\n const match = trimmed.match(/contains\\(([^,]+),\\s*([^)]+)\\)/)\n if (match && match[1] && match[2]) {\n const value = resolveValue(match[1].trim(), context)\n const search = match[2].trim().replace(/^[\"']|[\"']$/g, '')\n return String(value).includes(search)\n }\n }\n\n if (trimmed.includes('startsWith(')) {\n const match = trimmed.match(/startsWith\\(([^,]+),\\s*([^)]+)\\)/)\n if (match && match[1] && match[2]) {\n const value = resolveValue(match[1].trim(), context)\n const prefix = match[2].trim().replace(/^[\"']|[\"']$/g, '')\n return String(value).startsWith(prefix)\n }\n }\n\n if (trimmed.includes('endsWith(')) {\n const match = trimmed.match(/endsWith\\(([^,]+),\\s*([^)]+)\\)/)\n if (match && match[1] && match[2]) {\n const value = resolveValue(match[1].trim(), context)\n const suffix = match[2].trim().replace(/^[\"']|[\"']$/g, '')\n return String(value).endsWith(suffix)\n }\n }\n\n // Fallback: treat as truthy/falsy\n const value = resolveValue(trimmed, context)\n return Boolean(value)\n}\n\n/**\n * Resolve a value from context (e.g., \"env.VAR\", \"steps.build.outputs.version\")\n */\nexport function resolveValue(path: string, context: ExpressionContext): unknown {\n // Remove quotes\n const cleanPath = path.replace(/^[\"']|[\"']$/g, '')\n\n // env.VAR\n if (cleanPath.startsWith('env.')) {\n const key = cleanPath.slice('env.'.length)\n return context.env[key] ?? ''\n }\n\n // trigger.type, trigger.actor, trigger.payload.*\n if (cleanPath.startsWith('trigger.')) {\n const key = cleanPath.slice('trigger.'.length)\n if (key === 'type') {\n return context.trigger.type\n }\n if (key === 'actor') {\n return context.trigger.actor ?? ''\n }\n if (key.startsWith('payload.')) {\n const payloadKey = key.slice('payload.'.length)\n return context.trigger.payload?.[payloadKey] ?? ''\n }\n return ''\n }\n\n // steps.<id>.outputs.<key>[.<nested>...]\n if (cleanPath.startsWith('steps.')) {\n const rest = cleanPath.slice('steps.'.length)\n const match = rest.match(/^([^.]+)\\.outputs\\.(.+)$/)\n if (match) {\n const stepId = match[1]!\n const outputKey = match[2]!\n const outputs = context.steps[stepId]?.outputs\n if (outputs === undefined) {return ''}\n // Navigate nested path (e.g. \"result.passed\" → outputs.result.passed)\n const parts = outputKey.split('.')\n let value: unknown = outputs\n for (const part of parts) {\n if (value === undefined || value === null || typeof value !== 'object') {return ''}\n value = (value as Record<string, unknown>)[part]\n }\n return value !== undefined ? value : ''\n }\n return ''\n }\n\n // inputs.*\n if (cleanPath.startsWith('inputs.') && context.inputs) {\n const key = cleanPath.slice('inputs.'.length)\n return context.inputs[key] ?? ''\n }\n\n // matrix.* (for future)\n if (cleanPath.startsWith('matrix.') && context.matrix) {\n const key = cleanPath.slice('matrix.'.length)\n return context.matrix[key] ?? ''\n }\n\n // Try to parse as number\n const num = Number(cleanPath)\n if (!isNaN(num) && isFinite(num)) {\n return num\n }\n\n // Try to parse as boolean\n if (cleanPath === 'true') {return true}\n if (cleanPath === 'false') {return false}\n\n // Literal value\n return cleanPath\n}\n\n/**\n * Coerce value to string for comparison\n */\nfunction coerceToString(value: unknown): string {\n if (value === null || value === undefined) {\n return ''\n }\n if (typeof value === 'boolean') {\n return value ? 'true' : 'false'\n }\n return String(value)\n}\n\n/**\n * Interpolate string with context values\n * Example: \"Version: ${{ steps.build.outputs.version }}\"\n */\nexport function interpolateString(\n str: string,\n context: ExpressionContext,\n): string {\n const expressions = extractExpressions(str)\n let result = str\n\n for (const expr of expressions) {\n const value = resolveValueWithFallback(expr, context)\n const replacement = coerceToString(value)\n const pattern = new RegExp(\n `\\\\$\\\\{\\\\{\\\\s*${escapeRegex(expr)}\\\\s*\\\\}\\\\}`,\n 'g',\n )\n result = result.replace(pattern, replacement)\n }\n\n return result\n}\n\n/**\n * Escape special regex characters\n */\nfunction escapeRegex(str: string): string {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n\n/**\n * Resolve a value expression with || (logical OR / default value) support.\n * Returns the first truthy value, or the last value if all are falsy.\n * Example: \"trigger.payload.mode || 'heuristic'\" → value of mode, or 'heuristic' if empty/undefined\n */\nfunction resolveValueWithFallback(expr: string, context: ExpressionContext): unknown {\n // Split on || (but not inside quotes)\n const parts = splitOnOperator(expr, '||')\n if (parts.length === 1) {\n return resolveValue(parts[0]!.trim(), context)\n }\n\n // Return first truthy value, or last value\n for (let i = 0; i < parts.length; i++) {\n const value = resolveValue(parts[i]!.trim(), context)\n // Truthy check: non-empty string, non-zero number, non-false boolean, non-null object\n if (isTruthy(value)) {\n return value\n }\n // Last part — return even if falsy\n if (i === parts.length - 1) {\n return value\n }\n }\n\n return ''\n}\n\n/**\n * Split expression string on an operator, respecting quoted strings.\n * Example: \"a || 'hello || world'\" → [\"a \", \" 'hello || world'\"]\n */\nfunction splitOnOperator(expr: string, op: string): string[] {\n const parts: string[] = []\n let current = ''\n let inSingle = false\n let inDouble = false\n let i = 0\n\n while (i < expr.length) {\n const ch = expr[i]!\n\n if (ch === \"'\" && !inDouble) {\n inSingle = !inSingle\n current += ch\n i++\n } else if (ch === '\"' && !inSingle) {\n inDouble = !inDouble\n current += ch\n i++\n } else if (!inSingle && !inDouble && expr.slice(i, i + op.length) === op) {\n parts.push(current)\n current = ''\n i += op.length\n } else {\n current += ch\n i++\n }\n }\n\n parts.push(current)\n return parts\n}\n\n/**\n * Check if a resolved value is \"truthy\" for || operator purposes.\n * Empty string, null, undefined, false, 0 are falsy.\n */\nfunction isTruthy(value: unknown): boolean {\n if (value === '' || value === null || value === undefined || value === false || value === 0) {\n return false\n }\n return true\n}\n\n/**\n * Resolve expression preserving types.\n * If the string is exactly one `${{ expr }}` (no surrounding text),\n * returns the raw value (object, number, boolean, etc.).\n * Supports || operator for default values: `${{ a || 'default' }}`\n * Otherwise delegates to interpolateString (returns string).\n */\nexport function resolveExpression(\n str: string,\n context: ExpressionContext,\n): unknown {\n const trimmed = str.trim()\n\n // Check if the entire string is a single expression\n const singleExprMatch = trimmed.match(/^\\$\\{\\{\\s*([^}]+)\\s*\\}\\}$/)\n if (singleExprMatch && singleExprMatch[1]) {\n return resolveValueWithFallback(singleExprMatch[1].trim(), context)\n }\n\n // Multiple expressions or text around them — interpolate as string\n if (trimmed.includes('${{')) {\n return interpolateString(trimmed, context)\n }\n\n // No expressions — return as-is\n return str\n}\n\n/**\n * Recursively interpolate all string values in an object/array.\n * - Strings: resolved via resolveExpression (type-preserving)\n * - Arrays: each element interpolated recursively\n * - Objects: each value interpolated recursively\n * - Primitives (number, boolean, null): returned as-is\n */\nexport function interpolateObject(\n obj: Record<string, unknown>,\n context: ExpressionContext,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n\n for (const [key, value] of Object.entries(obj)) {\n result[key] = interpolateValue(value, context)\n }\n\n return result\n}\n\n/**\n * Interpolate a single value recursively\n */\nfunction interpolateValue(value: unknown, context: ExpressionContext): unknown {\n if (typeof value === 'string') {\n return resolveExpression(value, context)\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => interpolateValue(item, context))\n }\n\n if (value !== null && typeof value === 'object') {\n return interpolateObject(value as Record<string, unknown>, context)\n }\n\n // number, boolean, null, undefined — pass through\n return value\n}\n\n","/**\n * Flag definitions for workflow CLI commands\n * Uses defineFlags from @kb-labs/sdk for type safety\n */\n\nimport { defineFlags } from '@kb-labs/sdk';\n\n/**\n * Flags for workflow:status command\n */\nexport const statusFlags = defineFlags({\n json: {\n type: 'boolean',\n description: 'Output result as JSON',\n default: false,\n },\n 'job-id': {\n type: 'string',\n description: 'Job ID to get status for',\n },\n});\n\n/**\n * Flags for workflow:logs command\n */\nexport const logsFlags = defineFlags({\n json: {\n type: 'boolean',\n description: 'Output result as JSON',\n default: false,\n },\n 'job-id': {\n type: 'string',\n description: 'Job ID to get logs for (required)',\n },\n follow: {\n type: 'boolean',\n description: 'Follow log output (stream new logs)',\n default: false,\n },\n});\n\n/**\n * Flags for workflow:metrics command\n */\nexport const metricsFlags = defineFlags({\n json: {\n type: 'boolean',\n description: 'Output result as JSON',\n default: false,\n },\n});\n\n/**\n * Flags for workflow:health command\n */\nexport const healthFlags = defineFlags({\n json: {\n type: 'boolean',\n description: 'Output result as JSON',\n default: false,\n },\n});\n\n/**\n * Flags for workflow:list command\n */\nexport const listFlags = defineFlags({\n json: {\n type: 'boolean',\n description: 'Output result as JSON',\n default: false,\n },\n status: {\n type: 'string',\n description: 'Filter by status (running, completed, failed)',\n },\n type: {\n type: 'string',\n description: 'Filter by type: \"runs\" (active executions), \"cron\" (scheduled jobs)',\n },\n});\n\n/**\n * Flags for workflow:run command\n */\nexport const runFlags = defineFlags({\n json: {\n type: 'boolean',\n description: 'Output result as JSON',\n default: false,\n },\n handler: {\n type: 'string',\n description: 'Plugin handler to run (e.g., \"mind:rag-query\")',\n },\n input: {\n type: 'string',\n description: 'JSON string of input parameters',\n },\n priority: {\n type: 'number',\n description: 'Job priority (1-10, default: 5)',\n },\n wait: {\n type: 'boolean',\n description: 'Wait for job completion',\n default: false,\n },\n});\n\n// Type exports for use in command handlers\nexport type StatusFlags = typeof statusFlags.infer;\nexport type LogsFlags = typeof logsFlags.infer;\nexport type MetricsFlags = typeof metricsFlags.infer;\nexport type HealthFlags = typeof healthFlags.infer;\nexport type ListFlags = typeof listFlags.infer;\nexport type RunFlags = typeof runFlags.infer;\n","import { z } from 'zod'\nimport { JOB_PRIORITIES } from '@kb-labs/workflow-constants'\n\ntype NonEmptyTuple<T> = [T, ...T[]]\nconst JOB_PRIORITY_VALUES = JOB_PRIORITIES as unknown as NonEmptyTuple<'high' | 'normal' | 'low'>\n\n/**\n * Cron schedule expression (standard cron format)\n * Examples:\n * - \"0 * * * *\" - every hour\n * - \"0 0 * * *\" - daily at midnight\n * - \"0/15 * * * *\" - every 15 minutes\n */\nexport const CronScheduleSchema = z\n .string()\n .regex(\n /^(\\*|([0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9])|\\*\\/([0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9])) (\\*|([0-9]|1[0-9]|2[0-3])|\\*\\/([0-9]|1[0-9]|2[0-3])) (\\*|([1-9]|1[0-9]|2[0-9]|3[0-1])|\\*\\/([1-9]|1[0-9]|2[0-9]|3[0-1])) (\\*|([1-9]|1[0-2])|\\*\\/([1-9]|1[0-2])) (\\*|[0-6]|\\*\\/[0-6])$/,\n 'Invalid cron expression'\n )\n .describe('Cron schedule expression')\n\n/**\n * Plugin manifest cron job definition\n * Used in plugin manifest.ts to declare scheduled jobs\n */\nexport const PluginCronJobSchema = z.object({\n id: z.string().min(1).max(64).describe('Unique cron job identifier'),\n schedule: CronScheduleSchema,\n handler: z.string().min(1).describe('Plugin handler (e.g., \"mind:rag-index\")'),\n input: z.record(z.string(), z.unknown()).optional().describe('Input parameters for handler'),\n priority: z.enum(JOB_PRIORITY_VALUES).default('normal'),\n enabled: z.boolean().default(true).describe('Whether cron job is enabled'),\n timezone: z.string().optional().describe('Timezone for schedule (default: UTC)'),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Additional metadata'),\n})\n\nexport type PluginCronJob = z.infer<typeof PluginCronJobSchema>\n\n/**\n * User-defined cron job from .kb/jobs/*.yml\n * Full workflow spec with cron trigger\n */\nexport const UserCronJobSchema = z.object({\n name: z.string().min(1).describe('Human-readable job name'),\n schedule: CronScheduleSchema,\n autoStart: z.boolean().default(true).describe('Auto-start on daemon boot'),\n priority: z.enum(JOB_PRIORITY_VALUES).default('normal'),\n enabled: z.boolean().default(true).describe('Whether cron job is enabled'),\n timezone: z.string().optional().describe('Timezone for schedule (default: UTC)'),\n env: z.record(z.string(), z.string()).optional().describe('Environment variables'),\n jobs: z.record(z.string(), z.any()).describe('Workflow jobs specification'),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Additional metadata'),\n})\n\nexport type UserCronJob = z.infer<typeof UserCronJobSchema>\n\n/**\n * Registered cron job (internal representation)\n * Combines plugin and user cron jobs\n */\nexport interface RegisteredCronJob {\n id: string\n source: 'plugin' | 'user'\n schedule: string\n timezone?: string\n priority: 'high' | 'normal' | 'low'\n enabled: boolean\n\n // For plugin cron jobs\n handler?: string\n input?: Record<string, unknown>\n\n // For user cron jobs\n workflowSpec?: {\n name: string\n jobs: Record<string, any>\n env?: Record<string, string>\n }\n\n metadata?: Record<string, unknown>\n}\n\n/**\n * Cron job execution history entry\n */\nexport const CronExecutionSchema = z.object({\n cronJobId: z.string(),\n runId: z.string().describe('Workflow run ID'),\n scheduledAt: z.string().datetime().describe('When execution was scheduled'),\n startedAt: z.string().datetime().optional().describe('When execution started'),\n finishedAt: z.string().datetime().optional().describe('When execution finished'),\n status: z.enum(['pending', 'running', 'success', 'failed']),\n error: z\n .object({\n message: z.string(),\n stack: z.string().optional(),\n })\n .optional(),\n})\n\nexport type CronExecution = z.infer<typeof CronExecutionSchema>\n","/**\n * @module @kb-labs/workflow-contracts/rest-api\n * REST API types for Workflow Service HTTP endpoints\n */\n\nimport { z } from 'zod'\nimport type { ExecutionTarget, IsolationProfile } from './types'\n\n/**\n * Job submission request (POST /api/jobs)\n */\nexport interface JobSubmissionRequest {\n /** Job type (pluginId:jobId format) */\n type: string;\n /** Job payload (passed to handler) */\n payload?: unknown;\n /** Priority (1-10, default 5) */\n priority?: number;\n /** Max retry attempts (default 3) */\n maxRetries?: number;\n /** Timeout in milliseconds */\n timeout?: number;\n /** Scheduled run time (ISO string or Date) */\n runAt?: string | Date;\n /** Idempotency key (prevents duplicate submissions) */\n idempotencyKey?: string;\n}\n\n/**\n * Job submission response (POST /api/jobs)\n */\nexport interface JobSubmissionResponse {\n /** Generated job ID */\n jobId: string;\n}\n\n/**\n * Job status info (GET /api/jobs/:id)\n */\nexport interface JobStatusInfo {\n /** Job ID */\n id: string;\n /** Job type */\n type: string;\n /** Current status */\n status: 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';\n /** Tenant ID */\n tenantId?: string;\n /** Priority */\n priority?: number;\n /** Created timestamp */\n createdAt?: Date | string;\n /** Started timestamp */\n startedAt?: Date | string;\n /** Finished timestamp */\n finishedAt?: Date | string;\n /** Retry attempt number */\n attempt?: number;\n /** Max retries */\n maxRetries?: number;\n /** Result (if completed) */\n result?: unknown;\n /** Error (if failed) */\n error?: string;\n /** Progress (0-100) */\n progress?: number;\n /** Progress message */\n progressMessage?: string;\n}\n\n/**\n * Job list filter (GET /api/jobs)\n */\nexport interface JobListFilter {\n /** Filter by job type pattern */\n type?: string;\n /** Filter by status */\n status?: 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';\n /** Pagination limit */\n limit?: number;\n /** Pagination offset */\n offset?: number;\n}\n\n/**\n * Job list response (GET /api/jobs)\n */\nexport interface JobListResponse {\n /** List of jobs */\n jobs: JobStatusInfo[];\n}\n\n/**\n * Job cancel response (POST /api/jobs/:id/cancel)\n */\nexport interface JobCancelResponse {\n /** True if job was cancelled */\n cancelled: boolean;\n}\n\n/**\n * Cron job registration request (POST /api/cron)\n */\nexport interface CronRegistrationRequest {\n /** Cron job ID (unique per plugin) */\n id: string;\n /** Cron schedule expression */\n schedule: string;\n /** Job type to execute (pluginId:jobId) */\n jobType: string;\n /** Job payload */\n payload?: unknown;\n /** Timezone (default: UTC) */\n timezone?: string;\n /** Enabled flag (default: true) */\n enabled?: boolean;\n}\n\n/**\n * Cron job info (GET /api/cron)\n */\nexport interface CronInfo {\n /** Cron job ID */\n id: string;\n /** Cron schedule expression */\n schedule: string;\n /** Job type */\n jobType: string;\n /** Timezone */\n timezone?: string;\n /** Enabled flag */\n enabled: boolean;\n /** Last run time */\n lastRun?: Date | string;\n /** Next run time */\n nextRun?: Date | string;\n /** Plugin ID (if plugin-provided) */\n pluginId?: string;\n}\n\n/**\n * Cron list response (GET /api/cron)\n */\nexport interface CronListResponse {\n /** List of cron jobs */\n crons: CronInfo[];\n}\n\n/**\n * Workflow definition info (GET /api/v1/workflows)\n */\nexport interface WorkflowInfo {\n /** Workflow ID (e.g., \"release-manager/create-release\") */\n id: string;\n /** Human-readable name */\n name: string;\n /** Description */\n description?: string;\n /** Source type */\n source: 'manifest' | 'standalone' | 'plugin';\n /** Plugin ID (for manifest workflows) */\n pluginId?: string;\n /** Status */\n status?: 'active' | 'inactive';\n /** Tags */\n tags?: string[];\n /** Declared input parameters schema */\n inputs?: Record<string, { type: 'string' | 'number' | 'boolean'; description?: string; required?: boolean; default?: unknown }>;\n}\n\n/**\n * Workflow list response (GET /api/v1/workflows)\n */\nexport interface WorkflowListResponse {\n /** List of workflows */\n workflows: WorkflowInfo[];\n}\n\n/**\n * Workflow run request (POST /api/v1/workflows/:id/run)\n */\nexport interface WorkflowRunRequest {\n /** Workflow input payload */\n input?: unknown;\n /** Execution target override for this run */\n target?: ExecutionTarget;\n /** Isolation profile override for this run */\n isolation?: IsolationProfile;\n /** Trigger metadata */\n trigger?: {\n type: 'manual' | 'api' | 'cron';\n user?: string;\n };\n}\n\n// ============================================================================\n// Zod Schemas\n// ============================================================================\n\n/**\n * Job status enum schema\n */\nexport const JobStatusSchema = z.enum([\n 'pending',\n 'running',\n 'completed',\n 'failed',\n 'cancelled',\n])\n\n/**\n * Job status info schema (GET /api/v1/jobs/:jobId)\n */\nexport const JobStatusInfoSchema = z.object({\n id: z.string(),\n type: z.string(),\n status: JobStatusSchema,\n tenantId: z.string().optional(),\n priority: z.number().optional(),\n createdAt: z.union([z.string(), z.date()]).optional(),\n startedAt: z.union([z.string(), z.date()]).optional(),\n finishedAt: z.union([z.string(), z.date()]).optional(),\n attempt: z.number().optional(),\n maxRetries: z.number().optional(),\n result: z.unknown().optional(),\n error: z.string().optional(),\n progress: z.number().min(0).max(100).optional(),\n progressMessage: z.string().optional(),\n})\n\n/**\n * Job list response schema (GET /api/v1/jobs)\n */\nexport const JobListResponseSchema = z.object({\n jobs: z.array(JobStatusInfoSchema),\n})\n\n/**\n * Job cancel response schema (POST /api/v1/jobs/:jobId/cancel)\n */\nexport const JobCancelResponseSchema = z.object({\n cancelled: z.boolean(),\n})\n\n/**\n * Cron info schema (GET /api/v1/cron)\n */\nexport const CronInfoSchema = z.object({\n id: z.string(),\n schedule: z.string(),\n jobType: z.string(),\n timezone: z.string().optional(),\n enabled: z.boolean(),\n lastRun: z.union([z.string(), z.date()]).optional(),\n nextRun: z.union([z.string(), z.date()]).optional(),\n pluginId: z.string().optional(),\n})\n\n/**\n * Cron list response schema (GET /api/v1/cron)\n */\nexport const CronListResponseSchema = z.object({\n crons: z.array(CronInfoSchema),\n})\n\n/**\n * Workflow info schema (GET /api/v1/workflows)\n */\nexport const WorkflowInfoSchema = z.object({\n id: z.string(),\n name: z.string(),\n description: z.string().optional(),\n source: z.enum(['manifest', 'standalone', 'plugin']),\n pluginId: z.string().optional(),\n status: z.enum(['active', 'inactive']).optional(),\n tags: z.array(z.string()).optional(),\n})\n\n/**\n * Workflow list response schema (GET /api/v1/workflows)\n */\nexport const WorkflowListResponseSchema = z.object({\n workflows: z.array(WorkflowInfoSchema),\n})\n\n/**\n * Workflow run request schema (POST /api/v1/workflows/:id/run)\n */\nexport const WorkflowRunRequestSchema = z.object({\n input: z.unknown().optional(),\n target: z.object({\n environmentId: z.string().min(1).optional(),\n workspaceId: z.string().min(1).optional(),\n namespace: z.string().min(1).optional(),\n workdir: z.string().min(1).optional(),\n }).optional(),\n isolation: z.enum(['strict', 'balanced', 'relaxed']).optional(),\n trigger: z.object({\n type: z.enum(['manual', 'api', 'cron']),\n user: z.string().optional(),\n }).optional(),\n})\n\n/**\n * Dashboard stats response (GET /api/v1/stats)\n */\nexport interface DashboardStatsResponse {\n /** Workflow statistics */\n workflows: {\n total: number;\n active: number;\n inactive: number;\n };\n /** Job statistics */\n jobs: {\n running: number;\n pending: number;\n completed: number;\n failed: number;\n };\n /** Cron statistics */\n crons: {\n total: number;\n enabled: number;\n disabled: number;\n };\n /** Active executions (currently running) */\n activeExecutions: Array<{\n id: string;\n type: string;\n workflowName?: string;\n status: 'running';\n progress?: number;\n progressMessage?: string;\n startedAt: string;\n durationMs?: number;\n }>;\n /** Recent activity (last 10 completed/failed jobs) */\n recentActivity: Array<{\n id: string;\n type: string;\n workflowName?: string;\n status: 'completed' | 'failed' | 'cancelled';\n finishedAt: string;\n durationMs?: number;\n error?: string;\n }>;\n}\n\n/**\n * Job logs response (GET /api/v1/jobs/:jobId/logs)\n */\nexport interface JobLogsResponse {\n /** Job ID */\n jobId: string;\n /** Log entries */\n logs: Array<{\n timestamp: string;\n level: 'info' | 'warn' | 'error' | 'debug';\n message: string;\n context?: Record<string, unknown>;\n }>;\n /** Total log count */\n total: number;\n /** Has more logs available */\n hasMore: boolean;\n}\n\n/**\n * Job execution step info (GET /api/v1/jobs/:jobId/steps)\n */\nexport interface JobStepInfo {\n /** Step name */\n name: string;\n /** Step handler */\n handler?: string;\n /** Step status */\n status: 'pending' | 'running' | 'completed' | 'failed' | 'skipped';\n /** Step progress (0-100) */\n progress?: number;\n /** Step start time */\n startedAt?: string;\n /** Step finish time */\n finishedAt?: string;\n /** Step duration in ms */\n durationMs?: number;\n /** Step error message */\n error?: string;\n /** Step result/output */\n output?: unknown;\n}\n\n/**\n * Job steps response (GET /api/v1/jobs/:jobId/steps)\n */\nexport interface JobStepsResponse {\n /** Job ID */\n jobId: string;\n /** Workflow name (if applicable) */\n workflowName?: string;\n /** Overall status */\n status: 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';\n /** Execution steps */\n steps: JobStepInfo[];\n /** Current step index */\n currentStep?: number;\n}\n\n/**\n * Workflow run history entry\n */\nexport interface WorkflowRunInfo {\n /** Run ID */\n id: string;\n /** Workflow ID */\n workflowId: string;\n /** Run status */\n status: 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';\n /** Trigger info */\n trigger: {\n type: 'manual' | 'api' | 'cron';\n user?: string;\n };\n /** Start time */\n startedAt: string;\n /** Finish time */\n finishedAt?: string;\n /** Duration in ms */\n durationMs?: number;\n /** Error message (if failed) */\n error?: string;\n}\n\n/**\n * Workflow run history response (GET /api/v1/workflows/:id/runs)\n */\nexport interface WorkflowRunHistoryResponse {\n /** Workflow ID */\n workflowId: string;\n /** Run history */\n runs: WorkflowRunInfo[];\n /** Total count */\n total: number;\n}\n\n// ============================================================================\n// Zod Schemas for New Endpoints\n// ============================================================================\n\n/**\n * Dashboard stats response schema\n */\nexport const DashboardStatsResponseSchema = z.object({\n workflows: z.object({\n total: z.number(),\n active: z.number(),\n inactive: z.number(),\n }),\n jobs: z.object({\n running: z.number(),\n pending: z.number(),\n completed: z.number(),\n failed: z.number(),\n }),\n crons: z.object({\n total: z.number(),\n enabled: z.number(),\n disabled: z.number(),\n }),\n activeExecutions: z.array(z.object({\n id: z.string(),\n type: z.string(),\n workflowName: z.string().optional(),\n status: z.literal('running'),\n progress: z.number().min(0).max(100).optional(),\n progressMessage: z.string().optional(),\n startedAt: z.string(),\n durationMs: z.number().optional(),\n })),\n recentActivity: z.array(z.object({\n id: z.string(),\n type: z.string(),\n workflowName: z.string().optional(),\n status: z.enum(['completed', 'failed', 'cancelled']),\n finishedAt: z.string(),\n durationMs: z.number().optional(),\n error: z.string().optional(),\n })),\n})\n\n/**\n * Job logs response schema\n */\nexport const JobLogsResponseSchema = z.object({\n jobId: z.string(),\n logs: z.array(z.object({\n timestamp: z.string(),\n level: z.enum(['info', 'warn', 'error', 'debug']),\n message: z.string(),\n context: z.record(z.unknown()).optional(),\n })),\n total: z.number(),\n hasMore: z.boolean(),\n})\n\n/**\n * Job step info schema\n */\nexport const JobStepInfoSchema = z.object({\n name: z.string(),\n handler: z.string().optional(),\n status: z.enum(['pending', 'running', 'completed', 'failed', 'skipped']),\n progress: z.number().min(0).max(100).optional(),\n startedAt: z.string().optional(),\n finishedAt: z.string().optional(),\n durationMs: z.number().optional(),\n error: z.string().optional(),\n output: z.unknown().optional(),\n})\n\n/**\n * Job steps response schema\n */\nexport const JobStepsResponseSchema = z.object({\n jobId: z.string(),\n workflowName: z.string().optional(),\n status: z.enum(['pending', 'running', 'completed', 'failed', 'cancelled']),\n steps: z.array(JobStepInfoSchema),\n currentStep: z.number().optional(),\n})\n\n/**\n * Workflow run info schema\n */\nexport const WorkflowRunInfoSchema = z.object({\n id: z.string(),\n workflowId: z.string(),\n status: z.enum(['pending', 'running', 'completed', 'failed', 'cancelled']),\n trigger: z.object({\n type: z.enum(['manual', 'api', 'cron']),\n user: z.string().optional(),\n }),\n startedAt: z.string(),\n finishedAt: z.string().optional(),\n durationMs: z.number().optional(),\n error: z.string().optional(),\n})\n\n/**\n * Workflow run history response schema\n */\nexport const WorkflowRunHistoryResponseSchema = z.object({\n workflowId: z.string(),\n runs: z.array(WorkflowRunInfoSchema),\n total: z.number(),\n})\n\n// ─── SSE event types ─────────────────────────────────────────────────────────\n\n/** Server-Sent Event for workflow run log streaming */\nexport interface WorkflowLogEvent {\n type: string\n runId: string\n jobId?: string\n stepId?: string\n payload?: Record<string, unknown>\n timestamp?: string\n}\n","/**\n * @module @kb-labs/workflow-contracts/routes\n * REST API route constants for workflow plugin\n */\n\n/**\n * Base path for all workflow REST endpoints\n */\nexport const WORKFLOW_BASE_PATH = '/plugins/workflow'\n\n/**\n * Workflow REST API routes\n */\nexport const WORKFLOW_ROUTES = {\n /** GET /stats - Dashboard statistics */\n STATS: '/stats',\n /** GET /workflows - List all workflow definitions */\n WORKFLOWS: '/workflows',\n /** GET /workflows/:id - Get workflow definition details */\n WORKFLOW_DETAIL: '/workflows/:id',\n /** POST /workflows/:id/run - Run a workflow */\n WORKFLOW_RUN: '/workflows/:id/run',\n /** GET /workflows/:id/runs - Get workflow run history */\n WORKFLOW_RUNS: '/workflows/:id/runs',\n /** POST /workflows/runs/:runId/cancel - Cancel a workflow run */\n WORKFLOW_RUN_CANCEL: '/workflows/runs/:runId/cancel',\n /** GET /runs - List all workflow runs */\n RUNS: '/runs',\n /** GET /runs/:runId - Get a specific workflow run */\n RUN_DETAIL: '/runs/:runId',\n /** GET /jobs - List all jobs */\n JOBS: '/jobs',\n /** GET /jobs/:jobId - Get job details */\n JOB_DETAIL: '/jobs/:jobId',\n /** GET /jobs/:jobId/logs - Get job logs */\n JOB_LOGS: '/jobs/:jobId/logs',\n /** GET /jobs/:jobId/steps - Get job execution steps */\n JOB_STEPS: '/jobs/:jobId/steps',\n /** POST /jobs/:jobId/cancel - Cancel a job */\n JOB_CANCEL: '/jobs/:jobId/cancel',\n /** GET /cron - List cron jobs */\n CRON: '/cron',\n /** GET /runs/:runId/pending-approvals - List pending approvals */\n PENDING_APPROVALS: '/runs/:runId/pending-approvals',\n /** POST /runs/:runId/approve - Resolve an approval */\n RESOLVE_APPROVAL: '/runs/:runId/approve',\n} as const\n"]}
1
+ {"version":3,"sources":["../src/schemas.ts","../src/expressions.ts","../src/flags.ts","../src/cron.ts","../src/rest-api.ts","../src/routes.ts"],"names":["value","z"],"mappings":"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","file":"index.js","sourcesContent":["import { z } from 'zod'\nimport {\n RUN_STATES,\n JOB_STATES,\n STEP_STATES,\n type RunState,\n type JobState,\n type StepState,\n} from '@kb-labs/workflow-constants'\n\ntype NonEmptyTuple<T> = [T, ...T[]]\n\nconst RUN_STATE_VALUES = RUN_STATES as unknown as NonEmptyTuple<RunState>\nconst JOB_STATE_VALUES = JOB_STATES as unknown as NonEmptyTuple<JobState>\nconst STEP_STATE_VALUES = STEP_STATES as unknown as NonEmptyTuple<StepState>\n\nexport const RunStateSchema = z.enum(RUN_STATE_VALUES)\nexport const JobStateSchema = z.enum(JOB_STATE_VALUES)\nexport const StepStateSchema = z.enum(STEP_STATE_VALUES)\n\nexport const IdempotencyKeySchema = z.string().min(1).max(256)\nexport const ConcurrencyGroupSchema = z.string().min(1).max(256)\n\n/**\n * Tenant ID schema\n * Optional for backward compatibility with single-tenant deployments\n */\nexport const TenantIdSchema = z\n .string()\n .min(1)\n .max(64)\n .regex(/^[a-zA-Z0-9_-]+$/)\n .describe('Tenant identifier')\n .optional()\n\nexport const RetryModeSchema = z.enum(['exp', 'lin'])\n\nexport const RetryPolicySchema = z.object({\n max: z.number().int().nonnegative(),\n backoff: RetryModeSchema.default('exp'),\n initialIntervalMs: z.number().int().positive().default(1000),\n maxIntervalMs: z.number().int().positive().optional(),\n})\n\nexport const TimeoutSchema = z.number().int().positive().max(1000 * 60 * 60 * 24) // <= 24h\n\nexport const ExecutionTargetSchema = z.object({\n environmentId: z.string().min(1).optional(),\n workspaceId: z.string().min(1).optional(),\n namespace: z.string().min(1).optional(),\n workdir: z.string().min(1).optional(),\n})\n\nexport const IsolationProfileSchema = z.enum(['strict', 'balanced', 'relaxed'])\n\n// ─── Presentation layer schemas ──────────────────────────────────────────────\n// These fields are consumed by any client (Studio, CLI, API) to provide\n// human-readable context about workflow structure and step behavior.\n\n/** Workflow phase definition — semantic grouping of steps */\nexport const PhaseSchema = z.object({\n label: z.string().min(1),\n description: z.string().optional(),\n})\n\n/** Live progress binding — resolves a value from step outputs for display */\nexport const StepProgressSchema = z.object({\n source: z.string().min(1),\n format: z.string().min(1),\n})\n\n/** Step artifact declaration — what a step produces for review/display */\nexport const StepArtifactSchema = z.object({\n type: z.enum(['markdown', 'issues', 'table', 'diff', 'log', 'json', 'link']),\n source: z.string().min(1),\n label: z.string().min(1),\n digest: z.string().optional(),\n showInSummary: z.boolean().optional(),\n})\n\n/** Approval review item — references an artifact from a previous step */\nexport const ApprovalReviewItemSchema = z.object({\n artifact: z.string().min(1),\n editable: z.boolean().optional(),\n decisions: z.boolean().optional(),\n})\n\n// ─── Step spec ───────────────────────────────────────────────────────────────\n\nexport const StepSpecSchema = z\n .object({\n name: z.string().min(1),\n uses: z\n .union([\n z.literal('builtin:shell'),\n z.literal('builtin:approval'),\n z.literal('builtin:gate'),\n z.string().regex(/^(plugin:|workflow:)?[a-zA-Z0-9@/_:+#.-]+$/),\n ])\n .optional(),\n /** Shell command shorthand — equivalent to uses: builtin:shell with: { command: ... } */\n run: z.string().optional(),\n id: z.string().min(1).max(64).regex(/^[a-zA-Z0-9_-]+$/).optional(),\n if: z.string().optional(),\n with: z.record(z.string(), z.unknown()).optional(),\n env: z.record(z.string(), z.string()).optional(),\n secrets: z.array(z.string().min(1)).optional(),\n timeoutMs: TimeoutSchema.optional(),\n continueOnError: z.boolean().optional(),\n // Presentation layer\n summary: z.string().optional(),\n phase: z.string().optional(),\n progress: StepProgressSchema.optional(),\n artifacts: z.record(z.string().min(1), StepArtifactSchema).optional(),\n })\n .transform((step) => {\n // Normalize `run: cmd` → `uses: builtin:shell, with: { command: cmd }`\n if (step.run && !step.uses) {\n const { run, with: withField, ...rest } = step\n return {\n ...rest,\n uses: 'builtin:shell' as const,\n with: { ...withField, command: run },\n }\n }\n return step\n })\n\nexport const JobConcurrencySchema = z.object({\n group: ConcurrencyGroupSchema,\n cancelInProgress: z.boolean().optional(),\n})\n\nexport const ArtifactMergeStrategySchema = z.enum(['append', 'overwrite', 'json-merge'])\n\nexport const ArtifactMergeSourceSchema = z.object({\n runId: z.string().min(1),\n jobId: z.string().min(1).optional(),\n})\n\nexport const ArtifactMergeConfigSchema = z.object({\n strategy: ArtifactMergeStrategySchema,\n from: z.array(ArtifactMergeSourceSchema).min(1),\n})\n\nexport const JobArtifactsSchema = z\n .object({\n produce: z.array(z.string().min(1)).optional(),\n consume: z.array(z.string().min(1)).optional(),\n merge: ArtifactMergeConfigSchema.optional(),\n })\n .optional()\n\nexport const JobHooksSchema = z\n .object({\n pre: z.array(StepSpecSchema).optional(),\n post: z.array(StepSpecSchema).optional(),\n onFailure: z.array(StepSpecSchema).optional(),\n onSuccess: z.array(StepSpecSchema).optional(),\n })\n .optional()\n\nexport const JobSpecSchema = z.object({\n runsOn: z.enum(['local', 'sandbox']),\n target: ExecutionTargetSchema.optional(),\n isolation: IsolationProfileSchema.optional(),\n concurrency: JobConcurrencySchema.optional(),\n steps: z.array(StepSpecSchema).min(1),\n artifacts: JobArtifactsSchema,\n hooks: JobHooksSchema,\n if: z.string().optional(),\n timeoutMs: TimeoutSchema.optional(),\n retries: RetryPolicySchema.optional(),\n env: z.record(z.string(), z.string()).optional(),\n secrets: z.array(z.string().min(1)).optional(),\n needs: z.array(z.string().min(1)).optional(),\n priority: z.enum(['high', 'normal', 'low']).optional(),\n})\n\nexport const WorkflowTriggerSchema = z\n .object({\n manual: z.boolean().optional(),\n push: z.boolean().optional(),\n webhook: z\n .union([\n z.boolean(),\n z.object({\n secret: z.string().min(1).optional(),\n path: z.string().min(1).optional(),\n headers: z.record(z.string(), z.string()).optional(),\n }),\n ])\n .optional(),\n schedule: z\n .object({\n cron: z.string().min(1),\n timezone: z.string().min(1).optional(),\n })\n .optional(),\n })\n .refine(\n (value) =>\n value.manual || value.push || !!value.webhook || !!value.schedule,\n {\n message: 'At least one trigger must be defined',\n path: ['manual'],\n },\n )\n\nexport const WorkflowInputFieldSchema = z.object({\n type: z.enum(['string', 'number', 'boolean']),\n description: z.string().optional(),\n required: z.boolean().optional(),\n default: z.unknown().optional(),\n})\n\nexport type WorkflowInputField = z.infer<typeof WorkflowInputFieldSchema>\n\nexport const WorkflowSpecSchema = z\n .object({\n name: z.string().min(1),\n version: z.string().min(1),\n description: z.string().optional(),\n target: ExecutionTargetSchema.optional(),\n isolation: IsolationProfileSchema.optional(),\n on: WorkflowTriggerSchema,\n inputs: z.record(z.string(), WorkflowInputFieldSchema).optional(),\n env: z.record(z.string(), z.string()).optional(),\n secrets: z.array(z.string().min(1)).optional(),\n jobs: z.record(z.string().min(1), JobSpecSchema),\n // Presentation layer\n phases: z.record(z.string().min(1), PhaseSchema).optional(),\n })\n .refine(\n (value) =>\n Object.keys(value.jobs).length > 0 &&\n Object.keys(value.jobs).every((key) => key.trim().length > 0),\n {\n message: 'At least one job must be defined with a non-empty id',\n path: ['jobs'],\n },\n )\n\nexport const StepRunErrorSchema = z.object({\n message: z.string(),\n code: z.string().optional(),\n stack: z.string().optional(),\n timestamp: z.string().optional(),\n details: z.record(z.string(), z.unknown()).optional(),\n})\n\nexport const StepRunSchema = z.object({\n id: z.string().min(1),\n runId: z.string().min(1),\n jobId: z.string().min(1),\n name: z.string().min(1),\n index: z.number().int().nonnegative(),\n status: StepStateSchema,\n queuedAt: z.string().datetime(),\n startedAt: z.string().datetime().optional(),\n finishedAt: z.string().datetime().optional(),\n durationMs: z.number().int().nonnegative().optional(),\n attempt: z.number().int().nonnegative().default(0),\n timeoutMs: TimeoutSchema.optional(),\n continueOnError: z.boolean().optional(),\n error: StepRunErrorSchema.optional(),\n outputs: z.record(z.string(), z.unknown()).optional(),\n skipReason: z.string().optional(),\n spec: StepSpecSchema,\n /**\n * Resolved (interpolated) inputs for this execution.\n * Stored separately from spec.with so original ${{ }} templates are preserved\n * and future re-executions (gate restartFrom) can re-interpolate correctly.\n */\n resolvedInputs: z.record(z.string(), z.unknown()).optional(),\n})\n\nexport const JobRunSchema = z.object({\n id: z.string().min(1),\n runId: z.string().min(1),\n tenantId: TenantIdSchema, // ← Inherited from run for isolation\n jobName: z.string().min(1),\n status: JobStateSchema,\n runsOn: z.enum(['local', 'sandbox']),\n queuedAt: z.string().datetime(),\n startedAt: z.string().datetime().optional(),\n finishedAt: z.string().datetime().optional(),\n durationMs: z.number().int().nonnegative().optional(),\n attempt: z.number().int().nonnegative().default(0),\n concurrency: JobConcurrencySchema.optional(),\n retries: RetryPolicySchema.optional(),\n timeoutMs: TimeoutSchema.optional(),\n target: ExecutionTargetSchema.optional(),\n isolation: IsolationProfileSchema.optional(),\n artifacts: JobArtifactsSchema,\n error: StepRunErrorSchema.optional(),\n env: z.record(z.string(), z.string()).optional(),\n secrets: z.array(z.string().min(1)).optional(),\n needs: z.array(z.string().min(1)).optional(),\n pendingDependencies: z.array(z.string().min(1)).optional(),\n blocked: z.boolean().optional(),\n priority: z.enum(['high', 'normal', 'low']).optional(),\n steps: z.array(StepRunSchema),\n})\n\nexport const RunTriggerSchema = z.object({\n type: z.enum(['manual', 'webhook', 'push', 'schedule', 'workflow']),\n actor: z.string().optional(),\n payload: z.record(z.string(), z.unknown()).optional(),\n parentRunId: z.string().optional(),\n parentJobId: z.string().optional(),\n parentStepId: z.string().optional(),\n invokedByWorkflowId: z.string().optional(),\n})\n\nexport const RunMetadataSchema = z.object({\n idempotencyKey: IdempotencyKeySchema.optional(),\n concurrencyGroup: ConcurrencyGroupSchema.optional(),\n target: ExecutionTargetSchema.optional(),\n isolation: IsolationProfileSchema.optional(),\n workflowId: z.string().optional(),\n workflowDepth: z.number().int().nonnegative().optional(),\n parentRunId: z.string().optional(),\n parentJobId: z.string().optional(),\n parentStepId: z.string().optional(),\n})\n\nexport const ResultErrorSchema = z.object({\n message: z.string().min(1),\n code: z.string().optional(),\n details: z.record(z.string(), z.unknown()).optional(),\n})\n\nexport const ResultMetricsSchema = z.object({\n timeMs: z.number().int().nonnegative().optional(),\n cpuMs: z.number().int().nonnegative().optional(),\n memMb: z.number().nonnegative().optional(),\n jobsTotal: z.number().int().nonnegative().optional(),\n jobsSucceeded: z.number().int().nonnegative().optional(),\n jobsFailed: z.number().int().nonnegative().optional(),\n jobsCancelled: z.number().int().nonnegative().optional(),\n stepsTotal: z.number().int().nonnegative().optional(),\n stepsFailed: z.number().int().nonnegative().optional(),\n stepsCancelled: z.number().int().nonnegative().optional(),\n})\n\nexport const ExecutionResultSchema = z.object({\n status: RunStateSchema,\n summary: z.string().optional(),\n startedAt: z.string().datetime().optional(),\n completedAt: z.string().datetime().optional(),\n metrics: ResultMetricsSchema.optional(),\n details: z.record(z.string(), z.unknown()).optional(),\n outputs: z.record(z.string(), z.unknown()).optional(),\n error: ResultErrorSchema.optional(),\n})\n\nexport const RunSchema = z.object({\n id: z.string().min(1),\n tenantId: TenantIdSchema, // ← Multi-tenancy support\n name: z.string().min(1),\n version: z.string().min(1),\n status: RunStateSchema,\n createdAt: z.string().datetime(),\n queuedAt: z.string().datetime(),\n startedAt: z.string().datetime().optional(),\n finishedAt: z.string().datetime().optional(),\n durationMs: z.number().int().nonnegative().optional(),\n trigger: RunTriggerSchema,\n env: z.record(z.string(), z.string()).optional(),\n inputs: z.record(z.string(), z.unknown()).optional(),\n secrets: z.array(z.string().min(1)).optional(),\n jobs: z.array(JobRunSchema),\n artifacts: z.array(z.string()).optional(),\n metadata: RunMetadataSchema.optional(),\n result: ExecutionResultSchema.optional(),\n})\n\n\n","import type { ExpressionContext, WorkflowInvocationSpec } from './types'\n\n/**\n * Parse workflow: uses string into WorkflowInvocationSpec\n * @param uses - The uses string (e.g., \"workflow:workspace:ai-ci\")\n * @returns WorkflowInvocationSpec or null if not a workflow uses\n */\nexport function parseWorkflowUses(uses: string): WorkflowInvocationSpec | null {\n if (!uses.startsWith('workflow:')) {\n return null\n }\n\n const workflowId = uses.slice('workflow:'.length)\n if (!workflowId) {\n return null\n }\n\n return {\n type: 'workflow',\n workflowId,\n mode: 'wait', // default\n inheritEnv: true, // default\n }\n}\n\n/**\n * Extract all ${{ expression }} patterns from a string\n */\nexport function extractExpressions(str: string): string[] {\n const pattern = /\\$\\{\\{\\s*([^}]+)\\s*\\}\\}/g\n const matches: string[] = []\n let match: RegExpExecArray | null\n\n while ((match = pattern.exec(str)) !== null) {\n matches.push(match[1]!.trim())\n }\n\n return matches\n}\n\n/**\n * Evaluate a boolean expression\n * Supported operators: ==, !=, &&, ||, !\n * Supported functions: contains(), startsWith(), endsWith()\n * Supported contexts: env.*, trigger.*, steps.*.outputs.*\n */\nexport function evaluateExpression(\n expr: string,\n context: ExpressionContext,\n): boolean {\n const trimmed = expr.trim()\n\n // Handle logical operators\n if (trimmed.includes('&&')) {\n const parts = trimmed.split('&&').map((p) => p.trim())\n return parts.every((part) => evaluateExpression(part, context))\n }\n\n if (trimmed.includes('||')) {\n const parts = trimmed.split('||').map((p) => p.trim())\n return parts.some((part) => evaluateExpression(part, context))\n }\n\n // Handle negation\n if (trimmed.startsWith('!')) {\n return !evaluateExpression(trimmed.slice(1).trim(), context)\n }\n\n // Handle parentheses (simple case)\n if (trimmed.startsWith('(') && trimmed.endsWith(')')) {\n return evaluateExpression(trimmed.slice(1, -1).trim(), context)\n }\n\n // Handle boolean literals (before equality checks)\n if (trimmed === 'true') {return true}\n if (trimmed === 'false') {return false}\n\n // Handle equality/inequality\n if (trimmed.includes('==')) {\n const parts = trimmed.split('==').map((s) => s.trim())\n if (parts.length === 2 && parts[0] && parts[1]) {\n const left = resolveValue(parts[0], context)\n const right = resolveValue(parts[1], context)\n // For numeric comparison, try numeric first\n if (typeof left === 'number' && typeof right === 'number') {\n return left === right\n }\n // Otherwise coerce to string\n return coerceToString(left) === coerceToString(right)\n }\n }\n\n if (trimmed.includes('!=')) {\n const parts = trimmed.split('!=').map((s) => s.trim())\n if (parts.length === 2 && parts[0] && parts[1]) {\n const left = resolveValue(parts[0], context)\n const right = resolveValue(parts[1], context)\n // For numeric comparison, try numeric first\n if (typeof left === 'number' && typeof right === 'number') {\n return left !== right\n }\n // Otherwise coerce to string\n return coerceToString(left) !== coerceToString(right)\n }\n }\n\n // Handle functions\n if (trimmed.includes('contains(')) {\n const match = trimmed.match(/contains\\(([^,]+),\\s*([^)]+)\\)/)\n if (match && match[1] && match[2]) {\n const value = resolveValue(match[1].trim(), context)\n const search = match[2].trim().replace(/^[\"']|[\"']$/g, '')\n return String(value).includes(search)\n }\n }\n\n if (trimmed.includes('startsWith(')) {\n const match = trimmed.match(/startsWith\\(([^,]+),\\s*([^)]+)\\)/)\n if (match && match[1] && match[2]) {\n const value = resolveValue(match[1].trim(), context)\n const prefix = match[2].trim().replace(/^[\"']|[\"']$/g, '')\n return String(value).startsWith(prefix)\n }\n }\n\n if (trimmed.includes('endsWith(')) {\n const match = trimmed.match(/endsWith\\(([^,]+),\\s*([^)]+)\\)/)\n if (match && match[1] && match[2]) {\n const value = resolveValue(match[1].trim(), context)\n const suffix = match[2].trim().replace(/^[\"']|[\"']$/g, '')\n return String(value).endsWith(suffix)\n }\n }\n\n // Fallback: treat as truthy/falsy\n const value = resolveValue(trimmed, context)\n return Boolean(value)\n}\n\n/**\n * Resolve a value from context (e.g., \"env.VAR\", \"steps.build.outputs.version\")\n */\nexport function resolveValue(path: string, context: ExpressionContext): unknown {\n // Remove quotes\n const cleanPath = path.replace(/^[\"']|[\"']$/g, '')\n\n // env.VAR\n if (cleanPath.startsWith('env.')) {\n const key = cleanPath.slice('env.'.length)\n return context.env[key] ?? ''\n }\n\n // trigger.type, trigger.actor, trigger.payload.*\n if (cleanPath.startsWith('trigger.')) {\n const key = cleanPath.slice('trigger.'.length)\n if (key === 'type') {\n return context.trigger.type\n }\n if (key === 'actor') {\n return context.trigger.actor ?? ''\n }\n if (key.startsWith('payload.')) {\n const payloadKey = key.slice('payload.'.length)\n return context.trigger.payload?.[payloadKey] ?? ''\n }\n return ''\n }\n\n // steps.<id>.outputs.<key>[.<nested>...]\n if (cleanPath.startsWith('steps.')) {\n const rest = cleanPath.slice('steps.'.length)\n const match = rest.match(/^([^.]+)\\.outputs\\.(.+)$/)\n if (match) {\n const stepId = match[1]!\n const outputKey = match[2]!\n const outputs = context.steps[stepId]?.outputs\n if (outputs === undefined) {return ''}\n // Navigate nested path (e.g. \"result.passed\" → outputs.result.passed)\n const parts = outputKey.split('.')\n let value: unknown = outputs\n for (const part of parts) {\n if (value === undefined || value === null || typeof value !== 'object') {return ''}\n value = (value as Record<string, unknown>)[part]\n }\n return value !== undefined ? value : ''\n }\n return ''\n }\n\n // inputs.*\n if (cleanPath.startsWith('inputs.') && context.inputs) {\n const key = cleanPath.slice('inputs.'.length)\n return context.inputs[key] ?? ''\n }\n\n // matrix.* (for future)\n if (cleanPath.startsWith('matrix.') && context.matrix) {\n const key = cleanPath.slice('matrix.'.length)\n return context.matrix[key] ?? ''\n }\n\n // Try to parse as number\n const num = Number(cleanPath)\n if (!isNaN(num) && isFinite(num)) {\n return num\n }\n\n // Try to parse as boolean\n if (cleanPath === 'true') {return true}\n if (cleanPath === 'false') {return false}\n\n // Literal value\n return cleanPath\n}\n\n/**\n * Coerce value to string for comparison\n */\nfunction coerceToString(value: unknown): string {\n if (value === null || value === undefined) {\n return ''\n }\n if (typeof value === 'boolean') {\n return value ? 'true' : 'false'\n }\n return String(value)\n}\n\n/**\n * Interpolate string with context values\n * Example: \"Version: ${{ steps.build.outputs.version }}\"\n */\nexport function interpolateString(\n str: string,\n context: ExpressionContext,\n): string {\n const expressions = extractExpressions(str)\n let result = str\n\n for (const expr of expressions) {\n const value = resolveValueWithFallback(expr, context)\n const replacement = coerceToString(value)\n const pattern = new RegExp(\n `\\\\$\\\\{\\\\{\\\\s*${escapeRegex(expr)}\\\\s*\\\\}\\\\}`,\n 'g',\n )\n result = result.replace(pattern, replacement)\n }\n\n return result\n}\n\n/**\n * Escape special regex characters\n */\nfunction escapeRegex(str: string): string {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n\n/**\n * Resolve a value expression with || (logical OR / default value) support.\n * Returns the first truthy value, or the last value if all are falsy.\n * Example: \"trigger.payload.mode || 'heuristic'\" → value of mode, or 'heuristic' if empty/undefined\n */\nfunction resolveValueWithFallback(expr: string, context: ExpressionContext): unknown {\n // Split on || (but not inside quotes)\n const parts = splitOnOperator(expr, '||')\n if (parts.length === 1) {\n return resolveValue(parts[0]!.trim(), context)\n }\n\n // Return first truthy value, or last value\n for (let i = 0; i < parts.length; i++) {\n const value = resolveValue(parts[i]!.trim(), context)\n // Truthy check: non-empty string, non-zero number, non-false boolean, non-null object\n if (isTruthy(value)) {\n return value\n }\n // Last part — return even if falsy\n if (i === parts.length - 1) {\n return value\n }\n }\n\n return ''\n}\n\n/**\n * Split expression string on an operator, respecting quoted strings.\n * Example: \"a || 'hello || world'\" → [\"a \", \" 'hello || world'\"]\n */\nfunction splitOnOperator(expr: string, op: string): string[] {\n const parts: string[] = []\n let current = ''\n let inSingle = false\n let inDouble = false\n let i = 0\n\n while (i < expr.length) {\n const ch = expr[i]!\n\n if (ch === \"'\" && !inDouble) {\n inSingle = !inSingle\n current += ch\n i++\n } else if (ch === '\"' && !inSingle) {\n inDouble = !inDouble\n current += ch\n i++\n } else if (!inSingle && !inDouble && expr.slice(i, i + op.length) === op) {\n parts.push(current)\n current = ''\n i += op.length\n } else {\n current += ch\n i++\n }\n }\n\n parts.push(current)\n return parts\n}\n\n/**\n * Check if a resolved value is \"truthy\" for || operator purposes.\n * Empty string, null, undefined, false, 0 are falsy.\n */\nfunction isTruthy(value: unknown): boolean {\n if (value === '' || value === null || value === undefined || value === false || value === 0) {\n return false\n }\n return true\n}\n\n/**\n * Resolve expression preserving types.\n * If the string is exactly one `${{ expr }}` (no surrounding text),\n * returns the raw value (object, number, boolean, etc.).\n * Supports || operator for default values: `${{ a || 'default' }}`\n * Otherwise delegates to interpolateString (returns string).\n */\nexport function resolveExpression(\n str: string,\n context: ExpressionContext,\n): unknown {\n const trimmed = str.trim()\n\n // Check if the entire string is a single expression\n const singleExprMatch = trimmed.match(/^\\$\\{\\{\\s*([^}]+)\\s*\\}\\}$/)\n if (singleExprMatch && singleExprMatch[1]) {\n return resolveValueWithFallback(singleExprMatch[1].trim(), context)\n }\n\n // Multiple expressions or text around them — interpolate as string\n if (trimmed.includes('${{')) {\n return interpolateString(trimmed, context)\n }\n\n // No expressions — return as-is\n return str\n}\n\n/**\n * Recursively interpolate all string values in an object/array.\n * - Strings: resolved via resolveExpression (type-preserving)\n * - Arrays: each element interpolated recursively\n * - Objects: each value interpolated recursively\n * - Primitives (number, boolean, null): returned as-is\n */\nexport function interpolateObject(\n obj: Record<string, unknown>,\n context: ExpressionContext,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n\n for (const [key, value] of Object.entries(obj)) {\n result[key] = interpolateValue(value, context)\n }\n\n return result\n}\n\n/**\n * Interpolate a single value recursively\n */\nfunction interpolateValue(value: unknown, context: ExpressionContext): unknown {\n if (typeof value === 'string') {\n return resolveExpression(value, context)\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => interpolateValue(item, context))\n }\n\n if (value !== null && typeof value === 'object') {\n return interpolateObject(value as Record<string, unknown>, context)\n }\n\n // number, boolean, null, undefined — pass through\n return value\n}\n\n","/**\n * Flag definitions for workflow CLI commands\n * Uses defineFlags from @kb-labs/sdk for type safety\n */\n\nimport { defineFlags } from '@kb-labs/sdk';\n\n/**\n * Flags for workflow:status command\n */\nexport const statusFlags = defineFlags({\n json: {\n type: 'boolean',\n description: 'Output result as JSON',\n default: false,\n },\n 'job-id': {\n type: 'string',\n description: 'Job ID to get status for',\n },\n});\n\n/**\n * Flags for workflow:logs command\n */\nexport const logsFlags = defineFlags({\n json: {\n type: 'boolean',\n description: 'Output result as JSON',\n default: false,\n },\n 'job-id': {\n type: 'string',\n description: 'Job ID to get logs for (required)',\n },\n follow: {\n type: 'boolean',\n description: 'Follow log output (stream new logs)',\n default: false,\n },\n});\n\n/**\n * Flags for workflow:metrics command\n */\nexport const metricsFlags = defineFlags({\n json: {\n type: 'boolean',\n description: 'Output result as JSON',\n default: false,\n },\n});\n\n/**\n * Flags for workflow:health command\n */\nexport const healthFlags = defineFlags({\n json: {\n type: 'boolean',\n description: 'Output result as JSON',\n default: false,\n },\n});\n\n/**\n * Flags for workflow:list command\n */\nexport const listFlags = defineFlags({\n json: {\n type: 'boolean',\n description: 'Output result as JSON',\n default: false,\n },\n status: {\n type: 'string',\n description: 'Filter by status (running, completed, failed)',\n },\n type: {\n type: 'string',\n description: 'Filter by type: \"runs\" (active executions), \"cron\" (scheduled jobs)',\n },\n});\n\n/**\n * Flags for workflow:run command\n */\nexport const runFlags = defineFlags({\n json: {\n type: 'boolean',\n description: 'Output result as JSON',\n default: false,\n },\n handler: {\n type: 'string',\n description: 'Plugin handler to run (e.g., \"mind:rag-query\")',\n },\n input: {\n type: 'string',\n description: 'JSON string of input parameters',\n },\n priority: {\n type: 'number',\n description: 'Job priority (1-10, default: 5)',\n },\n wait: {\n type: 'boolean',\n description: 'Wait for job completion',\n default: false,\n },\n});\n\n// Type exports for use in command handlers\nexport type StatusFlags = typeof statusFlags.infer;\nexport type LogsFlags = typeof logsFlags.infer;\nexport type MetricsFlags = typeof metricsFlags.infer;\nexport type HealthFlags = typeof healthFlags.infer;\nexport type ListFlags = typeof listFlags.infer;\nexport type RunFlags = typeof runFlags.infer;\n","import { z } from 'zod'\nimport { JOB_PRIORITIES } from '@kb-labs/workflow-constants'\n\ntype NonEmptyTuple<T> = [T, ...T[]]\nconst JOB_PRIORITY_VALUES = JOB_PRIORITIES as unknown as NonEmptyTuple<'high' | 'normal' | 'low'>\n\n/**\n * Cron schedule expression (standard cron format)\n * Examples:\n * - \"0 * * * *\" - every hour\n * - \"0 0 * * *\" - daily at midnight\n * - \"0/15 * * * *\" - every 15 minutes\n */\nexport const CronScheduleSchema = z\n .string()\n .regex(\n /^(\\*|([0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9])|\\*\\/([0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9])) (\\*|([0-9]|1[0-9]|2[0-3])|\\*\\/([0-9]|1[0-9]|2[0-3])) (\\*|([1-9]|1[0-9]|2[0-9]|3[0-1])|\\*\\/([1-9]|1[0-9]|2[0-9]|3[0-1])) (\\*|([1-9]|1[0-2])|\\*\\/([1-9]|1[0-2])) (\\*|[0-6]|\\*\\/[0-6])$/,\n 'Invalid cron expression'\n )\n .describe('Cron schedule expression')\n\n/**\n * Plugin manifest cron job definition\n * Used in plugin manifest.ts to declare scheduled jobs\n */\nexport const PluginCronJobSchema = z.object({\n id: z.string().min(1).max(64).describe('Unique cron job identifier'),\n schedule: CronScheduleSchema,\n handler: z.string().min(1).describe('Plugin handler (e.g., \"mind:rag-index\")'),\n input: z.record(z.string(), z.unknown()).optional().describe('Input parameters for handler'),\n priority: z.enum(JOB_PRIORITY_VALUES).default('normal'),\n enabled: z.boolean().default(true).describe('Whether cron job is enabled'),\n timezone: z.string().optional().describe('Timezone for schedule (default: UTC)'),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Additional metadata'),\n})\n\nexport type PluginCronJob = z.infer<typeof PluginCronJobSchema>\n\n/**\n * User-defined cron job from .kb/jobs/*.yml\n * Full workflow spec with cron trigger\n */\nexport const UserCronJobSchema = z.object({\n name: z.string().min(1).describe('Human-readable job name'),\n schedule: CronScheduleSchema,\n autoStart: z.boolean().default(true).describe('Auto-start on daemon boot'),\n priority: z.enum(JOB_PRIORITY_VALUES).default('normal'),\n enabled: z.boolean().default(true).describe('Whether cron job is enabled'),\n timezone: z.string().optional().describe('Timezone for schedule (default: UTC)'),\n env: z.record(z.string(), z.string()).optional().describe('Environment variables'),\n jobs: z.record(z.string(), z.any()).describe('Workflow jobs specification'),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Additional metadata'),\n})\n\nexport type UserCronJob = z.infer<typeof UserCronJobSchema>\n\n/**\n * Registered cron job (internal representation)\n * Combines plugin and user cron jobs\n */\nexport interface RegisteredCronJob {\n id: string\n source: 'plugin' | 'user'\n schedule: string\n timezone?: string\n priority: 'high' | 'normal' | 'low'\n enabled: boolean\n\n // For plugin cron jobs\n handler?: string\n input?: Record<string, unknown>\n\n // For user cron jobs\n workflowSpec?: {\n name: string\n jobs: Record<string, any>\n env?: Record<string, string>\n }\n\n metadata?: Record<string, unknown>\n}\n\n/**\n * Cron job execution history entry\n */\nexport const CronExecutionSchema = z.object({\n cronJobId: z.string(),\n runId: z.string().describe('Workflow run ID'),\n scheduledAt: z.string().datetime().describe('When execution was scheduled'),\n startedAt: z.string().datetime().optional().describe('When execution started'),\n finishedAt: z.string().datetime().optional().describe('When execution finished'),\n status: z.enum(['pending', 'running', 'success', 'failed']),\n error: z\n .object({\n message: z.string(),\n stack: z.string().optional(),\n })\n .optional(),\n})\n\nexport type CronExecution = z.infer<typeof CronExecutionSchema>\n","/**\n * @module @kb-labs/workflow-contracts/rest-api\n * REST API types for Workflow Service HTTP endpoints\n */\n\nimport { z } from 'zod'\nimport type { ExecutionTarget, IsolationProfile } from './types'\n\n/**\n * Job submission request (POST /api/jobs)\n */\nexport interface JobSubmissionRequest {\n /** Job type (pluginId:jobId format) */\n type: string;\n /** Job payload (passed to handler) */\n payload?: unknown;\n /** Priority (1-10, default 5) */\n priority?: number;\n /** Max retry attempts (default 3) */\n maxRetries?: number;\n /** Timeout in milliseconds */\n timeout?: number;\n /** Scheduled run time (ISO string or Date) */\n runAt?: string | Date;\n /** Idempotency key (prevents duplicate submissions) */\n idempotencyKey?: string;\n}\n\n/**\n * Job submission response (POST /api/jobs)\n */\nexport interface JobSubmissionResponse {\n /** Generated job ID */\n jobId: string;\n}\n\n/**\n * Job status info (GET /api/jobs/:id)\n */\nexport interface JobStatusInfo {\n /** Job ID */\n id: string;\n /** Job type */\n type: string;\n /** Current status */\n status: 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';\n /** Tenant ID */\n tenantId?: string;\n /** Priority */\n priority?: number;\n /** Created timestamp */\n createdAt?: Date | string;\n /** Started timestamp */\n startedAt?: Date | string;\n /** Finished timestamp */\n finishedAt?: Date | string;\n /** Retry attempt number */\n attempt?: number;\n /** Max retries */\n maxRetries?: number;\n /** Result (if completed) */\n result?: unknown;\n /** Error (if failed) */\n error?: string;\n /** Progress (0-100) */\n progress?: number;\n /** Progress message */\n progressMessage?: string;\n}\n\n/**\n * Job list filter (GET /api/jobs)\n */\nexport interface JobListFilter {\n /** Filter by job type pattern */\n type?: string;\n /** Filter by status */\n status?: 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';\n /** Pagination limit */\n limit?: number;\n /** Pagination offset */\n offset?: number;\n}\n\n/**\n * Job list response (GET /api/jobs)\n */\nexport interface JobListResponse {\n /** List of jobs */\n jobs: JobStatusInfo[];\n}\n\n/**\n * Job cancel response (POST /api/jobs/:id/cancel)\n */\nexport interface JobCancelResponse {\n /** True if job was cancelled */\n cancelled: boolean;\n}\n\n/**\n * Cron job registration request (POST /api/cron)\n */\nexport interface CronRegistrationRequest {\n /** Cron job ID (unique per plugin) */\n id: string;\n /** Cron schedule expression */\n schedule: string;\n /** Job type to execute (pluginId:jobId) */\n jobType: string;\n /** Job payload */\n payload?: unknown;\n /** Timezone (default: UTC) */\n timezone?: string;\n /** Enabled flag (default: true) */\n enabled?: boolean;\n}\n\n/**\n * Cron job info (GET /api/cron)\n */\nexport interface CronInfo {\n /** Cron job ID */\n id: string;\n /** Cron schedule expression */\n schedule: string;\n /** Job type */\n jobType: string;\n /** Timezone */\n timezone?: string;\n /** Enabled flag */\n enabled: boolean;\n /** Last run time */\n lastRun?: Date | string;\n /** Next run time */\n nextRun?: Date | string;\n /** Plugin ID (if plugin-provided) */\n pluginId?: string;\n}\n\n/**\n * Cron list response (GET /api/cron)\n */\nexport interface CronListResponse {\n /** List of cron jobs */\n crons: CronInfo[];\n}\n\n/**\n * Workflow definition info (GET /api/v1/workflows)\n */\nexport interface WorkflowInfo {\n /** Workflow ID (e.g., \"release-manager/create-release\") */\n id: string;\n /** Human-readable name */\n name: string;\n /** Description */\n description?: string;\n /** Source type */\n source: 'manifest' | 'standalone' | 'plugin';\n /** Plugin ID (for manifest workflows) */\n pluginId?: string;\n /** Status */\n status?: 'active' | 'inactive';\n /** Tags */\n tags?: string[];\n /** Declared input parameters schema */\n inputs?: Record<string, { type: 'string' | 'number' | 'boolean'; description?: string; required?: boolean; default?: unknown }>;\n}\n\n/**\n * Workflow list response (GET /api/v1/workflows)\n */\nexport interface WorkflowListResponse {\n /** List of workflows */\n workflows: WorkflowInfo[];\n}\n\n/**\n * Workflow run request (POST /api/v1/workflows/:id/run)\n */\nexport interface WorkflowRunRequest {\n /**\n * Workflow input values (preferred field name — matches YAML `inputs:` block).\n * `input` (singular) is accepted as a legacy alias.\n */\n inputs?: Record<string, unknown>;\n /** @deprecated Use `inputs` instead. Kept for backward compatibility. */\n input?: unknown;\n /** Execution target override for this run */\n target?: ExecutionTarget;\n /** Isolation profile override for this run */\n isolation?: IsolationProfile;\n /** Trigger metadata */\n trigger?: {\n type: 'manual' | 'api' | 'cron';\n user?: string;\n };\n}\n\n// ============================================================================\n// Zod Schemas\n// ============================================================================\n\n/**\n * Job status enum schema\n */\nexport const JobStatusSchema = z.enum([\n 'pending',\n 'running',\n 'completed',\n 'failed',\n 'cancelled',\n])\n\n/**\n * Job status info schema (GET /api/v1/jobs/:jobId)\n */\nexport const JobStatusInfoSchema = z.object({\n id: z.string(),\n type: z.string(),\n status: JobStatusSchema,\n tenantId: z.string().optional(),\n priority: z.number().optional(),\n createdAt: z.union([z.string(), z.date()]).optional(),\n startedAt: z.union([z.string(), z.date()]).optional(),\n finishedAt: z.union([z.string(), z.date()]).optional(),\n attempt: z.number().optional(),\n maxRetries: z.number().optional(),\n result: z.unknown().optional(),\n error: z.string().optional(),\n progress: z.number().min(0).max(100).optional(),\n progressMessage: z.string().optional(),\n})\n\n/**\n * Job list response schema (GET /api/v1/jobs)\n */\nexport const JobListResponseSchema = z.object({\n jobs: z.array(JobStatusInfoSchema),\n})\n\n/**\n * Job cancel response schema (POST /api/v1/jobs/:jobId/cancel)\n */\nexport const JobCancelResponseSchema = z.object({\n cancelled: z.boolean(),\n})\n\n/**\n * Cron info schema (GET /api/v1/cron)\n */\nexport const CronInfoSchema = z.object({\n id: z.string(),\n schedule: z.string(),\n jobType: z.string(),\n timezone: z.string().optional(),\n enabled: z.boolean(),\n lastRun: z.union([z.string(), z.date()]).optional(),\n nextRun: z.union([z.string(), z.date()]).optional(),\n pluginId: z.string().optional(),\n})\n\n/**\n * Cron list response schema (GET /api/v1/cron)\n */\nexport const CronListResponseSchema = z.object({\n crons: z.array(CronInfoSchema),\n})\n\n/**\n * Workflow info schema (GET /api/v1/workflows)\n */\nexport const WorkflowInfoSchema = z.object({\n id: z.string(),\n name: z.string(),\n description: z.string().optional(),\n source: z.enum(['manifest', 'standalone', 'plugin']),\n pluginId: z.string().optional(),\n status: z.enum(['active', 'inactive']).optional(),\n tags: z.array(z.string()).optional(),\n})\n\n/**\n * Workflow list response schema (GET /api/v1/workflows)\n */\nexport const WorkflowListResponseSchema = z.object({\n workflows: z.array(WorkflowInfoSchema),\n})\n\n/**\n * Workflow run request schema (POST /api/v1/workflows/:id/run)\n */\nexport const WorkflowRunRequestSchema = z.object({\n inputs: z.record(z.unknown()).optional(),\n input: z.unknown().optional(),\n target: z.object({\n environmentId: z.string().min(1).optional(),\n workspaceId: z.string().min(1).optional(),\n namespace: z.string().min(1).optional(),\n workdir: z.string().min(1).optional(),\n }).optional(),\n isolation: z.enum(['strict', 'balanced', 'relaxed']).optional(),\n trigger: z.object({\n type: z.enum(['manual', 'api', 'cron']),\n user: z.string().optional(),\n }).optional(),\n})\n\n/**\n * Dashboard stats response (GET /api/v1/stats)\n */\nexport interface DashboardStatsResponse {\n /** Workflow statistics */\n workflows: {\n total: number;\n active: number;\n inactive: number;\n };\n /** Job statistics */\n jobs: {\n running: number;\n pending: number;\n completed: number;\n failed: number;\n };\n /** Cron statistics */\n crons: {\n total: number;\n enabled: number;\n disabled: number;\n };\n /** Active executions (currently running) */\n activeExecutions: Array<{\n id: string;\n type: string;\n workflowName?: string;\n status: 'running';\n progress?: number;\n progressMessage?: string;\n startedAt: string;\n durationMs?: number;\n }>;\n /** Recent activity (last 10 completed/failed jobs) */\n recentActivity: Array<{\n id: string;\n type: string;\n workflowName?: string;\n status: 'completed' | 'failed' | 'cancelled';\n finishedAt: string;\n durationMs?: number;\n error?: string;\n }>;\n}\n\n/**\n * Job logs response (GET /api/v1/jobs/:jobId/logs)\n */\nexport interface JobLogsResponse {\n /** Job ID */\n jobId: string;\n /** Log entries */\n logs: Array<{\n timestamp: string;\n level: 'info' | 'warn' | 'error' | 'debug';\n message: string;\n context?: Record<string, unknown>;\n }>;\n /** Total log count */\n total: number;\n /** Has more logs available */\n hasMore: boolean;\n}\n\n/**\n * Job execution step info (GET /api/v1/jobs/:jobId/steps)\n */\nexport interface JobStepInfo {\n /** Step name */\n name: string;\n /** Step handler */\n handler?: string;\n /** Step status */\n status: 'pending' | 'running' | 'completed' | 'failed' | 'skipped';\n /** Step progress (0-100) */\n progress?: number;\n /** Step start time */\n startedAt?: string;\n /** Step finish time */\n finishedAt?: string;\n /** Step duration in ms */\n durationMs?: number;\n /** Step error message */\n error?: string;\n /** Step result/output */\n output?: unknown;\n}\n\n/**\n * Job steps response (GET /api/v1/jobs/:jobId/steps)\n */\nexport interface JobStepsResponse {\n /** Job ID */\n jobId: string;\n /** Workflow name (if applicable) */\n workflowName?: string;\n /** Overall status */\n status: 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';\n /** Execution steps */\n steps: JobStepInfo[];\n /** Current step index */\n currentStep?: number;\n}\n\n/**\n * Workflow run history entry\n */\nexport interface WorkflowRunInfo {\n /** Run ID */\n id: string;\n /** Workflow ID */\n workflowId: string;\n /** Run status */\n status: 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';\n /** Trigger info */\n trigger: {\n type: 'manual' | 'api' | 'cron';\n user?: string;\n };\n /** Start time */\n startedAt: string;\n /** Finish time */\n finishedAt?: string;\n /** Duration in ms */\n durationMs?: number;\n /** Error message (if failed) */\n error?: string;\n}\n\n/**\n * Workflow run history response (GET /api/v1/workflows/:id/runs)\n */\nexport interface WorkflowRunHistoryResponse {\n /** Workflow ID */\n workflowId: string;\n /** Run history */\n runs: WorkflowRunInfo[];\n /** Total count */\n total: number;\n}\n\n// ============================================================================\n// Zod Schemas for New Endpoints\n// ============================================================================\n\n/**\n * Dashboard stats response schema\n */\nexport const DashboardStatsResponseSchema = z.object({\n workflows: z.object({\n total: z.number(),\n active: z.number(),\n inactive: z.number(),\n }),\n jobs: z.object({\n running: z.number(),\n pending: z.number(),\n completed: z.number(),\n failed: z.number(),\n }),\n crons: z.object({\n total: z.number(),\n enabled: z.number(),\n disabled: z.number(),\n }),\n activeExecutions: z.array(z.object({\n id: z.string(),\n type: z.string(),\n workflowName: z.string().optional(),\n status: z.literal('running'),\n progress: z.number().min(0).max(100).optional(),\n progressMessage: z.string().optional(),\n startedAt: z.string(),\n durationMs: z.number().optional(),\n })),\n recentActivity: z.array(z.object({\n id: z.string(),\n type: z.string(),\n workflowName: z.string().optional(),\n status: z.enum(['completed', 'failed', 'cancelled']),\n finishedAt: z.string(),\n durationMs: z.number().optional(),\n error: z.string().optional(),\n })),\n})\n\n/**\n * Job logs response schema\n */\nexport const JobLogsResponseSchema = z.object({\n jobId: z.string(),\n logs: z.array(z.object({\n timestamp: z.string(),\n level: z.enum(['info', 'warn', 'error', 'debug']),\n message: z.string(),\n context: z.record(z.unknown()).optional(),\n })),\n total: z.number(),\n hasMore: z.boolean(),\n})\n\n/**\n * Job step info schema\n */\nexport const JobStepInfoSchema = z.object({\n name: z.string(),\n handler: z.string().optional(),\n status: z.enum(['pending', 'running', 'completed', 'failed', 'skipped']),\n progress: z.number().min(0).max(100).optional(),\n startedAt: z.string().optional(),\n finishedAt: z.string().optional(),\n durationMs: z.number().optional(),\n error: z.string().optional(),\n output: z.unknown().optional(),\n})\n\n/**\n * Job steps response schema\n */\nexport const JobStepsResponseSchema = z.object({\n jobId: z.string(),\n workflowName: z.string().optional(),\n status: z.enum(['pending', 'running', 'completed', 'failed', 'cancelled']),\n steps: z.array(JobStepInfoSchema),\n currentStep: z.number().optional(),\n})\n\n/**\n * Workflow run info schema\n */\nexport const WorkflowRunInfoSchema = z.object({\n id: z.string(),\n workflowId: z.string(),\n status: z.enum(['pending', 'running', 'completed', 'failed', 'cancelled']),\n trigger: z.object({\n type: z.enum(['manual', 'api', 'cron']),\n user: z.string().optional(),\n }),\n startedAt: z.string(),\n finishedAt: z.string().optional(),\n durationMs: z.number().optional(),\n error: z.string().optional(),\n})\n\n/**\n * Workflow run history response schema\n */\nexport const WorkflowRunHistoryResponseSchema = z.object({\n workflowId: z.string(),\n runs: z.array(WorkflowRunInfoSchema),\n total: z.number(),\n})\n\n// ─── SSE event types ─────────────────────────────────────────────────────────\n\n/** Server-Sent Event for workflow run log streaming */\nexport interface WorkflowLogEvent {\n type: string\n runId: string\n jobId?: string\n stepId?: string\n payload?: Record<string, unknown>\n timestamp?: string\n}\n","/**\n * @module @kb-labs/workflow-contracts/routes\n * REST API route constants for workflow plugin\n */\n\n/**\n * Base path for all workflow REST endpoints\n */\nexport const WORKFLOW_BASE_PATH = '/plugins/workflow'\n\n/**\n * Workflow REST API routes\n */\nexport const WORKFLOW_ROUTES = {\n /** GET /stats - Dashboard statistics */\n STATS: '/stats',\n /** GET /workflows - List all workflow definitions */\n WORKFLOWS: '/workflows',\n /** GET /workflows/:id - Get workflow definition details */\n WORKFLOW_DETAIL: '/workflows/:id',\n /** POST /workflows/:id/run - Run a workflow */\n WORKFLOW_RUN: '/workflows/:id/run',\n /** GET /workflows/:id/runs - Get workflow run history */\n WORKFLOW_RUNS: '/workflows/:id/runs',\n /** POST /workflows/runs/:runId/cancel - Cancel a workflow run */\n WORKFLOW_RUN_CANCEL: '/workflows/runs/:runId/cancel',\n /** GET /runs - List all workflow runs */\n RUNS: '/runs',\n /** GET /runs/:runId - Get a specific workflow run */\n RUN_DETAIL: '/runs/:runId',\n /** GET /jobs - List all jobs */\n JOBS: '/jobs',\n /** GET /jobs/:jobId - Get job details */\n JOB_DETAIL: '/jobs/:jobId',\n /** GET /jobs/:jobId/logs - Get job logs */\n JOB_LOGS: '/jobs/:jobId/logs',\n /** GET /jobs/:jobId/steps - Get job execution steps */\n JOB_STEPS: '/jobs/:jobId/steps',\n /** POST /jobs/:jobId/cancel - Cancel a job */\n JOB_CANCEL: '/jobs/:jobId/cancel',\n /** GET /cron - List cron jobs */\n CRON: '/cron',\n /** GET /runs/:runId/pending-approvals - List pending approvals */\n PENDING_APPROVALS: '/runs/:runId/pending-approvals',\n /** POST /runs/:runId/approve - Resolve an approval */\n RESOLVE_APPROVAL: '/runs/:runId/approve',\n} as const\n"]}