@marktoflow/core 2.0.2 → 2.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +69 -6
- package/dist/built-in-operations.d.ts +2 -136
- package/dist/built-in-operations.d.ts.map +1 -1
- package/dist/built-in-operations.js +7 -743
- package/dist/built-in-operations.js.map +1 -1
- package/dist/engine/conditions.d.ts +29 -0
- package/dist/engine/conditions.d.ts.map +1 -0
- package/dist/engine/conditions.js +109 -0
- package/dist/engine/conditions.js.map +1 -0
- package/dist/engine/control-flow.d.ts +35 -0
- package/dist/engine/control-flow.d.ts.map +1 -0
- package/dist/engine/control-flow.js +653 -0
- package/dist/engine/control-flow.js.map +1 -0
- package/dist/engine/index.d.ts +12 -0
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/engine/index.js +11 -0
- package/dist/engine/index.js.map +1 -0
- package/dist/engine/retry.d.ts +35 -0
- package/dist/engine/retry.d.ts.map +1 -0
- package/dist/engine/retry.js +86 -0
- package/dist/engine/retry.js.map +1 -0
- package/dist/engine/subworkflow.d.ts +31 -0
- package/dist/engine/subworkflow.d.ts.map +1 -0
- package/dist/engine/subworkflow.js +240 -0
- package/dist/engine/subworkflow.js.map +1 -0
- package/dist/engine/types.d.ts +55 -0
- package/dist/engine/types.d.ts.map +1 -0
- package/dist/engine/types.js +5 -0
- package/dist/{secrets → engine}/types.js.map +1 -1
- package/dist/engine/variable-resolution.d.ts +29 -0
- package/dist/engine/variable-resolution.d.ts.map +1 -0
- package/dist/engine/variable-resolution.js +130 -0
- package/dist/engine/variable-resolution.js.map +1 -0
- package/dist/engine.d.ts +17 -211
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +84 -1351
- package/dist/engine.js.map +1 -1
- package/dist/file-operations.js +1 -1
- package/dist/file-operations.js.map +1 -1
- package/dist/filters/array.d.ts +9 -0
- package/dist/filters/array.d.ts.map +1 -0
- package/dist/filters/array.js +41 -0
- package/dist/filters/array.js.map +1 -0
- package/dist/filters/date.d.ts +9 -0
- package/dist/filters/date.d.ts.map +1 -0
- package/dist/filters/date.js +51 -0
- package/dist/filters/date.js.map +1 -0
- package/dist/filters/index.d.ts +13 -0
- package/dist/filters/index.d.ts.map +1 -0
- package/dist/filters/index.js +13 -0
- package/dist/filters/index.js.map +1 -0
- package/dist/filters/json.d.ts +6 -0
- package/dist/filters/json.d.ts.map +1 -0
- package/dist/filters/json.js +15 -0
- package/dist/filters/json.js.map +1 -0
- package/dist/filters/logic.d.ts +8 -0
- package/dist/filters/logic.d.ts.map +1 -0
- package/dist/filters/logic.js +28 -0
- package/dist/filters/logic.js.map +1 -0
- package/dist/filters/math.d.ts +13 -0
- package/dist/filters/math.d.ts.map +1 -0
- package/dist/filters/math.js +39 -0
- package/dist/filters/math.js.map +1 -0
- package/dist/filters/object.d.ts +11 -0
- package/dist/filters/object.d.ts.map +1 -0
- package/dist/filters/object.js +64 -0
- package/dist/filters/object.js.map +1 -0
- package/dist/filters/regex.d.ts +7 -0
- package/dist/filters/regex.d.ts.map +1 -0
- package/dist/filters/regex.js +38 -0
- package/dist/filters/regex.js.map +1 -0
- package/dist/filters/string.d.ts +11 -0
- package/dist/filters/string.d.ts.map +1 -0
- package/dist/filters/string.js +35 -0
- package/dist/filters/string.js.map +1 -0
- package/dist/filters/type-checks.d.ts +10 -0
- package/dist/filters/type-checks.d.ts.map +1 -0
- package/dist/filters/type-checks.js +30 -0
- package/dist/filters/type-checks.js.map +1 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/nunjucks-filters.d.ts +2 -261
- package/dist/nunjucks-filters.d.ts.map +1 -1
- package/dist/nunjucks-filters.js +24 -582
- package/dist/nunjucks-filters.js.map +1 -1
- package/dist/operations/compress.d.ts +6 -0
- package/dist/operations/compress.d.ts.map +1 -0
- package/dist/operations/compress.js +36 -0
- package/dist/operations/compress.js.map +1 -0
- package/dist/operations/crypto.d.ts +5 -0
- package/dist/operations/crypto.d.ts.map +1 -0
- package/dist/operations/crypto.js +61 -0
- package/dist/operations/crypto.js.map +1 -0
- package/dist/operations/data-ops.d.ts +10 -0
- package/dist/operations/data-ops.d.ts.map +1 -0
- package/dist/operations/data-ops.js +124 -0
- package/dist/operations/data-ops.js.map +1 -0
- package/dist/operations/datetime.d.ts +5 -0
- package/dist/operations/datetime.d.ts.map +1 -0
- package/dist/operations/datetime.js +86 -0
- package/dist/operations/datetime.js.map +1 -0
- package/dist/operations/extract.d.ts +23 -0
- package/dist/operations/extract.d.ts.map +1 -0
- package/dist/operations/extract.js +31 -0
- package/dist/operations/extract.js.map +1 -0
- package/dist/operations/format.d.ts +14 -0
- package/dist/operations/format.d.ts.map +1 -0
- package/dist/operations/format.js +84 -0
- package/dist/operations/format.js.map +1 -0
- package/dist/operations/index.d.ts +13 -0
- package/dist/operations/index.d.ts.map +1 -0
- package/dist/operations/index.js +13 -0
- package/dist/operations/index.js.map +1 -0
- package/dist/operations/parse.d.ts +5 -0
- package/dist/operations/parse.d.ts.map +1 -0
- package/dist/operations/parse.js +59 -0
- package/dist/operations/parse.js.map +1 -0
- package/dist/operations/set.d.ts +21 -0
- package/dist/operations/set.d.ts.map +1 -0
- package/dist/operations/set.js +25 -0
- package/dist/operations/set.js.map +1 -0
- package/dist/operations/transform.d.ts +15 -0
- package/dist/operations/transform.d.ts.map +1 -0
- package/dist/operations/transform.js +110 -0
- package/dist/operations/transform.js.map +1 -0
- package/dist/parallel.d.ts +114 -0
- package/dist/parallel.d.ts.map +1 -0
- package/dist/parallel.js +325 -0
- package/dist/parallel.js.map +1 -0
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +2 -0
- package/dist/parser.js.map +1 -1
- package/dist/routing.js +2 -2
- package/dist/routing.js.map +1 -1
- package/dist/sdk-registry.d.ts.map +1 -1
- package/dist/sdk-registry.js +9 -3
- package/dist/sdk-registry.js.map +1 -1
- package/dist/utils/duration.d.ts +23 -0
- package/dist/utils/duration.d.ts.map +1 -0
- package/dist/utils/duration.js +41 -0
- package/dist/utils/duration.js.map +1 -0
- package/dist/utils/errors.d.ts +20 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +37 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/workflow-templates.d.ts +80 -0
- package/dist/workflow-templates.d.ts.map +1 -0
- package/dist/workflow-templates.js +248 -0
- package/dist/workflow-templates.js.map +1 -0
- package/package.json +30 -5
- package/dist/secrets/index.d.ts +0 -12
- package/dist/secrets/index.d.ts.map +0 -1
- package/dist/secrets/index.js +0 -11
- package/dist/secrets/index.js.map +0 -1
- package/dist/secrets/providers/aws.d.ts +0 -32
- package/dist/secrets/providers/aws.d.ts.map +0 -1
- package/dist/secrets/providers/aws.js +0 -118
- package/dist/secrets/providers/aws.js.map +0 -1
- package/dist/secrets/providers/azure.d.ts +0 -40
- package/dist/secrets/providers/azure.d.ts.map +0 -1
- package/dist/secrets/providers/azure.js +0 -170
- package/dist/secrets/providers/azure.js.map +0 -1
- package/dist/secrets/providers/env.d.ts +0 -26
- package/dist/secrets/providers/env.d.ts.map +0 -1
- package/dist/secrets/providers/env.js +0 -59
- package/dist/secrets/providers/env.js.map +0 -1
- package/dist/secrets/providers/vault.d.ts +0 -39
- package/dist/secrets/providers/vault.d.ts.map +0 -1
- package/dist/secrets/providers/vault.js +0 -180
- package/dist/secrets/providers/vault.js.map +0 -1
- package/dist/secrets/secret-manager.d.ts +0 -72
- package/dist/secrets/secret-manager.d.ts.map +0 -1
- package/dist/secrets/secret-manager.js +0 -226
- package/dist/secrets/secret-manager.js.map +0 -1
- package/dist/secrets/types.d.ts +0 -105
- package/dist/secrets/types.d.ts.map +0 -1
- package/dist/secrets/types.js +0 -8
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* core.parse — Parse structured data formats (json, csv, xml, yaml, url_params).
|
|
3
|
+
*/
|
|
4
|
+
export function executeParse(inputs) {
|
|
5
|
+
const data = inputs.data;
|
|
6
|
+
const format = inputs.format;
|
|
7
|
+
if (!data || typeof data !== 'string')
|
|
8
|
+
throw new Error('core.parse: data must be a string');
|
|
9
|
+
if (!format)
|
|
10
|
+
throw new Error('core.parse: format is required');
|
|
11
|
+
switch (format) {
|
|
12
|
+
case 'json':
|
|
13
|
+
return JSON.parse(data);
|
|
14
|
+
case 'csv': {
|
|
15
|
+
const delimiter = inputs.delimiter ?? ',';
|
|
16
|
+
const hasHeader = inputs.header ?? true;
|
|
17
|
+
const lines = data.split('\n').filter((l) => l.trim());
|
|
18
|
+
if (lines.length === 0)
|
|
19
|
+
return [];
|
|
20
|
+
if (hasHeader) {
|
|
21
|
+
const headers = lines[0].split(delimiter).map((h) => h.trim());
|
|
22
|
+
return lines.slice(1).map((line) => {
|
|
23
|
+
const values = line.split(delimiter);
|
|
24
|
+
const obj = {};
|
|
25
|
+
headers.forEach((h, i) => { obj[h] = (values[i] ?? '').trim(); });
|
|
26
|
+
return obj;
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
return lines.map((line) => line.split(delimiter).map((v) => v.trim()));
|
|
30
|
+
}
|
|
31
|
+
case 'xml': {
|
|
32
|
+
const result = {};
|
|
33
|
+
const tagRegex = /<(\w+)(?:\s[^>]*)?>([^<]*)<\/\1>/g;
|
|
34
|
+
let match;
|
|
35
|
+
while ((match = tagRegex.exec(data)) !== null) {
|
|
36
|
+
result[match[1]] = match[2].trim();
|
|
37
|
+
}
|
|
38
|
+
return result;
|
|
39
|
+
}
|
|
40
|
+
case 'yaml': {
|
|
41
|
+
try {
|
|
42
|
+
const yaml = require('yaml');
|
|
43
|
+
return yaml.parse(data);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
throw new Error('core.parse: yaml format requires the "yaml" package');
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
case 'url_params': {
|
|
50
|
+
const params = new URLSearchParams(data);
|
|
51
|
+
const result = {};
|
|
52
|
+
params.forEach((value, key) => { result[key] = value; });
|
|
53
|
+
return result;
|
|
54
|
+
}
|
|
55
|
+
default:
|
|
56
|
+
throw new Error(`core.parse: unknown format "${format}"`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/operations/parse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* core.set — Simple variable assignment.
|
|
3
|
+
*/
|
|
4
|
+
import { ExecutionContext } from '../models.js';
|
|
5
|
+
export interface SetOperationInputs {
|
|
6
|
+
[key: string]: unknown;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Set multiple variables at once with expression resolution.
|
|
10
|
+
*
|
|
11
|
+
* Example:
|
|
12
|
+
* ```yaml
|
|
13
|
+
* action: core.set
|
|
14
|
+
* inputs:
|
|
15
|
+
* owner: "{{ inputs.repo =~ /^([^\/]+)\// }}"
|
|
16
|
+
* repo_name: "{{ inputs.repo =~ /\/(.+)$/ }}"
|
|
17
|
+
* timestamp: "{{ now() }}"
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export declare function executeSet(inputs: SetOperationInputs, context: ExecutionContext): Record<string, unknown>;
|
|
21
|
+
//# sourceMappingURL=set.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../../src/operations/set.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGhD,MAAM,WAAW,kBAAkB;IACjC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,kBAAkB,EAC1B,OAAO,EAAE,gBAAgB,GACxB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CASzB"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* core.set — Simple variable assignment.
|
|
3
|
+
*/
|
|
4
|
+
import { resolveTemplates } from '../engine/variable-resolution.js';
|
|
5
|
+
/**
|
|
6
|
+
* Set multiple variables at once with expression resolution.
|
|
7
|
+
*
|
|
8
|
+
* Example:
|
|
9
|
+
* ```yaml
|
|
10
|
+
* action: core.set
|
|
11
|
+
* inputs:
|
|
12
|
+
* owner: "{{ inputs.repo =~ /^([^\/]+)\// }}"
|
|
13
|
+
* repo_name: "{{ inputs.repo =~ /\/(.+)$/ }}"
|
|
14
|
+
* timestamp: "{{ now() }}"
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export function executeSet(inputs, context) {
|
|
18
|
+
const result = {};
|
|
19
|
+
for (const [key, value] of Object.entries(inputs)) {
|
|
20
|
+
const resolved = resolveTemplates(value, context);
|
|
21
|
+
result[key] = resolved;
|
|
22
|
+
}
|
|
23
|
+
return result;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=set.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set.js","sourceRoot":"","sources":["../../src/operations/set.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAMpE;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,UAAU,CACxB,MAA0B,EAC1B,OAAyB;IAEzB,MAAM,MAAM,GAA4B,EAAE,CAAC;IAE3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;IACzB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* core.transform — Array transformations (map, filter, reduce, find, group_by, unique, sort).
|
|
3
|
+
*/
|
|
4
|
+
import { ExecutionContext } from '../models.js';
|
|
5
|
+
export interface TransformOperationInputs {
|
|
6
|
+
input: unknown[];
|
|
7
|
+
operation: 'map' | 'filter' | 'reduce' | 'find' | 'group_by' | 'unique' | 'sort';
|
|
8
|
+
expression?: string;
|
|
9
|
+
condition?: string;
|
|
10
|
+
initialValue?: unknown;
|
|
11
|
+
key?: string;
|
|
12
|
+
reverse?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare function executeTransform(rawInputs: TransformOperationInputs, resolvedInputs: Record<string, unknown>, context: ExecutionContext): unknown;
|
|
15
|
+
//# sourceMappingURL=transform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../src/operations/transform.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGhD,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,SAAS,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC;IACjF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,wBAAwB,EACnC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,OAAO,EAAE,gBAAgB,GACxB,OAAO,CA4BT"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* core.transform — Array transformations (map, filter, reduce, find, group_by, unique, sort).
|
|
3
|
+
*/
|
|
4
|
+
import { resolveTemplates, resolveVariablePath } from '../engine/variable-resolution.js';
|
|
5
|
+
export function executeTransform(rawInputs, resolvedInputs, context) {
|
|
6
|
+
const input = resolvedInputs.input;
|
|
7
|
+
if (!Array.isArray(input)) {
|
|
8
|
+
throw new Error('Transform input must be an array');
|
|
9
|
+
}
|
|
10
|
+
const operation = rawInputs.operation;
|
|
11
|
+
switch (operation) {
|
|
12
|
+
case 'map':
|
|
13
|
+
return transformMap(input, rawInputs.expression || '{{ item }}', context);
|
|
14
|
+
case 'filter':
|
|
15
|
+
return transformFilter(input, rawInputs.condition || 'item', context);
|
|
16
|
+
case 'reduce':
|
|
17
|
+
return transformReduce(input, rawInputs.expression || '{{ accumulator }}', resolvedInputs.initialValue, context);
|
|
18
|
+
case 'find':
|
|
19
|
+
return transformFind(input, rawInputs.condition || 'item', context);
|
|
20
|
+
case 'group_by':
|
|
21
|
+
if (!rawInputs.key)
|
|
22
|
+
throw new Error('group_by operation requires "key" parameter');
|
|
23
|
+
return transformGroupBy(input, rawInputs.key, context);
|
|
24
|
+
case 'unique':
|
|
25
|
+
return transformUnique(input, rawInputs.key, context);
|
|
26
|
+
case 'sort':
|
|
27
|
+
return transformSort(input, rawInputs.key, resolvedInputs.reverse || false, context);
|
|
28
|
+
default:
|
|
29
|
+
throw new Error(`Unknown transform operation: ${operation}`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function transformMap(items, expression, context) {
|
|
33
|
+
return items.map((item) => {
|
|
34
|
+
const itemContext = { ...context, variables: { ...context.variables, item } };
|
|
35
|
+
return resolveTemplates(expression, itemContext);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
function transformFilter(items, condition, context) {
|
|
39
|
+
return items.filter((item) => {
|
|
40
|
+
const itemContext = { ...context, variables: { ...context.variables, item } };
|
|
41
|
+
const resolved = resolveTemplates(condition, itemContext);
|
|
42
|
+
return Boolean(resolved);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
function transformReduce(items, expression, initialValue, context) {
|
|
46
|
+
let accumulator = initialValue !== undefined ? initialValue : null;
|
|
47
|
+
for (const item of items) {
|
|
48
|
+
const reduceContext = {
|
|
49
|
+
...context,
|
|
50
|
+
variables: { ...context.variables, item, accumulator },
|
|
51
|
+
};
|
|
52
|
+
accumulator = resolveTemplates(expression, reduceContext);
|
|
53
|
+
}
|
|
54
|
+
return accumulator;
|
|
55
|
+
}
|
|
56
|
+
function transformFind(items, condition, context) {
|
|
57
|
+
for (const item of items) {
|
|
58
|
+
const itemContext = { ...context, variables: { ...context.variables, item } };
|
|
59
|
+
const resolved = resolveTemplates(condition, itemContext);
|
|
60
|
+
if (Boolean(resolved))
|
|
61
|
+
return item;
|
|
62
|
+
}
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
function transformGroupBy(items, key, context) {
|
|
66
|
+
const groups = {};
|
|
67
|
+
for (const item of items) {
|
|
68
|
+
const itemContext = { ...context, variables: { ...context.variables, item } };
|
|
69
|
+
const groupKey = String(resolveVariablePath(key, itemContext));
|
|
70
|
+
if (!groups[groupKey])
|
|
71
|
+
groups[groupKey] = [];
|
|
72
|
+
groups[groupKey].push(item);
|
|
73
|
+
}
|
|
74
|
+
return groups;
|
|
75
|
+
}
|
|
76
|
+
function transformUnique(items, key, context) {
|
|
77
|
+
if (!key)
|
|
78
|
+
return Array.from(new Set(items));
|
|
79
|
+
const seen = new Set();
|
|
80
|
+
const result = [];
|
|
81
|
+
for (const item of items) {
|
|
82
|
+
const itemContext = { ...context, variables: { ...context.variables, item } };
|
|
83
|
+
const keyValue = String(resolveVariablePath(key, itemContext));
|
|
84
|
+
if (!seen.has(keyValue)) {
|
|
85
|
+
seen.add(keyValue);
|
|
86
|
+
result.push(item);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return result;
|
|
90
|
+
}
|
|
91
|
+
function transformSort(items, key, reverse, context) {
|
|
92
|
+
const sorted = [...items];
|
|
93
|
+
sorted.sort((a, b) => {
|
|
94
|
+
let aVal = a;
|
|
95
|
+
let bVal = b;
|
|
96
|
+
if (key) {
|
|
97
|
+
const aContext = { ...context, variables: { ...context.variables, item: a } };
|
|
98
|
+
const bContext = { ...context, variables: { ...context.variables, item: b } };
|
|
99
|
+
aVal = resolveVariablePath(key, aContext);
|
|
100
|
+
bVal = resolveVariablePath(key, bContext);
|
|
101
|
+
}
|
|
102
|
+
if (typeof aVal === 'number' && typeof bVal === 'number')
|
|
103
|
+
return aVal - bVal;
|
|
104
|
+
if (typeof aVal === 'string' && typeof bVal === 'string')
|
|
105
|
+
return aVal.localeCompare(bVal);
|
|
106
|
+
return String(aVal).localeCompare(String(bVal));
|
|
107
|
+
});
|
|
108
|
+
return reverse ? sorted.reverse() : sorted;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=transform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform.js","sourceRoot":"","sources":["../../src/operations/transform.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parallel Agent Orchestration for marktoflow
|
|
3
|
+
*
|
|
4
|
+
* Provides parallel execution of multiple AI agents with various wait strategies.
|
|
5
|
+
* - parallel.spawn: Execute multiple AI agents concurrently
|
|
6
|
+
* - parallel.map: Map a function over a collection with parallel agent execution
|
|
7
|
+
*/
|
|
8
|
+
import { ExecutionContext, WorkflowStep } from './models.js';
|
|
9
|
+
import type { StepExecutorContext, SDKRegistryLike } from './engine/types.js';
|
|
10
|
+
export interface AgentConfig {
|
|
11
|
+
id: string;
|
|
12
|
+
provider: string;
|
|
13
|
+
model?: string;
|
|
14
|
+
prompt: string;
|
|
15
|
+
inputs?: Record<string, unknown>;
|
|
16
|
+
}
|
|
17
|
+
export interface ParallelSpawnInputs {
|
|
18
|
+
agents: AgentConfig[];
|
|
19
|
+
wait?: 'all' | 'any' | 'majority' | number;
|
|
20
|
+
timeout?: string;
|
|
21
|
+
onError?: 'fail' | 'continue' | 'partial';
|
|
22
|
+
}
|
|
23
|
+
export interface ParallelMapInputs {
|
|
24
|
+
items: unknown[];
|
|
25
|
+
agent: {
|
|
26
|
+
provider: string;
|
|
27
|
+
model?: string;
|
|
28
|
+
prompt: string;
|
|
29
|
+
};
|
|
30
|
+
concurrency?: number;
|
|
31
|
+
timeout?: string;
|
|
32
|
+
onError?: 'fail' | 'continue' | 'partial';
|
|
33
|
+
}
|
|
34
|
+
export interface AgentResult {
|
|
35
|
+
id: string;
|
|
36
|
+
success: boolean;
|
|
37
|
+
output?: unknown;
|
|
38
|
+
error?: string;
|
|
39
|
+
timing: {
|
|
40
|
+
started: string;
|
|
41
|
+
completed: string;
|
|
42
|
+
duration: number;
|
|
43
|
+
};
|
|
44
|
+
cost?: number;
|
|
45
|
+
}
|
|
46
|
+
export interface ParallelResult {
|
|
47
|
+
results: Record<string, AgentResult>;
|
|
48
|
+
successful: string[];
|
|
49
|
+
failed: string[];
|
|
50
|
+
timing: {
|
|
51
|
+
duration: number;
|
|
52
|
+
started: string;
|
|
53
|
+
completed: string;
|
|
54
|
+
};
|
|
55
|
+
costs: {
|
|
56
|
+
total: number;
|
|
57
|
+
byAgent: Record<string, number>;
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Execute multiple AI agents in parallel with configurable wait strategies.
|
|
62
|
+
*
|
|
63
|
+
* Example:
|
|
64
|
+
* ```yaml
|
|
65
|
+
* action: parallel.spawn
|
|
66
|
+
* inputs:
|
|
67
|
+
* agents:
|
|
68
|
+
* - id: security_review
|
|
69
|
+
* provider: claude
|
|
70
|
+
* model: sonnet
|
|
71
|
+
* prompt: "Review security of: {{ code }}"
|
|
72
|
+
* - id: performance_review
|
|
73
|
+
* provider: copilot
|
|
74
|
+
* prompt: "Review performance of: {{ code }}"
|
|
75
|
+
* wait: all
|
|
76
|
+
* timeout: 60s
|
|
77
|
+
* onError: continue
|
|
78
|
+
* outputs:
|
|
79
|
+
* results: ${results}
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
export declare function executeParallelSpawn(inputs: ParallelSpawnInputs, context: ExecutionContext, sdkRegistry: SDKRegistryLike, stepExecutor: (step: WorkflowStep, context: ExecutionContext, sdkRegistry: SDKRegistryLike, executorContext?: StepExecutorContext) => Promise<unknown>): Promise<ParallelResult>;
|
|
83
|
+
/**
|
|
84
|
+
* Process an array of items in parallel using AI agents.
|
|
85
|
+
*
|
|
86
|
+
* Example:
|
|
87
|
+
* ```yaml
|
|
88
|
+
* action: parallel.map
|
|
89
|
+
* inputs:
|
|
90
|
+
* items: ${pull_requests}
|
|
91
|
+
* agent:
|
|
92
|
+
* provider: claude
|
|
93
|
+
* model: haiku
|
|
94
|
+
* prompt: "Review PR: {{ item.url }}"
|
|
95
|
+
* concurrency: 5
|
|
96
|
+
* timeout: 30s
|
|
97
|
+
* outputs:
|
|
98
|
+
* reviews: ${results}
|
|
99
|
+
* ```
|
|
100
|
+
*/
|
|
101
|
+
export declare function executeParallelMap(inputs: ParallelMapInputs, context: ExecutionContext, sdkRegistry: SDKRegistryLike, stepExecutor: (step: WorkflowStep, context: ExecutionContext, sdkRegistry: SDKRegistryLike, executorContext?: StepExecutorContext) => Promise<unknown>): Promise<unknown[]>;
|
|
102
|
+
/**
|
|
103
|
+
* Check if an action is a parallel operation
|
|
104
|
+
*/
|
|
105
|
+
export declare function isParallelOperation(action: string): boolean;
|
|
106
|
+
/**
|
|
107
|
+
* Execute a parallel operation.
|
|
108
|
+
*
|
|
109
|
+
* @param rawInputs - Original unresolved inputs, used to preserve prompt templates
|
|
110
|
+
* containing per-item variables ({{ item }}, {{ itemIndex }}) that the engine's
|
|
111
|
+
* pre-resolution would replace with empty strings.
|
|
112
|
+
*/
|
|
113
|
+
export declare function executeParallelOperation(action: string, resolvedInputs: Record<string, unknown>, context: ExecutionContext, sdkRegistry: SDKRegistryLike, stepExecutor: (step: WorkflowStep, context: ExecutionContext, sdkRegistry: SDKRegistryLike, executorContext?: StepExecutorContext) => Promise<unknown>, rawInputs?: Record<string, unknown>): Promise<unknown>;
|
|
114
|
+
//# sourceMappingURL=parallel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parallel.d.ts","sourceRoot":"","sources":["../src/parallel.ts"],"names":[],"mappings":"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"}
|