cmdr-agent 2.1.2 → 2.3.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/dist/bin/cmdr.js +4 -0
- package/dist/bin/cmdr.js.map +1 -1
- package/dist/package.json +1 -1
- package/dist/src/cli/args.d.ts +4 -0
- package/dist/src/cli/args.d.ts.map +1 -1
- package/dist/src/cli/args.js +15 -0
- package/dist/src/cli/args.js.map +1 -1
- package/dist/src/cli/commands.js +21 -1
- package/dist/src/cli/commands.js.map +1 -1
- package/dist/src/cli/ink/App.d.ts +2 -0
- package/dist/src/cli/ink/App.d.ts.map +1 -1
- package/dist/src/cli/ink/App.js +71 -7
- package/dist/src/cli/ink/App.js.map +1 -1
- package/dist/src/cli/repl.d.ts +4 -0
- package/dist/src/cli/repl.d.ts.map +1 -1
- package/dist/src/cli/repl.js +83 -20
- package/dist/src/cli/repl.js.map +1 -1
- package/dist/src/config/mcp-registry.d.ts +45 -0
- package/dist/src/config/mcp-registry.d.ts.map +1 -0
- package/dist/src/config/mcp-registry.js +156 -0
- package/dist/src/config/mcp-registry.js.map +1 -0
- package/dist/src/config/schema.d.ts +8 -8
- package/dist/src/core/agent-runner.d.ts +5 -0
- package/dist/src/core/agent-runner.d.ts.map +1 -1
- package/dist/src/core/agent-runner.js +34 -2
- package/dist/src/core/agent-runner.js.map +1 -1
- package/dist/src/core/agent.d.ts +2 -1
- package/dist/src/core/agent.d.ts.map +1 -1
- package/dist/src/core/agent.js +5 -1
- package/dist/src/core/agent.js.map +1 -1
- package/dist/src/core/content-replacement.d.ts +44 -0
- package/dist/src/core/content-replacement.d.ts.map +1 -0
- package/dist/src/core/content-replacement.js +67 -0
- package/dist/src/core/content-replacement.js.map +1 -0
- package/dist/src/core/event-bus.d.ts +129 -0
- package/dist/src/core/event-bus.d.ts.map +1 -0
- package/dist/src/core/event-bus.js +103 -0
- package/dist/src/core/event-bus.js.map +1 -0
- package/dist/src/core/hooks.d.ts +61 -0
- package/dist/src/core/hooks.d.ts.map +1 -0
- package/dist/src/core/hooks.js +140 -0
- package/dist/src/core/hooks.js.map +1 -0
- package/dist/src/core/orchestrator.d.ts +17 -1
- package/dist/src/core/orchestrator.d.ts.map +1 -1
- package/dist/src/core/orchestrator.js +95 -1
- package/dist/src/core/orchestrator.js.map +1 -1
- package/dist/src/core/permissions.d.ts +74 -3
- package/dist/src/core/permissions.d.ts.map +1 -1
- package/dist/src/core/permissions.js +230 -11
- package/dist/src/core/permissions.js.map +1 -1
- package/dist/src/core/presets.d.ts.map +1 -1
- package/dist/src/core/presets.js +1 -0
- package/dist/src/core/presets.js.map +1 -1
- package/dist/src/core/types.d.ts +22 -1
- package/dist/src/core/types.d.ts.map +1 -1
- package/dist/src/llm/anthropic.d.ts +27 -0
- package/dist/src/llm/anthropic.d.ts.map +1 -0
- package/dist/src/llm/anthropic.js +269 -0
- package/dist/src/llm/anthropic.js.map +1 -0
- package/dist/src/llm/ollama.d.ts.map +1 -1
- package/dist/src/llm/ollama.js +16 -4
- package/dist/src/llm/ollama.js.map +1 -1
- package/dist/src/llm/openai.d.ts +25 -0
- package/dist/src/llm/openai.d.ts.map +1 -0
- package/dist/src/llm/openai.js +299 -0
- package/dist/src/llm/openai.js.map +1 -0
- package/dist/src/llm/provider-factory.d.ts +35 -0
- package/dist/src/llm/provider-factory.d.ts.map +1 -0
- package/dist/src/llm/provider-factory.js +73 -0
- package/dist/src/llm/provider-factory.js.map +1 -0
- package/dist/src/memory/consolidation.d.ts +37 -0
- package/dist/src/memory/consolidation.d.ts.map +1 -0
- package/dist/src/memory/consolidation.js +148 -0
- package/dist/src/memory/consolidation.js.map +1 -0
- package/dist/src/memory/memory-manager.d.ts +39 -0
- package/dist/src/memory/memory-manager.d.ts.map +1 -0
- package/dist/src/memory/memory-manager.js +96 -0
- package/dist/src/memory/memory-manager.js.map +1 -0
- package/dist/src/plugins/mcp-client.d.ts +14 -5
- package/dist/src/plugins/mcp-client.d.ts.map +1 -1
- package/dist/src/plugins/mcp-client.js +197 -43
- package/dist/src/plugins/mcp-client.js.map +1 -1
- package/dist/src/scheduling/task-scheduler.d.ts +51 -0
- package/dist/src/scheduling/task-scheduler.d.ts.map +1 -0
- package/dist/src/scheduling/task-scheduler.js +127 -0
- package/dist/src/scheduling/task-scheduler.js.map +1 -0
- package/dist/src/session/prompt-builder.d.ts +6 -0
- package/dist/src/session/prompt-builder.d.ts.map +1 -1
- package/dist/src/session/prompt-builder.js +21 -2
- package/dist/src/session/prompt-builder.js.map +1 -1
- package/dist/src/session/prompt-cache.d.ts +33 -0
- package/dist/src/session/prompt-cache.d.ts.map +1 -0
- package/dist/src/session/prompt-cache.js +54 -0
- package/dist/src/session/prompt-cache.js.map +1 -0
- package/dist/src/tools/built-in/cron-tools.d.ts +19 -0
- package/dist/src/tools/built-in/cron-tools.d.ts.map +1 -0
- package/dist/src/tools/built-in/cron-tools.js +86 -0
- package/dist/src/tools/built-in/cron-tools.js.map +1 -0
- package/dist/src/tools/built-in/diagnostics.d.ts +12 -0
- package/dist/src/tools/built-in/diagnostics.d.ts.map +1 -0
- package/dist/src/tools/built-in/diagnostics.js +119 -0
- package/dist/src/tools/built-in/diagnostics.js.map +1 -0
- package/dist/src/tools/built-in/git-worktree.d.ts +13 -0
- package/dist/src/tools/built-in/git-worktree.d.ts.map +1 -0
- package/dist/src/tools/built-in/git-worktree.js +75 -0
- package/dist/src/tools/built-in/git-worktree.js.map +1 -0
- package/dist/src/tools/built-in/index.d.ts +11 -1
- package/dist/src/tools/built-in/index.d.ts.map +1 -1
- package/dist/src/tools/built-in/index.js +19 -2
- package/dist/src/tools/built-in/index.js.map +1 -1
- package/dist/src/tools/built-in/mcp-resource-tools.d.ts +16 -0
- package/dist/src/tools/built-in/mcp-resource-tools.d.ts.map +1 -0
- package/dist/src/tools/built-in/mcp-resource-tools.js +73 -0
- package/dist/src/tools/built-in/mcp-resource-tools.js.map +1 -0
- package/dist/src/tools/built-in/memory.d.ts +15 -0
- package/dist/src/tools/built-in/memory.d.ts.map +1 -0
- package/dist/src/tools/built-in/memory.js +58 -0
- package/dist/src/tools/built-in/memory.js.map +1 -0
- package/dist/src/tools/built-in/notebook.d.ts +22 -0
- package/dist/src/tools/built-in/notebook.d.ts.map +1 -0
- package/dist/src/tools/built-in/notebook.js +207 -0
- package/dist/src/tools/built-in/notebook.js.map +1 -0
- package/dist/src/tools/built-in/plan-tools.d.ts +13 -0
- package/dist/src/tools/built-in/plan-tools.d.ts.map +1 -0
- package/dist/src/tools/built-in/plan-tools.js +42 -0
- package/dist/src/tools/built-in/plan-tools.js.map +1 -0
- package/dist/src/tools/built-in/task-tools.d.ts +22 -0
- package/dist/src/tools/built-in/task-tools.d.ts.map +1 -0
- package/dist/src/tools/built-in/task-tools.js +113 -0
- package/dist/src/tools/built-in/task-tools.js.map +1 -0
- package/dist/src/tools/built-in/todo-tool.d.ts +21 -0
- package/dist/src/tools/built-in/todo-tool.d.ts.map +1 -0
- package/dist/src/tools/built-in/todo-tool.js +52 -0
- package/dist/src/tools/built-in/todo-tool.js.map +1 -0
- package/dist/src/tools/built-in/web-search.d.ts +9 -0
- package/dist/src/tools/built-in/web-search.d.ts.map +1 -0
- package/dist/src/tools/built-in/web-search.js +89 -0
- package/dist/src/tools/built-in/web-search.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MemoryManager — persistent cross-session learning for cmdr.
|
|
3
|
+
*
|
|
4
|
+
* Manages MEMORY.md files at two scopes:
|
|
5
|
+
* - Project: .cmdr/MEMORY.md (per-repo knowledge)
|
|
6
|
+
* - User: ~/.cmdr/MEMORY.md (global patterns, preferences)
|
|
7
|
+
*
|
|
8
|
+
* Memory is injected into the system prompt each session so the agent
|
|
9
|
+
* retains learned patterns, project conventions, and user preferences.
|
|
10
|
+
*/
|
|
11
|
+
export interface MemoryScope {
|
|
12
|
+
readonly scope: 'project' | 'user';
|
|
13
|
+
readonly path: string;
|
|
14
|
+
content: string;
|
|
15
|
+
}
|
|
16
|
+
export declare class MemoryManager {
|
|
17
|
+
private projectDir;
|
|
18
|
+
private caches;
|
|
19
|
+
constructor(projectDir: string);
|
|
20
|
+
/** Path to the project-level memory file. */
|
|
21
|
+
get projectMemoryPath(): string;
|
|
22
|
+
/** Path to the user-level memory file. */
|
|
23
|
+
get userMemoryPath(): string;
|
|
24
|
+
/** Read a memory file, returning empty string if not found. */
|
|
25
|
+
private readMemoryFile;
|
|
26
|
+
/** Write content to a memory file, creating directories as needed. */
|
|
27
|
+
private writeMemoryFile;
|
|
28
|
+
/** Load all memory scopes. */
|
|
29
|
+
loadAll(): Promise<MemoryScope[]>;
|
|
30
|
+
/** Get combined memory as a prompt-injectable string. */
|
|
31
|
+
getMemoryPrompt(): Promise<string>;
|
|
32
|
+
/** Read memory for a given scope. */
|
|
33
|
+
read(scope: 'project' | 'user'): Promise<string>;
|
|
34
|
+
/** Write (overwrite) memory for a given scope. */
|
|
35
|
+
write(scope: 'project' | 'user', content: string): Promise<void>;
|
|
36
|
+
/** Append to memory for a given scope (most common operation). */
|
|
37
|
+
append(scope: 'project' | 'user', entry: string): Promise<void>;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=memory-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-manager.d.ts","sourceRoot":"","sources":["../../../src/memory/memory-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAAA;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAA;CAChB;AAID,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,MAAM,CAAiC;gBAEnC,UAAU,EAAE,MAAM;IAI9B,6CAA6C;IAC7C,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED,0CAA0C;IAC1C,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED,+DAA+D;YACjD,cAAc;IAU5B,sEAAsE;YACxD,eAAe;IAU7B,8BAA8B;IACxB,OAAO,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAYvC,yDAAyD;IACnD,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IAaxC,qCAAqC;IAC/B,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKtD,kDAAkD;IAC5C,KAAK,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtE,kEAAkE;IAC5D,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAQtE"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MemoryManager — persistent cross-session learning for cmdr.
|
|
3
|
+
*
|
|
4
|
+
* Manages MEMORY.md files at two scopes:
|
|
5
|
+
* - Project: .cmdr/MEMORY.md (per-repo knowledge)
|
|
6
|
+
* - User: ~/.cmdr/MEMORY.md (global patterns, preferences)
|
|
7
|
+
*
|
|
8
|
+
* Memory is injected into the system prompt each session so the agent
|
|
9
|
+
* retains learned patterns, project conventions, and user preferences.
|
|
10
|
+
*/
|
|
11
|
+
import { readFile, writeFile, mkdir } from 'fs/promises';
|
|
12
|
+
import { join, dirname } from 'path';
|
|
13
|
+
import { homedir } from 'os';
|
|
14
|
+
const MAX_MEMORY_SIZE = 8192; // chars — prevent context bloat
|
|
15
|
+
export class MemoryManager {
|
|
16
|
+
projectDir;
|
|
17
|
+
caches = new Map();
|
|
18
|
+
constructor(projectDir) {
|
|
19
|
+
this.projectDir = projectDir;
|
|
20
|
+
}
|
|
21
|
+
/** Path to the project-level memory file. */
|
|
22
|
+
get projectMemoryPath() {
|
|
23
|
+
return join(this.projectDir, '.cmdr', 'MEMORY.md');
|
|
24
|
+
}
|
|
25
|
+
/** Path to the user-level memory file. */
|
|
26
|
+
get userMemoryPath() {
|
|
27
|
+
return join(homedir(), '.cmdr', 'MEMORY.md');
|
|
28
|
+
}
|
|
29
|
+
/** Read a memory file, returning empty string if not found. */
|
|
30
|
+
async readMemoryFile(path) {
|
|
31
|
+
try {
|
|
32
|
+
const content = await readFile(path, 'utf-8');
|
|
33
|
+
this.caches.set(path, content);
|
|
34
|
+
return content;
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return '';
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/** Write content to a memory file, creating directories as needed. */
|
|
41
|
+
async writeMemoryFile(path, content) {
|
|
42
|
+
// Enforce size limit
|
|
43
|
+
const trimmed = content.length > MAX_MEMORY_SIZE
|
|
44
|
+
? content.slice(0, MAX_MEMORY_SIZE) + '\n\n<!-- Memory truncated at 8KB limit -->\n'
|
|
45
|
+
: content;
|
|
46
|
+
await mkdir(dirname(path), { recursive: true });
|
|
47
|
+
await writeFile(path, trimmed, 'utf-8');
|
|
48
|
+
this.caches.set(path, trimmed);
|
|
49
|
+
}
|
|
50
|
+
/** Load all memory scopes. */
|
|
51
|
+
async loadAll() {
|
|
52
|
+
const [project, user] = await Promise.all([
|
|
53
|
+
this.readMemoryFile(this.projectMemoryPath),
|
|
54
|
+
this.readMemoryFile(this.userMemoryPath),
|
|
55
|
+
]);
|
|
56
|
+
const scopes = [];
|
|
57
|
+
if (user)
|
|
58
|
+
scopes.push({ scope: 'user', path: this.userMemoryPath, content: user });
|
|
59
|
+
if (project)
|
|
60
|
+
scopes.push({ scope: 'project', path: this.projectMemoryPath, content: project });
|
|
61
|
+
return scopes;
|
|
62
|
+
}
|
|
63
|
+
/** Get combined memory as a prompt-injectable string. */
|
|
64
|
+
async getMemoryPrompt() {
|
|
65
|
+
const scopes = await this.loadAll();
|
|
66
|
+
if (scopes.length === 0)
|
|
67
|
+
return '';
|
|
68
|
+
const parts = [];
|
|
69
|
+
for (const scope of scopes) {
|
|
70
|
+
if (scope.content.trim()) {
|
|
71
|
+
parts.push(`<memory scope="${scope.scope}">\n${scope.content.trim()}\n</memory>`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return parts.join('\n\n');
|
|
75
|
+
}
|
|
76
|
+
/** Read memory for a given scope. */
|
|
77
|
+
async read(scope) {
|
|
78
|
+
const path = scope === 'project' ? this.projectMemoryPath : this.userMemoryPath;
|
|
79
|
+
return this.readMemoryFile(path);
|
|
80
|
+
}
|
|
81
|
+
/** Write (overwrite) memory for a given scope. */
|
|
82
|
+
async write(scope, content) {
|
|
83
|
+
const path = scope === 'project' ? this.projectMemoryPath : this.userMemoryPath;
|
|
84
|
+
await this.writeMemoryFile(path, content);
|
|
85
|
+
}
|
|
86
|
+
/** Append to memory for a given scope (most common operation). */
|
|
87
|
+
async append(scope, entry) {
|
|
88
|
+
const existing = await this.read(scope);
|
|
89
|
+
const timestamp = new Date().toISOString().split('T')[0];
|
|
90
|
+
const newContent = existing
|
|
91
|
+
? `${existing.trimEnd()}\n\n## ${timestamp}\n${entry.trim()}\n`
|
|
92
|
+
: `# CMDR Memory\n\n## ${timestamp}\n${entry.trim()}\n`;
|
|
93
|
+
await this.write(scope, newContent);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=memory-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-manager.js","sourceRoot":"","sources":["../../../src/memory/memory-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* MCP Client — connects to external Model Context Protocol servers for tool expansion.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Supports multiple transports:
|
|
5
|
+
* - HTTP REST: GET /tools, POST /tools/{name}
|
|
6
|
+
* - stdio: Spawn a child process, communicate via JSON-RPC over stdin/stdout
|
|
7
|
+
* - SSE: Server-Sent Events for streaming tool discovery and execution
|
|
6
8
|
*/
|
|
7
9
|
import type { McpServerConfig, ToolResult } from '../core/types.js';
|
|
8
10
|
import type { ToolRegistry } from '../tools/registry.js';
|
|
@@ -13,18 +15,25 @@ interface McpTool {
|
|
|
13
15
|
}
|
|
14
16
|
export declare class McpClient {
|
|
15
17
|
private connections;
|
|
16
|
-
/** Connect to an MCP server
|
|
18
|
+
/** Connect to an MCP server. Auto-detects transport from config. */
|
|
17
19
|
connect(config: McpServerConfig): Promise<McpTool[]>;
|
|
20
|
+
private connectHttp;
|
|
21
|
+
private callToolHttp;
|
|
22
|
+
private connectStdio;
|
|
23
|
+
private callToolStdio;
|
|
24
|
+
private connectSse;
|
|
25
|
+
private callToolSse;
|
|
18
26
|
/** Disconnect from an MCP server. */
|
|
19
27
|
disconnect(name: string): boolean;
|
|
20
28
|
/** List connected MCP servers. */
|
|
21
29
|
listConnections(): Array<{
|
|
22
30
|
name: string;
|
|
23
|
-
url: string;
|
|
31
|
+
url: string | undefined;
|
|
24
32
|
tools: number;
|
|
25
33
|
connected: boolean;
|
|
34
|
+
transport: string;
|
|
26
35
|
}>;
|
|
27
|
-
/** Call a tool on an MCP server. */
|
|
36
|
+
/** Call a tool on an MCP server. Dispatches to the appropriate transport. */
|
|
28
37
|
callTool(serverName: string, toolName: string, input: Record<string, unknown>): Promise<ToolResult>;
|
|
29
38
|
/**
|
|
30
39
|
* Register all tools from connected MCP servers into a ToolRegistry.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-client.d.ts","sourceRoot":"","sources":["../../../src/plugins/mcp-client.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"mcp-client.d.ts","sourceRoot":"","sources":["../../../src/plugins/mcp-client.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAkB,UAAU,EAAkB,MAAM,kBAAkB,CAAA;AACnG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAKxD,UAAU,OAAO;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACrC;AA8BD,qBAAa,SAAS;IACpB,OAAO,CAAC,WAAW,CAAmC;IAEtD,oEAAoE;IAC9D,OAAO,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;YAY5C,WAAW;YAgBX,YAAY;YAuBZ,YAAY;YAmEZ,aAAa;YAuCb,UAAU;YAkCV,WAAW;IAKzB,qCAAqC;IACrC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAUjC,kCAAkC;IAClC,eAAe,IAAI,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAUzH,6EAA6E;IACvE,QAAQ,CACZ,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,UAAU,CAAC;IAgBtB;;;OAGG;IACH,aAAa,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM;IAyB7C,0CAA0C;IAC1C,IAAI,cAAc,IAAI,OAAO,CAE5B;CACF"}
|
|
@@ -1,42 +1,211 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* MCP Client — connects to external Model Context Protocol servers for tool expansion.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Supports multiple transports:
|
|
5
|
+
* - HTTP REST: GET /tools, POST /tools/{name}
|
|
6
|
+
* - stdio: Spawn a child process, communicate via JSON-RPC over stdin/stdout
|
|
7
|
+
* - SSE: Server-Sent Events for streaming tool discovery and execution
|
|
6
8
|
*/
|
|
7
9
|
import { z } from 'zod';
|
|
10
|
+
import { spawn } from 'node:child_process';
|
|
11
|
+
import { createInterface } from 'node:readline';
|
|
12
|
+
let rpcIdCounter = 0;
|
|
8
13
|
export class McpClient {
|
|
9
14
|
connections = new Map();
|
|
10
|
-
/** Connect to an MCP server
|
|
15
|
+
/** Connect to an MCP server. Auto-detects transport from config. */
|
|
11
16
|
async connect(config) {
|
|
17
|
+
const transport = config.transport ?? (config.command ? 'stdio' : 'http');
|
|
18
|
+
switch (transport) {
|
|
19
|
+
case 'stdio': return this.connectStdio(config);
|
|
20
|
+
case 'sse': return this.connectSse(config);
|
|
21
|
+
default: return this.connectHttp(config);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
// ─── HTTP REST transport ────────────────────────────────────
|
|
25
|
+
async connectHttp(config) {
|
|
12
26
|
const url = config.url.replace(/\/$/, '');
|
|
13
|
-
const headers = {
|
|
14
|
-
|
|
15
|
-
};
|
|
16
|
-
if (config.apiKey) {
|
|
27
|
+
const headers = { 'Content-Type': 'application/json' };
|
|
28
|
+
if (config.apiKey)
|
|
17
29
|
headers['Authorization'] = `Bearer ${config.apiKey}`;
|
|
30
|
+
const response = await fetch(`${url}/tools`, { headers });
|
|
31
|
+
if (!response.ok) {
|
|
32
|
+
throw new Error(`MCP server returned ${response.status}: ${response.statusText}`);
|
|
18
33
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
34
|
+
const data = await response.json();
|
|
35
|
+
const tools = data.tools ?? [];
|
|
36
|
+
this.connections.set(config.name, { config, tools, connected: true, transport: 'http' });
|
|
37
|
+
return tools;
|
|
38
|
+
}
|
|
39
|
+
async callToolHttp(conn, toolName, input) {
|
|
40
|
+
const url = conn.config.url.replace(/\/$/, '');
|
|
41
|
+
const headers = { 'Content-Type': 'application/json' };
|
|
42
|
+
if (conn.config.apiKey)
|
|
43
|
+
headers['Authorization'] = `Bearer ${conn.config.apiKey}`;
|
|
44
|
+
const response = await fetch(`${url}/tools/${toolName}`, {
|
|
45
|
+
method: 'POST',
|
|
46
|
+
headers,
|
|
47
|
+
body: JSON.stringify({ input }),
|
|
48
|
+
});
|
|
49
|
+
if (!response.ok) {
|
|
50
|
+
const text = await response.text();
|
|
51
|
+
return { data: `MCP tool error (${response.status}): ${text}`, isError: true };
|
|
52
|
+
}
|
|
53
|
+
const data = await response.json();
|
|
54
|
+
if (data.error)
|
|
55
|
+
return { data: data.error, isError: true };
|
|
56
|
+
return { data: data.result ?? JSON.stringify(data) };
|
|
57
|
+
}
|
|
58
|
+
// ─── stdio transport ────────────────────────────────────────
|
|
59
|
+
async connectStdio(config) {
|
|
60
|
+
if (!config.command)
|
|
61
|
+
throw new Error(`stdio transport requires "command" in MCP config for "${config.name}"`);
|
|
62
|
+
const args = config.args ?? [];
|
|
63
|
+
const child = spawn(config.command, args, {
|
|
64
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
65
|
+
env: { ...process.env, ...config.env },
|
|
66
|
+
cwd: config.cwd,
|
|
67
|
+
});
|
|
68
|
+
// Initialize: send JSON-RPC initialize + tools/list
|
|
69
|
+
const tools = await new Promise((resolve, reject) => {
|
|
70
|
+
const timeout = setTimeout(() => reject(new Error(`stdio MCP server "${config.name}" timed out during init`)), 15_000);
|
|
71
|
+
const rl = createInterface({ input: child.stdout });
|
|
72
|
+
const pending = new Map();
|
|
73
|
+
rl.on('line', (line) => {
|
|
74
|
+
try {
|
|
75
|
+
const msg = JSON.parse(line);
|
|
76
|
+
const handler = pending.get(msg.id);
|
|
77
|
+
if (handler) {
|
|
78
|
+
pending.delete(msg.id);
|
|
79
|
+
if (msg.error)
|
|
80
|
+
handler.reject(new Error(msg.error.message));
|
|
81
|
+
else
|
|
82
|
+
handler.resolve(msg.result);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
catch { /* ignore non-JSON lines */ }
|
|
86
|
+
});
|
|
87
|
+
child.on('error', (err) => {
|
|
88
|
+
clearTimeout(timeout);
|
|
89
|
+
reject(new Error(`Failed to spawn MCP server "${config.name}": ${err.message}`));
|
|
30
90
|
});
|
|
31
|
-
|
|
91
|
+
const sendRpc = (method, params) => {
|
|
92
|
+
const id = ++rpcIdCounter;
|
|
93
|
+
return new Promise((res, rej) => {
|
|
94
|
+
pending.set(id, { resolve: res, reject: rej });
|
|
95
|
+
const req = { jsonrpc: '2.0', id, method, params };
|
|
96
|
+
child.stdin.write(JSON.stringify(req) + '\n');
|
|
97
|
+
});
|
|
98
|
+
};
|
|
99
|
+
// Step 1: Initialize
|
|
100
|
+
sendRpc('initialize', {
|
|
101
|
+
protocolVersion: '2024-11-05',
|
|
102
|
+
capabilities: {},
|
|
103
|
+
clientInfo: { name: 'cmdr', version: '2.2.0' },
|
|
104
|
+
}).then(() => {
|
|
105
|
+
// Step 2: Send initialized notification (no response expected)
|
|
106
|
+
child.stdin.write(JSON.stringify({ jsonrpc: '2.0', method: 'notifications/initialized' }) + '\n');
|
|
107
|
+
// Step 3: List tools
|
|
108
|
+
return sendRpc('tools/list', {});
|
|
109
|
+
}).then((result) => {
|
|
110
|
+
clearTimeout(timeout);
|
|
111
|
+
const toolsResult = result;
|
|
112
|
+
resolve(toolsResult.tools ?? []);
|
|
113
|
+
}).catch((err) => {
|
|
114
|
+
clearTimeout(timeout);
|
|
115
|
+
reject(err);
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
this.connections.set(config.name, { config, tools, connected: true, transport: 'stdio', process: child });
|
|
119
|
+
return tools;
|
|
120
|
+
}
|
|
121
|
+
async callToolStdio(conn, toolName, input) {
|
|
122
|
+
const child = conn.process;
|
|
123
|
+
if (!child || !child.stdin || !child.stdout) {
|
|
124
|
+
return { data: `stdio MCP server "${conn.config.name}" not running`, isError: true };
|
|
32
125
|
}
|
|
33
|
-
|
|
34
|
-
const
|
|
35
|
-
|
|
126
|
+
return new Promise((resolve) => {
|
|
127
|
+
const id = ++rpcIdCounter;
|
|
128
|
+
const timeout = setTimeout(() => {
|
|
129
|
+
resolve({ data: `MCP tool call timed out after 60s`, isError: true });
|
|
130
|
+
}, 60_000);
|
|
131
|
+
const rl = createInterface({ input: child.stdout });
|
|
132
|
+
const onLine = (line) => {
|
|
133
|
+
try {
|
|
134
|
+
const msg = JSON.parse(line);
|
|
135
|
+
if (msg.id === id) {
|
|
136
|
+
clearTimeout(timeout);
|
|
137
|
+
rl.removeListener('line', onLine);
|
|
138
|
+
rl.close();
|
|
139
|
+
if (msg.error) {
|
|
140
|
+
resolve({ data: msg.error.message, isError: true });
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
const result = msg.result;
|
|
144
|
+
const text = result?.content?.map(c => c.text ?? '').join('') ?? JSON.stringify(result);
|
|
145
|
+
resolve({ data: text, isError: result?.isError });
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
catch { /* ignore */ }
|
|
150
|
+
};
|
|
151
|
+
rl.on('line', onLine);
|
|
152
|
+
const req = { jsonrpc: '2.0', id, method: 'tools/call', params: { name: toolName, arguments: input } };
|
|
153
|
+
child.stdin.write(JSON.stringify(req) + '\n');
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
// ─── SSE transport ──────────────────────────────────────────
|
|
157
|
+
async connectSse(config) {
|
|
158
|
+
const url = config.url.replace(/\/$/, '');
|
|
159
|
+
const headers = {};
|
|
160
|
+
if (config.apiKey)
|
|
161
|
+
headers['Authorization'] = `Bearer ${config.apiKey}`;
|
|
162
|
+
// SSE endpoint for tool listing
|
|
163
|
+
const response = await fetch(`${url}/sse/tools`, { headers });
|
|
164
|
+
if (!response.ok)
|
|
165
|
+
throw new Error(`SSE MCP server returned ${response.status}`);
|
|
166
|
+
const text = await response.text();
|
|
167
|
+
// Parse SSE data lines
|
|
168
|
+
const tools = [];
|
|
169
|
+
for (const line of text.split('\n')) {
|
|
170
|
+
if (line.startsWith('data: ')) {
|
|
171
|
+
try {
|
|
172
|
+
const data = JSON.parse(line.slice(6));
|
|
173
|
+
if (data.tools)
|
|
174
|
+
tools.push(...data.tools);
|
|
175
|
+
else if (data.name)
|
|
176
|
+
tools.push(data);
|
|
177
|
+
}
|
|
178
|
+
catch { /* skip malformed */ }
|
|
179
|
+
}
|
|
36
180
|
}
|
|
181
|
+
// Fallback: try regular JSON if SSE parsing yields nothing
|
|
182
|
+
if (tools.length === 0) {
|
|
183
|
+
try {
|
|
184
|
+
const jsonData = JSON.parse(text);
|
|
185
|
+
if (jsonData.tools)
|
|
186
|
+
tools.push(...jsonData.tools);
|
|
187
|
+
}
|
|
188
|
+
catch { /* not JSON either */ }
|
|
189
|
+
}
|
|
190
|
+
this.connections.set(config.name, { config, tools, connected: true, transport: 'sse' });
|
|
191
|
+
return tools;
|
|
192
|
+
}
|
|
193
|
+
async callToolSse(conn, toolName, input) {
|
|
194
|
+
// SSE tool calls use POST, response may be SSE stream
|
|
195
|
+
return this.callToolHttp(conn, toolName, input);
|
|
37
196
|
}
|
|
38
197
|
/** Disconnect from an MCP server. */
|
|
39
198
|
disconnect(name) {
|
|
199
|
+
const conn = this.connections.get(name);
|
|
200
|
+
if (!conn)
|
|
201
|
+
return false;
|
|
202
|
+
// Kill stdio child process if running
|
|
203
|
+
if (conn.process) {
|
|
204
|
+
try {
|
|
205
|
+
conn.process.kill();
|
|
206
|
+
}
|
|
207
|
+
catch { /* ignore */ }
|
|
208
|
+
}
|
|
40
209
|
return this.connections.delete(name);
|
|
41
210
|
}
|
|
42
211
|
/** List connected MCP servers. */
|
|
@@ -46,35 +215,20 @@ export class McpClient {
|
|
|
46
215
|
url: c.config.url,
|
|
47
216
|
tools: c.tools.length,
|
|
48
217
|
connected: c.connected,
|
|
218
|
+
transport: c.transport,
|
|
49
219
|
}));
|
|
50
220
|
}
|
|
51
|
-
/** Call a tool on an MCP server. */
|
|
221
|
+
/** Call a tool on an MCP server. Dispatches to the appropriate transport. */
|
|
52
222
|
async callTool(serverName, toolName, input) {
|
|
53
223
|
const conn = this.connections.get(serverName);
|
|
54
224
|
if (!conn)
|
|
55
225
|
throw new Error(`Not connected to MCP server "${serverName}"`);
|
|
56
|
-
const url = conn.config.url.replace(/\/$/, '');
|
|
57
|
-
const headers = {
|
|
58
|
-
'Content-Type': 'application/json',
|
|
59
|
-
};
|
|
60
|
-
if (conn.config.apiKey) {
|
|
61
|
-
headers['Authorization'] = `Bearer ${conn.config.apiKey}`;
|
|
62
|
-
}
|
|
63
226
|
try {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
});
|
|
69
|
-
if (!response.ok) {
|
|
70
|
-
const text = await response.text();
|
|
71
|
-
return { data: `MCP tool error (${response.status}): ${text}`, isError: true };
|
|
72
|
-
}
|
|
73
|
-
const data = await response.json();
|
|
74
|
-
if (data.error) {
|
|
75
|
-
return { data: data.error, isError: true };
|
|
227
|
+
switch (conn.transport) {
|
|
228
|
+
case 'stdio': return await this.callToolStdio(conn, toolName, input);
|
|
229
|
+
case 'sse': return await this.callToolSse(conn, toolName, input);
|
|
230
|
+
default: return await this.callToolHttp(conn, toolName, input);
|
|
76
231
|
}
|
|
77
|
-
return { data: data.result ?? JSON.stringify(data) };
|
|
78
232
|
}
|
|
79
233
|
catch (err) {
|
|
80
234
|
const msg = err instanceof Error ? err.message : String(err);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../../../src/plugins/mcp-client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../../../src/plugins/mcp-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TaskScheduler — cron-like background task automation for cmdr.
|
|
3
|
+
*
|
|
4
|
+
* Supports:
|
|
5
|
+
* - Interval-based tasks (run every N seconds/minutes)
|
|
6
|
+
* - One-shot delayed tasks (run after N seconds)
|
|
7
|
+
* - Named tasks with status tracking
|
|
8
|
+
* - Graceful shutdown
|
|
9
|
+
*/
|
|
10
|
+
export interface ScheduledTask {
|
|
11
|
+
readonly id: string;
|
|
12
|
+
readonly name: string;
|
|
13
|
+
readonly handler: () => Promise<void> | void;
|
|
14
|
+
readonly intervalMs?: number;
|
|
15
|
+
readonly delayMs?: number;
|
|
16
|
+
status: 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';
|
|
17
|
+
lastRun?: Date;
|
|
18
|
+
nextRun?: Date;
|
|
19
|
+
runCount: number;
|
|
20
|
+
error?: string;
|
|
21
|
+
}
|
|
22
|
+
export declare class TaskScheduler {
|
|
23
|
+
private tasks;
|
|
24
|
+
private running;
|
|
25
|
+
/** Start the scheduler. */
|
|
26
|
+
start(): void;
|
|
27
|
+
/** Stop all scheduled tasks. */
|
|
28
|
+
stop(): void;
|
|
29
|
+
/** Schedule a recurring task. */
|
|
30
|
+
scheduleInterval(name: string, intervalMs: number, handler: () => Promise<void> | void): string;
|
|
31
|
+
/** Schedule a one-shot delayed task. */
|
|
32
|
+
scheduleOnce(name: string, delayMs: number, handler: () => Promise<void> | void): string;
|
|
33
|
+
/** Cancel a specific task. */
|
|
34
|
+
cancel(id: string): boolean;
|
|
35
|
+
/** List all scheduled tasks with their status. */
|
|
36
|
+
list(): Array<{
|
|
37
|
+
id: string;
|
|
38
|
+
name: string;
|
|
39
|
+
status: string;
|
|
40
|
+
runCount: number;
|
|
41
|
+
lastRun?: Date;
|
|
42
|
+
nextRun?: Date;
|
|
43
|
+
error?: string;
|
|
44
|
+
}>;
|
|
45
|
+
/** Get a specific task by ID. */
|
|
46
|
+
get(id: string): ScheduledTask | undefined;
|
|
47
|
+
/** Number of active (pending/running) tasks. */
|
|
48
|
+
get activeCount(): number;
|
|
49
|
+
private arm;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=task-scheduler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-scheduler.d.ts","sourceRoot":"","sources":["../../../src/scheduling/task-scheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IAC5C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAA;IACpE,OAAO,CAAC,EAAE,IAAI,CAAA;IACd,OAAO,CAAC,EAAE,IAAI,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAQD,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,OAAO,CAAQ;IAEvB,2BAA2B;IAC3B,KAAK,IAAI,IAAI;IAQb,gCAAgC;IAChC,IAAI,IAAI,IAAI;IAcZ,iCAAiC;IACjC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,MAAM;IAa/F,wCAAwC;IACxC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,MAAM;IAaxF,8BAA8B;IAC9B,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAY3B,kDAAkD;IAClD,IAAI,IAAI,KAAK,CAAC;QACZ,EAAE,EAAE,MAAM,CAAA;QACV,IAAI,EAAE,MAAM,CAAA;QACZ,MAAM,EAAE,MAAM,CAAA;QACd,QAAQ,EAAE,MAAM,CAAA;QAChB,OAAO,CAAC,EAAE,IAAI,CAAA;QACd,OAAO,CAAC,EAAE,IAAI,CAAA;QACd,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,CAAC;IAYF,iCAAiC;IACjC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI1C,gDAAgD;IAChD,IAAI,WAAW,IAAI,MAAM,CAIxB;IAED,OAAO,CAAC,GAAG;CA0BZ"}
|