@marktoflow/core 2.0.0-alpha.3

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 (125) hide show
  1. package/dist/bundle.d.ts +43 -0
  2. package/dist/bundle.d.ts.map +1 -0
  3. package/dist/bundle.js +202 -0
  4. package/dist/bundle.js.map +1 -0
  5. package/dist/config.d.ts +33 -0
  6. package/dist/config.d.ts.map +1 -0
  7. package/dist/config.js +27 -0
  8. package/dist/config.js.map +1 -0
  9. package/dist/costs.d.ts +182 -0
  10. package/dist/costs.d.ts.map +1 -0
  11. package/dist/costs.js +464 -0
  12. package/dist/costs.js.map +1 -0
  13. package/dist/credentials.d.ts +162 -0
  14. package/dist/credentials.d.ts.map +1 -0
  15. package/dist/credentials.js +646 -0
  16. package/dist/credentials.js.map +1 -0
  17. package/dist/engine.d.ts +137 -0
  18. package/dist/engine.d.ts.map +1 -0
  19. package/dist/engine.js +514 -0
  20. package/dist/engine.js.map +1 -0
  21. package/dist/env.d.ts +59 -0
  22. package/dist/env.d.ts.map +1 -0
  23. package/dist/env.js +256 -0
  24. package/dist/env.js.map +1 -0
  25. package/dist/failover.d.ts +43 -0
  26. package/dist/failover.d.ts.map +1 -0
  27. package/dist/failover.js +53 -0
  28. package/dist/failover.js.map +1 -0
  29. package/dist/filewatcher.d.ts +32 -0
  30. package/dist/filewatcher.d.ts.map +1 -0
  31. package/dist/filewatcher.js +92 -0
  32. package/dist/filewatcher.js.map +1 -0
  33. package/dist/index.d.ts +36 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +69 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/logging.d.ts +62 -0
  38. package/dist/logging.d.ts.map +1 -0
  39. package/dist/logging.js +211 -0
  40. package/dist/logging.js.map +1 -0
  41. package/dist/mcp-loader.d.ts +29 -0
  42. package/dist/mcp-loader.d.ts.map +1 -0
  43. package/dist/mcp-loader.js +60 -0
  44. package/dist/mcp-loader.js.map +1 -0
  45. package/dist/metrics.d.ts +19 -0
  46. package/dist/metrics.d.ts.map +1 -0
  47. package/dist/metrics.js +65 -0
  48. package/dist/metrics.js.map +1 -0
  49. package/dist/models.d.ts +419 -0
  50. package/dist/models.d.ts.map +1 -0
  51. package/dist/models.js +111 -0
  52. package/dist/models.js.map +1 -0
  53. package/dist/parser.d.ts +40 -0
  54. package/dist/parser.d.ts.map +1 -0
  55. package/dist/parser.js +287 -0
  56. package/dist/parser.js.map +1 -0
  57. package/dist/plugins.d.ts +105 -0
  58. package/dist/plugins.d.ts.map +1 -0
  59. package/dist/plugins.js +182 -0
  60. package/dist/plugins.js.map +1 -0
  61. package/dist/queue.d.ts +114 -0
  62. package/dist/queue.d.ts.map +1 -0
  63. package/dist/queue.js +385 -0
  64. package/dist/queue.js.map +1 -0
  65. package/dist/rollback.d.ts +117 -0
  66. package/dist/rollback.d.ts.map +1 -0
  67. package/dist/rollback.js +374 -0
  68. package/dist/rollback.js.map +1 -0
  69. package/dist/routing.d.ts +144 -0
  70. package/dist/routing.d.ts.map +1 -0
  71. package/dist/routing.js +457 -0
  72. package/dist/routing.js.map +1 -0
  73. package/dist/scheduler.d.ts +91 -0
  74. package/dist/scheduler.d.ts.map +1 -0
  75. package/dist/scheduler.js +259 -0
  76. package/dist/scheduler.js.map +1 -0
  77. package/dist/script-tool.d.ts +22 -0
  78. package/dist/script-tool.d.ts.map +1 -0
  79. package/dist/script-tool.js +90 -0
  80. package/dist/script-tool.js.map +1 -0
  81. package/dist/sdk-registry.d.ts +81 -0
  82. package/dist/sdk-registry.d.ts.map +1 -0
  83. package/dist/sdk-registry.js +264 -0
  84. package/dist/sdk-registry.js.map +1 -0
  85. package/dist/security.d.ts +155 -0
  86. package/dist/security.d.ts.map +1 -0
  87. package/dist/security.js +362 -0
  88. package/dist/security.js.map +1 -0
  89. package/dist/state.d.ts +67 -0
  90. package/dist/state.d.ts.map +1 -0
  91. package/dist/state.js +276 -0
  92. package/dist/state.js.map +1 -0
  93. package/dist/templates.d.ts +70 -0
  94. package/dist/templates.d.ts.map +1 -0
  95. package/dist/templates.js +244 -0
  96. package/dist/templates.js.map +1 -0
  97. package/dist/tool-base.d.ts +54 -0
  98. package/dist/tool-base.d.ts.map +1 -0
  99. package/dist/tool-base.js +43 -0
  100. package/dist/tool-base.js.map +1 -0
  101. package/dist/tool-registry.d.ts +24 -0
  102. package/dist/tool-registry.d.ts.map +1 -0
  103. package/dist/tool-registry.js +164 -0
  104. package/dist/tool-registry.js.map +1 -0
  105. package/dist/tools/custom-tool.d.ts +16 -0
  106. package/dist/tools/custom-tool.d.ts.map +1 -0
  107. package/dist/tools/custom-tool.js +85 -0
  108. package/dist/tools/custom-tool.js.map +1 -0
  109. package/dist/tools/mcp-tool.d.ts +16 -0
  110. package/dist/tools/mcp-tool.d.ts.map +1 -0
  111. package/dist/tools/mcp-tool.js +98 -0
  112. package/dist/tools/mcp-tool.js.map +1 -0
  113. package/dist/tools/openapi-tool.d.ts +17 -0
  114. package/dist/tools/openapi-tool.d.ts.map +1 -0
  115. package/dist/tools/openapi-tool.js +165 -0
  116. package/dist/tools/openapi-tool.js.map +1 -0
  117. package/dist/trigger-manager.d.ts +26 -0
  118. package/dist/trigger-manager.d.ts.map +1 -0
  119. package/dist/trigger-manager.js +107 -0
  120. package/dist/trigger-manager.js.map +1 -0
  121. package/dist/webhook.d.ts +95 -0
  122. package/dist/webhook.d.ts.map +1 -0
  123. package/dist/webhook.js +261 -0
  124. package/dist/webhook.js.map +1 -0
  125. package/package.json +60 -0
@@ -0,0 +1,419 @@
1
+ /**
2
+ * Core data models for marktoflow v2.0
3
+ *
4
+ * These models define the structure of workflows, steps, and execution context.
5
+ * Uses Zod for runtime validation.
6
+ */
7
+ import { z } from 'zod';
8
+ export declare const StepStatus: {
9
+ readonly PENDING: "pending";
10
+ readonly RUNNING: "running";
11
+ readonly COMPLETED: "completed";
12
+ readonly FAILED: "failed";
13
+ readonly SKIPPED: "skipped";
14
+ };
15
+ export type StepStatus = (typeof StepStatus)[keyof typeof StepStatus];
16
+ export declare const WorkflowStatus: {
17
+ readonly PENDING: "pending";
18
+ readonly RUNNING: "running";
19
+ readonly COMPLETED: "completed";
20
+ readonly FAILED: "failed";
21
+ readonly CANCELLED: "cancelled";
22
+ };
23
+ export type WorkflowStatus = (typeof WorkflowStatus)[keyof typeof WorkflowStatus];
24
+ export declare const TriggerType: {
25
+ readonly MANUAL: "manual";
26
+ readonly SCHEDULE: "schedule";
27
+ readonly WEBHOOK: "webhook";
28
+ readonly EVENT: "event";
29
+ };
30
+ export type TriggerType = (typeof TriggerType)[keyof typeof TriggerType];
31
+ export declare const WorkflowMetadataSchema: z.ZodObject<{
32
+ id: z.ZodString;
33
+ name: z.ZodString;
34
+ version: z.ZodDefault<z.ZodString>;
35
+ description: z.ZodOptional<z.ZodString>;
36
+ author: z.ZodOptional<z.ZodString>;
37
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
38
+ }, "strip", z.ZodTypeAny, {
39
+ id: string;
40
+ name: string;
41
+ version: string;
42
+ description?: string | undefined;
43
+ author?: string | undefined;
44
+ tags?: string[] | undefined;
45
+ }, {
46
+ id: string;
47
+ name: string;
48
+ version?: string | undefined;
49
+ description?: string | undefined;
50
+ author?: string | undefined;
51
+ tags?: string[] | undefined;
52
+ }>;
53
+ export declare const ToolConfigSchema: z.ZodObject<{
54
+ sdk: z.ZodString;
55
+ auth: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
56
+ options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
57
+ }, "strip", z.ZodTypeAny, {
58
+ sdk: string;
59
+ options?: Record<string, unknown> | undefined;
60
+ auth?: Record<string, string> | undefined;
61
+ }, {
62
+ sdk: string;
63
+ options?: Record<string, unknown> | undefined;
64
+ auth?: Record<string, string> | undefined;
65
+ }>;
66
+ export declare const ErrorHandlingSchema: z.ZodObject<{
67
+ action: z.ZodDefault<z.ZodEnum<["continue", "stop", "rollback"]>>;
68
+ maxRetries: z.ZodDefault<z.ZodNumber>;
69
+ retryDelaySeconds: z.ZodDefault<z.ZodNumber>;
70
+ fallbackAction: z.ZodOptional<z.ZodString>;
71
+ }, "strip", z.ZodTypeAny, {
72
+ action: "continue" | "stop" | "rollback";
73
+ maxRetries: number;
74
+ retryDelaySeconds: number;
75
+ fallbackAction?: string | undefined;
76
+ }, {
77
+ action?: "continue" | "stop" | "rollback" | undefined;
78
+ maxRetries?: number | undefined;
79
+ retryDelaySeconds?: number | undefined;
80
+ fallbackAction?: string | undefined;
81
+ }>;
82
+ export declare const WorkflowStepSchema: z.ZodObject<{
83
+ id: z.ZodString;
84
+ name: z.ZodOptional<z.ZodString>;
85
+ action: z.ZodString;
86
+ inputs: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
87
+ outputVariable: z.ZodOptional<z.ZodString>;
88
+ conditions: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
89
+ errorHandling: z.ZodOptional<z.ZodObject<{
90
+ action: z.ZodDefault<z.ZodEnum<["continue", "stop", "rollback"]>>;
91
+ maxRetries: z.ZodDefault<z.ZodNumber>;
92
+ retryDelaySeconds: z.ZodDefault<z.ZodNumber>;
93
+ fallbackAction: z.ZodOptional<z.ZodString>;
94
+ }, "strip", z.ZodTypeAny, {
95
+ action: "continue" | "stop" | "rollback";
96
+ maxRetries: number;
97
+ retryDelaySeconds: number;
98
+ fallbackAction?: string | undefined;
99
+ }, {
100
+ action?: "continue" | "stop" | "rollback" | undefined;
101
+ maxRetries?: number | undefined;
102
+ retryDelaySeconds?: number | undefined;
103
+ fallbackAction?: string | undefined;
104
+ }>>;
105
+ timeout: z.ZodOptional<z.ZodNumber>;
106
+ }, "strip", z.ZodTypeAny, {
107
+ id: string;
108
+ action: string;
109
+ inputs: Record<string, unknown>;
110
+ name?: string | undefined;
111
+ outputVariable?: string | undefined;
112
+ conditions?: string[] | undefined;
113
+ errorHandling?: {
114
+ action: "continue" | "stop" | "rollback";
115
+ maxRetries: number;
116
+ retryDelaySeconds: number;
117
+ fallbackAction?: string | undefined;
118
+ } | undefined;
119
+ timeout?: number | undefined;
120
+ }, {
121
+ id: string;
122
+ action: string;
123
+ name?: string | undefined;
124
+ inputs?: Record<string, unknown> | undefined;
125
+ outputVariable?: string | undefined;
126
+ conditions?: string[] | undefined;
127
+ errorHandling?: {
128
+ action?: "continue" | "stop" | "rollback" | undefined;
129
+ maxRetries?: number | undefined;
130
+ retryDelaySeconds?: number | undefined;
131
+ fallbackAction?: string | undefined;
132
+ } | undefined;
133
+ timeout?: number | undefined;
134
+ }>;
135
+ export declare const TriggerSchema: z.ZodObject<{
136
+ type: z.ZodEnum<["manual", "schedule", "webhook", "event"]>;
137
+ enabled: z.ZodDefault<z.ZodBoolean>;
138
+ config: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
139
+ }, "strip", z.ZodTypeAny, {
140
+ type: "manual" | "schedule" | "webhook" | "event";
141
+ enabled: boolean;
142
+ config: Record<string, unknown>;
143
+ }, {
144
+ type: "manual" | "schedule" | "webhook" | "event";
145
+ enabled?: boolean | undefined;
146
+ config?: Record<string, unknown> | undefined;
147
+ }>;
148
+ export declare const WorkflowInputSchema: z.ZodObject<{
149
+ type: z.ZodEnum<["string", "number", "boolean", "array", "object"]>;
150
+ required: z.ZodDefault<z.ZodBoolean>;
151
+ default: z.ZodOptional<z.ZodUnknown>;
152
+ description: z.ZodOptional<z.ZodString>;
153
+ validation: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
154
+ }, "strip", z.ZodTypeAny, {
155
+ type: "string" | "number" | "boolean" | "object" | "array";
156
+ required: boolean;
157
+ description?: string | undefined;
158
+ validation?: Record<string, unknown> | undefined;
159
+ default?: unknown;
160
+ }, {
161
+ type: "string" | "number" | "boolean" | "object" | "array";
162
+ description?: string | undefined;
163
+ validation?: Record<string, unknown> | undefined;
164
+ required?: boolean | undefined;
165
+ default?: unknown;
166
+ }>;
167
+ export declare const WorkflowSchema: z.ZodObject<{
168
+ metadata: z.ZodObject<{
169
+ id: z.ZodString;
170
+ name: z.ZodString;
171
+ version: z.ZodDefault<z.ZodString>;
172
+ description: z.ZodOptional<z.ZodString>;
173
+ author: z.ZodOptional<z.ZodString>;
174
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
175
+ }, "strip", z.ZodTypeAny, {
176
+ id: string;
177
+ name: string;
178
+ version: string;
179
+ description?: string | undefined;
180
+ author?: string | undefined;
181
+ tags?: string[] | undefined;
182
+ }, {
183
+ id: string;
184
+ name: string;
185
+ version?: string | undefined;
186
+ description?: string | undefined;
187
+ author?: string | undefined;
188
+ tags?: string[] | undefined;
189
+ }>;
190
+ tools: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
191
+ sdk: z.ZodString;
192
+ auth: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
193
+ options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
194
+ }, "strip", z.ZodTypeAny, {
195
+ sdk: string;
196
+ options?: Record<string, unknown> | undefined;
197
+ auth?: Record<string, string> | undefined;
198
+ }, {
199
+ sdk: string;
200
+ options?: Record<string, unknown> | undefined;
201
+ auth?: Record<string, string> | undefined;
202
+ }>>>;
203
+ inputs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
204
+ type: z.ZodEnum<["string", "number", "boolean", "array", "object"]>;
205
+ required: z.ZodDefault<z.ZodBoolean>;
206
+ default: z.ZodOptional<z.ZodUnknown>;
207
+ description: z.ZodOptional<z.ZodString>;
208
+ validation: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
209
+ }, "strip", z.ZodTypeAny, {
210
+ type: "string" | "number" | "boolean" | "object" | "array";
211
+ required: boolean;
212
+ description?: string | undefined;
213
+ validation?: Record<string, unknown> | undefined;
214
+ default?: unknown;
215
+ }, {
216
+ type: "string" | "number" | "boolean" | "object" | "array";
217
+ description?: string | undefined;
218
+ validation?: Record<string, unknown> | undefined;
219
+ required?: boolean | undefined;
220
+ default?: unknown;
221
+ }>>>;
222
+ triggers: z.ZodOptional<z.ZodArray<z.ZodObject<{
223
+ type: z.ZodEnum<["manual", "schedule", "webhook", "event"]>;
224
+ enabled: z.ZodDefault<z.ZodBoolean>;
225
+ config: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
226
+ }, "strip", z.ZodTypeAny, {
227
+ type: "manual" | "schedule" | "webhook" | "event";
228
+ enabled: boolean;
229
+ config: Record<string, unknown>;
230
+ }, {
231
+ type: "manual" | "schedule" | "webhook" | "event";
232
+ enabled?: boolean | undefined;
233
+ config?: Record<string, unknown> | undefined;
234
+ }>, "many">>;
235
+ steps: z.ZodArray<z.ZodObject<{
236
+ id: z.ZodString;
237
+ name: z.ZodOptional<z.ZodString>;
238
+ action: z.ZodString;
239
+ inputs: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
240
+ outputVariable: z.ZodOptional<z.ZodString>;
241
+ conditions: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
242
+ errorHandling: z.ZodOptional<z.ZodObject<{
243
+ action: z.ZodDefault<z.ZodEnum<["continue", "stop", "rollback"]>>;
244
+ maxRetries: z.ZodDefault<z.ZodNumber>;
245
+ retryDelaySeconds: z.ZodDefault<z.ZodNumber>;
246
+ fallbackAction: z.ZodOptional<z.ZodString>;
247
+ }, "strip", z.ZodTypeAny, {
248
+ action: "continue" | "stop" | "rollback";
249
+ maxRetries: number;
250
+ retryDelaySeconds: number;
251
+ fallbackAction?: string | undefined;
252
+ }, {
253
+ action?: "continue" | "stop" | "rollback" | undefined;
254
+ maxRetries?: number | undefined;
255
+ retryDelaySeconds?: number | undefined;
256
+ fallbackAction?: string | undefined;
257
+ }>>;
258
+ timeout: z.ZodOptional<z.ZodNumber>;
259
+ }, "strip", z.ZodTypeAny, {
260
+ id: string;
261
+ action: string;
262
+ inputs: Record<string, unknown>;
263
+ name?: string | undefined;
264
+ outputVariable?: string | undefined;
265
+ conditions?: string[] | undefined;
266
+ errorHandling?: {
267
+ action: "continue" | "stop" | "rollback";
268
+ maxRetries: number;
269
+ retryDelaySeconds: number;
270
+ fallbackAction?: string | undefined;
271
+ } | undefined;
272
+ timeout?: number | undefined;
273
+ }, {
274
+ id: string;
275
+ action: string;
276
+ name?: string | undefined;
277
+ inputs?: Record<string, unknown> | undefined;
278
+ outputVariable?: string | undefined;
279
+ conditions?: string[] | undefined;
280
+ errorHandling?: {
281
+ action?: "continue" | "stop" | "rollback" | undefined;
282
+ maxRetries?: number | undefined;
283
+ retryDelaySeconds?: number | undefined;
284
+ fallbackAction?: string | undefined;
285
+ } | undefined;
286
+ timeout?: number | undefined;
287
+ }>, "many">;
288
+ rawContent: z.ZodOptional<z.ZodString>;
289
+ }, "strip", z.ZodTypeAny, {
290
+ metadata: {
291
+ id: string;
292
+ name: string;
293
+ version: string;
294
+ description?: string | undefined;
295
+ author?: string | undefined;
296
+ tags?: string[] | undefined;
297
+ };
298
+ tools: Record<string, {
299
+ sdk: string;
300
+ options?: Record<string, unknown> | undefined;
301
+ auth?: Record<string, string> | undefined;
302
+ }>;
303
+ steps: {
304
+ id: string;
305
+ action: string;
306
+ inputs: Record<string, unknown>;
307
+ name?: string | undefined;
308
+ outputVariable?: string | undefined;
309
+ conditions?: string[] | undefined;
310
+ errorHandling?: {
311
+ action: "continue" | "stop" | "rollback";
312
+ maxRetries: number;
313
+ retryDelaySeconds: number;
314
+ fallbackAction?: string | undefined;
315
+ } | undefined;
316
+ timeout?: number | undefined;
317
+ }[];
318
+ inputs?: Record<string, {
319
+ type: "string" | "number" | "boolean" | "object" | "array";
320
+ required: boolean;
321
+ description?: string | undefined;
322
+ validation?: Record<string, unknown> | undefined;
323
+ default?: unknown;
324
+ }> | undefined;
325
+ triggers?: {
326
+ type: "manual" | "schedule" | "webhook" | "event";
327
+ enabled: boolean;
328
+ config: Record<string, unknown>;
329
+ }[] | undefined;
330
+ rawContent?: string | undefined;
331
+ }, {
332
+ metadata: {
333
+ id: string;
334
+ name: string;
335
+ version?: string | undefined;
336
+ description?: string | undefined;
337
+ author?: string | undefined;
338
+ tags?: string[] | undefined;
339
+ };
340
+ steps: {
341
+ id: string;
342
+ action: string;
343
+ name?: string | undefined;
344
+ inputs?: Record<string, unknown> | undefined;
345
+ outputVariable?: string | undefined;
346
+ conditions?: string[] | undefined;
347
+ errorHandling?: {
348
+ action?: "continue" | "stop" | "rollback" | undefined;
349
+ maxRetries?: number | undefined;
350
+ retryDelaySeconds?: number | undefined;
351
+ fallbackAction?: string | undefined;
352
+ } | undefined;
353
+ timeout?: number | undefined;
354
+ }[];
355
+ inputs?: Record<string, {
356
+ type: "string" | "number" | "boolean" | "object" | "array";
357
+ description?: string | undefined;
358
+ validation?: Record<string, unknown> | undefined;
359
+ required?: boolean | undefined;
360
+ default?: unknown;
361
+ }> | undefined;
362
+ tools?: Record<string, {
363
+ sdk: string;
364
+ options?: Record<string, unknown> | undefined;
365
+ auth?: Record<string, string> | undefined;
366
+ }> | undefined;
367
+ triggers?: {
368
+ type: "manual" | "schedule" | "webhook" | "event";
369
+ enabled?: boolean | undefined;
370
+ config?: Record<string, unknown> | undefined;
371
+ }[] | undefined;
372
+ rawContent?: string | undefined;
373
+ }>;
374
+ export type WorkflowMetadata = z.infer<typeof WorkflowMetadataSchema>;
375
+ export type ToolConfig = z.infer<typeof ToolConfigSchema>;
376
+ export type ErrorHandling = z.infer<typeof ErrorHandlingSchema>;
377
+ export type WorkflowStep = z.infer<typeof WorkflowStepSchema>;
378
+ export type Trigger = z.infer<typeof TriggerSchema>;
379
+ export type WorkflowInput = z.infer<typeof WorkflowInputSchema>;
380
+ export type Workflow = z.infer<typeof WorkflowSchema>;
381
+ export interface ExecutionContext {
382
+ workflowId: string;
383
+ runId: string;
384
+ variables: Record<string, unknown>;
385
+ inputs: Record<string, unknown>;
386
+ startedAt: Date;
387
+ currentStepIndex: number;
388
+ status: WorkflowStatus;
389
+ stepMetadata: Record<string, {
390
+ status: string;
391
+ error?: string;
392
+ retryCount: number;
393
+ }>;
394
+ [key: string]: unknown;
395
+ }
396
+ export interface StepResult {
397
+ stepId: string;
398
+ status: StepStatus;
399
+ output: unknown;
400
+ error: string | undefined;
401
+ startedAt: Date;
402
+ completedAt: Date;
403
+ duration: number;
404
+ retryCount: number;
405
+ }
406
+ export interface WorkflowResult {
407
+ workflowId: string;
408
+ runId: string;
409
+ status: WorkflowStatus;
410
+ stepResults: StepResult[];
411
+ output: Record<string, unknown>;
412
+ error: string | undefined;
413
+ startedAt: Date;
414
+ completedAt: Date;
415
+ duration: number;
416
+ }
417
+ export declare function createExecutionContext(workflow: Workflow, inputs?: Record<string, unknown>): ExecutionContext;
418
+ export declare function createStepResult(stepId: string, status: StepStatus, output: unknown, startedAt: Date, retryCount?: number, error?: string): StepResult;
419
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,UAAU;;;;;;CAMb,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;AAEtE,eAAO,MAAM,cAAc;;;;;;CAMjB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC;AAElF,eAAO,MAAM,WAAW;;;;;CAKd,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC;AAMzE,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;EAOjC,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;EAI3B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;EAK9B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAS7B,CAAC;AAEH,eAAO,MAAM,aAAa;;;;;;;;;;;;EAIxB,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;EAM9B,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOzB,CAAC;AAMH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACtE,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AACpD,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAMtD,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,SAAS,EAAE,IAAI,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,cAAc,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,SAAS,EAAE,IAAI,CAAC;IAChB,WAAW,EAAE,IAAI,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,cAAc,CAAC;IACvB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,SAAS,EAAE,IAAI,CAAC;IAChB,WAAW,EAAE,IAAI,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAMD,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,QAAQ,EAClB,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACnC,gBAAgB,CAWlB;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,OAAO,EACf,SAAS,EAAE,IAAI,EACf,UAAU,SAAI,EACd,KAAK,CAAC,EAAE,MAAM,GACb,UAAU,CAYZ"}
package/dist/models.js ADDED
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Core data models for marktoflow v2.0
3
+ *
4
+ * These models define the structure of workflows, steps, and execution context.
5
+ * Uses Zod for runtime validation.
6
+ */
7
+ import { z } from 'zod';
8
+ // ============================================================================
9
+ // Enums
10
+ // ============================================================================
11
+ export const StepStatus = {
12
+ PENDING: 'pending',
13
+ RUNNING: 'running',
14
+ COMPLETED: 'completed',
15
+ FAILED: 'failed',
16
+ SKIPPED: 'skipped',
17
+ };
18
+ export const WorkflowStatus = {
19
+ PENDING: 'pending',
20
+ RUNNING: 'running',
21
+ COMPLETED: 'completed',
22
+ FAILED: 'failed',
23
+ CANCELLED: 'cancelled',
24
+ };
25
+ export const TriggerType = {
26
+ MANUAL: 'manual',
27
+ SCHEDULE: 'schedule',
28
+ WEBHOOK: 'webhook',
29
+ EVENT: 'event',
30
+ };
31
+ // ============================================================================
32
+ // Zod Schemas
33
+ // ============================================================================
34
+ export const WorkflowMetadataSchema = z.object({
35
+ id: z.string(),
36
+ name: z.string(),
37
+ version: z.string().default('1.0.0'),
38
+ description: z.string().optional(),
39
+ author: z.string().optional(),
40
+ tags: z.array(z.string()).optional(),
41
+ });
42
+ export const ToolConfigSchema = z.object({
43
+ sdk: z.string(), // e.g., "@slack/web-api"
44
+ auth: z.record(z.string()).optional(), // e.g., { token: "${SLACK_TOKEN}" }
45
+ options: z.record(z.unknown()).optional(),
46
+ });
47
+ export const ErrorHandlingSchema = z.object({
48
+ action: z.enum(['continue', 'stop', 'rollback']).default('stop'),
49
+ maxRetries: z.number().default(3),
50
+ retryDelaySeconds: z.number().default(1.0),
51
+ fallbackAction: z.string().optional(),
52
+ });
53
+ export const WorkflowStepSchema = z.object({
54
+ id: z.string(),
55
+ name: z.string().optional(),
56
+ action: z.string(), // e.g., "slack.chat.postMessage"
57
+ inputs: z.record(z.unknown()).default({}),
58
+ outputVariable: z.string().optional(),
59
+ conditions: z.array(z.string()).optional(),
60
+ errorHandling: ErrorHandlingSchema.optional(),
61
+ timeout: z.number().optional(), // seconds
62
+ });
63
+ export const TriggerSchema = z.object({
64
+ type: z.enum(['manual', 'schedule', 'webhook', 'event']),
65
+ enabled: z.boolean().default(true),
66
+ config: z.record(z.unknown()).default({}),
67
+ });
68
+ export const WorkflowInputSchema = z.object({
69
+ type: z.enum(['string', 'number', 'boolean', 'array', 'object']),
70
+ required: z.boolean().default(false),
71
+ default: z.unknown().optional(),
72
+ description: z.string().optional(),
73
+ validation: z.record(z.unknown()).optional(),
74
+ });
75
+ export const WorkflowSchema = z.object({
76
+ metadata: WorkflowMetadataSchema,
77
+ tools: z.record(ToolConfigSchema).default({}),
78
+ inputs: z.record(WorkflowInputSchema).optional(),
79
+ triggers: z.array(TriggerSchema).optional(),
80
+ steps: z.array(WorkflowStepSchema),
81
+ rawContent: z.string().optional(), // Original markdown content
82
+ });
83
+ // ============================================================================
84
+ // Helper Functions
85
+ // ============================================================================
86
+ export function createExecutionContext(workflow, inputs = {}) {
87
+ return {
88
+ workflowId: workflow.metadata.id,
89
+ runId: crypto.randomUUID(),
90
+ variables: {},
91
+ inputs,
92
+ startedAt: new Date(),
93
+ currentStepIndex: 0,
94
+ status: WorkflowStatus.PENDING,
95
+ stepMetadata: {},
96
+ };
97
+ }
98
+ export function createStepResult(stepId, status, output, startedAt, retryCount = 0, error) {
99
+ const completedAt = new Date();
100
+ return {
101
+ stepId,
102
+ status,
103
+ output,
104
+ error,
105
+ startedAt,
106
+ completedAt,
107
+ duration: completedAt.getTime() - startedAt.getTime(),
108
+ retryCount,
109
+ };
110
+ }
111
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
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 { Workflow } from './models.js';
8
+ export interface ParseResult {
9
+ workflow: Workflow;
10
+ warnings: string[];
11
+ }
12
+ export interface ParseOptions {
13
+ /** Validate the workflow after parsing */
14
+ validate?: boolean;
15
+ /** Resolve environment variables in the workflow */
16
+ resolveEnv?: boolean;
17
+ }
18
+ export declare class ParseError extends Error {
19
+ readonly line?: number | undefined;
20
+ readonly details?: unknown | undefined;
21
+ constructor(message: string, line?: number | undefined, details?: unknown | undefined);
22
+ }
23
+ /**
24
+ * Parse a workflow from a markdown file.
25
+ */
26
+ export declare function parseFile(path: string, options?: ParseOptions): Promise<ParseResult>;
27
+ /**
28
+ * Parse a workflow from markdown content.
29
+ */
30
+ export declare function parseContent(content: string, options?: ParseOptions): ParseResult;
31
+ /**
32
+ * Extract variable references from a template string.
33
+ * Returns list of variable names like ["var1", "var2"].
34
+ */
35
+ export declare function extractVariableReferences(template: string): string[];
36
+ /**
37
+ * Validate that all variable references in steps are defined.
38
+ */
39
+ export declare function validateVariableReferences(workflow: Workflow): string[];
40
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EACL,QAAQ,EAOT,MAAM,aAAa,CAAC;AAMrB,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oDAAoD;IACpD,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,qBAAa,UAAW,SAAQ,KAAK;aAGjB,IAAI,CAAC,EAAE,MAAM;aACb,OAAO,CAAC,EAAE,OAAO;gBAFjC,OAAO,EAAE,MAAM,EACC,IAAI,CAAC,EAAE,MAAM,YAAA,EACb,OAAO,CAAC,EAAE,OAAO,YAAA;CAKpC;AASD;;GAEG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAG9F;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,WAAW,CAwCrF;AAgND;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAUpE;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAAE,CA8BvE"}