cmdr-agent 2.1.2 → 2.2.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 (105) hide show
  1. package/dist/bin/cmdr.js +4 -0
  2. package/dist/bin/cmdr.js.map +1 -1
  3. package/dist/package.json +1 -1
  4. package/dist/src/cli/args.d.ts +4 -0
  5. package/dist/src/cli/args.d.ts.map +1 -1
  6. package/dist/src/cli/args.js +15 -0
  7. package/dist/src/cli/args.js.map +1 -1
  8. package/dist/src/cli/commands.js +20 -0
  9. package/dist/src/cli/commands.js.map +1 -1
  10. package/dist/src/cli/ink/App.d.ts.map +1 -1
  11. package/dist/src/cli/ink/App.js +15 -0
  12. package/dist/src/cli/ink/App.js.map +1 -1
  13. package/dist/src/cli/repl.d.ts +4 -0
  14. package/dist/src/cli/repl.d.ts.map +1 -1
  15. package/dist/src/cli/repl.js +48 -19
  16. package/dist/src/cli/repl.js.map +1 -1
  17. package/dist/src/core/agent-runner.d.ts +5 -0
  18. package/dist/src/core/agent-runner.d.ts.map +1 -1
  19. package/dist/src/core/agent-runner.js +12 -2
  20. package/dist/src/core/agent-runner.js.map +1 -1
  21. package/dist/src/core/agent.d.ts +2 -1
  22. package/dist/src/core/agent.d.ts.map +1 -1
  23. package/dist/src/core/agent.js +5 -1
  24. package/dist/src/core/agent.js.map +1 -1
  25. package/dist/src/core/content-replacement.d.ts +44 -0
  26. package/dist/src/core/content-replacement.d.ts.map +1 -0
  27. package/dist/src/core/content-replacement.js +67 -0
  28. package/dist/src/core/content-replacement.js.map +1 -0
  29. package/dist/src/core/event-bus.d.ts +129 -0
  30. package/dist/src/core/event-bus.d.ts.map +1 -0
  31. package/dist/src/core/event-bus.js +103 -0
  32. package/dist/src/core/event-bus.js.map +1 -0
  33. package/dist/src/core/orchestrator.d.ts +17 -1
  34. package/dist/src/core/orchestrator.d.ts.map +1 -1
  35. package/dist/src/core/orchestrator.js +95 -1
  36. package/dist/src/core/orchestrator.js.map +1 -1
  37. package/dist/src/core/permissions.d.ts +31 -3
  38. package/dist/src/core/permissions.d.ts.map +1 -1
  39. package/dist/src/core/permissions.js +122 -11
  40. package/dist/src/core/permissions.js.map +1 -1
  41. package/dist/src/core/presets.d.ts.map +1 -1
  42. package/dist/src/core/presets.js +1 -0
  43. package/dist/src/core/presets.js.map +1 -1
  44. package/dist/src/core/types.d.ts +17 -1
  45. package/dist/src/core/types.d.ts.map +1 -1
  46. package/dist/src/llm/anthropic.d.ts +27 -0
  47. package/dist/src/llm/anthropic.d.ts.map +1 -0
  48. package/dist/src/llm/anthropic.js +269 -0
  49. package/dist/src/llm/anthropic.js.map +1 -0
  50. package/dist/src/llm/ollama.d.ts.map +1 -1
  51. package/dist/src/llm/ollama.js +16 -4
  52. package/dist/src/llm/ollama.js.map +1 -1
  53. package/dist/src/llm/openai.d.ts +25 -0
  54. package/dist/src/llm/openai.d.ts.map +1 -0
  55. package/dist/src/llm/openai.js +299 -0
  56. package/dist/src/llm/openai.js.map +1 -0
  57. package/dist/src/llm/provider-factory.d.ts +35 -0
  58. package/dist/src/llm/provider-factory.d.ts.map +1 -0
  59. package/dist/src/llm/provider-factory.js +73 -0
  60. package/dist/src/llm/provider-factory.js.map +1 -0
  61. package/dist/src/memory/consolidation.d.ts +37 -0
  62. package/dist/src/memory/consolidation.d.ts.map +1 -0
  63. package/dist/src/memory/consolidation.js +148 -0
  64. package/dist/src/memory/consolidation.js.map +1 -0
  65. package/dist/src/memory/memory-manager.d.ts +39 -0
  66. package/dist/src/memory/memory-manager.d.ts.map +1 -0
  67. package/dist/src/memory/memory-manager.js +96 -0
  68. package/dist/src/memory/memory-manager.js.map +1 -0
  69. package/dist/src/plugins/mcp-client.d.ts +14 -5
  70. package/dist/src/plugins/mcp-client.d.ts.map +1 -1
  71. package/dist/src/plugins/mcp-client.js +197 -43
  72. package/dist/src/plugins/mcp-client.js.map +1 -1
  73. package/dist/src/scheduling/task-scheduler.d.ts +51 -0
  74. package/dist/src/scheduling/task-scheduler.d.ts.map +1 -0
  75. package/dist/src/scheduling/task-scheduler.js +127 -0
  76. package/dist/src/scheduling/task-scheduler.js.map +1 -0
  77. package/dist/src/session/prompt-builder.d.ts +6 -0
  78. package/dist/src/session/prompt-builder.d.ts.map +1 -1
  79. package/dist/src/session/prompt-builder.js +21 -2
  80. package/dist/src/session/prompt-builder.js.map +1 -1
  81. package/dist/src/session/prompt-cache.d.ts +33 -0
  82. package/dist/src/session/prompt-cache.d.ts.map +1 -0
  83. package/dist/src/session/prompt-cache.js +54 -0
  84. package/dist/src/session/prompt-cache.js.map +1 -0
  85. package/dist/src/tools/built-in/diagnostics.d.ts +12 -0
  86. package/dist/src/tools/built-in/diagnostics.d.ts.map +1 -0
  87. package/dist/src/tools/built-in/diagnostics.js +119 -0
  88. package/dist/src/tools/built-in/diagnostics.js.map +1 -0
  89. package/dist/src/tools/built-in/git-worktree.d.ts +13 -0
  90. package/dist/src/tools/built-in/git-worktree.d.ts.map +1 -0
  91. package/dist/src/tools/built-in/git-worktree.js +75 -0
  92. package/dist/src/tools/built-in/git-worktree.js.map +1 -0
  93. package/dist/src/tools/built-in/index.d.ts +5 -1
  94. package/dist/src/tools/built-in/index.d.ts.map +1 -1
  95. package/dist/src/tools/built-in/index.js +8 -2
  96. package/dist/src/tools/built-in/index.js.map +1 -1
  97. package/dist/src/tools/built-in/memory.d.ts +15 -0
  98. package/dist/src/tools/built-in/memory.d.ts.map +1 -0
  99. package/dist/src/tools/built-in/memory.js +58 -0
  100. package/dist/src/tools/built-in/memory.js.map +1 -0
  101. package/dist/src/tools/built-in/notebook.d.ts +22 -0
  102. package/dist/src/tools/built-in/notebook.d.ts.map +1 -0
  103. package/dist/src/tools/built-in/notebook.js +207 -0
  104. package/dist/src/tools/built-in/notebook.js.map +1 -0
  105. 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
- * MCP servers expose tools over HTTP (SSE or REST).
5
- * This client registers remote tools as local tool definitions.
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 and discover its tools. */
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;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAkB,UAAU,EAAkB,MAAM,kBAAkB,CAAA;AACnG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAGxD,UAAU,OAAO;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACrC;AAQD,qBAAa,SAAS;IACpB,OAAO,CAAC,WAAW,CAAmC;IAEtD,uDAAuD;IACjD,OAAO,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IA8B1D,qCAAqC;IACrC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIjC,kCAAkC;IAClC,eAAe,IAAI,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;IAS1F,oCAAoC;IAC9B,QAAQ,CACZ,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,UAAU,CAAC;IAmCtB;;;OAGG;IACH,aAAa,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM;IAyB7C,0CAA0C;IAC1C,IAAI,cAAc,IAAI,OAAO,CAE5B;CACF"}
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
- * MCP servers expose tools over HTTP (SSE or REST).
5
- * This client registers remote tools as local tool definitions.
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 and discover its tools. */
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
- 'Content-Type': 'application/json',
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
- try {
20
- const response = await fetch(`${url}/tools`, { headers });
21
- if (!response.ok) {
22
- throw new Error(`MCP server returned ${response.status}: ${response.statusText}`);
23
- }
24
- const data = await response.json();
25
- const tools = data.tools ?? [];
26
- this.connections.set(config.name, {
27
- config,
28
- tools,
29
- connected: true,
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
- return tools;
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
- catch (err) {
34
- const msg = err instanceof Error ? err.message : String(err);
35
- throw new Error(`Failed to connect to MCP server "${config.name}" at ${config.url}: ${msg}`);
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
- const response = await fetch(`${url}/tools/${toolName}`, {
65
- method: 'POST',
66
- headers,
67
- body: JSON.stringify({ input }),
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"}