@shipfox/api-definitions 12.0.0 → 12.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/.turbo/turbo-build.log +4 -4
  2. package/CHANGELOG.md +25 -0
  3. package/dist/core/entities/sync-state.d.ts +1 -1
  4. package/dist/core/entities/sync-state.d.ts.map +1 -1
  5. package/dist/core/errors.d.ts +2 -2
  6. package/dist/core/errors.d.ts.map +1 -1
  7. package/dist/core/integrations.d.ts +1 -1
  8. package/dist/core/workflow-model/invalid-workflow-model-error.d.ts +1 -1
  9. package/dist/core/workflow-model/invalid-workflow-model-error.d.ts.map +1 -1
  10. package/dist/core/workflow-model/invalid-workflow-model-error.js.map +1 -1
  11. package/dist/core/workflow-model/normalize-jobs.js +5 -29
  12. package/dist/core/workflow-model/normalize-jobs.js.map +1 -1
  13. package/dist/core/workflow-yaml/invalid-workflow-yaml-error.d.ts.map +1 -1
  14. package/dist/db/db.d.ts +10 -10
  15. package/dist/db/schema/definitions.d.ts +1 -1
  16. package/dist/db/schema/outbox.d.ts +1 -1
  17. package/dist/db/schema/sync-states.d.ts +3 -3
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +3 -1
  20. package/dist/index.js.map +1 -1
  21. package/dist/presentation/routes/project-access.d.ts +1 -1
  22. package/dist/presentation/subscribers/index.d.ts +1 -0
  23. package/dist/presentation/subscribers/index.d.ts.map +1 -1
  24. package/dist/presentation/subscribers/index.js +1 -0
  25. package/dist/presentation/subscribers/index.js.map +1 -1
  26. package/dist/presentation/subscribers/on-integration-connection-available.d.ts +5 -0
  27. package/dist/presentation/subscribers/on-integration-connection-available.d.ts.map +1 -0
  28. package/dist/presentation/subscribers/on-integration-connection-available.js +32 -0
  29. package/dist/presentation/subscribers/on-integration-connection-available.js.map +1 -0
  30. package/dist/presentation/subscribers/start-definition-sync.d.ts +1 -0
  31. package/dist/presentation/subscribers/start-definition-sync.d.ts.map +1 -1
  32. package/dist/presentation/subscribers/start-definition-sync.js +30 -17
  33. package/dist/presentation/subscribers/start-definition-sync.js.map +1 -1
  34. package/dist/temporal/activities/sync-activities.d.ts.map +1 -1
  35. package/dist/tsconfig.test.tsbuildinfo +1 -1
  36. package/package.json +13 -13
  37. package/src/core/workflow-model/invalid-workflow-model-error.ts +0 -1
  38. package/src/core/workflow-model/normalize-jobs.ts +5 -41
  39. package/src/core/workflow-model/normalize-workflow-document.test.ts +140 -13
  40. package/src/index.ts +12 -1
  41. package/src/presentation/subscribers/index.ts +1 -0
  42. package/src/presentation/subscribers/on-integration-connection-available.test.ts +132 -0
  43. package/src/presentation/subscribers/on-integration-connection-available.ts +44 -0
  44. package/src/presentation/subscribers/start-definition-sync.ts +35 -19
  45. package/tsconfig.build.tsbuildinfo +1 -1
@@ -1,6 +1,6 @@
1
1
  $ shipfox-swc && shipfox-temporal-bundle dist/temporal/workflows/index.js
2
- Successfully compiled: 74 files with swc (337.6ms)
3
- 2026-08-04T08:17:09.285Z [INFO] asset workflow-bundle-db3e4e474e0c4d6a3553.js 4.01 MiB [emitted] [immutable] (name: main)
2
+ Successfully compiled: 75 files with swc (283.96ms)
3
+ 2026-08-06T13:12:52.465Z [INFO] asset workflow-bundle-db3e4e474e0c4d6a3553.js 4.01 MiB [emitted] [immutable] (name: main)
4
4
  orphan modules 322 KiB [orphan] 82 modules
5
5
  runtime modules 1.13 KiB 5 modules
6
6
  modules by path ../../../node_modules/.pnpm/ 1.21 MiB 214 modules
@@ -15,6 +15,6 @@ optional modules 30 bytes [optional]
15
15
  __temporal_custom_payload_converter (ignored) 15 bytes [optional] [built] [code generated]
16
16
  __temporal_custom_failure_converter (ignored) 15 bytes [optional] [built] [code generated]
17
17
  ../../shared/node/temporal/dist/workflow-error-interceptor.js 1.21 KiB [built] [code generated]
18
- webpack 5.107.2 compiled successfully in 5689 ms
19
- 2026-08-04T08:17:09.294Z [INFO] Workflow bundle created { size: '4.01MB' }
18
+ webpack 5.107.2 compiled successfully in 9191 ms
19
+ 2026-08-06T13:12:52.499Z [INFO] Workflow bundle created { size: '4.01MB' }
20
20
  /home/runner/work/shipfox/shipfox/libs/api/definitions/dist/temporal/workflows/index.js: 4207937 bytes
package/CHANGELOG.md CHANGED
@@ -1,5 +1,30 @@
1
1
  # @shipfox/api-definitions
2
2
 
3
+ ## 12.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - ce0984d: Preserve structured values when jobs map typed step outputs, normalize them for JSON persistence, and bound materialized job output sizes and entry counts.
8
+
9
+ ### Patch Changes
10
+
11
+ - 7901a60: Retry workspace workflow definition syncs when an integration connection becomes available.
12
+ - Updated dependencies [7901a60]
13
+ - Updated dependencies [df2ed79]
14
+ - Updated dependencies [ce0984d]
15
+ - @shipfox/api-integration-core-dto@12.2.0
16
+ - @shipfox/api-projects-dto@12.2.0
17
+ - @shipfox/runner-labels@0.2.0
18
+ - @shipfox/expression@2.1.0
19
+ - @shipfox/workflow-document@3.0.1
20
+ - @shipfox/node-opentelemetry@0.6.4
21
+ - @shipfox/api-definitions-dto@12.2.0
22
+ - @shipfox/api-agent-dto@12.2.0
23
+ - @shipfox/node-fastify@0.4.2
24
+ - @shipfox/node-module@1.0.6
25
+ - @shipfox/node-temporal@0.4.5
26
+ - @shipfox/api-auth-context@12.2.0
27
+
3
28
  ## 12.0.0
4
29
 
5
30
  ### Major Changes
@@ -2,7 +2,7 @@ import type { ValidationWarning } from './validation-warning.js';
2
2
  export type DefinitionSyncStatus = 'pending' | 'syncing' | 'succeeded' | 'failed';
3
3
  export type DefinitionSyncWarning = ValidationWarning;
4
4
  export declare function limitDefinitionSyncWarnings(warnings: readonly DefinitionSyncWarning[]): DefinitionSyncWarning[];
5
- export declare const DEFINITION_SYNC_ERROR_CODES: readonly ["no-workflow-files", "invalid-definition", "provider-repository-not-found", "provider-file-not-found", "provider-access-denied", "provider-rate-limited", "provider-timeout", "provider-unavailable", "provider-malformed-response", "content-too-large", "too-many-files", "connection-unavailable", "unknown"];
5
+ export declare const DEFINITION_SYNC_ERROR_CODES: readonly ['no-workflow-files', 'invalid-definition', 'provider-repository-not-found', 'provider-file-not-found', 'provider-access-denied', 'provider-rate-limited', 'provider-timeout', 'provider-unavailable', 'provider-malformed-response', 'content-too-large', 'too-many-files', 'connection-unavailable', 'unknown'];
6
6
  export type DefinitionSyncErrorCode = (typeof DEFINITION_SYNC_ERROR_CODES)[number];
7
7
  export declare function isDefinitionSyncErrorCode(value: unknown): value is DefinitionSyncErrorCode;
8
8
  export interface DefinitionSyncState {
@@ -1 +1 @@
1
- {"version":3,"file":"sync-state.d.ts","sourceRoot":"","sources":["../../../src/core/entities/sync-state.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,yBAAyB,CAAC;AAE/D,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;AAElF,MAAM,MAAM,qBAAqB,GAAG,iBAAiB,CAAC;AAEtD,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,SAAS,qBAAqB,EAAE,GACzC,qBAAqB,EAAE,CAQzB;AAED,eAAO,MAAM,2BAA2B,4TAc9B,CAAC;AAEX,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,2BAA2B,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnF,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,uBAAuB,CAI1F;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,0BAA0B,EAAE,MAAM,CAAC;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,oBAAoB,CAAC;IAC7B,aAAa,EAAE,uBAAuB,GAAG,IAAI,CAAC;IAC9C,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,EAAE,qBAAqB,EAAE,CAAC;IAClC,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB"}
1
+ {"version":3,"file":"sync-state.d.ts","sourceRoot":"","sources":["../../../src/core/entities/sync-state.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,yBAAyB,CAAC;AAE/D,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;AAElF,MAAM,MAAM,qBAAqB,GAAG,iBAAiB,CAAC;AAEtD,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,SAAS,qBAAqB,EAAE,GACzC,qBAAqB,EAAE,CAQzB;AAED,eAAO,MAAM,2BAA2B,YACtC,mBAAmB,EACnB,oBAAoB,EACpB,+BAA+B,EAC/B,yBAAyB,EACzB,wBAAwB,EACxB,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,6BAA6B,EAC7B,mBAAmB,EACnB,gBAAgB,EAChB,wBAAwB,EACxB,SAAS,CACD,CAAC;AAEX,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,2BAA2B,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnF,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,uBAAuB,CAI1F;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,0BAA0B,EAAE,MAAM,CAAC;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,oBAAoB,CAAC;IAC7B,aAAa,EAAE,uBAAuB,GAAG,IAAI,CAAC;IAC9C,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,EAAE,qBAAqB,EAAE,CAAC;IAClC,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB"}
@@ -1,7 +1,7 @@
1
1
  import type { DefinitionSyncErrorCode } from './entities/sync-state.js';
2
2
  export declare class DefinitionParseError extends Error {
3
- details?: unknown | undefined;
4
- constructor(message: string, details?: unknown | undefined);
3
+ details?: unknown;
4
+ constructor(message: string, details?: unknown);
5
5
  }
6
6
  export declare class DefinitionSyncPermanentError extends Error {
7
7
  readonly code: DefinitionSyncErrorCode;
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,0BAA0B,CAAC;AAEtE,qBAAa,oBAAqB,SAAQ,KAAK;IAGpC,OAAO,CAAC,EAAE,OAAO;gBADxB,OAAO,EAAE,MAAM,EACR,OAAO,CAAC,EAAE,OAAO,YAAA;CAK3B;AAED,qBAAa,4BAA6B,SAAQ,KAAK;aAEnC,IAAI,EAAE,uBAAuB;gBAA7B,IAAI,EAAE,uBAAuB,EAC7C,OAAO,EAAE,MAAM;CAKlB"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,0BAA0B,CAAC;AAEtE,qBAAa,oBAAqB,SAAQ,KAAK;IAGpC,OAAO,CAAC,EAAE,OAAO;IAF1B,YACE,OAAO,EAAE,MAAM,EACR,OAAO,CAAC,EAAE,OAAO,EAIzB;CACF;AAED,qBAAa,4BAA6B,SAAQ,KAAK;aAEnC,IAAI,EAAE,uBAAuB;IAD/C,YACkB,IAAI,EAAE,uBAAuB,EAC7C,OAAO,EAAE,MAAM,EAIhB;CACF"}
@@ -17,7 +17,7 @@ export declare function loadIntegrationValidationContext(integrations: Integrati
17
17
  workspaceConnectionSnapshot: Map<string, {
18
18
  id: string;
19
19
  provider: string;
20
- capabilities: ("source_control" | "agent_tools")[];
20
+ capabilities: ("agent_tools" | "source_control")[];
21
21
  }>;
22
22
  defaultConnectionSlug: string | undefined;
23
23
  }>;
@@ -1,5 +1,5 @@
1
1
  export declare const invalidWorkflowModelErrorCode = "invalid-workflow-model";
2
- export type WorkflowModelValidationIssueCode = 'context-unavailable-at-fill-site' | 'dynamic-name-self-reference' | 'context-unavailable-at-predicate-site' | 'computed-context-key' | 'checkout-target-invalid' | 'duplicate-job-id' | 'duplicate-step-id' | 'duplicate-trigger-id' | 'harness-provider-incompatible' | 'harness-thinking-incompatible' | 'harness-tool-incompatible' | 'integration-connection-not-capable' | 'integration-connection-not-found' | 'integration-write-not-allowed' | 'invalid-cron-event' | 'invalid-cron-schedule' | 'invalid-cron-timezone' | 'invalid-provider' | 'invalid-trigger-filter' | 'invalid-interpolation-expression' | 'invalid-interpolation-template' | 'invalid-duration' | 'invalid-listener-filter' | 'invalid-model' | 'invalid-job-if' | 'invalid-job-output' | 'invalid-job-success' | 'invalid-output-schema' | 'invalid-runner-label' | 'invalid-step-gate-restart-from' | 'invalid-step-gate-success' | 'invalid-step-if' | 'job-dependency-cycle' | 'listening-job-missing-resolution-source' | 'listening-timeout-exceeds-run-timeout' | 'missing-harness-for-tools' | 'missing-connection-for-integration' | 'missing-job-needs-edge' | 'missing-cron-schedule' | 'missing-runner-label' | 'multiple-manual-triggers' | 'runner-context-not-bare' | 'runner-context-in-field' | 'runner-context-in-server-predicate' | 're-evaluating-command' | 'self-job-dependency' | 'too-many-runner-labels' | 'unknown-secret-store' | 'unknown-interpolation-context' | 'unknown-integration-method' | 'unknown-integration-tool' | 'unknown-job-dependency' | 'untrusted-agent-selection-context';
2
+ export type WorkflowModelValidationIssueCode = 'context-unavailable-at-fill-site' | 'dynamic-name-self-reference' | 'context-unavailable-at-predicate-site' | 'computed-context-key' | 'checkout-target-invalid' | 'duplicate-job-id' | 'duplicate-step-id' | 'duplicate-trigger-id' | 'harness-provider-incompatible' | 'harness-thinking-incompatible' | 'harness-tool-incompatible' | 'integration-connection-not-capable' | 'integration-connection-not-found' | 'integration-write-not-allowed' | 'invalid-cron-event' | 'invalid-cron-schedule' | 'invalid-cron-timezone' | 'invalid-provider' | 'invalid-trigger-filter' | 'invalid-interpolation-expression' | 'invalid-interpolation-template' | 'invalid-duration' | 'invalid-listener-filter' | 'invalid-model' | 'invalid-job-if' | 'invalid-job-success' | 'invalid-output-schema' | 'invalid-runner-label' | 'invalid-step-gate-restart-from' | 'invalid-step-gate-success' | 'invalid-step-if' | 'job-dependency-cycle' | 'listening-job-missing-resolution-source' | 'listening-timeout-exceeds-run-timeout' | 'missing-harness-for-tools' | 'missing-connection-for-integration' | 'missing-job-needs-edge' | 'missing-cron-schedule' | 'missing-runner-label' | 'multiple-manual-triggers' | 'runner-context-not-bare' | 'runner-context-in-field' | 'runner-context-in-server-predicate' | 're-evaluating-command' | 'self-job-dependency' | 'too-many-runner-labels' | 'unknown-secret-store' | 'unknown-interpolation-context' | 'unknown-integration-method' | 'unknown-integration-tool' | 'unknown-job-dependency' | 'untrusted-agent-selection-context';
3
3
  export type WorkflowModelValidationIssuePathSegment = string | number;
4
4
  export type WorkflowModelValidationIssueSeverity = 'error' | 'warning';
5
5
  export interface WorkflowModelValidationIssue {
@@ -1 +1 @@
1
- {"version":3,"file":"invalid-workflow-model-error.d.ts","sourceRoot":"","sources":["../../../src/core/workflow-model/invalid-workflow-model-error.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,6BAA6B,2BAA2B,CAAC;AAEtE,MAAM,MAAM,gCAAgC,GACxC,kCAAkC,GAClC,6BAA6B,GAC7B,uCAAuC,GACvC,sBAAsB,GACtB,yBAAyB,GACzB,kBAAkB,GAClB,mBAAmB,GACnB,sBAAsB,GACtB,+BAA+B,GAC/B,+BAA+B,GAC/B,2BAA2B,GAC3B,oCAAoC,GACpC,kCAAkC,GAClC,+BAA+B,GAC/B,oBAAoB,GACpB,uBAAuB,GACvB,uBAAuB,GACvB,kBAAkB,GAClB,wBAAwB,GACxB,kCAAkC,GAClC,gCAAgC,GAChC,kBAAkB,GAClB,yBAAyB,GACzB,eAAe,GACf,gBAAgB,GAChB,oBAAoB,GACpB,qBAAqB,GACrB,uBAAuB,GACvB,sBAAsB,GACtB,gCAAgC,GAChC,2BAA2B,GAC3B,iBAAiB,GACjB,sBAAsB,GACtB,yCAAyC,GACzC,uCAAuC,GACvC,2BAA2B,GAC3B,oCAAoC,GACpC,wBAAwB,GACxB,uBAAuB,GACvB,sBAAsB,GACtB,0BAA0B,GAC1B,yBAAyB,GACzB,yBAAyB,GACzB,oCAAoC,GACpC,uBAAuB,GACvB,qBAAqB,GACrB,wBAAwB,GACxB,sBAAsB,GACtB,+BAA+B,GAC/B,4BAA4B,GAC5B,0BAA0B,GAC1B,wBAAwB,GACxB,mCAAmC,CAAC;AAExC,MAAM,MAAM,uCAAuC,GAAG,MAAM,GAAG,MAAM,CAAC;AAEtE,MAAM,MAAM,oCAAoC,GAAG,OAAO,GAAG,SAAS,CAAC;AAEvE,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,IAAI,EAAE,gCAAgC,CAAC;IAChD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,uCAAuC,EAAE,CAAC;IAClE,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACrD,QAAQ,CAAC,QAAQ,CAAC,EAAE,oCAAoC,CAAC;CAC1D;AAED,qBAAa,yBAA0B,SAAQ,KAAK;IAGtC,QAAQ,CAAC,MAAM,EAAE,SAAS,4BAA4B,EAAE;IAFpE,QAAQ,CAAC,IAAI,4BAAiC;gBAEzB,MAAM,EAAE,SAAS,4BAA4B,EAAE;CAIrE"}
1
+ {"version":3,"file":"invalid-workflow-model-error.d.ts","sourceRoot":"","sources":["../../../src/core/workflow-model/invalid-workflow-model-error.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,6BAA6B,2BAA2B,CAAC;AAEtE,MAAM,MAAM,gCAAgC,GACxC,kCAAkC,GAClC,6BAA6B,GAC7B,uCAAuC,GACvC,sBAAsB,GACtB,yBAAyB,GACzB,kBAAkB,GAClB,mBAAmB,GACnB,sBAAsB,GACtB,+BAA+B,GAC/B,+BAA+B,GAC/B,2BAA2B,GAC3B,oCAAoC,GACpC,kCAAkC,GAClC,+BAA+B,GAC/B,oBAAoB,GACpB,uBAAuB,GACvB,uBAAuB,GACvB,kBAAkB,GAClB,wBAAwB,GACxB,kCAAkC,GAClC,gCAAgC,GAChC,kBAAkB,GAClB,yBAAyB,GACzB,eAAe,GACf,gBAAgB,GAChB,qBAAqB,GACrB,uBAAuB,GACvB,sBAAsB,GACtB,gCAAgC,GAChC,2BAA2B,GAC3B,iBAAiB,GACjB,sBAAsB,GACtB,yCAAyC,GACzC,uCAAuC,GACvC,2BAA2B,GAC3B,oCAAoC,GACpC,wBAAwB,GACxB,uBAAuB,GACvB,sBAAsB,GACtB,0BAA0B,GAC1B,yBAAyB,GACzB,yBAAyB,GACzB,oCAAoC,GACpC,uBAAuB,GACvB,qBAAqB,GACrB,wBAAwB,GACxB,sBAAsB,GACtB,+BAA+B,GAC/B,4BAA4B,GAC5B,0BAA0B,GAC1B,wBAAwB,GACxB,mCAAmC,CAAC;AAExC,MAAM,MAAM,uCAAuC,GAAG,MAAM,GAAG,MAAM,CAAC;AAEtE,MAAM,MAAM,oCAAoC,GAAG,OAAO,GAAG,SAAS,CAAC;AAEvE,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,IAAI,EAAE,gCAAgC,CAAC;IAChD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,uCAAuC,EAAE,CAAC;IAClE,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACrD,QAAQ,CAAC,QAAQ,CAAC,EAAE,oCAAoC,CAAC;CAC1D;AAED,qBAAa,yBAA0B,SAAQ,KAAK;IAGtC,QAAQ,CAAC,MAAM,EAAE,SAAS,4BAA4B,EAAE;IAFpE,QAAQ,CAAC,IAAI,4BAAiC;IAE9C,YAAqB,MAAM,EAAE,SAAS,4BAA4B,EAAE,EAGnE;CACF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/workflow-model/invalid-workflow-model-error.ts"],"sourcesContent":["export const invalidWorkflowModelErrorCode = 'invalid-workflow-model';\n\nexport type WorkflowModelValidationIssueCode =\n | 'context-unavailable-at-fill-site'\n | 'dynamic-name-self-reference'\n | 'context-unavailable-at-predicate-site'\n | 'computed-context-key'\n | 'checkout-target-invalid'\n | 'duplicate-job-id'\n | 'duplicate-step-id'\n | 'duplicate-trigger-id'\n | 'harness-provider-incompatible'\n | 'harness-thinking-incompatible'\n | 'harness-tool-incompatible'\n | 'integration-connection-not-capable'\n | 'integration-connection-not-found'\n | 'integration-write-not-allowed'\n | 'invalid-cron-event'\n | 'invalid-cron-schedule'\n | 'invalid-cron-timezone'\n | 'invalid-provider'\n | 'invalid-trigger-filter'\n | 'invalid-interpolation-expression'\n | 'invalid-interpolation-template'\n | 'invalid-duration'\n | 'invalid-listener-filter'\n | 'invalid-model'\n | 'invalid-job-if'\n | 'invalid-job-output'\n | 'invalid-job-success'\n | 'invalid-output-schema'\n | 'invalid-runner-label'\n | 'invalid-step-gate-restart-from'\n | 'invalid-step-gate-success'\n | 'invalid-step-if'\n | 'job-dependency-cycle'\n | 'listening-job-missing-resolution-source'\n | 'listening-timeout-exceeds-run-timeout'\n | 'missing-harness-for-tools'\n | 'missing-connection-for-integration'\n | 'missing-job-needs-edge'\n | 'missing-cron-schedule'\n | 'missing-runner-label'\n | 'multiple-manual-triggers'\n | 'runner-context-not-bare'\n | 'runner-context-in-field'\n | 'runner-context-in-server-predicate'\n | 're-evaluating-command'\n | 'self-job-dependency'\n | 'too-many-runner-labels'\n | 'unknown-secret-store'\n | 'unknown-interpolation-context'\n | 'unknown-integration-method'\n | 'unknown-integration-tool'\n | 'unknown-job-dependency'\n | 'untrusted-agent-selection-context';\n\nexport type WorkflowModelValidationIssuePathSegment = string | number;\n\nexport type WorkflowModelValidationIssueSeverity = 'error' | 'warning';\n\nexport interface WorkflowModelValidationIssue {\n readonly code: WorkflowModelValidationIssueCode;\n readonly message: string;\n readonly path: readonly WorkflowModelValidationIssuePathSegment[];\n readonly details?: Readonly<Record<string, unknown>>;\n readonly severity?: WorkflowModelValidationIssueSeverity;\n}\n\nexport class InvalidWorkflowModelError extends Error {\n readonly code = invalidWorkflowModelErrorCode;\n\n constructor(readonly issues: readonly WorkflowModelValidationIssue[]) {\n super('Invalid workflow model');\n this.name = 'InvalidWorkflowModelError';\n }\n}\n"],"names":["invalidWorkflowModelErrorCode","InvalidWorkflowModelError","Error","issues","code","name"],"mappings":"AAAA,OAAO,MAAMA,gCAAgC,yBAAyB;AAqEtE,OAAO,MAAMC,kCAAkCC;IAG7C,YAAY,AAASC,MAA+C,CAAE;QACpE,KAAK,CAAC,gCADaA,SAAAA,aAFZC,OAAOJ;QAId,IAAI,CAACK,IAAI,GAAG;IACd;AACF"}
1
+ {"version":3,"sources":["../../../src/core/workflow-model/invalid-workflow-model-error.ts"],"sourcesContent":["export const invalidWorkflowModelErrorCode = 'invalid-workflow-model';\n\nexport type WorkflowModelValidationIssueCode =\n | 'context-unavailable-at-fill-site'\n | 'dynamic-name-self-reference'\n | 'context-unavailable-at-predicate-site'\n | 'computed-context-key'\n | 'checkout-target-invalid'\n | 'duplicate-job-id'\n | 'duplicate-step-id'\n | 'duplicate-trigger-id'\n | 'harness-provider-incompatible'\n | 'harness-thinking-incompatible'\n | 'harness-tool-incompatible'\n | 'integration-connection-not-capable'\n | 'integration-connection-not-found'\n | 'integration-write-not-allowed'\n | 'invalid-cron-event'\n | 'invalid-cron-schedule'\n | 'invalid-cron-timezone'\n | 'invalid-provider'\n | 'invalid-trigger-filter'\n | 'invalid-interpolation-expression'\n | 'invalid-interpolation-template'\n | 'invalid-duration'\n | 'invalid-listener-filter'\n | 'invalid-model'\n | 'invalid-job-if'\n | 'invalid-job-success'\n | 'invalid-output-schema'\n | 'invalid-runner-label'\n | 'invalid-step-gate-restart-from'\n | 'invalid-step-gate-success'\n | 'invalid-step-if'\n | 'job-dependency-cycle'\n | 'listening-job-missing-resolution-source'\n | 'listening-timeout-exceeds-run-timeout'\n | 'missing-harness-for-tools'\n | 'missing-connection-for-integration'\n | 'missing-job-needs-edge'\n | 'missing-cron-schedule'\n | 'missing-runner-label'\n | 'multiple-manual-triggers'\n | 'runner-context-not-bare'\n | 'runner-context-in-field'\n | 'runner-context-in-server-predicate'\n | 're-evaluating-command'\n | 'self-job-dependency'\n | 'too-many-runner-labels'\n | 'unknown-secret-store'\n | 'unknown-interpolation-context'\n | 'unknown-integration-method'\n | 'unknown-integration-tool'\n | 'unknown-job-dependency'\n | 'untrusted-agent-selection-context';\n\nexport type WorkflowModelValidationIssuePathSegment = string | number;\n\nexport type WorkflowModelValidationIssueSeverity = 'error' | 'warning';\n\nexport interface WorkflowModelValidationIssue {\n readonly code: WorkflowModelValidationIssueCode;\n readonly message: string;\n readonly path: readonly WorkflowModelValidationIssuePathSegment[];\n readonly details?: Readonly<Record<string, unknown>>;\n readonly severity?: WorkflowModelValidationIssueSeverity;\n}\n\nexport class InvalidWorkflowModelError extends Error {\n readonly code = invalidWorkflowModelErrorCode;\n\n constructor(readonly issues: readonly WorkflowModelValidationIssue[]) {\n super('Invalid workflow model');\n this.name = 'InvalidWorkflowModelError';\n }\n}\n"],"names":["invalidWorkflowModelErrorCode","InvalidWorkflowModelError","Error","issues","code","name"],"mappings":"AAAA,OAAO,MAAMA,gCAAgC,yBAAyB;AAoEtE,OAAO,MAAMC,kCAAkCC;IAG7C,YAAY,AAASC,MAA+C,CAAE;QACpE,KAAK,CAAC,gCADaA,SAAAA,aAFZC,OAAOJ;QAId,IAAI,CAACK,IAAI,GAAG;IACd;AACF"}
@@ -349,44 +349,20 @@ function normalizeJobOutputs(params) {
349
349
  }
350
350
  ];
351
351
  templates[key] = template;
352
- types[key] = inferJobOutputType({
353
- sourceName: params.sourceName,
354
- key,
355
- source,
356
- template,
357
- issues: params.issues
358
- });
352
+ types[key] = inferJobOutputType(template);
359
353
  }
360
354
  return {
361
355
  templates,
362
356
  types
363
357
  };
364
358
  }
365
- function inferJobOutputType(params) {
366
- if (params.template.length !== 1) return 'string';
367
- const [segment] = params.template;
359
+ function inferJobOutputType(template) {
360
+ if (template.length !== 1) return 'string';
361
+ const [segment] = template;
368
362
  if (segment?.kind !== 'deferred') return 'string';
369
363
  const resultType = segment.expression.resultType;
370
364
  if (resultType === undefined) return 'string';
371
- if (isScalarExpressionType(resultType)) return resultType;
372
- params.issues.push(issue({
373
- code: 'invalid-job-output',
374
- message: `Job output "${params.key}" must resolve to a scalar value.`,
375
- path: [
376
- 'jobs',
377
- params.sourceName,
378
- 'outputs',
379
- params.key
380
- ],
381
- details: {
382
- output: params.key,
383
- source: params.source
384
- }
385
- }));
386
- return 'string';
387
- }
388
- function isScalarExpressionType(type) {
389
- return type === 'string' || type === 'int' || type === 'double' || type === 'bool' || type === 'null' || type === 'timestamp';
365
+ return resultType;
390
366
  }
391
367
  function normalizeJobSteps(params) {
392
368
  const usedStepIds = new Map();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/workflow-model/normalize-jobs.ts"],"sourcesContent":["import type {AgentValidationCatalog} from '@shipfox/api-agent-dto/inter-module';\nimport {\n type AvailabilitySite,\n buildTypedRootsEnvironment,\n classifyShellCodePosition,\n type ExpressionType,\n type ExpressionTypeEnvironment,\n hoistPlannedRunCommand,\n type ShellReevaluatingConstruct,\n type UnsafeRunInterpolation,\n UnsafeRunInterpolationError,\n type WorkflowJobTypeOverlay,\n type WorkflowStepTypeOverlay,\n} from '@shipfox/expression';\nimport {\n canonicalizeLabels,\n findInvalidLabels,\n MAX_RUNNER_LABEL_LENGTH,\n MAX_RUNNER_LABELS,\n RUNNER_LABEL_PATTERN,\n} from '@shipfox/runner-labels';\nimport type {\n WorkflowDocument,\n WorkflowDocumentJob,\n WorkflowDocumentStep,\n} from '@shipfox/workflow-document';\nimport type {IntegrationValidationContext} from '../entities/integration-context.js';\nimport type {\n WorkflowEnvTemplates,\n WorkflowFieldTemplate,\n WorkflowModelAgentStep,\n WorkflowModelCheckoutStep,\n WorkflowModelJob,\n WorkflowModelRunStep,\n WorkflowModelStep,\n WorkflowModelStepCheckout,\n WorkflowOutputTemplates,\n WorkflowStepSourceLocationMap,\n} from '../entities/workflow-model.js';\nimport type {\n WorkflowModelValidationIssue,\n WorkflowModelValidationIssuePathSegment,\n} from './invalid-workflow-model-error.js';\nimport {normalizeAgentIntegrations} from './normalize-agent-integrations.js';\nimport {normalizeEnv} from './normalize-env.js';\nimport {normalizeIfCondition} from './normalize-if-condition.js';\nimport {normalizeCheckout, normalizeJobCheckout} from './normalize-job-checkout.js';\nimport {normalizeJobListening} from './normalize-job-listening.js';\nimport {normalizeJobSuccess} from './normalize-job-success.js';\nimport {normalizeNeeds} from './normalize-needs.js';\nimport {normalizeStepGate} from './normalize-step-gate.js';\nimport {normalizeStepOutputs} from './normalize-step-outputs.js';\nimport {parseDurationMs} from './parse-duration-ms.js';\nimport {parseInterpolationField} from './parse-interpolation-field.js';\nimport {stableId} from './stable-id.js';\nimport {unescapeLiteralName, validateLiteralName} from './validate-literal-name.js';\nimport {issue} from './validation-issue.js';\n\nexport interface NormalizeContext {\n readonly defaultRunnerLabels: readonly string[];\n readonly agentValidationCatalog: AgentValidationCatalog;\n readonly integrationValidationContext?: IntegrationValidationContext | undefined;\n}\n\nexport function normalizeJobs(\n document: WorkflowDocument,\n jobIdBySourceName: ReadonlyMap<string, string>,\n issues: WorkflowModelValidationIssue[],\n stepSourceLocations: WorkflowStepSourceLocationMap | undefined,\n context: NormalizeContext,\n): readonly WorkflowModelJob[] {\n const entries = Object.entries(document.jobs);\n const pending = new Set(entries.map(([sourceName]) => sourceName));\n const modelsBySourceName = new Map<string, WorkflowModelJob>();\n const jobOutputTypesBySourceName = new Map<string, Readonly<Record<string, ExpressionType>>>();\n const issuesBySourceName = new Map<string, WorkflowModelValidationIssue[]>();\n\n while (pending.size > 0) {\n let progressed = false;\n\n for (const [sourceName, job] of entries) {\n if (!pending.has(sourceName)) continue;\n\n const dependencySourceNames = normalizeNeeds(job.needs).filter((dependency) =>\n jobIdBySourceName.has(dependency),\n );\n if (dependencySourceNames.some((dependency) => pending.has(dependency))) continue;\n\n const model = normalizeJob({\n document,\n sourceName,\n job,\n jobIdBySourceName,\n issues: issuesForSourceName(issuesBySourceName, sourceName),\n stepSourceLocations,\n context,\n jobOutputTypesBySourceName,\n });\n if (model !== undefined) modelsBySourceName.set(sourceName, model);\n pending.delete(sourceName);\n progressed = true;\n }\n\n if (progressed) continue;\n\n for (const sourceName of pending) {\n const job = document.jobs[sourceName];\n if (job === undefined) continue;\n const model = normalizeJob({\n document,\n sourceName,\n job,\n jobIdBySourceName,\n issues: issuesForSourceName(issuesBySourceName, sourceName),\n stepSourceLocations,\n context,\n jobOutputTypesBySourceName,\n });\n if (model !== undefined) modelsBySourceName.set(sourceName, model);\n }\n break;\n }\n\n for (const [sourceName] of entries) {\n issues.push(...(issuesBySourceName.get(sourceName) ?? []));\n }\n\n return entries.flatMap(([sourceName]) => {\n const model = modelsBySourceName.get(sourceName);\n return model === undefined ? [] : [model];\n });\n}\n\nfunction issuesForSourceName(\n issuesBySourceName: Map<string, WorkflowModelValidationIssue[]>,\n sourceName: string,\n): WorkflowModelValidationIssue[] {\n const existing = issuesBySourceName.get(sourceName);\n if (existing !== undefined) return existing;\n\n const issues: WorkflowModelValidationIssue[] = [];\n issuesBySourceName.set(sourceName, issues);\n return issues;\n}\n\nfunction normalizeJob(params: {\n document: WorkflowDocument;\n sourceName: string;\n job: WorkflowDocumentJob;\n jobIdBySourceName: ReadonlyMap<string, string>;\n issues: WorkflowModelValidationIssue[];\n stepSourceLocations: WorkflowStepSourceLocationMap | undefined;\n context: NormalizeContext;\n jobOutputTypesBySourceName: Map<string, Readonly<Record<string, ExpressionType>>>;\n}): WorkflowModelJob | undefined {\n const id = params.jobIdBySourceName.get(params.sourceName);\n if (id === undefined) return undefined;\n\n const dependencies = normalizeJobDependencies({\n sourceName: params.sourceName,\n job: params.job,\n jobIdBySourceName: params.jobIdBySourceName,\n });\n const allowedJobReferences = directNeedSourceNames({\n sourceName: params.sourceName,\n job: params.job,\n jobIdBySourceName: params.jobIdBySourceName,\n });\n const upstreamJobs = upstreamJobTypeOverlays({\n allowedJobReferences,\n jobOutputTypesBySourceName: params.jobOutputTypesBySourceName,\n });\n const directNeedJobs = directNeedJobTypeOverlays({\n allowedJobReferences,\n jobOutputTypesBySourceName: params.jobOutputTypesBySourceName,\n });\n const upstreamJobsTypeOverlay =\n upstreamJobs.length === 0 ? undefined : buildTypedRootsEnvironment({jobs: upstreamJobs});\n const jobConditionTypeOverlay = buildTypedRootsEnvironment({\n jobs: directNeedJobs,\n needs: directNeedJobs,\n });\n // Step config can reference peer step outputs, which are completed at dispatch.\n const stepFillSite: AvailabilitySite = 'step-dispatch';\n const stepTypeOverlay = params.job.steps.some((step) => step.outputs !== undefined)\n ? {}\n : undefined;\n const steps = normalizeJobSteps({\n sourceName: params.sourceName,\n jobId: id,\n job: params.job,\n workflowEnvKeys: Object.keys(params.document.env ?? {}),\n jobEnvKeys: Object.keys(params.job.env ?? {}),\n issues: params.issues,\n stepSourceLocations: params.stepSourceLocations,\n fillSite: stepFillSite,\n allowedJobReferences,\n typeOverlay: stepTypeOverlay,\n upstreamJobs,\n directNeedJobs,\n context: params.context,\n });\n const runner = normalizeRunner({\n document: params.document,\n job: params.job,\n sourceName: params.sourceName,\n issues: params.issues,\n defaultRunnerLabels: params.context.defaultRunnerLabels,\n });\n const checkout = normalizeJobCheckout({\n checkout: params.job.checkout,\n });\n const jobEnv = normalizeEnv({\n env: params.job.env,\n path: ['jobs', params.sourceName, 'env'],\n issues: params.issues,\n allowedJobReferences,\n typeOverlay: upstreamJobsTypeOverlay,\n });\n const success = normalizeJobSuccess({\n source: params.job.success,\n sourceName: params.sourceName,\n issues: params.issues,\n allowedJobReferences,\n typeOverlay: upstreamJobsTypeOverlay,\n });\n const condition = normalizeIfCondition({\n field: 'job.if',\n source: params.job.if,\n path: ['jobs', params.sourceName, 'if'],\n invalidCode: 'invalid-job-if',\n invalidMessage: 'Job if must be a valid wrapped CEL boolean expression.',\n issues: params.issues,\n allowedJobReferences,\n typeOverlay: jobConditionTypeOverlay,\n });\n const outputs = normalizeJobOutputs({\n sourceName: params.sourceName,\n outputs: params.job.outputs,\n issues: params.issues,\n allowedJobReferences,\n steps: params.job.steps,\n upstreamJobs,\n });\n if (outputs?.types !== undefined) {\n params.jobOutputTypesBySourceName.set(params.sourceName, outputs.types);\n }\n const executionTimeoutMs = parseDurationMs({\n source: params.job.execution_timeout,\n path: ['jobs', params.sourceName, 'execution_timeout'],\n issues: params.issues,\n });\n const listening = normalizeJobListening({\n job: params.job,\n sourceName: params.sourceName,\n issues: params.issues,\n allowedJobReferences,\n });\n if (params.job.name !== undefined) {\n validateLiteralName({\n field: 'job.name',\n dynamicField: 'execution_name',\n source: params.job.name,\n path: ['jobs', params.sourceName, 'name'],\n message: 'Job name must be literal. Move runtime interpolation to execution_name.',\n issues: params.issues,\n });\n }\n const name = params.job.name === undefined ? undefined : unescapeLiteralName(params.job.name);\n const executionName =\n params.job.execution_name === undefined\n ? undefined\n : (parseInterpolationField({\n field: 'job.execution_name',\n source: params.job.execution_name,\n path: ['jobs', params.sourceName, 'execution_name'],\n issues: params.issues,\n fillSite: 'execution-creation',\n allowedJobReferences,\n typeOverlay: upstreamJobsTypeOverlay,\n }) ?? [{kind: 'literal' as const, value: params.job.execution_name}]);\n\n return {\n id,\n key: params.sourceName,\n mode: listening === undefined ? 'one_shot' : 'listening',\n runner: runner.labels,\n ...(runner.templates.length === 0 ? {} : {runnerTemplates: runner.templates}),\n checkout,\n ...(condition === undefined ? {} : {if: condition}),\n ...(success === undefined ? {} : {success}),\n ...(outputs === undefined ? {} : {outputs: outputs.templates}),\n ...(outputs?.types === undefined ? {} : {outputTypes: outputs.types}),\n ...(executionTimeoutMs === undefined ? {} : {executionTimeoutMs}),\n ...(listening === undefined ? {} : {listening}),\n ...(name === undefined ? {} : {name}),\n ...(executionName === undefined ? {} : {executionName}),\n ...jobEnv,\n dependencies,\n steps,\n };\n}\n\nfunction normalizeJobDependencies(params: {\n sourceName: string;\n job: WorkflowDocumentJob;\n jobIdBySourceName: ReadonlyMap<string, string>;\n}): readonly string[] {\n return normalizeNeeds(params.job.needs).flatMap((dependencySourceName) => {\n const dependencyId = params.jobIdBySourceName.get(dependencySourceName);\n if (dependencyId === undefined || dependencySourceName === params.sourceName) return [];\n return [dependencyId];\n });\n}\n\nfunction directNeedSourceNames(params: {\n sourceName: string;\n job: WorkflowDocumentJob;\n jobIdBySourceName: ReadonlyMap<string, string>;\n}): ReadonlySet<string> {\n return new Set(\n normalizeNeeds(params.job.needs).filter(\n (dependencySourceName) =>\n dependencySourceName !== params.sourceName &&\n params.jobIdBySourceName.has(dependencySourceName),\n ),\n );\n}\n\nfunction previousStepOverlays(\n steps: readonly WorkflowDocumentStep[],\n index: number,\n): readonly WorkflowStepTypeOverlay[] {\n return steps.slice(0, index).flatMap((step) => {\n if (step.key === undefined) return [];\n return [{key: step.key, ...(step.outputs === undefined ? {} : {outputs: step.outputs})}];\n });\n}\n\nfunction allStepOverlays(\n steps: readonly WorkflowDocumentStep[],\n): readonly WorkflowStepTypeOverlay[] {\n return previousStepOverlays(steps, steps.length);\n}\n\nfunction upstreamJobTypeOverlays(params: {\n allowedJobReferences: ReadonlySet<string>;\n jobOutputTypesBySourceName: ReadonlyMap<string, Readonly<Record<string, ExpressionType>>>;\n}): readonly WorkflowJobTypeOverlay[] {\n const overlays = [...params.allowedJobReferences].map((sourceName) => {\n const outputs = params.jobOutputTypesBySourceName.get(sourceName);\n return {key: sourceName, ...(outputs === undefined ? {} : {outputs})};\n });\n return overlays.some((overlay) => overlay.outputs !== undefined) ? overlays : [];\n}\n\nfunction directNeedJobTypeOverlays(params: {\n allowedJobReferences: ReadonlySet<string>;\n jobOutputTypesBySourceName: ReadonlyMap<string, Readonly<Record<string, ExpressionType>>>;\n}): readonly WorkflowJobTypeOverlay[] {\n return [...params.allowedJobReferences].map((sourceName) => {\n const outputs = params.jobOutputTypesBySourceName.get(sourceName);\n return {key: sourceName, ...(outputs === undefined ? {} : {outputs})};\n });\n}\n\nfunction normalizeJobOutputs(params: {\n sourceName: string;\n outputs: WorkflowDocumentJob['outputs'];\n issues: WorkflowModelValidationIssue[];\n allowedJobReferences: ReadonlySet<string>;\n steps: readonly WorkflowDocumentStep[];\n upstreamJobs: readonly WorkflowJobTypeOverlay[];\n}):\n | {templates: WorkflowOutputTemplates; types: Readonly<Record<string, ExpressionType>>}\n | undefined {\n if (params.outputs === undefined) return undefined;\n\n const templates: Record<string, WorkflowFieldTemplate> = Object.create(null) as Record<\n string,\n WorkflowFieldTemplate\n >;\n const types: Record<string, ExpressionType> = Object.create(null) as Record<\n string,\n ExpressionType\n >;\n const hasStepOutputDeclarations = params.steps.some((step) => step.outputs !== undefined);\n const typeOverlay =\n hasStepOutputDeclarations || params.upstreamJobs.length > 0\n ? buildTypedRootsEnvironment({\n ...(hasStepOutputDeclarations ? {steps: allStepOverlays(params.steps)} : {}),\n ...(params.upstreamJobs.length === 0 ? {} : {jobs: params.upstreamJobs}),\n })\n : undefined;\n\n for (const [key, source] of Object.entries(params.outputs)) {\n const template = parseInterpolationField({\n field: 'job.outputs',\n source,\n path: ['jobs', params.sourceName, 'outputs', key],\n issues: params.issues,\n fillSite: 'execution-resolution',\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay,\n }) ?? [{kind: 'literal' as const, value: source}];\n templates[key] = template;\n types[key] = inferJobOutputType({\n sourceName: params.sourceName,\n key,\n source,\n template,\n issues: params.issues,\n });\n }\n\n return {templates, types};\n}\n\nfunction inferJobOutputType(params: {\n sourceName: string;\n key: string;\n source: string;\n template: WorkflowFieldTemplate;\n issues: WorkflowModelValidationIssue[];\n}): ExpressionType {\n if (params.template.length !== 1) return 'string';\n\n const [segment] = params.template;\n if (segment?.kind !== 'deferred') return 'string';\n\n const resultType = segment.expression.resultType;\n if (resultType === undefined) return 'string';\n if (isScalarExpressionType(resultType)) return resultType;\n\n params.issues.push(\n issue({\n code: 'invalid-job-output',\n message: `Job output \"${params.key}\" must resolve to a scalar value.`,\n path: ['jobs', params.sourceName, 'outputs', params.key],\n details: {\n output: params.key,\n source: params.source,\n },\n }),\n );\n return 'string';\n}\n\nfunction isScalarExpressionType(type: ExpressionType): boolean {\n return (\n type === 'string' ||\n type === 'int' ||\n type === 'double' ||\n type === 'bool' ||\n type === 'null' ||\n type === 'timestamp'\n );\n}\n\nfunction normalizeJobSteps(params: {\n sourceName: string;\n jobId: string;\n job: WorkflowDocumentJob;\n workflowEnvKeys: readonly string[];\n jobEnvKeys: readonly string[];\n issues: WorkflowModelValidationIssue[];\n stepSourceLocations: WorkflowStepSourceLocationMap | undefined;\n fillSite: AvailabilitySite;\n allowedJobReferences: ReadonlySet<string>;\n typeOverlay?: ExpressionTypeEnvironment | undefined;\n upstreamJobs: readonly WorkflowJobTypeOverlay[];\n directNeedJobs: readonly WorkflowJobTypeOverlay[];\n context: NormalizeContext;\n}): readonly WorkflowModelStep[] {\n const usedStepIds = new Map<string, number>();\n\n return params.job.steps.flatMap((step, index) => {\n const normalized = normalizeStep({\n step,\n index,\n sourceName: params.sourceName,\n jobId: params.jobId,\n allSteps: params.job.steps,\n workflowEnvKeys: params.workflowEnvKeys,\n jobEnvKeys: params.jobEnvKeys,\n usedStepIds,\n issues: params.issues,\n stepSourceLocations: params.stepSourceLocations,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay: params.typeOverlay,\n upstreamJobs: params.upstreamJobs,\n directNeedJobs: params.directNeedJobs,\n context: params.context,\n });\n return normalized === undefined ? [] : [normalized];\n });\n}\n\nfunction normalizeStep(params: {\n step: WorkflowDocumentStep;\n index: number;\n sourceName: string;\n jobId: string;\n allSteps: readonly WorkflowDocumentStep[];\n workflowEnvKeys: readonly string[];\n jobEnvKeys: readonly string[];\n usedStepIds: Map<string, number>;\n issues: WorkflowModelValidationIssue[];\n stepSourceLocations: WorkflowStepSourceLocationMap | undefined;\n fillSite: AvailabilitySite;\n allowedJobReferences: ReadonlySet<string>;\n typeOverlay?: ExpressionTypeEnvironment | undefined;\n upstreamJobs: readonly WorkflowJobTypeOverlay[];\n directNeedJobs: readonly WorkflowJobTypeOverlay[];\n context: NormalizeContext;\n}): WorkflowModelStep | undefined {\n const stepKey = params.step.key;\n const stepId =\n stepKey === undefined\n ? `${params.jobId}-step-${params.index + 1}`\n : `${params.jobId}-${stableId(stepKey)}`;\n const existingIndex = params.usedStepIds.get(stepId);\n\n if (existingIndex !== undefined) {\n params.issues.push(\n issue({\n code: 'duplicate-step-id',\n message: `Steps ${existingIndex} and ${params.index} in job \"${params.sourceName}\" resolve to the same stable id \"${stepId}\".`,\n path: ['jobs', params.sourceName, 'steps', params.index],\n details: {id: stepId, indexes: [existingIndex, params.index]},\n }),\n );\n } else {\n params.usedStepIds.set(stepId, params.index);\n }\n\n const outputs = normalizeStepOutputs({\n step: params.step,\n sourceName: params.sourceName,\n stepIndex: params.index,\n issues: params.issues,\n });\n const currentStepOverlay =\n stepKey === undefined\n ? undefined\n : ({\n key: stepKey,\n ...(outputs === undefined ? {} : {outputs}),\n } satisfies WorkflowStepTypeOverlay);\n const shouldBuildTypeOverlay = params.typeOverlay !== undefined || params.upstreamJobs.length > 0;\n const typeOverlay = !shouldBuildTypeOverlay\n ? undefined\n : buildTypedRootsEnvironment({\n steps: previousStepOverlays(params.allSteps, params.index),\n ...(currentStepOverlay === undefined ? {} : {currentStep: currentStepOverlay}),\n ...(params.upstreamJobs.length === 0 ? {} : {jobs: params.upstreamJobs}),\n });\n const conditionTypeOverlay = buildTypedRootsEnvironment({\n steps: previousStepOverlays(params.allSteps, params.index),\n ...(currentStepOverlay === undefined ? {} : {currentStep: currentStepOverlay}),\n jobs: params.directNeedJobs,\n needs: params.directNeedJobs,\n });\n\n const condition = normalizeIfCondition({\n field: 'step.if',\n source: params.step.if,\n path: ['jobs', params.sourceName, 'steps', params.index, 'if'],\n invalidCode: 'invalid-step-if',\n invalidMessage: 'Step if must be a valid wrapped CEL boolean expression.',\n issues: params.issues,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay: conditionTypeOverlay,\n });\n const gate = normalizeStepGate({\n step: params.step,\n sourceName: params.sourceName,\n stepIndex: params.index,\n stepId,\n previousStepKeys: new Set(\n params.allSteps\n .slice(0, params.index)\n .flatMap((candidate) => (candidate.key ? [candidate.key] : [])),\n ),\n issues: params.issues,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay,\n });\n const sourceLocation = params.stepSourceLocations?.get(params.sourceName)?.get(params.index);\n const name =\n params.step.name === undefined\n ? undefined\n : parseInterpolationField({\n field: 'step.name',\n source: params.step.name,\n path: ['jobs', params.sourceName, 'steps', params.index, 'name'],\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay,\n });\n const workingDirectory =\n params.step.working_directory === undefined\n ? undefined\n : parseInterpolationField({\n field: 'step.working_directory',\n source: params.step.working_directory,\n path: ['jobs', params.sourceName, 'steps', params.index, 'working_directory'],\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay,\n });\n const stepBase = {\n id: stepId,\n ...(stepKey === undefined ? {} : {key: stepKey}),\n ...(params.step.name === undefined ? {} : {name: params.step.name}),\n ...(params.step.working_directory === undefined\n ? {}\n : {workingDirectory: params.step.working_directory}),\n ...(outputs === undefined ? {} : {outputs}),\n ...(sourceLocation === undefined ? {} : {sourceLocation}),\n ...(condition === undefined ? {} : {if: condition}),\n ...(gate === undefined ? {} : {gate}),\n };\n\n if (params.step.run !== undefined) {\n return normalizeRunStep({\n step: params.step,\n stepBase,\n sourceName: params.sourceName,\n stepIndex: params.index,\n workflowEnvKeys: params.workflowEnvKeys,\n jobEnvKeys: params.jobEnvKeys,\n name,\n workingDirectory,\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay,\n });\n }\n\n if (params.step.prompt !== undefined) {\n return normalizeAgentStep({\n step: params.step,\n stepBase,\n sourceName: params.sourceName,\n stepIndex: params.index,\n name,\n workingDirectory,\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay,\n context: params.context,\n });\n }\n\n if (params.step.checkout !== undefined) {\n return normalizeCheckoutStep({\n step: params.step,\n stepBase,\n name,\n sourceName: params.sourceName,\n stepIndex: params.index,\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay,\n });\n }\n\n // Keep the model-step union honest if callers bypass the document parser.\n throw new Error(`Workflow step \"${stepId}\" is neither a run, agent, nor checkout step`);\n}\n\nfunction normalizeCheckoutStep(params: {\n step: WorkflowDocumentStep;\n stepBase: WorkflowModelStepBaseFields;\n name: WorkflowFieldTemplate | undefined;\n sourceName: string;\n stepIndex: number;\n issues: WorkflowModelValidationIssue[];\n fillSite: AvailabilitySite;\n allowedJobReferences: ReadonlySet<string>;\n typeOverlay?: ExpressionTypeEnvironment | undefined;\n}): WorkflowModelCheckoutStep {\n const checkout = params.step.checkout;\n if (checkout === undefined) {\n throw new Error('Checkout step normalization requires checkout settings');\n }\n\n const normalizedCheckout: WorkflowModelStepCheckout = normalizeCheckout({\n checkout,\n issues: params.issues,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'checkout'],\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay: params.typeOverlay,\n });\n\n return {\n ...params.stepBase,\n kind: 'checkout',\n checkout: normalizedCheckout,\n ...(params.name === undefined ? {} : {templates: {name: params.name}}),\n };\n}\n\nfunction normalizeRunStep(params: {\n step: WorkflowDocumentStep;\n stepBase: WorkflowModelStepBaseFields;\n sourceName: string;\n stepIndex: number;\n workflowEnvKeys: readonly string[];\n jobEnvKeys: readonly string[];\n name: WorkflowFieldTemplate | undefined;\n workingDirectory: WorkflowFieldTemplate | undefined;\n issues: WorkflowModelValidationIssue[];\n fillSite: AvailabilitySite;\n allowedJobReferences: ReadonlySet<string>;\n typeOverlay?: ExpressionTypeEnvironment | undefined;\n}): WorkflowModelRunStep {\n if (params.step.run === undefined) {\n throw new Error('Run step normalization requires a run command');\n }\n\n const commandTemplate = parseInterpolationField({\n field: 'run',\n source: params.step.run,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'run'],\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay: params.typeOverlay,\n });\n const stepEnv = normalizeEnv({\n env: params.step.env,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'env'],\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay: params.typeOverlay,\n });\n addReevaluatingCommandWarnings({\n command: commandTemplate,\n source: params.step.run,\n workflowEnvKeys: params.workflowEnvKeys,\n jobEnvKeys: params.jobEnvKeys,\n stepEnvKeys: Object.keys(params.step.env ?? {}),\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'run'],\n issues: params.issues,\n });\n const templates = optionalRunStepTemplates({\n command: commandTemplate,\n name: params.name,\n workingDirectory: params.workingDirectory,\n env: stepEnv.templates?.env,\n });\n\n return {\n ...params.stepBase,\n kind: 'run',\n command: {kind: 'shell', value: params.step.run},\n ...(stepEnv.env === undefined ? {} : {env: stepEnv.env}),\n ...(templates === undefined ? {} : {templates}),\n };\n}\n\nfunction addReevaluatingCommandWarnings(params: {\n command: WorkflowFieldTemplate | undefined;\n source: string;\n workflowEnvKeys: readonly string[];\n jobEnvKeys: readonly string[];\n stepEnvKeys: readonly string[];\n path: readonly WorkflowModelValidationIssuePathSegment[];\n issues: WorkflowModelValidationIssue[];\n}): void {\n const envKeys = new Set([...params.workflowEnvKeys, ...params.jobEnvKeys, ...params.stepEnvKeys]);\n let hoisted: ReturnType<typeof hoistPlannedRunCommand>;\n\n try {\n hoisted = hoistPlannedRunCommand({\n field: {\n segments: params.command ?? [{kind: 'literal', value: params.source}],\n },\n reservedNames: envKeys,\n });\n } catch (error) {\n if (!(error instanceof UnsafeRunInterpolationError)) return;\n\n for (const occurrence of error.occurrences) {\n params.issues.push(\n issue({\n code: 're-evaluating-command',\n message: unsafeInterpolationWarningMessage(occurrence),\n path: params.path,\n severity: 'warning',\n }),\n );\n }\n\n if (error.partial === undefined) return;\n hoisted = error.partial;\n }\n\n try {\n const matches = classifyShellCodePosition({\n command: hoisted.command,\n workflowDataNames: [...envKeys, ...hoisted.bindings.map((binding) => binding.name)],\n }).matches;\n\n for (const match of matches) {\n params.issues.push(\n issue({\n code: 're-evaluating-command',\n message: reevaluatingCommandWarningMessage(match.construct, match.name),\n path: params.path,\n severity: 'warning',\n }),\n );\n }\n } catch {\n return;\n }\n}\n\nfunction unsafeInterpolationWarningMessage(error: UnsafeRunInterpolation): string {\n const regionLabel = {\n single: 'single-quoted shell text',\n double: 'double-quoted shell text',\n 'dollar-single': 'ANSI-C shell text',\n 'dollar-double': 'dollar-double-quoted shell text',\n 'paren-sub': 'command substitution',\n arith: 'shell arithmetic',\n backtick: 'backtick substitution',\n 'param-brace': 'shell parameter expansion',\n heredoc: 'a heredoc',\n 'line-comment': 'a shell comment',\n escape: 'a shell escape',\n }[error.region];\n\n return `Value \"${error.source}\" is inside ${regionLabel} and will be re-executed as code. Hoisting cannot protect it; move the interpolation to a normal quoted argument instead.`;\n}\n\nfunction reevaluatingCommandWarningMessage(\n construct: ShellReevaluatingConstruct,\n name: string,\n): string {\n const constructLabel = {\n eval: 'eval',\n 'sh-c': 'sh -c',\n 'bash-c': 'bash -c',\n source: 'source',\n let: 'let',\n 'declare-i': 'declare -i',\n arithmetic: 'shell arithmetic',\n awk: 'awk',\n jq: 'jq',\n sed: 'sed',\n 'xargs-sh-c': 'xargs sh -c',\n }[construct];\n\n return `Value \"$${name}\" is passed to ${constructLabel} and re-executed as code. Hoisting cannot protect it; pass the value to a fixed program instead.`;\n}\n\nfunction normalizeAgentStep(params: {\n step: WorkflowDocumentStep;\n stepBase: WorkflowModelStepBaseFields;\n sourceName: string;\n stepIndex: number;\n name: WorkflowFieldTemplate | undefined;\n workingDirectory: WorkflowFieldTemplate | undefined;\n issues: WorkflowModelValidationIssue[];\n fillSite: AvailabilitySite;\n allowedJobReferences: ReadonlySet<string>;\n typeOverlay?: ExpressionTypeEnvironment | undefined;\n context: NormalizeContext;\n}): WorkflowModelAgentStep {\n if (params.step.prompt === undefined) {\n throw new Error('Agent step normalization requires a prompt');\n }\n\n const promptTemplate = parseInterpolationField({\n field: 'agent.prompt',\n source: params.step.prompt,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'prompt'],\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay: params.typeOverlay,\n });\n const modelTemplate =\n params.step.model === undefined\n ? undefined\n : parseInterpolationField({\n field: 'agent.model',\n source: params.step.model,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'model'],\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay: params.typeOverlay,\n });\n const providerTemplate =\n params.step.provider === undefined\n ? undefined\n : parseInterpolationField({\n field: 'agent.provider',\n source: params.step.provider,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'provider'],\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay: params.typeOverlay,\n });\n const thinkingTemplate =\n params.step.thinking === undefined\n ? undefined\n : parseInterpolationField({\n field: 'agent.thinking',\n source: params.step.thinking,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'thinking'],\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay: params.typeOverlay,\n });\n validateAgentStep({\n step: params.step,\n sourceName: params.sourceName,\n stepIndex: params.stepIndex,\n issues: params.issues,\n validateLiteralModel:\n params.step.model !== undefined && !hasInterpolationSyntax(params.step.model),\n validateLiteralProvider:\n params.step.provider !== undefined && !hasInterpolationSyntax(params.step.provider),\n agentValidationCatalog: params.context.agentValidationCatalog,\n });\n const integrations = normalizeAgentIntegrations({\n integrations: params.step.integrations,\n sourceName: params.sourceName,\n stepIndex: params.stepIndex,\n issues: params.issues,\n integrationValidationContext: params.context.integrationValidationContext,\n });\n const templates = optionalAgentStepTemplates({\n prompt: promptTemplate,\n model: modelTemplate,\n provider: providerTemplate,\n thinking: thinkingTemplate,\n name: params.name,\n workingDirectory: params.workingDirectory,\n });\n\n return {\n ...params.stepBase,\n kind: 'agent',\n ...(params.step.harness === undefined ? {} : {harness: params.step.harness}),\n ...(params.step.model === undefined ? {} : {model: params.step.model}),\n ...(params.step.provider === undefined ? {} : {provider: params.step.provider}),\n prompt: params.step.prompt,\n ...(params.step.thinking === undefined ? {} : {thinking: params.step.thinking}),\n ...(params.step.tools === undefined ? {} : {tools: params.step.tools}),\n ...(integrations === undefined ? {} : {integrations}),\n ...(templates === undefined ? {} : {templates}),\n };\n}\n\nfunction validateAgentStep(params: {\n step: WorkflowDocumentStep;\n sourceName: string;\n stepIndex: number;\n issues: WorkflowModelValidationIssue[];\n validateLiteralModel: boolean;\n validateLiteralProvider: boolean;\n agentValidationCatalog: AgentValidationCatalog;\n}): void {\n validateHarnessThinking(params);\n validateHarnessTools(params);\n const providerId = params.step.provider;\n const harness = params.step.harness;\n const provider =\n providerId === undefined\n ? undefined\n : params.agentValidationCatalog.providers.find((entry) => entry.id === providerId);\n\n if (params.validateLiteralProvider && providerId !== undefined) {\n if (provider === undefined) {\n if (harness === undefined || harness === 'pi') return;\n params.issues.push(\n issue({\n code: 'invalid-provider',\n message: `Provider \"${providerId}\" is not supported.`,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'provider'],\n details: {provider: providerId},\n }),\n );\n return;\n }\n\n if (provider.support_status !== 'supported') {\n params.issues.push(\n issue({\n code: 'invalid-provider',\n message: `Provider \"${providerId}\" is not supported.`,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'provider'],\n details: {provider: providerId},\n }),\n );\n return;\n }\n\n if (harness === undefined) return;\n\n const descriptor = params.agentValidationCatalog.harnesses.find(\n (entry) => entry.id === harness,\n );\n if (!descriptor?.supported_provider_ids.includes(providerId)) {\n params.issues.push(\n issue({\n code: 'harness-provider-incompatible',\n message: `Harness \"${harness}\" does not support provider: ${providerId}. Supported providers: ${descriptor?.supported_provider_ids.join(', ') ?? ''}.`,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'provider'],\n details: {\n harness,\n provider: providerId,\n supportedProviders: descriptor?.supported_provider_ids ?? [],\n },\n }),\n );\n return;\n }\n }\n\n if (!params.validateLiteralModel || providerId === undefined || harness === undefined) return;\n if (provider === undefined || provider.support_status !== 'supported') return;\n\n const model = params.step.model;\n if (model === undefined) return;\n\n const descriptor = params.agentValidationCatalog.harnesses.find((entry) => entry.id === harness);\n const modelIds = descriptor?.model_ids_by_provider?.[providerId];\n if (modelIds === undefined || modelIds.includes(model)) return;\n\n params.issues.push(\n issue({\n code: 'invalid-model',\n message: `Agent model \"${model}\" is not available for harness \"${harness}\" and provider \"${providerId}\".`,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'model'],\n details: {harness, provider: providerId, model},\n }),\n );\n}\n\nfunction validateHarnessTools(params: {\n step: WorkflowDocumentStep;\n sourceName: string;\n stepIndex: number;\n issues: WorkflowModelValidationIssue[];\n agentValidationCatalog: AgentValidationCatalog;\n}): void {\n const {harness, tools} = params.step;\n if (tools === undefined) return;\n\n if (harness === undefined) {\n params.issues.push(\n issue({\n code: 'missing-harness-for-tools',\n message:\n 'Agent step tools require an explicit harness because tool names are harness-specific.',\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'tools'],\n details: {tools},\n }),\n );\n return;\n }\n\n const supportedTools =\n params.agentValidationCatalog.harnesses.find((entry) => entry.id === harness)\n ?.effective_tools ?? [];\n const supportedToolSet = new Set(supportedTools);\n\n tools.forEach((tool, toolIndex) => {\n if (supportedToolSet.has(tool)) return;\n\n params.issues.push(\n issue({\n code: 'harness-tool-incompatible',\n message: `Harness \"${harness}\" does not support tool: ${tool}. Supported tools: ${supportedTools.join(', ')}.`,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'tools', toolIndex],\n details: {harness, tool, supportedTools},\n }),\n );\n });\n}\n\nfunction validateHarnessThinking(params: {\n step: WorkflowDocumentStep;\n sourceName: string;\n stepIndex: number;\n issues: WorkflowModelValidationIssue[];\n agentValidationCatalog: AgentValidationCatalog;\n}): void {\n const {harness, thinking} = params.step;\n if (harness === undefined || thinking === undefined) return;\n // An interpolated level is only known when the step dispatches, so the agent\n // module checks it against the resolved harness there.\n if (hasInterpolationSyntax(thinking)) return;\n\n const supportedLevels =\n params.agentValidationCatalog.harnesses.find((entry) => entry.id === harness)\n ?.thinking_levels ?? [];\n if ((supportedLevels as readonly string[]).includes(thinking)) return;\n params.issues.push(\n issue({\n code: 'harness-thinking-incompatible',\n message: `Harness \"${harness}\" does not support thinking: ${thinking}. Supported levels: ${supportedLevels.join(', ')}.`,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'thinking'],\n details: {harness, thinking, supportedLevels},\n }),\n );\n}\nfunction normalizeRunner(params: {\n document: WorkflowDocument;\n job: WorkflowDocumentJob;\n sourceName: string;\n issues: WorkflowModelValidationIssue[];\n defaultRunnerLabels: readonly string[];\n}): {labels: readonly string[]; templates: readonly WorkflowFieldTemplate[]} {\n const rawRunner = params.job.runner ?? params.document.runner;\n if (rawRunner === undefined) {\n const runnerLabels = params.defaultRunnerLabels;\n validateRunnerLabels({...params, runnerLabels, allowEmpty: false});\n return {labels: runnerLabels, templates: []};\n }\n\n const runnerValues = typeof rawRunner === 'string' ? [rawRunner] : rawRunner;\n const literalLabels: string[] = [];\n const templates: WorkflowFieldTemplate[] = [];\n let templateValueCount = 0;\n for (const [index, value] of runnerValues.entries()) {\n const template = parseInterpolationField({\n field: 'job.runner',\n source: value,\n path: ['jobs', params.sourceName, 'runner', index],\n issues: params.issues,\n fillSite: 'execution-creation',\n });\n const hasTemplateSyntax = hasInterpolationSyntax(value);\n if (hasTemplateSyntax) templateValueCount += 1;\n if (template === undefined && !hasTemplateSyntax) {\n literalLabels.push(value);\n } else if (template !== undefined) {\n templates.push(template);\n }\n }\n\n const runnerLabels = canonicalizeLabels(literalLabels);\n validateRunnerLabels({\n ...params,\n runnerLabels,\n runnerLabelCount: runnerLabels.length + templates.length,\n allowEmpty: templateValueCount > 0,\n });\n\n return {labels: runnerLabels, templates};\n}\n\nfunction hasInterpolationSyntax(value: string): boolean {\n return value.includes('${{');\n}\n\nfunction validateRunnerLabels(params: {\n sourceName: string;\n issues: WorkflowModelValidationIssue[];\n runnerLabels: readonly string[];\n runnerLabelCount?: number;\n allowEmpty: boolean;\n}): void {\n const runnerLabels = params.runnerLabels;\n const runnerLabelCount = params.runnerLabelCount ?? runnerLabels.length;\n const invalid = findInvalidLabels(runnerLabels);\n\n if (invalid.length > 0) {\n params.issues.push(\n issue({\n code: 'invalid-runner-label',\n message: `Job \"${params.sourceName}\" has invalid runner label(s): ${invalid.join(', ')}. Labels must match ${RUNNER_LABEL_PATTERN} and be at most ${MAX_RUNNER_LABEL_LENGTH} chars.`,\n path: ['jobs', params.sourceName, 'runner'],\n details: {labels: invalid},\n }),\n );\n }\n\n if (runnerLabels.length === 0 && !params.allowEmpty) {\n params.issues.push(\n issue({\n code: 'missing-runner-label',\n message: `Job \"${params.sourceName}\" must declare at least one runner label. Set \"runner\" on the job or the workflow, or configure DEFINITION_DEFAULT_RUNNER_LABEL.`,\n path: ['jobs', params.sourceName, 'runner'],\n }),\n );\n }\n\n if (runnerLabelCount > MAX_RUNNER_LABELS) {\n params.issues.push(\n issue({\n code: 'too-many-runner-labels',\n message: `Job \"${params.sourceName}\" declares ${runnerLabelCount} runner labels; the maximum is ${MAX_RUNNER_LABELS}.`,\n path: ['jobs', params.sourceName, 'runner'],\n }),\n );\n }\n}\n\ntype WorkflowModelStepBaseFields = Pick<\n WorkflowModelStep,\n 'id' | 'key' | 'name' | 'workingDirectory' | 'outputs' | 'sourceLocation' | 'gate'\n>;\n\nfunction optionalRunStepTemplates(params: {\n command: WorkflowFieldTemplate | undefined;\n name: WorkflowFieldTemplate | undefined;\n workingDirectory: WorkflowFieldTemplate | undefined;\n env: WorkflowEnvTemplates | undefined;\n}):\n | {\n command?: WorkflowFieldTemplate;\n name?: WorkflowFieldTemplate;\n workingDirectory?: WorkflowFieldTemplate;\n env?: WorkflowEnvTemplates;\n }\n | undefined {\n if (\n params.command === undefined &&\n params.name === undefined &&\n params.workingDirectory === undefined &&\n params.env === undefined\n ) {\n return undefined;\n }\n\n return {\n ...(params.command === undefined ? {} : {command: params.command}),\n ...(params.name === undefined ? {} : {name: params.name}),\n ...(params.workingDirectory === undefined ? {} : {workingDirectory: params.workingDirectory}),\n ...(params.env === undefined ? {} : {env: params.env}),\n };\n}\n\nfunction optionalAgentStepTemplates(params: {\n prompt: WorkflowFieldTemplate | undefined;\n model: WorkflowFieldTemplate | undefined;\n provider: WorkflowFieldTemplate | undefined;\n thinking: WorkflowFieldTemplate | undefined;\n name: WorkflowFieldTemplate | undefined;\n workingDirectory: WorkflowFieldTemplate | undefined;\n}):\n | {\n prompt?: WorkflowFieldTemplate;\n model?: WorkflowFieldTemplate;\n provider?: WorkflowFieldTemplate;\n thinking?: WorkflowFieldTemplate;\n name?: WorkflowFieldTemplate;\n workingDirectory?: WorkflowFieldTemplate;\n }\n | undefined {\n if (\n params.prompt === undefined &&\n params.model === undefined &&\n params.provider === undefined &&\n params.thinking === undefined &&\n params.name === undefined &&\n params.workingDirectory === undefined\n ) {\n return undefined;\n }\n\n return {\n ...(params.prompt === undefined ? {} : {prompt: params.prompt}),\n ...(params.model === undefined ? {} : {model: params.model}),\n ...(params.provider === undefined ? {} : {provider: params.provider}),\n ...(params.thinking === undefined ? {} : {thinking: params.thinking}),\n ...(params.name === undefined ? {} : {name: params.name}),\n ...(params.workingDirectory === undefined ? {} : {workingDirectory: params.workingDirectory}),\n };\n}\n"],"names":["buildTypedRootsEnvironment","classifyShellCodePosition","hoistPlannedRunCommand","UnsafeRunInterpolationError","canonicalizeLabels","findInvalidLabels","MAX_RUNNER_LABEL_LENGTH","MAX_RUNNER_LABELS","RUNNER_LABEL_PATTERN","normalizeAgentIntegrations","normalizeEnv","normalizeIfCondition","normalizeCheckout","normalizeJobCheckout","normalizeJobListening","normalizeJobSuccess","normalizeNeeds","normalizeStepGate","normalizeStepOutputs","parseDurationMs","parseInterpolationField","stableId","unescapeLiteralName","validateLiteralName","issue","normalizeJobs","document","jobIdBySourceName","issues","stepSourceLocations","context","entries","Object","jobs","pending","Set","map","sourceName","modelsBySourceName","Map","jobOutputTypesBySourceName","issuesBySourceName","size","progressed","job","has","dependencySourceNames","needs","filter","dependency","some","model","normalizeJob","issuesForSourceName","undefined","set","delete","push","get","flatMap","existing","params","id","dependencies","normalizeJobDependencies","allowedJobReferences","directNeedSourceNames","upstreamJobs","upstreamJobTypeOverlays","directNeedJobs","directNeedJobTypeOverlays","upstreamJobsTypeOverlay","length","jobConditionTypeOverlay","stepFillSite","stepTypeOverlay","steps","step","outputs","normalizeJobSteps","jobId","workflowEnvKeys","keys","env","jobEnvKeys","fillSite","typeOverlay","runner","normalizeRunner","defaultRunnerLabels","checkout","jobEnv","path","success","source","condition","field","if","invalidCode","invalidMessage","normalizeJobOutputs","types","executionTimeoutMs","execution_timeout","listening","name","dynamicField","message","executionName","execution_name","kind","value","key","mode","labels","templates","runnerTemplates","outputTypes","dependencySourceName","dependencyId","previousStepOverlays","index","slice","allStepOverlays","overlays","overlay","create","hasStepOutputDeclarations","template","inferJobOutputType","segment","resultType","expression","isScalarExpressionType","code","details","output","type","usedStepIds","normalized","normalizeStep","allSteps","stepKey","stepId","existingIndex","indexes","stepIndex","currentStepOverlay","shouldBuildTypeOverlay","currentStep","conditionTypeOverlay","gate","previousStepKeys","candidate","sourceLocation","workingDirectory","working_directory","stepBase","run","normalizeRunStep","prompt","normalizeAgentStep","normalizeCheckoutStep","Error","normalizedCheckout","commandTemplate","stepEnv","addReevaluatingCommandWarnings","command","stepEnvKeys","optionalRunStepTemplates","envKeys","hoisted","segments","reservedNames","error","occurrence","occurrences","unsafeInterpolationWarningMessage","severity","partial","matches","workflowDataNames","bindings","binding","match","reevaluatingCommandWarningMessage","construct","regionLabel","single","double","arith","backtick","heredoc","escape","region","constructLabel","eval","let","arithmetic","awk","jq","sed","promptTemplate","modelTemplate","providerTemplate","provider","thinkingTemplate","thinking","validateAgentStep","validateLiteralModel","hasInterpolationSyntax","validateLiteralProvider","agentValidationCatalog","integrations","integrationValidationContext","optionalAgentStepTemplates","harness","tools","validateHarnessThinking","validateHarnessTools","providerId","providers","find","entry","support_status","descriptor","harnesses","supported_provider_ids","includes","join","supportedProviders","modelIds","model_ids_by_provider","supportedTools","effective_tools","supportedToolSet","forEach","tool","toolIndex","supportedLevels","thinking_levels","rawRunner","runnerLabels","validateRunnerLabels","allowEmpty","runnerValues","literalLabels","templateValueCount","hasTemplateSyntax","runnerLabelCount","invalid"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/core/workflow-model/normalize-jobs.ts"],"sourcesContent":["import type {AgentValidationCatalog} from '@shipfox/api-agent-dto/inter-module';\nimport {\n type AvailabilitySite,\n buildTypedRootsEnvironment,\n classifyShellCodePosition,\n type ExpressionType,\n type ExpressionTypeEnvironment,\n hoistPlannedRunCommand,\n type ShellReevaluatingConstruct,\n type UnsafeRunInterpolation,\n UnsafeRunInterpolationError,\n type WorkflowJobTypeOverlay,\n type WorkflowStepTypeOverlay,\n} from '@shipfox/expression';\nimport {\n canonicalizeLabels,\n findInvalidLabels,\n MAX_RUNNER_LABEL_LENGTH,\n MAX_RUNNER_LABELS,\n RUNNER_LABEL_PATTERN,\n} from '@shipfox/runner-labels';\nimport type {\n WorkflowDocument,\n WorkflowDocumentJob,\n WorkflowDocumentStep,\n} from '@shipfox/workflow-document';\nimport type {IntegrationValidationContext} from '../entities/integration-context.js';\nimport type {\n WorkflowEnvTemplates,\n WorkflowFieldTemplate,\n WorkflowModelAgentStep,\n WorkflowModelCheckoutStep,\n WorkflowModelJob,\n WorkflowModelRunStep,\n WorkflowModelStep,\n WorkflowModelStepCheckout,\n WorkflowOutputTemplates,\n WorkflowStepSourceLocationMap,\n} from '../entities/workflow-model.js';\nimport type {\n WorkflowModelValidationIssue,\n WorkflowModelValidationIssuePathSegment,\n} from './invalid-workflow-model-error.js';\nimport {normalizeAgentIntegrations} from './normalize-agent-integrations.js';\nimport {normalizeEnv} from './normalize-env.js';\nimport {normalizeIfCondition} from './normalize-if-condition.js';\nimport {normalizeCheckout, normalizeJobCheckout} from './normalize-job-checkout.js';\nimport {normalizeJobListening} from './normalize-job-listening.js';\nimport {normalizeJobSuccess} from './normalize-job-success.js';\nimport {normalizeNeeds} from './normalize-needs.js';\nimport {normalizeStepGate} from './normalize-step-gate.js';\nimport {normalizeStepOutputs} from './normalize-step-outputs.js';\nimport {parseDurationMs} from './parse-duration-ms.js';\nimport {parseInterpolationField} from './parse-interpolation-field.js';\nimport {stableId} from './stable-id.js';\nimport {unescapeLiteralName, validateLiteralName} from './validate-literal-name.js';\nimport {issue} from './validation-issue.js';\n\nexport interface NormalizeContext {\n readonly defaultRunnerLabels: readonly string[];\n readonly agentValidationCatalog: AgentValidationCatalog;\n readonly integrationValidationContext?: IntegrationValidationContext | undefined;\n}\n\nexport function normalizeJobs(\n document: WorkflowDocument,\n jobIdBySourceName: ReadonlyMap<string, string>,\n issues: WorkflowModelValidationIssue[],\n stepSourceLocations: WorkflowStepSourceLocationMap | undefined,\n context: NormalizeContext,\n): readonly WorkflowModelJob[] {\n const entries = Object.entries(document.jobs);\n const pending = new Set(entries.map(([sourceName]) => sourceName));\n const modelsBySourceName = new Map<string, WorkflowModelJob>();\n const jobOutputTypesBySourceName = new Map<string, Readonly<Record<string, ExpressionType>>>();\n const issuesBySourceName = new Map<string, WorkflowModelValidationIssue[]>();\n\n while (pending.size > 0) {\n let progressed = false;\n\n for (const [sourceName, job] of entries) {\n if (!pending.has(sourceName)) continue;\n\n const dependencySourceNames = normalizeNeeds(job.needs).filter((dependency) =>\n jobIdBySourceName.has(dependency),\n );\n if (dependencySourceNames.some((dependency) => pending.has(dependency))) continue;\n\n const model = normalizeJob({\n document,\n sourceName,\n job,\n jobIdBySourceName,\n issues: issuesForSourceName(issuesBySourceName, sourceName),\n stepSourceLocations,\n context,\n jobOutputTypesBySourceName,\n });\n if (model !== undefined) modelsBySourceName.set(sourceName, model);\n pending.delete(sourceName);\n progressed = true;\n }\n\n if (progressed) continue;\n\n for (const sourceName of pending) {\n const job = document.jobs[sourceName];\n if (job === undefined) continue;\n const model = normalizeJob({\n document,\n sourceName,\n job,\n jobIdBySourceName,\n issues: issuesForSourceName(issuesBySourceName, sourceName),\n stepSourceLocations,\n context,\n jobOutputTypesBySourceName,\n });\n if (model !== undefined) modelsBySourceName.set(sourceName, model);\n }\n break;\n }\n\n for (const [sourceName] of entries) {\n issues.push(...(issuesBySourceName.get(sourceName) ?? []));\n }\n\n return entries.flatMap(([sourceName]) => {\n const model = modelsBySourceName.get(sourceName);\n return model === undefined ? [] : [model];\n });\n}\n\nfunction issuesForSourceName(\n issuesBySourceName: Map<string, WorkflowModelValidationIssue[]>,\n sourceName: string,\n): WorkflowModelValidationIssue[] {\n const existing = issuesBySourceName.get(sourceName);\n if (existing !== undefined) return existing;\n\n const issues: WorkflowModelValidationIssue[] = [];\n issuesBySourceName.set(sourceName, issues);\n return issues;\n}\n\nfunction normalizeJob(params: {\n document: WorkflowDocument;\n sourceName: string;\n job: WorkflowDocumentJob;\n jobIdBySourceName: ReadonlyMap<string, string>;\n issues: WorkflowModelValidationIssue[];\n stepSourceLocations: WorkflowStepSourceLocationMap | undefined;\n context: NormalizeContext;\n jobOutputTypesBySourceName: Map<string, Readonly<Record<string, ExpressionType>>>;\n}): WorkflowModelJob | undefined {\n const id = params.jobIdBySourceName.get(params.sourceName);\n if (id === undefined) return undefined;\n\n const dependencies = normalizeJobDependencies({\n sourceName: params.sourceName,\n job: params.job,\n jobIdBySourceName: params.jobIdBySourceName,\n });\n const allowedJobReferences = directNeedSourceNames({\n sourceName: params.sourceName,\n job: params.job,\n jobIdBySourceName: params.jobIdBySourceName,\n });\n const upstreamJobs = upstreamJobTypeOverlays({\n allowedJobReferences,\n jobOutputTypesBySourceName: params.jobOutputTypesBySourceName,\n });\n const directNeedJobs = directNeedJobTypeOverlays({\n allowedJobReferences,\n jobOutputTypesBySourceName: params.jobOutputTypesBySourceName,\n });\n const upstreamJobsTypeOverlay =\n upstreamJobs.length === 0 ? undefined : buildTypedRootsEnvironment({jobs: upstreamJobs});\n const jobConditionTypeOverlay = buildTypedRootsEnvironment({\n jobs: directNeedJobs,\n needs: directNeedJobs,\n });\n // Step config can reference peer step outputs, which are completed at dispatch.\n const stepFillSite: AvailabilitySite = 'step-dispatch';\n const stepTypeOverlay = params.job.steps.some((step) => step.outputs !== undefined)\n ? {}\n : undefined;\n const steps = normalizeJobSteps({\n sourceName: params.sourceName,\n jobId: id,\n job: params.job,\n workflowEnvKeys: Object.keys(params.document.env ?? {}),\n jobEnvKeys: Object.keys(params.job.env ?? {}),\n issues: params.issues,\n stepSourceLocations: params.stepSourceLocations,\n fillSite: stepFillSite,\n allowedJobReferences,\n typeOverlay: stepTypeOverlay,\n upstreamJobs,\n directNeedJobs,\n context: params.context,\n });\n const runner = normalizeRunner({\n document: params.document,\n job: params.job,\n sourceName: params.sourceName,\n issues: params.issues,\n defaultRunnerLabels: params.context.defaultRunnerLabels,\n });\n const checkout = normalizeJobCheckout({\n checkout: params.job.checkout,\n });\n const jobEnv = normalizeEnv({\n env: params.job.env,\n path: ['jobs', params.sourceName, 'env'],\n issues: params.issues,\n allowedJobReferences,\n typeOverlay: upstreamJobsTypeOverlay,\n });\n const success = normalizeJobSuccess({\n source: params.job.success,\n sourceName: params.sourceName,\n issues: params.issues,\n allowedJobReferences,\n typeOverlay: upstreamJobsTypeOverlay,\n });\n const condition = normalizeIfCondition({\n field: 'job.if',\n source: params.job.if,\n path: ['jobs', params.sourceName, 'if'],\n invalidCode: 'invalid-job-if',\n invalidMessage: 'Job if must be a valid wrapped CEL boolean expression.',\n issues: params.issues,\n allowedJobReferences,\n typeOverlay: jobConditionTypeOverlay,\n });\n const outputs = normalizeJobOutputs({\n sourceName: params.sourceName,\n outputs: params.job.outputs,\n issues: params.issues,\n allowedJobReferences,\n steps: params.job.steps,\n upstreamJobs,\n });\n if (outputs?.types !== undefined) {\n params.jobOutputTypesBySourceName.set(params.sourceName, outputs.types);\n }\n const executionTimeoutMs = parseDurationMs({\n source: params.job.execution_timeout,\n path: ['jobs', params.sourceName, 'execution_timeout'],\n issues: params.issues,\n });\n const listening = normalizeJobListening({\n job: params.job,\n sourceName: params.sourceName,\n issues: params.issues,\n allowedJobReferences,\n });\n if (params.job.name !== undefined) {\n validateLiteralName({\n field: 'job.name',\n dynamicField: 'execution_name',\n source: params.job.name,\n path: ['jobs', params.sourceName, 'name'],\n message: 'Job name must be literal. Move runtime interpolation to execution_name.',\n issues: params.issues,\n });\n }\n const name = params.job.name === undefined ? undefined : unescapeLiteralName(params.job.name);\n const executionName =\n params.job.execution_name === undefined\n ? undefined\n : (parseInterpolationField({\n field: 'job.execution_name',\n source: params.job.execution_name,\n path: ['jobs', params.sourceName, 'execution_name'],\n issues: params.issues,\n fillSite: 'execution-creation',\n allowedJobReferences,\n typeOverlay: upstreamJobsTypeOverlay,\n }) ?? [{kind: 'literal' as const, value: params.job.execution_name}]);\n\n return {\n id,\n key: params.sourceName,\n mode: listening === undefined ? 'one_shot' : 'listening',\n runner: runner.labels,\n ...(runner.templates.length === 0 ? {} : {runnerTemplates: runner.templates}),\n checkout,\n ...(condition === undefined ? {} : {if: condition}),\n ...(success === undefined ? {} : {success}),\n ...(outputs === undefined ? {} : {outputs: outputs.templates}),\n ...(outputs?.types === undefined ? {} : {outputTypes: outputs.types}),\n ...(executionTimeoutMs === undefined ? {} : {executionTimeoutMs}),\n ...(listening === undefined ? {} : {listening}),\n ...(name === undefined ? {} : {name}),\n ...(executionName === undefined ? {} : {executionName}),\n ...jobEnv,\n dependencies,\n steps,\n };\n}\n\nfunction normalizeJobDependencies(params: {\n sourceName: string;\n job: WorkflowDocumentJob;\n jobIdBySourceName: ReadonlyMap<string, string>;\n}): readonly string[] {\n return normalizeNeeds(params.job.needs).flatMap((dependencySourceName) => {\n const dependencyId = params.jobIdBySourceName.get(dependencySourceName);\n if (dependencyId === undefined || dependencySourceName === params.sourceName) return [];\n return [dependencyId];\n });\n}\n\nfunction directNeedSourceNames(params: {\n sourceName: string;\n job: WorkflowDocumentJob;\n jobIdBySourceName: ReadonlyMap<string, string>;\n}): ReadonlySet<string> {\n return new Set(\n normalizeNeeds(params.job.needs).filter(\n (dependencySourceName) =>\n dependencySourceName !== params.sourceName &&\n params.jobIdBySourceName.has(dependencySourceName),\n ),\n );\n}\n\nfunction previousStepOverlays(\n steps: readonly WorkflowDocumentStep[],\n index: number,\n): readonly WorkflowStepTypeOverlay[] {\n return steps.slice(0, index).flatMap((step) => {\n if (step.key === undefined) return [];\n return [{key: step.key, ...(step.outputs === undefined ? {} : {outputs: step.outputs})}];\n });\n}\n\nfunction allStepOverlays(\n steps: readonly WorkflowDocumentStep[],\n): readonly WorkflowStepTypeOverlay[] {\n return previousStepOverlays(steps, steps.length);\n}\n\nfunction upstreamJobTypeOverlays(params: {\n allowedJobReferences: ReadonlySet<string>;\n jobOutputTypesBySourceName: ReadonlyMap<string, Readonly<Record<string, ExpressionType>>>;\n}): readonly WorkflowJobTypeOverlay[] {\n const overlays = [...params.allowedJobReferences].map((sourceName) => {\n const outputs = params.jobOutputTypesBySourceName.get(sourceName);\n return {key: sourceName, ...(outputs === undefined ? {} : {outputs})};\n });\n return overlays.some((overlay) => overlay.outputs !== undefined) ? overlays : [];\n}\n\nfunction directNeedJobTypeOverlays(params: {\n allowedJobReferences: ReadonlySet<string>;\n jobOutputTypesBySourceName: ReadonlyMap<string, Readonly<Record<string, ExpressionType>>>;\n}): readonly WorkflowJobTypeOverlay[] {\n return [...params.allowedJobReferences].map((sourceName) => {\n const outputs = params.jobOutputTypesBySourceName.get(sourceName);\n return {key: sourceName, ...(outputs === undefined ? {} : {outputs})};\n });\n}\n\nfunction normalizeJobOutputs(params: {\n sourceName: string;\n outputs: WorkflowDocumentJob['outputs'];\n issues: WorkflowModelValidationIssue[];\n allowedJobReferences: ReadonlySet<string>;\n steps: readonly WorkflowDocumentStep[];\n upstreamJobs: readonly WorkflowJobTypeOverlay[];\n}):\n | {templates: WorkflowOutputTemplates; types: Readonly<Record<string, ExpressionType>>}\n | undefined {\n if (params.outputs === undefined) return undefined;\n\n const templates: Record<string, WorkflowFieldTemplate> = Object.create(null) as Record<\n string,\n WorkflowFieldTemplate\n >;\n const types: Record<string, ExpressionType> = Object.create(null) as Record<\n string,\n ExpressionType\n >;\n const hasStepOutputDeclarations = params.steps.some((step) => step.outputs !== undefined);\n const typeOverlay =\n hasStepOutputDeclarations || params.upstreamJobs.length > 0\n ? buildTypedRootsEnvironment({\n ...(hasStepOutputDeclarations ? {steps: allStepOverlays(params.steps)} : {}),\n ...(params.upstreamJobs.length === 0 ? {} : {jobs: params.upstreamJobs}),\n })\n : undefined;\n\n for (const [key, source] of Object.entries(params.outputs)) {\n const template = parseInterpolationField({\n field: 'job.outputs',\n source,\n path: ['jobs', params.sourceName, 'outputs', key],\n issues: params.issues,\n fillSite: 'execution-resolution',\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay,\n }) ?? [{kind: 'literal' as const, value: source}];\n templates[key] = template;\n types[key] = inferJobOutputType(template);\n }\n\n return {templates, types};\n}\n\nfunction inferJobOutputType(template: WorkflowFieldTemplate): ExpressionType {\n if (template.length !== 1) return 'string';\n\n const [segment] = template;\n if (segment?.kind !== 'deferred') return 'string';\n\n const resultType = segment.expression.resultType;\n if (resultType === undefined) return 'string';\n return resultType;\n}\n\nfunction normalizeJobSteps(params: {\n sourceName: string;\n jobId: string;\n job: WorkflowDocumentJob;\n workflowEnvKeys: readonly string[];\n jobEnvKeys: readonly string[];\n issues: WorkflowModelValidationIssue[];\n stepSourceLocations: WorkflowStepSourceLocationMap | undefined;\n fillSite: AvailabilitySite;\n allowedJobReferences: ReadonlySet<string>;\n typeOverlay?: ExpressionTypeEnvironment | undefined;\n upstreamJobs: readonly WorkflowJobTypeOverlay[];\n directNeedJobs: readonly WorkflowJobTypeOverlay[];\n context: NormalizeContext;\n}): readonly WorkflowModelStep[] {\n const usedStepIds = new Map<string, number>();\n\n return params.job.steps.flatMap((step, index) => {\n const normalized = normalizeStep({\n step,\n index,\n sourceName: params.sourceName,\n jobId: params.jobId,\n allSteps: params.job.steps,\n workflowEnvKeys: params.workflowEnvKeys,\n jobEnvKeys: params.jobEnvKeys,\n usedStepIds,\n issues: params.issues,\n stepSourceLocations: params.stepSourceLocations,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay: params.typeOverlay,\n upstreamJobs: params.upstreamJobs,\n directNeedJobs: params.directNeedJobs,\n context: params.context,\n });\n return normalized === undefined ? [] : [normalized];\n });\n}\n\nfunction normalizeStep(params: {\n step: WorkflowDocumentStep;\n index: number;\n sourceName: string;\n jobId: string;\n allSteps: readonly WorkflowDocumentStep[];\n workflowEnvKeys: readonly string[];\n jobEnvKeys: readonly string[];\n usedStepIds: Map<string, number>;\n issues: WorkflowModelValidationIssue[];\n stepSourceLocations: WorkflowStepSourceLocationMap | undefined;\n fillSite: AvailabilitySite;\n allowedJobReferences: ReadonlySet<string>;\n typeOverlay?: ExpressionTypeEnvironment | undefined;\n upstreamJobs: readonly WorkflowJobTypeOverlay[];\n directNeedJobs: readonly WorkflowJobTypeOverlay[];\n context: NormalizeContext;\n}): WorkflowModelStep | undefined {\n const stepKey = params.step.key;\n const stepId =\n stepKey === undefined\n ? `${params.jobId}-step-${params.index + 1}`\n : `${params.jobId}-${stableId(stepKey)}`;\n const existingIndex = params.usedStepIds.get(stepId);\n\n if (existingIndex !== undefined) {\n params.issues.push(\n issue({\n code: 'duplicate-step-id',\n message: `Steps ${existingIndex} and ${params.index} in job \"${params.sourceName}\" resolve to the same stable id \"${stepId}\".`,\n path: ['jobs', params.sourceName, 'steps', params.index],\n details: {id: stepId, indexes: [existingIndex, params.index]},\n }),\n );\n } else {\n params.usedStepIds.set(stepId, params.index);\n }\n\n const outputs = normalizeStepOutputs({\n step: params.step,\n sourceName: params.sourceName,\n stepIndex: params.index,\n issues: params.issues,\n });\n const currentStepOverlay =\n stepKey === undefined\n ? undefined\n : ({\n key: stepKey,\n ...(outputs === undefined ? {} : {outputs}),\n } satisfies WorkflowStepTypeOverlay);\n const shouldBuildTypeOverlay = params.typeOverlay !== undefined || params.upstreamJobs.length > 0;\n const typeOverlay = !shouldBuildTypeOverlay\n ? undefined\n : buildTypedRootsEnvironment({\n steps: previousStepOverlays(params.allSteps, params.index),\n ...(currentStepOverlay === undefined ? {} : {currentStep: currentStepOverlay}),\n ...(params.upstreamJobs.length === 0 ? {} : {jobs: params.upstreamJobs}),\n });\n const conditionTypeOverlay = buildTypedRootsEnvironment({\n steps: previousStepOverlays(params.allSteps, params.index),\n ...(currentStepOverlay === undefined ? {} : {currentStep: currentStepOverlay}),\n jobs: params.directNeedJobs,\n needs: params.directNeedJobs,\n });\n\n const condition = normalizeIfCondition({\n field: 'step.if',\n source: params.step.if,\n path: ['jobs', params.sourceName, 'steps', params.index, 'if'],\n invalidCode: 'invalid-step-if',\n invalidMessage: 'Step if must be a valid wrapped CEL boolean expression.',\n issues: params.issues,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay: conditionTypeOverlay,\n });\n const gate = normalizeStepGate({\n step: params.step,\n sourceName: params.sourceName,\n stepIndex: params.index,\n stepId,\n previousStepKeys: new Set(\n params.allSteps\n .slice(0, params.index)\n .flatMap((candidate) => (candidate.key ? [candidate.key] : [])),\n ),\n issues: params.issues,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay,\n });\n const sourceLocation = params.stepSourceLocations?.get(params.sourceName)?.get(params.index);\n const name =\n params.step.name === undefined\n ? undefined\n : parseInterpolationField({\n field: 'step.name',\n source: params.step.name,\n path: ['jobs', params.sourceName, 'steps', params.index, 'name'],\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay,\n });\n const workingDirectory =\n params.step.working_directory === undefined\n ? undefined\n : parseInterpolationField({\n field: 'step.working_directory',\n source: params.step.working_directory,\n path: ['jobs', params.sourceName, 'steps', params.index, 'working_directory'],\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay,\n });\n const stepBase = {\n id: stepId,\n ...(stepKey === undefined ? {} : {key: stepKey}),\n ...(params.step.name === undefined ? {} : {name: params.step.name}),\n ...(params.step.working_directory === undefined\n ? {}\n : {workingDirectory: params.step.working_directory}),\n ...(outputs === undefined ? {} : {outputs}),\n ...(sourceLocation === undefined ? {} : {sourceLocation}),\n ...(condition === undefined ? {} : {if: condition}),\n ...(gate === undefined ? {} : {gate}),\n };\n\n if (params.step.run !== undefined) {\n return normalizeRunStep({\n step: params.step,\n stepBase,\n sourceName: params.sourceName,\n stepIndex: params.index,\n workflowEnvKeys: params.workflowEnvKeys,\n jobEnvKeys: params.jobEnvKeys,\n name,\n workingDirectory,\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay,\n });\n }\n\n if (params.step.prompt !== undefined) {\n return normalizeAgentStep({\n step: params.step,\n stepBase,\n sourceName: params.sourceName,\n stepIndex: params.index,\n name,\n workingDirectory,\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay,\n context: params.context,\n });\n }\n\n if (params.step.checkout !== undefined) {\n return normalizeCheckoutStep({\n step: params.step,\n stepBase,\n name,\n sourceName: params.sourceName,\n stepIndex: params.index,\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay,\n });\n }\n\n // Keep the model-step union honest if callers bypass the document parser.\n throw new Error(`Workflow step \"${stepId}\" is neither a run, agent, nor checkout step`);\n}\n\nfunction normalizeCheckoutStep(params: {\n step: WorkflowDocumentStep;\n stepBase: WorkflowModelStepBaseFields;\n name: WorkflowFieldTemplate | undefined;\n sourceName: string;\n stepIndex: number;\n issues: WorkflowModelValidationIssue[];\n fillSite: AvailabilitySite;\n allowedJobReferences: ReadonlySet<string>;\n typeOverlay?: ExpressionTypeEnvironment | undefined;\n}): WorkflowModelCheckoutStep {\n const checkout = params.step.checkout;\n if (checkout === undefined) {\n throw new Error('Checkout step normalization requires checkout settings');\n }\n\n const normalizedCheckout: WorkflowModelStepCheckout = normalizeCheckout({\n checkout,\n issues: params.issues,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'checkout'],\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay: params.typeOverlay,\n });\n\n return {\n ...params.stepBase,\n kind: 'checkout',\n checkout: normalizedCheckout,\n ...(params.name === undefined ? {} : {templates: {name: params.name}}),\n };\n}\n\nfunction normalizeRunStep(params: {\n step: WorkflowDocumentStep;\n stepBase: WorkflowModelStepBaseFields;\n sourceName: string;\n stepIndex: number;\n workflowEnvKeys: readonly string[];\n jobEnvKeys: readonly string[];\n name: WorkflowFieldTemplate | undefined;\n workingDirectory: WorkflowFieldTemplate | undefined;\n issues: WorkflowModelValidationIssue[];\n fillSite: AvailabilitySite;\n allowedJobReferences: ReadonlySet<string>;\n typeOverlay?: ExpressionTypeEnvironment | undefined;\n}): WorkflowModelRunStep {\n if (params.step.run === undefined) {\n throw new Error('Run step normalization requires a run command');\n }\n\n const commandTemplate = parseInterpolationField({\n field: 'run',\n source: params.step.run,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'run'],\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay: params.typeOverlay,\n });\n const stepEnv = normalizeEnv({\n env: params.step.env,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'env'],\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay: params.typeOverlay,\n });\n addReevaluatingCommandWarnings({\n command: commandTemplate,\n source: params.step.run,\n workflowEnvKeys: params.workflowEnvKeys,\n jobEnvKeys: params.jobEnvKeys,\n stepEnvKeys: Object.keys(params.step.env ?? {}),\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'run'],\n issues: params.issues,\n });\n const templates = optionalRunStepTemplates({\n command: commandTemplate,\n name: params.name,\n workingDirectory: params.workingDirectory,\n env: stepEnv.templates?.env,\n });\n\n return {\n ...params.stepBase,\n kind: 'run',\n command: {kind: 'shell', value: params.step.run},\n ...(stepEnv.env === undefined ? {} : {env: stepEnv.env}),\n ...(templates === undefined ? {} : {templates}),\n };\n}\n\nfunction addReevaluatingCommandWarnings(params: {\n command: WorkflowFieldTemplate | undefined;\n source: string;\n workflowEnvKeys: readonly string[];\n jobEnvKeys: readonly string[];\n stepEnvKeys: readonly string[];\n path: readonly WorkflowModelValidationIssuePathSegment[];\n issues: WorkflowModelValidationIssue[];\n}): void {\n const envKeys = new Set([...params.workflowEnvKeys, ...params.jobEnvKeys, ...params.stepEnvKeys]);\n let hoisted: ReturnType<typeof hoistPlannedRunCommand>;\n\n try {\n hoisted = hoistPlannedRunCommand({\n field: {\n segments: params.command ?? [{kind: 'literal', value: params.source}],\n },\n reservedNames: envKeys,\n });\n } catch (error) {\n if (!(error instanceof UnsafeRunInterpolationError)) return;\n\n for (const occurrence of error.occurrences) {\n params.issues.push(\n issue({\n code: 're-evaluating-command',\n message: unsafeInterpolationWarningMessage(occurrence),\n path: params.path,\n severity: 'warning',\n }),\n );\n }\n\n if (error.partial === undefined) return;\n hoisted = error.partial;\n }\n\n try {\n const matches = classifyShellCodePosition({\n command: hoisted.command,\n workflowDataNames: [...envKeys, ...hoisted.bindings.map((binding) => binding.name)],\n }).matches;\n\n for (const match of matches) {\n params.issues.push(\n issue({\n code: 're-evaluating-command',\n message: reevaluatingCommandWarningMessage(match.construct, match.name),\n path: params.path,\n severity: 'warning',\n }),\n );\n }\n } catch {\n return;\n }\n}\n\nfunction unsafeInterpolationWarningMessage(error: UnsafeRunInterpolation): string {\n const regionLabel = {\n single: 'single-quoted shell text',\n double: 'double-quoted shell text',\n 'dollar-single': 'ANSI-C shell text',\n 'dollar-double': 'dollar-double-quoted shell text',\n 'paren-sub': 'command substitution',\n arith: 'shell arithmetic',\n backtick: 'backtick substitution',\n 'param-brace': 'shell parameter expansion',\n heredoc: 'a heredoc',\n 'line-comment': 'a shell comment',\n escape: 'a shell escape',\n }[error.region];\n\n return `Value \"${error.source}\" is inside ${regionLabel} and will be re-executed as code. Hoisting cannot protect it; move the interpolation to a normal quoted argument instead.`;\n}\n\nfunction reevaluatingCommandWarningMessage(\n construct: ShellReevaluatingConstruct,\n name: string,\n): string {\n const constructLabel = {\n eval: 'eval',\n 'sh-c': 'sh -c',\n 'bash-c': 'bash -c',\n source: 'source',\n let: 'let',\n 'declare-i': 'declare -i',\n arithmetic: 'shell arithmetic',\n awk: 'awk',\n jq: 'jq',\n sed: 'sed',\n 'xargs-sh-c': 'xargs sh -c',\n }[construct];\n\n return `Value \"$${name}\" is passed to ${constructLabel} and re-executed as code. Hoisting cannot protect it; pass the value to a fixed program instead.`;\n}\n\nfunction normalizeAgentStep(params: {\n step: WorkflowDocumentStep;\n stepBase: WorkflowModelStepBaseFields;\n sourceName: string;\n stepIndex: number;\n name: WorkflowFieldTemplate | undefined;\n workingDirectory: WorkflowFieldTemplate | undefined;\n issues: WorkflowModelValidationIssue[];\n fillSite: AvailabilitySite;\n allowedJobReferences: ReadonlySet<string>;\n typeOverlay?: ExpressionTypeEnvironment | undefined;\n context: NormalizeContext;\n}): WorkflowModelAgentStep {\n if (params.step.prompt === undefined) {\n throw new Error('Agent step normalization requires a prompt');\n }\n\n const promptTemplate = parseInterpolationField({\n field: 'agent.prompt',\n source: params.step.prompt,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'prompt'],\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay: params.typeOverlay,\n });\n const modelTemplate =\n params.step.model === undefined\n ? undefined\n : parseInterpolationField({\n field: 'agent.model',\n source: params.step.model,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'model'],\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay: params.typeOverlay,\n });\n const providerTemplate =\n params.step.provider === undefined\n ? undefined\n : parseInterpolationField({\n field: 'agent.provider',\n source: params.step.provider,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'provider'],\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay: params.typeOverlay,\n });\n const thinkingTemplate =\n params.step.thinking === undefined\n ? undefined\n : parseInterpolationField({\n field: 'agent.thinking',\n source: params.step.thinking,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'thinking'],\n issues: params.issues,\n fillSite: params.fillSite,\n allowedJobReferences: params.allowedJobReferences,\n typeOverlay: params.typeOverlay,\n });\n validateAgentStep({\n step: params.step,\n sourceName: params.sourceName,\n stepIndex: params.stepIndex,\n issues: params.issues,\n validateLiteralModel:\n params.step.model !== undefined && !hasInterpolationSyntax(params.step.model),\n validateLiteralProvider:\n params.step.provider !== undefined && !hasInterpolationSyntax(params.step.provider),\n agentValidationCatalog: params.context.agentValidationCatalog,\n });\n const integrations = normalizeAgentIntegrations({\n integrations: params.step.integrations,\n sourceName: params.sourceName,\n stepIndex: params.stepIndex,\n issues: params.issues,\n integrationValidationContext: params.context.integrationValidationContext,\n });\n const templates = optionalAgentStepTemplates({\n prompt: promptTemplate,\n model: modelTemplate,\n provider: providerTemplate,\n thinking: thinkingTemplate,\n name: params.name,\n workingDirectory: params.workingDirectory,\n });\n\n return {\n ...params.stepBase,\n kind: 'agent',\n ...(params.step.harness === undefined ? {} : {harness: params.step.harness}),\n ...(params.step.model === undefined ? {} : {model: params.step.model}),\n ...(params.step.provider === undefined ? {} : {provider: params.step.provider}),\n prompt: params.step.prompt,\n ...(params.step.thinking === undefined ? {} : {thinking: params.step.thinking}),\n ...(params.step.tools === undefined ? {} : {tools: params.step.tools}),\n ...(integrations === undefined ? {} : {integrations}),\n ...(templates === undefined ? {} : {templates}),\n };\n}\n\nfunction validateAgentStep(params: {\n step: WorkflowDocumentStep;\n sourceName: string;\n stepIndex: number;\n issues: WorkflowModelValidationIssue[];\n validateLiteralModel: boolean;\n validateLiteralProvider: boolean;\n agentValidationCatalog: AgentValidationCatalog;\n}): void {\n validateHarnessThinking(params);\n validateHarnessTools(params);\n const providerId = params.step.provider;\n const harness = params.step.harness;\n const provider =\n providerId === undefined\n ? undefined\n : params.agentValidationCatalog.providers.find((entry) => entry.id === providerId);\n\n if (params.validateLiteralProvider && providerId !== undefined) {\n if (provider === undefined) {\n if (harness === undefined || harness === 'pi') return;\n params.issues.push(\n issue({\n code: 'invalid-provider',\n message: `Provider \"${providerId}\" is not supported.`,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'provider'],\n details: {provider: providerId},\n }),\n );\n return;\n }\n\n if (provider.support_status !== 'supported') {\n params.issues.push(\n issue({\n code: 'invalid-provider',\n message: `Provider \"${providerId}\" is not supported.`,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'provider'],\n details: {provider: providerId},\n }),\n );\n return;\n }\n\n if (harness === undefined) return;\n\n const descriptor = params.agentValidationCatalog.harnesses.find(\n (entry) => entry.id === harness,\n );\n if (!descriptor?.supported_provider_ids.includes(providerId)) {\n params.issues.push(\n issue({\n code: 'harness-provider-incompatible',\n message: `Harness \"${harness}\" does not support provider: ${providerId}. Supported providers: ${descriptor?.supported_provider_ids.join(', ') ?? ''}.`,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'provider'],\n details: {\n harness,\n provider: providerId,\n supportedProviders: descriptor?.supported_provider_ids ?? [],\n },\n }),\n );\n return;\n }\n }\n\n if (!params.validateLiteralModel || providerId === undefined || harness === undefined) return;\n if (provider === undefined || provider.support_status !== 'supported') return;\n\n const model = params.step.model;\n if (model === undefined) return;\n\n const descriptor = params.agentValidationCatalog.harnesses.find((entry) => entry.id === harness);\n const modelIds = descriptor?.model_ids_by_provider?.[providerId];\n if (modelIds === undefined || modelIds.includes(model)) return;\n\n params.issues.push(\n issue({\n code: 'invalid-model',\n message: `Agent model \"${model}\" is not available for harness \"${harness}\" and provider \"${providerId}\".`,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'model'],\n details: {harness, provider: providerId, model},\n }),\n );\n}\n\nfunction validateHarnessTools(params: {\n step: WorkflowDocumentStep;\n sourceName: string;\n stepIndex: number;\n issues: WorkflowModelValidationIssue[];\n agentValidationCatalog: AgentValidationCatalog;\n}): void {\n const {harness, tools} = params.step;\n if (tools === undefined) return;\n\n if (harness === undefined) {\n params.issues.push(\n issue({\n code: 'missing-harness-for-tools',\n message:\n 'Agent step tools require an explicit harness because tool names are harness-specific.',\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'tools'],\n details: {tools},\n }),\n );\n return;\n }\n\n const supportedTools =\n params.agentValidationCatalog.harnesses.find((entry) => entry.id === harness)\n ?.effective_tools ?? [];\n const supportedToolSet = new Set(supportedTools);\n\n tools.forEach((tool, toolIndex) => {\n if (supportedToolSet.has(tool)) return;\n\n params.issues.push(\n issue({\n code: 'harness-tool-incompatible',\n message: `Harness \"${harness}\" does not support tool: ${tool}. Supported tools: ${supportedTools.join(', ')}.`,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'tools', toolIndex],\n details: {harness, tool, supportedTools},\n }),\n );\n });\n}\n\nfunction validateHarnessThinking(params: {\n step: WorkflowDocumentStep;\n sourceName: string;\n stepIndex: number;\n issues: WorkflowModelValidationIssue[];\n agentValidationCatalog: AgentValidationCatalog;\n}): void {\n const {harness, thinking} = params.step;\n if (harness === undefined || thinking === undefined) return;\n // An interpolated level is only known when the step dispatches, so the agent\n // module checks it against the resolved harness there.\n if (hasInterpolationSyntax(thinking)) return;\n\n const supportedLevels =\n params.agentValidationCatalog.harnesses.find((entry) => entry.id === harness)\n ?.thinking_levels ?? [];\n if ((supportedLevels as readonly string[]).includes(thinking)) return;\n params.issues.push(\n issue({\n code: 'harness-thinking-incompatible',\n message: `Harness \"${harness}\" does not support thinking: ${thinking}. Supported levels: ${supportedLevels.join(', ')}.`,\n path: ['jobs', params.sourceName, 'steps', params.stepIndex, 'thinking'],\n details: {harness, thinking, supportedLevels},\n }),\n );\n}\nfunction normalizeRunner(params: {\n document: WorkflowDocument;\n job: WorkflowDocumentJob;\n sourceName: string;\n issues: WorkflowModelValidationIssue[];\n defaultRunnerLabels: readonly string[];\n}): {labels: readonly string[]; templates: readonly WorkflowFieldTemplate[]} {\n const rawRunner = params.job.runner ?? params.document.runner;\n if (rawRunner === undefined) {\n const runnerLabels = params.defaultRunnerLabels;\n validateRunnerLabels({...params, runnerLabels, allowEmpty: false});\n return {labels: runnerLabels, templates: []};\n }\n\n const runnerValues = typeof rawRunner === 'string' ? [rawRunner] : rawRunner;\n const literalLabels: string[] = [];\n const templates: WorkflowFieldTemplate[] = [];\n let templateValueCount = 0;\n for (const [index, value] of runnerValues.entries()) {\n const template = parseInterpolationField({\n field: 'job.runner',\n source: value,\n path: ['jobs', params.sourceName, 'runner', index],\n issues: params.issues,\n fillSite: 'execution-creation',\n });\n const hasTemplateSyntax = hasInterpolationSyntax(value);\n if (hasTemplateSyntax) templateValueCount += 1;\n if (template === undefined && !hasTemplateSyntax) {\n literalLabels.push(value);\n } else if (template !== undefined) {\n templates.push(template);\n }\n }\n\n const runnerLabels = canonicalizeLabels(literalLabels);\n validateRunnerLabels({\n ...params,\n runnerLabels,\n runnerLabelCount: runnerLabels.length + templates.length,\n allowEmpty: templateValueCount > 0,\n });\n\n return {labels: runnerLabels, templates};\n}\n\nfunction hasInterpolationSyntax(value: string): boolean {\n return value.includes('${{');\n}\n\nfunction validateRunnerLabels(params: {\n sourceName: string;\n issues: WorkflowModelValidationIssue[];\n runnerLabels: readonly string[];\n runnerLabelCount?: number;\n allowEmpty: boolean;\n}): void {\n const runnerLabels = params.runnerLabels;\n const runnerLabelCount = params.runnerLabelCount ?? runnerLabels.length;\n const invalid = findInvalidLabels(runnerLabels);\n\n if (invalid.length > 0) {\n params.issues.push(\n issue({\n code: 'invalid-runner-label',\n message: `Job \"${params.sourceName}\" has invalid runner label(s): ${invalid.join(', ')}. Labels must match ${RUNNER_LABEL_PATTERN} and be at most ${MAX_RUNNER_LABEL_LENGTH} chars.`,\n path: ['jobs', params.sourceName, 'runner'],\n details: {labels: invalid},\n }),\n );\n }\n\n if (runnerLabels.length === 0 && !params.allowEmpty) {\n params.issues.push(\n issue({\n code: 'missing-runner-label',\n message: `Job \"${params.sourceName}\" must declare at least one runner label. Set \"runner\" on the job or the workflow, or configure DEFINITION_DEFAULT_RUNNER_LABEL.`,\n path: ['jobs', params.sourceName, 'runner'],\n }),\n );\n }\n\n if (runnerLabelCount > MAX_RUNNER_LABELS) {\n params.issues.push(\n issue({\n code: 'too-many-runner-labels',\n message: `Job \"${params.sourceName}\" declares ${runnerLabelCount} runner labels; the maximum is ${MAX_RUNNER_LABELS}.`,\n path: ['jobs', params.sourceName, 'runner'],\n }),\n );\n }\n}\n\ntype WorkflowModelStepBaseFields = Pick<\n WorkflowModelStep,\n 'id' | 'key' | 'name' | 'workingDirectory' | 'outputs' | 'sourceLocation' | 'gate'\n>;\n\nfunction optionalRunStepTemplates(params: {\n command: WorkflowFieldTemplate | undefined;\n name: WorkflowFieldTemplate | undefined;\n workingDirectory: WorkflowFieldTemplate | undefined;\n env: WorkflowEnvTemplates | undefined;\n}):\n | {\n command?: WorkflowFieldTemplate;\n name?: WorkflowFieldTemplate;\n workingDirectory?: WorkflowFieldTemplate;\n env?: WorkflowEnvTemplates;\n }\n | undefined {\n if (\n params.command === undefined &&\n params.name === undefined &&\n params.workingDirectory === undefined &&\n params.env === undefined\n ) {\n return undefined;\n }\n\n return {\n ...(params.command === undefined ? {} : {command: params.command}),\n ...(params.name === undefined ? {} : {name: params.name}),\n ...(params.workingDirectory === undefined ? {} : {workingDirectory: params.workingDirectory}),\n ...(params.env === undefined ? {} : {env: params.env}),\n };\n}\n\nfunction optionalAgentStepTemplates(params: {\n prompt: WorkflowFieldTemplate | undefined;\n model: WorkflowFieldTemplate | undefined;\n provider: WorkflowFieldTemplate | undefined;\n thinking: WorkflowFieldTemplate | undefined;\n name: WorkflowFieldTemplate | undefined;\n workingDirectory: WorkflowFieldTemplate | undefined;\n}):\n | {\n prompt?: WorkflowFieldTemplate;\n model?: WorkflowFieldTemplate;\n provider?: WorkflowFieldTemplate;\n thinking?: WorkflowFieldTemplate;\n name?: WorkflowFieldTemplate;\n workingDirectory?: WorkflowFieldTemplate;\n }\n | undefined {\n if (\n params.prompt === undefined &&\n params.model === undefined &&\n params.provider === undefined &&\n params.thinking === undefined &&\n params.name === undefined &&\n params.workingDirectory === undefined\n ) {\n return undefined;\n }\n\n return {\n ...(params.prompt === undefined ? {} : {prompt: params.prompt}),\n ...(params.model === undefined ? {} : {model: params.model}),\n ...(params.provider === undefined ? {} : {provider: params.provider}),\n ...(params.thinking === undefined ? {} : {thinking: params.thinking}),\n ...(params.name === undefined ? {} : {name: params.name}),\n ...(params.workingDirectory === undefined ? {} : {workingDirectory: params.workingDirectory}),\n };\n}\n"],"names":["buildTypedRootsEnvironment","classifyShellCodePosition","hoistPlannedRunCommand","UnsafeRunInterpolationError","canonicalizeLabels","findInvalidLabels","MAX_RUNNER_LABEL_LENGTH","MAX_RUNNER_LABELS","RUNNER_LABEL_PATTERN","normalizeAgentIntegrations","normalizeEnv","normalizeIfCondition","normalizeCheckout","normalizeJobCheckout","normalizeJobListening","normalizeJobSuccess","normalizeNeeds","normalizeStepGate","normalizeStepOutputs","parseDurationMs","parseInterpolationField","stableId","unescapeLiteralName","validateLiteralName","issue","normalizeJobs","document","jobIdBySourceName","issues","stepSourceLocations","context","entries","Object","jobs","pending","Set","map","sourceName","modelsBySourceName","Map","jobOutputTypesBySourceName","issuesBySourceName","size","progressed","job","has","dependencySourceNames","needs","filter","dependency","some","model","normalizeJob","issuesForSourceName","undefined","set","delete","push","get","flatMap","existing","params","id","dependencies","normalizeJobDependencies","allowedJobReferences","directNeedSourceNames","upstreamJobs","upstreamJobTypeOverlays","directNeedJobs","directNeedJobTypeOverlays","upstreamJobsTypeOverlay","length","jobConditionTypeOverlay","stepFillSite","stepTypeOverlay","steps","step","outputs","normalizeJobSteps","jobId","workflowEnvKeys","keys","env","jobEnvKeys","fillSite","typeOverlay","runner","normalizeRunner","defaultRunnerLabels","checkout","jobEnv","path","success","source","condition","field","if","invalidCode","invalidMessage","normalizeJobOutputs","types","executionTimeoutMs","execution_timeout","listening","name","dynamicField","message","executionName","execution_name","kind","value","key","mode","labels","templates","runnerTemplates","outputTypes","dependencySourceName","dependencyId","previousStepOverlays","index","slice","allStepOverlays","overlays","overlay","create","hasStepOutputDeclarations","template","inferJobOutputType","segment","resultType","expression","usedStepIds","normalized","normalizeStep","allSteps","stepKey","stepId","existingIndex","code","details","indexes","stepIndex","currentStepOverlay","shouldBuildTypeOverlay","currentStep","conditionTypeOverlay","gate","previousStepKeys","candidate","sourceLocation","workingDirectory","working_directory","stepBase","run","normalizeRunStep","prompt","normalizeAgentStep","normalizeCheckoutStep","Error","normalizedCheckout","commandTemplate","stepEnv","addReevaluatingCommandWarnings","command","stepEnvKeys","optionalRunStepTemplates","envKeys","hoisted","segments","reservedNames","error","occurrence","occurrences","unsafeInterpolationWarningMessage","severity","partial","matches","workflowDataNames","bindings","binding","match","reevaluatingCommandWarningMessage","construct","regionLabel","single","double","arith","backtick","heredoc","escape","region","constructLabel","eval","let","arithmetic","awk","jq","sed","promptTemplate","modelTemplate","providerTemplate","provider","thinkingTemplate","thinking","validateAgentStep","validateLiteralModel","hasInterpolationSyntax","validateLiteralProvider","agentValidationCatalog","integrations","integrationValidationContext","optionalAgentStepTemplates","harness","tools","validateHarnessThinking","validateHarnessTools","providerId","providers","find","entry","support_status","descriptor","harnesses","supported_provider_ids","includes","join","supportedProviders","modelIds","model_ids_by_provider","supportedTools","effective_tools","supportedToolSet","forEach","tool","toolIndex","supportedLevels","thinking_levels","rawRunner","runnerLabels","validateRunnerLabels","allowEmpty","runnerValues","literalLabels","templateValueCount","hasTemplateSyntax","runnerLabelCount","invalid"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"invalid-workflow-yaml-error.d.ts","sourceRoot":"","sources":["../../../src/core/workflow-yaml/invalid-workflow-yaml-error.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,4BAA4B,0BAA0B,CAAC;AAEpE,MAAM,MAAM,yBAAyB,GAAG,QAAQ,GAAG,iBAAiB,CAAC;AAErE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,wBAAyB,SAAQ,KAAK;IAK/C,QAAQ,CAAC,MAAM,EAAE,yBAAyB;IAJ5C,QAAQ,CAAC,IAAI,2BAAgC;IAC7C,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,GAAG,SAAS,CAAC;gBAGzC,MAAM,EAAE,yBAAyB,EAC1C,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAA;KAAM;CAM/E"}
1
+ {"version":3,"file":"invalid-workflow-yaml-error.d.ts","sourceRoot":"","sources":["../../../src/core/workflow-yaml/invalid-workflow-yaml-error.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,4BAA4B,0BAA0B,CAAC;AAEpE,MAAM,MAAM,yBAAyB,GAAG,QAAQ,GAAG,iBAAiB,CAAC;AAErE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,wBAAyB,SAAQ,KAAK;IAK/C,QAAQ,CAAC,MAAM,EAAE,yBAAyB;IAJ5C,QAAQ,CAAC,IAAI,2BAAgC;IAC7C,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAEpD,YACW,MAAM,EAAE,yBAAyB,EAC1C,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAA;KAAM,EAK7E;CACF"}