@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
@@ -0,0 +1,268 @@
1
+ /**
2
+ * Prompt Loader for marktoflow v2.0
3
+ *
4
+ * Loads external prompt files with optional YAML frontmatter for variable definitions.
5
+ * Supports template variable resolution using {{ prompt.variable }} syntax.
6
+ */
7
+ import { readFile } from 'node:fs/promises';
8
+ import { resolve, dirname } from 'node:path';
9
+ import { parse as parseYaml } from 'yaml';
10
+ // ============================================================================
11
+ // Prompt Loading
12
+ // ============================================================================
13
+ const FRONTMATTER_REGEX = /^---\n([\s\S]*?)\n---\n?/;
14
+ /**
15
+ * Load a prompt file with optional YAML frontmatter.
16
+ */
17
+ export async function loadPromptFile(promptPath, basePath) {
18
+ // Resolve path relative to base path if provided
19
+ const resolvedPath = basePath ? resolve(dirname(basePath), promptPath) : resolve(promptPath);
20
+ let content;
21
+ try {
22
+ content = await readFile(resolvedPath, 'utf-8');
23
+ }
24
+ catch (error) {
25
+ throw new Error(`Failed to load prompt file: ${resolvedPath}. ${error}`);
26
+ }
27
+ // Parse frontmatter if present
28
+ const frontmatterMatch = content.match(FRONTMATTER_REGEX);
29
+ let frontmatter = {};
30
+ let promptContent = content;
31
+ if (frontmatterMatch) {
32
+ try {
33
+ frontmatter = parseYaml(frontmatterMatch[1]);
34
+ promptContent = content.slice(frontmatterMatch[0].length).trim();
35
+ }
36
+ catch (error) {
37
+ throw new Error(`Invalid YAML frontmatter in prompt file: ${resolvedPath}. ${error}`);
38
+ }
39
+ }
40
+ // Extract variables
41
+ const variables = {};
42
+ const variablesRaw = frontmatter.variables;
43
+ if (variablesRaw) {
44
+ for (const [name, config] of Object.entries(variablesRaw)) {
45
+ if (typeof config === 'object' && config !== null) {
46
+ const varConfig = config;
47
+ variables[name] = {
48
+ type: varConfig.type || 'string',
49
+ required: varConfig.required,
50
+ default: varConfig.default,
51
+ description: varConfig.description,
52
+ };
53
+ }
54
+ else {
55
+ // Simple type definition
56
+ variables[name] = {
57
+ type: config || 'string',
58
+ required: undefined,
59
+ default: undefined,
60
+ description: undefined,
61
+ };
62
+ }
63
+ }
64
+ }
65
+ return {
66
+ name: frontmatter.name,
67
+ description: frontmatter.description,
68
+ variables,
69
+ content: promptContent,
70
+ rawContent: content,
71
+ filePath: resolvedPath,
72
+ };
73
+ }
74
+ // ============================================================================
75
+ // Template Resolution
76
+ // ============================================================================
77
+ /**
78
+ * Resolve {{ prompt.variable }} templates in a prompt.
79
+ */
80
+ export function resolvePromptTemplate(prompt, inputs, context) {
81
+ // Build resolved variables with defaults
82
+ const resolvedVars = {};
83
+ // Apply defaults first
84
+ for (const [name, config] of Object.entries(prompt.variables)) {
85
+ if (config.default !== undefined) {
86
+ resolvedVars[name] = config.default;
87
+ }
88
+ }
89
+ // Override with provided inputs
90
+ for (const [name, value] of Object.entries(inputs)) {
91
+ resolvedVars[name] = value;
92
+ }
93
+ // Resolve templates in prompt content
94
+ let content = prompt.content;
95
+ // Replace {{ prompt.variable }} patterns
96
+ content = content.replace(/\{\{\s*prompt\.([^}]+)\s*\}\}/g, (_, varPath) => {
97
+ const trimmedPath = varPath.trim();
98
+ const value = getNestedValue(resolvedVars, trimmedPath);
99
+ return serializeValue(value);
100
+ });
101
+ // Also resolve {{ variable }} patterns (for backward compatibility)
102
+ content = content.replace(/\{\{\s*([^}]+)\s*\}\}/g, (match, varPath) => {
103
+ const trimmedPath = varPath.trim();
104
+ // Skip if it doesn't look like a variable reference
105
+ if (trimmedPath.includes('.') && !trimmedPath.startsWith('prompt.')) {
106
+ // Try to resolve from context if available
107
+ if (context) {
108
+ const value = resolveFromContext(trimmedPath, context);
109
+ if (value !== undefined) {
110
+ return serializeValue(value);
111
+ }
112
+ }
113
+ }
114
+ // Try to resolve from prompt inputs
115
+ const value = getNestedValue(resolvedVars, trimmedPath);
116
+ if (value !== undefined) {
117
+ return serializeValue(value);
118
+ }
119
+ // Leave unresolved templates as-is (they may be resolved later)
120
+ return match;
121
+ });
122
+ return {
123
+ content,
124
+ variables: resolvedVars,
125
+ };
126
+ }
127
+ /**
128
+ * Resolve a variable path from execution context.
129
+ */
130
+ function resolveFromContext(path, context) {
131
+ // Handle inputs.* prefix
132
+ if (path.startsWith('inputs.')) {
133
+ const inputPath = path.slice(7);
134
+ return getNestedValue(context.inputs, inputPath);
135
+ }
136
+ // Check variables
137
+ const fromVars = getNestedValue(context.variables, path);
138
+ if (fromVars !== undefined) {
139
+ return fromVars;
140
+ }
141
+ return undefined;
142
+ }
143
+ // ============================================================================
144
+ // Validation
145
+ // ============================================================================
146
+ /**
147
+ * Validate that all required prompt inputs are provided.
148
+ */
149
+ export function validatePromptInputs(prompt, inputs) {
150
+ const errors = [];
151
+ const warnings = [];
152
+ for (const [name, config] of Object.entries(prompt.variables)) {
153
+ const value = inputs[name];
154
+ const hasValue = value !== undefined && value !== null;
155
+ // Check required
156
+ if (config.required && !hasValue && config.default === undefined) {
157
+ errors.push(`Missing required prompt variable: ${name}`);
158
+ continue;
159
+ }
160
+ // Type validation (if value is provided)
161
+ if (hasValue) {
162
+ const typeError = validateType(value, config.type, name);
163
+ if (typeError) {
164
+ errors.push(typeError);
165
+ }
166
+ }
167
+ }
168
+ // Warn about unused inputs
169
+ for (const name of Object.keys(inputs)) {
170
+ if (!prompt.variables[name]) {
171
+ warnings.push(`Unused prompt input: ${name}`);
172
+ }
173
+ }
174
+ return {
175
+ valid: errors.length === 0,
176
+ errors,
177
+ warnings,
178
+ };
179
+ }
180
+ /**
181
+ * Validate a value against an expected type.
182
+ */
183
+ function validateType(value, type, name) {
184
+ switch (type) {
185
+ case 'string':
186
+ if (typeof value !== 'string') {
187
+ return `Expected string for ${name}, got ${typeof value}`;
188
+ }
189
+ break;
190
+ case 'number':
191
+ if (typeof value !== 'number') {
192
+ return `Expected number for ${name}, got ${typeof value}`;
193
+ }
194
+ break;
195
+ case 'boolean':
196
+ if (typeof value !== 'boolean') {
197
+ return `Expected boolean for ${name}, got ${typeof value}`;
198
+ }
199
+ break;
200
+ case 'array':
201
+ if (!Array.isArray(value)) {
202
+ return `Expected array for ${name}, got ${typeof value}`;
203
+ }
204
+ break;
205
+ case 'object':
206
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) {
207
+ return `Expected object for ${name}, got ${Array.isArray(value) ? 'array' : typeof value}`;
208
+ }
209
+ break;
210
+ }
211
+ return null;
212
+ }
213
+ // ============================================================================
214
+ // Helpers
215
+ // ============================================================================
216
+ /**
217
+ * Get a nested value from an object using dot notation.
218
+ */
219
+ function getNestedValue(obj, path) {
220
+ if (obj === null || obj === undefined) {
221
+ return undefined;
222
+ }
223
+ const parts = path.split('.');
224
+ let current = obj;
225
+ for (const part of parts) {
226
+ if (current === null || current === undefined) {
227
+ return undefined;
228
+ }
229
+ if (typeof current === 'object') {
230
+ current = current[part];
231
+ }
232
+ else {
233
+ return undefined;
234
+ }
235
+ }
236
+ return current;
237
+ }
238
+ /**
239
+ * Serialize a value for template interpolation.
240
+ */
241
+ function serializeValue(value) {
242
+ if (value === undefined || value === null) {
243
+ return '';
244
+ }
245
+ if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
246
+ return String(value);
247
+ }
248
+ try {
249
+ return JSON.stringify(value, null, 2);
250
+ }
251
+ catch {
252
+ return String(value);
253
+ }
254
+ }
255
+ /**
256
+ * Extract all variable references from a prompt template.
257
+ */
258
+ export function extractPromptVariables(content) {
259
+ const variables = new Set();
260
+ // Extract {{ prompt.variable }} patterns
261
+ const promptVarRegex = /\{\{\s*prompt\.([^}]+)\s*\}\}/g;
262
+ let match;
263
+ while ((match = promptVarRegex.exec(content)) !== null) {
264
+ variables.add(match[1].trim());
265
+ }
266
+ return Array.from(variables);
267
+ }
268
+ //# sourceMappingURL=prompt-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-loader.js","sourceRoot":"","sources":["../src/prompt-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Message Queue Integration for marktoflow v2.0
3
+ *
4
+ * Supports Redis and RabbitMQ for distributed workflow execution.
5
+ */
6
+ import { EventEmitter } from 'node:events';
7
+ export declare enum MessagePriority {
8
+ LOW = 0,
9
+ NORMAL = 1,
10
+ HIGH = 2,
11
+ CRITICAL = 3
12
+ }
13
+ export declare enum MessageStatus {
14
+ PENDING = "pending",
15
+ PROCESSING = "processing",
16
+ COMPLETED = "completed",
17
+ FAILED = "failed",
18
+ DEAD_LETTER = "dead_letter"
19
+ }
20
+ export interface QueueMessage {
21
+ id: string;
22
+ workflowId: string;
23
+ payload: Record<string, unknown>;
24
+ priority: MessagePriority;
25
+ status: MessageStatus;
26
+ createdAt: Date;
27
+ processedAt?: Date;
28
+ attempts: number;
29
+ maxAttempts: number;
30
+ error?: string;
31
+ metadata: Record<string, unknown>;
32
+ }
33
+ export interface QueueConfig {
34
+ name: string;
35
+ maxSize?: number;
36
+ messageTtl?: number;
37
+ deadLetterQueue?: string;
38
+ retryDelay?: number;
39
+ visibilityTimeout?: number;
40
+ }
41
+ export type MessageHandler = (message: QueueMessage) => Promise<void>;
42
+ export declare abstract class MessageQueue extends EventEmitter {
43
+ abstract connect(): Promise<void>;
44
+ abstract disconnect(): Promise<void>;
45
+ abstract publish(message: QueueMessage, queueName?: string): Promise<string>;
46
+ abstract consume(handler: MessageHandler, queueName?: string, batchSize?: number): Promise<void>;
47
+ abstract acknowledge(messageId: string): Promise<void>;
48
+ abstract reject(messageId: string, requeue?: boolean): Promise<void>;
49
+ abstract getQueueLength(queueName?: string): Promise<number>;
50
+ abstract purge(queueName?: string): Promise<number>;
51
+ abstract stop(): Promise<void>;
52
+ }
53
+ export declare class InMemoryQueue extends MessageQueue {
54
+ private queues;
55
+ private processing;
56
+ private deadLetter;
57
+ private running;
58
+ private config;
59
+ constructor(config?: QueueConfig);
60
+ connect(): Promise<void>;
61
+ disconnect(): Promise<void>;
62
+ private getQueue;
63
+ publish(message: QueueMessage, queueName?: string): Promise<string>;
64
+ consume(handler: MessageHandler, queueName?: string, batchSize?: number): Promise<void>;
65
+ acknowledge(messageId: string): Promise<void>;
66
+ reject(messageId: string, requeue?: boolean): Promise<void>;
67
+ getQueueLength(queueName?: string): Promise<number>;
68
+ purge(queueName?: string): Promise<number>;
69
+ stop(): Promise<void>;
70
+ }
71
+ export declare class RedisQueue extends MessageQueue {
72
+ private client;
73
+ private config;
74
+ private running;
75
+ private redisUrl;
76
+ constructor(redisUrl: string, config?: QueueConfig);
77
+ connect(): Promise<void>;
78
+ disconnect(): Promise<void>;
79
+ private queueKey;
80
+ private processingKey;
81
+ publish(message: QueueMessage, queueName?: string): Promise<string>;
82
+ consume(handler: MessageHandler, queueName?: string, batchSize?: number): Promise<void>;
83
+ acknowledge(messageId: string): Promise<void>;
84
+ reject(messageId: string, requeue?: boolean): Promise<void>;
85
+ getQueueLength(queueName?: string): Promise<number>;
86
+ purge(queueName?: string): Promise<number>;
87
+ stop(): Promise<void>;
88
+ }
89
+ export declare class RabbitMQQueue extends MessageQueue {
90
+ private connection;
91
+ private channel;
92
+ private config;
93
+ private amqpUrl;
94
+ private consumerTag;
95
+ constructor(amqpUrl: string, config?: QueueConfig);
96
+ connect(): Promise<void>;
97
+ disconnect(): Promise<void>;
98
+ publish(message: QueueMessage, queueName?: string): Promise<string>;
99
+ consume(handler: MessageHandler, queueName?: string, batchSize?: number): Promise<void>;
100
+ acknowledge(_messageId: string): Promise<void>;
101
+ reject(_messageId: string, _requeue?: boolean): Promise<void>;
102
+ getQueueLength(queueName?: string): Promise<number>;
103
+ purge(queueName?: string): Promise<number>;
104
+ stop(): Promise<void>;
105
+ }
106
+ export declare class WorkflowQueueManager {
107
+ private queue;
108
+ private workflowCallback?;
109
+ constructor(queue: MessageQueue, workflowCallback?: ((workflowId: string, inputs: Record<string, unknown>) => Promise<any>) | undefined);
110
+ enqueueWorkflow(workflowId: string, inputs?: Record<string, unknown>, priority?: MessagePriority, metadata?: Record<string, unknown>): Promise<string>;
111
+ startWorker(numWorkers?: number): Promise<void>;
112
+ stopWorker(): Promise<void>;
113
+ }
114
+ //# sourceMappingURL=queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"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"}