@shipfox/api-workflows 7.1.0 → 8.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 +15 -0
- package/dist/core/agent-defaults.d.ts +2 -1
- package/dist/core/agent-defaults.d.ts.map +1 -1
- package/dist/core/agent-defaults.js.map +1 -1
- package/dist/core/agent-tools.d.ts +3 -2
- package/dist/core/agent-tools.d.ts.map +1 -1
- package/dist/core/agent-tools.js.map +1 -1
- package/dist/core/checkout.d.ts +2 -2
- package/dist/core/checkout.d.ts.map +1 -1
- package/dist/core/checkout.js.map +1 -1
- package/dist/core/entities/step.d.ts +2 -1
- package/dist/core/entities/step.d.ts.map +1 -1
- package/dist/core/entities/step.js.map +1 -1
- package/dist/core/run-workflow.d.ts +2 -2
- package/dist/core/run-workflow.d.ts.map +1 -1
- package/dist/core/run-workflow.js.map +1 -1
- package/dist/core/step-config/agent.d.ts +1 -1
- package/dist/core/step-config/agent.d.ts.map +1 -1
- package/dist/core/step-config/agent.js.map +1 -1
- package/dist/db/job-listeners.d.ts +2 -2
- package/dist/db/job-listeners.d.ts.map +1 -1
- package/dist/db/job-listeners.js.map +1 -1
- package/dist/db/workflow-runs/run-create.d.ts +2 -2
- package/dist/db/workflow-runs/run-create.d.ts.map +1 -1
- package/dist/db/workflow-runs/run-create.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/presentation/inter-module.d.ts +2 -2
- package/dist/presentation/inter-module.d.ts.map +1 -1
- package/dist/presentation/inter-module.js +2 -1
- package/dist/presentation/inter-module.js.map +1 -1
- package/dist/presentation/routes/cancel-run.d.ts +1 -1
- package/dist/presentation/routes/cancel-run.d.ts.map +1 -1
- package/dist/presentation/routes/cancel-run.js.map +1 -1
- package/dist/presentation/routes/checkout-token.d.ts +2 -2
- package/dist/presentation/routes/checkout-token.d.ts.map +1 -1
- package/dist/presentation/routes/checkout-token.js +1 -1
- package/dist/presentation/routes/checkout-token.js.map +1 -1
- package/dist/presentation/routes/get-run-aggregates.d.ts +1 -1
- package/dist/presentation/routes/get-run-aggregates.d.ts.map +1 -1
- package/dist/presentation/routes/get-run-aggregates.js.map +1 -1
- package/dist/presentation/routes/get-run.d.ts +1 -1
- package/dist/presentation/routes/get-run.d.ts.map +1 -1
- package/dist/presentation/routes/get-run.js.map +1 -1
- package/dist/presentation/routes/index.d.ts +2 -2
- package/dist/presentation/routes/index.d.ts.map +1 -1
- package/dist/presentation/routes/index.js.map +1 -1
- package/dist/presentation/routes/list-run-attempts.d.ts +1 -1
- package/dist/presentation/routes/list-run-attempts.d.ts.map +1 -1
- package/dist/presentation/routes/list-run-attempts.js.map +1 -1
- package/dist/presentation/routes/list-runs.d.ts +1 -1
- package/dist/presentation/routes/list-runs.d.ts.map +1 -1
- package/dist/presentation/routes/list-runs.js.map +1 -1
- package/dist/presentation/routes/project-access.d.ts +1 -1
- package/dist/presentation/routes/project-access.d.ts.map +1 -1
- package/dist/presentation/routes/project-access.js.map +1 -1
- package/dist/presentation/routes/require-accessible-run.d.ts +1 -1
- package/dist/presentation/routes/require-accessible-run.d.ts.map +1 -1
- package/dist/presentation/routes/require-accessible-run.js.map +1 -1
- package/dist/presentation/routes/rerun-run.d.ts +1 -1
- package/dist/presentation/routes/rerun-run.d.ts.map +1 -1
- package/dist/presentation/routes/rerun-run.js.map +1 -1
- package/dist/temporal/activities/index.d.ts +2 -2
- package/dist/temporal/activities/index.d.ts.map +1 -1
- package/dist/temporal/activities/index.js.map +1 -1
- package/dist/temporal/activities/orchestration-activities.d.ts +2 -2
- package/dist/temporal/activities/orchestration-activities.d.ts.map +1 -1
- package/dist/temporal/activities/orchestration-activities.js.map +1 -1
- package/dist/tsconfig.test.tsbuildinfo +1 -1
- package/package.json +9 -9
- package/src/core/agent-defaults.ts +2 -1
- package/src/core/agent-tool-capability-warning.test.ts +1 -1
- package/src/core/agent-tools.ts +2 -2
- package/src/core/checkout.test.ts +2 -2
- package/src/core/checkout.ts +2 -2
- package/src/core/entities/step.ts +1 -2
- package/src/core/run-workflow.test.ts +2 -0
- package/src/core/run-workflow.ts +2 -2
- package/src/core/step-config/agent.ts +1 -1
- package/src/core/step-config/materialize-workflow-model.test.ts +11 -2
- package/src/db/job-listeners.ts +2 -2
- package/src/db/workflow-runs/run-create.test.ts +11 -2
- package/src/db/workflow-runs/run-create.ts +2 -2
- package/src/index.ts +2 -2
- package/src/presentation/inter-module.ts +4 -7
- package/src/presentation/routes/agent-runtime-config.test.ts +2 -35
- package/src/presentation/routes/cancel-run.test.ts +1 -1
- package/src/presentation/routes/cancel-run.ts +1 -1
- package/src/presentation/routes/checkout-token.test.ts +4 -37
- package/src/presentation/routes/checkout-token.ts +2 -2
- package/src/presentation/routes/get-run-aggregates.test.ts +1 -1
- package/src/presentation/routes/get-run-aggregates.ts +1 -1
- package/src/presentation/routes/get-run.test.ts +1 -1
- package/src/presentation/routes/get-run.ts +1 -1
- package/src/presentation/routes/get-step-secrets.test.ts +2 -2
- package/src/presentation/routes/index.test.ts +3 -3
- package/src/presentation/routes/index.ts +2 -2
- package/src/presentation/routes/list-run-attempts.test.ts +1 -1
- package/src/presentation/routes/list-run-attempts.ts +1 -1
- package/src/presentation/routes/list-runs.test.ts +1 -1
- package/src/presentation/routes/list-runs.ts +1 -1
- package/src/presentation/routes/next-step.test.ts +9 -57
- package/src/presentation/routes/project-access.ts +1 -1
- package/src/presentation/routes/report-step.test.ts +2 -3
- package/src/presentation/routes/require-accessible-run.ts +1 -1
- package/src/presentation/routes/rerun-run.test.ts +1 -1
- package/src/presentation/routes/rerun-run.ts +1 -1
- package/src/temporal/activities/index.ts +2 -2
- package/src/temporal/activities/orchestration-activities.ts +2 -2
- package/test/fixtures/agent-inter-module.ts +31 -1
- package/test/fixtures/auth-inter-module.ts +2 -13
- package/test/fixtures/lease-token.ts +43 -29
- package/test/fixtures/projects-inter-module.ts +1 -1
- package/tsconfig.build.tsbuildinfo +1 -1
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
$ shipfox-swc && shipfox-temporal-bundle dist/temporal/workflows/index.js
|
|
2
|
-
Successfully compiled: 116 files with swc (
|
|
3
|
-
2026-07-
|
|
2
|
+
Successfully compiled: 116 files with swc (743.53ms)
|
|
3
|
+
2026-07-22T14:54:18.249Z [INFO] asset workflow-bundle-21a9ae8beb3cb55dabc1.js 3.31 MiB [emitted] [immutable] (name: main)
|
|
4
4
|
orphan modules 33.5 KiB [orphan] 21 modules
|
|
5
5
|
runtime modules 1.13 KiB 5 modules
|
|
6
6
|
modules by path ../../../node_modules/.pnpm/ 970 KiB 196 modules
|
|
@@ -16,6 +16,6 @@ optional modules 30 bytes [optional]
|
|
|
16
16
|
__temporal_custom_payload_converter (ignored) 15 bytes [optional] [built] [code generated]
|
|
17
17
|
__temporal_custom_failure_converter (ignored) 15 bytes [optional] [built] [code generated]
|
|
18
18
|
../../shared/node/temporal/dist/workflow-error-interceptor.js 1.21 KiB [built] [code generated]
|
|
19
|
-
webpack 5.107.2 compiled successfully in
|
|
20
|
-
2026-07-
|
|
19
|
+
webpack 5.107.2 compiled successfully in 7970 ms
|
|
20
|
+
2026-07-22T14:54:18.278Z [INFO] Workflow bundle created { size: '3.31MB' }
|
|
21
21
|
/home/runner/work/shipfox/shipfox/libs/api/workflows/dist/temporal/workflows/index.js: 3470576 bytes
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# @shipfox/api-workflows
|
|
2
2
|
|
|
3
|
+
## 8.0.0
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- de559bb: Moves Agent validation policy behind a versioned inter-module catalog and injects it into Definitions normalization.
|
|
8
|
+
- b15f3a7: Removes Auth implementation dependencies from consumer test boundaries.
|
|
9
|
+
- Updated dependencies [de559bb]
|
|
10
|
+
- Updated dependencies [b15f3a7]
|
|
11
|
+
- Updated dependencies [7f227c6]
|
|
12
|
+
- @shipfox/api-agent-dto@8.0.0
|
|
13
|
+
- @shipfox/api-runners@8.0.0
|
|
14
|
+
- @shipfox/api-integration-core-dto@8.0.0
|
|
15
|
+
- @shipfox/api-projects-dto@8.0.0
|
|
16
|
+
- @shipfox/api-workflows-dto@8.0.0
|
|
17
|
+
|
|
3
18
|
## 7.1.0
|
|
4
19
|
|
|
5
20
|
### Patch Changes
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ModelProviderRef } from '@shipfox/api-agent-dto';
|
|
2
2
|
import type { AgentInterModuleClient } from '@shipfox/api-agent-dto/inter-module';
|
|
3
|
+
import type { AgentThinking, Harness } from '@shipfox/workflow-document';
|
|
3
4
|
export interface AgentDefaultsInput {
|
|
4
5
|
readonly harness?: Harness | undefined;
|
|
5
6
|
readonly provider?: ModelProviderRef | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-defaults.d.ts","sourceRoot":"","sources":["../../src/core/agent-defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,
|
|
1
|
+
{"version":3,"file":"agent-defaults.d.ts","sourceRoot":"","sources":["../../src/core/agent-defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,qCAAqC,CAAC;AAChF,OAAO,KAAK,EAAC,aAAa,EAAE,OAAO,EAAC,MAAM,4BAA4B,CAAC;AAEvE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACjD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;CAC/C;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;CAClC;AAED,MAAM,MAAM,qBAAqB,GAAG,CAClC,KAAK,EAAE,kBAAkB,KACtB,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;AAE5D,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,sBAAsB,EAC7B,WAAW,EAAE,MAAM,GAAG,IAAI,GACzB,qBAAqB,CAWvB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/agent-defaults.ts"],"sourcesContent":["import type {
|
|
1
|
+
{"version":3,"sources":["../../src/core/agent-defaults.ts"],"sourcesContent":["import type {ModelProviderRef} from '@shipfox/api-agent-dto';\nimport type {AgentInterModuleClient} from '@shipfox/api-agent-dto/inter-module';\nimport type {AgentThinking, Harness} from '@shipfox/workflow-document';\n\nexport interface AgentDefaultsInput {\n readonly harness?: Harness | undefined;\n readonly provider?: ModelProviderRef | undefined;\n readonly model?: string | undefined;\n readonly thinking?: AgentThinking | undefined;\n}\n\nexport interface ResolvedAgentDefaults {\n readonly harness: Harness;\n readonly provider: ModelProviderRef;\n readonly model: string;\n readonly thinking: AgentThinking;\n}\n\nexport type AgentDefaultsResolver = (\n input: AgentDefaultsInput,\n) => ResolvedAgentDefaults | Promise<ResolvedAgentDefaults>;\n\nexport function createAgentDefaultsResolver(\n agent: AgentInterModuleClient,\n workspaceId: string | null,\n): AgentDefaultsResolver {\n return async (config) =>\n await agent.resolveAgentConfig({\n workspaceId,\n config: {\n ...(config.harness === undefined ? {} : {harness: config.harness}),\n ...(config.provider === undefined ? {} : {provider: config.provider}),\n ...(config.model === undefined ? {} : {model: config.model}),\n ...(config.thinking === undefined ? {} : {thinking: config.thinking}),\n },\n });\n}\n"],"names":["createAgentDefaultsResolver","agent","workspaceId","config","resolveAgentConfig","harness","undefined","provider","model","thinking"],"mappings":"AAsBA,OAAO,SAASA,4BACdC,KAA6B,EAC7BC,WAA0B;IAE1B,OAAO,OAAOC,SACZ,MAAMF,MAAMG,kBAAkB,CAAC;YAC7BF;YACAC,QAAQ;gBACN,GAAIA,OAAOE,OAAO,KAAKC,YAAY,CAAC,IAAI;oBAACD,SAASF,OAAOE,OAAO;gBAAA,CAAC;gBACjE,GAAIF,OAAOI,QAAQ,KAAKD,YAAY,CAAC,IAAI;oBAACC,UAAUJ,OAAOI,QAAQ;gBAAA,CAAC;gBACpE,GAAIJ,OAAOK,KAAK,KAAKF,YAAY,CAAC,IAAI;oBAACE,OAAOL,OAAOK,KAAK;gBAAA,CAAC;gBAC3D,GAAIL,OAAOM,QAAQ,KAAKH,YAAY,CAAC,IAAI;oBAACG,UAAUN,OAAOM,QAAQ;gBAAA,CAAC;YACtE;QACF;AACJ"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { MaterializedAgentIntegrationConfigDto } from '@shipfox/api-agent-dto';
|
|
2
2
|
import type { WorkflowModel } from '@shipfox/api-definitions-dto';
|
|
3
|
-
import type { AgentToolCatalogEntry, IntegrationProviderKind
|
|
4
|
-
import type {
|
|
3
|
+
import type { AgentToolCatalogEntry, IntegrationProviderKind } from '@shipfox/api-integration-core-dto';
|
|
4
|
+
import type { IntegrationsModuleClient } from '@shipfox/api-integration-core-dto/inter-module';
|
|
5
|
+
import type { ProjectsModuleClient } from '@shipfox/api-projects-dto/inter-module';
|
|
5
6
|
type WorkflowModelJob = WorkflowModel['jobs'][number];
|
|
6
7
|
type WorkflowModelAgentStep = Extract<WorkflowModelJob['steps'][number], {
|
|
7
8
|
kind: 'agent';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-tools.d.ts","sourceRoot":"","sources":["../../src/core/agent-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qCAAqC,EAEtC,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,8BAA8B,CAAC;AAChE,OAAO,KAAK,EACV,qBAAqB,EAErB,uBAAuB,
|
|
1
|
+
{"version":3,"file":"agent-tools.d.ts","sourceRoot":"","sources":["../../src/core/agent-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/agent-tools.ts"],"sourcesContent":["import type {\n MaterializedAgentIntegrationConfigDto,\n MaterializedAgentIntegrationToolConfigDto,\n} from '@shipfox/api-agent-dto';\nimport type {WorkflowModel} from '@shipfox/api-definitions-dto';\nimport type {\n AgentToolCatalogEntry,\n AgentToolCatalogMethod,\n IntegrationProviderKind,\n IntegrationsModuleClient,\n} from '@shipfox/api-integration-core-dto';\nimport type {ProjectsModuleClient} from '@shipfox/api-projects-dto';\nimport {AgentIntegrationMaterializationError} from './errors.js';\n\ntype WorkflowModelJob = WorkflowModel['jobs'][number];\ntype WorkflowModelAgentStep = Extract<WorkflowModelJob['steps'][number], {kind: 'agent'}>;\ntype WorkflowModelStepIntegration = NonNullable<WorkflowModelAgentStep['integrations']>[number];\ntype AgentToolCatalogs = ReadonlyMap<IntegrationProviderKind, readonly AgentToolCatalogEntry[]>;\ntype WorkspaceConnectionSnapshot = ReadonlyMap<\n string,\n {\n id: string;\n provider: IntegrationProviderKind;\n capabilities: readonly ('source_control' | 'agent_tools')[];\n }\n>;\n\nexport interface AgentToolMaterializationContext {\n readonly catalogs: AgentToolCatalogs;\n readonly workspaceConnectionSnapshot: WorkspaceConnectionSnapshot;\n readonly defaultConnection: {\n readonly id: string;\n readonly slug: string;\n readonly provider: IntegrationProviderKind;\n };\n}\n\nexport interface AgentToolMaterializationSnapshot {\n readonly steps: readonly AgentToolMaterializationSnapshotStep[];\n}\n\nexport interface AgentToolMaterializationSnapshotStep {\n readonly jobKey: string;\n readonly stepId: string;\n readonly integrations: readonly MaterializedAgentIntegrationConfigDto[];\n}\n\ninterface SelectedToolState {\n readonly entry: AgentToolCatalogEntry;\n readonly methods: Map<string, AgentToolCatalogMethod>;\n selectedStandalone: boolean;\n}\n\nexport async function loadAgentToolMaterializationContext(params: {\n readonly model: WorkflowModel | null;\n readonly workspaceId: string;\n readonly projectId: string;\n readonly integrations?: IntegrationsModuleClient | undefined;\n readonly projects?: ProjectsModuleClient | undefined;\n readonly jobs?: readonly WorkflowModelJob[] | undefined;\n}): Promise<AgentToolMaterializationContext | undefined> {\n if (!modelHasAgentStepIntegrations(params.model, params.jobs)) return undefined;\n\n if (params.projects === undefined) {\n throw new AgentIntegrationMaterializationError('Project access is not configured');\n }\n const {project} = await params.projects.getProjectById({projectId: params.projectId});\n if (project === null) {\n throw new AgentIntegrationMaterializationError(\n `Project ${params.projectId} was not found while materializing agent integrations`,\n );\n }\n\n if (params.integrations === undefined) {\n throw new AgentIntegrationMaterializationError('Agent tool materialization is not configured');\n }\n const context = await params.integrations.getAgentToolsContext({\n workspaceId: params.workspaceId,\n defaultConnectionId: project.sourceConnectionId,\n });\n const workspaceConnectionSnapshot = new Map(\n context.workspaceConnections.map(({slug, ...connection}) => [slug, connection]),\n );\n const defaultConnection = context.defaultConnection;\n if (defaultConnection === null) {\n throw new AgentIntegrationMaterializationError(\n `Source connection ${project.sourceConnectionId} was not found while materializing agent integrations`,\n );\n }\n\n return {\n catalogs: new Map(context.catalogs.map(({provider, tools}) => [provider, tools])),\n workspaceConnectionSnapshot,\n defaultConnection: {\n id: defaultConnection.id,\n slug: defaultConnection.slug,\n provider: defaultConnection.provider,\n },\n };\n}\n\nexport function materializeAgentIntegrations(params: {\n readonly jobKey: string;\n readonly stepId: string;\n readonly integrations: readonly WorkflowModelStepIntegration[] | undefined;\n readonly context: AgentToolMaterializationContext | undefined;\n readonly snapshot?: AgentToolMaterializationSnapshot | null | undefined;\n}): MaterializedAgentIntegrationConfigDto[] | undefined {\n const snapshot = findSnapshotStep(params);\n if (snapshot !== undefined) return snapshot.integrations.map(copyMaterializedIntegration);\n if (params.integrations === undefined) return undefined;\n if (params.context === undefined) {\n throw new AgentIntegrationMaterializationError(\n 'Agent integrations require materialization context',\n );\n }\n const {context} = params;\n\n return params.integrations.map((integration) =>\n materializeAgentIntegration({integration, context}),\n );\n}\n\nexport function createAgentToolMaterializationSnapshot(params: {\n readonly model: WorkflowModel;\n readonly context: AgentToolMaterializationContext | undefined;\n}): AgentToolMaterializationSnapshot | null {\n if (params.context === undefined) return null;\n\n const steps = params.model.jobs.flatMap((job) =>\n job.steps.flatMap((step) => {\n if (step.kind !== 'agent' || step.integrations === undefined) return [];\n const integrations = materializeAgentIntegrations({\n jobKey: job.key,\n stepId: step.id,\n integrations: step.integrations,\n context: params.context,\n });\n if (integrations === undefined) return [];\n return [\n {\n jobKey: job.key,\n stepId: step.id,\n integrations,\n },\n ];\n }),\n );\n\n return steps.length === 0 ? null : {steps};\n}\n\nfunction findSnapshotStep(params: {\n readonly jobKey: string;\n readonly stepId: string;\n readonly snapshot?: AgentToolMaterializationSnapshot | null | undefined;\n}): AgentToolMaterializationSnapshotStep | undefined {\n return params.snapshot?.steps.find(\n (step) => step.jobKey === params.jobKey && step.stepId === params.stepId,\n );\n}\n\nfunction materializeAgentIntegration(params: {\n readonly integration: WorkflowModelStepIntegration;\n readonly context: AgentToolMaterializationContext;\n}): MaterializedAgentIntegrationConfigDto {\n const connection = resolveConnection(params);\n const catalog = params.context.catalogs.get(connection.provider);\n if (catalog === undefined) {\n throw new AgentIntegrationMaterializationError(\n `Integration provider ${connection.provider} has no agent tool catalog`,\n );\n }\n\n const tools = selectTools({\n catalog,\n include: params.integration.include,\n exclude: params.integration.exclude ?? [],\n });\n const requiredScope = mergeRequiredScopes(tools.map((tool) => tool.requiredScope));\n\n return {\n connectionId: connection.id,\n connectionSlug: connection.slug,\n provider: connection.provider,\n requiredScope,\n tools,\n };\n}\n\nfunction copyMaterializedIntegration(\n integration: MaterializedAgentIntegrationConfigDto,\n): MaterializedAgentIntegrationConfigDto {\n return {\n ...integration,\n requiredScope: [...integration.requiredScope],\n tools: integration.tools.map((tool) => ({\n ...tool,\n requiredScope: [...tool.requiredScope],\n ...(tool.methods === undefined\n ? {}\n : {\n methods: tool.methods.map((method) => ({\n ...method,\n requiredScope: [...method.requiredScope],\n })),\n }),\n })),\n };\n}\n\nfunction resolveConnection(params: {\n readonly integration: WorkflowModelStepIntegration;\n readonly context: AgentToolMaterializationContext;\n}): AgentToolMaterializationContext['defaultConnection'] {\n if (params.integration.connection === undefined) return params.context.defaultConnection;\n\n const connection = params.context.workspaceConnectionSnapshot.get(params.integration.connection);\n if (connection === undefined) {\n throw new AgentIntegrationMaterializationError(\n `Integration connection ${params.integration.connection} was not found while materializing agent integrations`,\n );\n }\n return {\n id: connection.id,\n slug: params.integration.connection,\n provider: connection.provider,\n };\n}\n\nfunction selectTools(params: {\n readonly catalog: readonly AgentToolCatalogEntry[];\n readonly include: readonly string[];\n readonly exclude: readonly string[];\n}): MaterializedAgentIntegrationToolConfigDto[] {\n const selected = new Map<string, SelectedToolState>();\n\n for (const token of params.include) {\n applySelection({catalog: params.catalog, selected, token, mode: 'include'});\n }\n for (const token of params.exclude) {\n applySelection({catalog: params.catalog, selected, token, mode: 'exclude'});\n }\n\n const tools = params.catalog.flatMap((entry) => {\n const state = selected.get(entry.id);\n if (state === undefined) return [];\n return [materializedTool(state)];\n });\n if (tools.length === 0) {\n throw new AgentIntegrationMaterializationError(\n 'Agent integration selection resolved to no tools',\n );\n }\n return tools;\n}\n\nfunction applySelection(params: {\n readonly catalog: readonly AgentToolCatalogEntry[];\n readonly selected: Map<string, SelectedToolState>;\n readonly token: string;\n readonly mode: 'include' | 'exclude';\n}): void {\n if (params.token === '*') {\n for (const entry of params.catalog) applyEntrySelection(params, entry);\n return;\n }\n\n const match = findCatalogSelection(params.catalog, params.token);\n if (match === undefined) {\n throw new AgentIntegrationMaterializationError(`Unknown integration tool: ${params.token}`);\n }\n applyEntrySelection(params, match.entry, match.method);\n}\n\nfunction applyEntrySelection(\n params: {\n readonly selected: Map<string, SelectedToolState>;\n readonly token: string;\n readonly mode: 'include' | 'exclude';\n },\n entry: AgentToolCatalogEntry,\n method?: AgentToolCatalogMethod | undefined,\n): void {\n if (params.mode === 'exclude') {\n excludeEntrySelection(params.selected, entry, method);\n return;\n }\n\n const state =\n params.selected.get(entry.id) ??\n ({entry, methods: new Map(), selectedStandalone: false} satisfies SelectedToolState);\n if (entry.methods === undefined) {\n state.selectedStandalone = true;\n } else if (method === undefined) {\n for (const candidate of entry.methods) state.methods.set(candidate.id, candidate);\n } else {\n state.methods.set(method.id, method);\n }\n params.selected.set(entry.id, state);\n}\n\nfunction excludeEntrySelection(\n selected: Map<string, SelectedToolState>,\n entry: AgentToolCatalogEntry,\n method?: AgentToolCatalogMethod | undefined,\n): void {\n if (method === undefined) {\n selected.delete(entry.id);\n return;\n }\n\n const state = selected.get(entry.id);\n if (state === undefined) return;\n state.methods.delete(method.id);\n if (!state.selectedStandalone && state.methods.size === 0) selected.delete(entry.id);\n}\n\nfunction findCatalogSelection(\n catalog: readonly AgentToolCatalogEntry[],\n token: string,\n):\n | {readonly entry: AgentToolCatalogEntry; readonly method?: AgentToolCatalogMethod | undefined}\n | undefined {\n const entry = catalog.find((candidate) => candidate.id === token);\n if (entry !== undefined) return {entry};\n\n const wildcardSuffix = '.*';\n if (token.endsWith(wildcardSuffix)) {\n const family = token.slice(0, -wildcardSuffix.length);\n const familyEntry = catalog.find((candidate) => candidate.id === family);\n return familyEntry === undefined ? undefined : {entry: familyEntry};\n }\n\n const dotIndex = token.indexOf('.');\n if (dotIndex < 1) return undefined;\n const family = token.slice(0, dotIndex);\n const methodId = token.slice(dotIndex + 1);\n const familyEntry = catalog.find((candidate) => candidate.id === family);\n const method = familyEntry?.methods?.find((candidate) => candidate.id === methodId);\n if (familyEntry === undefined || method === undefined) return undefined;\n return {entry: familyEntry, method};\n}\n\nfunction materializedTool(state: SelectedToolState): MaterializedAgentIntegrationToolConfigDto {\n if (state.entry.methods === undefined) {\n return {\n id: state.entry.id,\n sensitivity: state.entry.sensitivity,\n sensitive: state.entry.sensitive,\n requiredScope: normalizeRequiredScope(state.entry.requiredScope),\n inputSchema: state.entry.inputSchema,\n ...(state.entry.outputSchema === undefined ? {} : {outputSchema: state.entry.outputSchema}),\n };\n }\n\n const methods = state.entry.methods\n .filter((method) => state.methods.has(method.id))\n .map((method) => ({\n id: method.id,\n token: `${state.entry.id}.${method.id}`,\n description: method.description,\n sensitivity: method.sensitivity,\n sensitive: method.sensitive,\n requiredScope: normalizeRequiredScope(method.requiredScope),\n }));\n\n return {\n id: state.entry.id,\n sensitivity: methods.some((method) => method.sensitivity === 'write') ? 'write' : 'read',\n sensitive: methods.some((method) => method.sensitive),\n requiredScope: mergeRequiredScopes(methods.map((method) => method.requiredScope)),\n inputSchema: state.entry.inputSchema,\n ...(state.entry.outputSchema === undefined ? {} : {outputSchema: state.entry.outputSchema}),\n methods,\n };\n}\n\nfunction mergeRequiredScopes(scopes: readonly unknown[]): unknown[] {\n const items = scopes.flatMap(normalizeRequiredScope);\n if (items.every(isPermissionScope)) {\n const byPermission = new Map<string, 'read' | 'write'>();\n for (const item of items) {\n const existing = byPermission.get(item.permission);\n if (existing === 'write') continue;\n byPermission.set(item.permission, item.access);\n }\n return [...byPermission.entries()].map(([permission, access]) => ({permission, access}));\n }\n\n const deduped = new Map<string, unknown>();\n for (const item of items) deduped.set(JSON.stringify(item), item);\n return [...deduped.values()];\n}\n\nfunction normalizeRequiredScope(scope: unknown): unknown[] {\n return Array.isArray(scope) ? [...scope] : [scope];\n}\n\nfunction isPermissionScope(\n value: unknown,\n): value is {permission: string; access: 'read' | 'write'} {\n if (typeof value !== 'object' || value === null) return false;\n const candidate = value as {permission?: unknown; access?: unknown};\n return (\n typeof candidate.permission === 'string' &&\n (candidate.access === 'read' || candidate.access === 'write')\n );\n}\n\nfunction modelHasAgentStepIntegrations(\n model: WorkflowModel | null,\n jobs: readonly WorkflowModelJob[] | undefined,\n): boolean {\n if (model === null) return false;\n return (jobs ?? model.jobs).some((job) =>\n job.steps.some((step) => step.kind === 'agent' && step.integrations !== undefined),\n );\n}\n"],"names":["AgentIntegrationMaterializationError","loadAgentToolMaterializationContext","params","modelHasAgentStepIntegrations","model","jobs","undefined","projects","project","getProjectById","projectId","integrations","context","getAgentToolsContext","workspaceId","defaultConnectionId","sourceConnectionId","workspaceConnectionSnapshot","Map","workspaceConnections","map","slug","connection","defaultConnection","catalogs","provider","tools","id","materializeAgentIntegrations","snapshot","findSnapshotStep","copyMaterializedIntegration","integration","materializeAgentIntegration","createAgentToolMaterializationSnapshot","steps","flatMap","job","step","kind","jobKey","key","stepId","length","find","resolveConnection","catalog","get","selectTools","include","exclude","requiredScope","mergeRequiredScopes","tool","connectionId","connectionSlug","methods","method","selected","token","applySelection","mode","entry","state","materializedTool","applyEntrySelection","match","findCatalogSelection","excludeEntrySelection","selectedStandalone","candidate","set","delete","size","wildcardSuffix","endsWith","family","slice","familyEntry","dotIndex","indexOf","methodId","sensitivity","sensitive","normalizeRequiredScope","inputSchema","outputSchema","filter","has","description","some","scopes","items","every","isPermissionScope","byPermission","item","existing","permission","access","entries","deduped","JSON","stringify","values","scope","Array","isArray","value"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/core/agent-tools.ts"],"sourcesContent":["import type {\n MaterializedAgentIntegrationConfigDto,\n MaterializedAgentIntegrationToolConfigDto,\n} from '@shipfox/api-agent-dto';\nimport type {WorkflowModel} from '@shipfox/api-definitions-dto';\nimport type {\n AgentToolCatalogEntry,\n AgentToolCatalogMethod,\n IntegrationProviderKind,\n} from '@shipfox/api-integration-core-dto';\nimport type {IntegrationsModuleClient} from '@shipfox/api-integration-core-dto/inter-module';\nimport type {ProjectsModuleClient} from '@shipfox/api-projects-dto/inter-module';\nimport {AgentIntegrationMaterializationError} from './errors.js';\n\ntype WorkflowModelJob = WorkflowModel['jobs'][number];\ntype WorkflowModelAgentStep = Extract<WorkflowModelJob['steps'][number], {kind: 'agent'}>;\ntype WorkflowModelStepIntegration = NonNullable<WorkflowModelAgentStep['integrations']>[number];\ntype AgentToolCatalogs = ReadonlyMap<IntegrationProviderKind, readonly AgentToolCatalogEntry[]>;\ntype WorkspaceConnectionSnapshot = ReadonlyMap<\n string,\n {\n id: string;\n provider: IntegrationProviderKind;\n capabilities: readonly ('source_control' | 'agent_tools')[];\n }\n>;\n\nexport interface AgentToolMaterializationContext {\n readonly catalogs: AgentToolCatalogs;\n readonly workspaceConnectionSnapshot: WorkspaceConnectionSnapshot;\n readonly defaultConnection: {\n readonly id: string;\n readonly slug: string;\n readonly provider: IntegrationProviderKind;\n };\n}\n\nexport interface AgentToolMaterializationSnapshot {\n readonly steps: readonly AgentToolMaterializationSnapshotStep[];\n}\n\nexport interface AgentToolMaterializationSnapshotStep {\n readonly jobKey: string;\n readonly stepId: string;\n readonly integrations: readonly MaterializedAgentIntegrationConfigDto[];\n}\n\ninterface SelectedToolState {\n readonly entry: AgentToolCatalogEntry;\n readonly methods: Map<string, AgentToolCatalogMethod>;\n selectedStandalone: boolean;\n}\n\nexport async function loadAgentToolMaterializationContext(params: {\n readonly model: WorkflowModel | null;\n readonly workspaceId: string;\n readonly projectId: string;\n readonly integrations?: IntegrationsModuleClient | undefined;\n readonly projects?: ProjectsModuleClient | undefined;\n readonly jobs?: readonly WorkflowModelJob[] | undefined;\n}): Promise<AgentToolMaterializationContext | undefined> {\n if (!modelHasAgentStepIntegrations(params.model, params.jobs)) return undefined;\n\n if (params.projects === undefined) {\n throw new AgentIntegrationMaterializationError('Project access is not configured');\n }\n const {project} = await params.projects.getProjectById({projectId: params.projectId});\n if (project === null) {\n throw new AgentIntegrationMaterializationError(\n `Project ${params.projectId} was not found while materializing agent integrations`,\n );\n }\n\n if (params.integrations === undefined) {\n throw new AgentIntegrationMaterializationError('Agent tool materialization is not configured');\n }\n const context = await params.integrations.getAgentToolsContext({\n workspaceId: params.workspaceId,\n defaultConnectionId: project.sourceConnectionId,\n });\n const workspaceConnectionSnapshot = new Map(\n context.workspaceConnections.map(({slug, ...connection}) => [slug, connection]),\n );\n const defaultConnection = context.defaultConnection;\n if (defaultConnection === null) {\n throw new AgentIntegrationMaterializationError(\n `Source connection ${project.sourceConnectionId} was not found while materializing agent integrations`,\n );\n }\n\n return {\n catalogs: new Map(context.catalogs.map(({provider, tools}) => [provider, tools])),\n workspaceConnectionSnapshot,\n defaultConnection: {\n id: defaultConnection.id,\n slug: defaultConnection.slug,\n provider: defaultConnection.provider,\n },\n };\n}\n\nexport function materializeAgentIntegrations(params: {\n readonly jobKey: string;\n readonly stepId: string;\n readonly integrations: readonly WorkflowModelStepIntegration[] | undefined;\n readonly context: AgentToolMaterializationContext | undefined;\n readonly snapshot?: AgentToolMaterializationSnapshot | null | undefined;\n}): MaterializedAgentIntegrationConfigDto[] | undefined {\n const snapshot = findSnapshotStep(params);\n if (snapshot !== undefined) return snapshot.integrations.map(copyMaterializedIntegration);\n if (params.integrations === undefined) return undefined;\n if (params.context === undefined) {\n throw new AgentIntegrationMaterializationError(\n 'Agent integrations require materialization context',\n );\n }\n const {context} = params;\n\n return params.integrations.map((integration) =>\n materializeAgentIntegration({integration, context}),\n );\n}\n\nexport function createAgentToolMaterializationSnapshot(params: {\n readonly model: WorkflowModel;\n readonly context: AgentToolMaterializationContext | undefined;\n}): AgentToolMaterializationSnapshot | null {\n if (params.context === undefined) return null;\n\n const steps = params.model.jobs.flatMap((job) =>\n job.steps.flatMap((step) => {\n if (step.kind !== 'agent' || step.integrations === undefined) return [];\n const integrations = materializeAgentIntegrations({\n jobKey: job.key,\n stepId: step.id,\n integrations: step.integrations,\n context: params.context,\n });\n if (integrations === undefined) return [];\n return [\n {\n jobKey: job.key,\n stepId: step.id,\n integrations,\n },\n ];\n }),\n );\n\n return steps.length === 0 ? null : {steps};\n}\n\nfunction findSnapshotStep(params: {\n readonly jobKey: string;\n readonly stepId: string;\n readonly snapshot?: AgentToolMaterializationSnapshot | null | undefined;\n}): AgentToolMaterializationSnapshotStep | undefined {\n return params.snapshot?.steps.find(\n (step) => step.jobKey === params.jobKey && step.stepId === params.stepId,\n );\n}\n\nfunction materializeAgentIntegration(params: {\n readonly integration: WorkflowModelStepIntegration;\n readonly context: AgentToolMaterializationContext;\n}): MaterializedAgentIntegrationConfigDto {\n const connection = resolveConnection(params);\n const catalog = params.context.catalogs.get(connection.provider);\n if (catalog === undefined) {\n throw new AgentIntegrationMaterializationError(\n `Integration provider ${connection.provider} has no agent tool catalog`,\n );\n }\n\n const tools = selectTools({\n catalog,\n include: params.integration.include,\n exclude: params.integration.exclude ?? [],\n });\n const requiredScope = mergeRequiredScopes(tools.map((tool) => tool.requiredScope));\n\n return {\n connectionId: connection.id,\n connectionSlug: connection.slug,\n provider: connection.provider,\n requiredScope,\n tools,\n };\n}\n\nfunction copyMaterializedIntegration(\n integration: MaterializedAgentIntegrationConfigDto,\n): MaterializedAgentIntegrationConfigDto {\n return {\n ...integration,\n requiredScope: [...integration.requiredScope],\n tools: integration.tools.map((tool) => ({\n ...tool,\n requiredScope: [...tool.requiredScope],\n ...(tool.methods === undefined\n ? {}\n : {\n methods: tool.methods.map((method) => ({\n ...method,\n requiredScope: [...method.requiredScope],\n })),\n }),\n })),\n };\n}\n\nfunction resolveConnection(params: {\n readonly integration: WorkflowModelStepIntegration;\n readonly context: AgentToolMaterializationContext;\n}): AgentToolMaterializationContext['defaultConnection'] {\n if (params.integration.connection === undefined) return params.context.defaultConnection;\n\n const connection = params.context.workspaceConnectionSnapshot.get(params.integration.connection);\n if (connection === undefined) {\n throw new AgentIntegrationMaterializationError(\n `Integration connection ${params.integration.connection} was not found while materializing agent integrations`,\n );\n }\n return {\n id: connection.id,\n slug: params.integration.connection,\n provider: connection.provider,\n };\n}\n\nfunction selectTools(params: {\n readonly catalog: readonly AgentToolCatalogEntry[];\n readonly include: readonly string[];\n readonly exclude: readonly string[];\n}): MaterializedAgentIntegrationToolConfigDto[] {\n const selected = new Map<string, SelectedToolState>();\n\n for (const token of params.include) {\n applySelection({catalog: params.catalog, selected, token, mode: 'include'});\n }\n for (const token of params.exclude) {\n applySelection({catalog: params.catalog, selected, token, mode: 'exclude'});\n }\n\n const tools = params.catalog.flatMap((entry) => {\n const state = selected.get(entry.id);\n if (state === undefined) return [];\n return [materializedTool(state)];\n });\n if (tools.length === 0) {\n throw new AgentIntegrationMaterializationError(\n 'Agent integration selection resolved to no tools',\n );\n }\n return tools;\n}\n\nfunction applySelection(params: {\n readonly catalog: readonly AgentToolCatalogEntry[];\n readonly selected: Map<string, SelectedToolState>;\n readonly token: string;\n readonly mode: 'include' | 'exclude';\n}): void {\n if (params.token === '*') {\n for (const entry of params.catalog) applyEntrySelection(params, entry);\n return;\n }\n\n const match = findCatalogSelection(params.catalog, params.token);\n if (match === undefined) {\n throw new AgentIntegrationMaterializationError(`Unknown integration tool: ${params.token}`);\n }\n applyEntrySelection(params, match.entry, match.method);\n}\n\nfunction applyEntrySelection(\n params: {\n readonly selected: Map<string, SelectedToolState>;\n readonly token: string;\n readonly mode: 'include' | 'exclude';\n },\n entry: AgentToolCatalogEntry,\n method?: AgentToolCatalogMethod | undefined,\n): void {\n if (params.mode === 'exclude') {\n excludeEntrySelection(params.selected, entry, method);\n return;\n }\n\n const state =\n params.selected.get(entry.id) ??\n ({entry, methods: new Map(), selectedStandalone: false} satisfies SelectedToolState);\n if (entry.methods === undefined) {\n state.selectedStandalone = true;\n } else if (method === undefined) {\n for (const candidate of entry.methods) state.methods.set(candidate.id, candidate);\n } else {\n state.methods.set(method.id, method);\n }\n params.selected.set(entry.id, state);\n}\n\nfunction excludeEntrySelection(\n selected: Map<string, SelectedToolState>,\n entry: AgentToolCatalogEntry,\n method?: AgentToolCatalogMethod | undefined,\n): void {\n if (method === undefined) {\n selected.delete(entry.id);\n return;\n }\n\n const state = selected.get(entry.id);\n if (state === undefined) return;\n state.methods.delete(method.id);\n if (!state.selectedStandalone && state.methods.size === 0) selected.delete(entry.id);\n}\n\nfunction findCatalogSelection(\n catalog: readonly AgentToolCatalogEntry[],\n token: string,\n):\n | {readonly entry: AgentToolCatalogEntry; readonly method?: AgentToolCatalogMethod | undefined}\n | undefined {\n const entry = catalog.find((candidate) => candidate.id === token);\n if (entry !== undefined) return {entry};\n\n const wildcardSuffix = '.*';\n if (token.endsWith(wildcardSuffix)) {\n const family = token.slice(0, -wildcardSuffix.length);\n const familyEntry = catalog.find((candidate) => candidate.id === family);\n return familyEntry === undefined ? undefined : {entry: familyEntry};\n }\n\n const dotIndex = token.indexOf('.');\n if (dotIndex < 1) return undefined;\n const family = token.slice(0, dotIndex);\n const methodId = token.slice(dotIndex + 1);\n const familyEntry = catalog.find((candidate) => candidate.id === family);\n const method = familyEntry?.methods?.find((candidate) => candidate.id === methodId);\n if (familyEntry === undefined || method === undefined) return undefined;\n return {entry: familyEntry, method};\n}\n\nfunction materializedTool(state: SelectedToolState): MaterializedAgentIntegrationToolConfigDto {\n if (state.entry.methods === undefined) {\n return {\n id: state.entry.id,\n sensitivity: state.entry.sensitivity,\n sensitive: state.entry.sensitive,\n requiredScope: normalizeRequiredScope(state.entry.requiredScope),\n inputSchema: state.entry.inputSchema,\n ...(state.entry.outputSchema === undefined ? {} : {outputSchema: state.entry.outputSchema}),\n };\n }\n\n const methods = state.entry.methods\n .filter((method) => state.methods.has(method.id))\n .map((method) => ({\n id: method.id,\n token: `${state.entry.id}.${method.id}`,\n description: method.description,\n sensitivity: method.sensitivity,\n sensitive: method.sensitive,\n requiredScope: normalizeRequiredScope(method.requiredScope),\n }));\n\n return {\n id: state.entry.id,\n sensitivity: methods.some((method) => method.sensitivity === 'write') ? 'write' : 'read',\n sensitive: methods.some((method) => method.sensitive),\n requiredScope: mergeRequiredScopes(methods.map((method) => method.requiredScope)),\n inputSchema: state.entry.inputSchema,\n ...(state.entry.outputSchema === undefined ? {} : {outputSchema: state.entry.outputSchema}),\n methods,\n };\n}\n\nfunction mergeRequiredScopes(scopes: readonly unknown[]): unknown[] {\n const items = scopes.flatMap(normalizeRequiredScope);\n if (items.every(isPermissionScope)) {\n const byPermission = new Map<string, 'read' | 'write'>();\n for (const item of items) {\n const existing = byPermission.get(item.permission);\n if (existing === 'write') continue;\n byPermission.set(item.permission, item.access);\n }\n return [...byPermission.entries()].map(([permission, access]) => ({permission, access}));\n }\n\n const deduped = new Map<string, unknown>();\n for (const item of items) deduped.set(JSON.stringify(item), item);\n return [...deduped.values()];\n}\n\nfunction normalizeRequiredScope(scope: unknown): unknown[] {\n return Array.isArray(scope) ? [...scope] : [scope];\n}\n\nfunction isPermissionScope(\n value: unknown,\n): value is {permission: string; access: 'read' | 'write'} {\n if (typeof value !== 'object' || value === null) return false;\n const candidate = value as {permission?: unknown; access?: unknown};\n return (\n typeof candidate.permission === 'string' &&\n (candidate.access === 'read' || candidate.access === 'write')\n );\n}\n\nfunction modelHasAgentStepIntegrations(\n model: WorkflowModel | null,\n jobs: readonly WorkflowModelJob[] | undefined,\n): boolean {\n if (model === null) return false;\n return (jobs ?? model.jobs).some((job) =>\n job.steps.some((step) => step.kind === 'agent' && step.integrations !== undefined),\n );\n}\n"],"names":["AgentIntegrationMaterializationError","loadAgentToolMaterializationContext","params","modelHasAgentStepIntegrations","model","jobs","undefined","projects","project","getProjectById","projectId","integrations","context","getAgentToolsContext","workspaceId","defaultConnectionId","sourceConnectionId","workspaceConnectionSnapshot","Map","workspaceConnections","map","slug","connection","defaultConnection","catalogs","provider","tools","id","materializeAgentIntegrations","snapshot","findSnapshotStep","copyMaterializedIntegration","integration","materializeAgentIntegration","createAgentToolMaterializationSnapshot","steps","flatMap","job","step","kind","jobKey","key","stepId","length","find","resolveConnection","catalog","get","selectTools","include","exclude","requiredScope","mergeRequiredScopes","tool","connectionId","connectionSlug","methods","method","selected","token","applySelection","mode","entry","state","materializedTool","applyEntrySelection","match","findCatalogSelection","excludeEntrySelection","selectedStandalone","candidate","set","delete","size","wildcardSuffix","endsWith","family","slice","familyEntry","dotIndex","indexOf","methodId","sensitivity","sensitive","normalizeRequiredScope","inputSchema","outputSchema","filter","has","description","some","scopes","items","every","isPermissionScope","byPermission","item","existing","permission","access","entries","deduped","JSON","stringify","values","scope","Array","isArray","value"],"mappings":"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"}
|
package/dist/core/checkout.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { IntegrationsModuleClient } from '@shipfox/api-integration-core-dto';
|
|
2
|
-
import type { ProjectsModuleClient } from '@shipfox/api-projects-dto';
|
|
1
|
+
import type { IntegrationsModuleClient } from '@shipfox/api-integration-core-dto/inter-module';
|
|
2
|
+
import type { ProjectsModuleClient } from '@shipfox/api-projects-dto/inter-module';
|
|
3
3
|
export interface CheckoutIntent {
|
|
4
4
|
workspaceId: string;
|
|
5
5
|
connectionId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkout.d.ts","sourceRoot":"","sources":["../../src/core/checkout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"checkout.d.ts","sourceRoot":"","sources":["../../src/core/checkout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,gDAAgD,CAAC;AAC7F,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,wCAAwC,CAAC;AAQjF,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,WAAW,EAAE;QAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAA;KAAC,CAAC;CAC3C;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,oBAAoB,GAC7B,OAAO,CAAC,cAAc,CAAC,CAiBzB;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CAAC,EAC1C,KAAK,EACL,YAAY,EACZ,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,wBAAwB,CAAC;IACvC,QAAQ,EAAE,oBAAoB,CAAC;CAChC,GAAG,OAAO,CAAC;IACV,IAAI,EAAE;QACJ,aAAa,EAAE,MAAM,CAAC;QACtB,GAAG,EAAE,MAAM,CAAC;QACZ,WAAW,CAAC,EAAE;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,IAAI,CAAA;SAAC,CAAC;QACjE,SAAS,CAAC,EAAE;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAC,CAAC;KAC3C,CAAC;IACF,kBAAkB,EAAE,OAAO,CAAC;CAC7B,CAAC,CAwBD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/checkout.ts"],"sourcesContent":["import type {IntegrationsModuleClient} from '@shipfox/api-integration-core-dto';\nimport type {ProjectsModuleClient} from '@shipfox/api-projects-dto';\nimport {getJobById, getWorkflowRunByAttemptId} from '#db/workflow-runs.js';\nimport {\n CheckoutIntentUnresolvedError,\n JobNotFoundError,\n WorkflowRunNotFoundError,\n} from './errors.js';\n\nexport interface CheckoutIntent {\n workspaceId: string;\n connectionId: string;\n externalRepositoryId: string;\n persistCredentials: boolean;\n permissions: {contents: 'read' | 'write'};\n}\n\n/**\n * Resolves what to check out for a job, keyed off the authoritative `jobId`\n * (`workflowRunId`/`workflowRunAttemptId`/`workspaceId` in the lease claim are informational).\n * Chain: job → attempt → run → project source metadata. Credential-free.\n */\nexport async function resolveCheckoutIntent(\n jobId: string,\n projects: ProjectsModuleClient,\n): Promise<CheckoutIntent> {\n const job = await getJobById(jobId);\n if (!job) throw new JobNotFoundError(jobId);\n\n const run = await getWorkflowRunByAttemptId(job.workflowRunAttemptId);\n if (!run) throw new WorkflowRunNotFoundError(job.workflowRunAttemptId);\n\n const {project} = await projects.getProjectById({projectId: run.projectId});\n if (project === null) throw new CheckoutIntentUnresolvedError(run.projectId);\n\n return {\n workspaceId: project.workspaceId,\n connectionId: project.sourceConnectionId,\n externalRepositoryId: project.sourceExternalRepositoryId,\n persistCredentials: job.checkout.persistCredentials,\n permissions: job.checkout.permissions,\n };\n}\n\n/**\n * Resolves the job's checkout intent and exchanges it for a short-lived,\n * scoped checkout spec. Omitting `ref` lets the provider use the repository's\n * default branch while preserving the JSON-only inter-module boundary.\n */\nexport async function createJobCheckoutSpec({\n jobId,\n integrations,\n projects,\n}: {\n jobId: string;\n integrations: IntegrationsModuleClient;\n projects: ProjectsModuleClient;\n}): Promise<{\n spec: {\n repositoryUrl: string;\n ref: string;\n credentials?: {username: string; token: string; expiresAt: Date};\n gitAuthor?: {name: string; email: string};\n };\n persistCredentials: boolean;\n}> {\n const intent = await resolveCheckoutIntent(jobId, projects);\n const response = await integrations.createCheckoutSpec({\n workspaceId: intent.workspaceId,\n connectionId: intent.connectionId,\n externalRepositoryId: intent.externalRepositoryId,\n permissions: intent.permissions,\n });\n const {credentials, gitAuthor, ...checkout} = response;\n return {\n spec: {\n ...checkout,\n ...(credentials\n ? {\n credentials: {\n ...credentials,\n expiresAt: new Date(credentials.expiresAt),\n },\n }\n : {}),\n ...(gitAuthor ? {gitAuthor} : {}),\n },\n persistCredentials: intent.persistCredentials,\n };\n}\n"],"names":["getJobById","getWorkflowRunByAttemptId","CheckoutIntentUnresolvedError","JobNotFoundError","WorkflowRunNotFoundError","resolveCheckoutIntent","jobId","projects","job","run","workflowRunAttemptId","project","getProjectById","projectId","workspaceId","connectionId","sourceConnectionId","externalRepositoryId","sourceExternalRepositoryId","persistCredentials","checkout","permissions","createJobCheckoutSpec","integrations","intent","response","createCheckoutSpec","credentials","gitAuthor","spec","expiresAt","Date"],"mappings":"AAEA,SAAQA,UAAU,EAAEC,yBAAyB,QAAO,uBAAuB;AAC3E,SACEC,6BAA6B,EAC7BC,gBAAgB,EAChBC,wBAAwB,QACnB,cAAc;AAUrB;;;;CAIC,GACD,OAAO,eAAeC,sBACpBC,KAAa,EACbC,QAA8B;IAE9B,MAAMC,MAAM,MAAMR,WAAWM;IAC7B,IAAI,CAACE,KAAK,MAAM,IAAIL,iBAAiBG;IAErC,MAAMG,MAAM,MAAMR,0BAA0BO,IAAIE,oBAAoB;IACpE,IAAI,CAACD,KAAK,MAAM,IAAIL,yBAAyBI,IAAIE,oBAAoB;IAErE,MAAM,EAACC,OAAO,EAAC,GAAG,MAAMJ,SAASK,cAAc,CAAC;QAACC,WAAWJ,IAAII,SAAS;IAAA;IACzE,IAAIF,YAAY,MAAM,MAAM,IAAIT,8BAA8BO,IAAII,SAAS;IAE3E,OAAO;QACLC,aAAaH,QAAQG,WAAW;QAChCC,cAAcJ,QAAQK,kBAAkB;QACxCC,sBAAsBN,QAAQO,0BAA0B;QACxDC,oBAAoBX,IAAIY,QAAQ,CAACD,kBAAkB;QACnDE,aAAab,IAAIY,QAAQ,CAACC,WAAW;IACvC;AACF;AAEA;;;;CAIC,GACD,OAAO,eAAeC,sBAAsB,EAC1ChB,KAAK,EACLiB,YAAY,EACZhB,QAAQ,EAKT;IASC,MAAMiB,SAAS,MAAMnB,sBAAsBC,OAAOC;IAClD,MAAMkB,WAAW,MAAMF,aAAaG,kBAAkB,CAAC;QACrDZ,aAAaU,OAAOV,WAAW;QAC/BC,cAAcS,OAAOT,YAAY;QACjCE,sBAAsBO,OAAOP,oBAAoB;QACjDI,aAAaG,OAAOH,WAAW;IACjC;IACA,MAAM,EAACM,WAAW,EAAEC,SAAS,EAAE,GAAGR,UAAS,GAAGK;IAC9C,OAAO;QACLI,MAAM;YACJ,GAAGT,QAAQ;YACX,GAAIO,cACA;gBACEA,aAAa;oBACX,GAAGA,WAAW;oBACdG,WAAW,IAAIC,KAAKJ,YAAYG,SAAS;gBAC3C;YACF,IACA,CAAC,CAAC;YACN,GAAIF,YAAY;gBAACA;YAAS,IAAI,CAAC,CAAC;QAClC;QACAT,oBAAoBK,OAAOL,kBAAkB;IAC/C;AACF"}
|
|
1
|
+
{"version":3,"sources":["../../src/core/checkout.ts"],"sourcesContent":["import type {IntegrationsModuleClient} from '@shipfox/api-integration-core-dto/inter-module';\nimport type {ProjectsModuleClient} from '@shipfox/api-projects-dto/inter-module';\nimport {getJobById, getWorkflowRunByAttemptId} from '#db/workflow-runs.js';\nimport {\n CheckoutIntentUnresolvedError,\n JobNotFoundError,\n WorkflowRunNotFoundError,\n} from './errors.js';\n\nexport interface CheckoutIntent {\n workspaceId: string;\n connectionId: string;\n externalRepositoryId: string;\n persistCredentials: boolean;\n permissions: {contents: 'read' | 'write'};\n}\n\n/**\n * Resolves what to check out for a job, keyed off the authoritative `jobId`\n * (`workflowRunId`/`workflowRunAttemptId`/`workspaceId` in the lease claim are informational).\n * Chain: job → attempt → run → project source metadata. Credential-free.\n */\nexport async function resolveCheckoutIntent(\n jobId: string,\n projects: ProjectsModuleClient,\n): Promise<CheckoutIntent> {\n const job = await getJobById(jobId);\n if (!job) throw new JobNotFoundError(jobId);\n\n const run = await getWorkflowRunByAttemptId(job.workflowRunAttemptId);\n if (!run) throw new WorkflowRunNotFoundError(job.workflowRunAttemptId);\n\n const {project} = await projects.getProjectById({projectId: run.projectId});\n if (project === null) throw new CheckoutIntentUnresolvedError(run.projectId);\n\n return {\n workspaceId: project.workspaceId,\n connectionId: project.sourceConnectionId,\n externalRepositoryId: project.sourceExternalRepositoryId,\n persistCredentials: job.checkout.persistCredentials,\n permissions: job.checkout.permissions,\n };\n}\n\n/**\n * Resolves the job's checkout intent and exchanges it for a short-lived,\n * scoped checkout spec. Omitting `ref` lets the provider use the repository's\n * default branch while preserving the JSON-only inter-module boundary.\n */\nexport async function createJobCheckoutSpec({\n jobId,\n integrations,\n projects,\n}: {\n jobId: string;\n integrations: IntegrationsModuleClient;\n projects: ProjectsModuleClient;\n}): Promise<{\n spec: {\n repositoryUrl: string;\n ref: string;\n credentials?: {username: string; token: string; expiresAt: Date};\n gitAuthor?: {name: string; email: string};\n };\n persistCredentials: boolean;\n}> {\n const intent = await resolveCheckoutIntent(jobId, projects);\n const response = await integrations.createCheckoutSpec({\n workspaceId: intent.workspaceId,\n connectionId: intent.connectionId,\n externalRepositoryId: intent.externalRepositoryId,\n permissions: intent.permissions,\n });\n const {credentials, gitAuthor, ...checkout} = response;\n return {\n spec: {\n ...checkout,\n ...(credentials\n ? {\n credentials: {\n ...credentials,\n expiresAt: new Date(credentials.expiresAt),\n },\n }\n : {}),\n ...(gitAuthor ? {gitAuthor} : {}),\n },\n persistCredentials: intent.persistCredentials,\n };\n}\n"],"names":["getJobById","getWorkflowRunByAttemptId","CheckoutIntentUnresolvedError","JobNotFoundError","WorkflowRunNotFoundError","resolveCheckoutIntent","jobId","projects","job","run","workflowRunAttemptId","project","getProjectById","projectId","workspaceId","connectionId","sourceConnectionId","externalRepositoryId","sourceExternalRepositoryId","persistCredentials","checkout","permissions","createJobCheckoutSpec","integrations","intent","response","createCheckoutSpec","credentials","gitAuthor","spec","expiresAt","Date"],"mappings":"AAEA,SAAQA,UAAU,EAAEC,yBAAyB,QAAO,uBAAuB;AAC3E,SACEC,6BAA6B,EAC7BC,gBAAgB,EAChBC,wBAAwB,QACnB,cAAc;AAUrB;;;;CAIC,GACD,OAAO,eAAeC,sBACpBC,KAAa,EACbC,QAA8B;IAE9B,MAAMC,MAAM,MAAMR,WAAWM;IAC7B,IAAI,CAACE,KAAK,MAAM,IAAIL,iBAAiBG;IAErC,MAAMG,MAAM,MAAMR,0BAA0BO,IAAIE,oBAAoB;IACpE,IAAI,CAACD,KAAK,MAAM,IAAIL,yBAAyBI,IAAIE,oBAAoB;IAErE,MAAM,EAACC,OAAO,EAAC,GAAG,MAAMJ,SAASK,cAAc,CAAC;QAACC,WAAWJ,IAAII,SAAS;IAAA;IACzE,IAAIF,YAAY,MAAM,MAAM,IAAIT,8BAA8BO,IAAII,SAAS;IAE3E,OAAO;QACLC,aAAaH,QAAQG,WAAW;QAChCC,cAAcJ,QAAQK,kBAAkB;QACxCC,sBAAsBN,QAAQO,0BAA0B;QACxDC,oBAAoBX,IAAIY,QAAQ,CAACD,kBAAkB;QACnDE,aAAab,IAAIY,QAAQ,CAACC,WAAW;IACvC;AACF;AAEA;;;;CAIC,GACD,OAAO,eAAeC,sBAAsB,EAC1ChB,KAAK,EACLiB,YAAY,EACZhB,QAAQ,EAKT;IASC,MAAMiB,SAAS,MAAMnB,sBAAsBC,OAAOC;IAClD,MAAMkB,WAAW,MAAMF,aAAaG,kBAAkB,CAAC;QACrDZ,aAAaU,OAAOV,WAAW;QAC/BC,cAAcS,OAAOT,YAAY;QACjCE,sBAAsBO,OAAOP,oBAAoB;QACjDI,aAAaG,OAAOH,WAAW;IACjC;IACA,MAAM,EAACM,WAAW,EAAEC,SAAS,EAAE,GAAGR,UAAS,GAAGK;IAC9C,OAAO;QACLI,MAAM;YACJ,GAAGT,QAAQ;YACX,GAAIO,cACA;gBACEA,aAAa;oBACX,GAAGA,WAAW;oBACdG,WAAW,IAAIC,KAAKJ,YAAYG,SAAS;gBAC3C;YACF,IACA,CAAC,CAAC;YACN,GAAIF,YAAY;gBAACA;YAAS,IAAI,CAAC,CAAC;QAClC;QACAT,oBAAoBK,OAAOL,kBAAkB;IAC/C;AACF"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type { AgentIntegrationMcpServerConfigDto,
|
|
1
|
+
import type { AgentIntegrationMcpServerConfigDto, MaterializedAgentIntegrationConfigDto } from '@shipfox/api-agent-dto';
|
|
2
2
|
import type { EvaluationTraceEntry, EvaluationTraceLimitEntry, ResolvedField, WorkflowExpression } from '@shipfox/expression';
|
|
3
|
+
import type { AgentThinking, Harness } from '@shipfox/workflow-document';
|
|
3
4
|
import type { InterpolationUnresolvableField } from '../errors.js';
|
|
4
5
|
export type StepStatus = 'pending' | 'running' | 'succeeded' | 'failed' | 'cancelled' | 'skipped';
|
|
5
6
|
export declare const STEP_STATUS_REASONS: readonly ["default_gate_rejected", "condition_rejected", "condition_errored"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step.d.ts","sourceRoot":"","sources":["../../../src/core/entities/step.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kCAAkC,EAClC,
|
|
1
|
+
{"version":3,"file":"step.d.ts","sourceRoot":"","sources":["../../../src/core/entities/step.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/entities/step.ts"],"sourcesContent":["import type {\n AgentIntegrationMcpServerConfigDto,\n
|
|
1
|
+
{"version":3,"sources":["../../../src/core/entities/step.ts"],"sourcesContent":["import type {\n AgentIntegrationMcpServerConfigDto,\n MaterializedAgentIntegrationConfigDto,\n} from '@shipfox/api-agent-dto';\nimport type {\n EvaluationTraceEntry,\n EvaluationTraceLimitEntry,\n ResolvedField,\n WorkflowExpression,\n} from '@shipfox/expression';\nimport type {AgentThinking, Harness} from '@shipfox/workflow-document';\nimport type {InterpolationUnresolvableField} from '../errors.js';\n\nexport type StepStatus = 'pending' | 'running' | 'succeeded' | 'failed' | 'cancelled' | 'skipped';\n\nexport const STEP_STATUS_REASONS = [\n 'default_gate_rejected',\n 'condition_rejected',\n 'condition_errored',\n] as const;\n\nexport type StepStatusReason = (typeof STEP_STATUS_REASONS)[number];\n\nconst STEP_STATUS_REASON_SET = new Set<StepStatusReason>(STEP_STATUS_REASONS);\n\nexport function toStepStatusReason(value: string | null): StepStatusReason | null {\n if (value === null) return null;\n return STEP_STATUS_REASON_SET.has(value as StepStatusReason) ? (value as StepStatusReason) : null;\n}\n\nexport type StepAttemptLogOutcome = 'drained' | 'abandoned';\n\n// A step_attempts row exists only once an attempt is dispatched, so it is never\n// 'pending' or 'skipped'.\nexport type StepAttemptStatus = Exclude<StepStatus, 'pending' | 'skipped'>;\n\nexport interface StepSourceLocation {\n startLine: number;\n endLine: number;\n}\n\n/**\n * Trace entry after a resolver-local expression trace is attached to workflow\n * storage.\n *\n * Step config traces are stored on step attempts with the resolved attempt\n * config; job-level traces are stored on the job or job-execution row whose\n * value/status they explain. Keep `field` as the authored field path that\n * produced the trace, not as a step-only enum.\n */\nexport type PersistedEvaluationTraceEntry =\n | (EvaluationTraceEntry & {\n readonly field: string;\n readonly envKey?: string;\n })\n | EvaluationTraceLimitEntry;\n\nexport interface StepConfigEvaluationTraceEntry extends EvaluationTraceEntry {\n readonly field: InterpolationUnresolvableField;\n readonly envKey?: string;\n}\n\nexport interface StepConfigDispatchPlan {\n run?: ResolvedField;\n env?: Readonly<Record<string, ResolvedField>>;\n agent?: {\n prompt?: ResolvedField;\n model?: ResolvedField;\n provider?: ResolvedField;\n harness?: Harness;\n thinking?: AgentThinking;\n tools?: readonly string[];\n integrations?: readonly MaterializedAgentIntegrationConfigDto[];\n mcpServers?: readonly AgentIntegrationMcpServerConfigDto[];\n };\n trace?: readonly (StepConfigEvaluationTraceEntry | EvaluationTraceLimitEntry)[];\n}\n\nexport interface Step {\n id: string;\n jobExecutionId: string;\n key: string | null;\n name: string;\n sourceLocation: StepSourceLocation | null;\n status: StepStatus;\n statusReason: StepStatusReason | null;\n evaluationTrace: readonly PersistedEvaluationTraceEntry[] | null;\n type: string;\n config: Record<string, unknown>;\n condition: WorkflowExpression | null;\n configPlan: StepConfigDispatchPlan | null;\n authoredConfig: Record<string, unknown> | null;\n error: Record<string, unknown> | null;\n position: number;\n version: number;\n // Execution-attempt identity for the current projection: which attempt the\n // status/output/error above reflect. Distinct from `version` (the optimistic\n // row counter). Starts at 1 and is bumped when a step is rewound.\n currentAttempt: number;\n createdAt: Date;\n updatedAt: Date;\n}\n\n// Append-only execution history: one row per dispatched attempt of a step. The\n// current projection lives on `Step`; this is the audit trail and the\n// idempotency anchor (unique on (stepId, attempt)).\nexport interface StepAttempt {\n id: string;\n stepId: string;\n attempt: number;\n executionOrder: number;\n status: StepAttemptStatus;\n config: Record<string, unknown> | null;\n evaluationTrace: readonly PersistedEvaluationTraceEntry[] | null;\n output: Record<string, unknown> | null;\n response: string | null;\n error: Record<string, unknown> | null;\n exitCode: number | null;\n gateResult: Record<string, unknown> | null;\n restartFeedback: string | null;\n logOutcome: StepAttemptLogOutcome | null;\n startedAt: Date;\n finishedAt: Date | null;\n createdAt: Date;\n}\n"],"names":["STEP_STATUS_REASONS","STEP_STATUS_REASON_SET","Set","toStepStatusReason","value","has"],"mappings":"AAeA,OAAO,MAAMA,sBAAsB;IACjC;IACA;IACA;CACD,CAAU;AAIX,MAAMC,yBAAyB,IAAIC,IAAsBF;AAEzD,OAAO,SAASG,mBAAmBC,KAAoB;IACrD,IAAIA,UAAU,MAAM,OAAO;IAC3B,OAAOH,uBAAuBI,GAAG,CAACD,SAA8BA,QAA6B;AAC/F"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { AgentInterModuleClient } from '@shipfox/api-agent-dto/inter-module';
|
|
2
2
|
import type { DefinitionsInterModuleClient } from '@shipfox/api-definitions-dto/inter-module';
|
|
3
|
-
import type { IntegrationsModuleClient } from '@shipfox/api-integration-core-dto';
|
|
4
|
-
import type { ProjectsModuleClient } from '@shipfox/api-projects-dto';
|
|
3
|
+
import type { IntegrationsModuleClient } from '@shipfox/api-integration-core-dto/inter-module';
|
|
4
|
+
import type { ProjectsModuleClient } from '@shipfox/api-projects-dto/inter-module';
|
|
5
5
|
import type { SecretsInterModuleClient } from '@shipfox/api-secrets-dto/inter-module';
|
|
6
6
|
import type { TriggerPayload, WorkflowRun } from './entities/workflow-run.js';
|
|
7
7
|
export interface RunWorkflowParams {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-workflow.d.ts","sourceRoot":"","sources":["../../src/core/run-workflow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,qCAAqC,CAAC;AAEhF,OAAO,KAAK,EAAC,4BAA4B,EAAC,MAAM,2CAA2C,CAAC;AAC5F,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"run-workflow.d.ts","sourceRoot":"","sources":["../../src/core/run-workflow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,qCAAqC,CAAC;AAEhF,OAAO,KAAK,EAAC,4BAA4B,EAAC,MAAM,2CAA2C,CAAC;AAC5F,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,gDAAgD,CAAC;AAC7F,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,wCAAwC,CAAC;AACjF,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,uCAAuC,CAAC;AAGpF,OAAO,KAAK,EAAC,cAAc,EAAE,WAAW,EAAC,MAAM,4BAA4B,CAAC;AAI5E,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,cAAc,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAC7C,qBAAqB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,YAAY,CAAC,EAAE,wBAAwB,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;CAC7C;AAED,wBAAsB,WAAW,CAC/B,WAAW,EAAE,4BAA4B,EACzC,MAAM,EAAE,iBAAiB,GAAG;IAAC,KAAK,EAAE,sBAAsB,CAAA;CAAC,EAC3D,OAAO,GAAE;IAAC,OAAO,CAAC,EAAE,IAAI,CAAC,wBAAwB,EAAE,yBAAyB,CAAC,CAAA;CAAM,GAClF,OAAO,CAAC,WAAW,CAAC,CA8BtB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/run-workflow.ts"],"sourcesContent":["import type {AgentInterModuleClient} from '@shipfox/api-agent-dto/inter-module';\nimport {workflowModelFromSnapshot} from '@shipfox/api-definitions-dto';\nimport type {DefinitionsInterModuleClient} from '@shipfox/api-definitions-dto/inter-module';\nimport type {IntegrationsModuleClient} from '@shipfox/api-integration-core-dto';\nimport type {ProjectsModuleClient} from '@shipfox/api-projects-dto';\nimport type {SecretsInterModuleClient} from '@shipfox/api-secrets-dto/inter-module';\nimport {createWorkflowRun} from '#db/workflow-runs.js';\nimport {createAgentDefaultsResolver} from './agent-defaults.js';\nimport type {TriggerPayload, WorkflowRun} from './entities/workflow-run.js';\nimport {DefinitionNotFoundError, ProjectMismatchError} from './errors.js';\nimport {modelHasAgentStep} from './step-config/materialize-workflow-model.js';\n\nexport interface RunWorkflowParams {\n workspaceId: string;\n projectId: string;\n definitionId: string;\n triggerPayload: TriggerPayload;\n inputs?: Record<string, unknown> | undefined;\n triggerIdempotencyKey?: string | undefined;\n integrations?: IntegrationsModuleClient | undefined;\n projects?: ProjectsModuleClient | undefined;\n}\n\nexport async function runWorkflow(\n definitions: DefinitionsInterModuleClient,\n params: RunWorkflowParams & {agent: AgentInterModuleClient},\n options: {secrets?: Pick<SecretsInterModuleClient, 'getVariablesByNamespace'>} = {},\n): Promise<WorkflowRun> {\n const {definition} = await definitions.getDefinitionForWorkflowRun({\n definitionId: params.definitionId,\n });\n if (!definition) throw new DefinitionNotFoundError(params.definitionId);\n\n if (definition.projectId !== params.projectId) {\n throw new ProjectMismatchError(definition.projectId, params.projectId);\n }\n const model = workflowModelFromSnapshot(definition.model);\n const resolveAgentDefaults = createAgentDefaultsResolver(\n params.agent,\n modelHasAgentStep(model) ? params.workspaceId : null,\n );\n\n return createWorkflowRun({\n workspaceId: params.workspaceId,\n projectId: params.projectId,\n definitionId: definition.id,\n name: definition.name,\n model,\n triggerPayload: params.triggerPayload,\n inputs: params.inputs,\n sourceSnapshot: definition.sourceSnapshot,\n triggerIdempotencyKey: params.triggerIdempotencyKey,\n resolveAgentDefaults,\n secrets: options.secrets,\n integrations: params.integrations,\n projects: params.projects,\n });\n}\n"],"names":["workflowModelFromSnapshot","createWorkflowRun","createAgentDefaultsResolver","DefinitionNotFoundError","ProjectMismatchError","modelHasAgentStep","runWorkflow","definitions","params","options","definition","getDefinitionForWorkflowRun","definitionId","projectId","model","resolveAgentDefaults","agent","workspaceId","id","name","triggerPayload","inputs","sourceSnapshot","triggerIdempotencyKey","secrets","integrations","projects"],"mappings":"AACA,SAAQA,yBAAyB,QAAO,+BAA+B;AAKvE,SAAQC,iBAAiB,QAAO,uBAAuB;AACvD,SAAQC,2BAA2B,QAAO,sBAAsB;AAEhE,SAAQC,uBAAuB,EAAEC,oBAAoB,QAAO,cAAc;AAC1E,SAAQC,iBAAiB,QAAO,8CAA8C;AAa9E,OAAO,eAAeC,YACpBC,WAAyC,EACzCC,MAA2D,EAC3DC,UAAiF,CAAC,CAAC;IAEnF,MAAM,EAACC,UAAU,EAAC,GAAG,MAAMH,YAAYI,2BAA2B,CAAC;QACjEC,cAAcJ,OAAOI,YAAY;IACnC;IACA,IAAI,CAACF,YAAY,MAAM,IAAIP,wBAAwBK,OAAOI,YAAY;IAEtE,IAAIF,WAAWG,SAAS,KAAKL,OAAOK,SAAS,EAAE;QAC7C,MAAM,IAAIT,qBAAqBM,WAAWG,SAAS,EAAEL,OAAOK,SAAS;IACvE;IACA,MAAMC,QAAQd,0BAA0BU,WAAWI,KAAK;IACxD,MAAMC,uBAAuBb,4BAC3BM,OAAOQ,KAAK,EACZX,kBAAkBS,SAASN,OAAOS,WAAW,GAAG;IAGlD,OAAOhB,kBAAkB;QACvBgB,aAAaT,OAAOS,WAAW;QAC/BJ,WAAWL,OAAOK,SAAS;QAC3BD,cAAcF,WAAWQ,EAAE;QAC3BC,MAAMT,WAAWS,IAAI;QACrBL;QACAM,gBAAgBZ,OAAOY,cAAc;QACrCC,QAAQb,OAAOa,MAAM;QACrBC,gBAAgBZ,WAAWY,cAAc;QACzCC,uBAAuBf,OAAOe,qBAAqB;QACnDR;QACAS,SAASf,QAAQe,OAAO;QACxBC,cAAcjB,OAAOiB,YAAY;QACjCC,UAAUlB,OAAOkB,QAAQ;IAC3B;AACF"}
|
|
1
|
+
{"version":3,"sources":["../../src/core/run-workflow.ts"],"sourcesContent":["import type {AgentInterModuleClient} from '@shipfox/api-agent-dto/inter-module';\nimport {workflowModelFromSnapshot} from '@shipfox/api-definitions-dto';\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 {SecretsInterModuleClient} from '@shipfox/api-secrets-dto/inter-module';\nimport {createWorkflowRun} from '#db/workflow-runs.js';\nimport {createAgentDefaultsResolver} from './agent-defaults.js';\nimport type {TriggerPayload, WorkflowRun} from './entities/workflow-run.js';\nimport {DefinitionNotFoundError, ProjectMismatchError} from './errors.js';\nimport {modelHasAgentStep} from './step-config/materialize-workflow-model.js';\n\nexport interface RunWorkflowParams {\n workspaceId: string;\n projectId: string;\n definitionId: string;\n triggerPayload: TriggerPayload;\n inputs?: Record<string, unknown> | undefined;\n triggerIdempotencyKey?: string | undefined;\n integrations?: IntegrationsModuleClient | undefined;\n projects?: ProjectsModuleClient | undefined;\n}\n\nexport async function runWorkflow(\n definitions: DefinitionsInterModuleClient,\n params: RunWorkflowParams & {agent: AgentInterModuleClient},\n options: {secrets?: Pick<SecretsInterModuleClient, 'getVariablesByNamespace'>} = {},\n): Promise<WorkflowRun> {\n const {definition} = await definitions.getDefinitionForWorkflowRun({\n definitionId: params.definitionId,\n });\n if (!definition) throw new DefinitionNotFoundError(params.definitionId);\n\n if (definition.projectId !== params.projectId) {\n throw new ProjectMismatchError(definition.projectId, params.projectId);\n }\n const model = workflowModelFromSnapshot(definition.model);\n const resolveAgentDefaults = createAgentDefaultsResolver(\n params.agent,\n modelHasAgentStep(model) ? params.workspaceId : null,\n );\n\n return createWorkflowRun({\n workspaceId: params.workspaceId,\n projectId: params.projectId,\n definitionId: definition.id,\n name: definition.name,\n model,\n triggerPayload: params.triggerPayload,\n inputs: params.inputs,\n sourceSnapshot: definition.sourceSnapshot,\n triggerIdempotencyKey: params.triggerIdempotencyKey,\n resolveAgentDefaults,\n secrets: options.secrets,\n integrations: params.integrations,\n projects: params.projects,\n });\n}\n"],"names":["workflowModelFromSnapshot","createWorkflowRun","createAgentDefaultsResolver","DefinitionNotFoundError","ProjectMismatchError","modelHasAgentStep","runWorkflow","definitions","params","options","definition","getDefinitionForWorkflowRun","definitionId","projectId","model","resolveAgentDefaults","agent","workspaceId","id","name","triggerPayload","inputs","sourceSnapshot","triggerIdempotencyKey","secrets","integrations","projects"],"mappings":"AACA,SAAQA,yBAAyB,QAAO,+BAA+B;AAKvE,SAAQC,iBAAiB,QAAO,uBAAuB;AACvD,SAAQC,2BAA2B,QAAO,sBAAsB;AAEhE,SAAQC,uBAAuB,EAAEC,oBAAoB,QAAO,cAAc;AAC1E,SAAQC,iBAAiB,QAAO,8CAA8C;AAa9E,OAAO,eAAeC,YACpBC,WAAyC,EACzCC,MAA2D,EAC3DC,UAAiF,CAAC,CAAC;IAEnF,MAAM,EAACC,UAAU,EAAC,GAAG,MAAMH,YAAYI,2BAA2B,CAAC;QACjEC,cAAcJ,OAAOI,YAAY;IACnC;IACA,IAAI,CAACF,YAAY,MAAM,IAAIP,wBAAwBK,OAAOI,YAAY;IAEtE,IAAIF,WAAWG,SAAS,KAAKL,OAAOK,SAAS,EAAE;QAC7C,MAAM,IAAIT,qBAAqBM,WAAWG,SAAS,EAAEL,OAAOK,SAAS;IACvE;IACA,MAAMC,QAAQd,0BAA0BU,WAAWI,KAAK;IACxD,MAAMC,uBAAuBb,4BAC3BM,OAAOQ,KAAK,EACZX,kBAAkBS,SAASN,OAAOS,WAAW,GAAG;IAGlD,OAAOhB,kBAAkB;QACvBgB,aAAaT,OAAOS,WAAW;QAC/BJ,WAAWL,OAAOK,SAAS;QAC3BD,cAAcF,WAAWQ,EAAE;QAC3BC,MAAMT,WAAWS,IAAI;QACrBL;QACAM,gBAAgBZ,OAAOY,cAAc;QACrCC,QAAQb,OAAOa,MAAM;QACrBC,gBAAgBZ,WAAWY,cAAc;QACzCC,uBAAuBf,OAAOe,qBAAqB;QACnDR;QACAS,SAASf,QAAQe,OAAO;QACxBC,cAAcjB,OAAOiB,YAAY;QACjCC,UAAUlB,OAAOkB,QAAQ;IAC3B;AACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type AgentThinking } from '@shipfox/api-agent-dto';
|
|
2
1
|
import type { WorkflowModel } from '@shipfox/api-definitions-dto';
|
|
2
|
+
import type { AgentThinking } from '@shipfox/workflow-document';
|
|
3
3
|
import type { AgentDefaultsResolver, ResolvedAgentDefaults } from '#core/agent-defaults.js';
|
|
4
4
|
import { type AgentToolMaterializationContext, type AgentToolMaterializationSnapshot } from '#core/agent-tools.js';
|
|
5
5
|
import type { PersistedEvaluationTraceEntry, StepConfigDispatchPlan } from '#core/entities/step.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/core/step-config/agent.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/core/step-config/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/step-config/agent.ts"],"sourcesContent":["import {\n AGENT_INTEGRATION_MCP_AUTH,\n AGENT_INTEGRATION_MCP_ENDPOINT,\n AGENT_INTEGRATION_MCP_SERVER_NAME,\n AGENT_INTEGRATION_MCP_TRANSPORT,\n type AgentIntegrationMcpServerConfigDto,\n type AgentThinking,\n type MaterializedAgentIntegrationConfigDto,\n} from '@shipfox/api-agent-dto';\nimport {agentInterModuleContract} from '@shipfox/api-agent-dto/inter-module';\nimport type {WorkflowModel} from '@shipfox/api-definitions-dto';\nimport type {ResolvedField, SiteResolvedField} from '@shipfox/expression';\nimport {isInterModuleKnownError} from '@shipfox/inter-module';\nimport type {AgentDefaultsResolver, ResolvedAgentDefaults} from '#core/agent-defaults.js';\nimport {\n type AgentToolMaterializationContext,\n type AgentToolMaterializationSnapshot,\n materializeAgentIntegrations,\n} from '#core/agent-tools.js';\nimport type {PersistedEvaluationTraceEntry, StepConfigDispatchPlan} from '#core/entities/step.js';\nimport {AgentConfigUnresolvableError} from '#core/errors.js';\nimport {\n completeStepFieldWithTrace,\n literalField,\n resolveStepField,\n type WorkflowStepEvaluationTraceEntry,\n type WorkflowStepTemplateDiagnostic,\n} from './fields.js';\nimport type {WorkflowEvaluationContext} from './workflow-evaluation-context.js';\n\ntype WorkflowModelJob = WorkflowModel['jobs'][number];\ntype WorkflowModelStep = WorkflowModelJob['steps'][number];\ntype WorkflowModelAgentStep = Extract<WorkflowModelStep, {kind: 'agent'}>;\ntype StepConfigMode = 'effective' | 'authored';\ntype FieldResolution =\n | {readonly kind: 'frozen'; readonly value: string}\n | {readonly kind: 'residual'; readonly field: ResolvedField};\n\ninterface AgentFieldResolutions {\n readonly diagnostics: WorkflowStepTemplateDiagnostic[];\n readonly trace: WorkflowStepEvaluationTraceEntry[];\n readonly prompt: FieldResolution;\n readonly model: FieldResolution | undefined;\n readonly provider: FieldResolution | undefined;\n readonly hasTemplates: boolean;\n}\n\nexport interface ResolveAgentStepConfigParams {\n readonly jobKey: string;\n readonly step: WorkflowModelAgentStep;\n readonly context: WorkflowEvaluationContext;\n readonly mode: StepConfigMode;\n readonly definitionId: string;\n readonly resolveAgentDefaults?: AgentDefaultsResolver | undefined;\n readonly agentToolContext?: AgentToolMaterializationContext | undefined;\n readonly agentToolSnapshot?: AgentToolMaterializationSnapshot | null | undefined;\n}\n\nexport interface AgentStepConfig {\n readonly config: Record<string, unknown>;\n readonly configPlan: StepConfigDispatchPlan | null;\n readonly diagnostics: readonly WorkflowStepTemplateDiagnostic[];\n readonly trace: readonly WorkflowStepEvaluationTraceEntry[];\n readonly hasTemplates: boolean;\n}\n\nexport async function resolveAgentStepConfig(\n params: ResolveAgentStepConfigParams,\n): Promise<AgentStepConfig> {\n const fields = resolveAgentFields(params);\n const usesAuthoredMode = params.mode === 'authored';\n\n if (usesAuthoredMode) return authoredAgentStepConfig(params.step, fields);\n\n const hasDeferredModelOrProvider =\n fields.model?.kind === 'residual' || fields.provider?.kind === 'residual';\n if (hasDeferredModelOrProvider) return deferredAgentStepConfig(params, fields);\n\n return await agentStepConfigWithDefaults(params.step, params, fields);\n}\n\nexport async function completeAgentConfig(params: {\n readonly config: Record<string, unknown>;\n readonly plan: StepConfigDispatchPlan;\n readonly context: WorkflowEvaluationContext;\n readonly resolveAgentDefaults?: AgentDefaultsResolver | undefined;\n readonly definitionId: string;\n readonly trace: PersistedEvaluationTraceEntry[];\n}): Promise<void> {\n const agent = params.plan.agent;\n if (agent === undefined) return;\n\n const prompt =\n agent.prompt === undefined\n ? readConfigString(params.config, 'prompt')\n : completeAgentField({\n field: 'agent.prompt',\n template: agent.prompt,\n params,\n });\n const model =\n agent.model === undefined\n ? readConfigString(params.config, 'model')\n : completeAgentField({\n field: 'agent.model',\n template: agent.model,\n params,\n });\n const provider =\n agent.provider === undefined\n ? readConfigString(params.config, 'provider')\n : completeAgentField({\n field: 'agent.provider',\n template: agent.provider,\n params,\n });\n\n const defaults = await completeAgentDefaults({\n harness: agent.harness ?? readConfigHarness(params.config),\n provider,\n model,\n thinking: agent.thinking ?? readConfigThinking(params.config),\n resolveAgentDefaults: params.resolveAgentDefaults,\n definitionId: params.definitionId,\n });\n params.config.harness = defaults.harness;\n params.config.provider = defaults.provider;\n params.config.model = defaults.model;\n params.config.thinking = defaults.thinking;\n params.config.prompt = prompt;\n if (agent.tools !== undefined) params.config.tools = [...agent.tools];\n const integrations = agent.integrations === undefined ? undefined : [...agent.integrations];\n if (integrations !== undefined) params.config.integrations = integrations;\n const mcpServers =\n agent.mcpServers ??\n (integrations === undefined ? undefined : agentIntegrationMcpServers(integrations));\n if (mcpServers !== undefined) params.config.mcpServers = [...mcpServers];\n}\n\nfunction completeAgentField(args: {\n readonly field: 'agent.prompt' | 'agent.model' | 'agent.provider';\n readonly template: ResolvedField;\n readonly params: {\n readonly context: WorkflowEvaluationContext;\n readonly definitionId: string;\n readonly trace: PersistedEvaluationTraceEntry[];\n };\n}): string {\n const resolved = completeStepFieldWithTrace({\n field: args.field,\n errorField: args.field,\n template: args.template,\n context: args.params.context,\n definitionId: args.params.definitionId,\n });\n args.params.trace.push(...resolved.trace.map((entry) => ({...entry, field: args.field})));\n return resolved.value;\n}\n\nexport async function completeAgentDefaults(params: {\n readonly harness: WorkflowModelAgentStep['harness'] | undefined;\n readonly provider: string | undefined;\n readonly model: string | undefined;\n readonly thinking: AgentThinking | undefined;\n readonly resolveAgentDefaults?: AgentDefaultsResolver | undefined;\n readonly definitionId: string;\n}): Promise<ResolvedAgentDefaults> {\n if (!params.resolveAgentDefaults) throw new Error('Agent defaults resolver is required');\n\n try {\n return await params.resolveAgentDefaults({\n harness: params.harness,\n provider: params.provider,\n model: params.model,\n thinking: params.thinking,\n });\n } catch (error) {\n if (\n isInterModuleKnownError(agentInterModuleContract.methods.resolveAgentConfig, error) &&\n error.code === 'agent-config-invalid'\n ) {\n throw new AgentConfigUnresolvableError(params.definitionId, {cause: error});\n }\n throw error;\n }\n}\n\nfunction resolveAgentFields(params: ResolveAgentStepConfigParams): AgentFieldResolutions {\n const diagnostics: WorkflowStepTemplateDiagnostic[] = [];\n const trace: WorkflowStepEvaluationTraceEntry[] = [];\n const prompt = resolveAgentField({\n field: 'agent.prompt',\n value: params.step.prompt,\n template: params.step.templates?.prompt,\n context: params.context,\n mode: params.mode,\n diagnostics,\n trace,\n definitionId: params.definitionId,\n });\n const model = resolveOptionalAgentField({\n field: 'agent.model',\n value: params.step.model,\n template: params.step.templates?.model,\n context: params.context,\n mode: params.mode,\n diagnostics,\n trace,\n definitionId: params.definitionId,\n });\n const provider = resolveOptionalAgentField({\n field: 'agent.provider',\n value: params.step.provider,\n template: params.step.templates?.provider,\n context: params.context,\n mode: params.mode,\n diagnostics,\n trace,\n definitionId: params.definitionId,\n });\n const hasTemplates =\n params.step.templates?.prompt !== undefined ||\n params.step.templates?.model !== undefined ||\n params.step.templates?.provider !== undefined;\n\n return {diagnostics, trace, prompt, model, provider, hasTemplates};\n}\n\nfunction authoredAgentStepConfig(\n step: WorkflowModelAgentStep,\n fields: AgentFieldResolutions,\n): AgentStepConfig {\n return {\n config: {\n ...(step.provider === undefined ? {} : {provider: step.provider}),\n ...(step.model === undefined ? {} : {model: step.model}),\n ...(step.harness === undefined ? {} : {harness: step.harness}),\n ...(step.thinking === undefined ? {} : {thinking: step.thinking}),\n ...agentToolsConfig(step),\n ...authoredAgentIntegrationsConfig(step),\n prompt: step.prompt,\n },\n configPlan: null,\n diagnostics: fields.diagnostics,\n trace: fields.trace,\n hasTemplates: fields.hasTemplates,\n };\n}\n\nfunction deferredAgentStepConfig(\n params: ResolveAgentStepConfigParams,\n fields: AgentFieldResolutions,\n): AgentStepConfig {\n const {step} = params;\n return {\n config: {},\n configPlan: {\n agent: {\n prompt: dispatchPlanField(fields.prompt),\n ...(fields.model === undefined ? {} : {model: dispatchPlanField(fields.model)}),\n ...(fields.provider === undefined ? {} : {provider: dispatchPlanField(fields.provider)}),\n ...(step.harness === undefined ? {} : {harness: step.harness}),\n ...(step.thinking === undefined ? {} : {thinking: step.thinking}),\n ...agentToolsConfig(step),\n ...materializedAgentIntegrationsConfig(params),\n },\n },\n diagnostics: fields.diagnostics,\n trace: fields.trace,\n hasTemplates: fields.hasTemplates,\n };\n}\n\nasync function agentStepConfigWithDefaults(\n step: WorkflowModelAgentStep,\n params: ResolveAgentStepConfigParams,\n fields: AgentFieldResolutions,\n): Promise<AgentStepConfig> {\n const providerValue = frozenFieldValue(fields.provider);\n const modelValue = frozenFieldValue(fields.model);\n const promptIsDeferred = fields.prompt.kind === 'residual';\n\n const resolved = await completeAgentDefaults({\n harness: step.harness,\n provider: providerValue,\n model: modelValue,\n thinking: step.thinking,\n resolveAgentDefaults: params.resolveAgentDefaults,\n definitionId: params.definitionId,\n });\n if (promptIsDeferred) {\n return {\n config: {\n provider: resolved.provider,\n model: resolved.model,\n harness: resolved.harness,\n thinking: resolved.thinking,\n },\n configPlan: {\n agent: {\n prompt: dispatchPlanField(fields.prompt),\n ...agentToolsConfig(step),\n ...materializedAgentIntegrationsConfig(params),\n },\n },\n diagnostics: fields.diagnostics,\n trace: fields.trace,\n hasTemplates: fields.hasTemplates,\n };\n }\n\n const promptValue = frozenFieldValue(fields.prompt) ?? step.prompt;\n return {\n config: {\n provider: resolved.provider,\n model: resolved.model,\n harness: resolved.harness,\n thinking: resolved.thinking,\n ...agentToolsConfig(step),\n ...materializedAgentIntegrationsConfig(params),\n prompt: promptValue,\n },\n configPlan: null,\n diagnostics: fields.diagnostics,\n trace: fields.trace,\n hasTemplates: fields.hasTemplates,\n };\n}\n\nfunction agentToolsConfig(\n step: WorkflowModelAgentStep,\n): {readonly tools: readonly string[]} | Record<string, never> {\n return step.tools === undefined ? {} : {tools: [...step.tools]};\n}\n\nfunction authoredAgentIntegrationsConfig(\n step: WorkflowModelAgentStep,\n):\n | {readonly integrations: NonNullable<WorkflowModelAgentStep['integrations']>}\n | Record<string, never> {\n return step.integrations === undefined ? {} : {integrations: step.integrations};\n}\n\nfunction materializedAgentIntegrationsConfig(params: ResolveAgentStepConfigParams):\n | {\n readonly integrations: readonly MaterializedAgentIntegrationConfigDto[];\n readonly mcpServers: readonly AgentIntegrationMcpServerConfigDto[];\n }\n | Record<string, never> {\n const integrations = materializeAgentIntegrations({\n jobKey: params.jobKey,\n stepId: params.step.id,\n integrations: params.step.integrations,\n context: params.agentToolContext,\n snapshot: params.agentToolSnapshot,\n });\n return integrations === undefined\n ? {}\n : {integrations, mcpServers: agentIntegrationMcpServers(integrations)};\n}\n\nfunction agentIntegrationMcpServers(\n integrations: readonly MaterializedAgentIntegrationConfigDto[],\n): readonly AgentIntegrationMcpServerConfigDto[] {\n return [\n {\n name: AGENT_INTEGRATION_MCP_SERVER_NAME,\n transport: AGENT_INTEGRATION_MCP_TRANSPORT,\n endpoint: AGENT_INTEGRATION_MCP_ENDPOINT,\n auth: AGENT_INTEGRATION_MCP_AUTH,\n integrations: [...integrations],\n },\n ];\n}\n\nfunction dispatchPlanField(field: FieldResolution): ResolvedField {\n const isResidual = field.kind === 'residual';\n return isResidual ? field.field : literalField(field.value);\n}\n\nfunction frozenFieldValue(field: FieldResolution | undefined): string | undefined {\n const isFrozen = field?.kind === 'frozen';\n return isFrozen ? field.value : undefined;\n}\n\nfunction resolveAgentField(params: {\n readonly field: 'agent.prompt' | 'agent.model' | 'agent.provider';\n readonly value: string;\n readonly template: ResolvedField['segments'] | undefined;\n readonly context: WorkflowEvaluationContext;\n readonly mode: StepConfigMode;\n readonly diagnostics: WorkflowStepTemplateDiagnostic[];\n readonly trace: WorkflowStepEvaluationTraceEntry[];\n readonly definitionId: string;\n}): FieldResolution {\n const hasTemplate = params.template !== undefined;\n const usesAuthoredMode = params.mode === 'authored';\n if (!hasTemplate || usesAuthoredMode) {\n return {kind: 'frozen', value: params.value};\n }\n\n const resolved = resolveStepField({\n field: params.field,\n template: {segments: params.template},\n context: params.context,\n definitionId: params.definitionId,\n errorField: params.field,\n });\n params.diagnostics.push(\n ...resolved.diagnostics.map((diagnostic) => ({...diagnostic, field: params.field})),\n );\n params.trace.push(...resolved.trace.map((entry) => ({...entry, field: params.field})));\n return fieldResolution(resolved);\n}\n\nfunction resolveOptionalAgentField(params: {\n readonly field: 'agent.prompt' | 'agent.model' | 'agent.provider';\n readonly value: string | undefined;\n readonly template: ResolvedField['segments'] | undefined;\n readonly context: WorkflowEvaluationContext;\n readonly mode: StepConfigMode;\n readonly diagnostics: WorkflowStepTemplateDiagnostic[];\n readonly trace: WorkflowStepEvaluationTraceEntry[];\n readonly definitionId: string;\n}): FieldResolution | undefined {\n const hasValue = params.value !== undefined;\n if (!hasValue) return undefined;\n return resolveAgentField({...params, value: params.value});\n}\n\nfunction fieldResolution(resolved: SiteResolvedField): FieldResolution {\n if (resolved.kind === 'residual') return {kind: 'residual', field: resolved.field};\n return {kind: 'frozen', value: resolved.value};\n}\n\nfunction readConfigString(config: Record<string, unknown>, key: string): string | undefined {\n const value = config[key];\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction readConfigThinking(config: Record<string, unknown>): AgentThinking | undefined {\n const value = config.thinking;\n return value === 'off' ||\n value === 'minimal' ||\n value === 'low' ||\n value === 'medium' ||\n value === 'high' ||\n value === 'xhigh'\n ? value\n : undefined;\n}\n\nfunction readConfigHarness(\n config: Record<string, unknown>,\n): WorkflowModelAgentStep['harness'] | undefined {\n return config.harness === 'pi' || config.harness === 'claude' ? config.harness : undefined;\n}\n"],"names":["AGENT_INTEGRATION_MCP_AUTH","AGENT_INTEGRATION_MCP_ENDPOINT","AGENT_INTEGRATION_MCP_SERVER_NAME","AGENT_INTEGRATION_MCP_TRANSPORT","agentInterModuleContract","isInterModuleKnownError","materializeAgentIntegrations","AgentConfigUnresolvableError","completeStepFieldWithTrace","literalField","resolveStepField","resolveAgentStepConfig","params","fields","resolveAgentFields","usesAuthoredMode","mode","authoredAgentStepConfig","step","hasDeferredModelOrProvider","model","kind","provider","deferredAgentStepConfig","agentStepConfigWithDefaults","completeAgentConfig","agent","plan","undefined","prompt","readConfigString","config","completeAgentField","field","template","defaults","completeAgentDefaults","harness","readConfigHarness","thinking","readConfigThinking","resolveAgentDefaults","definitionId","tools","integrations","mcpServers","agentIntegrationMcpServers","args","resolved","errorField","context","trace","push","map","entry","value","Error","error","methods","resolveAgentConfig","code","cause","diagnostics","resolveAgentField","templates","resolveOptionalAgentField","hasTemplates","agentToolsConfig","authoredAgentIntegrationsConfig","configPlan","dispatchPlanField","materializedAgentIntegrationsConfig","providerValue","frozenFieldValue","modelValue","promptIsDeferred","promptValue","jobKey","stepId","id","agentToolContext","snapshot","agentToolSnapshot","name","transport","endpoint","auth","isResidual","isFrozen","hasTemplate","segments","diagnostic","fieldResolution","hasValue","key"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/core/step-config/agent.ts"],"sourcesContent":["import {\n AGENT_INTEGRATION_MCP_AUTH,\n AGENT_INTEGRATION_MCP_ENDPOINT,\n AGENT_INTEGRATION_MCP_SERVER_NAME,\n AGENT_INTEGRATION_MCP_TRANSPORT,\n type AgentIntegrationMcpServerConfigDto,\n type MaterializedAgentIntegrationConfigDto,\n} from '@shipfox/api-agent-dto';\nimport {agentInterModuleContract} from '@shipfox/api-agent-dto/inter-module';\nimport type {WorkflowModel} from '@shipfox/api-definitions-dto';\nimport type {ResolvedField, SiteResolvedField} from '@shipfox/expression';\nimport {isInterModuleKnownError} from '@shipfox/inter-module';\nimport type {AgentThinking} from '@shipfox/workflow-document';\nimport type {AgentDefaultsResolver, ResolvedAgentDefaults} from '#core/agent-defaults.js';\nimport {\n type AgentToolMaterializationContext,\n type AgentToolMaterializationSnapshot,\n materializeAgentIntegrations,\n} from '#core/agent-tools.js';\nimport type {PersistedEvaluationTraceEntry, StepConfigDispatchPlan} from '#core/entities/step.js';\nimport {AgentConfigUnresolvableError} from '#core/errors.js';\nimport {\n completeStepFieldWithTrace,\n literalField,\n resolveStepField,\n type WorkflowStepEvaluationTraceEntry,\n type WorkflowStepTemplateDiagnostic,\n} from './fields.js';\nimport type {WorkflowEvaluationContext} from './workflow-evaluation-context.js';\n\ntype WorkflowModelJob = WorkflowModel['jobs'][number];\ntype WorkflowModelStep = WorkflowModelJob['steps'][number];\ntype WorkflowModelAgentStep = Extract<WorkflowModelStep, {kind: 'agent'}>;\ntype StepConfigMode = 'effective' | 'authored';\ntype FieldResolution =\n | {readonly kind: 'frozen'; readonly value: string}\n | {readonly kind: 'residual'; readonly field: ResolvedField};\n\ninterface AgentFieldResolutions {\n readonly diagnostics: WorkflowStepTemplateDiagnostic[];\n readonly trace: WorkflowStepEvaluationTraceEntry[];\n readonly prompt: FieldResolution;\n readonly model: FieldResolution | undefined;\n readonly provider: FieldResolution | undefined;\n readonly hasTemplates: boolean;\n}\n\nexport interface ResolveAgentStepConfigParams {\n readonly jobKey: string;\n readonly step: WorkflowModelAgentStep;\n readonly context: WorkflowEvaluationContext;\n readonly mode: StepConfigMode;\n readonly definitionId: string;\n readonly resolveAgentDefaults?: AgentDefaultsResolver | undefined;\n readonly agentToolContext?: AgentToolMaterializationContext | undefined;\n readonly agentToolSnapshot?: AgentToolMaterializationSnapshot | null | undefined;\n}\n\nexport interface AgentStepConfig {\n readonly config: Record<string, unknown>;\n readonly configPlan: StepConfigDispatchPlan | null;\n readonly diagnostics: readonly WorkflowStepTemplateDiagnostic[];\n readonly trace: readonly WorkflowStepEvaluationTraceEntry[];\n readonly hasTemplates: boolean;\n}\n\nexport async function resolveAgentStepConfig(\n params: ResolveAgentStepConfigParams,\n): Promise<AgentStepConfig> {\n const fields = resolveAgentFields(params);\n const usesAuthoredMode = params.mode === 'authored';\n\n if (usesAuthoredMode) return authoredAgentStepConfig(params.step, fields);\n\n const hasDeferredModelOrProvider =\n fields.model?.kind === 'residual' || fields.provider?.kind === 'residual';\n if (hasDeferredModelOrProvider) return deferredAgentStepConfig(params, fields);\n\n return await agentStepConfigWithDefaults(params.step, params, fields);\n}\n\nexport async function completeAgentConfig(params: {\n readonly config: Record<string, unknown>;\n readonly plan: StepConfigDispatchPlan;\n readonly context: WorkflowEvaluationContext;\n readonly resolveAgentDefaults?: AgentDefaultsResolver | undefined;\n readonly definitionId: string;\n readonly trace: PersistedEvaluationTraceEntry[];\n}): Promise<void> {\n const agent = params.plan.agent;\n if (agent === undefined) return;\n\n const prompt =\n agent.prompt === undefined\n ? readConfigString(params.config, 'prompt')\n : completeAgentField({\n field: 'agent.prompt',\n template: agent.prompt,\n params,\n });\n const model =\n agent.model === undefined\n ? readConfigString(params.config, 'model')\n : completeAgentField({\n field: 'agent.model',\n template: agent.model,\n params,\n });\n const provider =\n agent.provider === undefined\n ? readConfigString(params.config, 'provider')\n : completeAgentField({\n field: 'agent.provider',\n template: agent.provider,\n params,\n });\n\n const defaults = await completeAgentDefaults({\n harness: agent.harness ?? readConfigHarness(params.config),\n provider,\n model,\n thinking: agent.thinking ?? readConfigThinking(params.config),\n resolveAgentDefaults: params.resolveAgentDefaults,\n definitionId: params.definitionId,\n });\n params.config.harness = defaults.harness;\n params.config.provider = defaults.provider;\n params.config.model = defaults.model;\n params.config.thinking = defaults.thinking;\n params.config.prompt = prompt;\n if (agent.tools !== undefined) params.config.tools = [...agent.tools];\n const integrations = agent.integrations === undefined ? undefined : [...agent.integrations];\n if (integrations !== undefined) params.config.integrations = integrations;\n const mcpServers =\n agent.mcpServers ??\n (integrations === undefined ? undefined : agentIntegrationMcpServers(integrations));\n if (mcpServers !== undefined) params.config.mcpServers = [...mcpServers];\n}\n\nfunction completeAgentField(args: {\n readonly field: 'agent.prompt' | 'agent.model' | 'agent.provider';\n readonly template: ResolvedField;\n readonly params: {\n readonly context: WorkflowEvaluationContext;\n readonly definitionId: string;\n readonly trace: PersistedEvaluationTraceEntry[];\n };\n}): string {\n const resolved = completeStepFieldWithTrace({\n field: args.field,\n errorField: args.field,\n template: args.template,\n context: args.params.context,\n definitionId: args.params.definitionId,\n });\n args.params.trace.push(...resolved.trace.map((entry) => ({...entry, field: args.field})));\n return resolved.value;\n}\n\nexport async function completeAgentDefaults(params: {\n readonly harness: WorkflowModelAgentStep['harness'] | undefined;\n readonly provider: string | undefined;\n readonly model: string | undefined;\n readonly thinking: AgentThinking | undefined;\n readonly resolveAgentDefaults?: AgentDefaultsResolver | undefined;\n readonly definitionId: string;\n}): Promise<ResolvedAgentDefaults> {\n if (!params.resolveAgentDefaults) throw new Error('Agent defaults resolver is required');\n\n try {\n return await params.resolveAgentDefaults({\n harness: params.harness,\n provider: params.provider,\n model: params.model,\n thinking: params.thinking,\n });\n } catch (error) {\n if (\n isInterModuleKnownError(agentInterModuleContract.methods.resolveAgentConfig, error) &&\n error.code === 'agent-config-invalid'\n ) {\n throw new AgentConfigUnresolvableError(params.definitionId, {cause: error});\n }\n throw error;\n }\n}\n\nfunction resolveAgentFields(params: ResolveAgentStepConfigParams): AgentFieldResolutions {\n const diagnostics: WorkflowStepTemplateDiagnostic[] = [];\n const trace: WorkflowStepEvaluationTraceEntry[] = [];\n const prompt = resolveAgentField({\n field: 'agent.prompt',\n value: params.step.prompt,\n template: params.step.templates?.prompt,\n context: params.context,\n mode: params.mode,\n diagnostics,\n trace,\n definitionId: params.definitionId,\n });\n const model = resolveOptionalAgentField({\n field: 'agent.model',\n value: params.step.model,\n template: params.step.templates?.model,\n context: params.context,\n mode: params.mode,\n diagnostics,\n trace,\n definitionId: params.definitionId,\n });\n const provider = resolveOptionalAgentField({\n field: 'agent.provider',\n value: params.step.provider,\n template: params.step.templates?.provider,\n context: params.context,\n mode: params.mode,\n diagnostics,\n trace,\n definitionId: params.definitionId,\n });\n const hasTemplates =\n params.step.templates?.prompt !== undefined ||\n params.step.templates?.model !== undefined ||\n params.step.templates?.provider !== undefined;\n\n return {diagnostics, trace, prompt, model, provider, hasTemplates};\n}\n\nfunction authoredAgentStepConfig(\n step: WorkflowModelAgentStep,\n fields: AgentFieldResolutions,\n): AgentStepConfig {\n return {\n config: {\n ...(step.provider === undefined ? {} : {provider: step.provider}),\n ...(step.model === undefined ? {} : {model: step.model}),\n ...(step.harness === undefined ? {} : {harness: step.harness}),\n ...(step.thinking === undefined ? {} : {thinking: step.thinking}),\n ...agentToolsConfig(step),\n ...authoredAgentIntegrationsConfig(step),\n prompt: step.prompt,\n },\n configPlan: null,\n diagnostics: fields.diagnostics,\n trace: fields.trace,\n hasTemplates: fields.hasTemplates,\n };\n}\n\nfunction deferredAgentStepConfig(\n params: ResolveAgentStepConfigParams,\n fields: AgentFieldResolutions,\n): AgentStepConfig {\n const {step} = params;\n return {\n config: {},\n configPlan: {\n agent: {\n prompt: dispatchPlanField(fields.prompt),\n ...(fields.model === undefined ? {} : {model: dispatchPlanField(fields.model)}),\n ...(fields.provider === undefined ? {} : {provider: dispatchPlanField(fields.provider)}),\n ...(step.harness === undefined ? {} : {harness: step.harness}),\n ...(step.thinking === undefined ? {} : {thinking: step.thinking}),\n ...agentToolsConfig(step),\n ...materializedAgentIntegrationsConfig(params),\n },\n },\n diagnostics: fields.diagnostics,\n trace: fields.trace,\n hasTemplates: fields.hasTemplates,\n };\n}\n\nasync function agentStepConfigWithDefaults(\n step: WorkflowModelAgentStep,\n params: ResolveAgentStepConfigParams,\n fields: AgentFieldResolutions,\n): Promise<AgentStepConfig> {\n const providerValue = frozenFieldValue(fields.provider);\n const modelValue = frozenFieldValue(fields.model);\n const promptIsDeferred = fields.prompt.kind === 'residual';\n\n const resolved = await completeAgentDefaults({\n harness: step.harness,\n provider: providerValue,\n model: modelValue,\n thinking: step.thinking,\n resolveAgentDefaults: params.resolveAgentDefaults,\n definitionId: params.definitionId,\n });\n if (promptIsDeferred) {\n return {\n config: {\n provider: resolved.provider,\n model: resolved.model,\n harness: resolved.harness,\n thinking: resolved.thinking,\n },\n configPlan: {\n agent: {\n prompt: dispatchPlanField(fields.prompt),\n ...agentToolsConfig(step),\n ...materializedAgentIntegrationsConfig(params),\n },\n },\n diagnostics: fields.diagnostics,\n trace: fields.trace,\n hasTemplates: fields.hasTemplates,\n };\n }\n\n const promptValue = frozenFieldValue(fields.prompt) ?? step.prompt;\n return {\n config: {\n provider: resolved.provider,\n model: resolved.model,\n harness: resolved.harness,\n thinking: resolved.thinking,\n ...agentToolsConfig(step),\n ...materializedAgentIntegrationsConfig(params),\n prompt: promptValue,\n },\n configPlan: null,\n diagnostics: fields.diagnostics,\n trace: fields.trace,\n hasTemplates: fields.hasTemplates,\n };\n}\n\nfunction agentToolsConfig(\n step: WorkflowModelAgentStep,\n): {readonly tools: readonly string[]} | Record<string, never> {\n return step.tools === undefined ? {} : {tools: [...step.tools]};\n}\n\nfunction authoredAgentIntegrationsConfig(\n step: WorkflowModelAgentStep,\n):\n | {readonly integrations: NonNullable<WorkflowModelAgentStep['integrations']>}\n | Record<string, never> {\n return step.integrations === undefined ? {} : {integrations: step.integrations};\n}\n\nfunction materializedAgentIntegrationsConfig(params: ResolveAgentStepConfigParams):\n | {\n readonly integrations: readonly MaterializedAgentIntegrationConfigDto[];\n readonly mcpServers: readonly AgentIntegrationMcpServerConfigDto[];\n }\n | Record<string, never> {\n const integrations = materializeAgentIntegrations({\n jobKey: params.jobKey,\n stepId: params.step.id,\n integrations: params.step.integrations,\n context: params.agentToolContext,\n snapshot: params.agentToolSnapshot,\n });\n return integrations === undefined\n ? {}\n : {integrations, mcpServers: agentIntegrationMcpServers(integrations)};\n}\n\nfunction agentIntegrationMcpServers(\n integrations: readonly MaterializedAgentIntegrationConfigDto[],\n): readonly AgentIntegrationMcpServerConfigDto[] {\n return [\n {\n name: AGENT_INTEGRATION_MCP_SERVER_NAME,\n transport: AGENT_INTEGRATION_MCP_TRANSPORT,\n endpoint: AGENT_INTEGRATION_MCP_ENDPOINT,\n auth: AGENT_INTEGRATION_MCP_AUTH,\n integrations: [...integrations],\n },\n ];\n}\n\nfunction dispatchPlanField(field: FieldResolution): ResolvedField {\n const isResidual = field.kind === 'residual';\n return isResidual ? field.field : literalField(field.value);\n}\n\nfunction frozenFieldValue(field: FieldResolution | undefined): string | undefined {\n const isFrozen = field?.kind === 'frozen';\n return isFrozen ? field.value : undefined;\n}\n\nfunction resolveAgentField(params: {\n readonly field: 'agent.prompt' | 'agent.model' | 'agent.provider';\n readonly value: string;\n readonly template: ResolvedField['segments'] | undefined;\n readonly context: WorkflowEvaluationContext;\n readonly mode: StepConfigMode;\n readonly diagnostics: WorkflowStepTemplateDiagnostic[];\n readonly trace: WorkflowStepEvaluationTraceEntry[];\n readonly definitionId: string;\n}): FieldResolution {\n const hasTemplate = params.template !== undefined;\n const usesAuthoredMode = params.mode === 'authored';\n if (!hasTemplate || usesAuthoredMode) {\n return {kind: 'frozen', value: params.value};\n }\n\n const resolved = resolveStepField({\n field: params.field,\n template: {segments: params.template},\n context: params.context,\n definitionId: params.definitionId,\n errorField: params.field,\n });\n params.diagnostics.push(\n ...resolved.diagnostics.map((diagnostic) => ({...diagnostic, field: params.field})),\n );\n params.trace.push(...resolved.trace.map((entry) => ({...entry, field: params.field})));\n return fieldResolution(resolved);\n}\n\nfunction resolveOptionalAgentField(params: {\n readonly field: 'agent.prompt' | 'agent.model' | 'agent.provider';\n readonly value: string | undefined;\n readonly template: ResolvedField['segments'] | undefined;\n readonly context: WorkflowEvaluationContext;\n readonly mode: StepConfigMode;\n readonly diagnostics: WorkflowStepTemplateDiagnostic[];\n readonly trace: WorkflowStepEvaluationTraceEntry[];\n readonly definitionId: string;\n}): FieldResolution | undefined {\n const hasValue = params.value !== undefined;\n if (!hasValue) return undefined;\n return resolveAgentField({...params, value: params.value});\n}\n\nfunction fieldResolution(resolved: SiteResolvedField): FieldResolution {\n if (resolved.kind === 'residual') return {kind: 'residual', field: resolved.field};\n return {kind: 'frozen', value: resolved.value};\n}\n\nfunction readConfigString(config: Record<string, unknown>, key: string): string | undefined {\n const value = config[key];\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction readConfigThinking(config: Record<string, unknown>): AgentThinking | undefined {\n const value = config.thinking;\n return value === 'off' ||\n value === 'minimal' ||\n value === 'low' ||\n value === 'medium' ||\n value === 'high' ||\n value === 'xhigh'\n ? value\n : undefined;\n}\n\nfunction readConfigHarness(\n config: Record<string, unknown>,\n): WorkflowModelAgentStep['harness'] | undefined {\n return config.harness === 'pi' || config.harness === 'claude' ? config.harness : undefined;\n}\n"],"names":["AGENT_INTEGRATION_MCP_AUTH","AGENT_INTEGRATION_MCP_ENDPOINT","AGENT_INTEGRATION_MCP_SERVER_NAME","AGENT_INTEGRATION_MCP_TRANSPORT","agentInterModuleContract","isInterModuleKnownError","materializeAgentIntegrations","AgentConfigUnresolvableError","completeStepFieldWithTrace","literalField","resolveStepField","resolveAgentStepConfig","params","fields","resolveAgentFields","usesAuthoredMode","mode","authoredAgentStepConfig","step","hasDeferredModelOrProvider","model","kind","provider","deferredAgentStepConfig","agentStepConfigWithDefaults","completeAgentConfig","agent","plan","undefined","prompt","readConfigString","config","completeAgentField","field","template","defaults","completeAgentDefaults","harness","readConfigHarness","thinking","readConfigThinking","resolveAgentDefaults","definitionId","tools","integrations","mcpServers","agentIntegrationMcpServers","args","resolved","errorField","context","trace","push","map","entry","value","Error","error","methods","resolveAgentConfig","code","cause","diagnostics","resolveAgentField","templates","resolveOptionalAgentField","hasTemplates","agentToolsConfig","authoredAgentIntegrationsConfig","configPlan","dispatchPlanField","materializedAgentIntegrationsConfig","providerValue","frozenFieldValue","modelValue","promptIsDeferred","promptValue","jobKey","stepId","id","agentToolContext","snapshot","agentToolSnapshot","name","transport","endpoint","auth","isResidual","isFrozen","hasTemplate","segments","diagnostic","fieldResolution","hasValue","key"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { AgentInterModuleClient } from '@shipfox/api-agent-dto/inter-module';
|
|
2
|
-
import type { IntegrationsModuleClient } from '@shipfox/api-integration-core-dto';
|
|
3
|
-
import type { ProjectsModuleClient } from '@shipfox/api-projects-dto';
|
|
2
|
+
import type { IntegrationsModuleClient } from '@shipfox/api-integration-core-dto/inter-module';
|
|
3
|
+
import type { ProjectsModuleClient } from '@shipfox/api-projects-dto/inter-module';
|
|
4
4
|
import { type AgentDefaultsResolver } from '#core/agent-defaults.js';
|
|
5
5
|
import { type JobStatus, type ResolutionReason } from '#core/entities/job.js';
|
|
6
6
|
import type { JobExecutionStatus } from '#core/entities/job-execution.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job-listeners.d.ts","sourceRoot":"","sources":["../../src/db/job-listeners.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,qCAAqC,CAAC;AAEhF,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"job-listeners.d.ts","sourceRoot":"","sources":["../../src/db/job-listeners.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,qCAAqC,CAAC;AAEhF,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,gDAAgD,CAAC;AAC7F,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,wCAAwC,CAAC;AAMjF,OAAO,EAAC,KAAK,qBAAqB,EAA8B,MAAM,yBAAyB,CAAC;AAEhG,OAAO,EAAgB,KAAK,SAAS,EAAE,KAAK,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AAC3F,OAAO,KAAK,EAAC,kBAAkB,EAAyB,MAAM,iCAAiC,CAAC;AAkChG,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,SAAS,GAAG,UAAU,CAAC;IAC/B,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB;AAeD,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,yBAAyB,GAChC,OAAO,CAAC,yBAAyB,CAAC,CAyFpC;AAED,MAAM,MAAM,yBAAyB,GACjC;IACE,IAAI,EAAE,WAAW,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,kBAAkB,CAAC;CAC5B,GACD;IAAC,IAAI,EAAE,mBAAmB,CAAA;CAAC,GAC3B;IAAC,IAAI,EAAE,OAAO,CAAA;CAAC,CAAC;AAEpB,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,YAAY,CAAC,EAAE,wBAAwB,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAC5C,oBAAoB,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IACzD,KAAK,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;CAC5C;AAED,wBAAsB,gCAAgC,CACpD,MAAM,EAAE,yBAAyB,GAChC,OAAO,CAAC,yBAAyB,CAAC,CA6DpC;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAsB7F;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,gBAAgB,CAAC;CAC1B,GAAG,OAAO,CAAC;IAAC,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAC,CAAC,CAchE;AAwFD,wBAAsB,0BAA0B,CAAC,MAAM,EAAE;IACvD,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC,kBAAkB,EAAE,QAAQ,GAAG,WAAW,CAAC,CAAC;CAC7D,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BhB;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,CAM5D"}
|