@shipfox/api-workflows 16.0.0 → 17.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/.turbo/turbo-build.log +4 -4
  2. package/CHANGELOG.md +47 -0
  3. package/dist/core/agent-tools.js +8 -3
  4. package/dist/core/agent-tools.js.map +1 -1
  5. package/dist/core/entities/step.d.ts +1 -1
  6. package/dist/core/entities/step.d.ts.map +1 -1
  7. package/dist/core/entities/step.js +2 -1
  8. package/dist/core/entities/step.js.map +1 -1
  9. package/dist/core/errors.d.ts +1 -1
  10. package/dist/core/errors.d.ts.map +1 -1
  11. package/dist/core/errors.js.map +1 -1
  12. package/dist/core/step-config/materialize-job-execution-steps.js +2 -0
  13. package/dist/core/step-config/materialize-job-execution-steps.js.map +1 -1
  14. package/dist/core/step-config/resolve-step-config.js +3 -1
  15. package/dist/core/step-config/resolve-step-config.js.map +1 -1
  16. package/dist/db/db.d.ts +8 -8
  17. package/dist/db/index.d.ts +1 -1
  18. package/dist/db/index.d.ts.map +1 -1
  19. package/dist/db/index.js +1 -1
  20. package/dist/db/index.js.map +1 -1
  21. package/dist/db/schema/steps.d.ts +2 -2
  22. package/dist/db/schema/workflow-run-attempts.d.ts +2 -2
  23. package/dist/db/workflow-runs/outbox.d.ts +1 -0
  24. package/dist/db/workflow-runs/outbox.d.ts.map +1 -1
  25. package/dist/db/workflow-runs/outbox.js +2 -1
  26. package/dist/db/workflow-runs/outbox.js.map +1 -1
  27. package/dist/db/workflow-runs/run-create.d.ts.map +1 -1
  28. package/dist/db/workflow-runs/run-create.js +49 -1
  29. package/dist/db/workflow-runs/run-create.js.map +1 -1
  30. package/dist/db/workflow-runs/steps.d.ts +6 -0
  31. package/dist/db/workflow-runs/steps.d.ts.map +1 -1
  32. package/dist/db/workflow-runs/steps.js +14 -0
  33. package/dist/db/workflow-runs/steps.js.map +1 -1
  34. package/dist/db/workflow-runs.d.ts +1 -1
  35. package/dist/db/workflow-runs.d.ts.map +1 -1
  36. package/dist/db/workflow-runs.js +1 -1
  37. package/dist/db/workflow-runs.js.map +1 -1
  38. package/dist/presentation/inter-module.d.ts.map +1 -1
  39. package/dist/presentation/inter-module.js +85 -19
  40. package/dist/presentation/inter-module.js.map +1 -1
  41. package/dist/tsconfig.test.tsbuildinfo +1 -1
  42. package/package.json +11 -11
  43. package/src/core/agent-tools.test.ts +85 -0
  44. package/src/core/agent-tools.ts +11 -3
  45. package/src/core/entities/step.ts +1 -1
  46. package/src/core/errors.ts +2 -0
  47. package/src/core/job-execution.test.ts +1 -0
  48. package/src/core/run-workflow.test.ts +4 -0
  49. package/src/core/step-config/materialize-job-execution-steps.ts +2 -0
  50. package/src/core/step-config/resolve-step-config.ts +4 -1
  51. package/src/db/index.ts +1 -0
  52. package/src/db/workflow-runs/outbox.ts +2 -0
  53. package/src/db/workflow-runs/run-create.test.ts +41 -0
  54. package/src/db/workflow-runs/run-create.ts +81 -3
  55. package/src/db/workflow-runs/steps.ts +19 -0
  56. package/src/db/workflow-runs.ts +1 -0
  57. package/src/presentation/inter-module.test.ts +223 -0
  58. package/src/presentation/inter-module.ts +106 -24
  59. package/src/presentation/routes/agent-runtime-config.test.ts +2 -0
  60. package/test/factories/workflow-model.ts +74 -2
  61. package/test/fixtures/agent-inter-module.ts +2 -0
  62. package/tsconfig.build.tsbuildinfo +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/step-config/resolve-step-config.ts"],"sourcesContent":["import type {WorkflowEnvTemplates, WorkflowModel} from '@shipfox/api-definitions-dto';\nimport {WORKFLOW_MODEL_CHECKOUT_TARGET_FIELDS} from '@shipfox/api-definitions-dto';\nimport {\n type AvailabilitySite,\n capTraceEntries,\n type EvaluationTraceLimitEntry,\n type WorkflowExpressionEvaluationContext,\n} from '@shipfox/expression';\nimport type {AgentDefaultsResolver} from '#core/agent-defaults.js';\nimport type {\n AgentToolMaterializationContext,\n AgentToolMaterializationSnapshot,\n} from '#core/agent-tools.js';\nimport type {StepConfigDispatchPlan} from '#core/entities/step.js';\nimport {resolveAgentStepConfig} from './agent.js';\nimport {\n freezeStepField,\n resolveStepField,\n type StepConfigField,\n type WorkflowStepEvaluationTraceEntry,\n type WorkflowStepTemplateDiagnostic,\n} from './fields.js';\nimport {resolveRunStepConfig, type StepConfigMode} from './run.js';\nimport type {WorkflowEvaluationContext} from './workflow-evaluation-context.js';\n\ntype WorkflowModelJob = WorkflowModel['jobs'][number];\ntype WorkflowModelStep = WorkflowModelJob['steps'][number];\ntype WorkflowModelRunStep = Extract<WorkflowModelStep, {kind: 'run'}>;\ntype WorkflowModelAgentStep = Extract<WorkflowModelStep, {kind: 'agent'}>;\ntype WorkflowModelCheckoutStep = Extract<WorkflowModelStep, {kind: 'checkout'}>;\n\nexport type {StepConfigField, WorkflowStepTemplateDiagnostic};\n\nexport interface ResolvedStepConfig {\n readonly config: Record<string, unknown>;\n readonly configPlan: StepConfigDispatchPlan | null;\n readonly authoredConfig: Record<string, unknown> | null;\n readonly name?: string;\n readonly diagnostics: readonly WorkflowStepTemplateDiagnostic[];\n readonly trace: readonly (WorkflowStepEvaluationTraceEntry | EvaluationTraceLimitEntry)[];\n}\n\nexport interface ResolveStepConfigParams {\n readonly jobKey: string;\n readonly step: WorkflowModelStep;\n readonly workflowEnv: WorkflowModel['env'];\n readonly workflowEnvTemplates: WorkflowEnvTemplates | undefined;\n readonly jobEnv: WorkflowModelJob['env'];\n readonly jobEnvTemplates: WorkflowEnvTemplates | undefined;\n readonly context: WorkflowExpressionEvaluationContext;\n readonly site: AvailabilitySite;\n readonly resolveAgentDefaults?: AgentDefaultsResolver | undefined;\n readonly definitionId: string;\n readonly agentToolContext?: AgentToolMaterializationContext | undefined;\n readonly agentToolSnapshot?: AgentToolMaterializationSnapshot | null | undefined;\n}\n\ntype BuildStepConfigParams = ResolveStepConfigParams & {readonly mode: StepConfigMode};\n\ninterface BuiltStepConfig {\n readonly config: Record<string, unknown>;\n readonly configPlan: StepConfigDispatchPlan | null;\n readonly diagnostics: readonly WorkflowStepTemplateDiagnostic[];\n readonly trace: readonly WorkflowStepEvaluationTraceEntry[];\n readonly hasTemplates: boolean;\n}\n\ninterface WorkingDirectoryConfig {\n readonly config: Record<string, unknown>;\n readonly configPlan: Pick<StepConfigDispatchPlan, 'working_directory'> | undefined;\n readonly diagnostics: readonly WorkflowStepTemplateDiagnostic[];\n readonly trace: readonly WorkflowStepEvaluationTraceEntry[];\n readonly hasTemplates: boolean;\n}\n\ninterface CheckoutConfig {\n readonly config: Record<string, unknown>;\n readonly configPlan: Pick<StepConfigDispatchPlan, 'checkout'> | undefined;\n readonly diagnostics: readonly WorkflowStepTemplateDiagnostic[];\n readonly trace: readonly WorkflowStepEvaluationTraceEntry[];\n readonly hasTemplates: boolean;\n}\n\nexport async function resolveStepConfig(\n params: ResolveStepConfigParams,\n): Promise<ResolvedStepConfig> {\n const context = evaluationContext(params);\n const effective = await buildStepConfig({...params, context, mode: 'effective'});\n const authoredConfig = effective.hasTemplates\n ? (await buildStepConfig({...params, context, mode: 'authored'})).config\n : null;\n const name = resolveStepName(params.step, context, params.definitionId);\n\n return {\n config: effective.config,\n configPlan: effective.configPlan,\n authoredConfig,\n ...(name.value === undefined || name.value === '' ? {} : {name: name.value}),\n diagnostics: [...effective.diagnostics, ...name.diagnostics],\n trace: capTraceEntries([...effective.trace, ...name.trace]),\n };\n}\n\nasync function buildStepConfig(\n params: Omit<BuildStepConfigParams, 'context'> & {readonly context: WorkflowEvaluationContext},\n): Promise<BuiltStepConfig> {\n const gate = gateConfigForStep(params.step);\n const outputs = outputsConfigForStep(params.step);\n const workingDirectory = resolveWorkingDirectoryConfig(params);\n const runStep = runStepOrNull(params.step);\n const isRunStep = runStep !== null;\n\n if (isRunStep) {\n const run = resolveRunStepConfig({...params, step: runStep});\n return {\n config: {...workingDirectory.config, ...run.config, ...gate, ...outputs},\n configPlan: mergeConfigPlans(run.configPlan, workingDirectory.configPlan),\n diagnostics: [...workingDirectory.diagnostics, ...run.diagnostics],\n trace: [...workingDirectory.trace, ...run.trace],\n hasTemplates: run.hasTemplates || workingDirectory.hasTemplates,\n };\n }\n\n const checkoutStep = checkoutStepOrNull(params.step);\n if (checkoutStep !== null) {\n const checkout = resolveCheckoutStepConfig({...params, step: checkoutStep});\n return {\n config: {\n ...checkout.config,\n ...gate,\n ...outputs,\n },\n configPlan: checkout.configPlan === undefined ? null : checkout.configPlan,\n diagnostics: checkout.diagnostics,\n trace: checkout.trace,\n hasTemplates: checkout.hasTemplates,\n };\n }\n\n const agentStep = agentStepOrNull(params.step);\n if (agentStep === null) throw new Error(`Unsupported workflow step kind: ${params.step.kind}`);\n\n const agent = await resolveAgentStepConfig({...params, step: agentStep});\n return {\n config: {...workingDirectory.config, ...agent.config, ...gate, ...outputs},\n configPlan: mergeConfigPlans(agent.configPlan, workingDirectory.configPlan),\n diagnostics: [...workingDirectory.diagnostics, ...agent.diagnostics],\n trace: [...workingDirectory.trace, ...agent.trace],\n hasTemplates: agent.hasTemplates || workingDirectory.hasTemplates,\n };\n}\n\nfunction resolveWorkingDirectoryConfig(\n params: Omit<BuildStepConfigParams, 'context'> & {readonly context: WorkflowEvaluationContext},\n): WorkingDirectoryConfig {\n const value = params.step.workingDirectory;\n const template = params.step.templates?.workingDirectory;\n if (value === undefined) {\n return {\n config: {},\n configPlan: undefined,\n diagnostics: [],\n trace: [],\n hasTemplates: template !== undefined,\n };\n }\n\n if (template === undefined || params.mode === 'authored') {\n return {\n config: {working_directory: value},\n configPlan: undefined,\n diagnostics: [],\n trace: [],\n hasTemplates: template !== undefined,\n };\n }\n\n const resolved = resolveStepField({\n field: 'step.working_directory',\n template: {segments: template},\n context: params.context,\n definitionId: params.definitionId,\n errorField: 'step.working_directory',\n });\n const trace = resolved.trace.map((entry) => ({\n ...entry,\n field: 'step.working_directory' as const,\n }));\n const diagnostics = resolved.diagnostics.map((diagnostic) => ({\n ...diagnostic,\n field: 'step.working_directory' as const,\n }));\n if (resolved.kind === 'residual') {\n return {\n config: {},\n configPlan: {working_directory: resolved.field},\n diagnostics,\n trace,\n hasTemplates: true,\n };\n }\n\n return {\n config: {working_directory: resolved.value},\n configPlan: undefined,\n diagnostics,\n trace,\n hasTemplates: true,\n };\n}\n\nfunction mergeConfigPlans(\n primary: StepConfigDispatchPlan | null,\n secondary: Pick<StepConfigDispatchPlan, 'working_directory'> | undefined,\n): StepConfigDispatchPlan | null {\n if (secondary === undefined) return primary;\n return {...(primary ?? {}), ...secondary};\n}\n\nfunction evaluationContext(params: {\n readonly context: WorkflowExpressionEvaluationContext;\n readonly site: AvailabilitySite;\n}): WorkflowEvaluationContext {\n return {site: params.site, values: params.context};\n}\n\nfunction runStepOrNull(step: WorkflowModelStep): WorkflowModelRunStep | null {\n const isRunStep = step.kind === 'run';\n return isRunStep ? step : null;\n}\n\nfunction agentStepOrNull(step: WorkflowModelStep): WorkflowModelAgentStep | null {\n const isAgentStep = step.kind === 'agent';\n return isAgentStep ? step : null;\n}\n\nfunction checkoutStepOrNull(step: WorkflowModelStep): WorkflowModelCheckoutStep | null {\n const isCheckoutStep = step.kind === 'checkout';\n return isCheckoutStep ? step : null;\n}\n\nfunction resolveCheckoutStepConfig(\n params: Omit<BuildStepConfigParams, 'context' | 'step'> & {\n readonly context: WorkflowEvaluationContext;\n readonly step: WorkflowModelCheckoutStep;\n },\n): CheckoutConfig {\n const checkout = params.step.checkout;\n const config: Record<string, unknown> = {\n fetch_depth: checkout.fetchDepth,\n permissions: checkout.permissions,\n persist_credentials: checkout.persistCredentials,\n ...(checkout.force === undefined ? {} : {force: checkout.force}),\n };\n const checkoutConfig: Record<string, unknown> = config;\n const checkoutPlan: NonNullable<StepConfigDispatchPlan['checkout']> = {};\n const diagnostics: WorkflowStepTemplateDiagnostic[] = [];\n const trace: WorkflowStepEvaluationTraceEntry[] = [];\n let hasTemplates = false;\n\n for (const [key, field] of WORKFLOW_MODEL_CHECKOUT_TARGET_FIELDS) {\n const template = checkout.templates?.[key];\n if (template !== undefined) hasTemplates = true;\n\n const value = checkout[key];\n if (value === undefined) continue;\n\n if (template === undefined || params.mode === 'authored') {\n checkoutConfig[key] = value;\n continue;\n }\n\n const resolved = resolveStepField({\n field,\n template: {segments: template},\n context: params.context,\n definitionId: params.definitionId,\n errorField: field,\n });\n trace.push(...resolved.trace.map((entry) => ({...entry, field})));\n diagnostics.push(...resolved.diagnostics.map((diagnostic) => ({...diagnostic, field})));\n\n if (resolved.kind === 'residual') {\n checkoutPlan[key] = resolved.field;\n } else {\n checkoutConfig[key] = resolved.value;\n }\n }\n\n return {\n config: {checkout: config},\n configPlan: Object.keys(checkoutPlan).length === 0 ? undefined : {checkout: checkoutPlan},\n diagnostics,\n trace,\n hasTemplates,\n };\n}\n\nfunction gateConfigForStep(step: WorkflowModelStep): Record<string, unknown> {\n const hasGate = step.gate !== undefined;\n return hasGate ? {gate: stepGateConfig(step.gate)} : {};\n}\n\nfunction outputsConfigForStep(step: WorkflowModelStep): Record<string, unknown> {\n const hasOutputs = step.outputs !== undefined;\n return hasOutputs ? {outputs: step.outputs} : {};\n}\n\nfunction resolveStepName(\n step: WorkflowModelStep,\n context: WorkflowEvaluationContext,\n definitionId: string,\n): {\n readonly value: string | undefined;\n readonly diagnostics: readonly WorkflowStepTemplateDiagnostic[];\n readonly trace: readonly WorkflowStepEvaluationTraceEntry[];\n} {\n const hasName = step.name !== undefined;\n if (!hasName) return {value: undefined, diagnostics: [], trace: []};\n\n const hasNameTemplate = step.templates?.name !== undefined;\n if (!hasNameTemplate) return {value: step.name, diagnostics: [], trace: []};\n\n const resolved = freezeStepField({\n field: 'step.name',\n template: {segments: step.templates.name},\n context,\n definitionId,\n errorField: 'step.name',\n });\n return {\n value: resolved.value,\n diagnostics: resolved.diagnostics.map((diagnostic) => ({...diagnostic, field: 'step.name'})),\n trace: resolved.trace.map((entry) => ({...entry, field: 'step.name'})),\n };\n}\n\nfunction stepGateConfig(gate: NonNullable<WorkflowModelStep['gate']>): Record<string, unknown> {\n const hasSuccess = gate.success !== undefined;\n const hasOnFailure = gate.onFailure !== undefined;\n const hasOnFailureFeedback = gate.onFailure?.feedback !== undefined;\n const hasOnFailureFeedbackTemplate = gate.onFailure?.feedbackTemplate !== undefined;\n\n return {\n ...(hasSuccess\n ? {\n success: {\n language: gate.success.language,\n check: gate.success.check,\n source: gate.success.source,\n },\n }\n : {}),\n ...(hasOnFailure\n ? {\n on_failure: {\n restart_from: gate.onFailure.restartFrom,\n ...(hasOnFailureFeedback ? {feedback: gate.onFailure.feedback} : {}),\n ...(hasOnFailureFeedbackTemplate\n ? {feedback_template: {segments: gate.onFailure.feedbackTemplate}}\n : {}),\n },\n }\n : {}),\n };\n}\n"],"names":["WORKFLOW_MODEL_CHECKOUT_TARGET_FIELDS","capTraceEntries","resolveAgentStepConfig","freezeStepField","resolveStepField","resolveRunStepConfig","resolveStepConfig","params","context","evaluationContext","effective","buildStepConfig","mode","authoredConfig","hasTemplates","config","name","resolveStepName","step","definitionId","configPlan","value","undefined","diagnostics","trace","gate","gateConfigForStep","outputs","outputsConfigForStep","workingDirectory","resolveWorkingDirectoryConfig","runStep","runStepOrNull","isRunStep","run","mergeConfigPlans","checkoutStep","checkoutStepOrNull","checkout","resolveCheckoutStepConfig","agentStep","agentStepOrNull","Error","kind","agent","template","templates","working_directory","resolved","field","segments","errorField","map","entry","diagnostic","primary","secondary","site","values","isAgentStep","isCheckoutStep","fetch_depth","fetchDepth","permissions","persist_credentials","persistCredentials","force","checkoutConfig","checkoutPlan","key","push","Object","keys","length","hasGate","stepGateConfig","hasOutputs","hasName","hasNameTemplate","hasSuccess","success","hasOnFailure","onFailure","hasOnFailureFeedback","feedback","hasOnFailureFeedbackTemplate","feedbackTemplate","language","check","source","on_failure","restart_from","restartFrom","feedback_template"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/core/step-config/resolve-step-config.ts"],"sourcesContent":["import type {WorkflowEnvTemplates, WorkflowModel} from '@shipfox/api-definitions-dto';\nimport {WORKFLOW_MODEL_CHECKOUT_TARGET_FIELDS} from '@shipfox/api-definitions-dto';\nimport {\n type AvailabilitySite,\n capTraceEntries,\n type EvaluationTraceLimitEntry,\n type WorkflowExpressionEvaluationContext,\n} from '@shipfox/expression';\nimport type {AgentDefaultsResolver} from '#core/agent-defaults.js';\nimport type {\n AgentToolMaterializationContext,\n AgentToolMaterializationSnapshot,\n} from '#core/agent-tools.js';\nimport type {StepConfigDispatchPlan} from '#core/entities/step.js';\nimport {resolveAgentStepConfig} from './agent.js';\nimport {\n freezeStepField,\n resolveStepField,\n type StepConfigField,\n type WorkflowStepEvaluationTraceEntry,\n type WorkflowStepTemplateDiagnostic,\n} from './fields.js';\nimport {resolveRunStepConfig, type StepConfigMode} from './run.js';\nimport type {WorkflowEvaluationContext} from './workflow-evaluation-context.js';\n\ntype WorkflowModelJob = WorkflowModel['jobs'][number];\ntype WorkflowModelStep = WorkflowModelJob['steps'][number];\ntype WorkflowModelRunStep = Extract<WorkflowModelStep, {kind: 'run'}>;\ntype WorkflowModelAgentStep = Extract<WorkflowModelStep, {kind: 'agent'}>;\ntype WorkflowModelCheckoutStep = Extract<WorkflowModelStep, {kind: 'checkout'}>;\n\nexport type {StepConfigField, WorkflowStepTemplateDiagnostic};\n\nexport interface ResolvedStepConfig {\n readonly config: Record<string, unknown>;\n readonly configPlan: StepConfigDispatchPlan | null;\n readonly authoredConfig: Record<string, unknown> | null;\n readonly name?: string;\n readonly diagnostics: readonly WorkflowStepTemplateDiagnostic[];\n readonly trace: readonly (WorkflowStepEvaluationTraceEntry | EvaluationTraceLimitEntry)[];\n}\n\nexport interface ResolveStepConfigParams {\n readonly jobKey: string;\n readonly step: WorkflowModelStep;\n readonly workflowEnv: WorkflowModel['env'];\n readonly workflowEnvTemplates: WorkflowEnvTemplates | undefined;\n readonly jobEnv: WorkflowModelJob['env'];\n readonly jobEnvTemplates: WorkflowEnvTemplates | undefined;\n readonly context: WorkflowExpressionEvaluationContext;\n readonly site: AvailabilitySite;\n readonly resolveAgentDefaults?: AgentDefaultsResolver | undefined;\n readonly definitionId: string;\n readonly agentToolContext?: AgentToolMaterializationContext | undefined;\n readonly agentToolSnapshot?: AgentToolMaterializationSnapshot | null | undefined;\n}\n\ntype BuildStepConfigParams = ResolveStepConfigParams & {readonly mode: StepConfigMode};\n\ninterface BuiltStepConfig {\n readonly config: Record<string, unknown>;\n readonly configPlan: StepConfigDispatchPlan | null;\n readonly diagnostics: readonly WorkflowStepTemplateDiagnostic[];\n readonly trace: readonly WorkflowStepEvaluationTraceEntry[];\n readonly hasTemplates: boolean;\n}\n\ninterface WorkingDirectoryConfig {\n readonly config: Record<string, unknown>;\n readonly configPlan: Pick<StepConfigDispatchPlan, 'working_directory'> | undefined;\n readonly diagnostics: readonly WorkflowStepTemplateDiagnostic[];\n readonly trace: readonly WorkflowStepEvaluationTraceEntry[];\n readonly hasTemplates: boolean;\n}\n\ninterface CheckoutConfig {\n readonly config: Record<string, unknown>;\n readonly configPlan: Pick<StepConfigDispatchPlan, 'checkout'> | undefined;\n readonly diagnostics: readonly WorkflowStepTemplateDiagnostic[];\n readonly trace: readonly WorkflowStepEvaluationTraceEntry[];\n readonly hasTemplates: boolean;\n}\n\nexport async function resolveStepConfig(\n params: ResolveStepConfigParams,\n): Promise<ResolvedStepConfig> {\n const context = evaluationContext(params);\n const effective = await buildStepConfig({...params, context, mode: 'effective'});\n const authoredConfig = effective.hasTemplates\n ? (await buildStepConfig({...params, context, mode: 'authored'})).config\n : null;\n const name = resolveStepName(params.step, context, params.definitionId);\n\n return {\n config: effective.config,\n configPlan: effective.configPlan,\n authoredConfig,\n ...(name.value === undefined || name.value === '' ? {} : {name: name.value}),\n diagnostics: [...effective.diagnostics, ...name.diagnostics],\n trace: capTraceEntries([...effective.trace, ...name.trace]),\n };\n}\n\nasync function buildStepConfig(\n params: Omit<BuildStepConfigParams, 'context'> & {readonly context: WorkflowEvaluationContext},\n): Promise<BuiltStepConfig> {\n const gate = gateConfigForStep(params.step);\n const outputs = outputsConfigForStep(params.step);\n const workingDirectory = resolveWorkingDirectoryConfig(params);\n const runStep = runStepOrNull(params.step);\n const isRunStep = runStep !== null;\n\n if (isRunStep) {\n const run = resolveRunStepConfig({...params, step: runStep});\n return {\n config: {...workingDirectory.config, ...run.config, ...gate, ...outputs},\n configPlan: mergeConfigPlans(run.configPlan, workingDirectory.configPlan),\n diagnostics: [...workingDirectory.diagnostics, ...run.diagnostics],\n trace: [...workingDirectory.trace, ...run.trace],\n hasTemplates: run.hasTemplates || workingDirectory.hasTemplates,\n };\n }\n\n const checkoutStep = checkoutStepOrNull(params.step);\n if (checkoutStep !== null) {\n const checkout = resolveCheckoutStepConfig({...params, step: checkoutStep});\n return {\n config: {\n ...checkout.config,\n ...gate,\n ...outputs,\n },\n configPlan: checkout.configPlan === undefined ? null : checkout.configPlan,\n diagnostics: checkout.diagnostics,\n trace: checkout.trace,\n hasTemplates: checkout.hasTemplates,\n };\n }\n\n const agentStep = agentStepOrNull(params.step);\n if (agentStep === null) throw new Error(`Unsupported workflow step kind: ${params.step.kind}`);\n\n const agent = await resolveAgentStepConfig({...params, step: agentStep});\n return {\n config: {...workingDirectory.config, ...agent.config, ...gate, ...outputs},\n configPlan: mergeConfigPlans(agent.configPlan, workingDirectory.configPlan),\n diagnostics: [...workingDirectory.diagnostics, ...agent.diagnostics],\n trace: [...workingDirectory.trace, ...agent.trace],\n hasTemplates: agent.hasTemplates || workingDirectory.hasTemplates,\n };\n}\n\nfunction resolveWorkingDirectoryConfig(\n params: Omit<BuildStepConfigParams, 'context'> & {readonly context: WorkflowEvaluationContext},\n): WorkingDirectoryConfig {\n const value = params.step.workingDirectory;\n // Tool steps have no working tree, so they never carry a working-directory\n // template; the union narrows the remaining kinds to those that can.\n const template =\n params.step.kind === 'tool' ? undefined : params.step.templates?.workingDirectory;\n if (value === undefined) {\n return {\n config: {},\n configPlan: undefined,\n diagnostics: [],\n trace: [],\n hasTemplates: template !== undefined,\n };\n }\n\n if (template === undefined || params.mode === 'authored') {\n return {\n config: {working_directory: value},\n configPlan: undefined,\n diagnostics: [],\n trace: [],\n hasTemplates: template !== undefined,\n };\n }\n\n const resolved = resolveStepField({\n field: 'step.working_directory',\n template: {segments: template},\n context: params.context,\n definitionId: params.definitionId,\n errorField: 'step.working_directory',\n });\n const trace = resolved.trace.map((entry) => ({\n ...entry,\n field: 'step.working_directory' as const,\n }));\n const diagnostics = resolved.diagnostics.map((diagnostic) => ({\n ...diagnostic,\n field: 'step.working_directory' as const,\n }));\n if (resolved.kind === 'residual') {\n return {\n config: {},\n configPlan: {working_directory: resolved.field},\n diagnostics,\n trace,\n hasTemplates: true,\n };\n }\n\n return {\n config: {working_directory: resolved.value},\n configPlan: undefined,\n diagnostics,\n trace,\n hasTemplates: true,\n };\n}\n\nfunction mergeConfigPlans(\n primary: StepConfigDispatchPlan | null,\n secondary: Pick<StepConfigDispatchPlan, 'working_directory'> | undefined,\n): StepConfigDispatchPlan | null {\n if (secondary === undefined) return primary;\n return {...(primary ?? {}), ...secondary};\n}\n\nfunction evaluationContext(params: {\n readonly context: WorkflowExpressionEvaluationContext;\n readonly site: AvailabilitySite;\n}): WorkflowEvaluationContext {\n return {site: params.site, values: params.context};\n}\n\nfunction runStepOrNull(step: WorkflowModelStep): WorkflowModelRunStep | null {\n const isRunStep = step.kind === 'run';\n return isRunStep ? step : null;\n}\n\nfunction agentStepOrNull(step: WorkflowModelStep): WorkflowModelAgentStep | null {\n const isAgentStep = step.kind === 'agent';\n return isAgentStep ? step : null;\n}\n\nfunction checkoutStepOrNull(step: WorkflowModelStep): WorkflowModelCheckoutStep | null {\n const isCheckoutStep = step.kind === 'checkout';\n return isCheckoutStep ? step : null;\n}\n\nfunction resolveCheckoutStepConfig(\n params: Omit<BuildStepConfigParams, 'context' | 'step'> & {\n readonly context: WorkflowEvaluationContext;\n readonly step: WorkflowModelCheckoutStep;\n },\n): CheckoutConfig {\n const checkout = params.step.checkout;\n const config: Record<string, unknown> = {\n fetch_depth: checkout.fetchDepth,\n permissions: checkout.permissions,\n persist_credentials: checkout.persistCredentials,\n ...(checkout.force === undefined ? {} : {force: checkout.force}),\n };\n const checkoutConfig: Record<string, unknown> = config;\n const checkoutPlan: NonNullable<StepConfigDispatchPlan['checkout']> = {};\n const diagnostics: WorkflowStepTemplateDiagnostic[] = [];\n const trace: WorkflowStepEvaluationTraceEntry[] = [];\n let hasTemplates = false;\n\n for (const [key, field] of WORKFLOW_MODEL_CHECKOUT_TARGET_FIELDS) {\n const template = checkout.templates?.[key];\n if (template !== undefined) hasTemplates = true;\n\n const value = checkout[key];\n if (value === undefined) continue;\n\n if (template === undefined || params.mode === 'authored') {\n checkoutConfig[key] = value;\n continue;\n }\n\n const resolved = resolveStepField({\n field,\n template: {segments: template},\n context: params.context,\n definitionId: params.definitionId,\n errorField: field,\n });\n trace.push(...resolved.trace.map((entry) => ({...entry, field})));\n diagnostics.push(...resolved.diagnostics.map((diagnostic) => ({...diagnostic, field})));\n\n if (resolved.kind === 'residual') {\n checkoutPlan[key] = resolved.field;\n } else {\n checkoutConfig[key] = resolved.value;\n }\n }\n\n return {\n config: {checkout: config},\n configPlan: Object.keys(checkoutPlan).length === 0 ? undefined : {checkout: checkoutPlan},\n diagnostics,\n trace,\n hasTemplates,\n };\n}\n\nfunction gateConfigForStep(step: WorkflowModelStep): Record<string, unknown> {\n const hasGate = step.gate !== undefined;\n return hasGate ? {gate: stepGateConfig(step.gate)} : {};\n}\n\nfunction outputsConfigForStep(step: WorkflowModelStep): Record<string, unknown> {\n const hasOutputs = step.outputs !== undefined;\n return hasOutputs ? {outputs: step.outputs} : {};\n}\n\nfunction resolveStepName(\n step: WorkflowModelStep,\n context: WorkflowEvaluationContext,\n definitionId: string,\n): {\n readonly value: string | undefined;\n readonly diagnostics: readonly WorkflowStepTemplateDiagnostic[];\n readonly trace: readonly WorkflowStepEvaluationTraceEntry[];\n} {\n const hasName = step.name !== undefined;\n if (!hasName) return {value: undefined, diagnostics: [], trace: []};\n\n const hasNameTemplate = step.templates?.name !== undefined;\n if (!hasNameTemplate) return {value: step.name, diagnostics: [], trace: []};\n\n const resolved = freezeStepField({\n field: 'step.name',\n template: {segments: step.templates.name},\n context,\n definitionId,\n errorField: 'step.name',\n });\n return {\n value: resolved.value,\n diagnostics: resolved.diagnostics.map((diagnostic) => ({...diagnostic, field: 'step.name'})),\n trace: resolved.trace.map((entry) => ({...entry, field: 'step.name'})),\n };\n}\n\nfunction stepGateConfig(gate: NonNullable<WorkflowModelStep['gate']>): Record<string, unknown> {\n const hasSuccess = gate.success !== undefined;\n const hasOnFailure = gate.onFailure !== undefined;\n const hasOnFailureFeedback = gate.onFailure?.feedback !== undefined;\n const hasOnFailureFeedbackTemplate = gate.onFailure?.feedbackTemplate !== undefined;\n\n return {\n ...(hasSuccess\n ? {\n success: {\n language: gate.success.language,\n check: gate.success.check,\n source: gate.success.source,\n },\n }\n : {}),\n ...(hasOnFailure\n ? {\n on_failure: {\n restart_from: gate.onFailure.restartFrom,\n ...(hasOnFailureFeedback ? {feedback: gate.onFailure.feedback} : {}),\n ...(hasOnFailureFeedbackTemplate\n ? {feedback_template: {segments: gate.onFailure.feedbackTemplate}}\n : {}),\n },\n }\n : {}),\n };\n}\n"],"names":["WORKFLOW_MODEL_CHECKOUT_TARGET_FIELDS","capTraceEntries","resolveAgentStepConfig","freezeStepField","resolveStepField","resolveRunStepConfig","resolveStepConfig","params","context","evaluationContext","effective","buildStepConfig","mode","authoredConfig","hasTemplates","config","name","resolveStepName","step","definitionId","configPlan","value","undefined","diagnostics","trace","gate","gateConfigForStep","outputs","outputsConfigForStep","workingDirectory","resolveWorkingDirectoryConfig","runStep","runStepOrNull","isRunStep","run","mergeConfigPlans","checkoutStep","checkoutStepOrNull","checkout","resolveCheckoutStepConfig","agentStep","agentStepOrNull","Error","kind","agent","template","templates","working_directory","resolved","field","segments","errorField","map","entry","diagnostic","primary","secondary","site","values","isAgentStep","isCheckoutStep","fetch_depth","fetchDepth","permissions","persist_credentials","persistCredentials","force","checkoutConfig","checkoutPlan","key","push","Object","keys","length","hasGate","stepGateConfig","hasOutputs","hasName","hasNameTemplate","hasSuccess","success","hasOnFailure","onFailure","hasOnFailureFeedback","feedback","hasOnFailureFeedbackTemplate","feedbackTemplate","language","check","source","on_failure","restart_from","restartFrom","feedback_template"],"mappings":"AACA,SAAQA,qCAAqC,QAAO,+BAA+B;AACnF,SAEEC,eAAe,QAGV,sBAAsB;AAO7B,SAAQC,sBAAsB,QAAO,aAAa;AAClD,SACEC,eAAe,EACfC,gBAAgB,QAIX,cAAc;AACrB,SAAQC,oBAAoB,QAA4B,WAAW;AA6DnE,OAAO,eAAeC,kBACpBC,MAA+B;IAE/B,MAAMC,UAAUC,kBAAkBF;IAClC,MAAMG,YAAY,MAAMC,gBAAgB;QAAC,GAAGJ,MAAM;QAAEC;QAASI,MAAM;IAAW;IAC9E,MAAMC,iBAAiBH,UAAUI,YAAY,GACzC,AAAC,CAAA,MAAMH,gBAAgB;QAAC,GAAGJ,MAAM;QAAEC;QAASI,MAAM;IAAU,EAAC,EAAGG,MAAM,GACtE;IACJ,MAAMC,OAAOC,gBAAgBV,OAAOW,IAAI,EAAEV,SAASD,OAAOY,YAAY;IAEtE,OAAO;QACLJ,QAAQL,UAAUK,MAAM;QACxBK,YAAYV,UAAUU,UAAU;QAChCP;QACA,GAAIG,KAAKK,KAAK,KAAKC,aAAaN,KAAKK,KAAK,KAAK,KAAK,CAAC,IAAI;YAACL,MAAMA,KAAKK,KAAK;QAAA,CAAC;QAC3EE,aAAa;eAAIb,UAAUa,WAAW;eAAKP,KAAKO,WAAW;SAAC;QAC5DC,OAAOvB,gBAAgB;eAAIS,UAAUc,KAAK;eAAKR,KAAKQ,KAAK;SAAC;IAC5D;AACF;AAEA,eAAeb,gBACbJ,MAA8F;IAE9F,MAAMkB,OAAOC,kBAAkBnB,OAAOW,IAAI;IAC1C,MAAMS,UAAUC,qBAAqBrB,OAAOW,IAAI;IAChD,MAAMW,mBAAmBC,8BAA8BvB;IACvD,MAAMwB,UAAUC,cAAczB,OAAOW,IAAI;IACzC,MAAMe,YAAYF,YAAY;IAE9B,IAAIE,WAAW;QACb,MAAMC,MAAM7B,qBAAqB;YAAC,GAAGE,MAAM;YAAEW,MAAMa;QAAO;QAC1D,OAAO;YACLhB,QAAQ;gBAAC,GAAGc,iBAAiBd,MAAM;gBAAE,GAAGmB,IAAInB,MAAM;gBAAE,GAAGU,IAAI;gBAAE,GAAGE,OAAO;YAAA;YACvEP,YAAYe,iBAAiBD,IAAId,UAAU,EAAES,iBAAiBT,UAAU;YACxEG,aAAa;mBAAIM,iBAAiBN,WAAW;mBAAKW,IAAIX,WAAW;aAAC;YAClEC,OAAO;mBAAIK,iBAAiBL,KAAK;mBAAKU,IAAIV,KAAK;aAAC;YAChDV,cAAcoB,IAAIpB,YAAY,IAAIe,iBAAiBf,YAAY;QACjE;IACF;IAEA,MAAMsB,eAAeC,mBAAmB9B,OAAOW,IAAI;IACnD,IAAIkB,iBAAiB,MAAM;QACzB,MAAME,WAAWC,0BAA0B;YAAC,GAAGhC,MAAM;YAAEW,MAAMkB;QAAY;QACzE,OAAO;YACLrB,QAAQ;gBACN,GAAGuB,SAASvB,MAAM;gBAClB,GAAGU,IAAI;gBACP,GAAGE,OAAO;YACZ;YACAP,YAAYkB,SAASlB,UAAU,KAAKE,YAAY,OAAOgB,SAASlB,UAAU;YAC1EG,aAAae,SAASf,WAAW;YACjCC,OAAOc,SAASd,KAAK;YACrBV,cAAcwB,SAASxB,YAAY;QACrC;IACF;IAEA,MAAM0B,YAAYC,gBAAgBlC,OAAOW,IAAI;IAC7C,IAAIsB,cAAc,MAAM,MAAM,IAAIE,MAAM,CAAC,gCAAgC,EAAEnC,OAAOW,IAAI,CAACyB,IAAI,EAAE;IAE7F,MAAMC,QAAQ,MAAM1C,uBAAuB;QAAC,GAAGK,MAAM;QAAEW,MAAMsB;IAAS;IACtE,OAAO;QACLzB,QAAQ;YAAC,GAAGc,iBAAiBd,MAAM;YAAE,GAAG6B,MAAM7B,MAAM;YAAE,GAAGU,IAAI;YAAE,GAAGE,OAAO;QAAA;QACzEP,YAAYe,iBAAiBS,MAAMxB,UAAU,EAAES,iBAAiBT,UAAU;QAC1EG,aAAa;eAAIM,iBAAiBN,WAAW;eAAKqB,MAAMrB,WAAW;SAAC;QACpEC,OAAO;eAAIK,iBAAiBL,KAAK;eAAKoB,MAAMpB,KAAK;SAAC;QAClDV,cAAc8B,MAAM9B,YAAY,IAAIe,iBAAiBf,YAAY;IACnE;AACF;AAEA,SAASgB,8BACPvB,MAA8F;IAE9F,MAAMc,QAAQd,OAAOW,IAAI,CAACW,gBAAgB;IAC1C,2EAA2E;IAC3E,qEAAqE;IACrE,MAAMgB,WACJtC,OAAOW,IAAI,CAACyB,IAAI,KAAK,SAASrB,YAAYf,OAAOW,IAAI,CAAC4B,SAAS,EAAEjB;IACnE,IAAIR,UAAUC,WAAW;QACvB,OAAO;YACLP,QAAQ,CAAC;YACTK,YAAYE;YACZC,aAAa,EAAE;YACfC,OAAO,EAAE;YACTV,cAAc+B,aAAavB;QAC7B;IACF;IAEA,IAAIuB,aAAavB,aAAaf,OAAOK,IAAI,KAAK,YAAY;QACxD,OAAO;YACLG,QAAQ;gBAACgC,mBAAmB1B;YAAK;YACjCD,YAAYE;YACZC,aAAa,EAAE;YACfC,OAAO,EAAE;YACTV,cAAc+B,aAAavB;QAC7B;IACF;IAEA,MAAM0B,WAAW5C,iBAAiB;QAChC6C,OAAO;QACPJ,UAAU;YAACK,UAAUL;QAAQ;QAC7BrC,SAASD,OAAOC,OAAO;QACvBW,cAAcZ,OAAOY,YAAY;QACjCgC,YAAY;IACd;IACA,MAAM3B,QAAQwB,SAASxB,KAAK,CAAC4B,GAAG,CAAC,CAACC,QAAW,CAAA;YAC3C,GAAGA,KAAK;YACRJ,OAAO;QACT,CAAA;IACA,MAAM1B,cAAcyB,SAASzB,WAAW,CAAC6B,GAAG,CAAC,CAACE,aAAgB,CAAA;YAC5D,GAAGA,UAAU;YACbL,OAAO;QACT,CAAA;IACA,IAAID,SAASL,IAAI,KAAK,YAAY;QAChC,OAAO;YACL5B,QAAQ,CAAC;YACTK,YAAY;gBAAC2B,mBAAmBC,SAASC,KAAK;YAAA;YAC9C1B;YACAC;YACAV,cAAc;QAChB;IACF;IAEA,OAAO;QACLC,QAAQ;YAACgC,mBAAmBC,SAAS3B,KAAK;QAAA;QAC1CD,YAAYE;QACZC;QACAC;QACAV,cAAc;IAChB;AACF;AAEA,SAASqB,iBACPoB,OAAsC,EACtCC,SAAwE;IAExE,IAAIA,cAAclC,WAAW,OAAOiC;IACpC,OAAO;QAAC,GAAIA,WAAW,CAAC,CAAC;QAAG,GAAGC,SAAS;IAAA;AAC1C;AAEA,SAAS/C,kBAAkBF,MAG1B;IACC,OAAO;QAACkD,MAAMlD,OAAOkD,IAAI;QAAEC,QAAQnD,OAAOC,OAAO;IAAA;AACnD;AAEA,SAASwB,cAAcd,IAAuB;IAC5C,MAAMe,YAAYf,KAAKyB,IAAI,KAAK;IAChC,OAAOV,YAAYf,OAAO;AAC5B;AAEA,SAASuB,gBAAgBvB,IAAuB;IAC9C,MAAMyC,cAAczC,KAAKyB,IAAI,KAAK;IAClC,OAAOgB,cAAczC,OAAO;AAC9B;AAEA,SAASmB,mBAAmBnB,IAAuB;IACjD,MAAM0C,iBAAiB1C,KAAKyB,IAAI,KAAK;IACrC,OAAOiB,iBAAiB1C,OAAO;AACjC;AAEA,SAASqB,0BACPhC,MAGC;IAED,MAAM+B,WAAW/B,OAAOW,IAAI,CAACoB,QAAQ;IACrC,MAAMvB,SAAkC;QACtC8C,aAAavB,SAASwB,UAAU;QAChCC,aAAazB,SAASyB,WAAW;QACjCC,qBAAqB1B,SAAS2B,kBAAkB;QAChD,GAAI3B,SAAS4B,KAAK,KAAK5C,YAAY,CAAC,IAAI;YAAC4C,OAAO5B,SAAS4B,KAAK;QAAA,CAAC;IACjE;IACA,MAAMC,iBAA0CpD;IAChD,MAAMqD,eAAgE,CAAC;IACvE,MAAM7C,cAAgD,EAAE;IACxD,MAAMC,QAA4C,EAAE;IACpD,IAAIV,eAAe;IAEnB,KAAK,MAAM,CAACuD,KAAKpB,MAAM,IAAIjD,sCAAuC;QAChE,MAAM6C,WAAWP,SAASQ,SAAS,EAAE,CAACuB,IAAI;QAC1C,IAAIxB,aAAavB,WAAWR,eAAe;QAE3C,MAAMO,QAAQiB,QAAQ,CAAC+B,IAAI;QAC3B,IAAIhD,UAAUC,WAAW;QAEzB,IAAIuB,aAAavB,aAAaf,OAAOK,IAAI,KAAK,YAAY;YACxDuD,cAAc,CAACE,IAAI,GAAGhD;YACtB;QACF;QAEA,MAAM2B,WAAW5C,iBAAiB;YAChC6C;YACAJ,UAAU;gBAACK,UAAUL;YAAQ;YAC7BrC,SAASD,OAAOC,OAAO;YACvBW,cAAcZ,OAAOY,YAAY;YACjCgC,YAAYF;QACd;QACAzB,MAAM8C,IAAI,IAAItB,SAASxB,KAAK,CAAC4B,GAAG,CAAC,CAACC,QAAW,CAAA;gBAAC,GAAGA,KAAK;gBAAEJ;YAAK,CAAA;QAC7D1B,YAAY+C,IAAI,IAAItB,SAASzB,WAAW,CAAC6B,GAAG,CAAC,CAACE,aAAgB,CAAA;gBAAC,GAAGA,UAAU;gBAAEL;YAAK,CAAA;QAEnF,IAAID,SAASL,IAAI,KAAK,YAAY;YAChCyB,YAAY,CAACC,IAAI,GAAGrB,SAASC,KAAK;QACpC,OAAO;YACLkB,cAAc,CAACE,IAAI,GAAGrB,SAAS3B,KAAK;QACtC;IACF;IAEA,OAAO;QACLN,QAAQ;YAACuB,UAAUvB;QAAM;QACzBK,YAAYmD,OAAOC,IAAI,CAACJ,cAAcK,MAAM,KAAK,IAAInD,YAAY;YAACgB,UAAU8B;QAAY;QACxF7C;QACAC;QACAV;IACF;AACF;AAEA,SAASY,kBAAkBR,IAAuB;IAChD,MAAMwD,UAAUxD,KAAKO,IAAI,KAAKH;IAC9B,OAAOoD,UAAU;QAACjD,MAAMkD,eAAezD,KAAKO,IAAI;IAAC,IAAI,CAAC;AACxD;AAEA,SAASG,qBAAqBV,IAAuB;IACnD,MAAM0D,aAAa1D,KAAKS,OAAO,KAAKL;IACpC,OAAOsD,aAAa;QAACjD,SAAST,KAAKS,OAAO;IAAA,IAAI,CAAC;AACjD;AAEA,SAASV,gBACPC,IAAuB,EACvBV,OAAkC,EAClCW,YAAoB;IAMpB,MAAM0D,UAAU3D,KAAKF,IAAI,KAAKM;IAC9B,IAAI,CAACuD,SAAS,OAAO;QAACxD,OAAOC;QAAWC,aAAa,EAAE;QAAEC,OAAO,EAAE;IAAA;IAElE,MAAMsD,kBAAkB5D,KAAK4B,SAAS,EAAE9B,SAASM;IACjD,IAAI,CAACwD,iBAAiB,OAAO;QAACzD,OAAOH,KAAKF,IAAI;QAAEO,aAAa,EAAE;QAAEC,OAAO,EAAE;IAAA;IAE1E,MAAMwB,WAAW7C,gBAAgB;QAC/B8C,OAAO;QACPJ,UAAU;YAACK,UAAUhC,KAAK4B,SAAS,CAAC9B,IAAI;QAAA;QACxCR;QACAW;QACAgC,YAAY;IACd;IACA,OAAO;QACL9B,OAAO2B,SAAS3B,KAAK;QACrBE,aAAayB,SAASzB,WAAW,CAAC6B,GAAG,CAAC,CAACE,aAAgB,CAAA;gBAAC,GAAGA,UAAU;gBAAEL,OAAO;YAAW,CAAA;QACzFzB,OAAOwB,SAASxB,KAAK,CAAC4B,GAAG,CAAC,CAACC,QAAW,CAAA;gBAAC,GAAGA,KAAK;gBAAEJ,OAAO;YAAW,CAAA;IACrE;AACF;AAEA,SAAS0B,eAAelD,IAA4C;IAClE,MAAMsD,aAAatD,KAAKuD,OAAO,KAAK1D;IACpC,MAAM2D,eAAexD,KAAKyD,SAAS,KAAK5D;IACxC,MAAM6D,uBAAuB1D,KAAKyD,SAAS,EAAEE,aAAa9D;IAC1D,MAAM+D,+BAA+B5D,KAAKyD,SAAS,EAAEI,qBAAqBhE;IAE1E,OAAO;QACL,GAAIyD,aACA;YACEC,SAAS;gBACPO,UAAU9D,KAAKuD,OAAO,CAACO,QAAQ;gBAC/BC,OAAO/D,KAAKuD,OAAO,CAACQ,KAAK;gBACzBC,QAAQhE,KAAKuD,OAAO,CAACS,MAAM;YAC7B;QACF,IACA,CAAC,CAAC;QACN,GAAIR,eACA;YACES,YAAY;gBACVC,cAAclE,KAAKyD,SAAS,CAACU,WAAW;gBACxC,GAAIT,uBAAuB;oBAACC,UAAU3D,KAAKyD,SAAS,CAACE,QAAQ;gBAAA,IAAI,CAAC,CAAC;gBACnE,GAAIC,+BACA;oBAACQ,mBAAmB;wBAAC3C,UAAUzB,KAAKyD,SAAS,CAACI,gBAAgB;oBAAA;gBAAC,IAC/D,CAAC,CAAC;YACR;QACF,IACA,CAAC,CAAC;IACR;AACF"}
package/dist/db/db.d.ts CHANGED
@@ -554,7 +554,7 @@ export declare const schema: {
554
554
  dataType: "json";
555
555
  columnType: "PgJsonb";
556
556
  data: import("@shipfox/api-definitions-dto").WorkflowModel | {
557
- version: 2;
557
+ version: 2 | 3;
558
558
  model: import("@shipfox/api-definitions-dto").WorkflowModel;
559
559
  };
560
560
  driverParam: unknown;
@@ -569,7 +569,7 @@ export declare const schema: {
569
569
  generated: undefined;
570
570
  }, {}, {
571
571
  $type: import("@shipfox/api-definitions-dto").WorkflowModel | {
572
- version: 2;
572
+ version: 2 | 3;
573
573
  model: import("@shipfox/api-definitions-dto").WorkflowModel;
574
574
  };
575
575
  }>;
@@ -1952,7 +1952,7 @@ export declare const schema: {
1952
1952
  tableName: "steps";
1953
1953
  dataType: "string";
1954
1954
  columnType: "PgText";
1955
- data: "agent" | "checkout" | "run" | "setup";
1955
+ data: "agent" | "checkout" | "run" | "setup" | "tool";
1956
1956
  driverParam: string;
1957
1957
  notNull: true;
1958
1958
  hasDefault: false;
@@ -1964,7 +1964,7 @@ export declare const schema: {
1964
1964
  identity: undefined;
1965
1965
  generated: undefined;
1966
1966
  }, {}, {
1967
- $type: "agent" | "checkout" | "run" | "setup";
1967
+ $type: "agent" | "checkout" | "run" | "setup" | "tool";
1968
1968
  }>;
1969
1969
  config: import("drizzle-orm/pg-core").PgColumn<{
1970
1970
  name: "config";
@@ -3224,7 +3224,7 @@ export declare function db(): NodePgDatabase<{
3224
3224
  dataType: "json";
3225
3225
  columnType: "PgJsonb";
3226
3226
  data: import("@shipfox/api-definitions-dto").WorkflowModel | {
3227
- version: 2;
3227
+ version: 2 | 3;
3228
3228
  model: import("@shipfox/api-definitions-dto").WorkflowModel;
3229
3229
  };
3230
3230
  driverParam: unknown;
@@ -3239,7 +3239,7 @@ export declare function db(): NodePgDatabase<{
3239
3239
  generated: undefined;
3240
3240
  }, {}, {
3241
3241
  $type: import("@shipfox/api-definitions-dto").WorkflowModel | {
3242
- version: 2;
3242
+ version: 2 | 3;
3243
3243
  model: import("@shipfox/api-definitions-dto").WorkflowModel;
3244
3244
  };
3245
3245
  }>;
@@ -4622,7 +4622,7 @@ export declare function db(): NodePgDatabase<{
4622
4622
  tableName: "steps";
4623
4623
  dataType: "string";
4624
4624
  columnType: "PgText";
4625
- data: "agent" | "checkout" | "run" | "setup";
4625
+ data: "agent" | "checkout" | "run" | "setup" | "tool";
4626
4626
  driverParam: string;
4627
4627
  notNull: true;
4628
4628
  hasDefault: false;
@@ -4634,7 +4634,7 @@ export declare function db(): NodePgDatabase<{
4634
4634
  identity: undefined;
4635
4635
  generated: undefined;
4636
4636
  }, {}, {
4637
- $type: "agent" | "checkout" | "run" | "setup";
4637
+ $type: "agent" | "checkout" | "run" | "setup" | "tool";
4638
4638
  }>;
4639
4639
  config: import("drizzle-orm/pg-core").PgColumn<{
4640
4640
  name: "config";
@@ -5,6 +5,6 @@ export { activateJobListener, countActiveListeners, drainListenerEventsIntoExecu
5
5
  export { workflowsOutbox } from './schema/outbox.js';
6
6
  export { workflowRunCounters } from './schema/workflow-run-counters.js';
7
7
  export type { BulkUpdateStepStatusesParams, CancelWorkflowRunParams, CreateRerunWorkflowRunParams, CreateWorkflowRunParams, EvaluateJobActivationsParams, FailWorkflowRunAsTimedOutParams, JobActivationDecision, ListWorkflowRunsParams, ListWorkflowRunsResult, StepAttemptDetail, UpdateJobExecutionStatusParams, UpdateJobStatusParams, UpdateWorkflowRunStatusParams, WorkflowJobExecutionDepth, WorkflowJobExecutionDepthParams, WorkflowRunAggregates, WorkflowRunFilters, WorkflowRunJobRawStatusCount, WorkflowRunJobStatusCount, WorkflowRunJobSummary, WorkflowRunJobSummaryTarget, WorkflowRunJobsSummary, } from './workflow-runs.js';
8
- export { bulkUpdateStepStatuses, cancelWorkflowRun, createRerunWorkflowRun, createWorkflowRun, evaluateJobActivations, failJobExecutionAsTimedOut, failWorkflowRunAsTimedOut, getFirstJobExecutionByJobId, getJobById, getJobExecutionById, getJobExecutionDetail, getJobExecutionFailureOrigin, getJobExecutionsByJobId, getJobExecutionsByWorkflowRunAttemptId, getJobScope, getJobsByWorkflowRunAttemptId, getJobsByWorkflowRunId, getLatestAttempt, getLatestJobExecutionByJobId, getStepAttemptDetail, getStepAttempts, getStepAttemptsByJobIds, getStepById, getStepByIdForJobExecution, getStepsByJobExecutionId, getStepsByJobExecutionIdForUpdate, getWorkflowJobExecutionDepth, getWorkflowRunAggregates, getWorkflowRunAttemptById, getWorkflowRunByAttemptId, getWorkflowRunById, getWorkflowRunDetail, listRunAttempts, listWorkflowRunJobSummaries, listWorkflowRuns, listWorkflowRunsByProject, queueJobExecution, recordJobExecutionStartedAt, resolveJobExecutionAfterLeaseExpiry, resolveJobStatusFromJobExecutions, updateJobExecutionStatus, updateJobStatus, updateWorkflowRunStatus, } from './workflow-runs.js';
8
+ export { bulkUpdateStepStatuses, cancelWorkflowRun, createRerunWorkflowRun, createWorkflowRun, evaluateJobActivations, failJobExecutionAsTimedOut, failWorkflowRunAsTimedOut, getFirstJobExecutionByJobId, getJobById, getJobExecutionById, getJobExecutionDetail, getJobExecutionFailureOrigin, getJobExecutionsByJobId, getJobExecutionsByWorkflowRunAttemptId, getJobScope, getJobsByWorkflowRunAttemptId, getJobsByWorkflowRunId, getLatestAttempt, getLatestJobExecutionByJobId, getStepAttemptDetail, getStepAttempts, getStepAttemptsByJobIds, getStepById, getStepByIdForJobExecution, getStepsByJobExecutionId, getStepsByJobExecutionIdForUpdate, getWorkflowJobExecutionDepth, getWorkflowRunAggregates, getWorkflowRunAttemptById, getWorkflowRunByAttemptId, getWorkflowRunById, getWorkflowRunDetail, listRunAttempts, listStepAttemptIdsByJobId, listWorkflowRunJobSummaries, listWorkflowRuns, listWorkflowRunsByProject, queueJobExecution, recordJobExecutionStartedAt, resolveJobExecutionAfterLeaseExpiry, resolveJobStatusFromJobExecutions, updateJobExecutionStatus, updateJobStatus, updateWorkflowRunStatus, } from './workflow-runs.js';
9
9
  export declare const migrationsPath: string;
10
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,OAAO,EAAE,EAAE,EAAE,MAAM,EAAC,MAAM,SAAS,CAAC;AAC5C,OAAO,EACL,KAAK,4BAA4B,EACjC,KAAK,4BAA4B,EACjC,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,EACzB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,gCAAgC,EAChC,kBAAkB,EAClB,kBAAkB,EAClB,0BAA0B,GAC3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,eAAe,EAAC,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAC,mBAAmB,EAAC,MAAM,mCAAmC,CAAC;AACtE,YAAY,EACV,4BAA4B,EAC5B,uBAAuB,EACvB,4BAA4B,EAC5B,uBAAuB,EACvB,4BAA4B,EAC5B,+BAA+B,EAC/B,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,iBAAiB,EACjB,8BAA8B,EAC9B,qBAAqB,EACrB,6BAA6B,EAC7B,yBAAyB,EACzB,+BAA+B,EAC/B,qBAAqB,EACrB,kBAAkB,EAClB,4BAA4B,EAC5B,yBAAyB,EACzB,qBAAqB,EACrB,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,sBAAsB,EACtB,iBAAiB,EACjB,sBAAsB,EACtB,0BAA0B,EAC1B,yBAAyB,EACzB,2BAA2B,EAC3B,UAAU,EACV,mBAAmB,EACnB,qBAAqB,EACrB,4BAA4B,EAC5B,uBAAuB,EACvB,sCAAsC,EACtC,WAAW,EACX,6BAA6B,EAC7B,sBAAsB,EACtB,gBAAgB,EAChB,4BAA4B,EAC5B,oBAAoB,EACpB,eAAe,EACf,uBAAuB,EACvB,WAAW,EACX,0BAA0B,EAC1B,wBAAwB,EACxB,iCAAiC,EACjC,4BAA4B,EAC5B,wBAAwB,EACxB,yBAAyB,EACzB,yBAAyB,EACzB,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,2BAA2B,EAC3B,gBAAgB,EAChB,yBAAyB,EACzB,iBAAiB,EACjB,2BAA2B,EAC3B,mCAAmC,EACnC,iCAAiC,EACjC,wBAAwB,EACxB,eAAe,EACf,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAE5B,eAAO,MAAM,cAAc,QAAoE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,OAAO,EAAE,EAAE,EAAE,MAAM,EAAC,MAAM,SAAS,CAAC;AAC5C,OAAO,EACL,KAAK,4BAA4B,EACjC,KAAK,4BAA4B,EACjC,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,EACzB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,gCAAgC,EAChC,kBAAkB,EAClB,kBAAkB,EAClB,0BAA0B,GAC3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,eAAe,EAAC,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAC,mBAAmB,EAAC,MAAM,mCAAmC,CAAC;AACtE,YAAY,EACV,4BAA4B,EAC5B,uBAAuB,EACvB,4BAA4B,EAC5B,uBAAuB,EACvB,4BAA4B,EAC5B,+BAA+B,EAC/B,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,iBAAiB,EACjB,8BAA8B,EAC9B,qBAAqB,EACrB,6BAA6B,EAC7B,yBAAyB,EACzB,+BAA+B,EAC/B,qBAAqB,EACrB,kBAAkB,EAClB,4BAA4B,EAC5B,yBAAyB,EACzB,qBAAqB,EACrB,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,sBAAsB,EACtB,iBAAiB,EACjB,sBAAsB,EACtB,0BAA0B,EAC1B,yBAAyB,EACzB,2BAA2B,EAC3B,UAAU,EACV,mBAAmB,EACnB,qBAAqB,EACrB,4BAA4B,EAC5B,uBAAuB,EACvB,sCAAsC,EACtC,WAAW,EACX,6BAA6B,EAC7B,sBAAsB,EACtB,gBAAgB,EAChB,4BAA4B,EAC5B,oBAAoB,EACpB,eAAe,EACf,uBAAuB,EACvB,WAAW,EACX,0BAA0B,EAC1B,wBAAwB,EACxB,iCAAiC,EACjC,4BAA4B,EAC5B,wBAAwB,EACxB,yBAAyB,EACzB,yBAAyB,EACzB,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,yBAAyB,EACzB,2BAA2B,EAC3B,gBAAgB,EAChB,yBAAyB,EACzB,iBAAiB,EACjB,2BAA2B,EAC3B,mCAAmC,EACnC,iCAAiC,EACjC,wBAAwB,EACxB,eAAe,EACf,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAE5B,eAAO,MAAM,cAAc,QAAoE,CAAC"}
package/dist/db/index.js CHANGED
@@ -5,7 +5,7 @@ export { deliverEventToListener } from './job-listener-events.js';
5
5
  export { activateJobListener, countActiveListeners, drainListenerEventsIntoExecution, peekListenerBuffer, resolveJobListener, settleListenerJobExecution } from './job-listeners.js';
6
6
  export { workflowsOutbox } from './schema/outbox.js';
7
7
  export { workflowRunCounters } from './schema/workflow-run-counters.js';
8
- export { bulkUpdateStepStatuses, cancelWorkflowRun, createRerunWorkflowRun, createWorkflowRun, evaluateJobActivations, failJobExecutionAsTimedOut, failWorkflowRunAsTimedOut, getFirstJobExecutionByJobId, getJobById, getJobExecutionById, getJobExecutionDetail, getJobExecutionFailureOrigin, getJobExecutionsByJobId, getJobExecutionsByWorkflowRunAttemptId, getJobScope, getJobsByWorkflowRunAttemptId, getJobsByWorkflowRunId, getLatestAttempt, getLatestJobExecutionByJobId, getStepAttemptDetail, getStepAttempts, getStepAttemptsByJobIds, getStepById, getStepByIdForJobExecution, getStepsByJobExecutionId, getStepsByJobExecutionIdForUpdate, getWorkflowJobExecutionDepth, getWorkflowRunAggregates, getWorkflowRunAttemptById, getWorkflowRunByAttemptId, getWorkflowRunById, getWorkflowRunDetail, listRunAttempts, listWorkflowRunJobSummaries, listWorkflowRuns, listWorkflowRunsByProject, queueJobExecution, recordJobExecutionStartedAt, resolveJobExecutionAfterLeaseExpiry, resolveJobStatusFromJobExecutions, updateJobExecutionStatus, updateJobStatus, updateWorkflowRunStatus } from './workflow-runs.js';
8
+ export { bulkUpdateStepStatuses, cancelWorkflowRun, createRerunWorkflowRun, createWorkflowRun, evaluateJobActivations, failJobExecutionAsTimedOut, failWorkflowRunAsTimedOut, getFirstJobExecutionByJobId, getJobById, getJobExecutionById, getJobExecutionDetail, getJobExecutionFailureOrigin, getJobExecutionsByJobId, getJobExecutionsByWorkflowRunAttemptId, getJobScope, getJobsByWorkflowRunAttemptId, getJobsByWorkflowRunId, getLatestAttempt, getLatestJobExecutionByJobId, getStepAttemptDetail, getStepAttempts, getStepAttemptsByJobIds, getStepById, getStepByIdForJobExecution, getStepsByJobExecutionId, getStepsByJobExecutionIdForUpdate, getWorkflowJobExecutionDepth, getWorkflowRunAggregates, getWorkflowRunAttemptById, getWorkflowRunByAttemptId, getWorkflowRunById, getWorkflowRunDetail, listRunAttempts, listStepAttemptIdsByJobId, listWorkflowRunJobSummaries, listWorkflowRuns, listWorkflowRunsByProject, queueJobExecution, recordJobExecutionStartedAt, resolveJobExecutionAfterLeaseExpiry, resolveJobStatusFromJobExecutions, updateJobExecutionStatus, updateJobStatus, updateWorkflowRunStatus } from './workflow-runs.js';
9
9
  export const migrationsPath = resolve(dirname(fileURLToPath(import.meta.url)), '../../drizzle');
10
10
 
11
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/db/index.ts"],"sourcesContent":["import {dirname, resolve} from 'node:path';\nimport {fileURLToPath} from 'node:url';\n\nexport {closeDb, db, schema} from './db.js';\nexport {\n type DeliverEventToListenerParams,\n type DeliverEventToListenerResult,\n deliverEventToListener,\n} from './job-listener-events.js';\nexport type {\n ActivateJobListenerParams,\n ActivateJobListenerResult,\n DrainListenerEventsParams,\n DrainListenerEventsResult,\n ListenerBufferPeek,\n} from './job-listeners.js';\nexport {\n activateJobListener,\n countActiveListeners,\n drainListenerEventsIntoExecution,\n peekListenerBuffer,\n resolveJobListener,\n settleListenerJobExecution,\n} from './job-listeners.js';\nexport {workflowsOutbox} from './schema/outbox.js';\nexport {workflowRunCounters} from './schema/workflow-run-counters.js';\nexport type {\n BulkUpdateStepStatusesParams,\n CancelWorkflowRunParams,\n CreateRerunWorkflowRunParams,\n CreateWorkflowRunParams,\n EvaluateJobActivationsParams,\n FailWorkflowRunAsTimedOutParams,\n JobActivationDecision,\n ListWorkflowRunsParams,\n ListWorkflowRunsResult,\n StepAttemptDetail,\n UpdateJobExecutionStatusParams,\n UpdateJobStatusParams,\n UpdateWorkflowRunStatusParams,\n WorkflowJobExecutionDepth,\n WorkflowJobExecutionDepthParams,\n WorkflowRunAggregates,\n WorkflowRunFilters,\n WorkflowRunJobRawStatusCount,\n WorkflowRunJobStatusCount,\n WorkflowRunJobSummary,\n WorkflowRunJobSummaryTarget,\n WorkflowRunJobsSummary,\n} from './workflow-runs.js';\nexport {\n bulkUpdateStepStatuses,\n cancelWorkflowRun,\n createRerunWorkflowRun,\n createWorkflowRun,\n evaluateJobActivations,\n failJobExecutionAsTimedOut,\n failWorkflowRunAsTimedOut,\n getFirstJobExecutionByJobId,\n getJobById,\n getJobExecutionById,\n getJobExecutionDetail,\n getJobExecutionFailureOrigin,\n getJobExecutionsByJobId,\n getJobExecutionsByWorkflowRunAttemptId,\n getJobScope,\n getJobsByWorkflowRunAttemptId,\n getJobsByWorkflowRunId,\n getLatestAttempt,\n getLatestJobExecutionByJobId,\n getStepAttemptDetail,\n getStepAttempts,\n getStepAttemptsByJobIds,\n getStepById,\n getStepByIdForJobExecution,\n getStepsByJobExecutionId,\n getStepsByJobExecutionIdForUpdate,\n getWorkflowJobExecutionDepth,\n getWorkflowRunAggregates,\n getWorkflowRunAttemptById,\n getWorkflowRunByAttemptId,\n getWorkflowRunById,\n getWorkflowRunDetail,\n listRunAttempts,\n listWorkflowRunJobSummaries,\n listWorkflowRuns,\n listWorkflowRunsByProject,\n queueJobExecution,\n recordJobExecutionStartedAt,\n resolveJobExecutionAfterLeaseExpiry,\n resolveJobStatusFromJobExecutions,\n updateJobExecutionStatus,\n updateJobStatus,\n updateWorkflowRunStatus,\n} from './workflow-runs.js';\n\nexport const migrationsPath = resolve(dirname(fileURLToPath(import.meta.url)), '../../drizzle');\n"],"names":["dirname","resolve","fileURLToPath","closeDb","db","schema","deliverEventToListener","activateJobListener","countActiveListeners","drainListenerEventsIntoExecution","peekListenerBuffer","resolveJobListener","settleListenerJobExecution","workflowsOutbox","workflowRunCounters","bulkUpdateStepStatuses","cancelWorkflowRun","createRerunWorkflowRun","createWorkflowRun","evaluateJobActivations","failJobExecutionAsTimedOut","failWorkflowRunAsTimedOut","getFirstJobExecutionByJobId","getJobById","getJobExecutionById","getJobExecutionDetail","getJobExecutionFailureOrigin","getJobExecutionsByJobId","getJobExecutionsByWorkflowRunAttemptId","getJobScope","getJobsByWorkflowRunAttemptId","getJobsByWorkflowRunId","getLatestAttempt","getLatestJobExecutionByJobId","getStepAttemptDetail","getStepAttempts","getStepAttemptsByJobIds","getStepById","getStepByIdForJobExecution","getStepsByJobExecutionId","getStepsByJobExecutionIdForUpdate","getWorkflowJobExecutionDepth","getWorkflowRunAggregates","getWorkflowRunAttemptById","getWorkflowRunByAttemptId","getWorkflowRunById","getWorkflowRunDetail","listRunAttempts","listWorkflowRunJobSummaries","listWorkflowRuns","listWorkflowRunsByProject","queueJobExecution","recordJobExecutionStartedAt","resolveJobExecutionAfterLeaseExpiry","resolveJobStatusFromJobExecutions","updateJobExecutionStatus","updateJobStatus","updateWorkflowRunStatus","migrationsPath","url"],"mappings":"AAAA,SAAQA,OAAO,EAAEC,OAAO,QAAO,YAAY;AAC3C,SAAQC,aAAa,QAAO,WAAW;AAEvC,SAAQC,OAAO,EAAEC,EAAE,EAAEC,MAAM,QAAO,UAAU;AAC5C,SAGEC,sBAAsB,QACjB,2BAA2B;AAQlC,SACEC,mBAAmB,EACnBC,oBAAoB,EACpBC,gCAAgC,EAChCC,kBAAkB,EAClBC,kBAAkB,EAClBC,0BAA0B,QACrB,qBAAqB;AAC5B,SAAQC,eAAe,QAAO,qBAAqB;AACnD,SAAQC,mBAAmB,QAAO,oCAAoC;AAyBtE,SACEC,sBAAsB,EACtBC,iBAAiB,EACjBC,sBAAsB,EACtBC,iBAAiB,EACjBC,sBAAsB,EACtBC,0BAA0B,EAC1BC,yBAAyB,EACzBC,2BAA2B,EAC3BC,UAAU,EACVC,mBAAmB,EACnBC,qBAAqB,EACrBC,4BAA4B,EAC5BC,uBAAuB,EACvBC,sCAAsC,EACtCC,WAAW,EACXC,6BAA6B,EAC7BC,sBAAsB,EACtBC,gBAAgB,EAChBC,4BAA4B,EAC5BC,oBAAoB,EACpBC,eAAe,EACfC,uBAAuB,EACvBC,WAAW,EACXC,0BAA0B,EAC1BC,wBAAwB,EACxBC,iCAAiC,EACjCC,4BAA4B,EAC5BC,wBAAwB,EACxBC,yBAAyB,EACzBC,yBAAyB,EACzBC,kBAAkB,EAClBC,oBAAoB,EACpBC,eAAe,EACfC,2BAA2B,EAC3BC,gBAAgB,EAChBC,yBAAyB,EACzBC,iBAAiB,EACjBC,2BAA2B,EAC3BC,mCAAmC,EACnCC,iCAAiC,EACjCC,wBAAwB,EACxBC,eAAe,EACfC,uBAAuB,QAClB,qBAAqB;AAE5B,OAAO,MAAMC,iBAAiBzD,QAAQD,QAAQE,cAAc,YAAYyD,GAAG,IAAI,iBAAiB"}
1
+ {"version":3,"sources":["../../src/db/index.ts"],"sourcesContent":["import {dirname, resolve} from 'node:path';\nimport {fileURLToPath} from 'node:url';\n\nexport {closeDb, db, schema} from './db.js';\nexport {\n type DeliverEventToListenerParams,\n type DeliverEventToListenerResult,\n deliverEventToListener,\n} from './job-listener-events.js';\nexport type {\n ActivateJobListenerParams,\n ActivateJobListenerResult,\n DrainListenerEventsParams,\n DrainListenerEventsResult,\n ListenerBufferPeek,\n} from './job-listeners.js';\nexport {\n activateJobListener,\n countActiveListeners,\n drainListenerEventsIntoExecution,\n peekListenerBuffer,\n resolveJobListener,\n settleListenerJobExecution,\n} from './job-listeners.js';\nexport {workflowsOutbox} from './schema/outbox.js';\nexport {workflowRunCounters} from './schema/workflow-run-counters.js';\nexport type {\n BulkUpdateStepStatusesParams,\n CancelWorkflowRunParams,\n CreateRerunWorkflowRunParams,\n CreateWorkflowRunParams,\n EvaluateJobActivationsParams,\n FailWorkflowRunAsTimedOutParams,\n JobActivationDecision,\n ListWorkflowRunsParams,\n ListWorkflowRunsResult,\n StepAttemptDetail,\n UpdateJobExecutionStatusParams,\n UpdateJobStatusParams,\n UpdateWorkflowRunStatusParams,\n WorkflowJobExecutionDepth,\n WorkflowJobExecutionDepthParams,\n WorkflowRunAggregates,\n WorkflowRunFilters,\n WorkflowRunJobRawStatusCount,\n WorkflowRunJobStatusCount,\n WorkflowRunJobSummary,\n WorkflowRunJobSummaryTarget,\n WorkflowRunJobsSummary,\n} from './workflow-runs.js';\nexport {\n bulkUpdateStepStatuses,\n cancelWorkflowRun,\n createRerunWorkflowRun,\n createWorkflowRun,\n evaluateJobActivations,\n failJobExecutionAsTimedOut,\n failWorkflowRunAsTimedOut,\n getFirstJobExecutionByJobId,\n getJobById,\n getJobExecutionById,\n getJobExecutionDetail,\n getJobExecutionFailureOrigin,\n getJobExecutionsByJobId,\n getJobExecutionsByWorkflowRunAttemptId,\n getJobScope,\n getJobsByWorkflowRunAttemptId,\n getJobsByWorkflowRunId,\n getLatestAttempt,\n getLatestJobExecutionByJobId,\n getStepAttemptDetail,\n getStepAttempts,\n getStepAttemptsByJobIds,\n getStepById,\n getStepByIdForJobExecution,\n getStepsByJobExecutionId,\n getStepsByJobExecutionIdForUpdate,\n getWorkflowJobExecutionDepth,\n getWorkflowRunAggregates,\n getWorkflowRunAttemptById,\n getWorkflowRunByAttemptId,\n getWorkflowRunById,\n getWorkflowRunDetail,\n listRunAttempts,\n listStepAttemptIdsByJobId,\n listWorkflowRunJobSummaries,\n listWorkflowRuns,\n listWorkflowRunsByProject,\n queueJobExecution,\n recordJobExecutionStartedAt,\n resolveJobExecutionAfterLeaseExpiry,\n resolveJobStatusFromJobExecutions,\n updateJobExecutionStatus,\n updateJobStatus,\n updateWorkflowRunStatus,\n} from './workflow-runs.js';\n\nexport const migrationsPath = resolve(dirname(fileURLToPath(import.meta.url)), '../../drizzle');\n"],"names":["dirname","resolve","fileURLToPath","closeDb","db","schema","deliverEventToListener","activateJobListener","countActiveListeners","drainListenerEventsIntoExecution","peekListenerBuffer","resolveJobListener","settleListenerJobExecution","workflowsOutbox","workflowRunCounters","bulkUpdateStepStatuses","cancelWorkflowRun","createRerunWorkflowRun","createWorkflowRun","evaluateJobActivations","failJobExecutionAsTimedOut","failWorkflowRunAsTimedOut","getFirstJobExecutionByJobId","getJobById","getJobExecutionById","getJobExecutionDetail","getJobExecutionFailureOrigin","getJobExecutionsByJobId","getJobExecutionsByWorkflowRunAttemptId","getJobScope","getJobsByWorkflowRunAttemptId","getJobsByWorkflowRunId","getLatestAttempt","getLatestJobExecutionByJobId","getStepAttemptDetail","getStepAttempts","getStepAttemptsByJobIds","getStepById","getStepByIdForJobExecution","getStepsByJobExecutionId","getStepsByJobExecutionIdForUpdate","getWorkflowJobExecutionDepth","getWorkflowRunAggregates","getWorkflowRunAttemptById","getWorkflowRunByAttemptId","getWorkflowRunById","getWorkflowRunDetail","listRunAttempts","listStepAttemptIdsByJobId","listWorkflowRunJobSummaries","listWorkflowRuns","listWorkflowRunsByProject","queueJobExecution","recordJobExecutionStartedAt","resolveJobExecutionAfterLeaseExpiry","resolveJobStatusFromJobExecutions","updateJobExecutionStatus","updateJobStatus","updateWorkflowRunStatus","migrationsPath","url"],"mappings":"AAAA,SAAQA,OAAO,EAAEC,OAAO,QAAO,YAAY;AAC3C,SAAQC,aAAa,QAAO,WAAW;AAEvC,SAAQC,OAAO,EAAEC,EAAE,EAAEC,MAAM,QAAO,UAAU;AAC5C,SAGEC,sBAAsB,QACjB,2BAA2B;AAQlC,SACEC,mBAAmB,EACnBC,oBAAoB,EACpBC,gCAAgC,EAChCC,kBAAkB,EAClBC,kBAAkB,EAClBC,0BAA0B,QACrB,qBAAqB;AAC5B,SAAQC,eAAe,QAAO,qBAAqB;AACnD,SAAQC,mBAAmB,QAAO,oCAAoC;AAyBtE,SACEC,sBAAsB,EACtBC,iBAAiB,EACjBC,sBAAsB,EACtBC,iBAAiB,EACjBC,sBAAsB,EACtBC,0BAA0B,EAC1BC,yBAAyB,EACzBC,2BAA2B,EAC3BC,UAAU,EACVC,mBAAmB,EACnBC,qBAAqB,EACrBC,4BAA4B,EAC5BC,uBAAuB,EACvBC,sCAAsC,EACtCC,WAAW,EACXC,6BAA6B,EAC7BC,sBAAsB,EACtBC,gBAAgB,EAChBC,4BAA4B,EAC5BC,oBAAoB,EACpBC,eAAe,EACfC,uBAAuB,EACvBC,WAAW,EACXC,0BAA0B,EAC1BC,wBAAwB,EACxBC,iCAAiC,EACjCC,4BAA4B,EAC5BC,wBAAwB,EACxBC,yBAAyB,EACzBC,yBAAyB,EACzBC,kBAAkB,EAClBC,oBAAoB,EACpBC,eAAe,EACfC,yBAAyB,EACzBC,2BAA2B,EAC3BC,gBAAgB,EAChBC,yBAAyB,EACzBC,iBAAiB,EACjBC,2BAA2B,EAC3BC,mCAAmC,EACnCC,iCAAiC,EACjCC,wBAAwB,EACxBC,eAAe,EACfC,uBAAuB,QAClB,qBAAqB;AAE5B,OAAO,MAAMC,iBAAiB1D,QAAQD,QAAQE,cAAc,YAAY0D,GAAG,IAAI,iBAAiB"}
@@ -151,7 +151,7 @@ export declare const steps: import("drizzle-orm/pg-core").PgTableWithColumns<{
151
151
  tableName: "steps";
152
152
  dataType: "string";
153
153
  columnType: "PgText";
154
- data: "agent" | "checkout" | "run" | "setup";
154
+ data: "agent" | "checkout" | "run" | "setup" | "tool";
155
155
  driverParam: string;
156
156
  notNull: true;
157
157
  hasDefault: false;
@@ -163,7 +163,7 @@ export declare const steps: import("drizzle-orm/pg-core").PgTableWithColumns<{
163
163
  identity: undefined;
164
164
  generated: undefined;
165
165
  }, {}, {
166
- $type: "agent" | "checkout" | "run" | "setup";
166
+ $type: "agent" | "checkout" | "run" | "setup" | "tool";
167
167
  }>;
168
168
  config: import("drizzle-orm/pg-core").PgColumn<{
169
169
  name: "config";
@@ -113,7 +113,7 @@ export declare const workflowRunAttempts: import("drizzle-orm/pg-core").PgTableW
113
113
  dataType: "json";
114
114
  columnType: "PgJsonb";
115
115
  data: WorkflowModel | {
116
- version: 2;
116
+ version: 2 | 3;
117
117
  model: WorkflowModel;
118
118
  };
119
119
  driverParam: unknown;
@@ -128,7 +128,7 @@ export declare const workflowRunAttempts: import("drizzle-orm/pg-core").PgTableW
128
128
  generated: undefined;
129
129
  }, {}, {
130
130
  $type: WorkflowModel | {
131
- version: 2;
131
+ version: 2 | 3;
132
132
  model: WorkflowModel;
133
133
  };
134
134
  }>;
@@ -21,6 +21,7 @@ export declare function writeJobStepsSettledOutbox(tx: Tx, params: {
21
21
  status: 'succeeded' | 'failed';
22
22
  }): Promise<void>;
23
23
  export declare function writeStepAttemptTerminatedOutbox(tx: Tx, params: {
24
+ stepAttemptId: string;
24
25
  stepId: string;
25
26
  attempt: number;
26
27
  status: 'succeeded' | 'failed' | 'cancelled';
@@ -1 +1 @@
1
- {"version":3,"file":"outbox.d.ts","sourceRoot":"","sources":["../../../src/db/workflow-runs/outbox.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAMnB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAC,EAAE,EAAC,MAAM,UAAU,CAAC;AAMjC,wBAAsB,6BAA6B,CACjD,EAAE,EAAE,EAAE,EACN,MAAM,EAAE;IACN,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,EAAE,IAAI,CAAC;CAChB,GACA,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED,wBAAsB,iCAAiC,CACrD,EAAE,EAAE,EAAE,EACN,MAAM,EAAE;IACN,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,YAAY,EAAE,eAAe,GAAG,IAAI,CAAC;IACrC,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACjD,GACA,OAAO,CAAC,IAAI,CAAC,CAsBf;AAMD,wBAAsB,0BAA0B,CAC9C,EAAE,EAAE,EAAE,EACN,MAAM,EAAE;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAA;CAAC,GAC9E,OAAO,CAAC,IAAI,CAAC,CAaf;AAED,wBAAsB,gCAAgC,CACpD,EAAE,EAAE,EAAE,EACN,MAAM,EAAE;IACN,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;IAC7C,UAAU,EAAE,aAAa,CAAC;CAC3B,GACA,OAAO,CAAC,IAAI,CAAC,CAiBf;AA8BD,wBAAsB,8BAA8B,CAClD,EAAE,EAAE,EAAE,EACN,MAAM,EAAE;IACN,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;CAClB,GACA,OAAO,CAAC,IAAI,CAAC,CAef"}
1
+ {"version":3,"file":"outbox.d.ts","sourceRoot":"","sources":["../../../src/db/workflow-runs/outbox.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAMnB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAC,EAAE,EAAC,MAAM,UAAU,CAAC;AAMjC,wBAAsB,6BAA6B,CACjD,EAAE,EAAE,EAAE,EACN,MAAM,EAAE;IACN,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,EAAE,IAAI,CAAC;CAChB,GACA,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED,wBAAsB,iCAAiC,CACrD,EAAE,EAAE,EAAE,EACN,MAAM,EAAE;IACN,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,YAAY,EAAE,eAAe,GAAG,IAAI,CAAC;IACrC,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACjD,GACA,OAAO,CAAC,IAAI,CAAC,CAsBf;AAMD,wBAAsB,0BAA0B,CAC9C,EAAE,EAAE,EAAE,EACN,MAAM,EAAE;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAA;CAAC,GAC9E,OAAO,CAAC,IAAI,CAAC,CAaf;AAED,wBAAsB,gCAAgC,CACpD,EAAE,EAAE,EAAE,EACN,MAAM,EAAE;IACN,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;IAC7C,UAAU,EAAE,aAAa,CAAC;CAC3B,GACA,OAAO,CAAC,IAAI,CAAC,CAkBf;AA8BD,wBAAsB,8BAA8B,CAClD,EAAE,EAAE,EAAE,EACN,MAAM,EAAE;IACN,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;CAClB,GACA,OAAO,CAAC,IAAI,CAAC,CAef"}
@@ -68,7 +68,8 @@ export async function writeStepAttemptTerminatedOutbox(tx, params) {
68
68
  stepId: params.stepId,
69
69
  attempt: params.attempt,
70
70
  status: params.status,
71
- logOutcome: params.logOutcome
71
+ logOutcome: params.logOutcome,
72
+ stepAttemptId: params.stepAttemptId
72
73
  }
73
74
  });
74
75
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/db/workflow-runs/outbox.ts"],"sourcesContent":["import {\n type LogOutcomeDto,\n WORKFLOWS_JOB_EXECUTION_QUEUED,\n WORKFLOWS_JOB_EXECUTION_TERMINATED,\n WORKFLOWS_JOB_STEPS_SETTLED,\n WORKFLOWS_STEP_ATTEMPT_TERMINATED,\n WORKFLOWS_STEP_RESTART_ENQUEUED,\n} from '@shipfox/api-workflows-dto';\nimport {eq} from 'drizzle-orm';\nimport type {JobStatusReason} from '#core/entities/job.js';\nimport type {JobExecutionStatus} from '#core/entities/job-execution.js';\nimport type {Tx} from '../db.js';\nimport {writeWorkflowsOutboxEvent} from '../outbox-writes.js';\nimport {jobExecutions} from '../schema/job-executions.js';\nimport {steps} from '../schema/steps.js';\nimport {getWorkflowContextForJob} from './shared.js';\n\nexport async function writeJobExecutionQueuedOutbox(\n tx: Tx,\n params: {\n jobId: string;\n jobExecutionId: string;\n requiredLabels: string[];\n queuedAt: Date;\n },\n): Promise<void> {\n const identity = await getWorkflowContextForJob(params.jobId, tx);\n\n await writeWorkflowsOutboxEvent(tx, {\n type: WORKFLOWS_JOB_EXECUTION_QUEUED,\n payload: {\n jobId: params.jobId,\n jobExecutionId: params.jobExecutionId,\n workflowRunId: identity.workflowRunId,\n workflowRunAttemptId: identity.workflowRunAttemptId,\n workspaceId: identity.workspaceId,\n projectId: identity.projectId,\n requiredLabels: params.requiredLabels,\n queuedAt: params.queuedAt.toISOString(),\n },\n });\n}\n\nexport async function writeJobExecutionTerminatedOutbox(\n tx: Tx,\n params: {\n jobId: string;\n jobExecutionId: string;\n status: JobExecutionStatus;\n statusReason: JobStatusReason | null;\n statusReasonMessage?: string | null | undefined;\n },\n): Promise<void> {\n if (\n params.status !== 'succeeded' &&\n params.status !== 'failed' &&\n params.status !== 'cancelled'\n ) {\n throw new Error(`Cannot enqueue terminal job execution event for status ${params.status}`);\n }\n const identity = await getWorkflowContextForJob(params.jobId, tx);\n\n await writeWorkflowsOutboxEvent(tx, {\n type: WORKFLOWS_JOB_EXECUTION_TERMINATED,\n payload: {\n jobId: params.jobId,\n jobExecutionId: params.jobExecutionId,\n workflowRunId: identity.workflowRunId,\n workflowRunAttemptId: identity.workflowRunAttemptId,\n status: params.status,\n statusReason: params.statusReason,\n statusReasonMessage: params.statusReasonMessage ?? null,\n },\n });\n}\n\n// Enqueue the steps-settled signal in the same transaction as the final per-step\n// result, so per-step execution observes it exactly once (the outbox is at-least-once;\n// the job workflow dedupes the signal). Drives the Temporal JOB_FINISHED_SIGNAL; the\n// job's terminal fact is emitted separately by updateJobStatusAtVersion.\nexport async function writeJobStepsSettledOutbox(\n tx: Tx,\n params: {jobId: string; jobExecutionId: string; status: 'succeeded' | 'failed'},\n): Promise<void> {\n const identity = await getWorkflowContextForJob(params.jobId, tx);\n\n await writeWorkflowsOutboxEvent(tx, {\n type: WORKFLOWS_JOB_STEPS_SETTLED,\n payload: {\n jobId: params.jobId,\n jobExecutionId: params.jobExecutionId,\n workflowRunId: identity.workflowRunId,\n workflowRunAttemptId: identity.workflowRunAttemptId,\n status: params.status,\n },\n });\n}\n\nexport async function writeStepAttemptTerminatedOutbox(\n tx: Tx,\n params: {\n stepId: string;\n attempt: number;\n status: 'succeeded' | 'failed' | 'cancelled';\n logOutcome: LogOutcomeDto;\n },\n): Promise<void> {\n const identity = await getStepAttemptTerminatedOutboxIdentity(tx, params.stepId);\n\n await writeWorkflowsOutboxEvent(tx, {\n type: WORKFLOWS_STEP_ATTEMPT_TERMINATED,\n payload: {\n jobId: identity.jobId,\n workflowRunId: identity.workflowRunId,\n workflowRunAttemptId: identity.workflowRunAttemptId,\n workspaceId: identity.workspaceId,\n projectId: identity.projectId,\n stepId: params.stepId,\n attempt: params.attempt,\n status: params.status,\n logOutcome: params.logOutcome,\n },\n });\n}\n\nasync function getStepAttemptTerminatedOutboxIdentity(\n tx: Tx,\n stepId: string,\n): Promise<{\n jobId: string;\n workflowRunId: string;\n workflowRunAttemptId: string;\n workspaceId: string;\n projectId: string;\n}> {\n const rows = await tx\n .select({\n jobId: jobExecutions.jobId,\n })\n .from(steps)\n .innerJoin(jobExecutions, eq(steps.jobExecutionId, jobExecutions.id))\n .where(eq(steps.id, stepId))\n .limit(1);\n const step = rows[0];\n if (!step) {\n throw new Error(`Cannot enqueue step-attempt-terminated event: step ${stepId} not found`);\n }\n\n return getWorkflowContextForJob(step.jobId, tx);\n}\n\n// Enqueue the durable audit record of a restart, in the same transaction as the\n// rewind. Looks up the workflow run id like writeJobStepsSettledOutbox.\nexport async function writeStepRestartEnqueuedOutbox(\n tx: Tx,\n params: {\n jobId: string;\n failedStepId: string;\n failedStepAttempt: number;\n restartFromStepId: string;\n feedback: string;\n },\n): Promise<void> {\n const identity = await getWorkflowContextForJob(params.jobId, tx);\n\n await writeWorkflowsOutboxEvent(tx, {\n type: WORKFLOWS_STEP_RESTART_ENQUEUED,\n payload: {\n jobId: params.jobId,\n workflowRunId: identity.workflowRunId,\n workflowRunAttemptId: identity.workflowRunAttemptId,\n failedStepId: params.failedStepId,\n failedStepAttempt: params.failedStepAttempt,\n restartFromStepId: params.restartFromStepId,\n feedback: params.feedback,\n },\n });\n}\n"],"names":["WORKFLOWS_JOB_EXECUTION_QUEUED","WORKFLOWS_JOB_EXECUTION_TERMINATED","WORKFLOWS_JOB_STEPS_SETTLED","WORKFLOWS_STEP_ATTEMPT_TERMINATED","WORKFLOWS_STEP_RESTART_ENQUEUED","eq","writeWorkflowsOutboxEvent","jobExecutions","steps","getWorkflowContextForJob","writeJobExecutionQueuedOutbox","tx","params","identity","jobId","type","payload","jobExecutionId","workflowRunId","workflowRunAttemptId","workspaceId","projectId","requiredLabels","queuedAt","toISOString","writeJobExecutionTerminatedOutbox","status","Error","statusReason","statusReasonMessage","writeJobStepsSettledOutbox","writeStepAttemptTerminatedOutbox","getStepAttemptTerminatedOutboxIdentity","stepId","attempt","logOutcome","rows","select","from","innerJoin","id","where","limit","step","writeStepRestartEnqueuedOutbox","failedStepId","failedStepAttempt","restartFromStepId","feedback"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/db/workflow-runs/outbox.ts"],"sourcesContent":["import {\n type LogOutcomeDto,\n WORKFLOWS_JOB_EXECUTION_QUEUED,\n WORKFLOWS_JOB_EXECUTION_TERMINATED,\n WORKFLOWS_JOB_STEPS_SETTLED,\n WORKFLOWS_STEP_ATTEMPT_TERMINATED,\n WORKFLOWS_STEP_RESTART_ENQUEUED,\n} from '@shipfox/api-workflows-dto';\nimport {eq} from 'drizzle-orm';\nimport type {JobStatusReason} from '#core/entities/job.js';\nimport type {JobExecutionStatus} from '#core/entities/job-execution.js';\nimport type {Tx} from '../db.js';\nimport {writeWorkflowsOutboxEvent} from '../outbox-writes.js';\nimport {jobExecutions} from '../schema/job-executions.js';\nimport {steps} from '../schema/steps.js';\nimport {getWorkflowContextForJob} from './shared.js';\n\nexport async function writeJobExecutionQueuedOutbox(\n tx: Tx,\n params: {\n jobId: string;\n jobExecutionId: string;\n requiredLabels: string[];\n queuedAt: Date;\n },\n): Promise<void> {\n const identity = await getWorkflowContextForJob(params.jobId, tx);\n\n await writeWorkflowsOutboxEvent(tx, {\n type: WORKFLOWS_JOB_EXECUTION_QUEUED,\n payload: {\n jobId: params.jobId,\n jobExecutionId: params.jobExecutionId,\n workflowRunId: identity.workflowRunId,\n workflowRunAttemptId: identity.workflowRunAttemptId,\n workspaceId: identity.workspaceId,\n projectId: identity.projectId,\n requiredLabels: params.requiredLabels,\n queuedAt: params.queuedAt.toISOString(),\n },\n });\n}\n\nexport async function writeJobExecutionTerminatedOutbox(\n tx: Tx,\n params: {\n jobId: string;\n jobExecutionId: string;\n status: JobExecutionStatus;\n statusReason: JobStatusReason | null;\n statusReasonMessage?: string | null | undefined;\n },\n): Promise<void> {\n if (\n params.status !== 'succeeded' &&\n params.status !== 'failed' &&\n params.status !== 'cancelled'\n ) {\n throw new Error(`Cannot enqueue terminal job execution event for status ${params.status}`);\n }\n const identity = await getWorkflowContextForJob(params.jobId, tx);\n\n await writeWorkflowsOutboxEvent(tx, {\n type: WORKFLOWS_JOB_EXECUTION_TERMINATED,\n payload: {\n jobId: params.jobId,\n jobExecutionId: params.jobExecutionId,\n workflowRunId: identity.workflowRunId,\n workflowRunAttemptId: identity.workflowRunAttemptId,\n status: params.status,\n statusReason: params.statusReason,\n statusReasonMessage: params.statusReasonMessage ?? null,\n },\n });\n}\n\n// Enqueue the steps-settled signal in the same transaction as the final per-step\n// result, so per-step execution observes it exactly once (the outbox is at-least-once;\n// the job workflow dedupes the signal). Drives the Temporal JOB_FINISHED_SIGNAL; the\n// job's terminal fact is emitted separately by updateJobStatusAtVersion.\nexport async function writeJobStepsSettledOutbox(\n tx: Tx,\n params: {jobId: string; jobExecutionId: string; status: 'succeeded' | 'failed'},\n): Promise<void> {\n const identity = await getWorkflowContextForJob(params.jobId, tx);\n\n await writeWorkflowsOutboxEvent(tx, {\n type: WORKFLOWS_JOB_STEPS_SETTLED,\n payload: {\n jobId: params.jobId,\n jobExecutionId: params.jobExecutionId,\n workflowRunId: identity.workflowRunId,\n workflowRunAttemptId: identity.workflowRunAttemptId,\n status: params.status,\n },\n });\n}\n\nexport async function writeStepAttemptTerminatedOutbox(\n tx: Tx,\n params: {\n stepAttemptId: string;\n stepId: string;\n attempt: number;\n status: 'succeeded' | 'failed' | 'cancelled';\n logOutcome: LogOutcomeDto;\n },\n): Promise<void> {\n const identity = await getStepAttemptTerminatedOutboxIdentity(tx, params.stepId);\n\n await writeWorkflowsOutboxEvent(tx, {\n type: WORKFLOWS_STEP_ATTEMPT_TERMINATED,\n payload: {\n jobId: identity.jobId,\n workflowRunId: identity.workflowRunId,\n workflowRunAttemptId: identity.workflowRunAttemptId,\n workspaceId: identity.workspaceId,\n projectId: identity.projectId,\n stepId: params.stepId,\n attempt: params.attempt,\n status: params.status,\n logOutcome: params.logOutcome,\n stepAttemptId: params.stepAttemptId,\n },\n });\n}\n\nasync function getStepAttemptTerminatedOutboxIdentity(\n tx: Tx,\n stepId: string,\n): Promise<{\n jobId: string;\n workflowRunId: string;\n workflowRunAttemptId: string;\n workspaceId: string;\n projectId: string;\n}> {\n const rows = await tx\n .select({\n jobId: jobExecutions.jobId,\n })\n .from(steps)\n .innerJoin(jobExecutions, eq(steps.jobExecutionId, jobExecutions.id))\n .where(eq(steps.id, stepId))\n .limit(1);\n const step = rows[0];\n if (!step) {\n throw new Error(`Cannot enqueue step-attempt-terminated event: step ${stepId} not found`);\n }\n\n return getWorkflowContextForJob(step.jobId, tx);\n}\n\n// Enqueue the durable audit record of a restart, in the same transaction as the\n// rewind. Looks up the workflow run id like writeJobStepsSettledOutbox.\nexport async function writeStepRestartEnqueuedOutbox(\n tx: Tx,\n params: {\n jobId: string;\n failedStepId: string;\n failedStepAttempt: number;\n restartFromStepId: string;\n feedback: string;\n },\n): Promise<void> {\n const identity = await getWorkflowContextForJob(params.jobId, tx);\n\n await writeWorkflowsOutboxEvent(tx, {\n type: WORKFLOWS_STEP_RESTART_ENQUEUED,\n payload: {\n jobId: params.jobId,\n workflowRunId: identity.workflowRunId,\n workflowRunAttemptId: identity.workflowRunAttemptId,\n failedStepId: params.failedStepId,\n failedStepAttempt: params.failedStepAttempt,\n restartFromStepId: params.restartFromStepId,\n feedback: params.feedback,\n },\n });\n}\n"],"names":["WORKFLOWS_JOB_EXECUTION_QUEUED","WORKFLOWS_JOB_EXECUTION_TERMINATED","WORKFLOWS_JOB_STEPS_SETTLED","WORKFLOWS_STEP_ATTEMPT_TERMINATED","WORKFLOWS_STEP_RESTART_ENQUEUED","eq","writeWorkflowsOutboxEvent","jobExecutions","steps","getWorkflowContextForJob","writeJobExecutionQueuedOutbox","tx","params","identity","jobId","type","payload","jobExecutionId","workflowRunId","workflowRunAttemptId","workspaceId","projectId","requiredLabels","queuedAt","toISOString","writeJobExecutionTerminatedOutbox","status","Error","statusReason","statusReasonMessage","writeJobStepsSettledOutbox","writeStepAttemptTerminatedOutbox","getStepAttemptTerminatedOutboxIdentity","stepId","attempt","logOutcome","stepAttemptId","rows","select","from","innerJoin","id","where","limit","step","writeStepRestartEnqueuedOutbox","failedStepId","failedStepAttempt","restartFromStepId","feedback"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"run-create.d.ts","sourceRoot":"","sources":["../../../src/db/workflow-runs/run-create.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,gDAAgD,CAAC;AAC7F,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,wCAAwC,CAAC;AACjF,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,uCAAuC,CAAC;AAQpF,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,yBAAyB,CAAC;AAKnE,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EACvB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAC,8BAA8B,EAAC,MAAM,iBAAiB,CAAC;AAoB/D,MAAM,MAAM,gBAAgB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,8BAA8B,CAAC,OAAO,CAAC,CAAC;IACxD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAED,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,EAAE,aAAa,CAAC;IACrB,cAAc,EAAE,cAAc,CAAC;IAC/B,mBAAmB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAC7C,cAAc,CAAC,EAAE,sBAAsB,GAAG,IAAI,GAAG,SAAS,CAAC;IAC3D,qBAAqB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,mEAAmE;IACnE,MAAM,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACvC,SAAS,CAAC,EAAE,oBAAoB,GAAG,IAAI,GAAG,SAAS,CAAC;IACpD,oBAAoB,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IACzD,OAAO,CAAC,EAAE,IAAI,CAAC,wBAAwB,EAAE,yBAAyB,CAAC,GAAG,SAAS,CAAC;IAChF,YAAY,CAAC,EAAE,wBAAwB,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;CAC7C;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,CA0M7F;AA2BD,wBAAsB,uBAAuB,CAAC,MAAM,EAAE;IACpD,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,gBAAgB,EAAE,GAAG,SAAS,CAAC;IACxD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,wBAAwB,EAAE,yBAAyB,CAAC,GAAG,SAAS,CAAC;CAC1F,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC,CAkC9C"}
1
+ {"version":3,"file":"run-create.d.ts","sourceRoot":"","sources":["../../../src/db/workflow-runs/run-create.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,gDAAgD,CAAC;AAC7F,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,wCAAwC,CAAC;AACjF,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,uCAAuC,CAAC;AAQpF,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,yBAAyB,CAAC;AAKnE,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EACvB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAC,8BAA8B,EAAC,MAAM,iBAAiB,CAAC;AAoB/D,MAAM,MAAM,gBAAgB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,8BAA8B,CAAC,OAAO,CAAC,CAAC;IACxD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAED,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,EAAE,aAAa,CAAC;IACrB,cAAc,EAAE,cAAc,CAAC;IAC/B,mBAAmB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAC7C,cAAc,CAAC,EAAE,sBAAsB,GAAG,IAAI,GAAG,SAAS,CAAC;IAC3D,qBAAqB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,mEAAmE;IACnE,MAAM,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACvC,SAAS,CAAC,EAAE,oBAAoB,GAAG,IAAI,GAAG,SAAS,CAAC;IACpD,oBAAoB,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IACzD,OAAO,CAAC,EAAE,IAAI,CAAC,wBAAwB,EAAE,yBAAyB,CAAC,GAAG,SAAS,CAAC;IAChF,YAAY,CAAC,EAAE,wBAAwB,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;CAC7C;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,CA0M7F;AA2BD,wBAAsB,uBAAuB,CAAC,MAAM,EAAE;IACpD,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,gBAAgB,EAAE,GAAG,SAAS,CAAC;IACxD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,wBAAwB,EAAE,yBAAyB,CAAC,GAAG,SAAS,CAAC;CAC1F,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC,CAkC9C"}
@@ -356,7 +356,7 @@ function referencedVariables(model, jobs) {
356
356
  collectFieldVariableReferences(step.templates?.name, references, {
357
357
  field: 'step.name'
358
358
  });
359
- collectFieldVariableReferences(step.templates?.workingDirectory, references, {
359
+ collectFieldVariableReferences(step.kind === 'tool' ? undefined : step.templates?.workingDirectory, references, {
360
360
  field: 'step.working_directory'
361
361
  });
362
362
  if (step.kind === 'run') {
@@ -374,6 +374,16 @@ function referencedVariables(model, jobs) {
374
374
  collectFieldVariableReferences(step.templates?.provider, references, {
375
375
  field: 'agent.provider'
376
376
  });
377
+ } else if (step.kind === 'tool') {
378
+ collectTemplateTreeVariableReferences(step.templates?.with, references, {
379
+ field: 'tool.with'
380
+ });
381
+ for (const [key, expression] of Object.entries(step.outputMappings ?? {})){
382
+ collectExpressionVariableReferences(expression, references, {
383
+ field: 'tool.outputs',
384
+ envKey: key
385
+ });
386
+ }
377
387
  } else if (step.kind === 'checkout') {
378
388
  for (const [key, field] of WORKFLOW_MODEL_CHECKOUT_TARGET_FIELDS){
379
389
  collectFieldVariableReferences(step.checkout.templates?.[key], references, {
@@ -420,6 +430,44 @@ function collectFieldVariableReferences(template, references, source) {
420
430
  }
421
431
  }
422
432
  }
433
+ /**
434
+ * Collect `vars.*` references from a tool step's `with` template tree: a
435
+ * `WorkflowJsonTemplateTree` mirrors the authored `with` payload with every
436
+ * interpolated string leaf replaced by its parsed template, so walk it like
437
+ * the authored structure and collect from each leaf template.
438
+ */ function collectTemplateTreeVariableReferences(tree, references, source) {
439
+ if (tree === undefined) return;
440
+ if (Array.isArray(tree)) {
441
+ // A field template is itself an array of segments; a `with` list is an
442
+ // array of child trees. Segments carry a `kind`, so distinguish the two.
443
+ if (tree.every((element)=>isFieldTemplateSegment(element))) {
444
+ collectFieldVariableReferences(tree, references, source);
445
+ return;
446
+ }
447
+ for (const child of tree)collectTemplateTreeVariableReferences(child, references, source);
448
+ return;
449
+ }
450
+ if (typeof tree === 'object') {
451
+ for (const child of Object.values(tree)){
452
+ collectTemplateTreeVariableReferences(child, references, source);
453
+ }
454
+ }
455
+ }
456
+ function isFieldTemplateSegment(value) {
457
+ return typeof value === 'object' && value !== null && (value.kind === 'literal' || value.kind === 'deferred');
458
+ }
459
+ function collectExpressionVariableReferences(expression, references, source) {
460
+ const keyAccess = analyzeContextKeyAccess(expression);
461
+ for (const reference of keyAccess.references){
462
+ if (reference.root !== 'vars') continue;
463
+ references.push({
464
+ key: reference.key,
465
+ field: source.field,
466
+ source: expression.source,
467
+ envKey: source.envKey
468
+ });
469
+ }
470
+ }
423
471
  function logTemplateDiagnostics(params) {
424
472
  if (params.diagnostics.length === 0) return;
425
473
  logger().warn({