@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.
Files changed (181) hide show
  1. package/README.md +69 -6
  2. package/dist/built-in-operations.d.ts +2 -136
  3. package/dist/built-in-operations.d.ts.map +1 -1
  4. package/dist/built-in-operations.js +7 -743
  5. package/dist/built-in-operations.js.map +1 -1
  6. package/dist/engine/conditions.d.ts +29 -0
  7. package/dist/engine/conditions.d.ts.map +1 -0
  8. package/dist/engine/conditions.js +109 -0
  9. package/dist/engine/conditions.js.map +1 -0
  10. package/dist/engine/control-flow.d.ts +35 -0
  11. package/dist/engine/control-flow.d.ts.map +1 -0
  12. package/dist/engine/control-flow.js +653 -0
  13. package/dist/engine/control-flow.js.map +1 -0
  14. package/dist/engine/index.d.ts +12 -0
  15. package/dist/engine/index.d.ts.map +1 -0
  16. package/dist/engine/index.js +11 -0
  17. package/dist/engine/index.js.map +1 -0
  18. package/dist/engine/retry.d.ts +35 -0
  19. package/dist/engine/retry.d.ts.map +1 -0
  20. package/dist/engine/retry.js +86 -0
  21. package/dist/engine/retry.js.map +1 -0
  22. package/dist/engine/subworkflow.d.ts +31 -0
  23. package/dist/engine/subworkflow.d.ts.map +1 -0
  24. package/dist/engine/subworkflow.js +240 -0
  25. package/dist/engine/subworkflow.js.map +1 -0
  26. package/dist/engine/types.d.ts +55 -0
  27. package/dist/engine/types.d.ts.map +1 -0
  28. package/dist/engine/types.js +5 -0
  29. package/dist/{secrets → engine}/types.js.map +1 -1
  30. package/dist/engine/variable-resolution.d.ts +29 -0
  31. package/dist/engine/variable-resolution.d.ts.map +1 -0
  32. package/dist/engine/variable-resolution.js +130 -0
  33. package/dist/engine/variable-resolution.js.map +1 -0
  34. package/dist/engine.d.ts +17 -211
  35. package/dist/engine.d.ts.map +1 -1
  36. package/dist/engine.js +80 -1347
  37. package/dist/engine.js.map +1 -1
  38. package/dist/file-operations.js +1 -1
  39. package/dist/file-operations.js.map +1 -1
  40. package/dist/filters/array.d.ts +9 -0
  41. package/dist/filters/array.d.ts.map +1 -0
  42. package/dist/filters/array.js +41 -0
  43. package/dist/filters/array.js.map +1 -0
  44. package/dist/filters/date.d.ts +9 -0
  45. package/dist/filters/date.d.ts.map +1 -0
  46. package/dist/filters/date.js +51 -0
  47. package/dist/filters/date.js.map +1 -0
  48. package/dist/filters/index.d.ts +13 -0
  49. package/dist/filters/index.d.ts.map +1 -0
  50. package/dist/filters/index.js +13 -0
  51. package/dist/filters/index.js.map +1 -0
  52. package/dist/filters/json.d.ts +6 -0
  53. package/dist/filters/json.d.ts.map +1 -0
  54. package/dist/filters/json.js +15 -0
  55. package/dist/filters/json.js.map +1 -0
  56. package/dist/filters/logic.d.ts +8 -0
  57. package/dist/filters/logic.d.ts.map +1 -0
  58. package/dist/filters/logic.js +28 -0
  59. package/dist/filters/logic.js.map +1 -0
  60. package/dist/filters/math.d.ts +13 -0
  61. package/dist/filters/math.d.ts.map +1 -0
  62. package/dist/filters/math.js +39 -0
  63. package/dist/filters/math.js.map +1 -0
  64. package/dist/filters/object.d.ts +11 -0
  65. package/dist/filters/object.d.ts.map +1 -0
  66. package/dist/filters/object.js +64 -0
  67. package/dist/filters/object.js.map +1 -0
  68. package/dist/filters/regex.d.ts +7 -0
  69. package/dist/filters/regex.d.ts.map +1 -0
  70. package/dist/filters/regex.js +38 -0
  71. package/dist/filters/regex.js.map +1 -0
  72. package/dist/filters/string.d.ts +11 -0
  73. package/dist/filters/string.d.ts.map +1 -0
  74. package/dist/filters/string.js +35 -0
  75. package/dist/filters/string.js.map +1 -0
  76. package/dist/filters/type-checks.d.ts +10 -0
  77. package/dist/filters/type-checks.d.ts.map +1 -0
  78. package/dist/filters/type-checks.js +30 -0
  79. package/dist/filters/type-checks.js.map +1 -0
  80. package/dist/index.d.ts +5 -1
  81. package/dist/index.d.ts.map +1 -1
  82. package/dist/index.js +7 -1
  83. package/dist/index.js.map +1 -1
  84. package/dist/nunjucks-filters.d.ts +2 -261
  85. package/dist/nunjucks-filters.d.ts.map +1 -1
  86. package/dist/nunjucks-filters.js +24 -582
  87. package/dist/nunjucks-filters.js.map +1 -1
  88. package/dist/operations/compress.d.ts +6 -0
  89. package/dist/operations/compress.d.ts.map +1 -0
  90. package/dist/operations/compress.js +36 -0
  91. package/dist/operations/compress.js.map +1 -0
  92. package/dist/operations/crypto.d.ts +5 -0
  93. package/dist/operations/crypto.d.ts.map +1 -0
  94. package/dist/operations/crypto.js +61 -0
  95. package/dist/operations/crypto.js.map +1 -0
  96. package/dist/operations/data-ops.d.ts +10 -0
  97. package/dist/operations/data-ops.d.ts.map +1 -0
  98. package/dist/operations/data-ops.js +124 -0
  99. package/dist/operations/data-ops.js.map +1 -0
  100. package/dist/operations/datetime.d.ts +5 -0
  101. package/dist/operations/datetime.d.ts.map +1 -0
  102. package/dist/operations/datetime.js +86 -0
  103. package/dist/operations/datetime.js.map +1 -0
  104. package/dist/operations/extract.d.ts +23 -0
  105. package/dist/operations/extract.d.ts.map +1 -0
  106. package/dist/operations/extract.js +31 -0
  107. package/dist/operations/extract.js.map +1 -0
  108. package/dist/operations/format.d.ts +14 -0
  109. package/dist/operations/format.d.ts.map +1 -0
  110. package/dist/operations/format.js +84 -0
  111. package/dist/operations/format.js.map +1 -0
  112. package/dist/operations/index.d.ts +13 -0
  113. package/dist/operations/index.d.ts.map +1 -0
  114. package/dist/operations/index.js +13 -0
  115. package/dist/operations/index.js.map +1 -0
  116. package/dist/operations/parse.d.ts +5 -0
  117. package/dist/operations/parse.d.ts.map +1 -0
  118. package/dist/operations/parse.js +59 -0
  119. package/dist/operations/parse.js.map +1 -0
  120. package/dist/operations/set.d.ts +21 -0
  121. package/dist/operations/set.d.ts.map +1 -0
  122. package/dist/operations/set.js +25 -0
  123. package/dist/operations/set.js.map +1 -0
  124. package/dist/operations/transform.d.ts +15 -0
  125. package/dist/operations/transform.d.ts.map +1 -0
  126. package/dist/operations/transform.js +110 -0
  127. package/dist/operations/transform.js.map +1 -0
  128. package/dist/parallel.d.ts +114 -0
  129. package/dist/parallel.d.ts.map +1 -0
  130. package/dist/parallel.js +325 -0
  131. package/dist/parallel.js.map +1 -0
  132. package/dist/parser.d.ts.map +1 -1
  133. package/dist/parser.js +2 -0
  134. package/dist/parser.js.map +1 -1
  135. package/dist/sdk-registry.d.ts.map +1 -1
  136. package/dist/sdk-registry.js +9 -3
  137. package/dist/sdk-registry.js.map +1 -1
  138. package/dist/utils/duration.d.ts +23 -0
  139. package/dist/utils/duration.d.ts.map +1 -0
  140. package/dist/utils/duration.js +41 -0
  141. package/dist/utils/duration.js.map +1 -0
  142. package/dist/utils/errors.d.ts +20 -0
  143. package/dist/utils/errors.d.ts.map +1 -0
  144. package/dist/utils/errors.js +37 -0
  145. package/dist/utils/errors.js.map +1 -0
  146. package/dist/utils/index.d.ts +3 -0
  147. package/dist/utils/index.d.ts.map +1 -0
  148. package/dist/utils/index.js +3 -0
  149. package/dist/utils/index.js.map +1 -0
  150. package/dist/workflow-templates.d.ts +80 -0
  151. package/dist/workflow-templates.d.ts.map +1 -0
  152. package/dist/workflow-templates.js +248 -0
  153. package/dist/workflow-templates.js.map +1 -0
  154. package/package.json +30 -5
  155. package/dist/secrets/index.d.ts +0 -12
  156. package/dist/secrets/index.d.ts.map +0 -1
  157. package/dist/secrets/index.js +0 -11
  158. package/dist/secrets/index.js.map +0 -1
  159. package/dist/secrets/providers/aws.d.ts +0 -32
  160. package/dist/secrets/providers/aws.d.ts.map +0 -1
  161. package/dist/secrets/providers/aws.js +0 -118
  162. package/dist/secrets/providers/aws.js.map +0 -1
  163. package/dist/secrets/providers/azure.d.ts +0 -40
  164. package/dist/secrets/providers/azure.d.ts.map +0 -1
  165. package/dist/secrets/providers/azure.js +0 -170
  166. package/dist/secrets/providers/azure.js.map +0 -1
  167. package/dist/secrets/providers/env.d.ts +0 -26
  168. package/dist/secrets/providers/env.d.ts.map +0 -1
  169. package/dist/secrets/providers/env.js +0 -59
  170. package/dist/secrets/providers/env.js.map +0 -1
  171. package/dist/secrets/providers/vault.d.ts +0 -39
  172. package/dist/secrets/providers/vault.d.ts.map +0 -1
  173. package/dist/secrets/providers/vault.js +0 -180
  174. package/dist/secrets/providers/vault.js.map +0 -1
  175. package/dist/secrets/secret-manager.d.ts +0 -72
  176. package/dist/secrets/secret-manager.d.ts.map +0 -1
  177. package/dist/secrets/secret-manager.js +0 -226
  178. package/dist/secrets/secret-manager.js.map +0 -1
  179. package/dist/secrets/types.d.ts +0 -105
  180. package/dist/secrets/types.d.ts.map +0 -1
  181. 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,3 @@
1
+ export { parseDuration } from './duration.js';
2
+ export { errorToString, toError } from './errors.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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,3 @@
1
+ export { parseDuration } from './duration.js';
2
+ export { errorToString, toError } from './errors.js';
3
+ //# sourceMappingURL=index.js.map
@@ -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.3",
4
- "description": "Core engine for marktoflow - parser, executor, state management",
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
- "mcp"
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": "Apache-2.0",
100
+ "license": "AGPL-3.0-only",
76
101
  "publishConfig": {
77
102
  "registry": "https://registry.npmjs.org/"
78
103
  }
@@ -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"}
@@ -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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"}