@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.
- package/dist/bundle.d.ts +43 -0
- package/dist/bundle.d.ts.map +1 -0
- package/dist/bundle.js +202 -0
- package/dist/bundle.js.map +1 -0
- package/dist/config.d.ts +33 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +27 -0
- package/dist/config.js.map +1 -0
- package/dist/costs.d.ts +182 -0
- package/dist/costs.d.ts.map +1 -0
- package/dist/costs.js +464 -0
- package/dist/costs.js.map +1 -0
- package/dist/credentials.d.ts +162 -0
- package/dist/credentials.d.ts.map +1 -0
- package/dist/credentials.js +646 -0
- package/dist/credentials.js.map +1 -0
- package/dist/engine.d.ts +137 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +514 -0
- package/dist/engine.js.map +1 -0
- package/dist/env.d.ts +59 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +256 -0
- package/dist/env.js.map +1 -0
- package/dist/failover.d.ts +43 -0
- package/dist/failover.d.ts.map +1 -0
- package/dist/failover.js +53 -0
- package/dist/failover.js.map +1 -0
- package/dist/filewatcher.d.ts +32 -0
- package/dist/filewatcher.d.ts.map +1 -0
- package/dist/filewatcher.js +92 -0
- package/dist/filewatcher.js.map +1 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +69 -0
- package/dist/index.js.map +1 -0
- package/dist/logging.d.ts +62 -0
- package/dist/logging.d.ts.map +1 -0
- package/dist/logging.js +211 -0
- package/dist/logging.js.map +1 -0
- package/dist/mcp-loader.d.ts +29 -0
- package/dist/mcp-loader.d.ts.map +1 -0
- package/dist/mcp-loader.js +60 -0
- package/dist/mcp-loader.js.map +1 -0
- package/dist/metrics.d.ts +19 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +65 -0
- package/dist/metrics.js.map +1 -0
- package/dist/models.d.ts +419 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +111 -0
- package/dist/models.js.map +1 -0
- package/dist/parser.d.ts +40 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +287 -0
- package/dist/parser.js.map +1 -0
- package/dist/plugins.d.ts +105 -0
- package/dist/plugins.d.ts.map +1 -0
- package/dist/plugins.js +182 -0
- package/dist/plugins.js.map +1 -0
- package/dist/queue.d.ts +114 -0
- package/dist/queue.d.ts.map +1 -0
- package/dist/queue.js +385 -0
- package/dist/queue.js.map +1 -0
- package/dist/rollback.d.ts +117 -0
- package/dist/rollback.d.ts.map +1 -0
- package/dist/rollback.js +374 -0
- package/dist/rollback.js.map +1 -0
- package/dist/routing.d.ts +144 -0
- package/dist/routing.d.ts.map +1 -0
- package/dist/routing.js +457 -0
- package/dist/routing.js.map +1 -0
- package/dist/scheduler.d.ts +91 -0
- package/dist/scheduler.d.ts.map +1 -0
- package/dist/scheduler.js +259 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/script-tool.d.ts +22 -0
- package/dist/script-tool.d.ts.map +1 -0
- package/dist/script-tool.js +90 -0
- package/dist/script-tool.js.map +1 -0
- package/dist/sdk-registry.d.ts +81 -0
- package/dist/sdk-registry.d.ts.map +1 -0
- package/dist/sdk-registry.js +264 -0
- package/dist/sdk-registry.js.map +1 -0
- package/dist/security.d.ts +155 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +362 -0
- package/dist/security.js.map +1 -0
- package/dist/state.d.ts +67 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +276 -0
- package/dist/state.js.map +1 -0
- package/dist/templates.d.ts +70 -0
- package/dist/templates.d.ts.map +1 -0
- package/dist/templates.js +244 -0
- package/dist/templates.js.map +1 -0
- package/dist/tool-base.d.ts +54 -0
- package/dist/tool-base.d.ts.map +1 -0
- package/dist/tool-base.js +43 -0
- package/dist/tool-base.js.map +1 -0
- package/dist/tool-registry.d.ts +24 -0
- package/dist/tool-registry.d.ts.map +1 -0
- package/dist/tool-registry.js +164 -0
- package/dist/tool-registry.js.map +1 -0
- package/dist/tools/custom-tool.d.ts +16 -0
- package/dist/tools/custom-tool.d.ts.map +1 -0
- package/dist/tools/custom-tool.js +85 -0
- package/dist/tools/custom-tool.js.map +1 -0
- package/dist/tools/mcp-tool.d.ts +16 -0
- package/dist/tools/mcp-tool.d.ts.map +1 -0
- package/dist/tools/mcp-tool.js +98 -0
- package/dist/tools/mcp-tool.js.map +1 -0
- package/dist/tools/openapi-tool.d.ts +17 -0
- package/dist/tools/openapi-tool.d.ts.map +1 -0
- package/dist/tools/openapi-tool.js +165 -0
- package/dist/tools/openapi-tool.js.map +1 -0
- package/dist/trigger-manager.d.ts +26 -0
- package/dist/trigger-manager.d.ts.map +1 -0
- package/dist/trigger-manager.js +107 -0
- package/dist/trigger-manager.js.map +1 -0
- package/dist/webhook.d.ts +95 -0
- package/dist/webhook.d.ts.map +1 -0
- package/dist/webhook.js +261 -0
- package/dist/webhook.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scheduler for marktoflow v2.0
|
|
3
|
+
*
|
|
4
|
+
* Handles cron-based scheduling of workflow execution.
|
|
5
|
+
*/
|
|
6
|
+
// ============================================================================
|
|
7
|
+
// Cron Parser
|
|
8
|
+
// ============================================================================
|
|
9
|
+
export class CronParser {
|
|
10
|
+
/**
|
|
11
|
+
* Parse a cron expression into component values.
|
|
12
|
+
* Format: minute hour day month weekday
|
|
13
|
+
* Special values: * (any), * /N (every N), N-M (range), N,M (list)
|
|
14
|
+
*/
|
|
15
|
+
static parse(expression) {
|
|
16
|
+
const parts = expression.trim().split(/\s+/);
|
|
17
|
+
if (parts.length !== 5) {
|
|
18
|
+
throw new Error(`Invalid cron expression: ${expression}. Expected 5 fields.`);
|
|
19
|
+
}
|
|
20
|
+
const ranges = {
|
|
21
|
+
minute: [0, 59],
|
|
22
|
+
hour: [0, 23],
|
|
23
|
+
day: [1, 31],
|
|
24
|
+
month: [1, 12],
|
|
25
|
+
weekday: [0, 6],
|
|
26
|
+
};
|
|
27
|
+
const fieldNames = ['minute', 'hour', 'day', 'month', 'weekday'];
|
|
28
|
+
const result = {
|
|
29
|
+
minute: [],
|
|
30
|
+
hour: [],
|
|
31
|
+
day: [],
|
|
32
|
+
month: [],
|
|
33
|
+
weekday: [],
|
|
34
|
+
};
|
|
35
|
+
for (let i = 0; i < fieldNames.length; i++) {
|
|
36
|
+
const name = fieldNames[i];
|
|
37
|
+
const [min, max] = ranges[name];
|
|
38
|
+
result[name] = this.parseField(parts[i], min, max);
|
|
39
|
+
}
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
static parseField(field, minVal, maxVal) {
|
|
43
|
+
const values = new Set();
|
|
44
|
+
for (const part of field.split(',')) {
|
|
45
|
+
if (part === '*') {
|
|
46
|
+
for (let i = minVal; i <= maxVal; i++) {
|
|
47
|
+
values.add(i);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else if (part.includes('/')) {
|
|
51
|
+
const [base, stepStr] = part.split('/');
|
|
52
|
+
const step = parseInt(stepStr, 10);
|
|
53
|
+
const start = base === '*' ? minVal : parseInt(base, 10);
|
|
54
|
+
for (let i = start; i <= maxVal; i += step) {
|
|
55
|
+
values.add(i);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
else if (part.includes('-')) {
|
|
59
|
+
const [startStr, endStr] = part.split('-');
|
|
60
|
+
const start = parseInt(startStr, 10);
|
|
61
|
+
const end = parseInt(endStr, 10);
|
|
62
|
+
for (let i = start; i <= end; i++) {
|
|
63
|
+
values.add(i);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
values.add(parseInt(part, 10));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return Array.from(values).sort((a, b) => a - b);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Check if a date matches a cron expression.
|
|
74
|
+
*/
|
|
75
|
+
static matches(expression, date) {
|
|
76
|
+
try {
|
|
77
|
+
const fields = this.parse(expression);
|
|
78
|
+
return (fields.minute.includes(date.getMinutes()) &&
|
|
79
|
+
fields.hour.includes(date.getHours()) &&
|
|
80
|
+
fields.day.includes(date.getDate()) &&
|
|
81
|
+
fields.month.includes(date.getMonth() + 1) &&
|
|
82
|
+
fields.weekday.includes(date.getDay()));
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Calculate the next run time for a cron expression.
|
|
90
|
+
*/
|
|
91
|
+
static nextRun(expression, after) {
|
|
92
|
+
const start = after || new Date();
|
|
93
|
+
try {
|
|
94
|
+
this.parse(expression);
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
// Start from next minute
|
|
100
|
+
const current = new Date(start);
|
|
101
|
+
current.setSeconds(0, 0);
|
|
102
|
+
current.setMinutes(current.getMinutes() + 1);
|
|
103
|
+
// Search up to 1 year ahead
|
|
104
|
+
const maxIterations = 366 * 24 * 60;
|
|
105
|
+
for (let i = 0; i < maxIterations; i++) {
|
|
106
|
+
if (this.matches(expression, current)) {
|
|
107
|
+
return current;
|
|
108
|
+
}
|
|
109
|
+
current.setMinutes(current.getMinutes() + 1);
|
|
110
|
+
}
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// ============================================================================
|
|
115
|
+
// Scheduler Implementation
|
|
116
|
+
// ============================================================================
|
|
117
|
+
export class Scheduler {
|
|
118
|
+
checkIntervalMs;
|
|
119
|
+
jobs = new Map();
|
|
120
|
+
running = false;
|
|
121
|
+
intervalId = null;
|
|
122
|
+
callbacks = [];
|
|
123
|
+
constructor(checkIntervalMs = 60000) {
|
|
124
|
+
this.checkIntervalMs = checkIntervalMs;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Add a scheduled job.
|
|
128
|
+
*/
|
|
129
|
+
addJob(job) {
|
|
130
|
+
// Calculate next run time
|
|
131
|
+
job.nextRun = CronParser.nextRun(job.schedule);
|
|
132
|
+
this.jobs.set(job.id, job);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Remove a scheduled job.
|
|
136
|
+
*/
|
|
137
|
+
removeJob(jobId) {
|
|
138
|
+
return this.jobs.delete(jobId);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Get a scheduled job by ID.
|
|
142
|
+
*/
|
|
143
|
+
getJob(jobId) {
|
|
144
|
+
return this.jobs.get(jobId);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* List all scheduled jobs.
|
|
148
|
+
*/
|
|
149
|
+
listJobs() {
|
|
150
|
+
return Array.from(this.jobs.values());
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Register a callback for when a job is due.
|
|
154
|
+
*/
|
|
155
|
+
onJobDue(callback) {
|
|
156
|
+
this.callbacks.push(callback);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Start the scheduler.
|
|
160
|
+
*/
|
|
161
|
+
start() {
|
|
162
|
+
if (this.running)
|
|
163
|
+
return;
|
|
164
|
+
this.running = true;
|
|
165
|
+
// Calculate time until next minute
|
|
166
|
+
const now = new Date();
|
|
167
|
+
const msUntilNextMinute = (60 - now.getSeconds()) * 1000 - now.getMilliseconds();
|
|
168
|
+
// Start checking at the next minute boundary
|
|
169
|
+
setTimeout(() => {
|
|
170
|
+
this.checkJobs();
|
|
171
|
+
this.intervalId = setInterval(() => this.checkJobs(), this.checkIntervalMs);
|
|
172
|
+
}, msUntilNextMinute);
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Stop the scheduler.
|
|
176
|
+
*/
|
|
177
|
+
stop() {
|
|
178
|
+
this.running = false;
|
|
179
|
+
if (this.intervalId) {
|
|
180
|
+
clearInterval(this.intervalId);
|
|
181
|
+
this.intervalId = null;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Check and run due jobs.
|
|
186
|
+
*/
|
|
187
|
+
async checkJobs() {
|
|
188
|
+
const now = new Date();
|
|
189
|
+
for (const job of this.jobs.values()) {
|
|
190
|
+
if (!job.enabled)
|
|
191
|
+
continue;
|
|
192
|
+
if (!job.nextRun || now < job.nextRun)
|
|
193
|
+
continue;
|
|
194
|
+
// Job is due - execute callbacks
|
|
195
|
+
for (const callback of this.callbacks) {
|
|
196
|
+
try {
|
|
197
|
+
await callback(job);
|
|
198
|
+
}
|
|
199
|
+
catch (error) {
|
|
200
|
+
console.error(`Error executing job ${job.id}:`, error);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
// Update job state
|
|
204
|
+
job.lastRun = now;
|
|
205
|
+
job.runCount++;
|
|
206
|
+
job.nextRun = CronParser.nextRun(job.schedule, now);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Run due jobs once (non-blocking check).
|
|
211
|
+
*/
|
|
212
|
+
async runOnce() {
|
|
213
|
+
const results = new Map();
|
|
214
|
+
const now = new Date();
|
|
215
|
+
for (const job of this.jobs.values()) {
|
|
216
|
+
if (!job.enabled)
|
|
217
|
+
continue;
|
|
218
|
+
if (!job.nextRun || now < job.nextRun)
|
|
219
|
+
continue;
|
|
220
|
+
// Job is due
|
|
221
|
+
for (const callback of this.callbacks) {
|
|
222
|
+
try {
|
|
223
|
+
await callback(job);
|
|
224
|
+
}
|
|
225
|
+
catch (error) {
|
|
226
|
+
console.error(`Error executing job ${job.id}:`, error);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
job.lastRun = now;
|
|
230
|
+
job.runCount++;
|
|
231
|
+
job.nextRun = CronParser.nextRun(job.schedule, now);
|
|
232
|
+
results.set(job.id, now);
|
|
233
|
+
}
|
|
234
|
+
return results;
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Check if scheduler is running.
|
|
238
|
+
*/
|
|
239
|
+
isRunning() {
|
|
240
|
+
return this.running;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
// ============================================================================
|
|
244
|
+
// Helper Functions
|
|
245
|
+
// ============================================================================
|
|
246
|
+
export function createJob(id, workflowPath, schedule, inputs = {}) {
|
|
247
|
+
return {
|
|
248
|
+
id,
|
|
249
|
+
workflowPath,
|
|
250
|
+
schedule,
|
|
251
|
+
timezone: 'UTC',
|
|
252
|
+
enabled: true,
|
|
253
|
+
lastRun: null,
|
|
254
|
+
nextRun: CronParser.nextRun(schedule),
|
|
255
|
+
runCount: 0,
|
|
256
|
+
inputs,
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=scheduler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../src/scheduler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface ScriptOperation {
|
|
2
|
+
name: string;
|
|
3
|
+
description?: string;
|
|
4
|
+
parameters?: Record<string, any>;
|
|
5
|
+
timeout?: number;
|
|
6
|
+
}
|
|
7
|
+
export interface ScriptToolConfig {
|
|
8
|
+
script: string;
|
|
9
|
+
description?: string;
|
|
10
|
+
operations?: Record<string, ScriptOperation>;
|
|
11
|
+
timeout?: number;
|
|
12
|
+
env?: Record<string, string>;
|
|
13
|
+
}
|
|
14
|
+
export declare class ScriptTool {
|
|
15
|
+
private scriptPath;
|
|
16
|
+
private config;
|
|
17
|
+
private isMultiOperation;
|
|
18
|
+
constructor(scriptPath: string, toolsDir?: string);
|
|
19
|
+
private loadMetadata;
|
|
20
|
+
execute(operation: string, params: Record<string, any>): Promise<any>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=script-tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"script-tool.d.ts","sourceRoot":"","sources":["../src/script-tool.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,gBAAgB,CAAkB;gBAE9B,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAKjD,OAAO,CAAC,YAAY;IAoBd,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;CA6D5E"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { join, isAbsolute } from 'node:path';
|
|
3
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
4
|
+
import { parse } from 'yaml';
|
|
5
|
+
export class ScriptTool {
|
|
6
|
+
scriptPath;
|
|
7
|
+
config;
|
|
8
|
+
isMultiOperation = false;
|
|
9
|
+
constructor(scriptPath, toolsDir) {
|
|
10
|
+
this.scriptPath = isAbsolute(scriptPath) ? scriptPath : (toolsDir ? join(toolsDir, scriptPath) : scriptPath);
|
|
11
|
+
this.config = this.loadMetadata();
|
|
12
|
+
}
|
|
13
|
+
loadMetadata() {
|
|
14
|
+
const yamlPath = this.scriptPath.replace(/\.[^/.]+$/, "") + ".yaml";
|
|
15
|
+
let config = { script: this.scriptPath };
|
|
16
|
+
if (existsSync(yamlPath)) {
|
|
17
|
+
try {
|
|
18
|
+
const content = readFileSync(yamlPath, 'utf-8');
|
|
19
|
+
const data = parse(content);
|
|
20
|
+
config = { ...config, ...data };
|
|
21
|
+
if (config.operations && Object.keys(config.operations).length > 0) {
|
|
22
|
+
this.isMultiOperation = true;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
catch (e) {
|
|
26
|
+
console.warn(`Failed to parse script metadata at ${yamlPath}: ${e}`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return config;
|
|
30
|
+
}
|
|
31
|
+
async execute(operation, params) {
|
|
32
|
+
const args = [];
|
|
33
|
+
if (this.isMultiOperation) {
|
|
34
|
+
args.push(operation);
|
|
35
|
+
}
|
|
36
|
+
for (const [key, value] of Object.entries(params)) {
|
|
37
|
+
if (value === null || value === undefined)
|
|
38
|
+
continue;
|
|
39
|
+
if (typeof value === 'boolean') {
|
|
40
|
+
if (value)
|
|
41
|
+
args.push(`--${key}`);
|
|
42
|
+
}
|
|
43
|
+
else if (typeof value === 'object') {
|
|
44
|
+
args.push(`--${key}=${JSON.stringify(value)}`);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
args.push(`--${key}=${value}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
const timeout = (this.config.operations?.[operation]?.timeout || this.config.timeout || 300) * 1000;
|
|
51
|
+
const env = { ...process.env, ...this.config.env };
|
|
52
|
+
return new Promise((resolve, reject) => {
|
|
53
|
+
const proc = spawn(this.scriptPath, args, {
|
|
54
|
+
env
|
|
55
|
+
});
|
|
56
|
+
let stdout = '';
|
|
57
|
+
let stderr = '';
|
|
58
|
+
proc.stdout.on('data', d => stdout += d.toString());
|
|
59
|
+
proc.stderr.on('data', d => stderr += d.toString());
|
|
60
|
+
const timer = setTimeout(() => {
|
|
61
|
+
proc.kill();
|
|
62
|
+
reject(new Error(`Script timed out after ${timeout}ms\nSTDOUT: ${stdout}\nSTDERR: ${stderr}`));
|
|
63
|
+
}, timeout);
|
|
64
|
+
proc.on('close', code => {
|
|
65
|
+
clearTimeout(timer);
|
|
66
|
+
if (code === 0) {
|
|
67
|
+
const output = stdout.trim();
|
|
68
|
+
if (!output) {
|
|
69
|
+
resolve({ success: true, stderr: stderr.trim() });
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
try {
|
|
73
|
+
resolve(JSON.parse(output));
|
|
74
|
+
}
|
|
75
|
+
catch (e) {
|
|
76
|
+
resolve(output);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
reject(new Error(`Script failed with exit code ${code}\nSTDOUT: ${stdout}\nSTDERR: ${stderr}`));
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
proc.on('error', err => {
|
|
84
|
+
clearTimeout(timer);
|
|
85
|
+
reject(err);
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=script-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"script-tool.js","sourceRoot":"","sources":["../src/script-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SDK Registry for marktoflow v2.0
|
|
3
|
+
*
|
|
4
|
+
* Dynamically loads and manages SDK instances for workflow execution.
|
|
5
|
+
* Supports lazy loading and caching of SDK instances.
|
|
6
|
+
*/
|
|
7
|
+
import { ToolConfig } from './models.js';
|
|
8
|
+
import { McpLoader } from './mcp-loader.js';
|
|
9
|
+
export interface SDKInstance {
|
|
10
|
+
name: string;
|
|
11
|
+
sdk: unknown;
|
|
12
|
+
config: ToolConfig;
|
|
13
|
+
}
|
|
14
|
+
export interface SDKLoader {
|
|
15
|
+
/**
|
|
16
|
+
* Load an SDK module.
|
|
17
|
+
* @param packageName - npm package name (e.g., "@slack/web-api")
|
|
18
|
+
* @returns The loaded module
|
|
19
|
+
*/
|
|
20
|
+
load(packageName: string): Promise<unknown>;
|
|
21
|
+
}
|
|
22
|
+
export interface SDKInitializer {
|
|
23
|
+
/**
|
|
24
|
+
* Initialize an SDK with configuration.
|
|
25
|
+
* @param module - The loaded SDK module
|
|
26
|
+
* @param config - Tool configuration from workflow
|
|
27
|
+
* @returns Initialized SDK client
|
|
28
|
+
*/
|
|
29
|
+
initialize(module: unknown, config: ToolConfig): Promise<unknown>;
|
|
30
|
+
}
|
|
31
|
+
export declare const defaultSDKLoader: SDKLoader;
|
|
32
|
+
export declare const defaultInitializers: Record<string, SDKInitializer>;
|
|
33
|
+
export declare class SDKRegistry {
|
|
34
|
+
private sdks;
|
|
35
|
+
private loader;
|
|
36
|
+
private initializers;
|
|
37
|
+
private mcpLoader;
|
|
38
|
+
constructor(loader?: SDKLoader, initializers?: Record<string, SDKInitializer>, mcpLoader?: McpLoader);
|
|
39
|
+
/**
|
|
40
|
+
* Register tool configurations from a workflow.
|
|
41
|
+
*/
|
|
42
|
+
registerTools(tools: Record<string, ToolConfig>): void;
|
|
43
|
+
/**
|
|
44
|
+
* Check if an SDK is registered.
|
|
45
|
+
*/
|
|
46
|
+
has(name: string): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Load and initialize an SDK.
|
|
49
|
+
*/
|
|
50
|
+
load(name: string): Promise<unknown>;
|
|
51
|
+
private isMcpModule;
|
|
52
|
+
private createMcpProxy;
|
|
53
|
+
/**
|
|
54
|
+
* Generic SDK initialization for unknown packages.
|
|
55
|
+
*/
|
|
56
|
+
private genericInitialize;
|
|
57
|
+
/**
|
|
58
|
+
* Register a custom initializer for an SDK.
|
|
59
|
+
*/
|
|
60
|
+
registerInitializer(sdkName: string, initializer: SDKInitializer): void;
|
|
61
|
+
/**
|
|
62
|
+
* Get all registered SDK names.
|
|
63
|
+
*/
|
|
64
|
+
getRegisteredNames(): string[];
|
|
65
|
+
/**
|
|
66
|
+
* Clear all cached SDK instances.
|
|
67
|
+
*/
|
|
68
|
+
clear(): void;
|
|
69
|
+
}
|
|
70
|
+
export interface SDKRegistryLike {
|
|
71
|
+
load(sdkName: string): Promise<unknown>;
|
|
72
|
+
has(sdkName: string): boolean;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Create a step executor that invokes SDK methods.
|
|
76
|
+
*/
|
|
77
|
+
export declare function createSDKStepExecutor(): (step: {
|
|
78
|
+
action: string;
|
|
79
|
+
inputs: Record<string, unknown>;
|
|
80
|
+
}, _context: unknown, sdkRegistry: SDKRegistryLike) => Promise<unknown>;
|
|
81
|
+
//# sourceMappingURL=sdk-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk-registry.d.ts","sourceRoot":"","sources":["../src/sdk-registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAO5C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB;;;;OAIG;IACH,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,cAAc;IAC7B;;;;;OAKG;IACH,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACnE;AAMD,eAAO,MAAM,gBAAgB,EAAE,SAa9B,CAAC;AAMF,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CA+D9D,CAAC;AAMF,qBAAa,WAAW;IACtB,OAAO,CAAC,IAAI,CAAuC;IACnD,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,SAAS,CAAY;gBAG3B,MAAM,GAAE,SAA4B,EACpC,YAAY,GAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAuB,EAClE,SAAS,CAAC,EAAE,SAAS;IAOvB;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,IAAI;IAatD;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B;;OAEG;IACG,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA8C1C,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,cAAc;IAgCtB;;OAEG;YACW,iBAAiB;IAoB/B;;OAEG;IACH,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,GAAG,IAAI;IAIvE;;OAEG;IACH,kBAAkB,IAAI,MAAM,EAAE;IAI9B;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd;AAMD,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACxC,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;CAC/B;AAED;;GAEG;AACH,wBAAgB,qBAAqB,KAEjC,MAAM;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,EACzD,UAAU,OAAO,EACjB,aAAa,eAAe,KAC3B,OAAO,CAAC,OAAO,CAAC,CA6BpB"}
|