@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,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 { active: leaseIsActive } = await params.runners.getLeaseState({
120
- jobId: input.jobId,
121
- jobExecutionId: input.jobExecutionId,
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":"AAAA,SACEA,4BAA4B,EAC5BC,iCAAiC,QAC5B,yBAAyB;AAOhC,SAAQC,4BAA4B,QAAO,0CAA0C;AAErF,SACEC,2BAA2B,EAC3BC,6BAA6B,QAGxB,wBAAwB;AAC/B,SAAQC,eAAe,EAAEC,aAAa,QAAO,6BAA6B;AAG1E,SACEC,2BAA2B,EAC3BC,qBAAqB,EACrBC,sBAAsB,EACtBC,uBAAuB,QAClB,kBAAkB;AACzB,SACEC,4BAA4B,EAC5BC,oCAAoC,EACpCC,uBAAuB,EACvBC,8BAA8B,EAC9BC,oBAAoB,EACpBC,cAAc,EACdC,WAAW,QACN,iBAAiB;AACxB,SAAQC,kCAAkC,QAAO,qCAAqC;AACtF,SAAQC,4BAA4B,QAAO,+BAA+B;AAC1E,SACEC,WAAW,EACXC,oBAAoB,EACpBC,WAAW,EACXC,0BAA0B,EAC1BC,yBAAyB,QACpB,eAAe;AACtB,SAAQC,sBAAsB,QAAO,6BAA6B;AAMlE,OAAO,SAASC,uCAAuCC,MAQtD;IACC;;;;;;;;;;;;;;;;GAgBC,GACD,eAAeC,uBAAuBC,UAWrC;QAIC,MAAM,EAACC,QAAQC,aAAa,EAAC,GAAG,MAAMJ,OAAOK,OAAO,CAACC,aAAa,CAAC;YACjEC,OAAOL,WAAWM,KAAK,CAACD,KAAK;YAC7BE,gBAAgBP,WAAWM,KAAK,CAACC,cAAc;YAC/CC,iBAAiBR,WAAWM,KAAK,CAACE,eAAe;QACnD;QACA,IAAI,CAACN,eACH,MAAM5B,4BAA4B0B,WAAWS,MAAM,EAAE,oBAAoB,CAAC;QAE5E,MAAMC,OAAO,MAAMhB,2BAA2B;YAC5CiB,QAAQX,WAAWM,KAAK,CAACK,MAAM;YAC/BJ,gBAAgBP,WAAWM,KAAK,CAACC,cAAc;QACjD;QACA,IAAI,CAACG,MAAM,MAAMpC,4BAA4B0B,WAAWS,MAAM,EAAE,kBAAkB,CAAC;QAEnF,MAAMG,QAAQ,MAAMrB,YAAYS,WAAWM,KAAK,CAACD,KAAK;QACtD,IAAI,CAACO,OAAO,MAAMtC,4BAA4B0B,WAAWS,MAAM,EAAE,iBAAiB,CAAC;QACnF,IAAIC,KAAKG,cAAc,KAAKb,WAAWM,KAAK,CAACQ,OAAO,EAAE;YACpD,MAAMxC,4BAA4B0B,WAAWS,MAAM,EAAE,yBAAyB,CAAC;QACjF;QACA,IAAIC,KAAKK,MAAM,KAAK,WAClB,MAAMzC,4BAA4B0B,WAAWS,MAAM,EAAE,oBAAoB,CAAC;QAC5E,IAAIC,KAAKM,IAAI,KAAK,SAChB,MAAM1C,4BAA4B0B,WAAWS,MAAM,EAAE,yBAAyB,CAAC;QAEjF,OAAO;YAACC;YAAME;QAAK;IACrB;IAEA,OAAOrC,8BAA8BF,8BAA8B;QACjE4C,qBAAqB,OAAOX;YAC1B,IAAI;gBACF,MAAMhB,6BAA6BQ,OAAOoB,UAAU,EAAEZ,MAAMa,WAAW;gBACvE,MAAMC,MAAM,MAAMhC,YAChBU,OAAOuB,WAAW,EAClB;oBACEC,OAAOxB,OAAOwB,KAAK;oBACnBH,aAAab,MAAMa,WAAW;oBAC9BI,WAAWjB,MAAMiB,SAAS;oBAC1BC,cAAclB,MAAMkB,YAAY;oBAChCC,gBAAgBnB,MAAMmB,cAAc;oBACpCC,qBAAqBpB,MAAMoB,mBAAmB;oBAC9CC,QAAQrB,MAAMqB,MAAM;oBACpBC,uBAAuBtB,MAAMuB,cAAc;oBAC3CC,cAAchC,OAAOgC,YAAY;oBACjCC,UAAUjC,OAAOiC,QAAQ;gBAC3B,GACA;oBAACC,SAASlC,OAAOkC,OAAO;gBAAA;gBAE1B,OAAO;oBAACC,IAAIb,IAAIa,EAAE;oBAAEC,MAAMd,IAAIc,IAAI;gBAAA;YACpC,EAAE,OAAOC,OAAO;gBACd,MAAMC,qBAAqBD,OAAO7B,MAAMkB,YAAY;YACtD;QACF;QACAa,aAAa,OAAO/B;YAClB,IAAI;gBACF,MAAMhB,6BAA6BQ,OAAOoB,UAAU,EAAEZ,MAAMa,WAAW;gBACvE,MAAMC,MAAM,MAAMjC,eAChBW,OAAOwB,KAAK,EACZ;oBACEH,aAAab,MAAMa,WAAW;oBAC9BI,WAAWjB,MAAMiB,SAAS;oBAC1Be,YAAYhC,MAAMgC,UAAU;oBAC5BC,OAAOjC,MAAMiC,KAAK;oBAClBC,gBAAgBlC,MAAMkC,cAAc;oBACpCC,WAAW;wBACT,GAAGnC,MAAMmC,SAAS;wBAClBC,iBAAiBpC,MAAMmC,SAAS,CAACC,eAAe,IAAI;oBACtD;oBACAjB,gBAAgBnB,MAAMmB,cAAc;oBACpCC,qBAAqBpB,MAAMoB,mBAAmB;oBAC9CC,QAAQrB,MAAMqB,MAAM;oBACpBG,cAAchC,OAAOgC,YAAY;oBACjCC,UAAUjC,OAAOiC,QAAQ;gBAC3B,GACA;oBAACC,SAASlC,OAAOkC,OAAO;gBAAA;gBAE1B,OAAO;oBAACC,IAAIb,IAAIa,EAAE;oBAAEC,MAAMd,IAAIc,IAAI;gBAAA;YACpC,EAAE,OAAOC,OAAO;gBACd,MAAMQ,wBAAwBR;YAChC;QACF;QACA9C,oCAAoC,OAAOiB,QACzC,MAAMjB,mCAAmC;gBACvC8B,aAAab,MAAMa,WAAW;gBAC9BO,qBAAqBpB,MAAMoB,mBAAmB;gBAC9CD,gBAAgBnB,MAAMmB,cAAc;gBACpCK,cAAchC,OAAOgC,YAAY;gBACjCC,UAAUjC,OAAOiC,QAAQ;YAC3B;QACFa,2BAA2B,OAAOtC;YAChC,MAAMG,SAASpC,6BAA6BwE,OAAO,CAACD,yBAAyB;YAC7E,IAAI;gBACF,MAAMhC,QAAQN,MAAMwC,WAAW,KAAK,SAAS,MAAMvD,YAAYe,MAAMD,KAAK,IAAI0C;gBAC9E,IAAInC,OAAO;oBACT,MAAMtB,6BAA6BQ,OAAOoB,UAAU,EAAEN,MAAMO,WAAW;gBACzE;gBAEA,IAAI6B,mBAAuD;gBAC3D,IAAI1C,MAAM0C,gBAAgB,KAAKD,WAAW;oBACxCC,mBAAmB1C,MAAM0C,gBAAgB;gBAC3C,OAAO,IAAIpC,OAAO;oBAChBoC,mBAAmB,MAAM3D,mCAAmC;wBAC1D8B,aAAaP,MAAMO,WAAW;wBAC9BO,qBAAqBpB,MAAMoB,mBAAmB;wBAC9CD,gBAAgB;4BACdwB,UAAU3C,MAAM2C,QAAQ;4BACxBC,QAAQ5C,MAAM4C,MAAM;4BACpBC,OAAO7C,MAAM6C,KAAK;4BAClBC,YAAY9C,MAAM8C,UAAU;4BAC5BC,MAAM/C,MAAMgD,OAAO;wBACrB;wBACAxB,cAAchC,OAAOgC,YAAY;wBACjCC,UAAUjC,OAAOiC,QAAQ;oBAC3B;gBACF;gBACA,OAAO,MAAMnC,uBAAuB;oBAClC,GAAGU,KAAK;oBACR0C;oBACAO,YAAY,IAAIC,KAAKlD,MAAMiD,UAAU;gBACvC;YACF,EAAE,OAAOpB,OAAO;gBACd,MAAMsB,iBAAiBC,+BAA+BjD,QAAQ0B;gBAC9D,IAAIsB,mBAAmBV,WAAW,MAAMU;gBACxC,MAAMtB;YACR;QACF;QACAwB,mBAAmB,OAAO,EAAChD,MAAM,EAAC;YAChC,MAAMD,OAAO,MAAMjB,YAAYkB;YAC/B,MAAMiD,SAASnF,cAAcoF,SAAS,CAACnD,MAAMoD,OAAOC;YACpD,OAAO;gBAACA,SAASH,OAAOI,OAAO,GAAGJ,OAAOP,IAAI,GAAG7E;YAAe;QACjE;QACAyF,qBAAqB,OAAO,EAAC5D,KAAK,EAAC;YACjC,OAAO;gBAAC6D,gBAAgB,MAAMvE,0BAA0BU;YAAM;QAChE;QACA8D,2BAA2B,OAAO7D;YAChC,MAAMG,SAASpC,6BAA6BwE,OAAO,CAACsB,yBAAyB;YAC7E,MAAM,EAACzD,IAAI,EAAEE,KAAK,EAAC,GAAG,MAAMb,uBAAuB;gBAACU;gBAAQH;YAAK;YAEjE,MAAMwD,SAAS1F,kCAAkCyF,SAAS,CAACnD,KAAKoD,MAAM;YACtE,IAAI,CAACA,OAAOE,OAAO,EAAE;gBACnB,MAAM1F,4BAA4BmC,QAAQ,6BAA6B,CAAC;YAC1E;YACA,OAAO;gBAACU,aAAaP,MAAMO,WAAW;gBAAEW,cAAcgC,OAAOT,IAAI,CAACvB,YAAY,IAAI,EAAE;YAAA;QACtF;QACAsC,8BAA8B,OAAO9D;YACnC,MAAMG,SAASpC,6BAA6BwE,OAAO,CAACuB,4BAA4B;YAChF,MAAM,EAACxD,KAAK,EAAC,GAAG,MAAMb,uBAAuB;gBAACU;gBAAQH;YAAK;YAE3D,MAAM+D,SAAS,MAAM7E,qBAAqB;gBAACmB,QAAQL,MAAMK,MAAM;gBAAEG,SAASR,MAAMQ,OAAO;YAAA;YACvF,IAAI,CAACuD,QAAQ,MAAM/F,4BAA4BmC,QAAQ,yBAAyB,CAAC;YAEjF,uEAAuE;YACvE,kEAAkE;YAClE,MAAM6D,WAAWD,OAAOvD,OAAO,CAACgD,MAAM,EAAES;YACxC,IAAID,aAAavB,aAAauB,aAAa,MAAM;gBAC/C,OAAO;oBACLnD,aAAaP,MAAMO,WAAW;oBAC9BI,WAAWX,MAAMW,SAAS;oBAC1BiD,sBAAsBH,OAAOG,oBAAoB;oBACjDC,eAAeJ,OAAOvD,OAAO,CAACmB,EAAE;oBAChCsC,SAAS;gBACX;YACF;YACA,MAAMX,SAASzF,6BAA6B0F,SAAS,CAACS;YACtD,IAAI,CAACV,OAAOI,OAAO,EAAE;gBACnB,MAAM1F,4BAA4BmC,QAAQ,+BAA+B,CAAC;YAC5E;YACA,OAAO;gBACLU,aAAaP,MAAMO,WAAW;gBAC9BI,WAAWX,MAAMW,SAAS;gBAC1BiD,sBAAsBH,OAAOG,oBAAoB;gBACjDC,eAAeJ,OAAOvD,OAAO,CAACmB,EAAE;gBAChCsC,SAASX,OAAOP,IAAI;YACtB;QACF;IACF;AACF;AAEA,OAAO,SAASjB,qBAAqBD,KAAc,EAAEX,YAAoB;IACvE,MAAMf,SAASpC,6BAA6BwE,OAAO,CAAC5B,mBAAmB;IACvE,MAAMyD,SAASC,wBAAwBlE,QAAQ0B;IAC/C,IAAIuC,WAAW3B,WAAW,OAAO2B;IACjC,IAAIvC,iBAAiBnD,yBAAyB;QAC5C,OAAOV,4BAA4BmC,QAAQ,wBAAwB;YAACe;QAAY;IAClF;IACA,IAAIW,iBAAiBjD,sBAAsB;QACzC,OAAOZ,4BAA4BmC,QAAQ,oBAAoB,CAAC;IAClE;IACA,OAAO0B;AACT;AAEA,OAAO,SAASQ,wBAAwBR,KAAc;IACpD,OAAOwC,wBAAwBtG,6BAA6BwE,OAAO,CAACR,WAAW,EAAEF,UAAUA;AAC7F;AAEA,SAASwC,wBACPlE,MAE2D,EAC3D0B,KAAc;IAEd,MAAMsB,iBAAiBC,+BAA+BjD,QAAQ0B;IAC9D,IAAIsB,mBAAmBV,WAAW,OAAOU;IACzC,IAAItB,iBAAiBrD,8BAA8B;QACjD,OAAOR,4BAA4BmC,QAAQ,6BAA6B;YACtEe,cAAcW,MAAMX,YAAY;QAClC;IACF;IACA,IAAIW,iBAAiBpD,sCAAsC;QACzD,OAAOT,4BAA4BmC,QAAQ,4CAA4C,CAAC;IAC1F;IACA,IAAI0B,iBAAiBlD,gCAAgC;QACnD,OAAOX,4BAA4BmC,QAAQ,8BAA8B;YACvEe,cAAcW,MAAMX,YAAY;YAChCoD,OAAOzC,MAAMyC,KAAK;YAClB1B,QAAQf,MAAMe,MAAM;YACpB,GAAIf,MAAM0C,MAAM,KAAK9B,YAAY,CAAC,IAAI;gBAAC8B,QAAQ1C,MAAM0C,MAAM;YAAA,CAAC;QAC9D;IACF;IACA,IAAI1C,iBAAiBzD,6BAA6B;QAChD,OAAOJ,4BAA4BmC,QAAQ,6BAA6B;YACtEqE,QAAQ;mBAAI3C,MAAM2C,MAAM;aAAC;QAC3B;IACF;IACA,OAAO/B;AACT;AAEA,SAASW,+BACPjD,MAGyE,EACzE0B,KAAc;IAEd,IAAIA,iBAAiBtD,yBAAyB;QAC5C,OAAOP,4BAA4BmC,QAAQ,uBAAuB;YAChEU,aAAagB,MAAMhB,WAAW;QAChC;IACF;IACA,IAAIgB,iBAAiBxD,uBAAuB;QAC1C,OAAOL,4BAA4BmC,QAAQ,qBAAqB;YAC9DU,aAAagB,MAAMhB,WAAW;QAChC;IACF;IACA,IAAIgB,iBAAiBvD,wBAAwB;QAC3C,OAAON,4BAA4BmC,QAAQ,uBAAuB;YAChEU,aAAagB,MAAMhB,WAAW;QAChC;IACF;IACA,OAAO4B;AACT"}