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.
Files changed (144) hide show
  1. package/README.md +265 -2
  2. package/dist/background/index.d.ts +33 -0
  3. package/dist/background/index.d.ts.map +1 -0
  4. package/dist/background/index.js +33 -0
  5. package/dist/background/index.js.map +1 -0
  6. package/dist/background/task-runner.d.ts +177 -0
  7. package/dist/background/task-runner.d.ts.map +1 -0
  8. package/dist/background/task-runner.js +551 -0
  9. package/dist/background/task-runner.js.map +1 -0
  10. package/dist/background/types.d.ts +135 -0
  11. package/dist/background/types.d.ts.map +1 -0
  12. package/dist/background/types.js +8 -0
  13. package/dist/background/types.js.map +1 -0
  14. package/dist/config/validator.d.ts +2 -2
  15. package/dist/config/validator.d.ts.map +1 -1
  16. package/dist/config/validator.js +2 -2
  17. package/dist/config/validator.js.map +1 -1
  18. package/dist/failover/health-tracker.d.ts +81 -1
  19. package/dist/failover/health-tracker.d.ts.map +1 -1
  20. package/dist/failover/health-tracker.js +229 -1
  21. package/dist/failover/health-tracker.js.map +1 -1
  22. package/dist/failover/orchestrator.d.ts.map +1 -1
  23. package/dist/failover/orchestrator.js +12 -2
  24. package/dist/failover/orchestrator.js.map +1 -1
  25. package/dist/hooks/hook-executor.d.ts +77 -0
  26. package/dist/hooks/hook-executor.d.ts.map +1 -0
  27. package/dist/hooks/hook-executor.js +308 -0
  28. package/dist/hooks/hook-executor.js.map +1 -0
  29. package/dist/hooks/hook-manager.d.ts +140 -0
  30. package/dist/hooks/hook-manager.d.ts.map +1 -0
  31. package/dist/hooks/hook-manager.js +520 -0
  32. package/dist/hooks/hook-manager.js.map +1 -0
  33. package/dist/hooks/index.d.ts +10 -0
  34. package/dist/hooks/index.d.ts.map +1 -0
  35. package/dist/hooks/index.js +10 -0
  36. package/dist/hooks/index.js.map +1 -0
  37. package/dist/hooks/types.d.ts +221 -0
  38. package/dist/hooks/types.d.ts.map +1 -0
  39. package/dist/hooks/types.js +31 -0
  40. package/dist/hooks/types.js.map +1 -0
  41. package/dist/index.d.ts +1 -1
  42. package/dist/index.js +1 -1
  43. package/dist/mcp/auto-mode.d.ts +221 -0
  44. package/dist/mcp/auto-mode.d.ts.map +1 -0
  45. package/dist/mcp/auto-mode.js +436 -0
  46. package/dist/mcp/auto-mode.js.map +1 -0
  47. package/dist/mcp/index.d.ts +14 -0
  48. package/dist/mcp/index.d.ts.map +1 -0
  49. package/dist/mcp/index.js +22 -0
  50. package/dist/mcp/index.js.map +1 -0
  51. package/dist/mcp/tools/critique-plan.d.ts.map +1 -1
  52. package/dist/mcp/tools/critique-plan.js +57 -4
  53. package/dist/mcp/tools/critique-plan.js.map +1 -1
  54. package/dist/mcp/tools/design-feedback.d.ts.map +1 -1
  55. package/dist/mcp/tools/design-feedback.js +58 -4
  56. package/dist/mcp/tools/design-feedback.js.map +1 -1
  57. package/dist/mcp/tools/invoke-agent.d.ts.map +1 -1
  58. package/dist/mcp/tools/invoke-agent.js +64 -1
  59. package/dist/mcp/tools/invoke-agent.js.map +1 -1
  60. package/dist/mcp/tools/review-code.d.ts.map +1 -1
  61. package/dist/mcp/tools/review-code.js +57 -4
  62. package/dist/mcp/tools/review-code.js.map +1 -1
  63. package/dist/mcp/tools/tasks/delete-task.d.ts +25 -0
  64. package/dist/mcp/tools/tasks/delete-task.d.ts.map +1 -0
  65. package/dist/mcp/tools/tasks/delete-task.js +148 -0
  66. package/dist/mcp/tools/tasks/delete-task.js.map +1 -0
  67. package/dist/mcp/tools/tasks/execute-task.d.ts.map +1 -1
  68. package/dist/mcp/tools/tasks/execute-task.js +74 -5
  69. package/dist/mcp/tools/tasks/execute-task.js.map +1 -1
  70. package/dist/mcp/tools/tasks/index.d.ts +2 -0
  71. package/dist/mcp/tools/tasks/index.d.ts.map +1 -1
  72. package/dist/mcp/tools/tasks/index.js +6 -0
  73. package/dist/mcp/tools/tasks/index.js.map +1 -1
  74. package/dist/observability/debug-logger.d.ts +209 -0
  75. package/dist/observability/debug-logger.d.ts.map +1 -0
  76. package/dist/observability/debug-logger.js +430 -0
  77. package/dist/observability/debug-logger.js.map +1 -0
  78. package/dist/observability/index.d.ts +12 -0
  79. package/dist/observability/index.d.ts.map +1 -0
  80. package/dist/observability/index.js +12 -0
  81. package/dist/observability/index.js.map +1 -0
  82. package/dist/observability/logger.d.ts +180 -0
  83. package/dist/observability/logger.d.ts.map +1 -1
  84. package/dist/observability/logger.js +158 -0
  85. package/dist/observability/logger.js.map +1 -1
  86. package/dist/providers/anthropic.d.ts +40 -6
  87. package/dist/providers/anthropic.d.ts.map +1 -1
  88. package/dist/providers/anthropic.js +120 -8
  89. package/dist/providers/anthropic.js.map +1 -1
  90. package/dist/providers/base.d.ts +6 -3
  91. package/dist/providers/base.d.ts.map +1 -1
  92. package/dist/providers/base.js.map +1 -1
  93. package/dist/router/context-manager.d.ts +214 -1
  94. package/dist/router/context-manager.d.ts.map +1 -1
  95. package/dist/router/context-manager.js +759 -2
  96. package/dist/router/context-manager.js.map +1 -1
  97. package/dist/router/context-types.d.ts +182 -0
  98. package/dist/router/context-types.d.ts.map +1 -0
  99. package/dist/router/context-types.js +8 -0
  100. package/dist/router/context-types.js.map +1 -0
  101. package/dist/router/engine.d.ts +3 -3
  102. package/dist/router/engine.d.ts.map +1 -1
  103. package/dist/router/engine.js +32 -4
  104. package/dist/router/engine.js.map +1 -1
  105. package/dist/router/pattern-executor.d.ts.map +1 -1
  106. package/dist/router/pattern-executor.js +38 -7
  107. package/dist/router/pattern-executor.js.map +1 -1
  108. package/dist/server.d.ts +41 -0
  109. package/dist/server.d.ts.map +1 -1
  110. package/dist/server.js +165 -0
  111. package/dist/server.js.map +1 -1
  112. package/dist/skills/hot-reloader.d.ts +104 -0
  113. package/dist/skills/hot-reloader.d.ts.map +1 -0
  114. package/dist/skills/hot-reloader.js +314 -0
  115. package/dist/skills/hot-reloader.js.map +1 -0
  116. package/dist/skills/index.d.ts +14 -0
  117. package/dist/skills/index.d.ts.map +1 -0
  118. package/dist/skills/index.js +16 -0
  119. package/dist/skills/index.js.map +1 -0
  120. package/dist/skills/skill-executor.d.ts +96 -0
  121. package/dist/skills/skill-executor.d.ts.map +1 -0
  122. package/dist/skills/skill-executor.js +289 -0
  123. package/dist/skills/skill-executor.js.map +1 -0
  124. package/dist/skills/skill-loader.d.ts +147 -0
  125. package/dist/skills/skill-loader.d.ts.map +1 -0
  126. package/dist/skills/skill-loader.js +579 -0
  127. package/dist/skills/skill-loader.js.map +1 -0
  128. package/dist/skills/types.d.ts +198 -0
  129. package/dist/skills/types.d.ts.map +1 -0
  130. package/dist/skills/types.js +21 -0
  131. package/dist/skills/types.js.map +1 -0
  132. package/dist/tasks/coordinator.d.ts +22 -1
  133. package/dist/tasks/coordinator.d.ts.map +1 -1
  134. package/dist/tasks/coordinator.js +83 -0
  135. package/dist/tasks/coordinator.js.map +1 -1
  136. package/dist/tasks/state-coordinator.d.ts +19 -0
  137. package/dist/tasks/state-coordinator.d.ts.map +1 -1
  138. package/dist/tasks/state-coordinator.js +40 -0
  139. package/dist/tasks/state-coordinator.js.map +1 -1
  140. package/dist/types.d.ts +39 -7
  141. package/dist/types.d.ts.map +1 -1
  142. package/dist/types.js +9 -0
  143. package/dist/types.js.map +1 -1
  144. 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"}