@nexagent-cli/cli 0.2.3 → 0.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.
Files changed (159) hide show
  1. package/README.md +2 -2
  2. package/dist/agent/loop.d.ts +0 -1
  3. package/dist/agent/loop.d.ts.map +1 -1
  4. package/dist/agent/loop.js +0 -10
  5. package/dist/agent/loop.js.map +1 -1
  6. package/dist/agent/prompt.d.ts.map +1 -1
  7. package/dist/agent/prompt.js.map +1 -1
  8. package/dist/commands/agent.d.ts.map +1 -1
  9. package/dist/commands/agent.js.map +1 -1
  10. package/dist/commands/chat.d.ts.map +1 -1
  11. package/dist/commands/chat.js +167 -0
  12. package/dist/commands/chat.js.map +1 -1
  13. package/dist/commands/config.d.ts.map +1 -1
  14. package/dist/commands/config.js.map +1 -1
  15. package/dist/commands/dashboard.d.ts +7 -0
  16. package/dist/commands/dashboard.d.ts.map +1 -0
  17. package/dist/commands/dashboard.js +273 -0
  18. package/dist/commands/dashboard.js.map +1 -0
  19. package/dist/commands/doctor.d.ts.map +1 -1
  20. package/dist/commands/doctor.js.map +1 -1
  21. package/dist/commands/mcp.d.ts +7 -0
  22. package/dist/commands/mcp.d.ts.map +1 -0
  23. package/dist/commands/mcp.js +99 -0
  24. package/dist/commands/mcp.js.map +1 -0
  25. package/dist/commands/memory.d.ts.map +1 -1
  26. package/dist/commands/memory.js.map +1 -1
  27. package/dist/commands/models.d.ts.map +1 -1
  28. package/dist/commands/models.js.map +1 -1
  29. package/dist/commands/run.d.ts.map +1 -1
  30. package/dist/commands/run.js.map +1 -1
  31. package/dist/commands/server.d.ts.map +1 -1
  32. package/dist/commands/server.js +1 -16
  33. package/dist/commands/server.js.map +1 -1
  34. package/dist/commands/session.d.ts.map +1 -1
  35. package/dist/commands/session.js.map +1 -1
  36. package/dist/commands/update.d.ts.map +1 -1
  37. package/dist/commands/update.js.map +1 -1
  38. package/dist/config/loader.d.ts.map +1 -1
  39. package/dist/config/loader.js +5 -0
  40. package/dist/config/loader.js.map +1 -1
  41. package/dist/config/wizard.d.ts.map +1 -1
  42. package/dist/config/wizard.js.map +1 -1
  43. package/dist/db/database.d.ts.map +1 -1
  44. package/dist/db/database.js.map +1 -1
  45. package/dist/db/session-store.d.ts.map +1 -1
  46. package/dist/db/session-store.js.map +1 -1
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +60 -0
  49. package/dist/index.js.map +1 -1
  50. package/dist/llm/providers/anthropic.d.ts.map +1 -1
  51. package/dist/llm/providers/anthropic.js.map +1 -1
  52. package/dist/llm/providers/google.d.ts.map +1 -1
  53. package/dist/llm/providers/google.js.map +1 -1
  54. package/dist/llm/providers/ollama.d.ts.map +1 -1
  55. package/dist/llm/providers/ollama.js.map +1 -1
  56. package/dist/llm/providers/openai.d.ts.map +1 -1
  57. package/dist/llm/providers/openai.js +8 -0
  58. package/dist/llm/providers/openai.js.map +1 -1
  59. package/dist/llm/router.d.ts.map +1 -1
  60. package/dist/llm/router.js +2 -0
  61. package/dist/llm/router.js.map +1 -1
  62. package/dist/mcp/catalog.d.ts +11 -0
  63. package/dist/mcp/catalog.d.ts.map +1 -0
  64. package/dist/mcp/catalog.js +114 -0
  65. package/dist/mcp/catalog.js.map +1 -0
  66. package/dist/mcp/index.d.ts +5 -0
  67. package/dist/mcp/index.d.ts.map +1 -0
  68. package/dist/mcp/index.js +8 -0
  69. package/dist/mcp/index.js.map +1 -0
  70. package/dist/mcp/installer.d.ts +13 -0
  71. package/dist/mcp/installer.d.ts.map +1 -0
  72. package/dist/mcp/installer.js +92 -0
  73. package/dist/mcp/installer.js.map +1 -0
  74. package/dist/mcp/registry.d.ts +13 -0
  75. package/dist/mcp/registry.d.ts.map +1 -0
  76. package/dist/mcp/registry.js +81 -0
  77. package/dist/mcp/registry.js.map +1 -0
  78. package/dist/mcp/types.d.ts +44 -0
  79. package/dist/mcp/types.d.ts.map +1 -0
  80. package/dist/mcp/types.js +5 -0
  81. package/dist/mcp/types.js.map +1 -0
  82. package/dist/memory/manager.d.ts.map +1 -1
  83. package/dist/memory/manager.js.map +1 -1
  84. package/dist/orchestrator/index.d.ts +36 -0
  85. package/dist/orchestrator/index.d.ts.map +1 -0
  86. package/dist/orchestrator/index.js +118 -0
  87. package/dist/orchestrator/index.js.map +1 -0
  88. package/dist/orchestrator/types.d.ts +73 -0
  89. package/dist/orchestrator/types.d.ts.map +1 -0
  90. package/dist/orchestrator/types.js +5 -0
  91. package/dist/orchestrator/types.js.map +1 -0
  92. package/dist/orchestrator/worker.d.ts +2 -0
  93. package/dist/orchestrator/worker.d.ts.map +1 -0
  94. package/dist/orchestrator/worker.js +158 -0
  95. package/dist/orchestrator/worker.js.map +1 -0
  96. package/dist/safety/gate.d.ts.map +1 -1
  97. package/dist/safety/gate.js.map +1 -1
  98. package/dist/tools/file-delete.d.ts.map +1 -1
  99. package/dist/tools/file-delete.js.map +1 -1
  100. package/dist/tools/file-edit.d.ts.map +1 -1
  101. package/dist/tools/file-edit.js.map +1 -1
  102. package/dist/tools/file-list.d.ts.map +1 -1
  103. package/dist/tools/file-list.js.map +1 -1
  104. package/dist/tools/file-read.d.ts.map +1 -1
  105. package/dist/tools/file-read.js.map +1 -1
  106. package/dist/tools/file-search.d.ts.map +1 -1
  107. package/dist/tools/file-search.js.map +1 -1
  108. package/dist/tools/file-write.d.ts.map +1 -1
  109. package/dist/tools/file-write.js.map +1 -1
  110. package/dist/tools/memory-read.d.ts.map +1 -1
  111. package/dist/tools/memory-read.js.map +1 -1
  112. package/dist/tools/memory-write.d.ts.map +1 -1
  113. package/dist/tools/memory-write.js.map +1 -1
  114. package/dist/tools/registry.d.ts.map +1 -1
  115. package/dist/tools/registry.js.map +1 -1
  116. package/dist/tools/shell-exec.d.ts.map +1 -1
  117. package/dist/tools/shell-exec.js.map +1 -1
  118. package/dist/tools/web-fetch.d.ts.map +1 -1
  119. package/dist/tools/web-fetch.js.map +1 -1
  120. package/dist/tools/web-search.d.ts.map +1 -1
  121. package/dist/tools/web-search.js.map +1 -1
  122. package/dist/ui/ChatApp.d.ts +8 -1
  123. package/dist/ui/ChatApp.d.ts.map +1 -1
  124. package/dist/ui/ChatApp.js +60 -3
  125. package/dist/ui/ChatApp.js.map +1 -1
  126. package/dist/ui/ConfirmDialog.d.ts.map +1 -1
  127. package/dist/ui/ConfirmDialog.js.map +1 -1
  128. package/dist/ui/InputBar.d.ts +1 -0
  129. package/dist/ui/InputBar.d.ts.map +1 -1
  130. package/dist/ui/InputBar.js +38 -6
  131. package/dist/ui/InputBar.js.map +1 -1
  132. package/dist/ui/MessageList.d.ts.map +1 -1
  133. package/dist/ui/MessageList.js.map +1 -1
  134. package/dist/ui/Spinner.d.ts.map +1 -1
  135. package/dist/ui/Spinner.js.map +1 -1
  136. package/dist/ui/StatusBar.d.ts +3 -1
  137. package/dist/ui/StatusBar.d.ts.map +1 -1
  138. package/dist/ui/StatusBar.js +18 -3
  139. package/dist/ui/StatusBar.js.map +1 -1
  140. package/dist/ui/ToolPanel.d.ts.map +1 -1
  141. package/dist/ui/ToolPanel.js.map +1 -1
  142. package/dist/ui/quick-commands.d.ts +9 -0
  143. package/dist/ui/quick-commands.d.ts.map +1 -0
  144. package/dist/ui/quick-commands.js +32 -0
  145. package/dist/ui/quick-commands.js.map +1 -0
  146. package/dist/ui/splash.d.ts +3 -0
  147. package/dist/ui/splash.d.ts.map +1 -0
  148. package/dist/ui/splash.js +34 -0
  149. package/dist/ui/splash.js.map +1 -0
  150. package/dist/utils/changelog.d.ts.map +1 -1
  151. package/dist/utils/changelog.js.map +1 -1
  152. package/dist/utils/env.d.ts.map +1 -1
  153. package/dist/utils/env.js.map +1 -1
  154. package/package.json +33 -33
  155. package/dist/subagents/orchestrator.d.ts +0 -20
  156. package/dist/subagents/orchestrator.d.ts.map +0 -1
  157. package/dist/subagents/orchestrator.js +0 -151
  158. package/dist/subagents/orchestrator.js.map +0 -1
  159. package/proxy-server.mjs +0 -272
@@ -0,0 +1,114 @@
1
+ // ============================================================
2
+ // MCP Catalog — remote / local catalog loading and search
3
+ // ============================================================
4
+ import { readFileSync } from 'node:fs';
5
+ const BUILT_IN_TOOLS = [
6
+ {
7
+ id: 'fetch',
8
+ name: 'Fetch',
9
+ description: 'HTTP fetch tool for retrieving web content',
10
+ version: '1.0.0',
11
+ author: 'NexAgent',
12
+ license: 'MIT',
13
+ entryPoint: 'index.js',
14
+ configSchema: { type: 'object', properties: {}, required: [] },
15
+ permissions: ['network'],
16
+ downloadUrl: 'https://example.com/mcp/fetch-1.0.0.tgz',
17
+ checksum: '0000000000000000000000000000000000000000000000000000000000000000',
18
+ },
19
+ {
20
+ id: 'github',
21
+ name: 'GitHub',
22
+ description: 'Interact with the GitHub API',
23
+ version: '1.0.0',
24
+ author: 'NexAgent',
25
+ license: 'MIT',
26
+ entryPoint: 'index.js',
27
+ configSchema: { type: 'object', properties: {}, required: [] },
28
+ permissions: ['network'],
29
+ downloadUrl: 'https://example.com/mcp/github-1.0.0.tgz',
30
+ checksum: '0000000000000000000000000000000000000000000000000000000000000000',
31
+ },
32
+ {
33
+ id: 'filesystem',
34
+ name: 'Filesystem',
35
+ description: 'Read and write local files',
36
+ version: '1.0.0',
37
+ author: 'NexAgent',
38
+ license: 'MIT',
39
+ entryPoint: 'index.js',
40
+ configSchema: { type: 'object', properties: {}, required: [] },
41
+ permissions: ['filesystem'],
42
+ downloadUrl: 'https://example.com/mcp/filesystem-1.0.0.tgz',
43
+ checksum: '0000000000000000000000000000000000000000000000000000000000000000',
44
+ },
45
+ {
46
+ id: 'browser',
47
+ name: 'Browser',
48
+ description: 'Headless browser automation',
49
+ version: '1.0.0',
50
+ author: 'NexAgent',
51
+ license: 'MIT',
52
+ entryPoint: 'index.js',
53
+ configSchema: { type: 'object', properties: {}, required: [] },
54
+ permissions: ['network', 'filesystem'],
55
+ downloadUrl: 'https://example.com/mcp/browser-1.0.0.tgz',
56
+ checksum: '0000000000000000000000000000000000000000000000000000000000000000',
57
+ },
58
+ {
59
+ id: 'sqlite',
60
+ name: 'SQLite',
61
+ description: 'Query SQLite databases',
62
+ version: '1.0.0',
63
+ author: 'NexAgent',
64
+ license: 'MIT',
65
+ entryPoint: 'index.js',
66
+ configSchema: { type: 'object', properties: {}, required: [] },
67
+ permissions: ['filesystem'],
68
+ downloadUrl: 'https://example.com/mcp/sqlite-1.0.0.tgz',
69
+ checksum: '0000000000000000000000000000000000000000000000000000000000000000',
70
+ },
71
+ ];
72
+ export class McpCatalog {
73
+ entries;
74
+ constructor() {
75
+ this.entries = [...BUILT_IN_TOOLS];
76
+ }
77
+ async fetchRemote(url) {
78
+ const response = await fetch(url);
79
+ if (!response.ok) {
80
+ throw new Error(`Failed to fetch catalog from ${url}: ${response.status} ${response.statusText}`);
81
+ }
82
+ const data = (await response.json());
83
+ this.entries = data;
84
+ }
85
+ loadLocal(path) {
86
+ const raw = readFileSync(path, 'utf-8');
87
+ const data = JSON.parse(raw);
88
+ this.entries = data;
89
+ }
90
+ search(query) {
91
+ const lower = query.toLowerCase();
92
+ const scored = this.entries.map((entry) => {
93
+ const nameIdx = entry.name.toLowerCase().indexOf(lower);
94
+ const descIdx = entry.description.toLowerCase().indexOf(lower);
95
+ let score = 0;
96
+ if (nameIdx !== -1)
97
+ score += 100 - nameIdx;
98
+ if (descIdx !== -1)
99
+ score += 10 - descIdx;
100
+ return { entry, score };
101
+ });
102
+ return scored
103
+ .filter((s) => s.score > 0)
104
+ .sort((a, b) => b.score - a.score)
105
+ .map((s) => s.entry);
106
+ }
107
+ get(id) {
108
+ return this.entries.find((e) => e.id === id);
109
+ }
110
+ getAll() {
111
+ return [...this.entries];
112
+ }
113
+ }
114
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/mcp/catalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export * from './types.js';
2
+ export * from './catalog.js';
3
+ export * from './registry.js';
4
+ export * from './installer.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAIA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,8 @@
1
+ // ============================================================
2
+ // MCP Module — barrel export
3
+ // ============================================================
4
+ export * from './types.js';
5
+ export * from './catalog.js';
6
+ export * from './registry.js';
7
+ export * from './installer.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,6BAA6B;AAC7B,+DAA+D;AAE/D,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { McpCatalog } from './catalog.js';
2
+ import { McpRegistry } from './registry.js';
3
+ import type { McpCatalogEntry, McpSandboxResult } from './types.js';
4
+ export declare class McpInstaller {
5
+ private registry;
6
+ private catalog;
7
+ constructor(registry: McpRegistry, catalog: McpCatalog);
8
+ download(entry: McpCatalogEntry, destDir: string): Promise<void>;
9
+ validate(_entry: McpCatalogEntry, _dir: string): boolean;
10
+ sandboxRun(toolId: string, args: string[], timeoutMs?: number): Promise<McpSandboxResult>;
11
+ uninstall(toolId: string): void;
12
+ }
13
+ //# sourceMappingURL=installer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/mcp/installer.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEpE,qBAAa,YAAY;IAErB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,OAAO;gBADP,QAAQ,EAAE,WAAW,EACrB,OAAO,EAAE,UAAU;IAGvB,QAAQ,CAAC,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAStE,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAMlD,UAAU,CACd,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EAAE,EACd,SAAS,SAAQ,GAChB,OAAO,CAAC,gBAAgB,CAAC;IAgE5B,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;CAWhC"}
@@ -0,0 +1,92 @@
1
+ // ============================================================
2
+ // MCP Installer — download, validate, sandbox, and uninstall
3
+ // ============================================================
4
+ import { spawn } from 'node:child_process';
5
+ import { existsSync, mkdirSync, rmSync, writeFileSync } from 'node:fs';
6
+ import { join } from 'node:path';
7
+ export class McpInstaller {
8
+ registry;
9
+ catalog;
10
+ constructor(registry, catalog) {
11
+ this.registry = registry;
12
+ this.catalog = catalog;
13
+ }
14
+ async download(entry, destDir) {
15
+ if (!existsSync(destDir)) {
16
+ mkdirSync(destDir, { recursive: true });
17
+ }
18
+ const placeholder = join(destDir, 'placeholder.txt');
19
+ writeFileSync(placeholder, `Placeholder for ${entry.name} v${entry.version}\n`, 'utf-8');
20
+ console.log(`[McpInstaller] Downloaded stub for ${entry.id} to ${destDir}`);
21
+ }
22
+ validate(_entry, _dir) {
23
+ console.log(`[McpInstaller] Validating checksum (stub)`);
24
+ // Stub: real implementation would hash artifacts and compare with entry.checksum
25
+ return true;
26
+ }
27
+ async sandboxRun(toolId, args, timeoutMs = 30000) {
28
+ const record = this.registry.get(toolId);
29
+ const entry = this.catalog.get(toolId);
30
+ if (!record) {
31
+ throw new Error(`Tool ${toolId} is not installed`);
32
+ }
33
+ if (!entry) {
34
+ throw new Error(`Tool ${toolId} not found in catalog`);
35
+ }
36
+ if (!record.enabled) {
37
+ throw new Error(`Tool ${toolId} is disabled`);
38
+ }
39
+ const scriptPath = join(record.path, entry.entryPoint);
40
+ if (!existsSync(scriptPath)) {
41
+ throw new Error(`Entry point ${scriptPath} does not exist`);
42
+ }
43
+ const isNodeScript = scriptPath.endsWith('.js');
44
+ const command = isNodeScript ? 'node' : scriptPath;
45
+ const commandArgs = isNodeScript ? [scriptPath, ...args] : args;
46
+ return new Promise((resolve, reject) => {
47
+ const child = spawn(command, commandArgs, {
48
+ cwd: record.path,
49
+ stdio: ['ignore', 'pipe', 'pipe'],
50
+ });
51
+ let stdout = '';
52
+ let stderr = '';
53
+ let timedOut = false;
54
+ const timer = setTimeout(() => {
55
+ timedOut = true;
56
+ child.kill('SIGTERM');
57
+ setTimeout(() => {
58
+ if (!child.killed) {
59
+ child.kill('SIGKILL');
60
+ }
61
+ }, 5000);
62
+ }, timeoutMs);
63
+ child.stdout?.on('data', (chunk) => {
64
+ stdout += chunk.toString();
65
+ });
66
+ child.stderr?.on('data', (chunk) => {
67
+ stderr += chunk.toString();
68
+ });
69
+ child.on('error', (err) => {
70
+ clearTimeout(timer);
71
+ reject(err);
72
+ });
73
+ child.on('close', (code) => {
74
+ clearTimeout(timer);
75
+ const exitCode = code ?? (timedOut ? 1 : 0);
76
+ resolve({ stdout, stderr, exitCode, artifacts: [] });
77
+ });
78
+ });
79
+ }
80
+ uninstall(toolId) {
81
+ const record = this.registry.get(toolId);
82
+ if (!record) {
83
+ throw new Error(`Tool ${toolId} is not installed`);
84
+ }
85
+ if (existsSync(record.path)) {
86
+ rmSync(record.path, { recursive: true, force: true });
87
+ }
88
+ this.registry.uninstall(toolId);
89
+ console.log(`[McpInstaller] Uninstalled ${toolId}`);
90
+ }
91
+ }
92
+ //# sourceMappingURL=installer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/mcp/installer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { McpCatalogEntry, McpInstallRecord } from './types.js';
2
+ export declare class McpRegistry {
3
+ private data;
4
+ constructor();
5
+ list(): McpInstallRecord[];
6
+ get(id: string): McpInstallRecord | undefined;
7
+ install(entry: McpCatalogEntry): void;
8
+ uninstall(id: string): void;
9
+ enable(id: string): void;
10
+ disable(id: string): void;
11
+ isInstalled(id: string): boolean;
12
+ }
13
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/mcp/registry.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AA6BpE,qBAAa,WAAW;IACtB,OAAO,CAAC,IAAI,CAAe;;IAM3B,IAAI,IAAI,gBAAgB,EAAE;IAI1B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAI7C,OAAO,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAoBrC,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAS3B,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IASxB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IASzB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;CAGjC"}
@@ -0,0 +1,81 @@
1
+ // ============================================================
2
+ // MCP Registry — local installation metadata persistence
3
+ // ============================================================
4
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
5
+ import { homedir } from 'node:os';
6
+ import { join } from 'node:path';
7
+ const REGISTRY_DIR = join(homedir(), '.nexagent');
8
+ const REGISTRY_PATH = join(REGISTRY_DIR, 'mcp-registry.json');
9
+ function ensureDir(dir) {
10
+ if (!existsSync(dir)) {
11
+ mkdirSync(dir, { recursive: true });
12
+ }
13
+ }
14
+ function readRegistry() {
15
+ ensureDir(REGISTRY_DIR);
16
+ if (!existsSync(REGISTRY_PATH)) {
17
+ return { tools: [] };
18
+ }
19
+ const raw = readFileSync(REGISTRY_PATH, 'utf-8');
20
+ return JSON.parse(raw);
21
+ }
22
+ function writeRegistry(data) {
23
+ ensureDir(REGISTRY_DIR);
24
+ writeFileSync(REGISTRY_PATH, JSON.stringify(data, null, 2), 'utf-8');
25
+ }
26
+ export class McpRegistry {
27
+ data;
28
+ constructor() {
29
+ this.data = readRegistry();
30
+ }
31
+ list() {
32
+ return [...this.data.tools];
33
+ }
34
+ get(id) {
35
+ return this.data.tools.find((t) => t.id === id);
36
+ }
37
+ install(entry) {
38
+ if (this.isInstalled(entry.id)) {
39
+ throw new Error(`Tool ${entry.id} is already installed`);
40
+ }
41
+ console.log(`[McpRegistry] Would download ${entry.name} from ${entry.downloadUrl}`);
42
+ const record = {
43
+ id: entry.id,
44
+ version: entry.version,
45
+ installedAt: new Date().toISOString(),
46
+ path: join(REGISTRY_DIR, 'mcp', entry.id),
47
+ config: {},
48
+ enabled: true,
49
+ };
50
+ this.data.tools.push(record);
51
+ writeRegistry(this.data);
52
+ }
53
+ uninstall(id) {
54
+ const idx = this.data.tools.findIndex((t) => t.id === id);
55
+ if (idx === -1) {
56
+ throw new Error(`Tool ${id} is not installed`);
57
+ }
58
+ this.data.tools.splice(idx, 1);
59
+ writeRegistry(this.data);
60
+ }
61
+ enable(id) {
62
+ const tool = this.get(id);
63
+ if (!tool) {
64
+ throw new Error(`Tool ${id} is not installed`);
65
+ }
66
+ tool.enabled = true;
67
+ writeRegistry(this.data);
68
+ }
69
+ disable(id) {
70
+ const tool = this.get(id);
71
+ if (!tool) {
72
+ throw new Error(`Tool ${id} is not installed`);
73
+ }
74
+ tool.enabled = false;
75
+ writeRegistry(this.data);
76
+ }
77
+ isInstalled(id) {
78
+ return this.data.tools.some((t) => t.id === id);
79
+ }
80
+ }
81
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/mcp/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /** Lightweight JSON-schema-ish descriptor for a tool's config */
2
+ export interface McpConfigSchema {
3
+ type: 'object';
4
+ properties: Record<string, {
5
+ type: string;
6
+ description?: string;
7
+ default?: unknown;
8
+ }>;
9
+ required?: string[];
10
+ }
11
+ /** Base definition of an MCP tool */
12
+ export interface McpToolDefinition {
13
+ id: string;
14
+ name: string;
15
+ description: string;
16
+ version: string;
17
+ author: string;
18
+ license: string;
19
+ entryPoint: string;
20
+ configSchema: McpConfigSchema;
21
+ permissions: string[];
22
+ }
23
+ /** Catalog entry adds distribution metadata */
24
+ export interface McpCatalogEntry extends McpToolDefinition {
25
+ downloadUrl: string;
26
+ checksum: string;
27
+ }
28
+ /** Record of an installed tool in the local registry */
29
+ export interface McpInstallRecord {
30
+ id: string;
31
+ version: string;
32
+ installedAt: string;
33
+ path: string;
34
+ config: Record<string, unknown>;
35
+ enabled: boolean;
36
+ }
37
+ /** Result of a sandboxed tool execution */
38
+ export interface McpSandboxResult {
39
+ stdout: string;
40
+ stderr: string;
41
+ exitCode: number;
42
+ artifacts: string[];
43
+ }
44
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/mcp/types.ts"],"names":[],"mappings":"AAIA,iEAAiE;AACjE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE;QACzB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC,CAAC;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,qCAAqC;AACrC,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,eAAe,CAAC;IAC9B,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,+CAA+C;AAC/C,MAAM,WAAW,eAAgB,SAAQ,iBAAiB;IACxD,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wDAAwD;AACxD,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,2CAA2C;AAC3C,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB"}
@@ -0,0 +1,5 @@
1
+ // ============================================================
2
+ // MCP Types — shared type definitions for the MCP subsystem
3
+ // ============================================================
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/mcp/types.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,4DAA4D;AAC5D,+DAA+D"}
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../../src/memory/manager.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAS5F,qBAAa,aAAa;IAEtB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,SAAS;gBADT,EAAE,EAAS,QAAQ,CAAC,QAAQ,EAC5B,SAAS,EAAE,MAAM;IAGrB,IAAI,CAAC,IAAI,GAAE,iBAAsB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAiDhE,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAO7C,WAAW,CAAC,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW;IA8BvF,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKlC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKnC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAKhD,OAAO,CAAC,eAAe,UAAQ,GAAG,WAAW,EAAE;IAQ/C,OAAO,CAAC,UAAU;CAanB"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/memory/manager.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAS5F,qBAAa,aAAa;IAEtB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,SAAS;gBADT,EAAE,EAAS,QAAQ,CAAC,QAAQ,EAC5B,SAAS,EAAE,MAAM;IAGrB,IAAI,CAAC,IAAI,GAAE,iBAAsB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAiDhE,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAO7C,WAAW,CAAC,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW;IA8BvF,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKlC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKnC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAKhD,OAAO,CAAC,eAAe,UAAQ,GAAG,WAAW,EAAE;IAQ/C,OAAO,CAAC,UAAU;CAanB"}
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../../src/memory/manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/memory/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { SubagentTask, SubagentJob, SubagentResult, ReviewDecision } from './types.js';
2
+ /** Event emitter interface compatible with AgentEventEmitter */
3
+ interface EventBus {
4
+ emit(event: string, data: unknown): void;
5
+ }
6
+ export declare class SubagentOrchestrator {
7
+ private jobs;
8
+ private events;
9
+ private defaultProvider;
10
+ private defaultModel;
11
+ private apiKey?;
12
+ private baseUrl?;
13
+ constructor(options: {
14
+ events: EventBus;
15
+ defaultProvider?: string;
16
+ defaultModel?: string;
17
+ apiKey?: string;
18
+ baseUrl?: string;
19
+ });
20
+ /** Spawn a new background subagent */
21
+ spawn(task: SubagentTask): SubagentJob;
22
+ /** Abort a running subagent */
23
+ abort(jobId: string): boolean;
24
+ /** Send a review decision back to a subagent (for retry loops) */
25
+ review(jobId: string, decision: ReviewDecision, feedback?: string): boolean;
26
+ /** List all active (non-finished) jobs */
27
+ listActive(): SubagentJob[];
28
+ /** Get a specific job by ID */
29
+ get(jobId: string): SubagentJob | undefined;
30
+ /** Get result of a finished job */
31
+ getResult(jobId: string): SubagentResult | undefined;
32
+ /** Dispose all workers */
33
+ dispose(): void;
34
+ }
35
+ export * from './types.js';
36
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/orchestrator/index.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EACX,cAAc,EAEd,cAAc,EAEf,MAAM,YAAY,CAAC;AAKpB,gEAAgE;AAChE,UAAU,QAAQ;IAChB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;CAC1C;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,IAAI,CAAkC;IAC9C,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,OAAO,CAAC,CAAS;gBAEb,OAAO,EAAE;QACnB,MAAM,EAAE,QAAQ,CAAC;QACjB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB;IAQD,sCAAsC;IACtC,KAAK,CAAC,IAAI,EAAE,YAAY,GAAG,WAAW;IA6DtC,+BAA+B;IAC/B,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAQ7B,kEAAkE;IAClE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO;IAQ3E,0CAA0C;IAC1C,UAAU,IAAI,WAAW,EAAE;IAM3B,+BAA+B;IAC/B,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAI3C,mCAAmC;IACnC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAIpD,0BAA0B;IAC1B,OAAO,IAAI,IAAI;CAMhB;AAED,cAAc,YAAY,CAAC"}
@@ -0,0 +1,118 @@
1
+ // ============================================================
2
+ // Subagent Orchestrator
3
+ // Manages background worker_threads for delegated tasks.
4
+ // ============================================================
5
+ import { Worker } from 'node:worker_threads';
6
+ import { fileURLToPath } from 'node:url';
7
+ import { dirname, join } from 'node:path';
8
+ const __filename = fileURLToPath(import.meta.url);
9
+ const __dirname = dirname(__filename);
10
+ export class SubagentOrchestrator {
11
+ jobs = new Map();
12
+ events;
13
+ defaultProvider;
14
+ defaultModel;
15
+ apiKey;
16
+ baseUrl;
17
+ constructor(options) {
18
+ this.events = options.events;
19
+ this.defaultProvider = options.defaultProvider ?? 'proxy';
20
+ this.defaultModel = options.defaultModel ?? 'gpt-4o';
21
+ this.apiKey = options.apiKey;
22
+ this.baseUrl = options.baseUrl;
23
+ }
24
+ /** Spawn a new background subagent */
25
+ spawn(task) {
26
+ const workerPath = join(__dirname, 'worker.js');
27
+ const worker = new Worker(workerPath, {
28
+ workerData: {
29
+ task,
30
+ provider: task.provider ?? this.defaultProvider,
31
+ model: task.model ?? this.defaultModel,
32
+ apiKey: this.apiKey,
33
+ baseUrl: this.baseUrl,
34
+ },
35
+ });
36
+ const job = {
37
+ task,
38
+ status: 'queued',
39
+ worker,
40
+ startTime: Date.now(),
41
+ progress: [],
42
+ };
43
+ this.jobs.set(task.id, job);
44
+ worker.on('message', (msg) => {
45
+ switch (msg.type) {
46
+ case 'progress': {
47
+ job.status = msg.data.status;
48
+ job.progress.push(msg.data);
49
+ this.events.emit('subagent:progress', msg.data);
50
+ break;
51
+ }
52
+ case 'result': {
53
+ job.status = msg.data.status === 'success' ? 'reviewing' : msg.data.status;
54
+ job.result = msg.data;
55
+ this.events.emit('subagent:done', msg.data);
56
+ break;
57
+ }
58
+ case 'error': {
59
+ job.status = 'error';
60
+ this.events.emit('subagent:error', { jobId: task.id, error: msg.error });
61
+ break;
62
+ }
63
+ }
64
+ });
65
+ worker.on('error', (err) => {
66
+ job.status = 'error';
67
+ this.events.emit('subagent:error', { jobId: task.id, error: err.message });
68
+ });
69
+ worker.on('exit', (code) => {
70
+ if (code !== 0 && job.status !== 'success' && job.status !== 'error' && job.status !== 'aborted') {
71
+ job.status = 'error';
72
+ this.events.emit('subagent:error', { jobId: task.id, error: `Worker exited with code ${code}` });
73
+ }
74
+ this.jobs.delete(task.id);
75
+ });
76
+ this.events.emit('subagent:spawn', { jobId: task.id, task: task.task });
77
+ return job;
78
+ }
79
+ /** Abort a running subagent */
80
+ abort(jobId) {
81
+ const job = this.jobs.get(jobId);
82
+ if (!job)
83
+ return false;
84
+ job.worker.postMessage({ type: 'abort' });
85
+ job.status = 'aborted';
86
+ return true;
87
+ }
88
+ /** Send a review decision back to a subagent (for retry loops) */
89
+ review(jobId, decision, feedback) {
90
+ const job = this.jobs.get(jobId);
91
+ if (!job)
92
+ return false;
93
+ job.worker.postMessage({ type: 'review', decision, feedback });
94
+ job.status = decision === 'retry' ? 'running' : decision === 'apply' ? 'success' : 'aborted';
95
+ return true;
96
+ }
97
+ /** List all active (non-finished) jobs */
98
+ listActive() {
99
+ return Array.from(this.jobs.values()).filter(j => j.status !== 'success' && j.status !== 'error' && j.status !== 'aborted');
100
+ }
101
+ /** Get a specific job by ID */
102
+ get(jobId) {
103
+ return this.jobs.get(jobId);
104
+ }
105
+ /** Get result of a finished job */
106
+ getResult(jobId) {
107
+ return this.jobs.get(jobId)?.result;
108
+ }
109
+ /** Dispose all workers */
110
+ dispose() {
111
+ for (const job of this.jobs.values()) {
112
+ job.worker.terminate().catch(() => { });
113
+ }
114
+ this.jobs.clear();
115
+ }
116
+ }
117
+ export * from './types.js';
118
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/orchestrator/index.ts"],"names":[],"mappings":"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"}