@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
package/dist/parser.js ADDED
@@ -0,0 +1,287 @@
1
+ /**
2
+ * Workflow Parser for marktoflow v2.0
3
+ *
4
+ * Parses markdown workflow files with YAML frontmatter.
5
+ * Extracts workflow metadata, tool configurations, and step definitions.
6
+ */
7
+ import { readFile } from 'node:fs/promises';
8
+ import { parse as parseYaml } from 'yaml';
9
+ import { WorkflowSchema, WorkflowStepSchema, ToolConfigSchema, } from './models.js';
10
+ export class ParseError extends Error {
11
+ line;
12
+ details;
13
+ constructor(message, line, details) {
14
+ super(message);
15
+ this.line = line;
16
+ this.details = details;
17
+ this.name = 'ParseError';
18
+ }
19
+ }
20
+ // ============================================================================
21
+ // Parser Implementation
22
+ // ============================================================================
23
+ const FRONTMATTER_REGEX = /^---\n([\s\S]*?)\n---/;
24
+ const STEP_CODE_BLOCK_REGEX = /```ya?ml\n([\s\S]*?)```/g;
25
+ /**
26
+ * Parse a workflow from a markdown file.
27
+ */
28
+ export async function parseFile(path, options = {}) {
29
+ const content = await readFile(path, 'utf-8');
30
+ return parseContent(content, options);
31
+ }
32
+ /**
33
+ * Parse a workflow from markdown content.
34
+ */
35
+ export function parseContent(content, options = {}) {
36
+ const { validate = true, resolveEnv = true } = options;
37
+ const warnings = [];
38
+ // Extract frontmatter
39
+ const frontmatterMatch = content.match(FRONTMATTER_REGEX);
40
+ if (!frontmatterMatch) {
41
+ throw new ParseError('No YAML frontmatter found. Workflow must start with ---');
42
+ }
43
+ const frontmatterYaml = frontmatterMatch[1];
44
+ let frontmatter;
45
+ try {
46
+ frontmatter = parseYaml(frontmatterYaml);
47
+ }
48
+ catch (error) {
49
+ throw new ParseError('Invalid YAML in frontmatter', undefined, error);
50
+ }
51
+ // Extract markdown body (after frontmatter)
52
+ const markdownBody = content.slice(frontmatterMatch[0].length).trim();
53
+ // Parse workflow structure
54
+ const workflow = buildWorkflow(frontmatter, markdownBody, warnings);
55
+ // Resolve environment variables
56
+ if (resolveEnv) {
57
+ resolveEnvironmentVariables(workflow);
58
+ }
59
+ // Validate with Zod
60
+ if (validate) {
61
+ const result = WorkflowSchema.safeParse(workflow);
62
+ if (!result.success) {
63
+ const issues = result.error.issues.map((i) => `${i.path.join('.')}: ${i.message}`);
64
+ throw new ParseError(`Workflow validation failed:\n${issues.join('\n')}`);
65
+ }
66
+ }
67
+ return { workflow, warnings };
68
+ }
69
+ /**
70
+ * Build a Workflow object from parsed frontmatter and markdown body.
71
+ */
72
+ function buildWorkflow(frontmatter, markdownBody, warnings) {
73
+ // Extract metadata
74
+ const workflowMeta = frontmatter.workflow || {};
75
+ const metadata = {
76
+ id: workflowMeta.id || 'unnamed',
77
+ name: workflowMeta.name || 'Unnamed Workflow',
78
+ version: workflowMeta.version || '1.0.0',
79
+ description: workflowMeta.description,
80
+ author: workflowMeta.author,
81
+ tags: workflowMeta.tags,
82
+ };
83
+ // Extract tools
84
+ const toolsRaw = frontmatter.tools || {};
85
+ const tools = {};
86
+ for (const [name, config] of Object.entries(toolsRaw)) {
87
+ const toolResult = ToolConfigSchema.safeParse(config);
88
+ if (toolResult.success) {
89
+ tools[name] = toolResult.data;
90
+ }
91
+ else {
92
+ warnings.push(`Invalid tool configuration for '${name}': ${toolResult.error.message}`);
93
+ }
94
+ }
95
+ // Extract inputs (validated later by Zod)
96
+ const inputsRaw = frontmatter.inputs;
97
+ const inputs = inputsRaw;
98
+ // Extract triggers (validated later by Zod)
99
+ const triggersRaw = frontmatter.triggers;
100
+ const triggers = triggersRaw?.map((t) => ({
101
+ type: t.type,
102
+ enabled: t.enabled !== false,
103
+ config: t.config || {},
104
+ }));
105
+ // Extract steps from frontmatter or markdown body
106
+ let steps = [];
107
+ if (frontmatter.steps && Array.isArray(frontmatter.steps)) {
108
+ // Steps defined in frontmatter
109
+ steps = parseStepsFromFrontmatter(frontmatter.steps, warnings);
110
+ }
111
+ else {
112
+ // Steps defined in markdown code blocks
113
+ steps = parseStepsFromMarkdown(markdownBody, warnings);
114
+ }
115
+ return {
116
+ metadata,
117
+ tools,
118
+ inputs,
119
+ triggers,
120
+ steps,
121
+ rawContent: markdownBody,
122
+ };
123
+ }
124
+ /**
125
+ * Parse steps from frontmatter array.
126
+ */
127
+ function parseStepsFromFrontmatter(stepsArray, warnings) {
128
+ const steps = [];
129
+ for (let i = 0; i < stepsArray.length; i++) {
130
+ const stepRaw = stepsArray[i];
131
+ const step = normalizeStep(stepRaw, i);
132
+ const result = WorkflowStepSchema.safeParse(step);
133
+ if (result.success) {
134
+ steps.push(result.data);
135
+ }
136
+ else {
137
+ warnings.push(`Invalid step at index ${i}: ${result.error.message}`);
138
+ }
139
+ }
140
+ return steps;
141
+ }
142
+ /**
143
+ * Parse steps from markdown code blocks.
144
+ */
145
+ function parseStepsFromMarkdown(markdown, warnings) {
146
+ const steps = [];
147
+ let stepIndex = 0;
148
+ // Find all YAML code blocks
149
+ let match;
150
+ while ((match = STEP_CODE_BLOCK_REGEX.exec(markdown)) !== null) {
151
+ const yamlContent = match[1];
152
+ try {
153
+ const stepRaw = parseYaml(yamlContent);
154
+ // Skip non-step code blocks (e.g., trigger definitions)
155
+ if (!stepRaw.action) {
156
+ continue;
157
+ }
158
+ const step = normalizeStep(stepRaw, stepIndex);
159
+ const result = WorkflowStepSchema.safeParse(step);
160
+ if (result.success) {
161
+ steps.push(result.data);
162
+ stepIndex++;
163
+ }
164
+ else {
165
+ warnings.push(`Invalid step in markdown: ${result.error.message}`);
166
+ }
167
+ }
168
+ catch (error) {
169
+ warnings.push(`Failed to parse YAML code block: ${error}`);
170
+ }
171
+ }
172
+ return steps;
173
+ }
174
+ /**
175
+ * Normalize a step object, converting snake_case to camelCase.
176
+ */
177
+ function normalizeStep(raw, index) {
178
+ return {
179
+ id: raw.id || `step-${index + 1}`,
180
+ name: raw.name,
181
+ action: raw.action,
182
+ inputs: raw.inputs || {},
183
+ outputVariable: raw.output_variable || raw.outputVariable,
184
+ conditions: raw.conditions,
185
+ errorHandling: normalizeErrorHandling(raw.error_handling || raw.errorHandling || raw.on_error),
186
+ timeout: raw.timeout,
187
+ };
188
+ }
189
+ /**
190
+ * Normalize error handling configuration.
191
+ */
192
+ function normalizeErrorHandling(raw) {
193
+ if (!raw || typeof raw !== 'object') {
194
+ return undefined;
195
+ }
196
+ const obj = raw;
197
+ return {
198
+ action: obj.action,
199
+ maxRetries: obj.max_retries ?? obj.maxRetries,
200
+ retryDelaySeconds: obj.retry_delay_seconds ?? obj.retryDelaySeconds,
201
+ fallbackAction: obj.fallback_action ?? obj.fallbackAction,
202
+ };
203
+ }
204
+ /**
205
+ * Resolve environment variable references in the workflow.
206
+ * Replaces ${VAR_NAME} with process.env.VAR_NAME.
207
+ */
208
+ function resolveEnvironmentVariables(workflow) {
209
+ const resolve = (value) => {
210
+ if (typeof value === 'string') {
211
+ return value.replace(/\$\{([^}]+)\}/g, (_, varName) => {
212
+ return process.env[varName] || '';
213
+ });
214
+ }
215
+ if (Array.isArray(value)) {
216
+ return value.map(resolve);
217
+ }
218
+ if (value && typeof value === 'object') {
219
+ const result = {};
220
+ for (const [k, v] of Object.entries(value)) {
221
+ result[k] = resolve(v);
222
+ }
223
+ return result;
224
+ }
225
+ return value;
226
+ };
227
+ // Resolve in tools
228
+ for (const toolConfig of Object.values(workflow.tools)) {
229
+ if (toolConfig.auth) {
230
+ toolConfig.auth = resolve(toolConfig.auth);
231
+ }
232
+ if (toolConfig.options) {
233
+ toolConfig.options = resolve(toolConfig.options);
234
+ }
235
+ }
236
+ // Resolve in inputs defaults
237
+ if (workflow.inputs) {
238
+ for (const input of Object.values(workflow.inputs)) {
239
+ if (input.default !== undefined) {
240
+ input.default = resolve(input.default);
241
+ }
242
+ }
243
+ }
244
+ }
245
+ /**
246
+ * Extract variable references from a template string.
247
+ * Returns list of variable names like ["var1", "var2"].
248
+ */
249
+ export function extractVariableReferences(template) {
250
+ const varRegex = /\{\{([^}]+)\}\}/g;
251
+ const matches = [];
252
+ let match;
253
+ while ((match = varRegex.exec(template)) !== null) {
254
+ matches.push(match[1].trim());
255
+ }
256
+ return matches;
257
+ }
258
+ /**
259
+ * Validate that all variable references in steps are defined.
260
+ */
261
+ export function validateVariableReferences(workflow) {
262
+ const errors = [];
263
+ const definedVars = new Set();
264
+ // Add input variables
265
+ if (workflow.inputs) {
266
+ for (const name of Object.keys(workflow.inputs)) {
267
+ definedVars.add(`inputs.${name}`);
268
+ }
269
+ }
270
+ // Check each step
271
+ for (const step of workflow.steps) {
272
+ // Check input values for variable references
273
+ const inputJson = JSON.stringify(step.inputs);
274
+ const refs = extractVariableReferences(inputJson);
275
+ for (const ref of refs) {
276
+ if (!definedVars.has(ref) && !ref.startsWith('inputs.')) {
277
+ errors.push(`Step '${step.id}' references undefined variable: ${ref}`);
278
+ }
279
+ }
280
+ // Add output variable to defined set
281
+ if (step.outputVariable) {
282
+ definedVars.add(step.outputVariable);
283
+ }
284
+ }
285
+ return errors;
286
+ }
287
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,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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"}
@@ -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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"}