@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.
- package/.turbo/turbo-build.log +4 -4
- package/CHANGELOG.md +47 -0
- package/dist/core/agent-tools.js +8 -3
- package/dist/core/agent-tools.js.map +1 -1
- package/dist/core/entities/step.d.ts +1 -1
- package/dist/core/entities/step.d.ts.map +1 -1
- package/dist/core/entities/step.js +2 -1
- package/dist/core/entities/step.js.map +1 -1
- package/dist/core/errors.d.ts +1 -1
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js.map +1 -1
- package/dist/core/step-config/materialize-job-execution-steps.js +2 -0
- package/dist/core/step-config/materialize-job-execution-steps.js.map +1 -1
- package/dist/core/step-config/resolve-step-config.js +3 -1
- package/dist/core/step-config/resolve-step-config.js.map +1 -1
- package/dist/db/db.d.ts +8 -8
- package/dist/db/index.d.ts +1 -1
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +1 -1
- package/dist/db/index.js.map +1 -1
- package/dist/db/schema/steps.d.ts +2 -2
- package/dist/db/schema/workflow-run-attempts.d.ts +2 -2
- package/dist/db/workflow-runs/outbox.d.ts +1 -0
- package/dist/db/workflow-runs/outbox.d.ts.map +1 -1
- package/dist/db/workflow-runs/outbox.js +2 -1
- package/dist/db/workflow-runs/outbox.js.map +1 -1
- package/dist/db/workflow-runs/run-create.d.ts.map +1 -1
- package/dist/db/workflow-runs/run-create.js +49 -1
- package/dist/db/workflow-runs/run-create.js.map +1 -1
- package/dist/db/workflow-runs/steps.d.ts +6 -0
- package/dist/db/workflow-runs/steps.d.ts.map +1 -1
- package/dist/db/workflow-runs/steps.js +14 -0
- package/dist/db/workflow-runs/steps.js.map +1 -1
- package/dist/db/workflow-runs.d.ts +1 -1
- package/dist/db/workflow-runs.d.ts.map +1 -1
- package/dist/db/workflow-runs.js +1 -1
- package/dist/db/workflow-runs.js.map +1 -1
- package/dist/presentation/inter-module.d.ts.map +1 -1
- package/dist/presentation/inter-module.js +85 -19
- package/dist/presentation/inter-module.js.map +1 -1
- package/dist/tsconfig.test.tsbuildinfo +1 -1
- package/package.json +11 -11
- package/src/core/agent-tools.test.ts +85 -0
- package/src/core/agent-tools.ts +11 -3
- package/src/core/entities/step.ts +1 -1
- package/src/core/errors.ts +2 -0
- package/src/core/job-execution.test.ts +1 -0
- package/src/core/run-workflow.test.ts +4 -0
- package/src/core/step-config/materialize-job-execution-steps.ts +2 -0
- package/src/core/step-config/resolve-step-config.ts +4 -1
- package/src/db/index.ts +1 -0
- package/src/db/workflow-runs/outbox.ts +2 -0
- package/src/db/workflow-runs/run-create.test.ts +41 -0
- package/src/db/workflow-runs/run-create.ts +81 -3
- package/src/db/workflow-runs/steps.ts +19 -0
- package/src/db/workflow-runs.ts +1 -0
- package/src/presentation/inter-module.test.ts +223 -0
- package/src/presentation/inter-module.ts +106 -24
- package/src/presentation/routes/agent-runtime-config.test.ts +2 -0
- package/test/factories/workflow-model.ts +74 -2
- package/test/fixtures/agent-inter-module.ts +2 -0
- package/tsconfig.build.tsbuildinfo +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { materializedAgentStepConfigSchema } from '@shipfox/api-agent-dto';
|
|
1
|
+
import { agentSessionDescriptorSchema, materializedAgentStepConfigSchema } from '@shipfox/api-agent-dto';
|
|
2
2
|
import { workflowsInterModuleContract } from '@shipfox/api-workflows-dto/inter-module';
|
|
3
3
|
import { createInterModuleKnownError, defineInterModulePresentation } from '@shipfox/inter-module';
|
|
4
4
|
import { DEFAULT_HARNESS, harnessSchema } from '@shipfox/workflow-document';
|
|
@@ -6,9 +6,49 @@ import { InvalidJobRunnerLabelsError, WorkspaceDeletedError, WorkspaceNotFoundEr
|
|
|
6
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
|
-
import { getJobScope, getStepById, getStepByIdForJobExecution } from '#db/index.js';
|
|
9
|
+
import { getJobScope, getStepAttemptDetail, getStepById, getStepByIdForJobExecution, listStepAttemptIdsByJobId } from '#db/index.js';
|
|
10
10
|
import { deliverEventToListener } from '#db/job-listener-events.js';
|
|
11
11
|
export function createWorkflowsInterModulePresentation(params) {
|
|
12
|
+
/**
|
|
13
|
+
* Shared lease + running-agent-step resolution for the lease-authed
|
|
14
|
+
* inter-module methods (`getLeasedAgentToolContext` and
|
|
15
|
+
* `getLeasedAgentSessionContext`): verifies the runner lease, resolves the
|
|
16
|
+
* step for the job execution, then validates the job scope, attempt, status,
|
|
17
|
+
* and agent type in one canonical order. The two seams previously
|
|
18
|
+
* copy-pasted this chain with diverging check orders (the tool method
|
|
19
|
+
* resolved the job scope before the attempt/status checks, the session
|
|
20
|
+
* method after), so the same underlying state surfaced different errors
|
|
21
|
+
* depending on the method; a single helper keeps error codes and check
|
|
22
|
+
* ordering from drifting.
|
|
23
|
+
*
|
|
24
|
+
* `loadRunningLeasedStep` (routes) deliberately keeps its own copy: it
|
|
25
|
+
* returns the run scope (trigger reference/origin state), skips the
|
|
26
|
+
* agent-type check, and speaks HTTP `ClientError`s instead of contract
|
|
27
|
+
* known errors.
|
|
28
|
+
*/ async function resolveLeasedAgentStep(resolution) {
|
|
29
|
+
const { active: leaseIsActive } = await params.runners.getLeaseState({
|
|
30
|
+
jobId: resolution.input.jobId,
|
|
31
|
+
jobExecutionId: resolution.input.jobExecutionId,
|
|
32
|
+
runnerSessionId: resolution.input.runnerSessionId
|
|
33
|
+
});
|
|
34
|
+
if (!leaseIsActive) throw createInterModuleKnownError(resolution.method, 'lease-not-active', {});
|
|
35
|
+
const step = await getStepByIdForJobExecution({
|
|
36
|
+
stepId: resolution.input.stepId,
|
|
37
|
+
jobExecutionId: resolution.input.jobExecutionId
|
|
38
|
+
});
|
|
39
|
+
if (!step) throw createInterModuleKnownError(resolution.method, 'step-not-found', {});
|
|
40
|
+
const scope = await getJobScope(resolution.input.jobId);
|
|
41
|
+
if (!scope) throw createInterModuleKnownError(resolution.method, 'job-not-found', {});
|
|
42
|
+
if (step.currentAttempt !== resolution.input.attempt) {
|
|
43
|
+
throw createInterModuleKnownError(resolution.method, 'step-attempt-mismatch', {});
|
|
44
|
+
}
|
|
45
|
+
if (step.status !== 'running') throw createInterModuleKnownError(resolution.method, 'step-not-running', {});
|
|
46
|
+
if (step.type !== 'agent') throw createInterModuleKnownError(resolution.method, 'leased-step-not-agent', {});
|
|
47
|
+
return {
|
|
48
|
+
step,
|
|
49
|
+
scope
|
|
50
|
+
};
|
|
51
|
+
}
|
|
12
52
|
return defineInterModulePresentation(workflowsInterModuleContract, {
|
|
13
53
|
startRunFromTrigger: async (input)=>{
|
|
14
54
|
try {
|
|
@@ -114,26 +154,17 @@ export function createWorkflowsInterModulePresentation(params) {
|
|
|
114
154
|
harness: parsed.success ? parsed.data : DEFAULT_HARNESS
|
|
115
155
|
};
|
|
116
156
|
},
|
|
157
|
+
listJobStepAttempts: async ({ jobId })=>{
|
|
158
|
+
return {
|
|
159
|
+
stepAttemptIds: await listStepAttemptIdsByJobId(jobId)
|
|
160
|
+
};
|
|
161
|
+
},
|
|
117
162
|
getLeasedAgentToolContext: async (input)=>{
|
|
118
163
|
const method = workflowsInterModuleContract.methods.getLeasedAgentToolContext;
|
|
119
|
-
const {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
runnerSessionId: input.runnerSessionId
|
|
123
|
-
});
|
|
124
|
-
if (!leaseIsActive) throw createInterModuleKnownError(method, 'lease-not-active', {});
|
|
125
|
-
const step = await getStepByIdForJobExecution({
|
|
126
|
-
stepId: input.stepId,
|
|
127
|
-
jobExecutionId: input.jobExecutionId
|
|
164
|
+
const { step, scope } = await resolveLeasedAgentStep({
|
|
165
|
+
method,
|
|
166
|
+
input
|
|
128
167
|
});
|
|
129
|
-
if (!step) throw createInterModuleKnownError(method, 'step-not-found', {});
|
|
130
|
-
const scope = await getJobScope(input.jobId);
|
|
131
|
-
if (!scope) throw createInterModuleKnownError(method, 'job-not-found', {});
|
|
132
|
-
if (step.currentAttempt !== input.attempt) {
|
|
133
|
-
throw createInterModuleKnownError(method, 'step-attempt-mismatch', {});
|
|
134
|
-
}
|
|
135
|
-
if (step.status !== 'running') throw createInterModuleKnownError(method, 'step-not-running', {});
|
|
136
|
-
if (step.type !== 'agent') throw createInterModuleKnownError(method, 'leased-step-not-agent', {});
|
|
137
168
|
const config = materializedAgentStepConfigSchema.safeParse(step.config);
|
|
138
169
|
if (!config.success) {
|
|
139
170
|
throw createInterModuleKnownError(method, 'agent-step-config-invalid', {});
|
|
@@ -142,6 +173,41 @@ export function createWorkflowsInterModulePresentation(params) {
|
|
|
142
173
|
workspaceId: scope.workspaceId,
|
|
143
174
|
integrations: config.data.integrations ?? []
|
|
144
175
|
};
|
|
176
|
+
},
|
|
177
|
+
getLeasedAgentSessionContext: async (input)=>{
|
|
178
|
+
const method = workflowsInterModuleContract.methods.getLeasedAgentSessionContext;
|
|
179
|
+
const { scope } = await resolveLeasedAgentStep({
|
|
180
|
+
method,
|
|
181
|
+
input
|
|
182
|
+
});
|
|
183
|
+
const detail = await getStepAttemptDetail({
|
|
184
|
+
stepId: input.stepId,
|
|
185
|
+
attempt: input.attempt
|
|
186
|
+
});
|
|
187
|
+
if (!detail) throw createInterModuleKnownError(method, 'step-attempt-mismatch', {});
|
|
188
|
+
// The dispatch integration records the resolved descriptor on the step
|
|
189
|
+
// attempt's config; anything else is a recording we cannot trust.
|
|
190
|
+
const recorded = detail.attempt.config?.session;
|
|
191
|
+
if (recorded === undefined || recorded === null) {
|
|
192
|
+
return {
|
|
193
|
+
workspaceId: scope.workspaceId,
|
|
194
|
+
projectId: scope.projectId,
|
|
195
|
+
workflowRunAttemptId: detail.workflowRunAttemptId,
|
|
196
|
+
stepAttemptId: detail.attempt.id,
|
|
197
|
+
session: null
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
const parsed = agentSessionDescriptorSchema.safeParse(recorded);
|
|
201
|
+
if (!parsed.success) {
|
|
202
|
+
throw createInterModuleKnownError(method, 'step-session-config-invalid', {});
|
|
203
|
+
}
|
|
204
|
+
return {
|
|
205
|
+
workspaceId: scope.workspaceId,
|
|
206
|
+
projectId: scope.projectId,
|
|
207
|
+
workflowRunAttemptId: detail.workflowRunAttemptId,
|
|
208
|
+
stepAttemptId: detail.attempt.id,
|
|
209
|
+
session: parsed.data
|
|
210
|
+
};
|
|
145
211
|
}
|
|
146
212
|
});
|
|
147
213
|
}
|
|
@@ -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 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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"}
|
|
1
|
+
{"version":3,"sources":["../../src/presentation/inter-module.ts"],"sourcesContent":["import {\n agentSessionDescriptorSchema,\n materializedAgentStepConfigSchema,\n} 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 {Step} from '#core/entities/step.js';\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 {\n getJobScope,\n getStepAttemptDetail,\n getStepById,\n getStepByIdForJobExecution,\n listStepAttemptIdsByJobId,\n} 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 /**\n * Shared lease + running-agent-step resolution for the lease-authed\n * inter-module methods (`getLeasedAgentToolContext` and\n * `getLeasedAgentSessionContext`): verifies the runner lease, resolves the\n * step for the job execution, then validates the job scope, attempt, status,\n * and agent type in one canonical order. The two seams previously\n * copy-pasted this chain with diverging check orders (the tool method\n * resolved the job scope before the attempt/status checks, the session\n * method after), so the same underlying state surfaced different errors\n * depending on the method; a single helper keeps error codes and check\n * ordering from drifting.\n *\n * `loadRunningLeasedStep` (routes) deliberately keeps its own copy: it\n * returns the run scope (trigger reference/origin state), skips the\n * agent-type check, and speaks HTTP `ClientError`s instead of contract\n * known errors.\n */\n async function resolveLeasedAgentStep(resolution: {\n method:\n | typeof workflowsInterModuleContract.methods.getLeasedAgentToolContext\n | typeof workflowsInterModuleContract.methods.getLeasedAgentSessionContext;\n input: {\n jobId: string;\n jobExecutionId: string;\n runnerSessionId: string;\n stepId: string;\n attempt: number;\n };\n }): Promise<{\n step: Step;\n scope: NonNullable<Awaited<ReturnType<typeof getJobScope>>>;\n }> {\n const {active: leaseIsActive} = await params.runners.getLeaseState({\n jobId: resolution.input.jobId,\n jobExecutionId: resolution.input.jobExecutionId,\n runnerSessionId: resolution.input.runnerSessionId,\n });\n if (!leaseIsActive)\n throw createInterModuleKnownError(resolution.method, 'lease-not-active', {});\n\n const step = await getStepByIdForJobExecution({\n stepId: resolution.input.stepId,\n jobExecutionId: resolution.input.jobExecutionId,\n });\n if (!step) throw createInterModuleKnownError(resolution.method, 'step-not-found', {});\n\n const scope = await getJobScope(resolution.input.jobId);\n if (!scope) throw createInterModuleKnownError(resolution.method, 'job-not-found', {});\n if (step.currentAttempt !== resolution.input.attempt) {\n throw createInterModuleKnownError(resolution.method, 'step-attempt-mismatch', {});\n }\n if (step.status !== 'running')\n throw createInterModuleKnownError(resolution.method, 'step-not-running', {});\n if (step.type !== 'agent')\n throw createInterModuleKnownError(resolution.method, 'leased-step-not-agent', {});\n\n return {step, scope};\n }\n\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 listJobStepAttempts: async ({jobId}) => {\n return {stepAttemptIds: await listStepAttemptIdsByJobId(jobId)};\n },\n getLeasedAgentToolContext: async (input) => {\n const method = workflowsInterModuleContract.methods.getLeasedAgentToolContext;\n const {step, scope} = await resolveLeasedAgentStep({method, input});\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 getLeasedAgentSessionContext: async (input) => {\n const method = workflowsInterModuleContract.methods.getLeasedAgentSessionContext;\n const {scope} = await resolveLeasedAgentStep({method, input});\n\n const detail = await getStepAttemptDetail({stepId: input.stepId, attempt: input.attempt});\n if (!detail) throw createInterModuleKnownError(method, 'step-attempt-mismatch', {});\n\n // The dispatch integration records the resolved descriptor on the step\n // attempt's config; anything else is a recording we cannot trust.\n const recorded = detail.attempt.config?.session;\n if (recorded === undefined || recorded === null) {\n return {\n workspaceId: scope.workspaceId,\n projectId: scope.projectId,\n workflowRunAttemptId: detail.workflowRunAttemptId,\n stepAttemptId: detail.attempt.id,\n session: null,\n };\n }\n const parsed = agentSessionDescriptorSchema.safeParse(recorded);\n if (!parsed.success) {\n throw createInterModuleKnownError(method, 'step-session-config-invalid', {});\n }\n return {\n workspaceId: scope.workspaceId,\n projectId: scope.projectId,\n workflowRunAttemptId: detail.workflowRunAttemptId,\n stepAttemptId: detail.attempt.id,\n session: parsed.data,\n };\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":["agentSessionDescriptorSchema","materializedAgentStepConfigSchema","workflowsInterModuleContract","createInterModuleKnownError","defineInterModulePresentation","DEFAULT_HARNESS","harnessSchema","InvalidJobRunnerLabelsError","WorkspaceDeletedError","WorkspaceNotFoundError","WorkspaceSuspendedError","AgentConfigUnresolvableError","AgentIntegrationMaterializationError","DefinitionNotFoundError","InterpolationUnresolvableError","ProjectMismatchError","runDevWorkflow","runWorkflow","resolveWorkflowRunTriggerReference","assertWorkspaceAdmitsNewJobs","getJobScope","getStepAttemptDetail","getStepById","getStepByIdForJobExecution","listStepAttemptIdsByJobId","deliverEventToListener","createWorkflowsInterModulePresentation","params","resolveLeasedAgentStep","resolution","active","leaseIsActive","runners","getLeaseState","jobId","input","jobExecutionId","runnerSessionId","method","step","stepId","scope","currentAttempt","attempt","status","type","startRunFromTrigger","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","methods","disposition","undefined","triggerReference","provider","source","event","deliveryId","data","payload","receivedAt","Date","workspaceError","toWorkspaceAdmissionKnownError","getStepLogContext","parsed","safeParse","config","harness","success","listJobStepAttempts","stepAttemptIds","getLeasedAgentToolContext","getLeasedAgentSessionContext","detail","recorded","session","workflowRunAttemptId","stepAttemptId","mapped","toRunCreationKnownError","field","envKey","labels"],"mappings":"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"}
|