@kernel.chat/kbot 2.7.0 → 2.9.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 (57) hide show
  1. package/dist/agent-protocol.d.ts +97 -0
  2. package/dist/agent-protocol.d.ts.map +1 -0
  3. package/dist/agent-protocol.js +618 -0
  4. package/dist/agent-protocol.js.map +1 -0
  5. package/dist/agent.d.ts.map +1 -1
  6. package/dist/agent.js +25 -1
  7. package/dist/agent.js.map +1 -1
  8. package/dist/architect.d.ts +44 -0
  9. package/dist/architect.d.ts.map +1 -0
  10. package/dist/architect.js +403 -0
  11. package/dist/architect.js.map +1 -0
  12. package/dist/cli.js +210 -2
  13. package/dist/cli.js.map +1 -1
  14. package/dist/confidence.d.ts +102 -0
  15. package/dist/confidence.d.ts.map +1 -0
  16. package/dist/confidence.js +693 -0
  17. package/dist/confidence.js.map +1 -0
  18. package/dist/graph-memory.d.ts +98 -0
  19. package/dist/graph-memory.d.ts.map +1 -0
  20. package/dist/graph-memory.js +926 -0
  21. package/dist/graph-memory.js.map +1 -0
  22. package/dist/ide/acp-server.js +2 -2
  23. package/dist/ide/acp-server.js.map +1 -1
  24. package/dist/intentionality.d.ts +139 -0
  25. package/dist/intentionality.d.ts.map +1 -0
  26. package/dist/intentionality.js +1092 -0
  27. package/dist/intentionality.js.map +1 -0
  28. package/dist/lsp-client.d.ts +167 -0
  29. package/dist/lsp-client.d.ts.map +1 -0
  30. package/dist/lsp-client.js +679 -0
  31. package/dist/lsp-client.js.map +1 -0
  32. package/dist/mcp-plugins.d.ts +62 -0
  33. package/dist/mcp-plugins.d.ts.map +1 -0
  34. package/dist/mcp-plugins.js +551 -0
  35. package/dist/mcp-plugins.js.map +1 -0
  36. package/dist/reasoning.d.ts +100 -0
  37. package/dist/reasoning.d.ts.map +1 -0
  38. package/dist/reasoning.js +1292 -0
  39. package/dist/reasoning.js.map +1 -0
  40. package/dist/temporal.d.ts +133 -0
  41. package/dist/temporal.d.ts.map +1 -0
  42. package/dist/temporal.js +778 -0
  43. package/dist/temporal.js.map +1 -0
  44. package/dist/tools/e2b-sandbox.d.ts +2 -0
  45. package/dist/tools/e2b-sandbox.d.ts.map +1 -0
  46. package/dist/tools/e2b-sandbox.js +460 -0
  47. package/dist/tools/e2b-sandbox.js.map +1 -0
  48. package/dist/tools/index.d.ts.map +1 -1
  49. package/dist/tools/index.js +19 -1
  50. package/dist/tools/index.js.map +1 -1
  51. package/dist/tools/lsp-tools.d.ts +2 -0
  52. package/dist/tools/lsp-tools.d.ts.map +1 -0
  53. package/dist/tools/lsp-tools.js +268 -0
  54. package/dist/tools/lsp-tools.js.map +1 -0
  55. package/dist/ui.js +1 -1
  56. package/dist/ui.js.map +1 -1
  57. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lsp-client.js","sourceRoot":"","sources":["../src/lsp-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import { type ChildProcess } from 'node:child_process';
2
+ export interface McpPluginConfig {
3
+ command: string;
4
+ args?: string[];
5
+ env?: Record<string, string>;
6
+ }
7
+ export interface PluginsJsonConfig {
8
+ plugins: Record<string, McpPluginConfig>;
9
+ }
10
+ export interface PluginToolInfo {
11
+ name: string;
12
+ description: string;
13
+ inputSchema: Record<string, unknown>;
14
+ }
15
+ export type PluginHealth = 'starting' | 'healthy' | 'unhealthy' | 'stopped';
16
+ export interface PluginState {
17
+ id: string;
18
+ config: McpPluginConfig;
19
+ source: 'plugins.json' | 'package.json';
20
+ health: PluginHealth;
21
+ process: ChildProcess | null;
22
+ messageId: number;
23
+ pending: Map<number, {
24
+ resolve: (v: unknown) => void;
25
+ reject: (e: Error) => void;
26
+ timer: ReturnType<typeof setTimeout>;
27
+ }>;
28
+ buffer: string;
29
+ tools: PluginToolInfo[];
30
+ startedAt: string | null;
31
+ error: string | null;
32
+ }
33
+ export interface PluginStatus {
34
+ id: string;
35
+ health: PluginHealth;
36
+ tools: number;
37
+ startedAt: string | null;
38
+ error: string | null;
39
+ source: 'plugins.json' | 'package.json';
40
+ }
41
+ /** Discover all configured MCP plugins from plugins.json and package.json sources */
42
+ export declare function discoverPlugins(): Map<string, {
43
+ config: McpPluginConfig;
44
+ source: 'plugins.json' | 'package.json';
45
+ }>;
46
+ /** Start a single plugin by ID. Spawns the process, performs MCP handshake, fetches tools. */
47
+ export declare function startPlugin(id: string): Promise<PluginState>;
48
+ /** Stop a single plugin gracefully */
49
+ export declare function stopPlugin(id: string): Promise<void>;
50
+ /** Start all discovered plugins */
51
+ export declare function startAllPlugins(): Promise<PluginStatus[]>;
52
+ /** Stop all running plugins */
53
+ export declare function stopAllPlugins(): Promise<void>;
54
+ /** Get tools exposed by a specific plugin */
55
+ export declare function getPluginTools(id: string): PluginToolInfo[];
56
+ /** Call a tool on a specific plugin */
57
+ export declare function callPluginTool(id: string, toolName: string, args?: Record<string, unknown>): Promise<string>;
58
+ /** Get health status of all plugins */
59
+ export declare function getPluginStatus(): PluginStatus[];
60
+ /** Register meta-tools for the agent to interact with MCP plugins */
61
+ export declare function registerMcpPluginTools(): void;
62
+ //# sourceMappingURL=mcp-plugins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-plugins.d.ts","sourceRoot":"","sources":["../src/mcp-plugins.ts"],"names":[],"mappings":"AAUA,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAQ7D,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;CACzC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACrC;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAA;AAE3E,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,eAAe,CAAA;IACvB,MAAM,EAAE,cAAc,GAAG,cAAc,CAAA;IACvC,MAAM,EAAE,YAAY,CAAA;IACpB,OAAO,EAAE,YAAY,GAAG,IAAI,CAAA;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;QAAC,MAAM,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;QAAC,KAAK,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAA;KAAE,CAAC,CAAA;IACzH,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,cAAc,EAAE,CAAA;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,YAAY,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,MAAM,EAAE,cAAc,GAAG,cAAc,CAAA;CACxC;AAmGD,qFAAqF;AACrF,wBAAgB,eAAe,IAAI,GAAG,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,cAAc,GAAG,cAAc,CAAA;CAAE,CAAC,CAqFnH;AAID,8FAA8F;AAC9F,wBAAsB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CA0HlE;AAED,sCAAsC;AACtC,wBAAsB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0B1D;AAED,mCAAmC;AACnC,wBAAsB,eAAe,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CA8B/D;AAED,+BAA+B;AAC/B,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAIpD;AAED,6CAA6C;AAC7C,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,EAAE,CAI3D;AAED,uCAAuC;AACvC,wBAAsB,cAAc,CAClC,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACjC,OAAO,CAAC,MAAM,CAAC,CA2BjB;AAED,uCAAuC;AACvC,wBAAgB,eAAe,IAAI,YAAY,EAAE,CAehD;AAmBD,qEAAqE;AACrE,wBAAgB,sBAAsB,IAAI,IAAI,CAuI7C"}
@@ -0,0 +1,551 @@
1
+ // K:BOT MCP-Native Plugin System
2
+ //
3
+ // Plugins are MCP servers — discovered, started, and consumed natively.
4
+ // Two discovery methods:
5
+ // 1. ~/.kbot/plugins.json — explicit MCP server configs
6
+ // 2. ~/.kbot/plugins/*/package.json — packages with "kbot": { "mcp": true }
7
+ //
8
+ // Each plugin is an MCP server process communicating over stdio.
9
+ // The agent can list all plugin tools and call them through meta-tools.
10
+ import { spawn } from 'node:child_process';
11
+ import { existsSync, readFileSync, readdirSync, statSync } from 'node:fs';
12
+ import { join } from 'node:path';
13
+ import { homedir } from 'node:os';
14
+ import { registerTool } from './tools/index.js';
15
+ // ── Constants ──
16
+ const KBOT_DIR = join(homedir(), '.kbot');
17
+ const PLUGINS_JSON = join(KBOT_DIR, 'plugins.json');
18
+ const PLUGINS_DIR = join(KBOT_DIR, 'plugins');
19
+ const STARTUP_TIMEOUT_MS = 30_000;
20
+ const REQUEST_TIMEOUT_MS = 30_000;
21
+ function encodeJsonRpc(msg) {
22
+ const body = JSON.stringify(msg);
23
+ return `Content-Length: ${Buffer.byteLength(body)}\r\n\r\n${body}`;
24
+ }
25
+ // ── Plugin registry ──
26
+ const plugins = new Map();
27
+ /** Parse incoming JSON-RPC messages from a plugin's stdout buffer */
28
+ function parseMessages(plugin) {
29
+ while (true) {
30
+ const headerEnd = plugin.buffer.indexOf('\r\n\r\n');
31
+ if (headerEnd === -1)
32
+ break;
33
+ const header = plugin.buffer.slice(0, headerEnd);
34
+ const lengthMatch = header.match(/Content-Length:\s*(\d+)/i);
35
+ if (!lengthMatch) {
36
+ plugin.buffer = plugin.buffer.slice(headerEnd + 4);
37
+ continue;
38
+ }
39
+ const contentLength = parseInt(lengthMatch[1], 10);
40
+ const bodyStart = headerEnd + 4;
41
+ if (plugin.buffer.length < bodyStart + contentLength)
42
+ break;
43
+ const body = plugin.buffer.slice(bodyStart, bodyStart + contentLength);
44
+ plugin.buffer = plugin.buffer.slice(bodyStart + contentLength);
45
+ try {
46
+ const msg = JSON.parse(body);
47
+ if (msg.id !== undefined && plugin.pending.has(msg.id)) {
48
+ const entry = plugin.pending.get(msg.id);
49
+ plugin.pending.delete(msg.id);
50
+ clearTimeout(entry.timer);
51
+ if (msg.error) {
52
+ entry.reject(new Error(msg.error.message));
53
+ }
54
+ else {
55
+ entry.resolve(msg.result);
56
+ }
57
+ }
58
+ }
59
+ catch {
60
+ // skip malformed messages
61
+ }
62
+ }
63
+ }
64
+ /** Send a JSON-RPC request and await the response */
65
+ function sendRequest(plugin, method, params, timeoutMs = REQUEST_TIMEOUT_MS) {
66
+ return new Promise((resolve, reject) => {
67
+ if (!plugin.process?.stdin?.writable) {
68
+ reject(new Error(`Plugin "${plugin.id}" process is not available`));
69
+ return;
70
+ }
71
+ const id = ++plugin.messageId;
72
+ const timer = setTimeout(() => {
73
+ if (plugin.pending.has(id)) {
74
+ plugin.pending.delete(id);
75
+ reject(new Error(`Plugin "${plugin.id}" request timeout: ${method} (${timeoutMs}ms)`));
76
+ }
77
+ }, timeoutMs);
78
+ plugin.pending.set(id, { resolve, reject, timer });
79
+ const msg = { jsonrpc: '2.0', id, method, params };
80
+ plugin.process.stdin.write(encodeJsonRpc(msg));
81
+ });
82
+ }
83
+ /** Send a JSON-RPC notification (no response expected) */
84
+ function sendNotification(plugin, method, params) {
85
+ if (!plugin.process?.stdin?.writable)
86
+ return;
87
+ const msg = { jsonrpc: '2.0', method, params };
88
+ plugin.process.stdin.write(encodeJsonRpc(msg));
89
+ }
90
+ // ── Discovery ──
91
+ /** Discover all configured MCP plugins from plugins.json and package.json sources */
92
+ export function discoverPlugins() {
93
+ const discovered = new Map();
94
+ // Source 1: ~/.kbot/plugins.json
95
+ if (existsSync(PLUGINS_JSON)) {
96
+ try {
97
+ const raw = readFileSync(PLUGINS_JSON, 'utf-8');
98
+ const parsed = JSON.parse(raw);
99
+ if (parsed.plugins && typeof parsed.plugins === 'object') {
100
+ for (const [id, config] of Object.entries(parsed.plugins)) {
101
+ if (!config.command || typeof config.command !== 'string')
102
+ continue;
103
+ discovered.set(id, {
104
+ config: {
105
+ command: config.command,
106
+ args: Array.isArray(config.args) ? config.args : [],
107
+ env: config.env && typeof config.env === 'object' ? config.env : {},
108
+ },
109
+ source: 'plugins.json',
110
+ });
111
+ }
112
+ }
113
+ }
114
+ catch {
115
+ // Malformed plugins.json — skip silently
116
+ }
117
+ }
118
+ // Source 2: ~/.kbot/plugins/*/package.json with "kbot": { "mcp": true }
119
+ if (existsSync(PLUGINS_DIR)) {
120
+ try {
121
+ const entries = readdirSync(PLUGINS_DIR);
122
+ for (const entry of entries) {
123
+ const entryPath = join(PLUGINS_DIR, entry);
124
+ try {
125
+ const stat = statSync(entryPath);
126
+ if (!stat.isDirectory())
127
+ continue;
128
+ }
129
+ catch {
130
+ continue;
131
+ }
132
+ const pkgPath = join(entryPath, 'package.json');
133
+ if (!existsSync(pkgPath))
134
+ continue;
135
+ try {
136
+ const raw = readFileSync(pkgPath, 'utf-8');
137
+ const pkg = JSON.parse(raw);
138
+ if (pkg.kbot?.mcp !== true)
139
+ continue;
140
+ // Determine command: use "bin" field or default to "node ."
141
+ let command;
142
+ let args;
143
+ if (typeof pkg.bin === 'string') {
144
+ command = 'node';
145
+ args = [join(entryPath, pkg.bin)];
146
+ }
147
+ else if (pkg.bin && typeof pkg.bin === 'object') {
148
+ const firstBin = Object.values(pkg.bin)[0];
149
+ command = 'node';
150
+ args = [join(entryPath, firstBin)];
151
+ }
152
+ else if (pkg.main) {
153
+ command = 'node';
154
+ args = [join(entryPath, pkg.main)];
155
+ }
156
+ else {
157
+ command = 'node';
158
+ args = [entryPath];
159
+ }
160
+ const id = pkg.name || entry;
161
+ // Don't overwrite plugins.json entries — explicit config takes priority
162
+ if (!discovered.has(id)) {
163
+ discovered.set(id, {
164
+ config: { command, args, env: {} },
165
+ source: 'package.json',
166
+ });
167
+ }
168
+ }
169
+ catch {
170
+ // Malformed package.json — skip
171
+ }
172
+ }
173
+ }
174
+ catch {
175
+ // Can't read plugins dir — skip
176
+ }
177
+ }
178
+ return discovered;
179
+ }
180
+ // ── Lifecycle ──
181
+ /** Start a single plugin by ID. Spawns the process, performs MCP handshake, fetches tools. */
182
+ export async function startPlugin(id) {
183
+ // Check if already running
184
+ const existing = plugins.get(id);
185
+ if (existing && (existing.health === 'healthy' || existing.health === 'starting')) {
186
+ return existing;
187
+ }
188
+ // Discover if not already in registry
189
+ const discovered = discoverPlugins();
190
+ const entry = discovered.get(id);
191
+ if (!entry) {
192
+ throw new Error(`Plugin "${id}" not found in plugins.json or plugin packages`);
193
+ }
194
+ const state = {
195
+ id,
196
+ config: entry.config,
197
+ source: entry.source,
198
+ health: 'starting',
199
+ process: null,
200
+ messageId: 0,
201
+ pending: new Map(),
202
+ buffer: '',
203
+ tools: [],
204
+ startedAt: null,
205
+ error: null,
206
+ };
207
+ plugins.set(id, state);
208
+ // Spawn the process
209
+ const { command, args = [], env = {} } = entry.config;
210
+ let proc;
211
+ try {
212
+ proc = spawn(command, args, {
213
+ stdio: ['pipe', 'pipe', 'pipe'],
214
+ env: { ...process.env, ...env },
215
+ });
216
+ }
217
+ catch (err) {
218
+ state.health = 'unhealthy';
219
+ state.error = `Failed to spawn: ${err instanceof Error ? err.message : String(err)}`;
220
+ return state;
221
+ }
222
+ state.process = proc;
223
+ // Wire up stdout for JSON-RPC message parsing
224
+ proc.stdout?.on('data', (chunk) => {
225
+ state.buffer += chunk.toString();
226
+ parseMessages(state);
227
+ });
228
+ // Collect stderr for diagnostics
229
+ let stderrBuffer = '';
230
+ proc.stderr?.on('data', (chunk) => {
231
+ stderrBuffer += chunk.toString();
232
+ // Cap stderr buffer at 4KB
233
+ if (stderrBuffer.length > 4096) {
234
+ stderrBuffer = stderrBuffer.slice(-4096);
235
+ }
236
+ });
237
+ // Handle unexpected process exit
238
+ proc.on('error', (err) => {
239
+ state.health = 'unhealthy';
240
+ state.error = `Process error: ${err.message}`;
241
+ // Reject all pending requests
242
+ for (const [reqId, entry] of state.pending) {
243
+ clearTimeout(entry.timer);
244
+ entry.reject(new Error(`Plugin "${id}" process crashed`));
245
+ state.pending.delete(reqId);
246
+ }
247
+ });
248
+ proc.on('exit', (code, signal) => {
249
+ if (state.health !== 'stopped') {
250
+ state.health = 'unhealthy';
251
+ state.error = `Process exited unexpectedly (code=${code}, signal=${signal})${stderrBuffer ? ` stderr: ${stderrBuffer.slice(0, 500)}` : ''}`;
252
+ }
253
+ state.process = null;
254
+ // Reject all pending requests
255
+ for (const [reqId, entry] of state.pending) {
256
+ clearTimeout(entry.timer);
257
+ entry.reject(new Error(`Plugin "${id}" process exited`));
258
+ state.pending.delete(reqId);
259
+ }
260
+ });
261
+ // Perform MCP initialize handshake with startup timeout
262
+ try {
263
+ const initResult = await sendRequest(state, 'initialize', {
264
+ protocolVersion: '2024-11-05',
265
+ capabilities: {},
266
+ clientInfo: { name: 'kbot', version: '2.0.0' },
267
+ }, STARTUP_TIMEOUT_MS);
268
+ sendNotification(state, 'initialized', {});
269
+ // Fetch available tools
270
+ try {
271
+ const toolsResult = await sendRequest(state, 'tools/list', {});
272
+ state.tools = toolsResult?.tools || [];
273
+ }
274
+ catch {
275
+ // Server may not expose tools — that's fine
276
+ state.tools = [];
277
+ }
278
+ state.health = 'healthy';
279
+ state.startedAt = new Date().toISOString();
280
+ state.error = null;
281
+ return state;
282
+ }
283
+ catch (err) {
284
+ state.health = 'unhealthy';
285
+ state.error = `Handshake failed: ${err instanceof Error ? err.message : String(err)}${stderrBuffer ? ` stderr: ${stderrBuffer.slice(0, 500)}` : ''}`;
286
+ // Kill the process since handshake failed
287
+ try {
288
+ proc.kill();
289
+ }
290
+ catch { /* ignore */ }
291
+ state.process = null;
292
+ return state;
293
+ }
294
+ }
295
+ /** Stop a single plugin gracefully */
296
+ export async function stopPlugin(id) {
297
+ const state = plugins.get(id);
298
+ if (!state)
299
+ return;
300
+ state.health = 'stopped';
301
+ if (state.process) {
302
+ // Attempt graceful shutdown via MCP protocol
303
+ try {
304
+ await sendRequest(state, 'shutdown', null, 5000);
305
+ sendNotification(state, 'exit', null);
306
+ }
307
+ catch {
308
+ // Force kill if graceful shutdown fails
309
+ }
310
+ // Ensure process is terminated
311
+ try {
312
+ state.process.kill();
313
+ }
314
+ catch { /* ignore */ }
315
+ state.process = null;
316
+ }
317
+ // Clear all pending requests
318
+ for (const [, entry] of state.pending) {
319
+ clearTimeout(entry.timer);
320
+ entry.reject(new Error(`Plugin "${id}" stopped`));
321
+ }
322
+ state.pending.clear();
323
+ }
324
+ /** Start all discovered plugins */
325
+ export async function startAllPlugins() {
326
+ const discovered = discoverPlugins();
327
+ const results = [];
328
+ // Start plugins concurrently but collect results
329
+ const promises = Array.from(discovered.keys()).map(async (id) => {
330
+ try {
331
+ const state = await startPlugin(id);
332
+ results.push({
333
+ id: state.id,
334
+ health: state.health,
335
+ tools: state.tools.length,
336
+ startedAt: state.startedAt,
337
+ error: state.error,
338
+ source: state.source,
339
+ });
340
+ }
341
+ catch (err) {
342
+ results.push({
343
+ id,
344
+ health: 'unhealthy',
345
+ tools: 0,
346
+ startedAt: null,
347
+ error: err instanceof Error ? err.message : String(err),
348
+ source: discovered.get(id).source,
349
+ });
350
+ }
351
+ });
352
+ await Promise.allSettled(promises);
353
+ return results;
354
+ }
355
+ /** Stop all running plugins */
356
+ export async function stopAllPlugins() {
357
+ const ids = Array.from(plugins.keys());
358
+ await Promise.allSettled(ids.map(id => stopPlugin(id)));
359
+ plugins.clear();
360
+ }
361
+ /** Get tools exposed by a specific plugin */
362
+ export function getPluginTools(id) {
363
+ const state = plugins.get(id);
364
+ if (!state)
365
+ return [];
366
+ return state.tools;
367
+ }
368
+ /** Call a tool on a specific plugin */
369
+ export async function callPluginTool(id, toolName, args = {}) {
370
+ const state = plugins.get(id);
371
+ if (!state) {
372
+ throw new Error(`Plugin "${id}" not found. Start it first with startPlugin().`);
373
+ }
374
+ if (state.health !== 'healthy') {
375
+ throw new Error(`Plugin "${id}" is ${state.health}${state.error ? `: ${state.error}` : ''}`);
376
+ }
377
+ // Verify the tool exists on this plugin
378
+ const tool = state.tools.find(t => t.name === toolName);
379
+ if (!tool) {
380
+ const available = state.tools.map(t => t.name).join(', ');
381
+ throw new Error(`Tool "${toolName}" not found on plugin "${id}". Available: ${available || '(none)'}`);
382
+ }
383
+ const result = await sendRequest(state, 'tools/call', {
384
+ name: toolName,
385
+ arguments: args,
386
+ });
387
+ if (result?.content) {
388
+ return result.content.map(c => c.text || JSON.stringify(c)).join('\n');
389
+ }
390
+ return JSON.stringify(result, null, 2);
391
+ }
392
+ /** Get health status of all plugins */
393
+ export function getPluginStatus() {
394
+ const statuses = [];
395
+ for (const [, state] of plugins) {
396
+ statuses.push({
397
+ id: state.id,
398
+ health: state.health,
399
+ tools: state.tools.length,
400
+ startedAt: state.startedAt,
401
+ error: state.error,
402
+ source: state.source,
403
+ });
404
+ }
405
+ return statuses;
406
+ }
407
+ // ── Auto-cleanup on process exit ──
408
+ function cleanup() {
409
+ for (const [, state] of plugins) {
410
+ if (state.process) {
411
+ try {
412
+ state.process.kill();
413
+ }
414
+ catch { /* ignore */ }
415
+ }
416
+ }
417
+ plugins.clear();
418
+ }
419
+ process.on('exit', cleanup);
420
+ process.on('SIGINT', () => { cleanup(); process.exit(0); });
421
+ process.on('SIGTERM', () => { cleanup(); process.exit(0); });
422
+ // ── Agent tool registration ──
423
+ /** Register meta-tools for the agent to interact with MCP plugins */
424
+ export function registerMcpPluginTools() {
425
+ registerTool({
426
+ name: 'mcp_plugin_list',
427
+ description: [
428
+ 'List all available MCP plugin tools.',
429
+ 'Shows discovered plugins, their health status, and the tools each one exposes.',
430
+ 'Use this to find available plugin tools before calling them with mcp_plugin_call.',
431
+ ].join(' '),
432
+ parameters: {
433
+ plugin_id: {
434
+ type: 'string',
435
+ description: 'Optional: filter to a specific plugin ID. Omit to list all.',
436
+ required: false,
437
+ },
438
+ },
439
+ tier: 'free',
440
+ async execute(args) {
441
+ const filterId = args.plugin_id ? String(args.plugin_id) : null;
442
+ // If no plugins are started, try discovery to show what's available
443
+ if (plugins.size === 0) {
444
+ const discovered = discoverPlugins();
445
+ if (discovered.size === 0) {
446
+ return [
447
+ 'No MCP plugins configured.',
448
+ '',
449
+ 'To add plugins, create ~/.kbot/plugins.json:',
450
+ '{',
451
+ ' "plugins": {',
452
+ ' "my-plugin": {',
453
+ ' "command": "npx",',
454
+ ' "args": ["-y", "kbot-plugin-example"],',
455
+ ' "env": {}',
456
+ ' }',
457
+ ' }',
458
+ '}',
459
+ '',
460
+ 'Or install a package in ~/.kbot/plugins/ with "kbot": { "mcp": true } in its package.json.',
461
+ ].join('\n');
462
+ }
463
+ const lines = ['Discovered plugins (not yet started):', ''];
464
+ for (const [id, entry] of discovered) {
465
+ if (filterId && id !== filterId)
466
+ continue;
467
+ lines.push(` ${id} (${entry.source})`);
468
+ lines.push(` command: ${entry.config.command} ${(entry.config.args || []).join(' ')}`);
469
+ }
470
+ lines.push('');
471
+ lines.push('Plugins need to be started before their tools are available.');
472
+ return lines.join('\n');
473
+ }
474
+ const lines = [];
475
+ for (const [, state] of plugins) {
476
+ if (filterId && state.id !== filterId)
477
+ continue;
478
+ const healthIcon = state.health === 'healthy' ? '[OK]' : state.health === 'starting' ? '[..]' : '[!!]';
479
+ lines.push(`${healthIcon} ${state.id} (${state.source}) — ${state.health}`);
480
+ if (state.error) {
481
+ lines.push(` error: ${state.error}`);
482
+ }
483
+ if (state.tools.length > 0) {
484
+ lines.push(` tools (${state.tools.length}):`);
485
+ for (const tool of state.tools) {
486
+ lines.push(` - ${tool.name}: ${tool.description || '(no description)'}`);
487
+ }
488
+ }
489
+ else {
490
+ lines.push(' tools: none');
491
+ }
492
+ lines.push('');
493
+ }
494
+ if (lines.length === 0 && filterId) {
495
+ return `Plugin "${filterId}" not found. Use mcp_plugin_list without a filter to see all plugins.`;
496
+ }
497
+ return lines.join('\n');
498
+ },
499
+ });
500
+ registerTool({
501
+ name: 'mcp_plugin_call',
502
+ description: [
503
+ 'Call a tool exposed by an MCP plugin.',
504
+ 'First use mcp_plugin_list to discover available plugins and their tools.',
505
+ 'If the target plugin is not running, it will be auto-started.',
506
+ ].join(' '),
507
+ parameters: {
508
+ plugin_id: {
509
+ type: 'string',
510
+ description: 'The plugin ID (e.g., "my-plugin")',
511
+ required: true,
512
+ },
513
+ tool: {
514
+ type: 'string',
515
+ description: 'The tool name to call on the plugin',
516
+ required: true,
517
+ },
518
+ arguments: {
519
+ type: 'object',
520
+ description: 'Arguments to pass to the tool (JSON object)',
521
+ required: false,
522
+ },
523
+ },
524
+ tier: 'pro',
525
+ async execute(args) {
526
+ const pluginId = String(args.plugin_id);
527
+ const toolName = String(args.tool);
528
+ const toolArgs = args.arguments || {};
529
+ // Auto-start the plugin if it's not running or unhealthy
530
+ let state = plugins.get(pluginId);
531
+ if (!state || state.health === 'unhealthy' || state.health === 'stopped') {
532
+ try {
533
+ state = await startPlugin(pluginId);
534
+ }
535
+ catch (err) {
536
+ return `Error: Could not start plugin "${pluginId}": ${err instanceof Error ? err.message : String(err)}`;
537
+ }
538
+ if (state.health !== 'healthy') {
539
+ return `Error: Plugin "${pluginId}" failed to start: ${state.error || 'unknown error'}`;
540
+ }
541
+ }
542
+ try {
543
+ return await callPluginTool(pluginId, toolName, toolArgs);
544
+ }
545
+ catch (err) {
546
+ return `Error: ${err instanceof Error ? err.message : String(err)}`;
547
+ }
548
+ },
549
+ });
550
+ }
551
+ //# sourceMappingURL=mcp-plugins.js.map