@agenticc/core 1.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.
Files changed (196) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +370 -0
  3. package/README.zh-CN.md +372 -0
  4. package/dist/audit/index.d.ts +9 -0
  5. package/dist/audit/index.d.ts.map +1 -0
  6. package/dist/audit/index.js +9 -0
  7. package/dist/audit/index.js.map +1 -0
  8. package/dist/audit/logger.d.ts +211 -0
  9. package/dist/audit/logger.d.ts.map +1 -0
  10. package/dist/audit/logger.js +268 -0
  11. package/dist/audit/logger.js.map +1 -0
  12. package/dist/audit/query.d.ts +164 -0
  13. package/dist/audit/query.d.ts.map +1 -0
  14. package/dist/audit/query.js +250 -0
  15. package/dist/audit/query.js.map +1 -0
  16. package/dist/conversation/context-builder.d.ts +119 -0
  17. package/dist/conversation/context-builder.d.ts.map +1 -0
  18. package/dist/conversation/context-builder.js +252 -0
  19. package/dist/conversation/context-builder.js.map +1 -0
  20. package/dist/conversation/index.d.ts +10 -0
  21. package/dist/conversation/index.d.ts.map +1 -0
  22. package/dist/conversation/index.js +10 -0
  23. package/dist/conversation/index.js.map +1 -0
  24. package/dist/conversation/message-store.d.ts +231 -0
  25. package/dist/conversation/message-store.d.ts.map +1 -0
  26. package/dist/conversation/message-store.js +404 -0
  27. package/dist/conversation/message-store.js.map +1 -0
  28. package/dist/conversation/session.d.ts +201 -0
  29. package/dist/conversation/session.d.ts.map +1 -0
  30. package/dist/conversation/session.js +285 -0
  31. package/dist/conversation/session.js.map +1 -0
  32. package/dist/core/agent.d.ts +277 -0
  33. package/dist/core/agent.d.ts.map +1 -0
  34. package/dist/core/agent.js +674 -0
  35. package/dist/core/agent.js.map +1 -0
  36. package/dist/core/agentic-loop.d.ts +98 -0
  37. package/dist/core/agentic-loop.d.ts.map +1 -0
  38. package/dist/core/agentic-loop.js +496 -0
  39. package/dist/core/agentic-loop.js.map +1 -0
  40. package/dist/core/index.d.ts +14 -0
  41. package/dist/core/index.d.ts.map +1 -0
  42. package/dist/core/index.js +14 -0
  43. package/dist/core/index.js.map +1 -0
  44. package/dist/core/intent-parser.d.ts +101 -0
  45. package/dist/core/intent-parser.d.ts.map +1 -0
  46. package/dist/core/intent-parser.js +221 -0
  47. package/dist/core/intent-parser.js.map +1 -0
  48. package/dist/core/plan-generator.d.ts +133 -0
  49. package/dist/core/plan-generator.d.ts.map +1 -0
  50. package/dist/core/plan-generator.js +294 -0
  51. package/dist/core/plan-generator.js.map +1 -0
  52. package/dist/core/plugin-manager.d.ts +120 -0
  53. package/dist/core/plugin-manager.d.ts.map +1 -0
  54. package/dist/core/plugin-manager.js +369 -0
  55. package/dist/core/plugin-manager.js.map +1 -0
  56. package/dist/core/response-handler.d.ts +141 -0
  57. package/dist/core/response-handler.d.ts.map +1 -0
  58. package/dist/core/response-handler.js +384 -0
  59. package/dist/core/response-handler.js.map +1 -0
  60. package/dist/core/tool-executor.d.ts +143 -0
  61. package/dist/core/tool-executor.d.ts.map +1 -0
  62. package/dist/core/tool-executor.js +354 -0
  63. package/dist/core/tool-executor.js.map +1 -0
  64. package/dist/core/tool-registry.d.ts +133 -0
  65. package/dist/core/tool-registry.d.ts.map +1 -0
  66. package/dist/core/tool-registry.js +252 -0
  67. package/dist/core/tool-registry.js.map +1 -0
  68. package/dist/index.d.ts +44 -0
  69. package/dist/index.d.ts.map +1 -0
  70. package/dist/index.js +47 -0
  71. package/dist/index.js.map +1 -0
  72. package/dist/knowledge/chunker.d.ts +78 -0
  73. package/dist/knowledge/chunker.d.ts.map +1 -0
  74. package/dist/knowledge/chunker.js +233 -0
  75. package/dist/knowledge/chunker.js.map +1 -0
  76. package/dist/knowledge/embedder.d.ts +93 -0
  77. package/dist/knowledge/embedder.d.ts.map +1 -0
  78. package/dist/knowledge/embedder.js +205 -0
  79. package/dist/knowledge/embedder.js.map +1 -0
  80. package/dist/knowledge/index.d.ts +10 -0
  81. package/dist/knowledge/index.d.ts.map +1 -0
  82. package/dist/knowledge/index.js +11 -0
  83. package/dist/knowledge/index.js.map +1 -0
  84. package/dist/knowledge/loaders/index.d.ts +10 -0
  85. package/dist/knowledge/loaders/index.d.ts.map +1 -0
  86. package/dist/knowledge/loaders/index.js +10 -0
  87. package/dist/knowledge/loaders/index.js.map +1 -0
  88. package/dist/knowledge/loaders/markdown.d.ts +88 -0
  89. package/dist/knowledge/loaders/markdown.d.ts.map +1 -0
  90. package/dist/knowledge/loaders/markdown.js +205 -0
  91. package/dist/knowledge/loaders/markdown.js.map +1 -0
  92. package/dist/knowledge/loaders/yaml.d.ts +112 -0
  93. package/dist/knowledge/loaders/yaml.d.ts.map +1 -0
  94. package/dist/knowledge/loaders/yaml.js +368 -0
  95. package/dist/knowledge/loaders/yaml.js.map +1 -0
  96. package/dist/knowledge/retriever.d.ts +144 -0
  97. package/dist/knowledge/retriever.d.ts.map +1 -0
  98. package/dist/knowledge/retriever.js +399 -0
  99. package/dist/knowledge/retriever.js.map +1 -0
  100. package/dist/knowledge/store.d.ts +146 -0
  101. package/dist/knowledge/store.d.ts.map +1 -0
  102. package/dist/knowledge/store.js +420 -0
  103. package/dist/knowledge/store.js.map +1 -0
  104. package/dist/llm/adapter.d.ts +194 -0
  105. package/dist/llm/adapter.d.ts.map +1 -0
  106. package/dist/llm/adapter.js +42 -0
  107. package/dist/llm/adapter.js.map +1 -0
  108. package/dist/llm/adapters/anyrouter.d.ts +84 -0
  109. package/dist/llm/adapters/anyrouter.d.ts.map +1 -0
  110. package/dist/llm/adapters/anyrouter.js +372 -0
  111. package/dist/llm/adapters/anyrouter.js.map +1 -0
  112. package/dist/llm/adapters/claude.d.ts +66 -0
  113. package/dist/llm/adapters/claude.d.ts.map +1 -0
  114. package/dist/llm/adapters/claude.js +323 -0
  115. package/dist/llm/adapters/claude.js.map +1 -0
  116. package/dist/llm/adapters/index.d.ts +12 -0
  117. package/dist/llm/adapters/index.d.ts.map +1 -0
  118. package/dist/llm/adapters/index.js +12 -0
  119. package/dist/llm/adapters/index.js.map +1 -0
  120. package/dist/llm/adapters/mimo.d.ts +85 -0
  121. package/dist/llm/adapters/mimo.d.ts.map +1 -0
  122. package/dist/llm/adapters/mimo.js +316 -0
  123. package/dist/llm/adapters/mimo.js.map +1 -0
  124. package/dist/llm/adapters/openai.d.ts +53 -0
  125. package/dist/llm/adapters/openai.d.ts.map +1 -0
  126. package/dist/llm/adapters/openai.js +293 -0
  127. package/dist/llm/adapters/openai.js.map +1 -0
  128. package/dist/llm/adapters/qwen.d.ts +53 -0
  129. package/dist/llm/adapters/qwen.d.ts.map +1 -0
  130. package/dist/llm/adapters/qwen.js +299 -0
  131. package/dist/llm/adapters/qwen.js.map +1 -0
  132. package/dist/llm/adapters/siliconflow.d.ts +69 -0
  133. package/dist/llm/adapters/siliconflow.d.ts.map +1 -0
  134. package/dist/llm/adapters/siliconflow.js +331 -0
  135. package/dist/llm/adapters/siliconflow.js.map +1 -0
  136. package/dist/llm/index.d.ts +9 -0
  137. package/dist/llm/index.d.ts.map +1 -0
  138. package/dist/llm/index.js +12 -0
  139. package/dist/llm/index.js.map +1 -0
  140. package/dist/llm/manager.d.ts +97 -0
  141. package/dist/llm/manager.d.ts.map +1 -0
  142. package/dist/llm/manager.js +337 -0
  143. package/dist/llm/manager.js.map +1 -0
  144. package/dist/test-utils/arbitraries.d.ts +230 -0
  145. package/dist/test-utils/arbitraries.d.ts.map +1 -0
  146. package/dist/test-utils/arbitraries.js +280 -0
  147. package/dist/test-utils/arbitraries.js.map +1 -0
  148. package/dist/test-utils/cleanup.d.ts +184 -0
  149. package/dist/test-utils/cleanup.d.ts.map +1 -0
  150. package/dist/test-utils/cleanup.js +282 -0
  151. package/dist/test-utils/cleanup.js.map +1 -0
  152. package/dist/test-utils/config.d.ts +80 -0
  153. package/dist/test-utils/config.d.ts.map +1 -0
  154. package/dist/test-utils/config.js +94 -0
  155. package/dist/test-utils/config.js.map +1 -0
  156. package/dist/test-utils/index.d.ts +10 -0
  157. package/dist/test-utils/index.d.ts.map +1 -0
  158. package/dist/test-utils/index.js +36 -0
  159. package/dist/test-utils/index.js.map +1 -0
  160. package/dist/test-utils/mocks.d.ts +170 -0
  161. package/dist/test-utils/mocks.d.ts.map +1 -0
  162. package/dist/test-utils/mocks.js +281 -0
  163. package/dist/test-utils/mocks.js.map +1 -0
  164. package/dist/types/config.d.ts +170 -0
  165. package/dist/types/config.d.ts.map +1 -0
  166. package/dist/types/config.js +120 -0
  167. package/dist/types/config.js.map +1 -0
  168. package/dist/types/knowledge.d.ts +95 -0
  169. package/dist/types/knowledge.d.ts.map +1 -0
  170. package/dist/types/knowledge.js +7 -0
  171. package/dist/types/knowledge.js.map +1 -0
  172. package/dist/types/loop.d.ts +148 -0
  173. package/dist/types/loop.d.ts.map +1 -0
  174. package/dist/types/loop.js +16 -0
  175. package/dist/types/loop.js.map +1 -0
  176. package/dist/types/plugin.d.ts +137 -0
  177. package/dist/types/plugin.d.ts.map +1 -0
  178. package/dist/types/plugin.js +15 -0
  179. package/dist/types/plugin.js.map +1 -0
  180. package/dist/types/response.d.ts +186 -0
  181. package/dist/types/response.d.ts.map +1 -0
  182. package/dist/types/response.js +99 -0
  183. package/dist/types/response.js.map +1 -0
  184. package/dist/types/streaming.d.ts +478 -0
  185. package/dist/types/streaming.d.ts.map +1 -0
  186. package/dist/types/streaming.js +483 -0
  187. package/dist/types/streaming.js.map +1 -0
  188. package/dist/types/tool.d.ts +118 -0
  189. package/dist/types/tool.d.ts.map +1 -0
  190. package/dist/types/tool.js +42 -0
  191. package/dist/types/tool.js.map +1 -0
  192. package/dist/utils/error.d.ts +22 -0
  193. package/dist/utils/error.d.ts.map +1 -0
  194. package/dist/utils/error.js +36 -0
  195. package/dist/utils/error.js.map +1 -0
  196. package/package.json +102 -0
@@ -0,0 +1,369 @@
1
+ /**
2
+ * Plugin Manager
3
+ *
4
+ * Manages plugin lifecycle, tool registration, and namespace handling.
5
+ * Provides dependency injection for plugins through PluginContext.
6
+ *
7
+ * @module core/plugin-manager
8
+ */
9
+ import { DEFAULT_PLUGIN_MANAGER_OPTIONS } from '../types/plugin.js';
10
+ import { toolToDefinition } from '../types/tool.js';
11
+ /**
12
+ * Error thrown when plugin operations fail
13
+ */
14
+ export class PluginError extends Error {
15
+ pluginName;
16
+ reason;
17
+ constructor(message, pluginName, reason) {
18
+ super(message);
19
+ this.pluginName = pluginName;
20
+ this.reason = reason;
21
+ this.name = 'PluginError';
22
+ }
23
+ }
24
+ /**
25
+ * Plugin Manager
26
+ *
27
+ * Handles plugin loading, unloading, and tool management.
28
+ * Supports namespace-based tool isolation, dependency injection, and dependency resolution.
29
+ */
30
+ export class PluginManager {
31
+ plugins = new Map();
32
+ allTools = new Map();
33
+ options;
34
+ context;
35
+ loadingPlugins = new Set(); // Track plugins currently being loaded (for circular dependency detection)
36
+ constructor(options = {}) {
37
+ this.options = { ...DEFAULT_PLUGIN_MANAGER_OPTIONS, ...options };
38
+ }
39
+ /**
40
+ * Set the plugin context for dependency injection
41
+ */
42
+ setContext(context) {
43
+ this.context = context;
44
+ }
45
+ /**
46
+ * Load a plugin
47
+ *
48
+ * @param plugin - The plugin to load
49
+ * @throws PluginError if loading fails
50
+ */
51
+ async load(plugin) {
52
+ // Validate plugin
53
+ if (this.options.strictValidation) {
54
+ this.validatePlugin(plugin);
55
+ }
56
+ // Check for duplicate plugin
57
+ if (this.plugins.has(plugin.name)) {
58
+ throw new PluginError(`Plugin already loaded: ${plugin.name}`, plugin.name, 'A plugin with this name is already loaded');
59
+ }
60
+ // Check for circular dependencies
61
+ if (this.loadingPlugins.has(plugin.name)) {
62
+ throw new PluginError(`Circular dependency detected for plugin: ${plugin.name}`, plugin.name, 'Plugin has a circular dependency');
63
+ }
64
+ // Load dependencies first
65
+ if (plugin.dependencies && plugin.dependencies.length > 0) {
66
+ this.loadingPlugins.add(plugin.name);
67
+ try {
68
+ await this.loadDependencies(plugin);
69
+ }
70
+ finally {
71
+ this.loadingPlugins.delete(plugin.name);
72
+ }
73
+ }
74
+ // Create plugin state
75
+ const state = {
76
+ plugin,
77
+ status: 'loading',
78
+ tools: new Map(),
79
+ };
80
+ this.plugins.set(plugin.name, state);
81
+ try {
82
+ // Call lifecycle hooks (initialize/onLoad) if defined
83
+ // Support both naming conventions for backward compatibility
84
+ const initHook = plugin.initialize || plugin.onLoad;
85
+ if (initHook && this.context) {
86
+ await initHook.call(plugin, this.context);
87
+ }
88
+ // Register tools with namespace
89
+ for (const tool of plugin.tools) {
90
+ const namespacedName = this.getNamespacedToolName(tool.name, plugin.namespace);
91
+ // Check for conflicts
92
+ if (this.allTools.has(namespacedName)) {
93
+ this.handleConflict(namespacedName, plugin.name);
94
+ if (this.options.conflictStrategy === 'skip') {
95
+ continue;
96
+ }
97
+ }
98
+ // Create namespaced tool
99
+ const namespacedTool = {
100
+ ...tool,
101
+ name: namespacedName,
102
+ };
103
+ state.tools.set(namespacedName, namespacedTool);
104
+ this.allTools.set(namespacedName, namespacedTool);
105
+ }
106
+ state.status = 'loaded';
107
+ }
108
+ catch (error) {
109
+ state.status = 'error';
110
+ state.error = error instanceof Error ? error.message : String(error);
111
+ // Cleanup any registered tools
112
+ for (const toolName of state.tools.keys()) {
113
+ this.allTools.delete(toolName);
114
+ }
115
+ state.tools.clear();
116
+ throw new PluginError(`Failed to load plugin: ${plugin.name}`, plugin.name, state.error);
117
+ }
118
+ }
119
+ /**
120
+ * Load plugin dependencies
121
+ * @private
122
+ */
123
+ async loadDependencies(plugin) {
124
+ if (!plugin.dependencies || plugin.dependencies.length === 0) {
125
+ return;
126
+ }
127
+ for (const depName of plugin.dependencies) {
128
+ if (!this.plugins.has(depName)) {
129
+ throw new PluginError(`Missing dependency for plugin ${plugin.name}: ${depName}`, plugin.name, `Plugin ${depName} must be loaded before ${plugin.name}`);
130
+ }
131
+ const depState = this.plugins.get(depName);
132
+ if (depState?.status !== 'loaded') {
133
+ throw new PluginError(`Dependency not ready for plugin ${plugin.name}: ${depName}`, plugin.name, `Plugin ${depName} is in status ${depState?.status}`);
134
+ }
135
+ }
136
+ }
137
+ /**
138
+ * Unload a plugin
139
+ *
140
+ * @param pluginName - Name of the plugin to unload
141
+ * @returns true if unloaded, false if not found
142
+ */
143
+ async unload(pluginName) {
144
+ const state = this.plugins.get(pluginName);
145
+ if (!state) {
146
+ return false;
147
+ }
148
+ try {
149
+ // Call lifecycle hooks (cleanup/onUnload) if defined
150
+ // Support both naming conventions for backward compatibility
151
+ const cleanupHook = state.plugin.cleanup || state.plugin.onUnload;
152
+ if (cleanupHook) {
153
+ await cleanupHook.call(state.plugin);
154
+ }
155
+ }
156
+ catch (error) {
157
+ // Log but don't throw - we still want to clean up
158
+ console.error(`Error during plugin unload: ${pluginName}`, error);
159
+ }
160
+ // Remove all tools
161
+ for (const toolName of state.tools.keys()) {
162
+ this.allTools.delete(toolName);
163
+ }
164
+ // Remove plugin
165
+ this.plugins.delete(pluginName);
166
+ return true;
167
+ }
168
+ /**
169
+ * Get a plugin by name
170
+ */
171
+ getPlugin(name) {
172
+ return this.plugins.get(name)?.plugin;
173
+ }
174
+ /**
175
+ * Check if a plugin is loaded
176
+ */
177
+ hasPlugin(name) {
178
+ return this.plugins.has(name);
179
+ }
180
+ /**
181
+ * List all loaded plugins
182
+ */
183
+ listPlugins() {
184
+ return Array.from(this.plugins.values()).map((state) => ({
185
+ name: state.plugin.name,
186
+ version: state.plugin.version,
187
+ description: state.plugin.description,
188
+ namespace: state.plugin.namespace,
189
+ toolCount: state.tools.size,
190
+ toolNames: Array.from(state.tools.keys()),
191
+ status: state.status,
192
+ error: state.error,
193
+ }));
194
+ }
195
+ /**
196
+ * Get a tool by name
197
+ */
198
+ getTool(name) {
199
+ return this.allTools.get(name);
200
+ }
201
+ /**
202
+ * Check if a tool exists
203
+ */
204
+ hasTool(name) {
205
+ return this.allTools.has(name);
206
+ }
207
+ /**
208
+ * List all tools
209
+ */
210
+ listTools() {
211
+ return Array.from(this.allTools.values());
212
+ }
213
+ /**
214
+ * List tool names
215
+ */
216
+ listToolNames() {
217
+ return Array.from(this.allTools.keys());
218
+ }
219
+ /**
220
+ * Get tool definitions for LLM Function Calling
221
+ */
222
+ getToolDefinitions() {
223
+ return this.listTools().map((tool) => toolToDefinition(tool));
224
+ }
225
+ /**
226
+ * Get the number of loaded plugins
227
+ */
228
+ get pluginCount() {
229
+ return this.plugins.size;
230
+ }
231
+ /**
232
+ * Get the number of registered tools
233
+ */
234
+ get toolCount() {
235
+ return this.allTools.size;
236
+ }
237
+ /**
238
+ * Clear all plugins
239
+ */
240
+ async clear() {
241
+ const pluginNames = Array.from(this.plugins.keys());
242
+ for (const name of pluginNames) {
243
+ await this.unload(name);
244
+ }
245
+ }
246
+ /**
247
+ * Run health checks on all plugins
248
+ */
249
+ async healthCheck() {
250
+ const results = new Map();
251
+ for (const [name, state] of this.plugins) {
252
+ if (state.plugin.healthCheck) {
253
+ try {
254
+ results.set(name, await state.plugin.healthCheck());
255
+ }
256
+ catch {
257
+ results.set(name, false);
258
+ }
259
+ }
260
+ else {
261
+ results.set(name, state.status === 'loaded');
262
+ }
263
+ }
264
+ return results;
265
+ }
266
+ /**
267
+ * Get namespaced tool name
268
+ */
269
+ getNamespacedToolName(toolName, namespace) {
270
+ if (!this.options.autoNamespace || !namespace) {
271
+ return toolName;
272
+ }
273
+ return `${namespace}_${toolName}`;
274
+ }
275
+ /**
276
+ * Handle tool name conflict
277
+ */
278
+ handleConflict(toolName, pluginName) {
279
+ switch (this.options.conflictStrategy) {
280
+ case 'error':
281
+ throw new PluginError(`Tool name conflict: ${toolName}`, pluginName, 'A tool with this name already exists');
282
+ case 'replace':
283
+ // Will be replaced in the calling code
284
+ break;
285
+ case 'skip':
286
+ // Will be skipped in the calling code
287
+ break;
288
+ }
289
+ }
290
+ /**
291
+ * Validate plugin definition
292
+ */
293
+ validatePlugin(plugin) {
294
+ if (!plugin.name || typeof plugin.name !== 'string') {
295
+ throw new PluginError('Invalid plugin name', plugin.name || 'unknown', 'Plugin name must be a non-empty string');
296
+ }
297
+ if (!/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(plugin.name)) {
298
+ throw new PluginError(`Invalid plugin name format: ${plugin.name}`, plugin.name, 'Plugin name must start with a letter and contain only alphanumeric characters, underscores, and hyphens');
299
+ }
300
+ if (!plugin.version || typeof plugin.version !== 'string') {
301
+ throw new PluginError(`Invalid plugin version for ${plugin.name}`, plugin.name, 'Plugin version must be a non-empty string');
302
+ }
303
+ if (!plugin.description || typeof plugin.description !== 'string') {
304
+ throw new PluginError(`Invalid plugin description for ${plugin.name}`, plugin.name, 'Plugin description must be a non-empty string');
305
+ }
306
+ if (!Array.isArray(plugin.tools)) {
307
+ throw new PluginError(`Invalid tools for plugin ${plugin.name}`, plugin.name, 'Plugin tools must be an array');
308
+ }
309
+ // Validate each tool
310
+ for (const tool of plugin.tools) {
311
+ this.validateTool(tool, plugin.name);
312
+ }
313
+ // Validate namespace format if provided
314
+ if (plugin.namespace && !/^[a-zA-Z][a-zA-Z0-9_]*$/.test(plugin.namespace)) {
315
+ throw new PluginError(`Invalid namespace format for plugin ${plugin.name}`, plugin.name, 'Namespace must start with a letter and contain only alphanumeric characters and underscores');
316
+ }
317
+ // Validate dependencies if provided
318
+ if (plugin.dependencies) {
319
+ if (!Array.isArray(plugin.dependencies)) {
320
+ throw new PluginError(`Invalid dependencies for plugin ${plugin.name}`, plugin.name, 'Plugin dependencies must be an array');
321
+ }
322
+ for (const dep of plugin.dependencies) {
323
+ if (typeof dep !== 'string' || !dep) {
324
+ throw new PluginError(`Invalid dependency in plugin ${plugin.name}`, plugin.name, 'Each dependency must be a non-empty string');
325
+ }
326
+ }
327
+ }
328
+ }
329
+ /**
330
+ * Validate tool definition
331
+ */
332
+ validateTool(tool, pluginName) {
333
+ if (!tool.name || typeof tool.name !== 'string') {
334
+ throw new PluginError(`Invalid tool name in plugin ${pluginName}`, pluginName, 'Tool name must be a non-empty string');
335
+ }
336
+ if (!/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(tool.name)) {
337
+ throw new PluginError(`Invalid tool name format in plugin ${pluginName}: ${tool.name}`, pluginName, 'Tool name must start with a letter and contain only alphanumeric characters, underscores, and hyphens');
338
+ }
339
+ if (!tool.description || typeof tool.description !== 'string') {
340
+ throw new PluginError(`Invalid tool description in plugin ${pluginName}: ${tool.name}`, pluginName, 'Tool description must be a non-empty string');
341
+ }
342
+ if (!Array.isArray(tool.parameters)) {
343
+ throw new PluginError(`Invalid tool parameters in plugin ${pluginName}: ${tool.name}`, pluginName, 'Tool parameters must be an array');
344
+ }
345
+ // Validate each parameter
346
+ for (const param of tool.parameters) {
347
+ if (!param.name || typeof param.name !== 'string' || param.name.trim() === '') {
348
+ throw new PluginError(`Invalid parameter name in tool ${tool.name} of plugin ${pluginName}`, pluginName, 'Parameter name must be a non-empty string');
349
+ }
350
+ if (!/^[a-zA-Z][a-zA-Z0-9_]*$/.test(param.name)) {
351
+ throw new PluginError(`Invalid parameter name format "${param.name}" in tool ${tool.name} of plugin ${pluginName}`, pluginName, 'Parameter name must start with a letter and contain only alphanumeric characters and underscores');
352
+ }
353
+ if (!param.type || typeof param.type !== 'string') {
354
+ throw new PluginError(`Invalid parameter type in tool ${tool.name} of plugin ${pluginName}`, pluginName, 'Parameter type must be a non-empty string');
355
+ }
356
+ const validTypes = ['string', 'number', 'boolean', 'object', 'array'];
357
+ if (!validTypes.includes(param.type)) {
358
+ throw new PluginError(`Invalid parameter type "${param.type}" in tool ${tool.name} of plugin ${pluginName}`, pluginName, `Parameter type must be one of: ${validTypes.join(', ')}`);
359
+ }
360
+ if (typeof param.required !== 'boolean') {
361
+ throw new PluginError(`Invalid parameter required field in tool ${tool.name} of plugin ${pluginName}`, pluginName, 'Parameter required field must be a boolean');
362
+ }
363
+ }
364
+ if (typeof tool.execute !== 'function') {
365
+ throw new PluginError(`Invalid tool execute function in plugin ${pluginName}: ${tool.name}`, pluginName, 'Tool execute must be a function');
366
+ }
367
+ }
368
+ }
369
+ //# sourceMappingURL=plugin-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-manager.js","sourceRoot":"","sources":["../../src/core/plugin-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Response Handler
3
+ *
4
+ * Generates appropriate responses based on execution results,
5
+ * knowledge assessment, and user interaction needs.
6
+ *
7
+ * _Requirements: 1.4, 5.1-5.5_
8
+ */
9
+ import type { LLMManager } from '../llm/manager.js';
10
+ import type { ChatMessage } from '../llm/adapter.js';
11
+ import type { AgentResponse, ExecuteResponse, ToolCallRecord } from '../types/response.js';
12
+ import type { KnowledgeAssessment, SearchResult } from '../types/knowledge.js';
13
+ import type { ToolExecutionResult } from './tool-executor.js';
14
+ import type { ExecutionPlan } from './plan-generator.js';
15
+ import type { DetailedIntent } from './intent-parser.js';
16
+ /**
17
+ * Response handler configuration
18
+ */
19
+ export interface ResponseHandlerConfig {
20
+ /** System prompt for response generation */
21
+ systemPrompt?: string;
22
+ /** Whether to include tool call details in responses */
23
+ includeToolDetails?: boolean;
24
+ /** Maximum response length */
25
+ maxResponseLength?: number;
26
+ }
27
+ /**
28
+ * Context for response generation
29
+ */
30
+ export interface ResponseContext {
31
+ /** Original user message */
32
+ userMessage: string;
33
+ /** Parsed intent */
34
+ intent: DetailedIntent;
35
+ /** Knowledge assessment */
36
+ knowledgeAssessment?: KnowledgeAssessment;
37
+ /** Search results */
38
+ searchResults?: SearchResult[];
39
+ /** Execution plan */
40
+ plan?: ExecutionPlan;
41
+ /** Tool execution results */
42
+ executionResults?: ToolExecutionResult[];
43
+ /** Conversation history */
44
+ history?: ChatMessage[];
45
+ }
46
+ /**
47
+ * Response Handler
48
+ *
49
+ * Determines the appropriate response type and generates responses
50
+ * based on the current state of agent processing.
51
+ */
52
+ export declare class ResponseHandler {
53
+ private llmManager;
54
+ private config;
55
+ constructor(llmManager: LLMManager, config?: ResponseHandlerConfig);
56
+ /**
57
+ * Generate an appropriate response based on context
58
+ */
59
+ generateResponse(context: ResponseContext): Promise<AgentResponse>;
60
+ /**
61
+ * Check if knowledge request is needed
62
+ */
63
+ private shouldRequestKnowledge;
64
+ /**
65
+ * Check if clarification is needed
66
+ */
67
+ private shouldRequestClarification;
68
+ /**
69
+ * Check if confirmation is needed
70
+ */
71
+ private shouldRequestConfirmation;
72
+ /**
73
+ * Check if options should be presented
74
+ */
75
+ private shouldPresentOptions;
76
+ /**
77
+ * Create a knowledge request response
78
+ */
79
+ private createKnowledgeRequestResponse;
80
+ /**
81
+ * Create a clarify response
82
+ */
83
+ private createClarifyResponse;
84
+ /**
85
+ * Generate clarifying questions using LLM
86
+ */
87
+ private generateClarifyingQuestions;
88
+ /**
89
+ * Create a confirm response
90
+ */
91
+ private createConfirmResponse;
92
+ /**
93
+ * Generate a preview of the execution plan
94
+ */
95
+ private generatePlanPreview;
96
+ /**
97
+ * Create an options response
98
+ */
99
+ private createOptionsResponse;
100
+ /**
101
+ * Create an execute response
102
+ */
103
+ private createExecuteResponse;
104
+ /**
105
+ * Build tool call records from execution results
106
+ */
107
+ private buildToolCallRecords;
108
+ /**
109
+ * Generate execute response message using LLM
110
+ */
111
+ private generateExecuteMessage;
112
+ /**
113
+ * Build prompt for execute message generation
114
+ */
115
+ private buildExecuteMessagePrompt;
116
+ /**
117
+ * Generate message when no action was taken
118
+ */
119
+ private generateNoActionMessage;
120
+ /**
121
+ * Generate fallback message when LLM fails
122
+ */
123
+ private generateFallbackMessage;
124
+ /**
125
+ * Collect data from execution results
126
+ */
127
+ private collectExecutionData;
128
+ /**
129
+ * Create a simple execute response without LLM
130
+ */
131
+ createSimpleExecuteResponse(message: string, data?: unknown, toolCalls?: ToolCallRecord[]): ExecuteResponse;
132
+ /**
133
+ * Create an error response
134
+ */
135
+ createErrorResponse(error: Error | string): ExecuteResponse;
136
+ /**
137
+ * Get current configuration
138
+ */
139
+ getConfig(): Required<ResponseHandlerConfig>;
140
+ }
141
+ //# sourceMappingURL=response-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-handler.d.ts","sourceRoot":"","sources":["../../src/core/response-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EAKf,cAAc,EAGf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,4CAA4C;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wDAAwD;IACxD,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,8BAA8B;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAOD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,4BAA4B;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB;IACpB,MAAM,EAAE,cAAc,CAAC;IACvB,2BAA2B;IAC3B,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,qBAAqB;IACrB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;IAC/B,qBAAqB;IACrB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,6BAA6B;IAC7B,gBAAgB,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACzC,2BAA2B;IAC3B,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;CACzB;AAED;;;;;GAKG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,MAAM,CAAkC;gBAEpC,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,qBAAqB;IASlE;;OAEG;IACG,gBAAgB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC;IAiCxE;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAK9B;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAmBlC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAIjC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAS5B;;OAEG;IACH,OAAO,CAAC,8BAA8B;IA0CtC;;OAEG;YACW,qBAAqB;IAUnC;;OAEG;YACW,2BAA2B;IAoCzC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAoB7B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAiB7B;;OAEG;YACW,qBAAqB;IAkBnC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAY5B;;OAEG;YACW,sBAAsB;IAiCpC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IA0BjC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAO/B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAoB/B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAY5B;;OAEG;IACH,2BAA2B,CACzB,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,OAAO,EACd,SAAS,CAAC,EAAE,cAAc,EAAE,GAC3B,eAAe;IASlB;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,eAAe;IAS3D;;OAEG;IACH,SAAS,IAAI,QAAQ,CAAC,qBAAqB,CAAC;CAG7C"}