@shipfox/api-workflows 14.0.0 → 16.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.
@@ -3,7 +3,7 @@ import { workflowsInterModuleContract } from '@shipfox/api-workflows-dto/inter-m
3
3
  import { createInterModuleKnownError, defineInterModulePresentation } from '@shipfox/inter-module';
4
4
  import { DEFAULT_HARNESS, harnessSchema } from '@shipfox/workflow-document';
5
5
  import { InvalidJobRunnerLabelsError, WorkspaceDeletedError, WorkspaceNotFoundError, WorkspaceSuspendedError } from '#core/errors.js';
6
- import { AgentConfigUnresolvableError, AgentIntegrationMaterializationError, DefinitionNotFoundError, InterpolationUnresolvableError, ProjectMismatchError, runWorkflow } from '#core/index.js';
6
+ import { AgentConfigUnresolvableError, AgentIntegrationMaterializationError, DefinitionNotFoundError, InterpolationUnresolvableError, ProjectMismatchError, runDevWorkflow, runWorkflow } from '#core/index.js';
7
7
  import { resolveWorkflowRunTriggerReference } from '#core/resolve-trigger-reference.js';
8
8
  import { assertWorkspaceAdmitsNewJobs } from '#core/workspace-admission.js';
9
9
  import { getJobScope, getStepById, getStepByIdForJobExecution } from '#db/index.js';
@@ -35,6 +35,35 @@ export function createWorkflowsInterModulePresentation(params) {
35
35
  throw toStartRunKnownError(error, input.definitionId);
36
36
  }
37
37
  },
38
+ startDevRun: async (input)=>{
39
+ try {
40
+ await assertWorkspaceAdmitsNewJobs(params.workspaces, input.workspaceId);
41
+ const run = await runDevWorkflow(params.agent, {
42
+ workspaceId: input.workspaceId,
43
+ projectId: input.projectId,
44
+ workflowId: input.workflowId,
45
+ model: input.model,
46
+ sourceSnapshot: input.sourceSnapshot,
47
+ devSource: {
48
+ ...input.devSource,
49
+ replayOfEventId: input.devSource.replayOfEventId ?? null
50
+ },
51
+ triggerPayload: input.triggerPayload,
52
+ triggerConnectionId: input.triggerConnectionId,
53
+ inputs: input.inputs,
54
+ integrations: params.integrations,
55
+ projects: params.projects
56
+ }, {
57
+ secrets: params.secrets
58
+ });
59
+ return {
60
+ id: run.id,
61
+ name: run.name
62
+ };
63
+ } catch (error) {
64
+ throw toStartDevRunKnownError(error);
65
+ }
66
+ },
38
67
  resolveWorkflowRunTriggerReference: async (input)=>await resolveWorkflowRunTriggerReference({
39
68
  workspaceId: input.workspaceId,
40
69
  triggerConnectionId: input.triggerConnectionId,
@@ -118,8 +147,8 @@ export function createWorkflowsInterModulePresentation(params) {
118
147
  }
119
148
  export function toStartRunKnownError(error, definitionId) {
120
149
  const method = workflowsInterModuleContract.methods.startRunFromTrigger;
121
- const workspaceError = toWorkspaceAdmissionKnownError(method, error);
122
- if (workspaceError !== undefined) return workspaceError;
150
+ const mapped = toRunCreationKnownError(method, error);
151
+ if (mapped !== undefined) return mapped;
123
152
  if (error instanceof DefinitionNotFoundError) {
124
153
  return createInterModuleKnownError(method, 'definition-not-found', {
125
154
  definitionId
@@ -128,6 +157,14 @@ export function toStartRunKnownError(error, definitionId) {
128
157
  if (error instanceof ProjectMismatchError) {
129
158
  return createInterModuleKnownError(method, 'project-mismatch', {});
130
159
  }
160
+ return error;
161
+ }
162
+ export function toStartDevRunKnownError(error) {
163
+ return toRunCreationKnownError(workflowsInterModuleContract.methods.startDevRun, error) ?? error;
164
+ }
165
+ function toRunCreationKnownError(method, error) {
166
+ const workspaceError = toWorkspaceAdmissionKnownError(method, error);
167
+ if (workspaceError !== undefined) return workspaceError;
131
168
  if (error instanceof AgentConfigUnresolvableError) {
132
169
  return createInterModuleKnownError(method, 'agent-config-unresolvable', {
133
170
  definitionId: error.definitionId
@@ -153,7 +190,7 @@ export function toStartRunKnownError(error, definitionId) {
153
190
  ]
154
191
  });
155
192
  }
156
- return error;
193
+ return undefined;
157
194
  }
158
195
  function toWorkspaceAdmissionKnownError(method, error) {
159
196
  if (error instanceof WorkspaceSuspendedError) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/presentation/inter-module.ts"],"sourcesContent":["import {materializedAgentStepConfigSchema} from '@shipfox/api-agent-dto';\nimport type {AgentInterModuleClient} from '@shipfox/api-agent-dto/inter-module';\nimport type {DefinitionsInterModuleClient} from '@shipfox/api-definitions-dto/inter-module';\nimport type {IntegrationsModuleClient} from '@shipfox/api-integration-core-dto/inter-module';\nimport type {ProjectsModuleClient} from '@shipfox/api-projects-dto/inter-module';\nimport type {RunnersInterModuleClient} from '@shipfox/api-runners-dto/inter-module';\nimport type {SecretsInterModuleClient} from '@shipfox/api-secrets-dto/inter-module';\nimport {workflowsInterModuleContract} from '@shipfox/api-workflows-dto/inter-module';\nimport type {WorkspacesInterModuleClient} from '@shipfox/api-workspaces-dto/inter-module';\nimport {\n createInterModuleKnownError,\n defineInterModulePresentation,\n type InterModuleKnownErrorFor,\n type InterModulePresentation,\n} from '@shipfox/inter-module';\nimport {DEFAULT_HARNESS, harnessSchema} from '@shipfox/workflow-document';\nimport type {WorkflowRunTriggerReference} from '#core/entities/workflow-run.js';\nimport {\n InvalidJobRunnerLabelsError,\n WorkspaceDeletedError,\n WorkspaceNotFoundError,\n WorkspaceSuspendedError,\n} from '#core/errors.js';\nimport {\n AgentConfigUnresolvableError,\n AgentIntegrationMaterializationError,\n DefinitionNotFoundError,\n InterpolationUnresolvableError,\n ProjectMismatchError,\n runWorkflow,\n} from '#core/index.js';\nimport {resolveWorkflowRunTriggerReference} from '#core/resolve-trigger-reference.js';\nimport {assertWorkspaceAdmitsNewJobs} from '#core/workspace-admission.js';\nimport {getJobScope, getStepById, getStepByIdForJobExecution} from '#db/index.js';\nimport {deliverEventToListener} from '#db/job-listener-events.js';\n\ntype WorkspaceAdmissionKnownError = InterModuleKnownErrorFor<\n typeof workflowsInterModuleContract.methods.deliverEventToJobListener\n>;\n\nexport function createWorkflowsInterModulePresentation(params: {\n agent: AgentInterModuleClient;\n definitions: DefinitionsInterModuleClient;\n workspaces: WorkspacesInterModuleClient;\n secrets: Pick<SecretsInterModuleClient, 'getVariablesByNamespace'>;\n runners: RunnersInterModuleClient;\n integrations: IntegrationsModuleClient;\n projects: ProjectsModuleClient;\n}): InterModulePresentation<typeof workflowsInterModuleContract> {\n return defineInterModulePresentation(workflowsInterModuleContract, {\n startRunFromTrigger: async (input) => {\n try {\n await assertWorkspaceAdmitsNewJobs(params.workspaces, input.workspaceId);\n const run = await runWorkflow(\n params.definitions,\n {\n agent: params.agent,\n workspaceId: input.workspaceId,\n projectId: input.projectId,\n definitionId: input.definitionId,\n triggerPayload: input.triggerPayload,\n triggerConnectionId: input.triggerConnectionId,\n inputs: input.inputs,\n triggerIdempotencyKey: input.idempotencyKey,\n integrations: params.integrations,\n projects: params.projects,\n },\n {secrets: params.secrets},\n );\n return {id: run.id, name: run.name};\n } catch (error) {\n throw toStartRunKnownError(error, input.definitionId);\n }\n },\n resolveWorkflowRunTriggerReference: async (input) =>\n await resolveWorkflowRunTriggerReference({\n workspaceId: input.workspaceId,\n triggerConnectionId: input.triggerConnectionId,\n triggerPayload: input.triggerPayload,\n integrations: params.integrations,\n projects: params.projects,\n }),\n deliverEventToJobListener: async (input) => {\n const method = workflowsInterModuleContract.methods.deliverEventToJobListener;\n try {\n const scope = input.disposition === 'fire' ? await getJobScope(input.jobId) : undefined;\n if (scope) {\n await assertWorkspaceAdmitsNewJobs(params.workspaces, scope.workspaceId);\n }\n\n let triggerReference: WorkflowRunTriggerReference | null = null;\n if (input.triggerReference !== undefined) {\n triggerReference = input.triggerReference;\n } else if (scope) {\n triggerReference = await resolveWorkflowRunTriggerReference({\n workspaceId: scope.workspaceId,\n triggerConnectionId: input.triggerConnectionId,\n triggerPayload: {\n provider: input.provider,\n source: input.source,\n event: input.event,\n deliveryId: input.deliveryId,\n data: input.payload,\n },\n integrations: params.integrations,\n projects: params.projects,\n });\n }\n return await deliverEventToListener({\n ...input,\n triggerReference,\n receivedAt: new Date(input.receivedAt),\n });\n } catch (error) {\n const workspaceError = toWorkspaceAdmissionKnownError(method, error);\n if (workspaceError !== undefined) throw workspaceError;\n throw error;\n }\n },\n getStepLogContext: async ({stepId}) => {\n const step = await getStepById(stepId);\n const parsed = harnessSchema.safeParse(step?.config.harness);\n return {harness: parsed.success ? parsed.data : DEFAULT_HARNESS};\n },\n getLeasedAgentToolContext: async (input) => {\n const method = workflowsInterModuleContract.methods.getLeasedAgentToolContext;\n const {active: leaseIsActive} = await params.runners.getLeaseState({\n jobId: input.jobId,\n jobExecutionId: input.jobExecutionId,\n runnerSessionId: input.runnerSessionId,\n });\n if (!leaseIsActive) throw createInterModuleKnownError(method, 'lease-not-active', {});\n\n const step = await getStepByIdForJobExecution({\n stepId: input.stepId,\n jobExecutionId: input.jobExecutionId,\n });\n if (!step) throw createInterModuleKnownError(method, 'step-not-found', {});\n\n const scope = await getJobScope(input.jobId);\n if (!scope) throw createInterModuleKnownError(method, 'job-not-found', {});\n if (step.currentAttempt !== input.attempt) {\n throw createInterModuleKnownError(method, 'step-attempt-mismatch', {});\n }\n if (step.status !== 'running')\n throw createInterModuleKnownError(method, 'step-not-running', {});\n if (step.type !== 'agent')\n throw createInterModuleKnownError(method, 'leased-step-not-agent', {});\n\n const config = materializedAgentStepConfigSchema.safeParse(step.config);\n if (!config.success) {\n throw createInterModuleKnownError(method, 'agent-step-config-invalid', {});\n }\n return {workspaceId: scope.workspaceId, integrations: config.data.integrations ?? []};\n },\n });\n}\n\nexport function toStartRunKnownError(error: unknown, definitionId: string): unknown {\n const method = workflowsInterModuleContract.methods.startRunFromTrigger;\n const workspaceError = toWorkspaceAdmissionKnownError(method, error);\n if (workspaceError !== undefined) return workspaceError;\n if (error instanceof DefinitionNotFoundError) {\n return createInterModuleKnownError(method, 'definition-not-found', {definitionId});\n }\n if (error instanceof ProjectMismatchError) {\n return createInterModuleKnownError(method, 'project-mismatch', {});\n }\n if (error instanceof AgentConfigUnresolvableError) {\n return createInterModuleKnownError(method, 'agent-config-unresolvable', {\n definitionId: error.definitionId,\n });\n }\n if (error instanceof AgentIntegrationMaterializationError) {\n return createInterModuleKnownError(method, 'agent-integration-materialization-failed', {});\n }\n if (error instanceof InterpolationUnresolvableError) {\n return createInterModuleKnownError(method, 'interpolation-unresolvable', {\n definitionId: error.definitionId,\n field: error.field,\n source: error.source,\n ...(error.envKey === undefined ? {} : {envKey: error.envKey}),\n });\n }\n if (error instanceof InvalidJobRunnerLabelsError) {\n return createInterModuleKnownError(method, 'invalid-job-runner-labels', {\n labels: [...error.labels],\n });\n }\n return error;\n}\n\nfunction toWorkspaceAdmissionKnownError(\n method:\n | typeof workflowsInterModuleContract.methods.startRunFromTrigger\n | typeof workflowsInterModuleContract.methods.deliverEventToJobListener,\n error: unknown,\n): WorkspaceAdmissionKnownError | undefined {\n if (error instanceof WorkspaceSuspendedError) {\n return createInterModuleKnownError(method, 'workspace-suspended', {\n workspaceId: error.workspaceId,\n });\n }\n if (error instanceof WorkspaceDeletedError) {\n return createInterModuleKnownError(method, 'workspace-deleted', {\n workspaceId: error.workspaceId,\n });\n }\n if (error instanceof WorkspaceNotFoundError) {\n return createInterModuleKnownError(method, 'workspace-not-found', {\n workspaceId: error.workspaceId,\n });\n }\n return undefined;\n}\n"],"names":["materializedAgentStepConfigSchema","workflowsInterModuleContract","createInterModuleKnownError","defineInterModulePresentation","DEFAULT_HARNESS","harnessSchema","InvalidJobRunnerLabelsError","WorkspaceDeletedError","WorkspaceNotFoundError","WorkspaceSuspendedError","AgentConfigUnresolvableError","AgentIntegrationMaterializationError","DefinitionNotFoundError","InterpolationUnresolvableError","ProjectMismatchError","runWorkflow","resolveWorkflowRunTriggerReference","assertWorkspaceAdmitsNewJobs","getJobScope","getStepById","getStepByIdForJobExecution","deliverEventToListener","createWorkflowsInterModulePresentation","params","startRunFromTrigger","input","workspaces","workspaceId","run","definitions","agent","projectId","definitionId","triggerPayload","triggerConnectionId","inputs","triggerIdempotencyKey","idempotencyKey","integrations","projects","secrets","id","name","error","toStartRunKnownError","deliverEventToJobListener","method","methods","scope","disposition","jobId","undefined","triggerReference","provider","source","event","deliveryId","data","payload","receivedAt","Date","workspaceError","toWorkspaceAdmissionKnownError","getStepLogContext","stepId","step","parsed","safeParse","config","harness","success","getLeasedAgentToolContext","active","leaseIsActive","runners","getLeaseState","jobExecutionId","runnerSessionId","currentAttempt","attempt","status","type","field","envKey","labels"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/presentation/inter-module.ts"],"sourcesContent":["import {materializedAgentStepConfigSchema} from '@shipfox/api-agent-dto';\nimport type {AgentInterModuleClient} from '@shipfox/api-agent-dto/inter-module';\nimport type {DefinitionsInterModuleClient} from '@shipfox/api-definitions-dto/inter-module';\nimport type {IntegrationsModuleClient} from '@shipfox/api-integration-core-dto/inter-module';\nimport type {ProjectsModuleClient} from '@shipfox/api-projects-dto/inter-module';\nimport type {RunnersInterModuleClient} from '@shipfox/api-runners-dto/inter-module';\nimport type {SecretsInterModuleClient} from '@shipfox/api-secrets-dto/inter-module';\nimport {workflowsInterModuleContract} from '@shipfox/api-workflows-dto/inter-module';\nimport type {WorkspacesInterModuleClient} from '@shipfox/api-workspaces-dto/inter-module';\nimport {\n createInterModuleKnownError,\n defineInterModulePresentation,\n type InterModuleKnownErrorFor,\n type InterModulePresentation,\n} from '@shipfox/inter-module';\nimport {DEFAULT_HARNESS, harnessSchema} from '@shipfox/workflow-document';\nimport type {WorkflowRunTriggerReference} from '#core/entities/workflow-run.js';\nimport {\n InvalidJobRunnerLabelsError,\n WorkspaceDeletedError,\n WorkspaceNotFoundError,\n WorkspaceSuspendedError,\n} from '#core/errors.js';\nimport {\n AgentConfigUnresolvableError,\n AgentIntegrationMaterializationError,\n DefinitionNotFoundError,\n InterpolationUnresolvableError,\n ProjectMismatchError,\n runDevWorkflow,\n runWorkflow,\n} from '#core/index.js';\nimport {resolveWorkflowRunTriggerReference} from '#core/resolve-trigger-reference.js';\nimport {assertWorkspaceAdmitsNewJobs} from '#core/workspace-admission.js';\nimport {getJobScope, getStepById, getStepByIdForJobExecution} from '#db/index.js';\nimport {deliverEventToListener} from '#db/job-listener-events.js';\n\ntype WorkspaceAdmissionKnownError = InterModuleKnownErrorFor<\n typeof workflowsInterModuleContract.methods.deliverEventToJobListener\n>;\n\nexport function createWorkflowsInterModulePresentation(params: {\n agent: AgentInterModuleClient;\n definitions: DefinitionsInterModuleClient;\n workspaces: WorkspacesInterModuleClient;\n secrets: Pick<SecretsInterModuleClient, 'getVariablesByNamespace'>;\n runners: RunnersInterModuleClient;\n integrations: IntegrationsModuleClient;\n projects: ProjectsModuleClient;\n}): InterModulePresentation<typeof workflowsInterModuleContract> {\n return defineInterModulePresentation(workflowsInterModuleContract, {\n startRunFromTrigger: async (input) => {\n try {\n await assertWorkspaceAdmitsNewJobs(params.workspaces, input.workspaceId);\n const run = await runWorkflow(\n params.definitions,\n {\n agent: params.agent,\n workspaceId: input.workspaceId,\n projectId: input.projectId,\n definitionId: input.definitionId,\n triggerPayload: input.triggerPayload,\n triggerConnectionId: input.triggerConnectionId,\n inputs: input.inputs,\n triggerIdempotencyKey: input.idempotencyKey,\n integrations: params.integrations,\n projects: params.projects,\n },\n {secrets: params.secrets},\n );\n return {id: run.id, name: run.name};\n } catch (error) {\n throw toStartRunKnownError(error, input.definitionId);\n }\n },\n startDevRun: async (input) => {\n try {\n await assertWorkspaceAdmitsNewJobs(params.workspaces, input.workspaceId);\n const run = await runDevWorkflow(\n params.agent,\n {\n workspaceId: input.workspaceId,\n projectId: input.projectId,\n workflowId: input.workflowId,\n model: input.model,\n sourceSnapshot: input.sourceSnapshot,\n devSource: {\n ...input.devSource,\n replayOfEventId: input.devSource.replayOfEventId ?? null,\n },\n triggerPayload: input.triggerPayload,\n triggerConnectionId: input.triggerConnectionId,\n inputs: input.inputs,\n integrations: params.integrations,\n projects: params.projects,\n },\n {secrets: params.secrets},\n );\n return {id: run.id, name: run.name};\n } catch (error) {\n throw toStartDevRunKnownError(error);\n }\n },\n resolveWorkflowRunTriggerReference: async (input) =>\n await resolveWorkflowRunTriggerReference({\n workspaceId: input.workspaceId,\n triggerConnectionId: input.triggerConnectionId,\n triggerPayload: input.triggerPayload,\n integrations: params.integrations,\n projects: params.projects,\n }),\n deliverEventToJobListener: async (input) => {\n const method = workflowsInterModuleContract.methods.deliverEventToJobListener;\n try {\n const scope = input.disposition === 'fire' ? await getJobScope(input.jobId) : undefined;\n if (scope) {\n await assertWorkspaceAdmitsNewJobs(params.workspaces, scope.workspaceId);\n }\n\n let triggerReference: WorkflowRunTriggerReference | null = null;\n if (input.triggerReference !== undefined) {\n triggerReference = input.triggerReference;\n } else if (scope) {\n triggerReference = await resolveWorkflowRunTriggerReference({\n workspaceId: scope.workspaceId,\n triggerConnectionId: input.triggerConnectionId,\n triggerPayload: {\n provider: input.provider,\n source: input.source,\n event: input.event,\n deliveryId: input.deliveryId,\n data: input.payload,\n },\n integrations: params.integrations,\n projects: params.projects,\n });\n }\n return await deliverEventToListener({\n ...input,\n triggerReference,\n receivedAt: new Date(input.receivedAt),\n });\n } catch (error) {\n const workspaceError = toWorkspaceAdmissionKnownError(method, error);\n if (workspaceError !== undefined) throw workspaceError;\n throw error;\n }\n },\n getStepLogContext: async ({stepId}) => {\n const step = await getStepById(stepId);\n const parsed = harnessSchema.safeParse(step?.config.harness);\n return {harness: parsed.success ? parsed.data : DEFAULT_HARNESS};\n },\n getLeasedAgentToolContext: async (input) => {\n const method = workflowsInterModuleContract.methods.getLeasedAgentToolContext;\n const {active: leaseIsActive} = await params.runners.getLeaseState({\n jobId: input.jobId,\n jobExecutionId: input.jobExecutionId,\n runnerSessionId: input.runnerSessionId,\n });\n if (!leaseIsActive) throw createInterModuleKnownError(method, 'lease-not-active', {});\n\n const step = await getStepByIdForJobExecution({\n stepId: input.stepId,\n jobExecutionId: input.jobExecutionId,\n });\n if (!step) throw createInterModuleKnownError(method, 'step-not-found', {});\n\n const scope = await getJobScope(input.jobId);\n if (!scope) throw createInterModuleKnownError(method, 'job-not-found', {});\n if (step.currentAttempt !== input.attempt) {\n throw createInterModuleKnownError(method, 'step-attempt-mismatch', {});\n }\n if (step.status !== 'running')\n throw createInterModuleKnownError(method, 'step-not-running', {});\n if (step.type !== 'agent')\n throw createInterModuleKnownError(method, 'leased-step-not-agent', {});\n\n const config = materializedAgentStepConfigSchema.safeParse(step.config);\n if (!config.success) {\n throw createInterModuleKnownError(method, 'agent-step-config-invalid', {});\n }\n return {workspaceId: scope.workspaceId, integrations: config.data.integrations ?? []};\n },\n });\n}\n\nexport function toStartRunKnownError(error: unknown, definitionId: string): unknown {\n const method = workflowsInterModuleContract.methods.startRunFromTrigger;\n const mapped = toRunCreationKnownError(method, error);\n if (mapped !== undefined) return mapped;\n if (error instanceof DefinitionNotFoundError) {\n return createInterModuleKnownError(method, 'definition-not-found', {definitionId});\n }\n if (error instanceof ProjectMismatchError) {\n return createInterModuleKnownError(method, 'project-mismatch', {});\n }\n return error;\n}\n\nexport function toStartDevRunKnownError(error: unknown): unknown {\n return toRunCreationKnownError(workflowsInterModuleContract.methods.startDevRun, error) ?? error;\n}\n\nfunction toRunCreationKnownError(\n method:\n | typeof workflowsInterModuleContract.methods.startRunFromTrigger\n | typeof workflowsInterModuleContract.methods.startDevRun,\n error: unknown,\n): unknown {\n const workspaceError = toWorkspaceAdmissionKnownError(method, error);\n if (workspaceError !== undefined) return workspaceError;\n if (error instanceof AgentConfigUnresolvableError) {\n return createInterModuleKnownError(method, 'agent-config-unresolvable', {\n definitionId: error.definitionId,\n });\n }\n if (error instanceof AgentIntegrationMaterializationError) {\n return createInterModuleKnownError(method, 'agent-integration-materialization-failed', {});\n }\n if (error instanceof InterpolationUnresolvableError) {\n return createInterModuleKnownError(method, 'interpolation-unresolvable', {\n definitionId: error.definitionId,\n field: error.field,\n source: error.source,\n ...(error.envKey === undefined ? {} : {envKey: error.envKey}),\n });\n }\n if (error instanceof InvalidJobRunnerLabelsError) {\n return createInterModuleKnownError(method, 'invalid-job-runner-labels', {\n labels: [...error.labels],\n });\n }\n return undefined;\n}\n\nfunction toWorkspaceAdmissionKnownError(\n method:\n | typeof workflowsInterModuleContract.methods.startRunFromTrigger\n | typeof workflowsInterModuleContract.methods.startDevRun\n | typeof workflowsInterModuleContract.methods.deliverEventToJobListener,\n error: unknown,\n): WorkspaceAdmissionKnownError | undefined {\n if (error instanceof WorkspaceSuspendedError) {\n return createInterModuleKnownError(method, 'workspace-suspended', {\n workspaceId: error.workspaceId,\n });\n }\n if (error instanceof WorkspaceDeletedError) {\n return createInterModuleKnownError(method, 'workspace-deleted', {\n workspaceId: error.workspaceId,\n });\n }\n if (error instanceof WorkspaceNotFoundError) {\n return createInterModuleKnownError(method, 'workspace-not-found', {\n workspaceId: error.workspaceId,\n });\n }\n return undefined;\n}\n"],"names":["materializedAgentStepConfigSchema","workflowsInterModuleContract","createInterModuleKnownError","defineInterModulePresentation","DEFAULT_HARNESS","harnessSchema","InvalidJobRunnerLabelsError","WorkspaceDeletedError","WorkspaceNotFoundError","WorkspaceSuspendedError","AgentConfigUnresolvableError","AgentIntegrationMaterializationError","DefinitionNotFoundError","InterpolationUnresolvableError","ProjectMismatchError","runDevWorkflow","runWorkflow","resolveWorkflowRunTriggerReference","assertWorkspaceAdmitsNewJobs","getJobScope","getStepById","getStepByIdForJobExecution","deliverEventToListener","createWorkflowsInterModulePresentation","params","startRunFromTrigger","input","workspaces","workspaceId","run","definitions","agent","projectId","definitionId","triggerPayload","triggerConnectionId","inputs","triggerIdempotencyKey","idempotencyKey","integrations","projects","secrets","id","name","error","toStartRunKnownError","startDevRun","workflowId","model","sourceSnapshot","devSource","replayOfEventId","toStartDevRunKnownError","deliverEventToJobListener","method","methods","scope","disposition","jobId","undefined","triggerReference","provider","source","event","deliveryId","data","payload","receivedAt","Date","workspaceError","toWorkspaceAdmissionKnownError","getStepLogContext","stepId","step","parsed","safeParse","config","harness","success","getLeasedAgentToolContext","active","leaseIsActive","runners","getLeaseState","jobExecutionId","runnerSessionId","currentAttempt","attempt","status","type","mapped","toRunCreationKnownError","field","envKey","labels"],"mappings":"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"}