@marktoflow/core 2.0.3 → 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 +80 -1347
- 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/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,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error handling utilities for marktoflow.
|
|
3
|
+
*
|
|
4
|
+
* Provides consistent error conversion patterns used across the engine.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Convert an unknown error value to a human-readable string.
|
|
8
|
+
*
|
|
9
|
+
* @param error - Any thrown value
|
|
10
|
+
* @returns A string representation of the error
|
|
11
|
+
*/
|
|
12
|
+
export function errorToString(error) {
|
|
13
|
+
if (!error)
|
|
14
|
+
return 'Unknown error';
|
|
15
|
+
if (typeof error === 'string')
|
|
16
|
+
return error;
|
|
17
|
+
if (error instanceof Error)
|
|
18
|
+
return error.message;
|
|
19
|
+
try {
|
|
20
|
+
return JSON.stringify(error);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return String(error);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Convert an unknown thrown value to an Error object.
|
|
28
|
+
*
|
|
29
|
+
* @param error - Any thrown value
|
|
30
|
+
* @returns An Error instance
|
|
31
|
+
*/
|
|
32
|
+
export function toError(error) {
|
|
33
|
+
if (error instanceof Error)
|
|
34
|
+
return error;
|
|
35
|
+
return new Error(errorToString(error));
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,IAAI,CAAC,KAAK;QAAE,OAAO,eAAe,CAAC;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,KAAK,YAAY,KAAK;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC;IACjD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CAAC,KAAc;IACpC,IAAI,KAAK,YAAY,KAAK;QAAE,OAAO,KAAK,CAAC;IACzC,OAAO,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workflow template library for marktoflow.
|
|
3
|
+
* Uses Nunjucks for template rendering with full filter/conditional support.
|
|
4
|
+
*/
|
|
5
|
+
export declare enum TemplateCategory {
|
|
6
|
+
CODE_QUALITY = "code_quality",
|
|
7
|
+
DEPLOYMENT = "deployment",
|
|
8
|
+
TESTING = "testing",
|
|
9
|
+
DOCUMENTATION = "documentation",
|
|
10
|
+
SECURITY = "security",
|
|
11
|
+
MONITORING = "monitoring",
|
|
12
|
+
DATA = "data",
|
|
13
|
+
INTEGRATION = "integration",
|
|
14
|
+
GENERAL = "general"
|
|
15
|
+
}
|
|
16
|
+
export interface TemplateVariable {
|
|
17
|
+
name: string;
|
|
18
|
+
description: string;
|
|
19
|
+
type?: 'string' | 'integer' | 'boolean' | 'array' | 'object';
|
|
20
|
+
required?: boolean;
|
|
21
|
+
default?: unknown;
|
|
22
|
+
example?: unknown;
|
|
23
|
+
pattern?: string | undefined;
|
|
24
|
+
}
|
|
25
|
+
export interface TemplateMetadata {
|
|
26
|
+
id: string;
|
|
27
|
+
name: string;
|
|
28
|
+
description?: string;
|
|
29
|
+
category: TemplateCategory;
|
|
30
|
+
version?: string;
|
|
31
|
+
author?: string;
|
|
32
|
+
tags?: string[];
|
|
33
|
+
license?: string;
|
|
34
|
+
homepage?: string;
|
|
35
|
+
variables?: TemplateVariable[];
|
|
36
|
+
requirements?: Record<string, unknown>;
|
|
37
|
+
examples?: Array<Record<string, unknown>>;
|
|
38
|
+
}
|
|
39
|
+
export declare class WorkflowTemplate {
|
|
40
|
+
metadata: TemplateMetadata;
|
|
41
|
+
content: string;
|
|
42
|
+
source: 'builtin' | 'file' | 'registry';
|
|
43
|
+
path?: string | undefined;
|
|
44
|
+
readonly createdAt: Date;
|
|
45
|
+
constructor(metadata: TemplateMetadata, content: string, source?: 'builtin' | 'file' | 'registry', path?: string | undefined);
|
|
46
|
+
get id(): string;
|
|
47
|
+
get name(): string;
|
|
48
|
+
get category(): TemplateCategory;
|
|
49
|
+
get variables(): TemplateVariable[];
|
|
50
|
+
validateVariables(values: Record<string, unknown>): {
|
|
51
|
+
valid: boolean;
|
|
52
|
+
errors: string[];
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Render the template with the given variables using Nunjucks.
|
|
56
|
+
*
|
|
57
|
+
* Features enabled by using Nunjucks:
|
|
58
|
+
* - Filters: {{ template.name | upper }}, {{ value | split('/') | first }}
|
|
59
|
+
* - Conditionals: {% if template.enabled %}...{% endif %}
|
|
60
|
+
* - Loops: {% for item in items %}...{% endfor %}
|
|
61
|
+
* - All custom filters from nunjucks-filters.ts
|
|
62
|
+
*/
|
|
63
|
+
render(variables?: Record<string, unknown>): string;
|
|
64
|
+
instantiate(outputPath: string, variables?: Record<string, unknown>, workflowId?: string): string;
|
|
65
|
+
static fromFile(path: string): WorkflowTemplate;
|
|
66
|
+
}
|
|
67
|
+
export declare class TemplateRegistry {
|
|
68
|
+
private templateDirs;
|
|
69
|
+
private templates;
|
|
70
|
+
constructor(templateDirs?: string[], loadBuiltins?: boolean);
|
|
71
|
+
register(template: WorkflowTemplate): void;
|
|
72
|
+
unregister(id: string): boolean;
|
|
73
|
+
get(id: string): WorkflowTemplate | undefined;
|
|
74
|
+
list(category?: TemplateCategory, tags?: string[]): WorkflowTemplate[];
|
|
75
|
+
search(query: string): WorkflowTemplate[];
|
|
76
|
+
discover(): string[];
|
|
77
|
+
}
|
|
78
|
+
export declare const HELLO_TEMPLATE: WorkflowTemplate;
|
|
79
|
+
export declare const BUILTIN_TEMPLATES: WorkflowTemplate[];
|
|
80
|
+
//# sourceMappingURL=workflow-templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-templates.d.ts","sourceRoot":"","sources":["../src/workflow-templates.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workflow template library for marktoflow.
|
|
3
|
+
* Uses Nunjucks for template rendering with full filter/conditional support.
|
|
4
|
+
*/
|
|
5
|
+
import { readFileSync, existsSync, mkdirSync } from 'node:fs';
|
|
6
|
+
import { dirname } from 'node:path';
|
|
7
|
+
import { parse } from 'yaml';
|
|
8
|
+
import { renderTemplate } from './template-engine.js';
|
|
9
|
+
export var TemplateCategory;
|
|
10
|
+
(function (TemplateCategory) {
|
|
11
|
+
TemplateCategory["CODE_QUALITY"] = "code_quality";
|
|
12
|
+
TemplateCategory["DEPLOYMENT"] = "deployment";
|
|
13
|
+
TemplateCategory["TESTING"] = "testing";
|
|
14
|
+
TemplateCategory["DOCUMENTATION"] = "documentation";
|
|
15
|
+
TemplateCategory["SECURITY"] = "security";
|
|
16
|
+
TemplateCategory["MONITORING"] = "monitoring";
|
|
17
|
+
TemplateCategory["DATA"] = "data";
|
|
18
|
+
TemplateCategory["INTEGRATION"] = "integration";
|
|
19
|
+
TemplateCategory["GENERAL"] = "general";
|
|
20
|
+
})(TemplateCategory || (TemplateCategory = {}));
|
|
21
|
+
export class WorkflowTemplate {
|
|
22
|
+
metadata;
|
|
23
|
+
content;
|
|
24
|
+
source;
|
|
25
|
+
path;
|
|
26
|
+
createdAt;
|
|
27
|
+
constructor(metadata, content, source = 'builtin', path) {
|
|
28
|
+
this.metadata = metadata;
|
|
29
|
+
this.content = content;
|
|
30
|
+
this.source = source;
|
|
31
|
+
this.path = path;
|
|
32
|
+
this.createdAt = new Date();
|
|
33
|
+
}
|
|
34
|
+
get id() {
|
|
35
|
+
return this.metadata.id;
|
|
36
|
+
}
|
|
37
|
+
get name() {
|
|
38
|
+
return this.metadata.name;
|
|
39
|
+
}
|
|
40
|
+
get category() {
|
|
41
|
+
return this.metadata.category;
|
|
42
|
+
}
|
|
43
|
+
get variables() {
|
|
44
|
+
return this.metadata.variables ?? [];
|
|
45
|
+
}
|
|
46
|
+
validateVariables(values) {
|
|
47
|
+
const errors = [];
|
|
48
|
+
for (const variable of this.variables) {
|
|
49
|
+
const value = values[variable.name];
|
|
50
|
+
if (value === undefined || value === null) {
|
|
51
|
+
if (variable.required && variable.default === undefined) {
|
|
52
|
+
errors.push(`Variable '${variable.name}' is required`);
|
|
53
|
+
}
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
if (variable.type) {
|
|
57
|
+
const typeMap = {
|
|
58
|
+
string: 'string',
|
|
59
|
+
integer: 'number',
|
|
60
|
+
boolean: 'boolean',
|
|
61
|
+
array: 'object',
|
|
62
|
+
object: 'object',
|
|
63
|
+
};
|
|
64
|
+
const expected = typeMap[variable.type];
|
|
65
|
+
if (expected === 'number' && typeof value !== 'number') {
|
|
66
|
+
errors.push(`Variable '${variable.name}' must be a number`);
|
|
67
|
+
}
|
|
68
|
+
else if (expected === 'string' && typeof value !== 'string') {
|
|
69
|
+
errors.push(`Variable '${variable.name}' must be a string`);
|
|
70
|
+
}
|
|
71
|
+
else if (expected === 'boolean' && typeof value !== 'boolean') {
|
|
72
|
+
errors.push(`Variable '${variable.name}' must be a boolean`);
|
|
73
|
+
}
|
|
74
|
+
else if (variable.type === 'array' && !Array.isArray(value)) {
|
|
75
|
+
errors.push(`Variable '${variable.name}' must be an array`);
|
|
76
|
+
}
|
|
77
|
+
else if (variable.type === 'object' && typeof value !== 'object') {
|
|
78
|
+
errors.push(`Variable '${variable.name}' must be an object`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (variable.pattern && typeof value === 'string') {
|
|
82
|
+
const regex = new RegExp(variable.pattern);
|
|
83
|
+
if (!regex.test(value)) {
|
|
84
|
+
errors.push(`Variable '${variable.name}' must match pattern ${variable.pattern}`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return { valid: errors.length === 0, errors };
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Render the template with the given variables using Nunjucks.
|
|
92
|
+
*
|
|
93
|
+
* Features enabled by using Nunjucks:
|
|
94
|
+
* - Filters: {{ template.name | upper }}, {{ value | split('/') | first }}
|
|
95
|
+
* - Conditionals: {% if template.enabled %}...{% endif %}
|
|
96
|
+
* - Loops: {% for item in items %}...{% endfor %}
|
|
97
|
+
* - All custom filters from nunjucks-filters.ts
|
|
98
|
+
*/
|
|
99
|
+
render(variables = {}) {
|
|
100
|
+
const values = { ...variables };
|
|
101
|
+
for (const variable of this.variables) {
|
|
102
|
+
if (values[variable.name] === undefined && variable.default !== undefined) {
|
|
103
|
+
values[variable.name] = variable.default;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Build the template context with 'template' namespace
|
|
107
|
+
const templateContext = {
|
|
108
|
+
template: values,
|
|
109
|
+
...values, // Also expose at top level for convenience
|
|
110
|
+
};
|
|
111
|
+
// Render using Nunjucks
|
|
112
|
+
const rendered = renderTemplate(this.content, templateContext);
|
|
113
|
+
return typeof rendered === 'string' ? rendered : String(rendered);
|
|
114
|
+
}
|
|
115
|
+
instantiate(outputPath, variables = {}, workflowId) {
|
|
116
|
+
const { valid, errors } = this.validateVariables(variables);
|
|
117
|
+
if (!valid) {
|
|
118
|
+
throw new Error(`Invalid variables: ${errors.join('; ')}`);
|
|
119
|
+
}
|
|
120
|
+
let content = this.render(variables);
|
|
121
|
+
if (workflowId) {
|
|
122
|
+
content = content.replace(/(id:\\s*\")[^\"]*(\")/g, `$1${workflowId}$2`);
|
|
123
|
+
content = content.replace(/(id:\\s*)'[^']*(')/g, `$1'${workflowId}'$2`);
|
|
124
|
+
content = content.replace(/(id:\\s*)(\\S+)/g, `$1${workflowId}`);
|
|
125
|
+
}
|
|
126
|
+
const dir = dirname(outputPath);
|
|
127
|
+
if (!existsSync(dir)) {
|
|
128
|
+
mkdirSync(dir, { recursive: true });
|
|
129
|
+
}
|
|
130
|
+
const fs = require('node:fs');
|
|
131
|
+
fs.writeFileSync(outputPath, content);
|
|
132
|
+
return outputPath;
|
|
133
|
+
}
|
|
134
|
+
static fromFile(path) {
|
|
135
|
+
const content = readFileSync(path, 'utf8');
|
|
136
|
+
if (content.startsWith('---')) {
|
|
137
|
+
const parts = content.split('---', 3);
|
|
138
|
+
if (parts.length >= 3) {
|
|
139
|
+
const frontmatter = parse(parts[1]);
|
|
140
|
+
const templateMeta = frontmatter?.template ?? {};
|
|
141
|
+
const metadata = {
|
|
142
|
+
id: templateMeta.id ?? path.split('/').pop()?.replace(/\\.md$/, '') ?? 'template',
|
|
143
|
+
name: templateMeta.name ?? path.split('/').pop()?.replace(/\\.md$/, '') ?? 'Template',
|
|
144
|
+
description: templateMeta.description ?? '',
|
|
145
|
+
category: templateMeta.category ?? TemplateCategory.GENERAL,
|
|
146
|
+
version: templateMeta.version ?? '1.0.0',
|
|
147
|
+
author: templateMeta.author ?? '',
|
|
148
|
+
tags: templateMeta.tags ?? [],
|
|
149
|
+
variables: templateMeta.variables ?? [],
|
|
150
|
+
requirements: templateMeta.requirements ?? {},
|
|
151
|
+
};
|
|
152
|
+
return new WorkflowTemplate(metadata, content, 'file', path);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
const fallback = {
|
|
156
|
+
id: path.split('/').pop()?.replace(/\\.md$/, '') ?? 'template',
|
|
157
|
+
name: path.split('/').pop()?.replace(/\\.md$/, '') ?? 'Template',
|
|
158
|
+
category: TemplateCategory.GENERAL,
|
|
159
|
+
};
|
|
160
|
+
return new WorkflowTemplate(fallback, content, 'file', path);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
export class TemplateRegistry {
|
|
164
|
+
templateDirs;
|
|
165
|
+
templates = new Map();
|
|
166
|
+
constructor(templateDirs = [], loadBuiltins = true) {
|
|
167
|
+
this.templateDirs = templateDirs;
|
|
168
|
+
if (loadBuiltins) {
|
|
169
|
+
for (const template of BUILTIN_TEMPLATES) {
|
|
170
|
+
this.templates.set(template.id, template);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
register(template) {
|
|
175
|
+
this.templates.set(template.id, template);
|
|
176
|
+
}
|
|
177
|
+
unregister(id) {
|
|
178
|
+
return this.templates.delete(id);
|
|
179
|
+
}
|
|
180
|
+
get(id) {
|
|
181
|
+
return this.templates.get(id);
|
|
182
|
+
}
|
|
183
|
+
list(category, tags) {
|
|
184
|
+
let items = Array.from(this.templates.values());
|
|
185
|
+
if (category) {
|
|
186
|
+
items = items.filter((t) => t.category === category);
|
|
187
|
+
}
|
|
188
|
+
if (tags && tags.length > 0) {
|
|
189
|
+
items = items.filter((t) => (t.metadata.tags ?? []).some((tag) => tags.includes(tag)));
|
|
190
|
+
}
|
|
191
|
+
return items.sort((a, b) => a.name.localeCompare(b.name));
|
|
192
|
+
}
|
|
193
|
+
search(query) {
|
|
194
|
+
const q = query.toLowerCase();
|
|
195
|
+
return Array.from(this.templates.values()).filter((t) => {
|
|
196
|
+
if (t.name.toLowerCase().includes(q))
|
|
197
|
+
return true;
|
|
198
|
+
if ((t.metadata.description ?? '').toLowerCase().includes(q))
|
|
199
|
+
return true;
|
|
200
|
+
return (t.metadata.tags ?? []).some((tag) => tag.toLowerCase().includes(q));
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
discover() {
|
|
204
|
+
const discovered = [];
|
|
205
|
+
for (const dir of this.templateDirs) {
|
|
206
|
+
if (!existsSync(dir))
|
|
207
|
+
continue;
|
|
208
|
+
const fs = require('node:fs');
|
|
209
|
+
const entries = fs.readdirSync(dir);
|
|
210
|
+
for (const entry of entries) {
|
|
211
|
+
if (!entry.endsWith('.md'))
|
|
212
|
+
continue;
|
|
213
|
+
const path = `${dir}/${entry}`;
|
|
214
|
+
try {
|
|
215
|
+
const tmpl = WorkflowTemplate.fromFile(path);
|
|
216
|
+
if (!this.templates.has(tmpl.id)) {
|
|
217
|
+
this.templates.set(tmpl.id, tmpl);
|
|
218
|
+
discovered.push(tmpl.id);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
catch {
|
|
222
|
+
// ignore invalid templates
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return discovered;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
export const HELLO_TEMPLATE = new WorkflowTemplate({
|
|
230
|
+
id: 'hello-world',
|
|
231
|
+
name: 'Hello World',
|
|
232
|
+
description: 'A minimal example workflow template',
|
|
233
|
+
category: TemplateCategory.GENERAL,
|
|
234
|
+
version: '1.0.0',
|
|
235
|
+
author: 'marktoflow',
|
|
236
|
+
tags: ['example', 'starter'],
|
|
237
|
+
variables: [
|
|
238
|
+
{
|
|
239
|
+
name: 'message',
|
|
240
|
+
description: 'Message to print',
|
|
241
|
+
type: 'string',
|
|
242
|
+
required: true,
|
|
243
|
+
default: 'Hello from marktoflow!',
|
|
244
|
+
},
|
|
245
|
+
],
|
|
246
|
+
}, `---\nworkflow:\n id: hello-world\n name: \"Hello World\"\n version: \"1.0.0\"\n description: \"A simple example workflow\"\n\nsteps:\n - id: greet\n action: core.log\n inputs:\n message: \"{{ template.message }}\"\n---\n\n# Hello World\n\nThis is a simple example workflow.\n`);
|
|
247
|
+
export const BUILTIN_TEMPLATES = [HELLO_TEMPLATE];
|
|
248
|
+
//# sourceMappingURL=workflow-templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-templates.js","sourceRoot":"","sources":["../src/workflow-templates.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@marktoflow/core",
|
|
3
|
-
"version": "2.0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "2.0.4",
|
|
4
|
+
"description": "AI workflow engine with tool calling, parallel execution, structured output, and agent routing",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
@@ -66,13 +66,38 @@
|
|
|
66
66
|
],
|
|
67
67
|
"keywords": [
|
|
68
68
|
"marktoflow",
|
|
69
|
+
"workflow-engine",
|
|
69
70
|
"workflow",
|
|
70
|
-
"parser",
|
|
71
71
|
"automation",
|
|
72
|
-
"
|
|
72
|
+
"parser",
|
|
73
|
+
"ai-workflow",
|
|
74
|
+
"ai-agents",
|
|
75
|
+
"tool-calling",
|
|
76
|
+
"agentic",
|
|
77
|
+
"llm",
|
|
78
|
+
"mcp",
|
|
79
|
+
"model-context-protocol",
|
|
80
|
+
"parallel-execution",
|
|
81
|
+
"control-flow",
|
|
82
|
+
"state-management",
|
|
83
|
+
"plugin-system",
|
|
84
|
+
"agent-routing",
|
|
85
|
+
"cost-tracking",
|
|
86
|
+
"typescript",
|
|
87
|
+
"markdown",
|
|
88
|
+
"yaml",
|
|
89
|
+
"structured-output",
|
|
90
|
+
"self-hosted",
|
|
91
|
+
"private",
|
|
92
|
+
"secure",
|
|
93
|
+
"air-gapped",
|
|
94
|
+
"local-first",
|
|
95
|
+
"no-telemetry",
|
|
96
|
+
"data-privacy",
|
|
97
|
+
"on-premise"
|
|
73
98
|
],
|
|
74
99
|
"author": "Scott Glover",
|
|
75
|
-
"license": "
|
|
100
|
+
"license": "AGPL-3.0-only",
|
|
76
101
|
"publishConfig": {
|
|
77
102
|
"registry": "https://registry.npmjs.org/"
|
|
78
103
|
}
|
package/dist/secrets/index.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* External Secrets Management
|
|
3
|
-
*
|
|
4
|
-
* Provides integration with external secret managers.
|
|
5
|
-
*/
|
|
6
|
-
export { SecretManager, SecretNotFoundError, SecretProviderError } from './secret-manager.js';
|
|
7
|
-
export { VaultProvider } from './providers/vault.js';
|
|
8
|
-
export { AWSSecretsManagerProvider } from './providers/aws.js';
|
|
9
|
-
export { AzureKeyVaultProvider } from './providers/azure.js';
|
|
10
|
-
export { EnvProvider } from './providers/env.js';
|
|
11
|
-
export type { Secret, SecretMetadata, SecretProvider, SecretProviderConfig, SecretManagerOptions, SecretReference, CachedSecret, VaultConfig, AWSSecretsManagerConfig, AzureKeyVaultConfig, GCPSecretManagerConfig, } from './types.js';
|
|
12
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/secrets/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE9F,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,YAAY,EACV,MAAM,EACN,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,EACf,YAAY,EACZ,WAAW,EACX,uBAAuB,EACvB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,YAAY,CAAC"}
|
package/dist/secrets/index.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* External Secrets Management
|
|
3
|
-
*
|
|
4
|
-
* Provides integration with external secret managers.
|
|
5
|
-
*/
|
|
6
|
-
export { SecretManager, SecretNotFoundError, SecretProviderError } from './secret-manager.js';
|
|
7
|
-
export { VaultProvider } from './providers/vault.js';
|
|
8
|
-
export { AWSSecretsManagerProvider } from './providers/aws.js';
|
|
9
|
-
export { AzureKeyVaultProvider } from './providers/azure.js';
|
|
10
|
-
export { EnvProvider } from './providers/env.js';
|
|
11
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/secrets/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE9F,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AWS Secrets Manager Provider
|
|
3
|
-
*
|
|
4
|
-
* Supports IAM authentication and explicit credentials.
|
|
5
|
-
*/
|
|
6
|
-
import type { SecretProvider, Secret, AWSSecretsManagerConfig } from '../types.js';
|
|
7
|
-
export declare class AWSSecretsManagerProvider implements SecretProvider {
|
|
8
|
-
private config;
|
|
9
|
-
private initialized;
|
|
10
|
-
constructor(config: AWSSecretsManagerConfig);
|
|
11
|
-
initialize(): Promise<void>;
|
|
12
|
-
/**
|
|
13
|
-
* Get a secret from AWS Secrets Manager
|
|
14
|
-
*/
|
|
15
|
-
getSecret(secretName: string): Promise<Secret>;
|
|
16
|
-
/**
|
|
17
|
-
* Check if a secret exists
|
|
18
|
-
*/
|
|
19
|
-
exists(secretName: string): Promise<boolean>;
|
|
20
|
-
/**
|
|
21
|
-
* List secrets (returns secret ARNs)
|
|
22
|
-
*/
|
|
23
|
-
listSecrets(): Promise<string[]>;
|
|
24
|
-
/**
|
|
25
|
-
* Call AWS Secrets Manager API
|
|
26
|
-
*
|
|
27
|
-
* This is a simplified implementation. In production, use @aws-sdk/client-secrets-manager
|
|
28
|
-
*/
|
|
29
|
-
private callAWSAPI;
|
|
30
|
-
destroy(): Promise<void>;
|
|
31
|
-
}
|
|
32
|
-
//# sourceMappingURL=aws.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"aws.d.ts","sourceRoot":"","sources":["../../../src/secrets/providers/aws.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAEnF,qBAAa,yBAA0B,YAAW,cAAc;IAC9D,OAAO,CAAC,MAAM,CAAoC;IAClD,OAAO,CAAC,WAAW,CAAS;gBAEhB,MAAM,EAAE,uBAAuB;IAUrC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAejC;;OAEG;IACG,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAuCpD;;OAEG;IACG,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYlD;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IActC;;;;OAIG;YACW,UAAU;IAelB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AWS Secrets Manager Provider
|
|
3
|
-
*
|
|
4
|
-
* Supports IAM authentication and explicit credentials.
|
|
5
|
-
*/
|
|
6
|
-
export class AWSSecretsManagerProvider {
|
|
7
|
-
config;
|
|
8
|
-
initialized = false;
|
|
9
|
-
constructor(config) {
|
|
10
|
-
this.config = {
|
|
11
|
-
region: config.region ?? process.env.AWS_REGION ?? 'us-east-1',
|
|
12
|
-
accessKeyId: config.accessKeyId ?? process.env.AWS_ACCESS_KEY_ID ?? '',
|
|
13
|
-
secretAccessKey: config.secretAccessKey ?? process.env.AWS_SECRET_ACCESS_KEY ?? '',
|
|
14
|
-
sessionToken: config.sessionToken ?? process.env.AWS_SESSION_TOKEN ?? '',
|
|
15
|
-
useIAMRole: config.useIAMRole ?? false,
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
async initialize() {
|
|
19
|
-
if (this.initialized)
|
|
20
|
-
return;
|
|
21
|
-
// If using IAM role, credentials will be fetched automatically by AWS SDK
|
|
22
|
-
if (!this.config.useIAMRole) {
|
|
23
|
-
if (!this.config.accessKeyId || !this.config.secretAccessKey) {
|
|
24
|
-
throw new Error('AWS Secrets Manager requires accessKeyId and secretAccessKey, or useIAMRole must be true');
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
this.initialized = true;
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Get a secret from AWS Secrets Manager
|
|
31
|
-
*/
|
|
32
|
-
async getSecret(secretName) {
|
|
33
|
-
if (!this.initialized) {
|
|
34
|
-
await this.initialize();
|
|
35
|
-
}
|
|
36
|
-
try {
|
|
37
|
-
// Use AWS SDK v3 style API call via fetch
|
|
38
|
-
const result = await this.callAWSAPI('GetSecretValue', { SecretId: secretName });
|
|
39
|
-
const secretString = String(result.SecretString || '');
|
|
40
|
-
let value;
|
|
41
|
-
// Try to parse as JSON
|
|
42
|
-
try {
|
|
43
|
-
value = JSON.parse(secretString);
|
|
44
|
-
}
|
|
45
|
-
catch {
|
|
46
|
-
value = secretString;
|
|
47
|
-
}
|
|
48
|
-
const metadata = {};
|
|
49
|
-
if (result.VersionId) {
|
|
50
|
-
metadata.version = String(result.VersionId);
|
|
51
|
-
}
|
|
52
|
-
if (result.CreatedDate && typeof result.CreatedDate === 'string') {
|
|
53
|
-
metadata.createdAt = new Date(result.CreatedDate);
|
|
54
|
-
}
|
|
55
|
-
return {
|
|
56
|
-
value,
|
|
57
|
-
metadata,
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
catch (error) {
|
|
61
|
-
if (error instanceof Error && error.message.includes('ResourceNotFoundException')) {
|
|
62
|
-
throw new Error(`Secret not found: ${secretName}`);
|
|
63
|
-
}
|
|
64
|
-
throw error;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Check if a secret exists
|
|
69
|
-
*/
|
|
70
|
-
async exists(secretName) {
|
|
71
|
-
try {
|
|
72
|
-
await this.callAWSAPI('DescribeSecret', { SecretId: secretName });
|
|
73
|
-
return true;
|
|
74
|
-
}
|
|
75
|
-
catch (error) {
|
|
76
|
-
if (error instanceof Error && error.message.includes('ResourceNotFoundException')) {
|
|
77
|
-
return false;
|
|
78
|
-
}
|
|
79
|
-
throw error;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* List secrets (returns secret ARNs)
|
|
84
|
-
*/
|
|
85
|
-
async listSecrets() {
|
|
86
|
-
if (!this.initialized) {
|
|
87
|
-
await this.initialize();
|
|
88
|
-
}
|
|
89
|
-
try {
|
|
90
|
-
const result = await this.callAWSAPI('ListSecrets', {});
|
|
91
|
-
const secretList = result.SecretList;
|
|
92
|
-
return secretList?.map((s) => s.Name) || [];
|
|
93
|
-
}
|
|
94
|
-
catch (error) {
|
|
95
|
-
throw new Error(`Failed to list secrets: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Call AWS Secrets Manager API
|
|
100
|
-
*
|
|
101
|
-
* This is a simplified implementation. In production, use @aws-sdk/client-secrets-manager
|
|
102
|
-
*/
|
|
103
|
-
async callAWSAPI(_action, _params) {
|
|
104
|
-
// This is a placeholder - real implementation would use AWS SDK
|
|
105
|
-
// For now, throw an error indicating AWS SDK is needed
|
|
106
|
-
throw new Error(`AWS Secrets Manager integration requires @aws-sdk/client-secrets-manager package. ` +
|
|
107
|
-
`Install it with: npm install @aws-sdk/client-secrets-manager`);
|
|
108
|
-
// Production implementation would use:
|
|
109
|
-
// import { SecretsManagerClient, GetSecretValueCommand } from '@aws-sdk/client-secrets-manager';
|
|
110
|
-
// const client = new SecretsManagerClient({ region: this.config.region, credentials: this.credentials });
|
|
111
|
-
// const command = new GetSecretValueCommand({ SecretId: secretName });
|
|
112
|
-
// const response = await client.send(command);
|
|
113
|
-
}
|
|
114
|
-
async destroy() {
|
|
115
|
-
this.initialized = false;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
//# sourceMappingURL=aws.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"aws.js","sourceRoot":"","sources":["../../../src/secrets/providers/aws.ts"],"names":[],"mappings":"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"}
|