@studio-foundation/engine 0.4.0-beta → 0.6.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 (90) hide show
  1. package/README.md +1 -1
  2. package/dist/__tests__/engine.script-stage.test.js +13 -32
  3. package/dist/__tests__/engine.script-stage.test.js.map +1 -1
  4. package/dist/engine.d.ts +2 -0
  5. package/dist/engine.d.ts.map +1 -1
  6. package/dist/engine.js +139 -1
  7. package/dist/engine.js.map +1 -1
  8. package/dist/events.d.ts +50 -0
  9. package/dist/events.d.ts.map +1 -1
  10. package/dist/events.js.map +1 -1
  11. package/dist/index.d.ts +7 -1
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +5 -0
  14. package/dist/index.js.map +1 -1
  15. package/dist/pipeline/call-input.d.ts +4 -0
  16. package/dist/pipeline/call-input.d.ts.map +1 -0
  17. package/dist/pipeline/call-input.js +28 -0
  18. package/dist/pipeline/call-input.js.map +1 -0
  19. package/dist/pipeline/call-orchestrator.d.ts +21 -0
  20. package/dist/pipeline/call-orchestrator.d.ts.map +1 -0
  21. package/dist/pipeline/call-orchestrator.js +127 -0
  22. package/dist/pipeline/call-orchestrator.js.map +1 -0
  23. package/dist/pipeline/condition-evaluator.d.ts +12 -0
  24. package/dist/pipeline/condition-evaluator.d.ts.map +1 -1
  25. package/dist/pipeline/condition-evaluator.js +27 -9
  26. package/dist/pipeline/condition-evaluator.js.map +1 -1
  27. package/dist/pipeline/context-propagation.d.ts +1 -0
  28. package/dist/pipeline/context-propagation.d.ts.map +1 -1
  29. package/dist/pipeline/context-propagation.js +18 -0
  30. package/dist/pipeline/context-propagation.js.map +1 -1
  31. package/dist/pipeline/contract-loader.d.ts.map +1 -1
  32. package/dist/pipeline/contract-loader.js +67 -0
  33. package/dist/pipeline/contract-loader.js.map +1 -1
  34. package/dist/pipeline/external-validator.d.ts +3 -0
  35. package/dist/pipeline/external-validator.d.ts.map +1 -0
  36. package/dist/pipeline/external-validator.js +65 -0
  37. package/dist/pipeline/external-validator.js.map +1 -0
  38. package/dist/pipeline/external-validator.test.d.ts +2 -0
  39. package/dist/pipeline/external-validator.test.d.ts.map +1 -0
  40. package/dist/pipeline/external-validator.test.js +40 -0
  41. package/dist/pipeline/external-validator.test.js.map +1 -0
  42. package/dist/pipeline/loader.d.ts.map +1 -1
  43. package/dist/pipeline/loader.js +158 -1
  44. package/dist/pipeline/loader.js.map +1 -1
  45. package/dist/pipeline/loader.test.js +30 -0
  46. package/dist/pipeline/loader.test.js.map +1 -1
  47. package/dist/pipeline/map-input.d.ts +13 -0
  48. package/dist/pipeline/map-input.d.ts.map +1 -0
  49. package/dist/pipeline/map-input.js +80 -0
  50. package/dist/pipeline/map-input.js.map +1 -0
  51. package/dist/pipeline/map-item-cache.d.ts +47 -0
  52. package/dist/pipeline/map-item-cache.d.ts.map +1 -0
  53. package/dist/pipeline/map-item-cache.js +0 -0
  54. package/dist/pipeline/map-item-cache.js.map +1 -0
  55. package/dist/pipeline/map-orchestrator.d.ts +42 -0
  56. package/dist/pipeline/map-orchestrator.d.ts.map +1 -0
  57. package/dist/pipeline/map-orchestrator.js +283 -0
  58. package/dist/pipeline/map-orchestrator.js.map +1 -0
  59. package/dist/pipeline/output-checker.d.ts +3 -0
  60. package/dist/pipeline/output-checker.d.ts.map +1 -0
  61. package/dist/pipeline/output-checker.js +40 -0
  62. package/dist/pipeline/output-checker.js.map +1 -0
  63. package/dist/pipeline/output-checker.test.d.ts +2 -0
  64. package/dist/pipeline/output-checker.test.d.ts.map +1 -0
  65. package/dist/pipeline/output-checker.test.js +62 -0
  66. package/dist/pipeline/output-checker.test.js.map +1 -0
  67. package/dist/pipeline/stage-executor.d.ts.map +1 -1
  68. package/dist/pipeline/stage-executor.js +48 -9
  69. package/dist/pipeline/stage-executor.js.map +1 -1
  70. package/dist/pipeline/stage-resolver.js +1 -1
  71. package/dist/pipeline/stage-resolver.js.map +1 -1
  72. package/dist/pipeline/strict-fields.d.ts +20 -0
  73. package/dist/pipeline/strict-fields.d.ts.map +1 -0
  74. package/dist/pipeline/strict-fields.js +62 -0
  75. package/dist/pipeline/strict-fields.js.map +1 -0
  76. package/dist/pipeline/task-input.d.ts +14 -0
  77. package/dist/pipeline/task-input.d.ts.map +1 -0
  78. package/dist/pipeline/task-input.js +22 -0
  79. package/dist/pipeline/task-input.js.map +1 -0
  80. package/dist/pipeline/task-input.test.d.ts +2 -0
  81. package/dist/pipeline/task-input.test.d.ts.map +1 -0
  82. package/dist/pipeline/task-input.test.js +33 -0
  83. package/dist/pipeline/task-input.test.js.map +1 -0
  84. package/dist/pipeline/template-interpolation.d.ts +9 -0
  85. package/dist/pipeline/template-interpolation.d.ts.map +1 -0
  86. package/dist/pipeline/template-interpolation.js +33 -0
  87. package/dist/pipeline/template-interpolation.js.map +1 -0
  88. package/dist/state/status-derivation.js +3 -3
  89. package/dist/state/status-derivation.js.map +1 -1
  90. package/package.json +5 -5
@@ -2,6 +2,77 @@
2
2
  import { readFile } from 'node:fs/promises';
3
3
  import { join } from 'node:path';
4
4
  import * as yaml from 'js-yaml';
5
+ import { assertKnownFields, suggestClosest } from './strict-fields.js';
6
+ import { CONTEXT_INCLUDE_DIRECTIVES } from './context-propagation.js';
7
+ // Every field the kernel implements, per block (see PipelineDefinition and
8
+ // friends in @studio-foundation/contracts). Anything else is config-theatre
9
+ // and must be rejected at load time, not silently ignored.
10
+ const PIPELINE_FIELDS = [
11
+ 'name', 'description', 'version', 'on_pipeline_start', 'input_schema', 'repo', 'stages',
12
+ ];
13
+ const STAGE_FIELDS = [
14
+ 'name', 'condition', 'kind', 'agent', 'executor', 'script', 'runtime',
15
+ 'timeout_ms', 'contract', 'ralph', 'context', 'tools', 'hooks',
16
+ ];
17
+ const GROUP_FIELDS = ['group', 'max_iterations', 'mode', 'on_failure', 'stages'];
18
+ const MAP_FIELDS = ['map', 'condition', 'over', 'pipeline', 'input', 'as', 'concurrency', 'on_item_failure', 'resume'];
19
+ const CALL_FIELDS = ['call', 'condition', 'pipeline', 'input'];
20
+ const RALPH_FIELDS = ['max_attempts', 'retry_strategy', 'max_tool_calls'];
21
+ const CONTEXT_FIELDS = ['include', 'packs'];
22
+ const TOOLS_FIELDS = ['required'];
23
+ const HOOKS_FIELDS = ['on_stage_start', 'on_stage_complete', 'pre_tool_use', 'post_tool_use'];
24
+ const STAGE_HOOK_FIELDS = ['command', 'on_failure'];
25
+ const TOOL_HOOK_FIELDS = ['matcher', 'command', 'on_failure'];
26
+ const STARTUP_COMMAND_FIELDS = ['command', 'inject_as'];
27
+ const REPO_FIELDS = ['url', 'branch'];
28
+ const INPUT_SCHEMA_FIELDS = ['type', 'fields'];
29
+ const INPUT_FIELD_FIELDS = ['name', 'type', 'prompt', 'required', 'default', 'items'];
30
+ /** assertKnownFields on a block only if it is a plain object. */
31
+ function checkBlock(block, allowed, what, context) {
32
+ if (block && typeof block === 'object' && !Array.isArray(block)) {
33
+ assertKnownFields(block, allowed, what, context);
34
+ }
35
+ }
36
+ /**
37
+ * Reject a `context.include` directive the kernel does not implement. The block
38
+ * keys (include/packs) are already checked; this checks the include *values* —
39
+ * an unknown one has no switch case in getContextForStage and is silently
40
+ * dropped, so the user believes a context is wired that never arrives (STU-593).
41
+ */
42
+ function checkContextInclude(stage, context) {
43
+ const includes = stage.context?.include;
44
+ if (!Array.isArray(includes))
45
+ return;
46
+ for (const directive of includes) {
47
+ if (typeof directive === 'string' && !CONTEXT_INCLUDE_DIRECTIVES.includes(directive)) {
48
+ const suggestion = suggestClosest(directive, CONTEXT_INCLUDE_DIRECTIVES);
49
+ throw new Error(`Unknown context.include '${directive}' in stage '${stage.name}'${context}.` +
50
+ (suggestion ? ` Did you mean '${suggestion}'?` : '') +
51
+ ` Known directives: ${[...CONTEXT_INCLUDE_DIRECTIVES].sort().join(', ')}.`);
52
+ }
53
+ }
54
+ }
55
+ /** Strict-check a stage and every nested block the kernel owns. */
56
+ function checkStageFields(stage, context) {
57
+ const inStage = `of stage '${stage.name}'`;
58
+ assertKnownFields(stage, STAGE_FIELDS, `stage '${stage.name}'`, context);
59
+ checkBlock(stage.ralph, RALPH_FIELDS, `ralph ${inStage}`, context);
60
+ checkBlock(stage.context, CONTEXT_FIELDS, `context ${inStage}`, context);
61
+ checkContextInclude(stage, context);
62
+ checkBlock(stage.tools, TOOLS_FIELDS, `tools ${inStage}`, context);
63
+ checkBlock(stage.hooks, HOOKS_FIELDS, `hooks ${inStage}`, context);
64
+ if (stage.hooks && typeof stage.hooks === 'object') {
65
+ for (const point of HOOKS_FIELDS) {
66
+ const entries = stage.hooks[point];
67
+ if (!Array.isArray(entries))
68
+ continue;
69
+ const allowed = point.startsWith('on_stage') ? STAGE_HOOK_FIELDS : TOOL_HOOK_FIELDS;
70
+ for (const entry of entries) {
71
+ checkBlock(entry, allowed, `hooks.${point} entry ${inStage}`, context);
72
+ }
73
+ }
74
+ }
75
+ }
5
76
  export async function loadPipeline(path) {
6
77
  let content;
7
78
  try {
@@ -31,15 +102,39 @@ export function parsePipelineYaml(yamlContent, sourcePath) {
31
102
  if (parsed.stages.length === 0) {
32
103
  throw new Error(`Pipeline must have at least one stage${context}`);
33
104
  }
105
+ assertKnownFields(parsed, PIPELINE_FIELDS, `pipeline '${parsed.name}'`, context);
106
+ checkBlock(parsed.repo, REPO_FIELDS, `repo of pipeline '${parsed.name}'`, context);
107
+ checkBlock(parsed.input_schema, INPUT_SCHEMA_FIELDS, `input_schema of pipeline '${parsed.name}'`, context);
108
+ const inputFields = parsed.input_schema?.fields;
109
+ if (Array.isArray(inputFields)) {
110
+ for (const f of inputFields) {
111
+ checkBlock(f, INPUT_FIELD_FIELDS, `input_schema field of pipeline '${parsed.name}'`, context);
112
+ }
113
+ }
114
+ if (Array.isArray(parsed.on_pipeline_start)) {
115
+ for (const cmd of parsed.on_pipeline_start) {
116
+ checkBlock(cmd, STARTUP_COMMAND_FIELDS, `on_pipeline_start entry of pipeline '${parsed.name}'`, context);
117
+ }
118
+ }
34
119
  const stages = [];
35
120
  for (const entry of parsed.stages) {
36
- if (entry.group) {
121
+ if (entry.map !== undefined) {
122
+ // Fan-out / map stage
123
+ stages.push(parseMapStage(entry, context));
124
+ }
125
+ else if (entry.call !== undefined) {
126
+ // One-shot sub-pipeline call
127
+ stages.push(parseCallStage(entry, context));
128
+ }
129
+ else if (entry.group) {
37
130
  // Group entry
131
+ assertKnownFields(entry, GROUP_FIELDS, `group '${entry.group}'`, context);
38
132
  if (!Array.isArray(entry.stages) || entry.stages.length < 2) {
39
133
  throw new Error(`Group '${entry.group}' must have at least 2 stages${context}`);
40
134
  }
41
135
  for (const s of entry.stages) {
42
136
  validateStageFields(s, context);
137
+ checkStageFields(s, context);
43
138
  }
44
139
  const mode = entry.mode === 'parallel' ? 'parallel' : undefined;
45
140
  let maxIterations = entry.max_iterations ?? 3;
@@ -58,6 +153,7 @@ export function parsePipelineYaml(yamlContent, sourcePath) {
58
153
  else {
59
154
  // Simple stage
60
155
  validateStageFields(entry, context);
156
+ checkStageFields(entry, context);
61
157
  stages.push({ ...entry, hooks: parseStageHooks(entry) });
62
158
  }
63
159
  }
@@ -129,4 +225,65 @@ function validateStageFields(stage, context) {
129
225
  if (stage.executor === 'script' && !stage.script)
130
226
  throw new Error(`Stage '${stage.name}' missing 'script' (required when executor: 'script')${context}`);
131
227
  }
228
+ function parseMapStage(entry, context) {
229
+ const name = entry.map;
230
+ if (!name || typeof name !== 'string') {
231
+ throw new Error(`Map stage missing 'map' (the fan-out stage name)${context}`);
232
+ }
233
+ assertKnownFields(entry, MAP_FIELDS, `map stage '${name}'`, context);
234
+ if (!entry.over || typeof entry.over !== 'string') {
235
+ throw new Error(`Map stage '${name}' missing 'over' (context path to the list, e.g. stages.plan.output.items)${context}`);
236
+ }
237
+ if (!entry.pipeline || typeof entry.pipeline !== 'string') {
238
+ throw new Error(`Map stage '${name}' missing 'pipeline' (the sub-pipeline to run per item)${context}`);
239
+ }
240
+ if (entry.input !== undefined && (typeof entry.input !== 'object' || entry.input === null || Array.isArray(entry.input))) {
241
+ throw new Error(`Map stage '${name}' field 'input' must be an object of key → template${context}`);
242
+ }
243
+ if (entry.as !== undefined && typeof entry.as !== 'string') {
244
+ throw new Error(`Map stage '${name}' field 'as' must be a string${context}`);
245
+ }
246
+ if (entry.concurrency !== undefined) {
247
+ if (typeof entry.concurrency !== 'number' || !Number.isInteger(entry.concurrency) || entry.concurrency < 1) {
248
+ throw new Error(`Map stage '${name}' field 'concurrency' must be a positive integer${context}`);
249
+ }
250
+ }
251
+ const onItemFailure = entry.on_item_failure ?? 'fail-fast';
252
+ if (onItemFailure !== 'fail-fast' && onItemFailure !== 'collect-all') {
253
+ throw new Error(`Map stage '${name}' field 'on_item_failure' must be 'fail-fast' or 'collect-all'${context}`);
254
+ }
255
+ if (entry.resume !== undefined && typeof entry.resume !== 'boolean') {
256
+ throw new Error(`Map stage '${name}' field 'resume' must be a boolean${context}`);
257
+ }
258
+ return {
259
+ map: name,
260
+ over: entry.over,
261
+ pipeline: entry.pipeline,
262
+ ...(entry.condition !== undefined ? { condition: entry.condition } : {}),
263
+ ...(entry.input !== undefined ? { input: entry.input } : {}),
264
+ ...(entry.as !== undefined ? { as: entry.as } : {}),
265
+ ...(entry.concurrency !== undefined ? { concurrency: entry.concurrency } : {}),
266
+ on_item_failure: onItemFailure,
267
+ ...(entry.resume !== undefined ? { resume: entry.resume } : {}),
268
+ };
269
+ }
270
+ function parseCallStage(entry, context) {
271
+ const name = entry.call;
272
+ if (!name || typeof name !== 'string') {
273
+ throw new Error(`Call stage missing 'call' (the stage name)${context}`);
274
+ }
275
+ assertKnownFields(entry, CALL_FIELDS, `call stage '${name}'`, context);
276
+ if (entry.pipeline !== undefined && typeof entry.pipeline !== 'string') {
277
+ throw new Error(`Call stage '${name}' field 'pipeline' must be a string${context}`);
278
+ }
279
+ if (entry.input !== undefined && (typeof entry.input !== 'object' || entry.input === null || Array.isArray(entry.input))) {
280
+ throw new Error(`Call stage '${name}' field 'input' must be an object of key → template${context}`);
281
+ }
282
+ return {
283
+ call: name,
284
+ ...(entry.pipeline !== undefined ? { pipeline: entry.pipeline } : {}),
285
+ ...(entry.condition !== undefined ? { condition: entry.condition } : {}),
286
+ ...(entry.input !== undefined ? { input: entry.input } : {}),
287
+ };
288
+ }
132
289
  //# sourceMappingURL=loader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/pipeline/loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/pipeline/loader.ts"],"names":[],"mappings":"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"}
@@ -117,4 +117,34 @@ stages:
117
117
  expect(stage.hooks).toBeUndefined();
118
118
  });
119
119
  });
120
+ describe('parsePipelineYaml — context.include directives (STU-593)', () => {
121
+ const withInclude = (include) => `
122
+ name: test-pipeline
123
+ description: test
124
+ version: 1
125
+ stages:
126
+ - name: analyze
127
+ kind: analysis
128
+ agent: analyst
129
+ context:
130
+ include:
131
+ - input
132
+ - ${include}
133
+ `;
134
+ it('accepts every directive getContextForStage implements', () => {
135
+ for (const directive of [
136
+ 'input', 'previous_stage_output', 'all_stage_outputs', 'stage_name',
137
+ 'group_feedback', 'previous_stage_tool_results', 'all_stage_tool_results',
138
+ 'repo_files', 'repo_structure', 'pipeline_start_context',
139
+ ]) {
140
+ expect(() => parsePipelineYaml(withInclude(directive))).not.toThrow();
141
+ }
142
+ });
143
+ it('throws on an unknown context.include directive instead of silently dropping it', () => {
144
+ expect(() => parsePipelineYaml(withInclude('entity-classification'))).toThrow(/Unknown context\.include 'entity-classification' in stage 'analyze'/);
145
+ });
146
+ it('suggests the closest directive on a typo', () => {
147
+ expect(() => parsePipelineYaml(withInclude('all_stage_output'))).toThrow(/Did you mean 'all_stage_outputs'\?/);
148
+ });
149
+ });
120
150
  //# sourceMappingURL=loader.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loader.test.js","sourceRoot":"","sources":["../../src/pipeline/loader.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loader.test.js","sourceRoot":"","sources":["../../src/pipeline/loader.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { MapStage } from '@studio-foundation/contracts';
2
+ import type { PipelineInput } from './context-propagation.js';
3
+ /**
4
+ * A short, human-readable identity for one item of a fan-out list, for progress
5
+ * display. Prefers a meaningful field of an object item (title/name/id/…) over
6
+ * a bare index, so an operator watching a --live run sees *which* entity is in
7
+ * flight, not just "#37". Never throws — it is display-only and must tolerate
8
+ * any item shape (including the ones buildItemInput would reject).
9
+ */
10
+ export declare function mapItemLabel(item: unknown, index: number): string;
11
+ /** Build the sub-pipeline input for one item of a fan-out stage. */
12
+ export declare function buildItemInput(map: MapStage, item: unknown, index: number, pipelineInput: PipelineInput): Record<string, unknown>;
13
+ //# sourceMappingURL=map-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-input.d.ts","sourceRoot":"","sources":["../../src/pipeline/map-input.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AA4B9D;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAejE;AAED,oEAAoE;AACpE,wBAAgB,cAAc,CAC5B,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,aAAa,GAC3B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAuBzB"}
@@ -0,0 +1,80 @@
1
+ // Build the per-item input for a fan-out (map) stage.
2
+ //
3
+ // Each item of the `over:` list becomes one sub-pipeline run. The input for
4
+ // that run is derived from the map stage config:
5
+ // - `input:` template → interpolate {{item}}, {{item.<path>}}, {{index}},
6
+ // {{input}}, {{input.<path>}} in each value.
7
+ // - `as:` shorthand → { [as]: item }
8
+ // - neither → the item itself, if it is a plain object.
9
+ import { interpolateTemplate } from './template-interpolation.js';
10
+ /** Resolve a single {{...}} reference against the item/index/input scope. */
11
+ function resolveRef(ref, scope) {
12
+ if (ref === 'item')
13
+ return scope.item;
14
+ if (ref === 'index')
15
+ return scope.index;
16
+ if (ref === 'input')
17
+ return scope.input;
18
+ if (ref.startsWith('item.'))
19
+ return traverse(scope.item, ref.slice('item.'.length));
20
+ if (ref.startsWith('input.'))
21
+ return traverse(scope.input, ref.slice('input.'.length));
22
+ return undefined;
23
+ }
24
+ function traverse(obj, path) {
25
+ let current = obj;
26
+ for (const part of path.split('.')) {
27
+ if (current === null || current === undefined || typeof current !== 'object')
28
+ return undefined;
29
+ current = current[part];
30
+ }
31
+ return current;
32
+ }
33
+ /**
34
+ * A short, human-readable identity for one item of a fan-out list, for progress
35
+ * display. Prefers a meaningful field of an object item (title/name/id/…) over
36
+ * a bare index, so an operator watching a --live run sees *which* entity is in
37
+ * flight, not just "#37". Never throws — it is display-only and must tolerate
38
+ * any item shape (including the ones buildItemInput would reject).
39
+ */
40
+ export function mapItemLabel(item, index) {
41
+ if (typeof item === 'string')
42
+ return item.trim() || `#${index}`;
43
+ if (typeof item === 'number' || typeof item === 'boolean')
44
+ return String(item);
45
+ if (item !== null && typeof item === 'object' && !Array.isArray(item)) {
46
+ const obj = item;
47
+ for (const key of ['title', 'name', 'id', 'slug', 'label', 'key', 'entity']) {
48
+ const v = obj[key];
49
+ if (typeof v === 'string' && v.trim())
50
+ return v.trim();
51
+ if (typeof v === 'number')
52
+ return String(v);
53
+ }
54
+ for (const v of Object.values(obj)) {
55
+ if (typeof v === 'string' && v.trim())
56
+ return v.trim();
57
+ }
58
+ }
59
+ return `#${index}`;
60
+ }
61
+ /** Build the sub-pipeline input for one item of a fan-out stage. */
62
+ export function buildItemInput(map, item, index, pipelineInput) {
63
+ const scope = { item, index, input: pipelineInput };
64
+ if (map.input) {
65
+ const result = {};
66
+ for (const [key, template] of Object.entries(map.input)) {
67
+ result[key] = interpolateTemplate(template, (ref) => resolveRef(ref, scope));
68
+ }
69
+ return result;
70
+ }
71
+ if (map.as) {
72
+ return { [map.as]: item };
73
+ }
74
+ if (item !== null && typeof item === 'object' && !Array.isArray(item)) {
75
+ return item;
76
+ }
77
+ throw new Error(`Map stage '${map.map}': item at index ${index} is not an object, so it cannot be used as pipeline input directly. ` +
78
+ `Add 'as: <key>' (input becomes { <key>: item }) or an 'input:' template.`);
79
+ }
80
+ //# sourceMappingURL=map-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-input.js","sourceRoot":"","sources":["../../src/pipeline/map-input.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /** A completed item's stored result. */
2
+ export interface CachedMapItem {
3
+ output: unknown;
4
+ run_id?: string;
5
+ cached_at: string;
6
+ }
7
+ /** Identifies which map stage a cached item belongs to. */
8
+ export interface MapCacheNamespace {
9
+ pipeline: string;
10
+ stage: string;
11
+ subPipeline: string;
12
+ }
13
+ export interface MapItemCache {
14
+ /** The cached result for this item input, or undefined on a miss. Never throws. */
15
+ get(ns: MapCacheNamespace, itemHash: string): Promise<CachedMapItem | undefined>;
16
+ /** Persist a completed item. Best-effort — must never throw. */
17
+ set(ns: MapCacheNamespace, itemHash: string, value: CachedMapItem): Promise<void>;
18
+ }
19
+ /**
20
+ * Deterministic JSON with object keys sorted recursively. Two objects that
21
+ * differ only in key order serialize identically (so they hash the same), while
22
+ * arrays keep their order (a list is ordered data — [1,2] and [2,1] are not the
23
+ * same input).
24
+ */
25
+ export declare function canonicalize(value: unknown): string;
26
+ /**
27
+ * The resume key for one item: a hash of its sub-pipeline input. Keyed on the
28
+ * input, never the index — so a changed item misses (recomputes) and a
29
+ * reordered list hits.
30
+ */
31
+ export declare function hashItemInput(input: unknown): string;
32
+ /** Filesystem-backed cache: `<root>/<pipeline>/<stage>/<subPipeline>/<itemHash>.json`. */
33
+ export declare class FileSystemMapItemCache implements MapItemCache {
34
+ private root;
35
+ constructor(root: string);
36
+ private pathFor;
37
+ get(ns: MapCacheNamespace, itemHash: string): Promise<CachedMapItem | undefined>;
38
+ set(ns: MapCacheNamespace, itemHash: string, value: CachedMapItem): Promise<void>;
39
+ }
40
+ /** In-memory cache for tests — same contract, no filesystem. */
41
+ export declare class InMemoryMapItemCache implements MapItemCache {
42
+ private store;
43
+ private keyFor;
44
+ get(ns: MapCacheNamespace, itemHash: string): Promise<CachedMapItem | undefined>;
45
+ set(ns: MapCacheNamespace, itemHash: string, value: CachedMapItem): Promise<void>;
46
+ }
47
+ //# sourceMappingURL=map-item-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-item-cache.d.ts","sourceRoot":"","sources":["../../src/pipeline/map-item-cache.ts"],"names":[],"mappings":"AAkBA,wCAAwC;AACxC,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,2DAA2D;AAC3D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,mFAAmF;IACnF,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;IACjF,gEAAgE;IAChE,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnF;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAWnD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEpD;AAOD,0FAA0F;AAC1F,qBAAa,sBAAuB,YAAW,YAAY;IAC7C,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,MAAM;IAEhC,OAAO,CAAC,OAAO;IAUT,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAUhF,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;CASxF;AAED,gEAAgE;AAChE,qBAAa,oBAAqB,YAAW,YAAY;IACvD,OAAO,CAAC,KAAK,CAAoC;IAEjD,OAAO,CAAC,MAAM;IAIR,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAIhF,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;CAGxF"}
Binary file
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-item-cache.js","sourceRoot":"","sources":["../../src/pipeline/map-item-cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import type { MapStage, RunSpawner, StageRun, StageStatus } from '@studio-foundation/contracts';
2
+ import type { EngineEvents, PipelineEventEmitter } from '../events.js';
3
+ import type { PipelineContext } from './context-propagation.js';
4
+ import { type MapItemCache } from './map-item-cache.js';
5
+ export interface MapItemResult {
6
+ index: number;
7
+ status: 'success' | 'failed';
8
+ output?: unknown;
9
+ error?: string;
10
+ run_id?: string;
11
+ /** True when served from the resume cache instead of spawned this run. */
12
+ cached?: boolean;
13
+ }
14
+ export interface MapStageOutput {
15
+ total: number;
16
+ succeeded: number;
17
+ failed: number;
18
+ /** Of the successes, how many were served from the resume cache (not spawned). */
19
+ resumed: number;
20
+ results: MapItemResult[];
21
+ /** Successful item outputs in index order — the common "collect what worked" path. */
22
+ outputs: unknown[];
23
+ }
24
+ export interface MapRunResult {
25
+ status: StageStatus;
26
+ stageRun: StageRun;
27
+ output?: MapStageOutput;
28
+ }
29
+ export interface MapOrchestratorConfig {
30
+ events?: EngineEvents;
31
+ emitter: PipelineEventEmitter;
32
+ spawner?: RunSpawner;
33
+ maxDepth: number;
34
+ /** Durable per-item store for `resume: true` map stages. Absent → resume is a no-op. */
35
+ cache?: MapItemCache;
36
+ }
37
+ export declare class MapOrchestrator {
38
+ private config;
39
+ constructor(config: MapOrchestratorConfig);
40
+ run(map: MapStage, context: PipelineContext, stageIndex: number, totalStages: number, runId: string, depth: number, pipelineName: string, signal?: AbortSignal): Promise<MapRunResult>;
41
+ }
42
+ //# sourceMappingURL=map-orchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-orchestrator.d.ts","sourceRoot":"","sources":["../../src/pipeline/map-orchestrator.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAW,MAAM,8BAA8B,CAAC;AACzG,OAAO,KAAK,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAGvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAiB,KAAK,YAAY,EAA8C,MAAM,qBAAqB,CAAC;AAEnH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,kFAAkF;IAClF,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,sFAAsF;IACtF,OAAO,EAAE,OAAO,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,oBAAoB,CAAC;IAC9B,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,wFAAwF;IACxF,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAMD,qBAAa,eAAe;IACd,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,qBAAqB;IAE3C,GAAG,CACP,GAAG,EAAE,QAAQ,EACb,OAAO,EAAE,eAAe,EACxB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,YAAY,CAAC;CAuRzB"}