mcp-agent-foundry 1.3.0 → 2.0.0
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 +350 -52
- package/dist/background/index.d.ts +33 -0
- package/dist/background/index.d.ts.map +1 -0
- package/dist/background/index.js +33 -0
- package/dist/background/index.js.map +1 -0
- package/dist/background/task-runner.d.ts +177 -0
- package/dist/background/task-runner.d.ts.map +1 -0
- package/dist/background/task-runner.js +551 -0
- package/dist/background/task-runner.js.map +1 -0
- package/dist/background/types.d.ts +135 -0
- package/dist/background/types.d.ts.map +1 -0
- package/dist/background/types.js +8 -0
- package/dist/background/types.js.map +1 -0
- package/dist/failover/health-tracker.d.ts +81 -1
- package/dist/failover/health-tracker.d.ts.map +1 -1
- package/dist/failover/health-tracker.js +229 -1
- package/dist/failover/health-tracker.js.map +1 -1
- package/dist/hooks/hook-executor.d.ts +77 -0
- package/dist/hooks/hook-executor.d.ts.map +1 -0
- package/dist/hooks/hook-executor.js +308 -0
- package/dist/hooks/hook-executor.js.map +1 -0
- package/dist/hooks/hook-manager.d.ts +140 -0
- package/dist/hooks/hook-manager.d.ts.map +1 -0
- package/dist/hooks/hook-manager.js +520 -0
- package/dist/hooks/hook-manager.js.map +1 -0
- package/dist/hooks/index.d.ts +10 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +10 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/types.d.ts +221 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/types.js +31 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/mcp/auto-mode.d.ts +221 -0
- package/dist/mcp/auto-mode.d.ts.map +1 -0
- package/dist/mcp/auto-mode.js +436 -0
- package/dist/mcp/auto-mode.js.map +1 -0
- package/dist/mcp/index.d.ts +14 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +22 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/tools/tasks/delete-task.d.ts +25 -0
- package/dist/mcp/tools/tasks/delete-task.d.ts.map +1 -0
- package/dist/mcp/tools/tasks/delete-task.js +148 -0
- package/dist/mcp/tools/tasks/delete-task.js.map +1 -0
- package/dist/mcp/tools/tasks/index.d.ts +2 -0
- package/dist/mcp/tools/tasks/index.d.ts.map +1 -1
- package/dist/mcp/tools/tasks/index.js +6 -0
- package/dist/mcp/tools/tasks/index.js.map +1 -1
- package/dist/observability/debug-logger.d.ts +209 -0
- package/dist/observability/debug-logger.d.ts.map +1 -0
- package/dist/observability/debug-logger.js +430 -0
- package/dist/observability/debug-logger.js.map +1 -0
- package/dist/observability/index.d.ts +12 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +12 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/logger.d.ts +180 -0
- package/dist/observability/logger.d.ts.map +1 -1
- package/dist/observability/logger.js +158 -0
- package/dist/observability/logger.js.map +1 -1
- package/dist/router/context-manager.d.ts +214 -1
- package/dist/router/context-manager.d.ts.map +1 -1
- package/dist/router/context-manager.js +759 -2
- package/dist/router/context-manager.js.map +1 -1
- package/dist/router/context-types.d.ts +182 -0
- package/dist/router/context-types.d.ts.map +1 -0
- package/dist/router/context-types.js +8 -0
- package/dist/router/context-types.js.map +1 -0
- package/dist/server.d.ts +41 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +165 -0
- package/dist/server.js.map +1 -1
- package/dist/skills/hot-reloader.d.ts +104 -0
- package/dist/skills/hot-reloader.d.ts.map +1 -0
- package/dist/skills/hot-reloader.js +314 -0
- package/dist/skills/hot-reloader.js.map +1 -0
- package/dist/skills/index.d.ts +14 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +16 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/skill-executor.d.ts +96 -0
- package/dist/skills/skill-executor.d.ts.map +1 -0
- package/dist/skills/skill-executor.js +289 -0
- package/dist/skills/skill-executor.js.map +1 -0
- package/dist/skills/skill-loader.d.ts +147 -0
- package/dist/skills/skill-loader.d.ts.map +1 -0
- package/dist/skills/skill-loader.js +579 -0
- package/dist/skills/skill-loader.js.map +1 -0
- package/dist/skills/types.d.ts +198 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/skills/types.js +21 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/tasks/coordinator.d.ts +22 -1
- package/dist/tasks/coordinator.d.ts.map +1 -1
- package/dist/tasks/coordinator.js +83 -0
- package/dist/tasks/coordinator.js.map +1 -1
- package/dist/tasks/state-coordinator.d.ts +19 -0
- package/dist/tasks/state-coordinator.d.ts.map +1 -1
- package/dist/tasks/state-coordinator.js +40 -0
- package/dist/tasks/state-coordinator.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,520 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook Manager
|
|
3
|
+
*
|
|
4
|
+
* Central manager for hook registration, filtering, and execution.
|
|
5
|
+
* Handles hook lifecycle, session tracking, and event triggering.
|
|
6
|
+
*/
|
|
7
|
+
import { EventEmitter } from 'events';
|
|
8
|
+
import { readFile } from 'fs/promises';
|
|
9
|
+
import { watch } from 'fs';
|
|
10
|
+
import { HookExecutor } from './hook-executor.js';
|
|
11
|
+
import { DEFAULT_HOOKS_CONFIG, HOOK_EVENTS } from './types.js';
|
|
12
|
+
// ============================================================================
|
|
13
|
+
// Hook Manager Class
|
|
14
|
+
// ============================================================================
|
|
15
|
+
/**
|
|
16
|
+
* Manages hook registration, filtering, and execution.
|
|
17
|
+
* Provides an event-based API for hook lifecycle notifications.
|
|
18
|
+
*/
|
|
19
|
+
export class HookManager extends EventEmitter {
|
|
20
|
+
logger;
|
|
21
|
+
executor;
|
|
22
|
+
config;
|
|
23
|
+
hooks;
|
|
24
|
+
runTracker; // Track hooks that have run (for once: true)
|
|
25
|
+
sessionId;
|
|
26
|
+
hooksFilePath;
|
|
27
|
+
fileWatcher;
|
|
28
|
+
constructor(config = {}, logger) {
|
|
29
|
+
super();
|
|
30
|
+
this.logger = logger.child({ component: 'HookManager' });
|
|
31
|
+
this.config = { ...DEFAULT_HOOKS_CONFIG, ...config };
|
|
32
|
+
this.executor = new HookExecutor(logger, this.config.default_timeout_ms);
|
|
33
|
+
this.hooks = new Map();
|
|
34
|
+
this.runTracker = new Set();
|
|
35
|
+
this.sessionId = this.generateSessionId();
|
|
36
|
+
// Initialize hooks from config
|
|
37
|
+
if (this.config.hooks.length > 0) {
|
|
38
|
+
this.registerHooks(this.config.hooks);
|
|
39
|
+
}
|
|
40
|
+
this.logger.debug('HookManager initialized', {
|
|
41
|
+
enabled: this.config.enabled,
|
|
42
|
+
hookCount: this.config.hooks.length,
|
|
43
|
+
failSilent: this.config.fail_silent,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Check if hooks system is enabled.
|
|
48
|
+
*/
|
|
49
|
+
get isEnabled() {
|
|
50
|
+
return this.config.enabled;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get the current session ID.
|
|
54
|
+
*/
|
|
55
|
+
getSessionId() {
|
|
56
|
+
return this.sessionId;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Register hooks from configuration.
|
|
60
|
+
* Validates and indexes hooks by event type.
|
|
61
|
+
*
|
|
62
|
+
* @param hooks - Hook definitions to register
|
|
63
|
+
*/
|
|
64
|
+
registerHooks(hooks) {
|
|
65
|
+
// Clear existing hooks
|
|
66
|
+
this.hooks.clear();
|
|
67
|
+
// Initialize empty arrays for all events
|
|
68
|
+
for (const event of HOOK_EVENTS) {
|
|
69
|
+
this.hooks.set(event, []);
|
|
70
|
+
}
|
|
71
|
+
// Register each hook
|
|
72
|
+
for (const hook of hooks) {
|
|
73
|
+
// Validate event type
|
|
74
|
+
if (!HOOK_EVENTS.includes(hook.event)) {
|
|
75
|
+
this.logger.warn('Invalid hook event type, skipping', {
|
|
76
|
+
hookName: hook.name,
|
|
77
|
+
event: hook.event,
|
|
78
|
+
validEvents: HOOK_EVENTS,
|
|
79
|
+
});
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
// Validate required fields
|
|
83
|
+
if (!hook.name || !hook.command) {
|
|
84
|
+
this.logger.warn('Hook missing required fields, skipping', {
|
|
85
|
+
hookName: hook.name,
|
|
86
|
+
hasCommand: !!hook.command,
|
|
87
|
+
});
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
const eventHooks = this.hooks.get(hook.event) ?? [];
|
|
91
|
+
eventHooks.push(hook);
|
|
92
|
+
this.hooks.set(hook.event, eventHooks);
|
|
93
|
+
this.logger.debug('Hook registered', {
|
|
94
|
+
hookName: hook.name,
|
|
95
|
+
event: hook.event,
|
|
96
|
+
enabled: hook.enabled !== false,
|
|
97
|
+
once: hook.once ?? false,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
const totalHooks = Array.from(this.hooks.values()).reduce((sum, arr) => sum + arr.length, 0);
|
|
101
|
+
this.logger.info('Hooks registered', {
|
|
102
|
+
totalHooks,
|
|
103
|
+
eventBreakdown: Object.fromEntries(Array.from(this.hooks.entries()).map(([event, arr]) => [event, arr.length])),
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Unregister a hook by name.
|
|
108
|
+
*
|
|
109
|
+
* @param name - Name of the hook to unregister
|
|
110
|
+
*/
|
|
111
|
+
unregisterHook(name) {
|
|
112
|
+
for (const [event, eventHooks] of this.hooks.entries()) {
|
|
113
|
+
const index = eventHooks.findIndex((h) => h.name === name);
|
|
114
|
+
if (index !== -1) {
|
|
115
|
+
eventHooks.splice(index, 1);
|
|
116
|
+
this.hooks.set(event, eventHooks);
|
|
117
|
+
this.logger.debug('Hook unregistered', { hookName: name, event });
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
this.logger.warn('Hook not found for unregistration', { hookName: name });
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Get all hooks registered for an event.
|
|
125
|
+
*
|
|
126
|
+
* @param event - Hook event type
|
|
127
|
+
* @returns Array of hook definitions
|
|
128
|
+
*/
|
|
129
|
+
getHooksForEvent(event) {
|
|
130
|
+
return this.hooks.get(event) ?? [];
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Trigger all hooks for an event.
|
|
134
|
+
* Executes matching hooks in registration order.
|
|
135
|
+
*
|
|
136
|
+
* @param event - Event to trigger
|
|
137
|
+
* @param input - Input data (without event and timestamp)
|
|
138
|
+
* @returns Combined result from all hooks
|
|
139
|
+
*/
|
|
140
|
+
async trigger(event, input) {
|
|
141
|
+
// Check if hooks are enabled
|
|
142
|
+
if (!this.config.enabled) {
|
|
143
|
+
return {
|
|
144
|
+
event,
|
|
145
|
+
hooksExecuted: 0,
|
|
146
|
+
results: [],
|
|
147
|
+
combinedOutput: {},
|
|
148
|
+
hasErrors: false,
|
|
149
|
+
shouldAbort: false,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
const eventHooks = this.getHooksForEvent(event);
|
|
153
|
+
if (eventHooks.length === 0) {
|
|
154
|
+
return {
|
|
155
|
+
event,
|
|
156
|
+
hooksExecuted: 0,
|
|
157
|
+
results: [],
|
|
158
|
+
combinedOutput: {},
|
|
159
|
+
hasErrors: false,
|
|
160
|
+
shouldAbort: false,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
// Build full input with event and timestamp
|
|
164
|
+
const fullInput = {
|
|
165
|
+
...input,
|
|
166
|
+
event,
|
|
167
|
+
timestamp: new Date(),
|
|
168
|
+
sessionId: this.sessionId,
|
|
169
|
+
};
|
|
170
|
+
// Filter to applicable hooks
|
|
171
|
+
const applicableHooks = eventHooks.filter((hook) => this.shouldRun(hook, fullInput));
|
|
172
|
+
if (applicableHooks.length === 0) {
|
|
173
|
+
return {
|
|
174
|
+
event,
|
|
175
|
+
hooksExecuted: 0,
|
|
176
|
+
results: [],
|
|
177
|
+
combinedOutput: {},
|
|
178
|
+
hasErrors: false,
|
|
179
|
+
shouldAbort: false,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
this.logger.debug('Triggering hooks', {
|
|
183
|
+
event,
|
|
184
|
+
totalHooks: eventHooks.length,
|
|
185
|
+
applicableHooks: applicableHooks.length,
|
|
186
|
+
});
|
|
187
|
+
// Execute hooks
|
|
188
|
+
const results = [];
|
|
189
|
+
let combinedOutput = {};
|
|
190
|
+
let hasErrors = false;
|
|
191
|
+
let shouldAbort = false;
|
|
192
|
+
for (const hook of applicableHooks) {
|
|
193
|
+
// Emit before event
|
|
194
|
+
this.emit('hook:before', { hook, input: fullInput });
|
|
195
|
+
try {
|
|
196
|
+
const result = await this.executor.execute(hook, fullInput);
|
|
197
|
+
results.push(result);
|
|
198
|
+
// Emit after event
|
|
199
|
+
this.emit('hook:after', { hook, result });
|
|
200
|
+
// Mark as run if once: true
|
|
201
|
+
if (hook.once) {
|
|
202
|
+
this.markRun(hook.name);
|
|
203
|
+
}
|
|
204
|
+
// Merge output
|
|
205
|
+
if (result.output) {
|
|
206
|
+
combinedOutput = this.mergeOutputs(combinedOutput, result.output);
|
|
207
|
+
}
|
|
208
|
+
// Check for errors
|
|
209
|
+
if (!result.success) {
|
|
210
|
+
hasErrors = true;
|
|
211
|
+
this.emit('hook:error', { hook, error: result.error ?? new Error('Unknown error') });
|
|
212
|
+
if (!this.config.fail_silent) {
|
|
213
|
+
shouldAbort = true;
|
|
214
|
+
break;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
// Check for abort request
|
|
218
|
+
if (result.output?.abort) {
|
|
219
|
+
shouldAbort = true;
|
|
220
|
+
break;
|
|
221
|
+
}
|
|
222
|
+
// For PreToolUse, check for deny decision
|
|
223
|
+
if (event === 'PreToolUse' && result.output?.decision === 'deny') {
|
|
224
|
+
shouldAbort = true;
|
|
225
|
+
break;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
catch (error) {
|
|
229
|
+
const errorObj = error instanceof Error ? error : new Error(String(error));
|
|
230
|
+
this.logger.error('Hook execution threw unexpected error', {
|
|
231
|
+
hookName: hook.name,
|
|
232
|
+
error: errorObj,
|
|
233
|
+
});
|
|
234
|
+
hasErrors = true;
|
|
235
|
+
results.push({
|
|
236
|
+
hook,
|
|
237
|
+
success: false,
|
|
238
|
+
error: errorObj,
|
|
239
|
+
durationMs: 0,
|
|
240
|
+
});
|
|
241
|
+
this.emit('hook:error', {
|
|
242
|
+
hook,
|
|
243
|
+
error: errorObj,
|
|
244
|
+
});
|
|
245
|
+
if (!this.config.fail_silent) {
|
|
246
|
+
shouldAbort = true;
|
|
247
|
+
break;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
this.logger.debug('Hooks triggered', {
|
|
252
|
+
event,
|
|
253
|
+
hooksExecuted: results.length,
|
|
254
|
+
hasErrors,
|
|
255
|
+
shouldAbort,
|
|
256
|
+
});
|
|
257
|
+
return {
|
|
258
|
+
event,
|
|
259
|
+
hooksExecuted: results.length,
|
|
260
|
+
results,
|
|
261
|
+
combinedOutput,
|
|
262
|
+
hasErrors,
|
|
263
|
+
shouldAbort,
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Check if a hook should run based on filters and run tracking.
|
|
268
|
+
*
|
|
269
|
+
* @param hook - Hook definition to check
|
|
270
|
+
* @param input - Hook input data
|
|
271
|
+
* @returns True if hook should run
|
|
272
|
+
*/
|
|
273
|
+
shouldRun(hook, input) {
|
|
274
|
+
// Check if enabled
|
|
275
|
+
if (hook.enabled === false) {
|
|
276
|
+
return false;
|
|
277
|
+
}
|
|
278
|
+
// Check once tracking
|
|
279
|
+
if (hook.once && this.hasRun(hook.name)) {
|
|
280
|
+
return false;
|
|
281
|
+
}
|
|
282
|
+
// Check tool filter
|
|
283
|
+
if (hook.tools && hook.tools.length > 0 && input.toolName) {
|
|
284
|
+
const matchesTool = hook.tools.some((pattern) => this.matchesPattern(input.toolName, pattern));
|
|
285
|
+
if (!matchesTool) {
|
|
286
|
+
return false;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
// Check provider filter
|
|
290
|
+
if (hook.providers && hook.providers.length > 0 && input.provider) {
|
|
291
|
+
if (!hook.providers.includes(input.provider)) {
|
|
292
|
+
return false;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
// Check role filter
|
|
296
|
+
if (hook.roles && hook.roles.length > 0 && input.role) {
|
|
297
|
+
if (!hook.roles.includes(input.role)) {
|
|
298
|
+
return false;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
// Check error code filter
|
|
302
|
+
if (hook.error_codes && hook.error_codes.length > 0) {
|
|
303
|
+
if (input.errorCode === undefined || !hook.error_codes.includes(input.errorCode)) {
|
|
304
|
+
return false;
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
return true;
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Mark a hook as having run (for once: true hooks).
|
|
311
|
+
*
|
|
312
|
+
* @param hookName - Name of the hook
|
|
313
|
+
*/
|
|
314
|
+
markRun(hookName) {
|
|
315
|
+
this.runTracker.add(hookName);
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Check if a hook has already run this session.
|
|
319
|
+
*
|
|
320
|
+
* @param hookName - Name of the hook
|
|
321
|
+
* @returns True if hook has run
|
|
322
|
+
*/
|
|
323
|
+
hasRun(hookName) {
|
|
324
|
+
return this.runTracker.has(hookName);
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Reset run tracking (for new session).
|
|
328
|
+
*/
|
|
329
|
+
resetSession() {
|
|
330
|
+
this.runTracker.clear();
|
|
331
|
+
this.sessionId = this.generateSessionId();
|
|
332
|
+
this.logger.debug('Session reset', { newSessionId: this.sessionId });
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Load hooks from an external file.
|
|
336
|
+
*
|
|
337
|
+
* @param path - Path to hooks configuration file (JSON or YAML)
|
|
338
|
+
*/
|
|
339
|
+
async loadFromFile(path) {
|
|
340
|
+
this.hooksFilePath = path;
|
|
341
|
+
try {
|
|
342
|
+
const content = await readFile(path, 'utf-8');
|
|
343
|
+
const hooks = this.parseHooksFile(content, path);
|
|
344
|
+
this.registerHooks(hooks);
|
|
345
|
+
this.logger.info('Hooks loaded from file', {
|
|
346
|
+
path,
|
|
347
|
+
hookCount: hooks.length,
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
catch (error) {
|
|
351
|
+
const errorObj = error instanceof Error ? error : new Error(String(error));
|
|
352
|
+
this.logger.error('Failed to load hooks from file', {
|
|
353
|
+
path,
|
|
354
|
+
error: errorObj,
|
|
355
|
+
});
|
|
356
|
+
throw error;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Start watching hooks file for changes.
|
|
361
|
+
* Automatically reloads hooks when file changes.
|
|
362
|
+
*/
|
|
363
|
+
watchFile() {
|
|
364
|
+
if (!this.hooksFilePath) {
|
|
365
|
+
this.logger.warn('No hooks file path set, cannot watch');
|
|
366
|
+
return;
|
|
367
|
+
}
|
|
368
|
+
// Stop existing watcher
|
|
369
|
+
this.stopWatching();
|
|
370
|
+
try {
|
|
371
|
+
this.fileWatcher = watch(this.hooksFilePath, async (eventType) => {
|
|
372
|
+
if (eventType === 'change') {
|
|
373
|
+
this.logger.info('Hooks file changed, reloading', {
|
|
374
|
+
path: this.hooksFilePath,
|
|
375
|
+
});
|
|
376
|
+
await this.reload();
|
|
377
|
+
}
|
|
378
|
+
});
|
|
379
|
+
this.logger.debug('Watching hooks file', { path: this.hooksFilePath });
|
|
380
|
+
}
|
|
381
|
+
catch (error) {
|
|
382
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
383
|
+
this.logger.warn('Failed to watch hooks file', {
|
|
384
|
+
path: this.hooksFilePath,
|
|
385
|
+
error: errorMessage,
|
|
386
|
+
});
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* Stop watching hooks file.
|
|
391
|
+
*/
|
|
392
|
+
stopWatching() {
|
|
393
|
+
if (this.fileWatcher) {
|
|
394
|
+
this.fileWatcher.close();
|
|
395
|
+
this.fileWatcher = undefined;
|
|
396
|
+
this.logger.debug('Stopped watching hooks file');
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* Hot-reload hooks from file.
|
|
401
|
+
*/
|
|
402
|
+
async reload() {
|
|
403
|
+
if (!this.hooksFilePath) {
|
|
404
|
+
this.logger.warn('No hooks file path set, cannot reload');
|
|
405
|
+
return;
|
|
406
|
+
}
|
|
407
|
+
try {
|
|
408
|
+
await this.loadFromFile(this.hooksFilePath);
|
|
409
|
+
this.emit('hooks:reload', { count: this.config.hooks.length });
|
|
410
|
+
}
|
|
411
|
+
catch (error) {
|
|
412
|
+
const errorObj = error instanceof Error ? error : new Error(String(error));
|
|
413
|
+
this.logger.error('Failed to reload hooks', { error: errorObj });
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
/**
|
|
417
|
+
* Update configuration.
|
|
418
|
+
*
|
|
419
|
+
* @param config - New configuration (partial)
|
|
420
|
+
*/
|
|
421
|
+
updateConfig(config) {
|
|
422
|
+
this.config = { ...this.config, ...config };
|
|
423
|
+
if (config.hooks) {
|
|
424
|
+
this.registerHooks(config.hooks);
|
|
425
|
+
}
|
|
426
|
+
this.logger.debug('Configuration updated', {
|
|
427
|
+
enabled: this.config.enabled,
|
|
428
|
+
hookCount: this.config.hooks.length,
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
/**
|
|
432
|
+
* Get current configuration.
|
|
433
|
+
*/
|
|
434
|
+
getConfig() {
|
|
435
|
+
return { ...this.config };
|
|
436
|
+
}
|
|
437
|
+
/**
|
|
438
|
+
* Shutdown hook manager and cleanup resources.
|
|
439
|
+
*/
|
|
440
|
+
shutdown() {
|
|
441
|
+
this.stopWatching();
|
|
442
|
+
this.removeAllListeners();
|
|
443
|
+
this.hooks.clear();
|
|
444
|
+
this.runTracker.clear();
|
|
445
|
+
this.logger.debug('HookManager shutdown');
|
|
446
|
+
}
|
|
447
|
+
// ============================================================================
|
|
448
|
+
// Private Methods
|
|
449
|
+
// ============================================================================
|
|
450
|
+
/**
|
|
451
|
+
* Generate a unique session ID.
|
|
452
|
+
*/
|
|
453
|
+
generateSessionId() {
|
|
454
|
+
return `session-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;
|
|
455
|
+
}
|
|
456
|
+
/**
|
|
457
|
+
* Parse hooks file content (JSON).
|
|
458
|
+
*/
|
|
459
|
+
parseHooksFile(content, path) {
|
|
460
|
+
try {
|
|
461
|
+
const parsed = JSON.parse(content);
|
|
462
|
+
// Support both { hooks: [...] } and [...] formats
|
|
463
|
+
if (Array.isArray(parsed)) {
|
|
464
|
+
return parsed;
|
|
465
|
+
}
|
|
466
|
+
if (parsed.hooks && Array.isArray(parsed.hooks)) {
|
|
467
|
+
return parsed.hooks;
|
|
468
|
+
}
|
|
469
|
+
throw new Error('Invalid hooks file format: expected array or object with hooks array');
|
|
470
|
+
}
|
|
471
|
+
catch (error) {
|
|
472
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
473
|
+
throw new Error(`Failed to parse hooks file ${path}: ${errorMessage}`);
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
/**
|
|
477
|
+
* Match a string against a pattern (supports * wildcard).
|
|
478
|
+
*/
|
|
479
|
+
matchesPattern(value, pattern) {
|
|
480
|
+
// Exact match
|
|
481
|
+
if (pattern === value) {
|
|
482
|
+
return true;
|
|
483
|
+
}
|
|
484
|
+
// Wildcard match
|
|
485
|
+
if (pattern.includes('*')) {
|
|
486
|
+
const regex = new RegExp('^' + pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&').replace(/\\\*/g, '.*') + '$');
|
|
487
|
+
return regex.test(value);
|
|
488
|
+
}
|
|
489
|
+
return false;
|
|
490
|
+
}
|
|
491
|
+
/**
|
|
492
|
+
* Merge two hook outputs, with later values taking precedence.
|
|
493
|
+
*/
|
|
494
|
+
mergeOutputs(base, overlay) {
|
|
495
|
+
return {
|
|
496
|
+
// Decision: later hook wins
|
|
497
|
+
decision: overlay.decision ?? base.decision,
|
|
498
|
+
// Context: concatenate
|
|
499
|
+
additionalContext: base.additionalContext && overlay.additionalContext
|
|
500
|
+
? `${base.additionalContext}\n${overlay.additionalContext}`
|
|
501
|
+
: overlay.additionalContext ?? base.additionalContext,
|
|
502
|
+
// Updated input: merge deeply
|
|
503
|
+
updatedInput: base.updatedInput || overlay.updatedInput
|
|
504
|
+
? { ...base.updatedInput, ...overlay.updatedInput }
|
|
505
|
+
: undefined,
|
|
506
|
+
// Message: concatenate
|
|
507
|
+
message: base.message && overlay.message
|
|
508
|
+
? `${base.message}\n${overlay.message}`
|
|
509
|
+
: overlay.message ?? base.message,
|
|
510
|
+
// Abort: true if either says abort
|
|
511
|
+
abort: base.abort || overlay.abort,
|
|
512
|
+
// Keep last exit code
|
|
513
|
+
exitCode: overlay.exitCode ?? base.exitCode,
|
|
514
|
+
// Keep last stdout/stderr
|
|
515
|
+
stdout: overlay.stdout ?? base.stdout,
|
|
516
|
+
stderr: overlay.stderr ?? base.stderr,
|
|
517
|
+
};
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
//# sourceMappingURL=hook-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-manager.js","sourceRoot":"","sources":["../../src/hooks/hook-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hooks Module
|
|
3
|
+
*
|
|
4
|
+
* Exports the hooks system for Agent Foundry.
|
|
5
|
+
* Allows custom code to run in response to events during agent execution.
|
|
6
|
+
*/
|
|
7
|
+
export * from './types.js';
|
|
8
|
+
export { HookManager } from './hook-manager.js';
|
|
9
|
+
export { HookExecutor } from './hook-executor.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hooks Module
|
|
3
|
+
*
|
|
4
|
+
* Exports the hooks system for Agent Foundry.
|
|
5
|
+
* Allows custom code to run in response to events during agent execution.
|
|
6
|
+
*/
|
|
7
|
+
export * from './types.js';
|
|
8
|
+
export { HookManager } from './hook-manager.js';
|
|
9
|
+
export { HookExecutor } from './hook-executor.js';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
|