@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.
- package/README.md +307 -0
- 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/core-tools.d.ts +39 -0
- package/dist/core-tools.d.ts.map +1 -0
- package/dist/core-tools.js +58 -0
- package/dist/core-tools.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 +243 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +1453 -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 +40 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +77 -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 +1686 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +333 -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 +532 -0
- package/dist/parser.js.map +1 -0
- package/dist/permissions.d.ts +49 -0
- package/dist/permissions.d.ts.map +1 -0
- package/dist/permissions.js +286 -0
- package/dist/permissions.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/prompt-loader.d.ts +47 -0
- package/dist/prompt-loader.d.ts.map +1 -0
- package/dist/prompt-loader.js +268 -0
- package/dist/prompt-loader.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 +94 -0
- package/dist/sdk-registry.d.ts.map +1 -0
- package/dist/sdk-registry.js +328 -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/dist/workflow-tools.d.ts +102 -0
- package/dist/workflow-tools.d.ts.map +1 -0
- package/dist/workflow-tools.js +130 -0
- package/dist/workflow-tools.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1,286 @@
|
|
|
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 { minimatch } from 'minimatch';
|
|
8
|
+
// ============================================================================
|
|
9
|
+
// Permission Merging
|
|
10
|
+
// ============================================================================
|
|
11
|
+
/**
|
|
12
|
+
* Merge workflow-level and step-level permissions.
|
|
13
|
+
* Step permissions override workflow permissions, with most restrictive winning.
|
|
14
|
+
*/
|
|
15
|
+
export function mergePermissions(workflow, step) {
|
|
16
|
+
// Start with defaults (most permissive)
|
|
17
|
+
const effective = {
|
|
18
|
+
read: true,
|
|
19
|
+
write: true,
|
|
20
|
+
execute: true,
|
|
21
|
+
allowedCommands: [],
|
|
22
|
+
blockedCommands: [],
|
|
23
|
+
allowedDirectories: [],
|
|
24
|
+
blockedPaths: [],
|
|
25
|
+
network: true,
|
|
26
|
+
allowedHosts: [],
|
|
27
|
+
maxFileSize: undefined,
|
|
28
|
+
};
|
|
29
|
+
// Apply workflow-level permissions first
|
|
30
|
+
if (workflow) {
|
|
31
|
+
applyPermissions(effective, workflow);
|
|
32
|
+
}
|
|
33
|
+
// Apply step-level permissions (overrides workflow)
|
|
34
|
+
if (step) {
|
|
35
|
+
applyPermissions(effective, step);
|
|
36
|
+
}
|
|
37
|
+
return effective;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Apply a permission configuration to effective permissions.
|
|
41
|
+
*/
|
|
42
|
+
function applyPermissions(effective, perms) {
|
|
43
|
+
if (!perms)
|
|
44
|
+
return;
|
|
45
|
+
// File operations
|
|
46
|
+
if (perms.read !== undefined) {
|
|
47
|
+
effective.read = perms.read;
|
|
48
|
+
}
|
|
49
|
+
if (perms.write !== undefined) {
|
|
50
|
+
effective.write = perms.write;
|
|
51
|
+
}
|
|
52
|
+
// Command execution
|
|
53
|
+
if (perms.execute !== undefined) {
|
|
54
|
+
effective.execute = perms.execute;
|
|
55
|
+
}
|
|
56
|
+
if (perms.allowedCommands) {
|
|
57
|
+
// Merge allowed commands (union)
|
|
58
|
+
effective.allowedCommands = [
|
|
59
|
+
...new Set([...effective.allowedCommands, ...perms.allowedCommands]),
|
|
60
|
+
];
|
|
61
|
+
}
|
|
62
|
+
if (perms.blockedCommands) {
|
|
63
|
+
// Merge blocked commands (union)
|
|
64
|
+
effective.blockedCommands = [
|
|
65
|
+
...new Set([...effective.blockedCommands, ...perms.blockedCommands]),
|
|
66
|
+
];
|
|
67
|
+
}
|
|
68
|
+
// Directory restrictions
|
|
69
|
+
if (perms.allowedDirectories) {
|
|
70
|
+
effective.allowedDirectories = [
|
|
71
|
+
...new Set([...effective.allowedDirectories, ...perms.allowedDirectories]),
|
|
72
|
+
];
|
|
73
|
+
}
|
|
74
|
+
if (perms.blockedPaths) {
|
|
75
|
+
effective.blockedPaths = [
|
|
76
|
+
...new Set([...effective.blockedPaths, ...perms.blockedPaths]),
|
|
77
|
+
];
|
|
78
|
+
}
|
|
79
|
+
// Network
|
|
80
|
+
if (perms.network !== undefined) {
|
|
81
|
+
effective.network = perms.network;
|
|
82
|
+
}
|
|
83
|
+
if (perms.allowedHosts) {
|
|
84
|
+
effective.allowedHosts = [
|
|
85
|
+
...new Set([...effective.allowedHosts, ...perms.allowedHosts]),
|
|
86
|
+
];
|
|
87
|
+
}
|
|
88
|
+
// Limits (most restrictive wins)
|
|
89
|
+
if (perms.maxFileSize !== undefined) {
|
|
90
|
+
if (effective.maxFileSize === undefined) {
|
|
91
|
+
effective.maxFileSize = perms.maxFileSize;
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
effective.maxFileSize = Math.min(effective.maxFileSize, perms.maxFileSize);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// ============================================================================
|
|
99
|
+
// Permission Checking
|
|
100
|
+
// ============================================================================
|
|
101
|
+
/**
|
|
102
|
+
* Check if an operation is permitted.
|
|
103
|
+
*/
|
|
104
|
+
export function checkPermission(perms, operation, target) {
|
|
105
|
+
switch (operation) {
|
|
106
|
+
case 'read':
|
|
107
|
+
return checkFilePermission(perms.read, target, 'read', perms);
|
|
108
|
+
case 'write':
|
|
109
|
+
return checkFilePermission(perms.write, target, 'write', perms);
|
|
110
|
+
case 'execute':
|
|
111
|
+
return checkExecutePermission(perms, target);
|
|
112
|
+
case 'network':
|
|
113
|
+
return checkNetworkPermission(perms, target);
|
|
114
|
+
default:
|
|
115
|
+
return { allowed: false, reason: `Unknown operation: ${operation}` };
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Check file operation permission (read/write).
|
|
120
|
+
*/
|
|
121
|
+
function checkFilePermission(permission, target, operation, perms) {
|
|
122
|
+
// If permission is false, deny all
|
|
123
|
+
if (!permission) {
|
|
124
|
+
return { allowed: false, reason: `${operation} operations are disabled` };
|
|
125
|
+
}
|
|
126
|
+
// If permission is true and no target, allow
|
|
127
|
+
if (permission === true && !target) {
|
|
128
|
+
return { allowed: true };
|
|
129
|
+
}
|
|
130
|
+
// Check blocked paths first
|
|
131
|
+
if (target && perms.blockedPaths.length > 0) {
|
|
132
|
+
for (const blocked of perms.blockedPaths) {
|
|
133
|
+
if (matchPath(target, blocked)) {
|
|
134
|
+
return { allowed: false, reason: `Path is blocked: ${blocked}` };
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
// Check allowed directories if specified
|
|
139
|
+
if (target && perms.allowedDirectories.length > 0) {
|
|
140
|
+
const inAllowedDir = perms.allowedDirectories.some((dir) => target.startsWith(dir) || matchPath(target, dir + '/**'));
|
|
141
|
+
if (!inAllowedDir) {
|
|
142
|
+
return { allowed: false, reason: `Path not in allowed directories` };
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// If permission is an array, check if target matches any pattern
|
|
146
|
+
if (Array.isArray(permission)) {
|
|
147
|
+
if (!target) {
|
|
148
|
+
return { allowed: true }; // No specific target, allow
|
|
149
|
+
}
|
|
150
|
+
const matches = permission.some((pattern) => matchPath(target, pattern));
|
|
151
|
+
if (!matches) {
|
|
152
|
+
return { allowed: false, reason: `Path does not match allowed patterns for ${operation}` };
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return { allowed: true };
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Check execute permission for a command.
|
|
159
|
+
*/
|
|
160
|
+
function checkExecutePermission(perms, command) {
|
|
161
|
+
// If execute is false, deny all
|
|
162
|
+
if (perms.execute === false) {
|
|
163
|
+
return { allowed: false, reason: 'Command execution is disabled' };
|
|
164
|
+
}
|
|
165
|
+
if (!command) {
|
|
166
|
+
return { allowed: true };
|
|
167
|
+
}
|
|
168
|
+
// Check blocked commands first
|
|
169
|
+
if (perms.blockedCommands.length > 0) {
|
|
170
|
+
for (const blocked of perms.blockedCommands) {
|
|
171
|
+
if (commandMatches(command, blocked)) {
|
|
172
|
+
return { allowed: false, reason: `Command is blocked: ${blocked}` };
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
// If execute is an array of allowed commands
|
|
177
|
+
if (Array.isArray(perms.execute)) {
|
|
178
|
+
const matches = perms.execute.some((allowed) => commandMatches(command, allowed));
|
|
179
|
+
if (!matches) {
|
|
180
|
+
return { allowed: false, reason: 'Command not in allowed list' };
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// Check allowed commands if specified
|
|
184
|
+
if (perms.allowedCommands.length > 0) {
|
|
185
|
+
const matches = perms.allowedCommands.some((allowed) => commandMatches(command, allowed));
|
|
186
|
+
if (!matches) {
|
|
187
|
+
return { allowed: false, reason: 'Command not in allowed list' };
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return { allowed: true };
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Check network permission for a host.
|
|
194
|
+
*/
|
|
195
|
+
function checkNetworkPermission(perms, host) {
|
|
196
|
+
// If network is false, deny all
|
|
197
|
+
if (!perms.network) {
|
|
198
|
+
return { allowed: false, reason: 'Network access is disabled' };
|
|
199
|
+
}
|
|
200
|
+
if (!host) {
|
|
201
|
+
return { allowed: true };
|
|
202
|
+
}
|
|
203
|
+
// Check allowed hosts if specified
|
|
204
|
+
if (perms.allowedHosts.length > 0) {
|
|
205
|
+
const matches = perms.allowedHosts.some((allowed) => hostMatches(host, allowed));
|
|
206
|
+
if (!matches) {
|
|
207
|
+
return { allowed: false, reason: `Host not in allowed list: ${host}` };
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return { allowed: true };
|
|
211
|
+
}
|
|
212
|
+
// ============================================================================
|
|
213
|
+
// Pattern Matching Helpers
|
|
214
|
+
// ============================================================================
|
|
215
|
+
/**
|
|
216
|
+
* Match a path against a glob pattern.
|
|
217
|
+
*/
|
|
218
|
+
function matchPath(path, pattern) {
|
|
219
|
+
return minimatch(path, pattern, { dot: true });
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Check if a command matches a pattern.
|
|
223
|
+
* Patterns can be exact matches or wildcards.
|
|
224
|
+
*/
|
|
225
|
+
function commandMatches(command, pattern) {
|
|
226
|
+
// Exact match
|
|
227
|
+
if (command === pattern) {
|
|
228
|
+
return true;
|
|
229
|
+
}
|
|
230
|
+
// Check if command starts with pattern (for matching command prefixes like "rm -rf")
|
|
231
|
+
if (command.startsWith(pattern + ' ') || command.startsWith(pattern)) {
|
|
232
|
+
return true;
|
|
233
|
+
}
|
|
234
|
+
// Wildcard pattern matching
|
|
235
|
+
if (pattern.includes('*')) {
|
|
236
|
+
const regex = new RegExp('^' + pattern.replace(/\*/g, '.*') + '$');
|
|
237
|
+
return regex.test(command);
|
|
238
|
+
}
|
|
239
|
+
return false;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Check if a host matches a pattern.
|
|
243
|
+
* Supports wildcard domains like *.example.com
|
|
244
|
+
*/
|
|
245
|
+
function hostMatches(host, pattern) {
|
|
246
|
+
// Exact match
|
|
247
|
+
if (host === pattern) {
|
|
248
|
+
return true;
|
|
249
|
+
}
|
|
250
|
+
// Wildcard domain matching (e.g., *.example.com)
|
|
251
|
+
if (pattern.startsWith('*.')) {
|
|
252
|
+
const suffix = pattern.slice(1); // .example.com
|
|
253
|
+
return host.endsWith(suffix);
|
|
254
|
+
}
|
|
255
|
+
return false;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Convert EffectivePermissions to a SecurityPolicy for use with hooks.
|
|
259
|
+
*/
|
|
260
|
+
export function toSecurityPolicy(perms) {
|
|
261
|
+
return {
|
|
262
|
+
allowFileRead: (path) => checkPermission(perms, 'read', path),
|
|
263
|
+
allowFileWrite: (path) => checkPermission(perms, 'write', path),
|
|
264
|
+
allowCommand: (command) => checkPermission(perms, 'execute', command),
|
|
265
|
+
allowNetwork: (host) => checkPermission(perms, 'network', host),
|
|
266
|
+
maxFileSize: perms.maxFileSize,
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Create default (permissive) permissions.
|
|
271
|
+
*/
|
|
272
|
+
export function createDefaultPermissions() {
|
|
273
|
+
return {
|
|
274
|
+
read: true,
|
|
275
|
+
write: true,
|
|
276
|
+
execute: true,
|
|
277
|
+
allowedCommands: [],
|
|
278
|
+
blockedCommands: [],
|
|
279
|
+
allowedDirectories: [],
|
|
280
|
+
blockedPaths: [],
|
|
281
|
+
network: true,
|
|
282
|
+
allowedHosts: [],
|
|
283
|
+
maxFileSize: undefined,
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
//# sourceMappingURL=permissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../src/permissions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin system for marktoflow.
|
|
3
|
+
*
|
|
4
|
+
* Provides hook registry and plugin lifecycle management.
|
|
5
|
+
*/
|
|
6
|
+
export declare enum PluginState {
|
|
7
|
+
DISCOVERED = "discovered",
|
|
8
|
+
LOADED = "loaded",
|
|
9
|
+
ENABLED = "enabled",
|
|
10
|
+
DISABLED = "disabled",
|
|
11
|
+
ERROR = "error"
|
|
12
|
+
}
|
|
13
|
+
export declare enum HookType {
|
|
14
|
+
WORKFLOW_BEFORE_START = "workflow_before_start",
|
|
15
|
+
WORKFLOW_AFTER_START = "workflow_after_start",
|
|
16
|
+
WORKFLOW_BEFORE_END = "workflow_before_end",
|
|
17
|
+
WORKFLOW_AFTER_END = "workflow_after_end",
|
|
18
|
+
WORKFLOW_ON_ERROR = "workflow_on_error",
|
|
19
|
+
STEP_BEFORE_EXECUTE = "step_before_execute",
|
|
20
|
+
STEP_AFTER_EXECUTE = "step_after_execute",
|
|
21
|
+
STEP_ON_RETRY = "step_on_retry",
|
|
22
|
+
STEP_ON_SKIP = "step_on_skip",
|
|
23
|
+
STEP_ON_ERROR = "step_on_error",
|
|
24
|
+
AGENT_BEFORE_SELECT = "agent_before_select",
|
|
25
|
+
AGENT_AFTER_SELECT = "agent_after_select",
|
|
26
|
+
AGENT_ON_FAILOVER = "agent_on_failover",
|
|
27
|
+
TOOL_BEFORE_CALL = "tool_before_call",
|
|
28
|
+
TOOL_AFTER_CALL = "tool_after_call",
|
|
29
|
+
TOOL_ON_ERROR = "tool_on_error",
|
|
30
|
+
CUSTOM = "custom"
|
|
31
|
+
}
|
|
32
|
+
export interface PluginMetadata {
|
|
33
|
+
name: string;
|
|
34
|
+
version: string;
|
|
35
|
+
description?: string | undefined;
|
|
36
|
+
author?: string | undefined;
|
|
37
|
+
homepage?: string | undefined;
|
|
38
|
+
license?: string | undefined;
|
|
39
|
+
requires?: string[];
|
|
40
|
+
tags?: string[];
|
|
41
|
+
}
|
|
42
|
+
export interface HookContext {
|
|
43
|
+
hookType: HookType;
|
|
44
|
+
workflowId?: string | undefined;
|
|
45
|
+
stepIndex?: number | undefined;
|
|
46
|
+
stepName?: string | undefined;
|
|
47
|
+
agentName?: string | undefined;
|
|
48
|
+
toolName?: string | undefined;
|
|
49
|
+
data: Record<string, unknown>;
|
|
50
|
+
timestamp: Date;
|
|
51
|
+
}
|
|
52
|
+
export interface HookResult {
|
|
53
|
+
success: boolean;
|
|
54
|
+
modifiedData?: Record<string, unknown> | undefined;
|
|
55
|
+
stopPropagation?: boolean | undefined;
|
|
56
|
+
error?: string | undefined;
|
|
57
|
+
}
|
|
58
|
+
export type HookCallback = (context: HookContext) => HookResult | void | Promise<HookResult | void>;
|
|
59
|
+
export interface Plugin {
|
|
60
|
+
metadata: PluginMetadata;
|
|
61
|
+
onLoad?(): void;
|
|
62
|
+
onEnable?(): void;
|
|
63
|
+
onDisable?(): void;
|
|
64
|
+
onUnload?(): void;
|
|
65
|
+
getHooks?(): Record<string, HookCallback[]>;
|
|
66
|
+
getTools?(): unknown[];
|
|
67
|
+
getTemplates?(): unknown[];
|
|
68
|
+
getConfigSchema?(): Record<string, unknown> | null;
|
|
69
|
+
configure?(config: Record<string, unknown>): void;
|
|
70
|
+
}
|
|
71
|
+
export interface PluginInfo {
|
|
72
|
+
plugin: Plugin;
|
|
73
|
+
source: string;
|
|
74
|
+
state: PluginState;
|
|
75
|
+
loadedAt: Date;
|
|
76
|
+
error?: string | undefined;
|
|
77
|
+
}
|
|
78
|
+
export declare class HookRegistry {
|
|
79
|
+
private hooks;
|
|
80
|
+
register(hook: HookType, callback: HookCallback): void;
|
|
81
|
+
unregister(hook: HookType, callback: HookCallback): void;
|
|
82
|
+
run(hook: HookType, context: HookContext): Promise<HookResult[]>;
|
|
83
|
+
}
|
|
84
|
+
export declare class PluginManager {
|
|
85
|
+
private plugins;
|
|
86
|
+
private hookRegistry;
|
|
87
|
+
register(plugin: Plugin, source?: string): PluginInfo;
|
|
88
|
+
enable(name: string): boolean;
|
|
89
|
+
disable(name: string): boolean;
|
|
90
|
+
unload(name: string): boolean;
|
|
91
|
+
list(): PluginInfo[];
|
|
92
|
+
get(name: string): PluginInfo | undefined;
|
|
93
|
+
hooks(): HookRegistry;
|
|
94
|
+
}
|
|
95
|
+
export declare class LoggingPlugin implements Plugin {
|
|
96
|
+
metadata: PluginMetadata;
|
|
97
|
+
getHooks(): Record<string, HookCallback[]>;
|
|
98
|
+
}
|
|
99
|
+
export declare class MetricsPlugin implements Plugin {
|
|
100
|
+
metadata: PluginMetadata;
|
|
101
|
+
private counts;
|
|
102
|
+
getHooks(): Record<string, HookCallback[]>;
|
|
103
|
+
getMetrics(): Record<string, number>;
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=plugins.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../src/plugins.ts"],"names":[],"mappings":"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"}
|
package/dist/plugins.js
ADDED
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin system for marktoflow.
|
|
3
|
+
*
|
|
4
|
+
* Provides hook registry and plugin lifecycle management.
|
|
5
|
+
*/
|
|
6
|
+
export var PluginState;
|
|
7
|
+
(function (PluginState) {
|
|
8
|
+
PluginState["DISCOVERED"] = "discovered";
|
|
9
|
+
PluginState["LOADED"] = "loaded";
|
|
10
|
+
PluginState["ENABLED"] = "enabled";
|
|
11
|
+
PluginState["DISABLED"] = "disabled";
|
|
12
|
+
PluginState["ERROR"] = "error";
|
|
13
|
+
})(PluginState || (PluginState = {}));
|
|
14
|
+
export var HookType;
|
|
15
|
+
(function (HookType) {
|
|
16
|
+
HookType["WORKFLOW_BEFORE_START"] = "workflow_before_start";
|
|
17
|
+
HookType["WORKFLOW_AFTER_START"] = "workflow_after_start";
|
|
18
|
+
HookType["WORKFLOW_BEFORE_END"] = "workflow_before_end";
|
|
19
|
+
HookType["WORKFLOW_AFTER_END"] = "workflow_after_end";
|
|
20
|
+
HookType["WORKFLOW_ON_ERROR"] = "workflow_on_error";
|
|
21
|
+
HookType["STEP_BEFORE_EXECUTE"] = "step_before_execute";
|
|
22
|
+
HookType["STEP_AFTER_EXECUTE"] = "step_after_execute";
|
|
23
|
+
HookType["STEP_ON_RETRY"] = "step_on_retry";
|
|
24
|
+
HookType["STEP_ON_SKIP"] = "step_on_skip";
|
|
25
|
+
HookType["STEP_ON_ERROR"] = "step_on_error";
|
|
26
|
+
HookType["AGENT_BEFORE_SELECT"] = "agent_before_select";
|
|
27
|
+
HookType["AGENT_AFTER_SELECT"] = "agent_after_select";
|
|
28
|
+
HookType["AGENT_ON_FAILOVER"] = "agent_on_failover";
|
|
29
|
+
HookType["TOOL_BEFORE_CALL"] = "tool_before_call";
|
|
30
|
+
HookType["TOOL_AFTER_CALL"] = "tool_after_call";
|
|
31
|
+
HookType["TOOL_ON_ERROR"] = "tool_on_error";
|
|
32
|
+
HookType["CUSTOM"] = "custom";
|
|
33
|
+
})(HookType || (HookType = {}));
|
|
34
|
+
export class HookRegistry {
|
|
35
|
+
hooks = new Map();
|
|
36
|
+
register(hook, callback) {
|
|
37
|
+
if (!this.hooks.has(hook)) {
|
|
38
|
+
this.hooks.set(hook, []);
|
|
39
|
+
}
|
|
40
|
+
this.hooks.get(hook).push(callback);
|
|
41
|
+
}
|
|
42
|
+
unregister(hook, callback) {
|
|
43
|
+
const list = this.hooks.get(hook);
|
|
44
|
+
if (!list)
|
|
45
|
+
return;
|
|
46
|
+
this.hooks.set(hook, list.filter((cb) => cb !== callback));
|
|
47
|
+
}
|
|
48
|
+
async run(hook, context) {
|
|
49
|
+
const callbacks = this.hooks.get(hook) ?? [];
|
|
50
|
+
const results = [];
|
|
51
|
+
for (const cb of callbacks) {
|
|
52
|
+
try {
|
|
53
|
+
const result = await cb(context);
|
|
54
|
+
if (result) {
|
|
55
|
+
results.push(result);
|
|
56
|
+
if (result.stopPropagation)
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
results.push({ success: false, error: String(error) });
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return results;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
export class PluginManager {
|
|
68
|
+
plugins = new Map();
|
|
69
|
+
hookRegistry = new HookRegistry();
|
|
70
|
+
register(plugin, source = 'manual') {
|
|
71
|
+
const info = {
|
|
72
|
+
plugin,
|
|
73
|
+
source,
|
|
74
|
+
state: PluginState.DISCOVERED,
|
|
75
|
+
loadedAt: new Date(),
|
|
76
|
+
};
|
|
77
|
+
this.plugins.set(plugin.metadata.name, info);
|
|
78
|
+
return info;
|
|
79
|
+
}
|
|
80
|
+
enable(name) {
|
|
81
|
+
const info = this.plugins.get(name);
|
|
82
|
+
if (!info)
|
|
83
|
+
return false;
|
|
84
|
+
try {
|
|
85
|
+
if (info.state === PluginState.DISCOVERED) {
|
|
86
|
+
info.plugin.onLoad?.();
|
|
87
|
+
info.state = PluginState.LOADED;
|
|
88
|
+
}
|
|
89
|
+
info.plugin.onEnable?.();
|
|
90
|
+
info.state = PluginState.ENABLED;
|
|
91
|
+
const hooks = info.plugin.getHooks?.() ?? {};
|
|
92
|
+
for (const [hookName, callbacks] of Object.entries(hooks)) {
|
|
93
|
+
const hookType = hookName;
|
|
94
|
+
for (const cb of callbacks) {
|
|
95
|
+
this.hookRegistry.register(hookType, cb);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
info.state = PluginState.ERROR;
|
|
102
|
+
info.error = String(error);
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
disable(name) {
|
|
107
|
+
const info = this.plugins.get(name);
|
|
108
|
+
if (!info)
|
|
109
|
+
return false;
|
|
110
|
+
try {
|
|
111
|
+
info.plugin.onDisable?.();
|
|
112
|
+
info.state = PluginState.DISABLED;
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
info.state = PluginState.ERROR;
|
|
117
|
+
info.error = String(error);
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
unload(name) {
|
|
122
|
+
const info = this.plugins.get(name);
|
|
123
|
+
if (!info)
|
|
124
|
+
return false;
|
|
125
|
+
try {
|
|
126
|
+
info.plugin.onUnload?.();
|
|
127
|
+
this.plugins.delete(name);
|
|
128
|
+
return true;
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
info.state = PluginState.ERROR;
|
|
132
|
+
info.error = String(error);
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
list() {
|
|
137
|
+
return Array.from(this.plugins.values());
|
|
138
|
+
}
|
|
139
|
+
get(name) {
|
|
140
|
+
return this.plugins.get(name);
|
|
141
|
+
}
|
|
142
|
+
hooks() {
|
|
143
|
+
return this.hookRegistry;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
export class LoggingPlugin {
|
|
147
|
+
metadata = {
|
|
148
|
+
name: 'logging',
|
|
149
|
+
version: '1.0.0',
|
|
150
|
+
description: 'Logs hook events',
|
|
151
|
+
};
|
|
152
|
+
getHooks() {
|
|
153
|
+
return {
|
|
154
|
+
[HookType.WORKFLOW_BEFORE_START]: [
|
|
155
|
+
(ctx) => {
|
|
156
|
+
console.log(`[workflow:start] ${ctx.workflowId ?? ''}`.trim());
|
|
157
|
+
},
|
|
158
|
+
],
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
export class MetricsPlugin {
|
|
163
|
+
metadata = {
|
|
164
|
+
name: 'metrics',
|
|
165
|
+
version: '1.0.0',
|
|
166
|
+
description: 'Collects basic metrics for hooks',
|
|
167
|
+
};
|
|
168
|
+
counts = {};
|
|
169
|
+
getHooks() {
|
|
170
|
+
return {
|
|
171
|
+
[HookType.STEP_AFTER_EXECUTE]: [
|
|
172
|
+
() => {
|
|
173
|
+
this.counts.stepAfterExecute = (this.counts.stepAfterExecute ?? 0) + 1;
|
|
174
|
+
},
|
|
175
|
+
],
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
getMetrics() {
|
|
179
|
+
return { ...this.counts };
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=plugins.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugins.js","sourceRoot":"","sources":["../src/plugins.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
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 { ExecutionContext } from './models.js';
|
|
8
|
+
export interface PromptVariable {
|
|
9
|
+
type: 'string' | 'number' | 'boolean' | 'array' | 'object';
|
|
10
|
+
required: boolean | undefined;
|
|
11
|
+
default: unknown;
|
|
12
|
+
description: string | undefined;
|
|
13
|
+
}
|
|
14
|
+
export interface LoadedPrompt {
|
|
15
|
+
name: string | undefined;
|
|
16
|
+
description: string | undefined;
|
|
17
|
+
variables: Record<string, PromptVariable>;
|
|
18
|
+
content: string;
|
|
19
|
+
rawContent: string;
|
|
20
|
+
filePath: string;
|
|
21
|
+
}
|
|
22
|
+
export interface ValidationResult {
|
|
23
|
+
valid: boolean;
|
|
24
|
+
errors: string[];
|
|
25
|
+
warnings: string[];
|
|
26
|
+
}
|
|
27
|
+
export interface ResolvedPrompt {
|
|
28
|
+
content: string;
|
|
29
|
+
variables: Record<string, unknown>;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Load a prompt file with optional YAML frontmatter.
|
|
33
|
+
*/
|
|
34
|
+
export declare function loadPromptFile(promptPath: string, basePath?: string): Promise<LoadedPrompt>;
|
|
35
|
+
/**
|
|
36
|
+
* Resolve {{ prompt.variable }} templates in a prompt.
|
|
37
|
+
*/
|
|
38
|
+
export declare function resolvePromptTemplate(prompt: LoadedPrompt, inputs: Record<string, unknown>, context?: ExecutionContext): ResolvedPrompt;
|
|
39
|
+
/**
|
|
40
|
+
* Validate that all required prompt inputs are provided.
|
|
41
|
+
*/
|
|
42
|
+
export declare function validatePromptInputs(prompt: LoadedPrompt, inputs: Record<string, unknown>): ValidationResult;
|
|
43
|
+
/**
|
|
44
|
+
* Extract all variable references from a prompt template.
|
|
45
|
+
*/
|
|
46
|
+
export declare function extractPromptVariables(content: string): string[];
|
|
47
|
+
//# sourceMappingURL=prompt-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-loader.d.ts","sourceRoot":"","sources":["../src/prompt-loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAM/C,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC3D,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAQD;;GAEG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,YAAY,CAAC,CA2DvB;AAMD;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,CAAC,EAAE,gBAAgB,GACzB,cAAc,CAuDhB;AAyBD;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,gBAAgB,CAmClB;AA0FD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAWhE"}
|