@marktoflow/core 2.0.0-alpha.12

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 (142) hide show
  1. package/README.md +307 -0
  2. package/dist/bundle.d.ts +43 -0
  3. package/dist/bundle.d.ts.map +1 -0
  4. package/dist/bundle.js +202 -0
  5. package/dist/bundle.js.map +1 -0
  6. package/dist/config.d.ts +33 -0
  7. package/dist/config.d.ts.map +1 -0
  8. package/dist/config.js +27 -0
  9. package/dist/config.js.map +1 -0
  10. package/dist/core-tools.d.ts +39 -0
  11. package/dist/core-tools.d.ts.map +1 -0
  12. package/dist/core-tools.js +58 -0
  13. package/dist/core-tools.js.map +1 -0
  14. package/dist/costs.d.ts +182 -0
  15. package/dist/costs.d.ts.map +1 -0
  16. package/dist/costs.js +464 -0
  17. package/dist/costs.js.map +1 -0
  18. package/dist/credentials.d.ts +162 -0
  19. package/dist/credentials.d.ts.map +1 -0
  20. package/dist/credentials.js +646 -0
  21. package/dist/credentials.js.map +1 -0
  22. package/dist/engine.d.ts +243 -0
  23. package/dist/engine.d.ts.map +1 -0
  24. package/dist/engine.js +1453 -0
  25. package/dist/engine.js.map +1 -0
  26. package/dist/env.d.ts +59 -0
  27. package/dist/env.d.ts.map +1 -0
  28. package/dist/env.js +256 -0
  29. package/dist/env.js.map +1 -0
  30. package/dist/failover.d.ts +43 -0
  31. package/dist/failover.d.ts.map +1 -0
  32. package/dist/failover.js +53 -0
  33. package/dist/failover.js.map +1 -0
  34. package/dist/filewatcher.d.ts +32 -0
  35. package/dist/filewatcher.d.ts.map +1 -0
  36. package/dist/filewatcher.js +92 -0
  37. package/dist/filewatcher.js.map +1 -0
  38. package/dist/index.d.ts +40 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +77 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/logging.d.ts +62 -0
  43. package/dist/logging.d.ts.map +1 -0
  44. package/dist/logging.js +211 -0
  45. package/dist/logging.js.map +1 -0
  46. package/dist/mcp-loader.d.ts +29 -0
  47. package/dist/mcp-loader.d.ts.map +1 -0
  48. package/dist/mcp-loader.js +60 -0
  49. package/dist/mcp-loader.js.map +1 -0
  50. package/dist/metrics.d.ts +19 -0
  51. package/dist/metrics.d.ts.map +1 -0
  52. package/dist/metrics.js +65 -0
  53. package/dist/metrics.js.map +1 -0
  54. package/dist/models.d.ts +1686 -0
  55. package/dist/models.d.ts.map +1 -0
  56. package/dist/models.js +333 -0
  57. package/dist/models.js.map +1 -0
  58. package/dist/parser.d.ts +40 -0
  59. package/dist/parser.d.ts.map +1 -0
  60. package/dist/parser.js +532 -0
  61. package/dist/parser.js.map +1 -0
  62. package/dist/permissions.d.ts +49 -0
  63. package/dist/permissions.d.ts.map +1 -0
  64. package/dist/permissions.js +286 -0
  65. package/dist/permissions.js.map +1 -0
  66. package/dist/plugins.d.ts +105 -0
  67. package/dist/plugins.d.ts.map +1 -0
  68. package/dist/plugins.js +182 -0
  69. package/dist/plugins.js.map +1 -0
  70. package/dist/prompt-loader.d.ts +47 -0
  71. package/dist/prompt-loader.d.ts.map +1 -0
  72. package/dist/prompt-loader.js +268 -0
  73. package/dist/prompt-loader.js.map +1 -0
  74. package/dist/queue.d.ts +114 -0
  75. package/dist/queue.d.ts.map +1 -0
  76. package/dist/queue.js +385 -0
  77. package/dist/queue.js.map +1 -0
  78. package/dist/rollback.d.ts +117 -0
  79. package/dist/rollback.d.ts.map +1 -0
  80. package/dist/rollback.js +374 -0
  81. package/dist/rollback.js.map +1 -0
  82. package/dist/routing.d.ts +144 -0
  83. package/dist/routing.d.ts.map +1 -0
  84. package/dist/routing.js +457 -0
  85. package/dist/routing.js.map +1 -0
  86. package/dist/scheduler.d.ts +91 -0
  87. package/dist/scheduler.d.ts.map +1 -0
  88. package/dist/scheduler.js +259 -0
  89. package/dist/scheduler.js.map +1 -0
  90. package/dist/script-tool.d.ts +22 -0
  91. package/dist/script-tool.d.ts.map +1 -0
  92. package/dist/script-tool.js +90 -0
  93. package/dist/script-tool.js.map +1 -0
  94. package/dist/sdk-registry.d.ts +94 -0
  95. package/dist/sdk-registry.d.ts.map +1 -0
  96. package/dist/sdk-registry.js +328 -0
  97. package/dist/sdk-registry.js.map +1 -0
  98. package/dist/security.d.ts +155 -0
  99. package/dist/security.d.ts.map +1 -0
  100. package/dist/security.js +362 -0
  101. package/dist/security.js.map +1 -0
  102. package/dist/state.d.ts +67 -0
  103. package/dist/state.d.ts.map +1 -0
  104. package/dist/state.js +276 -0
  105. package/dist/state.js.map +1 -0
  106. package/dist/templates.d.ts +70 -0
  107. package/dist/templates.d.ts.map +1 -0
  108. package/dist/templates.js +244 -0
  109. package/dist/templates.js.map +1 -0
  110. package/dist/tool-base.d.ts +54 -0
  111. package/dist/tool-base.d.ts.map +1 -0
  112. package/dist/tool-base.js +43 -0
  113. package/dist/tool-base.js.map +1 -0
  114. package/dist/tool-registry.d.ts +24 -0
  115. package/dist/tool-registry.d.ts.map +1 -0
  116. package/dist/tool-registry.js +164 -0
  117. package/dist/tool-registry.js.map +1 -0
  118. package/dist/tools/custom-tool.d.ts +16 -0
  119. package/dist/tools/custom-tool.d.ts.map +1 -0
  120. package/dist/tools/custom-tool.js +85 -0
  121. package/dist/tools/custom-tool.js.map +1 -0
  122. package/dist/tools/mcp-tool.d.ts +16 -0
  123. package/dist/tools/mcp-tool.d.ts.map +1 -0
  124. package/dist/tools/mcp-tool.js +98 -0
  125. package/dist/tools/mcp-tool.js.map +1 -0
  126. package/dist/tools/openapi-tool.d.ts +17 -0
  127. package/dist/tools/openapi-tool.d.ts.map +1 -0
  128. package/dist/tools/openapi-tool.js +165 -0
  129. package/dist/tools/openapi-tool.js.map +1 -0
  130. package/dist/trigger-manager.d.ts +26 -0
  131. package/dist/trigger-manager.d.ts.map +1 -0
  132. package/dist/trigger-manager.js +107 -0
  133. package/dist/trigger-manager.js.map +1 -0
  134. package/dist/webhook.d.ts +95 -0
  135. package/dist/webhook.d.ts.map +1 -0
  136. package/dist/webhook.js +261 -0
  137. package/dist/webhook.js.map +1 -0
  138. package/dist/workflow-tools.d.ts +102 -0
  139. package/dist/workflow-tools.d.ts.map +1 -0
  140. package/dist/workflow-tools.js +130 -0
  141. package/dist/workflow-tools.js.map +1 -0
  142. package/package.json +62 -0
package/dist/parser.js ADDED
@@ -0,0 +1,532 @@
1
+ /**
2
+ * Workflow Parser for marktoflow v2.0
3
+ *
4
+ * Parses markdown workflow files with YAML frontmatter.
5
+ * Extracts workflow metadata, tool configurations, and step definitions.
6
+ */
7
+ import { readFile } from 'node:fs/promises';
8
+ import { parse as parseYaml } from 'yaml';
9
+ import { WorkflowSchema, WorkflowStepSchema, ToolConfigSchema, } from './models.js';
10
+ export class ParseError extends Error {
11
+ line;
12
+ details;
13
+ constructor(message, line, details) {
14
+ super(message);
15
+ this.line = line;
16
+ this.details = details;
17
+ this.name = 'ParseError';
18
+ }
19
+ }
20
+ // ============================================================================
21
+ // Parser Implementation
22
+ // ============================================================================
23
+ const FRONTMATTER_REGEX = /^---\n([\s\S]*?)\n---/;
24
+ const STEP_CODE_BLOCK_REGEX = /```ya?ml\n([\s\S]*?)```/g;
25
+ /**
26
+ * Parse a workflow from a markdown file.
27
+ */
28
+ export async function parseFile(path, options = {}) {
29
+ const content = await readFile(path, 'utf-8');
30
+ return parseContent(content, options);
31
+ }
32
+ /**
33
+ * Parse a workflow from markdown content.
34
+ */
35
+ export function parseContent(content, options = {}) {
36
+ const { validate = true, resolveEnv = true } = options;
37
+ const warnings = [];
38
+ // Extract frontmatter
39
+ const frontmatterMatch = content.match(FRONTMATTER_REGEX);
40
+ if (!frontmatterMatch) {
41
+ throw new ParseError('No YAML frontmatter found. Workflow must start with ---');
42
+ }
43
+ const frontmatterYaml = frontmatterMatch[1];
44
+ let frontmatter;
45
+ try {
46
+ frontmatter = parseYaml(frontmatterYaml);
47
+ }
48
+ catch (error) {
49
+ throw new ParseError('Invalid YAML in frontmatter', undefined, error);
50
+ }
51
+ // Extract markdown body (after frontmatter)
52
+ const markdownBody = content.slice(frontmatterMatch[0].length).trim();
53
+ // Parse workflow structure
54
+ const workflow = buildWorkflow(frontmatter, markdownBody, warnings);
55
+ // Resolve environment variables
56
+ if (resolveEnv) {
57
+ resolveEnvironmentVariables(workflow);
58
+ }
59
+ // Validate with Zod
60
+ if (validate) {
61
+ const result = WorkflowSchema.safeParse(workflow);
62
+ if (!result.success) {
63
+ const issues = result.error.issues.map((i) => `${i.path.join('.')}: ${i.message}`);
64
+ throw new ParseError(`Workflow validation failed:\n${issues.join('\n')}`);
65
+ }
66
+ }
67
+ return { workflow, warnings };
68
+ }
69
+ /**
70
+ * Build a Workflow object from parsed frontmatter and markdown body.
71
+ */
72
+ function buildWorkflow(frontmatter, markdownBody, warnings) {
73
+ // Extract metadata
74
+ const workflowMeta = frontmatter.workflow || {};
75
+ const metadata = {
76
+ id: workflowMeta.id || 'unnamed',
77
+ name: workflowMeta.name || 'Unnamed Workflow',
78
+ version: workflowMeta.version || '1.0.0',
79
+ description: workflowMeta.description,
80
+ author: workflowMeta.author,
81
+ tags: workflowMeta.tags,
82
+ };
83
+ // Extract tools
84
+ const toolsRaw = frontmatter.tools || {};
85
+ const tools = {};
86
+ for (const [name, config] of Object.entries(toolsRaw)) {
87
+ const toolResult = ToolConfigSchema.safeParse(config);
88
+ if (toolResult.success) {
89
+ tools[name] = toolResult.data;
90
+ }
91
+ else {
92
+ warnings.push(`Invalid tool configuration for '${name}': ${toolResult.error.message}`);
93
+ }
94
+ }
95
+ // Extract inputs (validated later by Zod)
96
+ const inputsRaw = frontmatter.inputs;
97
+ const inputs = inputsRaw;
98
+ // Extract triggers (validated later by Zod)
99
+ const triggersRaw = frontmatter.triggers;
100
+ const triggers = triggersRaw?.map((t) => ({
101
+ type: t.type,
102
+ enabled: t.enabled !== false,
103
+ config: t.config || {},
104
+ }));
105
+ // Extract steps from frontmatter or markdown body
106
+ let steps = [];
107
+ if (frontmatter.steps && Array.isArray(frontmatter.steps)) {
108
+ // Steps defined in frontmatter
109
+ steps = parseStepsFromFrontmatter(frontmatter.steps, warnings);
110
+ }
111
+ else {
112
+ // Steps defined in markdown code blocks
113
+ steps = parseStepsFromMarkdown(markdownBody, warnings);
114
+ }
115
+ // Extract workflow-level permissions
116
+ const permissionsRaw = frontmatter.permissions;
117
+ const permissions = permissionsRaw ? normalizePermissions(permissionsRaw) : undefined;
118
+ // Extract default agent/model
119
+ const defaultAgent = (frontmatter.default_agent || frontmatter.defaultAgent);
120
+ const defaultModel = (frontmatter.default_model || frontmatter.defaultModel);
121
+ return {
122
+ metadata,
123
+ tools,
124
+ inputs,
125
+ triggers,
126
+ steps,
127
+ rawContent: markdownBody,
128
+ permissions,
129
+ defaultAgent,
130
+ defaultModel,
131
+ };
132
+ }
133
+ /**
134
+ * Parse steps from frontmatter array.
135
+ */
136
+ function parseStepsFromFrontmatter(stepsArray, warnings) {
137
+ const steps = [];
138
+ for (let i = 0; i < stepsArray.length; i++) {
139
+ const stepRaw = stepsArray[i];
140
+ const step = normalizeStep(stepRaw, i);
141
+ const result = WorkflowStepSchema.safeParse(step);
142
+ if (result.success) {
143
+ steps.push(result.data);
144
+ }
145
+ else {
146
+ warnings.push(`Invalid step at index ${i}: ${result.error.message}`);
147
+ }
148
+ }
149
+ return steps;
150
+ }
151
+ /**
152
+ * Parse steps from markdown code blocks.
153
+ */
154
+ function parseStepsFromMarkdown(markdown, warnings) {
155
+ const steps = [];
156
+ let stepIndex = 0;
157
+ // Find all YAML code blocks
158
+ let match;
159
+ while ((match = STEP_CODE_BLOCK_REGEX.exec(markdown)) !== null) {
160
+ const yamlContent = match[1];
161
+ try {
162
+ const stepRaw = parseYaml(yamlContent);
163
+ // Skip non-step code blocks
164
+ // Check for action, workflow, or control flow fields
165
+ const isActionStep = !!stepRaw.action;
166
+ const isWorkflowStep = !!stepRaw.workflow;
167
+ const isControlFlowStep = stepRaw.type === 'for_each' ||
168
+ stepRaw.type === 'if' ||
169
+ stepRaw.type === 'while' ||
170
+ stepRaw.type === 'switch' ||
171
+ stepRaw.type === 'parallel' ||
172
+ stepRaw.type === 'try' ||
173
+ stepRaw.type === 'map' ||
174
+ stepRaw.type === 'filter' ||
175
+ stepRaw.type === 'reduce' ||
176
+ // Also detect by structure (for implicit type detection)
177
+ (stepRaw.items && stepRaw.steps) || // for_each/while
178
+ (stepRaw.condition && (stepRaw.then || stepRaw.else)) || // if
179
+ (stepRaw.expression && stepRaw.cases) || // switch
180
+ stepRaw.branches; // parallel
181
+ if (!isActionStep && !isWorkflowStep && !isControlFlowStep) {
182
+ continue;
183
+ }
184
+ const step = normalizeStep(stepRaw, stepIndex);
185
+ const result = WorkflowStepSchema.safeParse(step);
186
+ if (result.success) {
187
+ steps.push(result.data);
188
+ stepIndex++;
189
+ }
190
+ else {
191
+ warnings.push(`Invalid step in markdown: ${result.error.message}`);
192
+ }
193
+ }
194
+ catch (error) {
195
+ warnings.push(`Failed to parse YAML code block: ${error}`);
196
+ }
197
+ }
198
+ return steps;
199
+ }
200
+ /**
201
+ * Normalize permissions object, converting snake_case to camelCase.
202
+ */
203
+ function normalizePermissions(raw) {
204
+ if (!raw || typeof raw !== 'object') {
205
+ return undefined;
206
+ }
207
+ const obj = raw;
208
+ return {
209
+ read: obj.read,
210
+ write: obj.write,
211
+ execute: obj.execute,
212
+ allowedCommands: obj.allowed_commands ?? obj.allowedCommands,
213
+ blockedCommands: obj.blocked_commands ?? obj.blockedCommands,
214
+ allowedDirectories: obj.allowed_directories ?? obj.allowedDirectories,
215
+ blockedPaths: obj.blocked_paths ?? obj.blockedPaths,
216
+ network: obj.network,
217
+ allowedHosts: obj.allowed_hosts ?? obj.allowedHosts,
218
+ maxFileSize: obj.max_file_size ?? obj.maxFileSize,
219
+ };
220
+ }
221
+ /**
222
+ * Normalize subagent config, converting snake_case to camelCase.
223
+ */
224
+ function normalizeSubagentConfig(raw) {
225
+ if (!raw || typeof raw !== 'object') {
226
+ return undefined;
227
+ }
228
+ const obj = raw;
229
+ return {
230
+ model: obj.model,
231
+ maxTurns: obj.max_turns ?? obj.maxTurns,
232
+ systemPrompt: obj.system_prompt ?? obj.systemPrompt,
233
+ tools: obj.tools,
234
+ };
235
+ }
236
+ /**
237
+ * Normalize a step object, converting snake_case to camelCase and detecting step type.
238
+ */
239
+ function normalizeStep(raw, index) {
240
+ const base = {
241
+ id: raw.id || `step-${index + 1}`,
242
+ name: raw.name,
243
+ conditions: raw.conditions,
244
+ timeout: raw.timeout,
245
+ outputVariable: raw.output_variable || raw.outputVariable,
246
+ // Per-step model/agent configuration
247
+ model: raw.model,
248
+ agent: raw.agent,
249
+ // Permission restrictions
250
+ permissions: normalizePermissions(raw.permissions),
251
+ };
252
+ // Detect or use explicit type
253
+ let type = raw.type;
254
+ if (!type) {
255
+ // Type inference for backward compatibility
256
+ if (raw.action) {
257
+ type = 'action';
258
+ }
259
+ else if (raw.workflow) {
260
+ type = 'workflow';
261
+ }
262
+ else if (raw.condition && (raw.then || raw.else || raw.steps)) {
263
+ type = 'if';
264
+ }
265
+ else if (raw.expression && raw.cases) {
266
+ type = 'switch';
267
+ }
268
+ else if (raw.items && raw.steps) {
269
+ type = raw.condition ? 'while' : 'for_each';
270
+ }
271
+ else if (raw.items && raw.expression && !raw.steps) {
272
+ type = 'map';
273
+ }
274
+ else if (raw.items && raw.condition && !raw.steps) {
275
+ type = 'filter';
276
+ }
277
+ else if (raw.items && (raw.accumulator_variable || raw.accumulatorVariable)) {
278
+ type = 'reduce';
279
+ }
280
+ else if (raw.branches) {
281
+ type = 'parallel';
282
+ }
283
+ else if (raw.try || raw.catch) {
284
+ type = 'try';
285
+ }
286
+ }
287
+ // Build step based on type
288
+ switch (type) {
289
+ case 'action':
290
+ return {
291
+ ...base,
292
+ type: 'action',
293
+ action: raw.action,
294
+ inputs: raw.inputs || {},
295
+ errorHandling: normalizeErrorHandling(raw.error_handling || raw.errorHandling || raw.on_error),
296
+ // External prompt file support
297
+ prompt: raw.prompt,
298
+ promptInputs: raw.prompt_inputs || raw.promptInputs,
299
+ };
300
+ case 'workflow':
301
+ return {
302
+ ...base,
303
+ type: 'workflow',
304
+ workflow: raw.workflow,
305
+ inputs: raw.inputs || {},
306
+ errorHandling: normalizeErrorHandling(raw.error_handling || raw.errorHandling || raw.on_error),
307
+ // Sub-agent execution support
308
+ useSubagent: raw.use_subagent ?? raw.useSubagent ?? false,
309
+ subagentConfig: normalizeSubagentConfig(raw.subagent_config || raw.subagentConfig),
310
+ };
311
+ case 'if':
312
+ return {
313
+ ...base,
314
+ type: 'if',
315
+ condition: raw.condition,
316
+ then: raw.then ? normalizeSteps(raw.then) : undefined,
317
+ else: raw.else ? normalizeSteps(raw.else) : undefined,
318
+ steps: raw.steps ? normalizeSteps(raw.steps) : undefined,
319
+ };
320
+ case 'switch':
321
+ return {
322
+ ...base,
323
+ type: 'switch',
324
+ expression: raw.expression,
325
+ cases: normalizeCases(raw.cases),
326
+ default: raw.default
327
+ ? normalizeSteps(raw.default)
328
+ : undefined,
329
+ };
330
+ case 'for_each':
331
+ return {
332
+ ...base,
333
+ type: 'for_each',
334
+ items: raw.items,
335
+ itemVariable: raw.item_variable || raw.itemVariable || 'item',
336
+ indexVariable: raw.index_variable || raw.indexVariable,
337
+ steps: normalizeSteps(raw.steps),
338
+ errorHandling: normalizeErrorHandling(raw.error_handling || raw.errorHandling || raw.on_error),
339
+ };
340
+ case 'while':
341
+ return {
342
+ ...base,
343
+ type: 'while',
344
+ condition: raw.condition,
345
+ maxIterations: raw.max_iterations || raw.maxIterations || 100,
346
+ steps: normalizeSteps(raw.steps),
347
+ errorHandling: normalizeErrorHandling(raw.error_handling || raw.errorHandling || raw.on_error),
348
+ };
349
+ case 'map':
350
+ return {
351
+ ...base,
352
+ type: 'map',
353
+ items: raw.items,
354
+ itemVariable: raw.item_variable || raw.itemVariable || 'item',
355
+ expression: raw.expression,
356
+ };
357
+ case 'filter':
358
+ return {
359
+ ...base,
360
+ type: 'filter',
361
+ items: raw.items,
362
+ itemVariable: raw.item_variable || raw.itemVariable || 'item',
363
+ condition: raw.condition,
364
+ };
365
+ case 'reduce':
366
+ return {
367
+ ...base,
368
+ type: 'reduce',
369
+ items: raw.items,
370
+ itemVariable: raw.item_variable || raw.itemVariable || 'item',
371
+ accumulatorVariable: raw.accumulator_variable || raw.accumulatorVariable || 'accumulator',
372
+ initialValue: raw.initial_value || raw.initialValue,
373
+ expression: raw.expression,
374
+ };
375
+ case 'parallel':
376
+ return {
377
+ ...base,
378
+ type: 'parallel',
379
+ branches: normalizeBranches(raw.branches),
380
+ maxConcurrent: raw.max_concurrent || raw.maxConcurrent,
381
+ onError: raw.on_error || raw.onError || 'stop',
382
+ };
383
+ case 'try':
384
+ return {
385
+ ...base,
386
+ type: 'try',
387
+ try: normalizeSteps(raw.try),
388
+ catch: raw.catch
389
+ ? normalizeSteps(raw.catch)
390
+ : undefined,
391
+ finally: raw.finally
392
+ ? normalizeSteps(raw.finally)
393
+ : undefined,
394
+ };
395
+ default:
396
+ // Fallback for backward compatibility
397
+ return {
398
+ ...base,
399
+ action: raw.action,
400
+ workflow: raw.workflow,
401
+ inputs: raw.inputs || {},
402
+ errorHandling: normalizeErrorHandling(raw.error_handling || raw.errorHandling || raw.on_error),
403
+ };
404
+ }
405
+ }
406
+ /**
407
+ * Normalize an array of steps recursively.
408
+ */
409
+ function normalizeSteps(steps) {
410
+ return steps.map((step, index) => normalizeStep(step, index));
411
+ }
412
+ /**
413
+ * Normalize switch cases (Record<string, steps[]>).
414
+ */
415
+ function normalizeCases(cases) {
416
+ const normalized = {};
417
+ for (const [key, value] of Object.entries(cases)) {
418
+ if (Array.isArray(value)) {
419
+ normalized[key] = normalizeSteps(value);
420
+ }
421
+ }
422
+ return normalized;
423
+ }
424
+ /**
425
+ * Normalize parallel branches.
426
+ */
427
+ function normalizeBranches(branches) {
428
+ return branches.map((branch, index) => ({
429
+ id: branch.id || `branch-${index + 1}`,
430
+ name: branch.name,
431
+ steps: normalizeSteps(branch.steps),
432
+ }));
433
+ }
434
+ /**
435
+ * Normalize error handling configuration.
436
+ */
437
+ function normalizeErrorHandling(raw) {
438
+ if (!raw || typeof raw !== 'object') {
439
+ return undefined;
440
+ }
441
+ const obj = raw;
442
+ return {
443
+ action: obj.action,
444
+ maxRetries: obj.max_retries ?? obj.maxRetries,
445
+ retryDelaySeconds: obj.retry_delay_seconds ?? obj.retryDelaySeconds,
446
+ fallbackAction: obj.fallback_action ?? obj.fallbackAction,
447
+ };
448
+ }
449
+ /**
450
+ * Resolve environment variable references in the workflow.
451
+ * Replaces ${VAR_NAME} with process.env.VAR_NAME.
452
+ */
453
+ function resolveEnvironmentVariables(workflow) {
454
+ const resolve = (value) => {
455
+ if (typeof value === 'string') {
456
+ return value.replace(/\$\{([^}]+)\}/g, (_, varName) => {
457
+ return process.env[varName] || '';
458
+ });
459
+ }
460
+ if (Array.isArray(value)) {
461
+ return value.map(resolve);
462
+ }
463
+ if (value && typeof value === 'object') {
464
+ const result = {};
465
+ for (const [k, v] of Object.entries(value)) {
466
+ result[k] = resolve(v);
467
+ }
468
+ return result;
469
+ }
470
+ return value;
471
+ };
472
+ // Resolve in tools
473
+ for (const toolConfig of Object.values(workflow.tools)) {
474
+ if (toolConfig.auth) {
475
+ toolConfig.auth = resolve(toolConfig.auth);
476
+ }
477
+ if (toolConfig.options) {
478
+ toolConfig.options = resolve(toolConfig.options);
479
+ }
480
+ }
481
+ // Resolve in inputs defaults
482
+ if (workflow.inputs) {
483
+ for (const input of Object.values(workflow.inputs)) {
484
+ if (input.default !== undefined) {
485
+ input.default = resolve(input.default);
486
+ }
487
+ }
488
+ }
489
+ }
490
+ /**
491
+ * Extract variable references from a template string.
492
+ * Returns list of variable names like ["var1", "var2"].
493
+ */
494
+ export function extractVariableReferences(template) {
495
+ const varRegex = /\{\{([^}]+)\}\}/g;
496
+ const matches = [];
497
+ let match;
498
+ while ((match = varRegex.exec(template)) !== null) {
499
+ matches.push(match[1].trim());
500
+ }
501
+ return matches;
502
+ }
503
+ /**
504
+ * Validate that all variable references in steps are defined.
505
+ */
506
+ export function validateVariableReferences(workflow) {
507
+ const errors = [];
508
+ const definedVars = new Set();
509
+ // Add input variables
510
+ if (workflow.inputs) {
511
+ for (const name of Object.keys(workflow.inputs)) {
512
+ definedVars.add(`inputs.${name}`);
513
+ }
514
+ }
515
+ // Check each step
516
+ for (const step of workflow.steps) {
517
+ // Check input values for variable references
518
+ const inputJson = JSON.stringify(step.inputs);
519
+ const refs = extractVariableReferences(inputJson);
520
+ for (const ref of refs) {
521
+ if (!definedVars.has(ref) && !ref.startsWith('inputs.')) {
522
+ errors.push(`Step '${step.id}' references undefined variable: ${ref}`);
523
+ }
524
+ }
525
+ // Add output variable to defined set
526
+ if (step.outputVariable) {
527
+ definedVars.add(step.outputVariable);
528
+ }
529
+ }
530
+ return errors;
531
+ }
532
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Permissions module for marktoflow v2.0
3
+ *
4
+ * Provides permission merging and enforcement utilities for step-level
5
+ * and workflow-level permission restrictions.
6
+ */
7
+ import { Permissions } from './models.js';
8
+ export interface EffectivePermissions {
9
+ read: string[] | boolean;
10
+ write: string[] | boolean;
11
+ execute: string[] | boolean;
12
+ allowedCommands: string[];
13
+ blockedCommands: string[];
14
+ allowedDirectories: string[];
15
+ blockedPaths: string[];
16
+ network: boolean;
17
+ allowedHosts: string[];
18
+ maxFileSize: number | undefined;
19
+ }
20
+ export interface PermissionCheckResult {
21
+ allowed: boolean;
22
+ reason?: string;
23
+ }
24
+ export type OperationType = 'read' | 'write' | 'execute' | 'network';
25
+ /**
26
+ * Merge workflow-level and step-level permissions.
27
+ * Step permissions override workflow permissions, with most restrictive winning.
28
+ */
29
+ export declare function mergePermissions(workflow?: Permissions, step?: Permissions): EffectivePermissions;
30
+ /**
31
+ * Check if an operation is permitted.
32
+ */
33
+ export declare function checkPermission(perms: EffectivePermissions, operation: OperationType, target?: string): PermissionCheckResult;
34
+ export interface SecurityPolicy {
35
+ allowFileRead: (path: string) => PermissionCheckResult;
36
+ allowFileWrite: (path: string) => PermissionCheckResult;
37
+ allowCommand: (command: string) => PermissionCheckResult;
38
+ allowNetwork: (host: string) => PermissionCheckResult;
39
+ maxFileSize: number | undefined;
40
+ }
41
+ /**
42
+ * Convert EffectivePermissions to a SecurityPolicy for use with hooks.
43
+ */
44
+ export declare function toSecurityPolicy(perms: EffectivePermissions): SecurityPolicy;
45
+ /**
46
+ * Create default (permissive) permissions.
47
+ */
48
+ export declare function createDefaultPermissions(): EffectivePermissions;
49
+ //# sourceMappingURL=permissions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../src/permissions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAO1C,MAAM,WAAW,oBAAoB;IAEnC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACzB,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAG1B,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAC5B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;IAG1B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,YAAY,EAAE,MAAM,EAAE,CAAC;IAGvB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IAGvB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;AAMrE;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,CAAC,EAAE,WAAW,EACtB,IAAI,CAAC,EAAE,WAAW,GACjB,oBAAoB,CA0BtB;AAqED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,oBAAoB,EAC3B,SAAS,EAAE,aAAa,EACxB,MAAM,CAAC,EAAE,MAAM,GACd,qBAAqB,CAiBvB;AAwLD,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,qBAAqB,CAAC;IACvD,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,qBAAqB,CAAC;IACxD,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,qBAAqB,CAAC;IACzD,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,qBAAqB,CAAC;IACtD,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,oBAAoB,GAAG,cAAc,CAQ5E;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,oBAAoB,CAa/D"}