mcp-agent-foundry 1.3.1 → 2.1.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 +265 -2
- 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/config/validator.d.ts +2 -2
- package/dist/config/validator.d.ts.map +1 -1
- package/dist/config/validator.js +2 -2
- package/dist/config/validator.js.map +1 -1
- 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/failover/orchestrator.d.ts.map +1 -1
- package/dist/failover/orchestrator.js +12 -2
- package/dist/failover/orchestrator.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/critique-plan.d.ts.map +1 -1
- package/dist/mcp/tools/critique-plan.js +57 -4
- package/dist/mcp/tools/critique-plan.js.map +1 -1
- package/dist/mcp/tools/design-feedback.d.ts.map +1 -1
- package/dist/mcp/tools/design-feedback.js +58 -4
- package/dist/mcp/tools/design-feedback.js.map +1 -1
- package/dist/mcp/tools/invoke-agent.d.ts.map +1 -1
- package/dist/mcp/tools/invoke-agent.js +64 -1
- package/dist/mcp/tools/invoke-agent.js.map +1 -1
- package/dist/mcp/tools/review-code.d.ts.map +1 -1
- package/dist/mcp/tools/review-code.js +57 -4
- package/dist/mcp/tools/review-code.js.map +1 -1
- 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/execute-task.d.ts.map +1 -1
- package/dist/mcp/tools/tasks/execute-task.js +74 -5
- package/dist/mcp/tools/tasks/execute-task.js.map +1 -1
- 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/providers/anthropic.d.ts +40 -6
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +120 -8
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/base.d.ts +6 -3
- package/dist/providers/base.d.ts.map +1 -1
- package/dist/providers/base.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/router/engine.d.ts +3 -3
- package/dist/router/engine.d.ts.map +1 -1
- package/dist/router/engine.js +32 -4
- package/dist/router/engine.js.map +1 -1
- package/dist/router/pattern-executor.d.ts.map +1 -1
- package/dist/router/pattern-executor.js +38 -7
- package/dist/router/pattern-executor.js.map +1 -1
- 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/dist/types.d.ts +39 -7
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill Hot Reloader
|
|
3
|
+
*
|
|
4
|
+
* Watches skill directories for file changes and hot-reloads skills
|
|
5
|
+
* without requiring server restart. Uses debouncing to prevent
|
|
6
|
+
* rapid reload storms.
|
|
7
|
+
*/
|
|
8
|
+
import { watch } from 'fs';
|
|
9
|
+
import { promises as fs } from 'fs';
|
|
10
|
+
import path from 'path';
|
|
11
|
+
import os from 'os';
|
|
12
|
+
import { EventEmitter } from 'events';
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// Hot Reloader Class
|
|
15
|
+
// ============================================================================
|
|
16
|
+
/**
|
|
17
|
+
* Watches skill directories and hot-reloads on changes.
|
|
18
|
+
* Supports multiple watched directories with debounced reload.
|
|
19
|
+
*/
|
|
20
|
+
export class SkillHotReloader extends EventEmitter {
|
|
21
|
+
watchers = new Map();
|
|
22
|
+
loader;
|
|
23
|
+
config;
|
|
24
|
+
logger;
|
|
25
|
+
debounceTimers = new Map();
|
|
26
|
+
debounceMs = 500;
|
|
27
|
+
isRunning = false;
|
|
28
|
+
constructor(loader, config, logger) {
|
|
29
|
+
super();
|
|
30
|
+
this.loader = loader;
|
|
31
|
+
this.config = config;
|
|
32
|
+
this.logger = logger.child({ component: 'SkillHotReloader' });
|
|
33
|
+
this.logger.debug('SkillHotReloader initialized', {
|
|
34
|
+
watchForChanges: config.watchForChanges,
|
|
35
|
+
searchPaths: config.searchPaths,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
// ==========================================================================
|
|
39
|
+
// Lifecycle Methods
|
|
40
|
+
// ==========================================================================
|
|
41
|
+
/**
|
|
42
|
+
* Start watching all configured skill directories.
|
|
43
|
+
* Creates watchers for each search path.
|
|
44
|
+
*/
|
|
45
|
+
start() {
|
|
46
|
+
if (!this.config.watchForChanges) {
|
|
47
|
+
this.logger.debug('File watching disabled, skipping');
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
if (this.isRunning) {
|
|
51
|
+
this.logger.warn('Hot reloader already running');
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
this.isRunning = true;
|
|
55
|
+
for (const searchPath of this.config.searchPaths) {
|
|
56
|
+
const expandedPath = this.expandPath(searchPath);
|
|
57
|
+
this.watchDirectory(expandedPath);
|
|
58
|
+
}
|
|
59
|
+
this.logger.info('Hot reloader started', {
|
|
60
|
+
watchedPaths: this.getWatchedPaths(),
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Stop watching all directories.
|
|
65
|
+
* Cleans up watchers and pending timers.
|
|
66
|
+
*/
|
|
67
|
+
stop() {
|
|
68
|
+
if (!this.isRunning) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
// Clear all debounce timers
|
|
72
|
+
for (const timer of this.debounceTimers.values()) {
|
|
73
|
+
clearTimeout(timer);
|
|
74
|
+
}
|
|
75
|
+
this.debounceTimers.clear();
|
|
76
|
+
// Close all watchers
|
|
77
|
+
for (const [path, watcher] of this.watchers.entries()) {
|
|
78
|
+
watcher.close();
|
|
79
|
+
this.logger.debug('Stopped watching directory', { path });
|
|
80
|
+
}
|
|
81
|
+
this.watchers.clear();
|
|
82
|
+
this.isRunning = false;
|
|
83
|
+
this.logger.info('Hot reloader stopped');
|
|
84
|
+
}
|
|
85
|
+
// ==========================================================================
|
|
86
|
+
// Watch Methods
|
|
87
|
+
// ==========================================================================
|
|
88
|
+
/**
|
|
89
|
+
* Watch a specific directory for changes.
|
|
90
|
+
* Creates recursive watcher if directory exists.
|
|
91
|
+
*
|
|
92
|
+
* @param dirPath - Directory path to watch
|
|
93
|
+
*/
|
|
94
|
+
watchDirectory(dirPath) {
|
|
95
|
+
const expandedPath = this.expandPath(dirPath);
|
|
96
|
+
// Check if already watching
|
|
97
|
+
if (this.watchers.has(expandedPath)) {
|
|
98
|
+
this.logger.debug('Already watching directory', { path: expandedPath });
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
// Check if directory exists
|
|
102
|
+
this.ensureDirectoryExists(expandedPath)
|
|
103
|
+
.then(() => {
|
|
104
|
+
this.createWatcher(expandedPath);
|
|
105
|
+
})
|
|
106
|
+
.catch((error) => {
|
|
107
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
108
|
+
this.logger.debug('Cannot watch directory (may not exist)', {
|
|
109
|
+
path: expandedPath,
|
|
110
|
+
error: errorMessage,
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Ensure directory exists, creating it if necessary.
|
|
116
|
+
*/
|
|
117
|
+
async ensureDirectoryExists(dirPath) {
|
|
118
|
+
try {
|
|
119
|
+
const stat = await fs.stat(dirPath);
|
|
120
|
+
if (!stat.isDirectory()) {
|
|
121
|
+
throw new Error('Path is not a directory');
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
if (error.code === 'ENOENT') {
|
|
126
|
+
// Directory doesn't exist - don't create it, just skip
|
|
127
|
+
throw error;
|
|
128
|
+
}
|
|
129
|
+
throw error;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Create a file watcher for a directory.
|
|
134
|
+
*/
|
|
135
|
+
createWatcher(dirPath) {
|
|
136
|
+
try {
|
|
137
|
+
// Use recursive option if available (Node.js 14.17+)
|
|
138
|
+
const watcher = watch(dirPath, { recursive: true }, (eventType, filename) => {
|
|
139
|
+
if (filename) {
|
|
140
|
+
this.handleFileChange(eventType, filename, dirPath);
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
watcher.on('error', (error) => {
|
|
144
|
+
this.logger.error('Watch error', {
|
|
145
|
+
path: dirPath,
|
|
146
|
+
error,
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
watcher.on('close', () => {
|
|
150
|
+
this.watchers.delete(dirPath);
|
|
151
|
+
this.logger.debug('Watcher closed', { path: dirPath });
|
|
152
|
+
});
|
|
153
|
+
this.watchers.set(dirPath, watcher);
|
|
154
|
+
this.logger.debug('Watching directory', { path: dirPath });
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
158
|
+
this.logger.warn('Failed to create watcher', {
|
|
159
|
+
path: dirPath,
|
|
160
|
+
error: errorMessage,
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// ==========================================================================
|
|
165
|
+
// Event Handling Methods
|
|
166
|
+
// ==========================================================================
|
|
167
|
+
/**
|
|
168
|
+
* Handle file change event from watcher.
|
|
169
|
+
* Debounces rapid changes and filters to skill files.
|
|
170
|
+
*/
|
|
171
|
+
handleFileChange(eventType, filename, dirPath) {
|
|
172
|
+
// Only handle skill files
|
|
173
|
+
if (!this.isSkillFile(filename)) {
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
const fullPath = path.join(dirPath, filename);
|
|
177
|
+
this.logger.debug('File change detected', {
|
|
178
|
+
eventType,
|
|
179
|
+
filename,
|
|
180
|
+
fullPath,
|
|
181
|
+
});
|
|
182
|
+
// Schedule debounced reload
|
|
183
|
+
this.scheduleReload(fullPath);
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Schedule a debounced reload for a file.
|
|
187
|
+
* Cancels any pending reload for the same file.
|
|
188
|
+
*
|
|
189
|
+
* @param filePath - File path to reload
|
|
190
|
+
*/
|
|
191
|
+
scheduleReload(filePath) {
|
|
192
|
+
// Cancel existing timer for this file
|
|
193
|
+
const existingTimer = this.debounceTimers.get(filePath);
|
|
194
|
+
if (existingTimer) {
|
|
195
|
+
clearTimeout(existingTimer);
|
|
196
|
+
}
|
|
197
|
+
// Schedule new reload
|
|
198
|
+
const timer = setTimeout(() => {
|
|
199
|
+
this.debounceTimers.delete(filePath);
|
|
200
|
+
void this.reloadFile(filePath);
|
|
201
|
+
}, this.debounceMs);
|
|
202
|
+
this.debounceTimers.set(filePath, timer);
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Reload a skill file.
|
|
206
|
+
* Handles file creation, modification, and deletion.
|
|
207
|
+
*/
|
|
208
|
+
async reloadFile(filePath) {
|
|
209
|
+
try {
|
|
210
|
+
// Check if file still exists
|
|
211
|
+
const exists = await this.fileExists(filePath);
|
|
212
|
+
if (!exists) {
|
|
213
|
+
// File was deleted - find and unregister the skill
|
|
214
|
+
const skillName = this.findSkillByPath(filePath);
|
|
215
|
+
if (skillName) {
|
|
216
|
+
this.loader.unregister(skillName);
|
|
217
|
+
this.emitReloadEvent({ name: skillName }, 'removed');
|
|
218
|
+
this.logger.info('Skill removed (file deleted)', {
|
|
219
|
+
name: skillName,
|
|
220
|
+
path: filePath,
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
// Check if this is an update or new skill
|
|
226
|
+
const existingSkillName = this.findSkillByPath(filePath);
|
|
227
|
+
const action = existingSkillName ? 'updated' : 'added';
|
|
228
|
+
// Load the skill file
|
|
229
|
+
const skill = await this.loader.loadSkillFile(filePath);
|
|
230
|
+
if (skill) {
|
|
231
|
+
this.emitReloadEvent(skill, action);
|
|
232
|
+
this.logger.info(`Skill ${action}`, {
|
|
233
|
+
name: skill.name,
|
|
234
|
+
path: filePath,
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
catch (error) {
|
|
239
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
240
|
+
this.logger.error('Failed to reload skill file', {
|
|
241
|
+
path: filePath,
|
|
242
|
+
error: err,
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
// ==========================================================================
|
|
247
|
+
// Helper Methods
|
|
248
|
+
// ==========================================================================
|
|
249
|
+
/**
|
|
250
|
+
* Check if a file exists.
|
|
251
|
+
*/
|
|
252
|
+
async fileExists(filePath) {
|
|
253
|
+
try {
|
|
254
|
+
await fs.access(filePath);
|
|
255
|
+
return true;
|
|
256
|
+
}
|
|
257
|
+
catch {
|
|
258
|
+
return false;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Find skill name by source path.
|
|
263
|
+
*/
|
|
264
|
+
findSkillByPath(filePath) {
|
|
265
|
+
for (const skill of this.loader.getAllSkills()) {
|
|
266
|
+
if (skill.sourcePath === filePath) {
|
|
267
|
+
return skill.name;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
return undefined;
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Check if filename matches skill file patterns.
|
|
274
|
+
*/
|
|
275
|
+
isSkillFile(filename) {
|
|
276
|
+
const ext = path.extname(filename).toLowerCase();
|
|
277
|
+
return ['.yaml', '.yml', '.json'].includes(ext);
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Expand ~ in paths to home directory.
|
|
281
|
+
*/
|
|
282
|
+
expandPath(p) {
|
|
283
|
+
if (p.startsWith('~')) {
|
|
284
|
+
return path.join(os.homedir(), p.slice(1));
|
|
285
|
+
}
|
|
286
|
+
return p;
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Get list of currently watched directories.
|
|
290
|
+
*/
|
|
291
|
+
getWatchedPaths() {
|
|
292
|
+
return Array.from(this.watchers.keys());
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Emit a reload event.
|
|
296
|
+
*/
|
|
297
|
+
emitReloadEvent(skill, action) {
|
|
298
|
+
const event = { skill, action };
|
|
299
|
+
this.emit('skill:reloaded', event);
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Set debounce delay (for testing).
|
|
303
|
+
*/
|
|
304
|
+
setDebounceMs(ms) {
|
|
305
|
+
this.debounceMs = ms;
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Check if hot reloader is running.
|
|
309
|
+
*/
|
|
310
|
+
get running() {
|
|
311
|
+
return this.isRunning;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
//# sourceMappingURL=hot-reloader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hot-reloader.js","sourceRoot":"","sources":["../../src/skills/hot-reloader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skills System
|
|
3
|
+
*
|
|
4
|
+
* Hot-reloadable skills system for Agent Foundry.
|
|
5
|
+
* Skills are YAML/JSON-defined capabilities that can be triggered
|
|
6
|
+
* automatically or invoked manually.
|
|
7
|
+
*
|
|
8
|
+
* @module skills
|
|
9
|
+
*/
|
|
10
|
+
export * from './types.js';
|
|
11
|
+
export { SkillLoader } from './skill-loader.js';
|
|
12
|
+
export { SkillHotReloader } from './hot-reloader.js';
|
|
13
|
+
export { SkillExecutor } from './skill-executor.js';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,cAAc,YAAY,CAAC;AAG3B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skills System
|
|
3
|
+
*
|
|
4
|
+
* Hot-reloadable skills system for Agent Foundry.
|
|
5
|
+
* Skills are YAML/JSON-defined capabilities that can be triggered
|
|
6
|
+
* automatically or invoked manually.
|
|
7
|
+
*
|
|
8
|
+
* @module skills
|
|
9
|
+
*/
|
|
10
|
+
// Types
|
|
11
|
+
export * from './types.js';
|
|
12
|
+
// Core classes
|
|
13
|
+
export { SkillLoader } from './skill-loader.js';
|
|
14
|
+
export { SkillHotReloader } from './hot-reloader.js';
|
|
15
|
+
export { SkillExecutor } from './skill-executor.js';
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,QAAQ;AACR,cAAc,YAAY,CAAC;AAE3B,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill Executor
|
|
3
|
+
*
|
|
4
|
+
* Executes skills with proper context handling.
|
|
5
|
+
* Supports forked, inherited, and isolated context modes.
|
|
6
|
+
*/
|
|
7
|
+
import type { Logger } from '../observability/logger.js';
|
|
8
|
+
import type { SkillDefinition, SkillContext, SkillResult, SkillContextMode } from './types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Executes skills with proper context handling.
|
|
11
|
+
* Manages context isolation, forking, and inheritance.
|
|
12
|
+
*/
|
|
13
|
+
export declare class SkillExecutor {
|
|
14
|
+
private logger;
|
|
15
|
+
private defaultContextMode;
|
|
16
|
+
constructor(logger: Logger, defaultContextMode?: SkillContextMode);
|
|
17
|
+
/**
|
|
18
|
+
* Execute a skill with the given context and input.
|
|
19
|
+
*
|
|
20
|
+
* @param skill - Skill definition to execute
|
|
21
|
+
* @param context - Execution context
|
|
22
|
+
* @param input - Input data for the skill
|
|
23
|
+
* @returns Execution result
|
|
24
|
+
*/
|
|
25
|
+
execute(skill: SkillDefinition, context: SkillContext, input: {
|
|
26
|
+
prompt?: string;
|
|
27
|
+
data?: unknown;
|
|
28
|
+
}): Promise<SkillResult>;
|
|
29
|
+
/**
|
|
30
|
+
* Create forked context from parent context.
|
|
31
|
+
* Child context is a deep copy with reference to parent.
|
|
32
|
+
*
|
|
33
|
+
* @param parentContext - Parent context to fork from
|
|
34
|
+
* @returns Forked child context
|
|
35
|
+
*/
|
|
36
|
+
forkContext(parentContext: SkillContext): SkillContext;
|
|
37
|
+
/**
|
|
38
|
+
* Create isolated context with no parent data.
|
|
39
|
+
* Only includes session ID for correlation.
|
|
40
|
+
*
|
|
41
|
+
* @param sessionId - Session ID to use
|
|
42
|
+
* @returns Fresh isolated context
|
|
43
|
+
*/
|
|
44
|
+
createIsolatedContext(sessionId: string): SkillContext;
|
|
45
|
+
/**
|
|
46
|
+
* Create a new context for a session.
|
|
47
|
+
*
|
|
48
|
+
* @param sessionId - Optional session ID (generated if not provided)
|
|
49
|
+
* @returns New skill context
|
|
50
|
+
*/
|
|
51
|
+
createContext(sessionId?: string): SkillContext;
|
|
52
|
+
/**
|
|
53
|
+
* Prepare execution context based on context mode.
|
|
54
|
+
*
|
|
55
|
+
* @param context - Original context
|
|
56
|
+
* @param mode - Context handling mode
|
|
57
|
+
* @returns Prepared execution context
|
|
58
|
+
*/
|
|
59
|
+
private prepareContext;
|
|
60
|
+
/**
|
|
61
|
+
* Build system prompt for skill execution.
|
|
62
|
+
* Combines skill's system prompt with role information.
|
|
63
|
+
*
|
|
64
|
+
* @param skill - Skill definition
|
|
65
|
+
* @returns Built system prompt
|
|
66
|
+
*/
|
|
67
|
+
buildSystemPrompt(skill: SkillDefinition): string;
|
|
68
|
+
/**
|
|
69
|
+
* Apply context modifications back to parent context.
|
|
70
|
+
* Used when inherit mode skill execution completes.
|
|
71
|
+
*
|
|
72
|
+
* @param parentContext - Parent context to modify
|
|
73
|
+
* @param modifications - Modifications to apply
|
|
74
|
+
*/
|
|
75
|
+
applyContextModifications(parentContext: SkillContext, modifications: Record<string, unknown>): void;
|
|
76
|
+
/**
|
|
77
|
+
* Execute the actual skill logic.
|
|
78
|
+
* This is a placeholder for integration with the provider system.
|
|
79
|
+
*
|
|
80
|
+
* @param skill - Skill definition
|
|
81
|
+
* @param context - Execution context
|
|
82
|
+
* @param input - Input data
|
|
83
|
+
* @param systemPrompt - Built system prompt
|
|
84
|
+
* @returns Skill output
|
|
85
|
+
*/
|
|
86
|
+
private executeSkillLogic;
|
|
87
|
+
/**
|
|
88
|
+
* Extract context modifications from skill output.
|
|
89
|
+
* Looks for a specific structure in the output.
|
|
90
|
+
*
|
|
91
|
+
* @param output - Skill execution output
|
|
92
|
+
* @returns Extracted modifications or undefined
|
|
93
|
+
*/
|
|
94
|
+
private extractContextModifications;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=skill-executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-executor.d.ts","sourceRoot":"","sources":["../../src/skills/skill-executor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,WAAW,EACX,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAOpB;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,kBAAkB,CAAmB;gBAEjC,MAAM,EAAE,MAAM,EAAE,kBAAkB,CAAC,EAAE,gBAAgB;IAajE;;;;;;;OAOG;IACG,OAAO,CACX,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,GACzC,OAAO,CAAC,WAAW,CAAC;IAoEvB;;;;;;OAMG;IACH,WAAW,CAAC,aAAa,EAAE,YAAY,GAAG,YAAY;IAYtD;;;;;;OAMG;IACH,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY;IAOtD;;;;;OAKG;IACH,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,YAAY;IAO/C;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IAgBtB;;;;;;OAMG;IACH,iBAAiB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM;IAiCjD;;;;;;OAMG;IACH,yBAAyB,CACvB,aAAa,EAAE,YAAY,EAC3B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACrC,IAAI;IAoCP;;;;;;;;;OASG;YACW,iBAAiB;IAgC/B;;;;;;OAMG;IACH,OAAO,CAAC,2BAA2B;CAiCpC"}
|