xibecode 1.0.2 → 1.0.6

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 (288) hide show
  1. package/dist/commands/chat.d.ts +0 -1
  2. package/dist/commands/chat.d.ts.map +1 -1
  3. package/dist/commands/chat.js +10 -7
  4. package/dist/commands/chat.js.map +1 -1
  5. package/dist/commands/config.d.ts.map +1 -1
  6. package/dist/commands/config.js +5 -3
  7. package/dist/commands/config.js.map +1 -1
  8. package/dist/commands/diagnostics.js +1 -1
  9. package/dist/commands/diagnostics.js.map +1 -1
  10. package/dist/commands/mcp.js +1 -1
  11. package/dist/commands/mcp.js.map +1 -1
  12. package/dist/commands/resume.js +1 -1
  13. package/dist/commands/resume.js.map +1 -1
  14. package/dist/commands/run-pr.d.ts.map +1 -1
  15. package/dist/commands/run-pr.js +13 -10
  16. package/dist/commands/run-pr.js.map +1 -1
  17. package/dist/commands/run.d.ts.map +1 -1
  18. package/dist/commands/run.js +17 -14
  19. package/dist/commands/run.js.map +1 -1
  20. package/dist/commands/skills.d.ts.map +1 -1
  21. package/dist/commands/skills.js +3 -2
  22. package/dist/commands/skills.js.map +1 -1
  23. package/dist/components/AssistantMarkdown.js +1 -1
  24. package/dist/components/AssistantMarkdown.js.map +1 -1
  25. package/dist/index.js +2 -39
  26. package/dist/index.js.map +1 -1
  27. package/dist/ui/claude-style-chat.d.ts.map +1 -1
  28. package/dist/ui/claude-style-chat.js +15 -11
  29. package/dist/ui/claude-style-chat.js.map +1 -1
  30. package/dist/utils/built-in-skills-dir.d.ts +7 -0
  31. package/dist/utils/built-in-skills-dir.d.ts.map +1 -0
  32. package/dist/utils/built-in-skills-dir.js +11 -0
  33. package/dist/utils/built-in-skills-dir.js.map +1 -0
  34. package/dist/utils/config.d.ts +2 -119
  35. package/dist/utils/config.d.ts.map +1 -1
  36. package/dist/utils/config.js +3 -88
  37. package/dist/utils/config.js.map +1 -1
  38. package/package.json +11 -26
  39. package/dist/commands/punycode.d.ts +0 -5
  40. package/dist/commands/punycode.d.ts.map +0 -1
  41. package/dist/commands/punycode.js +0 -48
  42. package/dist/commands/punycode.js.map +0 -1
  43. package/dist/commands/tui.d.ts +0 -9
  44. package/dist/commands/tui.d.ts.map +0 -1
  45. package/dist/commands/tui.js +0 -83
  46. package/dist/commands/tui.js.map +0 -1
  47. package/dist/core/agent-tool-policies.d.ts +0 -5
  48. package/dist/core/agent-tool-policies.d.ts.map +0 -1
  49. package/dist/core/agent-tool-policies.js +0 -18
  50. package/dist/core/agent-tool-policies.js.map +0 -1
  51. package/dist/core/agent.d.ts +0 -181
  52. package/dist/core/agent.d.ts.map +0 -1
  53. package/dist/core/agent.js +0 -1777
  54. package/dist/core/agent.js.map +0 -1
  55. package/dist/core/background-agent.d.ts +0 -23
  56. package/dist/core/background-agent.d.ts.map +0 -1
  57. package/dist/core/background-agent.js +0 -175
  58. package/dist/core/background-agent.js.map +0 -1
  59. package/dist/core/code-graph.d.ts +0 -18
  60. package/dist/core/code-graph.d.ts.map +0 -1
  61. package/dist/core/code-graph.js +0 -105
  62. package/dist/core/code-graph.js.map +0 -1
  63. package/dist/core/conflict-solver.d.ts +0 -26
  64. package/dist/core/conflict-solver.d.ts.map +0 -1
  65. package/dist/core/conflict-solver.js +0 -108
  66. package/dist/core/conflict-solver.js.map +0 -1
  67. package/dist/core/context-compactor.d.ts +0 -10
  68. package/dist/core/context-compactor.d.ts.map +0 -1
  69. package/dist/core/context-compactor.js +0 -158
  70. package/dist/core/context-compactor.js.map +0 -1
  71. package/dist/core/context-pruner.d.ts +0 -19
  72. package/dist/core/context-pruner.d.ts.map +0 -1
  73. package/dist/core/context-pruner.js +0 -103
  74. package/dist/core/context-pruner.js.map +0 -1
  75. package/dist/core/context.d.ts +0 -82
  76. package/dist/core/context.d.ts.map +0 -1
  77. package/dist/core/context.js +0 -273
  78. package/dist/core/context.js.map +0 -1
  79. package/dist/core/conversation-recovery.d.ts +0 -9
  80. package/dist/core/conversation-recovery.d.ts.map +0 -1
  81. package/dist/core/conversation-recovery.js +0 -15
  82. package/dist/core/conversation-recovery.js.map +0 -1
  83. package/dist/core/debug-workflow.d.ts +0 -9
  84. package/dist/core/debug-workflow.d.ts.map +0 -1
  85. package/dist/core/debug-workflow.js +0 -19
  86. package/dist/core/debug-workflow.js.map +0 -1
  87. package/dist/core/docs-scraper.d.ts +0 -40
  88. package/dist/core/docs-scraper.d.ts.map +0 -1
  89. package/dist/core/docs-scraper.js +0 -386
  90. package/dist/core/docs-scraper.js.map +0 -1
  91. package/dist/core/editor.d.ts +0 -87
  92. package/dist/core/editor.d.ts.map +0 -1
  93. package/dist/core/editor.js +0 -377
  94. package/dist/core/editor.js.map +0 -1
  95. package/dist/core/export.d.ts +0 -11
  96. package/dist/core/export.d.ts.map +0 -1
  97. package/dist/core/export.js +0 -54
  98. package/dist/core/export.js.map +0 -1
  99. package/dist/core/history-manager.d.ts +0 -75
  100. package/dist/core/history-manager.d.ts.map +0 -1
  101. package/dist/core/history-manager.js +0 -146
  102. package/dist/core/history-manager.js.map +0 -1
  103. package/dist/core/marketplace-client.d.ts +0 -52
  104. package/dist/core/marketplace-client.d.ts.map +0 -1
  105. package/dist/core/marketplace-client.js +0 -71
  106. package/dist/core/marketplace-client.js.map +0 -1
  107. package/dist/core/mcp/mcp-config.d.ts +0 -10
  108. package/dist/core/mcp/mcp-config.d.ts.map +0 -1
  109. package/dist/core/mcp/mcp-config.js +0 -70
  110. package/dist/core/mcp/mcp-config.js.map +0 -1
  111. package/dist/core/mcp/mcp-policy.d.ts +0 -17
  112. package/dist/core/mcp/mcp-policy.d.ts.map +0 -1
  113. package/dist/core/mcp/mcp-policy.js +0 -56
  114. package/dist/core/mcp/mcp-policy.js.map +0 -1
  115. package/dist/core/mcp/oauth-flow.d.ts +0 -30
  116. package/dist/core/mcp/oauth-flow.d.ts.map +0 -1
  117. package/dist/core/mcp/oauth-flow.js +0 -230
  118. package/dist/core/mcp/oauth-flow.js.map +0 -1
  119. package/dist/core/mcp/oauth-store.d.ts +0 -13
  120. package/dist/core/mcp/oauth-store.d.ts.map +0 -1
  121. package/dist/core/mcp/oauth-store.js +0 -68
  122. package/dist/core/mcp/oauth-store.js.map +0 -1
  123. package/dist/core/mcp/resolve-mcp-servers.d.ts +0 -16
  124. package/dist/core/mcp/resolve-mcp-servers.d.ts.map +0 -1
  125. package/dist/core/mcp/resolve-mcp-servers.js +0 -83
  126. package/dist/core/mcp/resolve-mcp-servers.js.map +0 -1
  127. package/dist/core/mcp-client.d.ts +0 -99
  128. package/dist/core/mcp-client.d.ts.map +0 -1
  129. package/dist/core/mcp-client.js +0 -315
  130. package/dist/core/mcp-client.js.map +0 -1
  131. package/dist/core/memory-promotions.d.ts +0 -15
  132. package/dist/core/memory-promotions.d.ts.map +0 -1
  133. package/dist/core/memory-promotions.js +0 -38
  134. package/dist/core/memory-promotions.js.map +0 -1
  135. package/dist/core/memory.d.ts +0 -32
  136. package/dist/core/memory.d.ts.map +0 -1
  137. package/dist/core/memory.js +0 -121
  138. package/dist/core/memory.js.map +0 -1
  139. package/dist/core/modes.d.ts +0 -432
  140. package/dist/core/modes.d.ts.map +0 -1
  141. package/dist/core/modes.js +0 -1088
  142. package/dist/core/modes.js.map +0 -1
  143. package/dist/core/pattern-miner.d.ts +0 -43
  144. package/dist/core/pattern-miner.d.ts.map +0 -1
  145. package/dist/core/pattern-miner.js +0 -123
  146. package/dist/core/pattern-miner.js.map +0 -1
  147. package/dist/core/permission-store.d.ts +0 -15
  148. package/dist/core/permission-store.d.ts.map +0 -1
  149. package/dist/core/permission-store.js +0 -30
  150. package/dist/core/permission-store.js.map +0 -1
  151. package/dist/core/permissions.d.ts +0 -33
  152. package/dist/core/permissions.d.ts.map +0 -1
  153. package/dist/core/permissions.js +0 -141
  154. package/dist/core/permissions.js.map +0 -1
  155. package/dist/core/plan-artifacts.d.ts +0 -10
  156. package/dist/core/plan-artifacts.d.ts.map +0 -1
  157. package/dist/core/plan-artifacts.js +0 -60
  158. package/dist/core/plan-artifacts.js.map +0 -1
  159. package/dist/core/plan-session.d.ts +0 -25
  160. package/dist/core/plan-session.d.ts.map +0 -1
  161. package/dist/core/plan-session.js +0 -99
  162. package/dist/core/plan-session.js.map +0 -1
  163. package/dist/core/planMode.d.ts +0 -51
  164. package/dist/core/planMode.d.ts.map +0 -1
  165. package/dist/core/planMode.js +0 -245
  166. package/dist/core/planMode.js.map +0 -1
  167. package/dist/core/plugins.d.ts +0 -96
  168. package/dist/core/plugins.d.ts.map +0 -1
  169. package/dist/core/plugins.js +0 -202
  170. package/dist/core/plugins.js.map +0 -1
  171. package/dist/core/session-bridge.d.ts +0 -128
  172. package/dist/core/session-bridge.d.ts.map +0 -1
  173. package/dist/core/session-bridge.js +0 -328
  174. package/dist/core/session-bridge.js.map +0 -1
  175. package/dist/core/session-manager.d.ts +0 -80
  176. package/dist/core/session-manager.d.ts.map +0 -1
  177. package/dist/core/session-manager.js +0 -166
  178. package/dist/core/session-manager.js.map +0 -1
  179. package/dist/core/session-memory.d.ts +0 -45
  180. package/dist/core/session-memory.d.ts.map +0 -1
  181. package/dist/core/session-memory.js +0 -103
  182. package/dist/core/session-memory.js.map +0 -1
  183. package/dist/core/skill-selection.d.ts +0 -36
  184. package/dist/core/skill-selection.d.ts.map +0 -1
  185. package/dist/core/skill-selection.js +0 -172
  186. package/dist/core/skill-selection.js.map +0 -1
  187. package/dist/core/skills-sh-client.d.ts +0 -19
  188. package/dist/core/skills-sh-client.d.ts.map +0 -1
  189. package/dist/core/skills-sh-client.js +0 -75
  190. package/dist/core/skills-sh-client.js.map +0 -1
  191. package/dist/core/skills.d.ts +0 -97
  192. package/dist/core/skills.d.ts.map +0 -1
  193. package/dist/core/skills.js +0 -339
  194. package/dist/core/skills.js.map +0 -1
  195. package/dist/core/swarm.d.ts +0 -34
  196. package/dist/core/swarm.d.ts.map +0 -1
  197. package/dist/core/swarm.js +0 -111
  198. package/dist/core/swarm.js.map +0 -1
  199. package/dist/core/task-status.d.ts +0 -13
  200. package/dist/core/task-status.d.ts.map +0 -1
  201. package/dist/core/task-status.js +0 -17
  202. package/dist/core/task-status.js.map +0 -1
  203. package/dist/core/tool-orchestrator.d.ts +0 -30
  204. package/dist/core/tool-orchestrator.d.ts.map +0 -1
  205. package/dist/core/tool-orchestrator.js +0 -89
  206. package/dist/core/tool-orchestrator.js.map +0 -1
  207. package/dist/core/tools.d.ts +0 -462
  208. package/dist/core/tools.d.ts.map +0 -1
  209. package/dist/core/tools.js +0 -2916
  210. package/dist/core/tools.js.map +0 -1
  211. package/dist/core/transcript-cleanup.d.ts +0 -8
  212. package/dist/core/transcript-cleanup.d.ts.map +0 -1
  213. package/dist/core/transcript-cleanup.js +0 -52
  214. package/dist/core/transcript-cleanup.js.map +0 -1
  215. package/dist/core/visual-feedback.d.ts +0 -20
  216. package/dist/core/visual-feedback.d.ts.map +0 -1
  217. package/dist/core/visual-feedback.js +0 -117
  218. package/dist/core/visual-feedback.js.map +0 -1
  219. package/dist/tools/browser.d.ts +0 -120
  220. package/dist/tools/browser.d.ts.map +0 -1
  221. package/dist/tools/browser.js +0 -439
  222. package/dist/tools/browser.js.map +0 -1
  223. package/dist/tools/test-generator.d.ts +0 -157
  224. package/dist/tools/test-generator.d.ts.map +0 -1
  225. package/dist/tools/test-generator.js +0 -893
  226. package/dist/tools/test-generator.js.map +0 -1
  227. package/dist/tui/InkApp.d.ts +0 -21
  228. package/dist/tui/InkApp.d.ts.map +0 -1
  229. package/dist/tui/InkApp.js +0 -146
  230. package/dist/tui/InkApp.js.map +0 -1
  231. package/dist/tui/MarkdownMessage.d.ts +0 -16
  232. package/dist/tui/MarkdownMessage.d.ts.map +0 -1
  233. package/dist/tui/MarkdownMessage.js +0 -63
  234. package/dist/tui/MarkdownMessage.js.map +0 -1
  235. package/dist/tui/blessed-chat.d.ts +0 -9
  236. package/dist/tui/blessed-chat.d.ts.map +0 -1
  237. package/dist/tui/blessed-chat.js +0 -887
  238. package/dist/tui/blessed-chat.js.map +0 -1
  239. package/dist/tui/markdown-to-blessed.d.ts +0 -6
  240. package/dist/tui/markdown-to-blessed.d.ts.map +0 -1
  241. package/dist/tui/markdown-to-blessed.js +0 -26
  242. package/dist/tui/markdown-to-blessed.js.map +0 -1
  243. package/dist/ui/ink/App.d.ts +0 -25
  244. package/dist/ui/ink/App.d.ts.map +0 -1
  245. package/dist/ui/ink/App.js +0 -372
  246. package/dist/ui/ink/App.js.map +0 -1
  247. package/dist/utils/at-references.d.ts +0 -14
  248. package/dist/utils/at-references.d.ts.map +0 -1
  249. package/dist/utils/at-references.js +0 -47
  250. package/dist/utils/at-references.js.map +0 -1
  251. package/dist/utils/auto-memory.d.ts +0 -24
  252. package/dist/utils/auto-memory.d.ts.map +0 -1
  253. package/dist/utils/auto-memory.js +0 -153
  254. package/dist/utils/auto-memory.js.map +0 -1
  255. package/dist/utils/git.d.ts +0 -89
  256. package/dist/utils/git.d.ts.map +0 -1
  257. package/dist/utils/git.js +0 -444
  258. package/dist/utils/git.js.map +0 -1
  259. package/dist/utils/mcp-servers-file.d.ts +0 -46
  260. package/dist/utils/mcp-servers-file.d.ts.map +0 -1
  261. package/dist/utils/mcp-servers-file.js +0 -212
  262. package/dist/utils/mcp-servers-file.js.map +0 -1
  263. package/dist/utils/safety.d.ts +0 -60
  264. package/dist/utils/safety.d.ts.map +0 -1
  265. package/dist/utils/safety.js +0 -254
  266. package/dist/utils/safety.js.map +0 -1
  267. package/dist/utils/smithery.d.ts +0 -25
  268. package/dist/utils/smithery.d.ts.map +0 -1
  269. package/dist/utils/smithery.js +0 -50
  270. package/dist/utils/smithery.js.map +0 -1
  271. package/dist/utils/testRunner.d.ts +0 -44
  272. package/dist/utils/testRunner.d.ts.map +0 -1
  273. package/dist/utils/testRunner.js +0 -270
  274. package/dist/utils/testRunner.js.map +0 -1
  275. package/dist/webui/server.d.ts +0 -99
  276. package/dist/webui/server.d.ts.map +0 -1
  277. package/dist/webui/server.js +0 -2619
  278. package/dist/webui/server.js.map +0 -1
  279. package/webui-dist/assets/index-CSla6Lzy.css +0 -32
  280. package/webui-dist/assets/index-G_Z4gzPy.js +0 -457
  281. package/webui-dist/assets/index-G_Z4gzPy.js.map +0 -1
  282. package/webui-dist/assets/xterm-Da5jL1MD.js +0 -10
  283. package/webui-dist/assets/xterm-Da5jL1MD.js.map +0 -1
  284. package/webui-dist/assets/xterm-addon-fit-CMeqLIvm.js +0 -2
  285. package/webui-dist/assets/xterm-addon-fit-CMeqLIvm.js.map +0 -1
  286. package/webui-dist/assets/xterm-addon-web-links-D6m8jNVE.js +0 -2
  287. package/webui-dist/assets/xterm-addon-web-links-D6m8jNVE.js.map +0 -1
  288. package/webui-dist/index.html +0 -15
@@ -1,315 +0,0 @@
1
- import { Client } from '@modelcontextprotocol/sdk/client/index.js';
2
- import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
3
- /**
4
- * Manages connections to MCP servers and provides unified access to their capabilities
5
- */
6
- export class MCPClientManager {
7
- clients = new Map();
8
- serverConfigs = new Map();
9
- tools = new Map();
10
- resources = new Map();
11
- prompts = new Map();
12
- serverStates = new Map();
13
- setState(serverName, patch) {
14
- const current = this.serverStates.get(serverName);
15
- this.serverStates.set(serverName, {
16
- name: serverName,
17
- state: current?.state || 'connecting',
18
- ...current,
19
- ...patch,
20
- updatedAt: Date.now(),
21
- });
22
- }
23
- /**
24
- * Connect to an MCP server
25
- */
26
- async connect(serverName, serverConfig) {
27
- const state = this.serverStates.get(serverName);
28
- if (state?.state === 'needs-auth' && state.needsAuthUntil && Date.now() < state.needsAuthUntil) {
29
- throw new Error(`Skipping connection (needs-auth cached until ${new Date(state.needsAuthUntil).toISOString()})`);
30
- }
31
- if (this.clients.has(serverName)) {
32
- throw new Error(`Already connected to MCP server: ${serverName}`);
33
- }
34
- try {
35
- this.setState(serverName, { state: 'connecting', lastError: undefined });
36
- const client = new Client({
37
- name: 'xibecode',
38
- version: '1.0.2',
39
- }, {
40
- capabilities: {},
41
- });
42
- if (!serverConfig.command) {
43
- throw new Error(`stdio transport requires 'command' for server ${serverName}`);
44
- }
45
- const transport = new StdioClientTransport({
46
- command: serverConfig.command,
47
- args: serverConfig.args || [],
48
- env: serverConfig.env,
49
- });
50
- await client.connect(transport);
51
- // Store client and config
52
- this.clients.set(serverName, client);
53
- this.serverConfigs.set(serverName, serverConfig);
54
- // Discover and cache capabilities
55
- await this.discoverCapabilities(serverName);
56
- this.setState(serverName, { state: 'connected', lastError: undefined, needsAuthUntil: undefined });
57
- }
58
- catch (error) {
59
- const msg = error instanceof Error ? error.message : String(error);
60
- // Heuristic: treat auth-ish failures as needs-auth so we don't reconnect-loop.
61
- if (/(401|unauthorized|forbidden|needs[- ]auth)/i.test(msg)) {
62
- this.setState(serverName, {
63
- state: 'needs-auth',
64
- lastError: msg,
65
- needsAuthUntil: Date.now() + 15 * 60 * 1000,
66
- });
67
- }
68
- else {
69
- this.setState(serverName, { state: 'error', lastError: msg });
70
- }
71
- throw new Error(`Failed to connect to MCP server ${serverName}: ${msg}`);
72
- }
73
- }
74
- /**
75
- * Connect to all MCP servers with simple retry/backoff.
76
- */
77
- async connectAll(servers, opts) {
78
- const retries = opts?.retries ?? 1;
79
- const backoffMs = opts?.backoffMs ?? 750;
80
- const connected = [];
81
- const skippedNeedsAuth = [];
82
- const failed = [];
83
- for (const [name, cfg] of Object.entries(servers)) {
84
- let attempt = 0;
85
- while (true) {
86
- attempt++;
87
- try {
88
- await this.connect(name, cfg);
89
- connected.push(name);
90
- break;
91
- }
92
- catch (err) {
93
- const msg = err instanceof Error ? err.message : String(err);
94
- const st = this.serverStates.get(name);
95
- if (st?.state === 'needs-auth') {
96
- skippedNeedsAuth.push(name);
97
- break;
98
- }
99
- if (attempt > retries) {
100
- failed.push({ name, error: msg });
101
- break;
102
- }
103
- await new Promise((r) => setTimeout(r, backoffMs * attempt));
104
- }
105
- }
106
- }
107
- return { connected, failed, skippedNeedsAuth };
108
- }
109
- /**
110
- * Disconnect from an MCP server
111
- */
112
- async disconnect(serverName) {
113
- const client = this.clients.get(serverName);
114
- if (!client) {
115
- return;
116
- }
117
- try {
118
- await client.close();
119
- }
120
- catch (error) {
121
- // Log but don't throw - we're disconnecting anyway
122
- console.error(`Error disconnecting from ${serverName}:`, error);
123
- }
124
- this.clients.delete(serverName);
125
- this.serverConfigs.delete(serverName);
126
- this.setState(serverName, { state: 'error', lastError: 'Disconnected' });
127
- // Remove cached capabilities
128
- for (const [key, tool] of this.tools.entries()) {
129
- if (tool.serverName === serverName) {
130
- this.tools.delete(key);
131
- }
132
- }
133
- for (const [key, resource] of this.resources.entries()) {
134
- if (resource.serverName === serverName) {
135
- this.resources.delete(key);
136
- }
137
- }
138
- for (const [key, prompt] of this.prompts.entries()) {
139
- if (prompt.serverName === serverName) {
140
- this.prompts.delete(key);
141
- }
142
- }
143
- }
144
- /**
145
- * Disconnect from all MCP servers
146
- */
147
- async disconnectAll() {
148
- const serverNames = Array.from(this.clients.keys());
149
- await Promise.all(serverNames.map(name => this.disconnect(name)));
150
- }
151
- /**
152
- * Discover and cache capabilities from a connected server
153
- */
154
- async discoverCapabilities(serverName) {
155
- const client = this.clients.get(serverName);
156
- if (!client) {
157
- throw new Error(`Not connected to server: ${serverName}`);
158
- }
159
- try {
160
- // Discover tools
161
- const toolsList = await client.listTools();
162
- if (toolsList.tools) {
163
- for (const tool of toolsList.tools) {
164
- const mcpTool = { ...tool, serverName };
165
- this.tools.set(`${serverName}::${tool.name}`, mcpTool);
166
- }
167
- }
168
- // Discover resources
169
- const resourcesList = await client.listResources();
170
- if (resourcesList.resources) {
171
- for (const resource of resourcesList.resources) {
172
- const mcpResource = { ...resource, serverName };
173
- this.resources.set(`${serverName}::${resource.uri}`, mcpResource);
174
- }
175
- }
176
- // Discover prompts
177
- const promptsList = await client.listPrompts();
178
- if (promptsList.prompts) {
179
- for (const prompt of promptsList.prompts) {
180
- const mcpPrompt = { ...prompt, serverName };
181
- this.prompts.set(`${serverName}::${prompt.name}`, mcpPrompt);
182
- }
183
- }
184
- }
185
- catch (error) {
186
- throw new Error(`Failed to discover capabilities for ${serverName}: ${error instanceof Error ? error.message : String(error)}`);
187
- }
188
- }
189
- /**
190
- * Get all available tools from all connected MCP servers
191
- */
192
- getAvailableTools() {
193
- return Array.from(this.tools.values());
194
- }
195
- /**
196
- * Get all available resources from all connected MCP servers
197
- */
198
- getAvailableResources() {
199
- return Array.from(this.resources.values());
200
- }
201
- /**
202
- * Get all available prompts from all connected MCP servers
203
- */
204
- getAvailablePrompts() {
205
- return Array.from(this.prompts.values());
206
- }
207
- /**
208
- * Execute a tool from an MCP server
209
- */
210
- async executeMCPTool(toolName, args) {
211
- // Parse server name from toolName (format: "serverName::actualToolName")
212
- const parts = toolName.split('::');
213
- if (parts.length !== 2) {
214
- throw new Error(`Invalid MCP tool name format: ${toolName}. Expected format: serverName::toolName`);
215
- }
216
- const [serverName, actualToolName] = parts;
217
- const client = this.clients.get(serverName);
218
- if (!client) {
219
- throw new Error(`Not connected to MCP server: ${serverName}`);
220
- }
221
- const tool = this.tools.get(toolName);
222
- if (!tool) {
223
- throw new Error(`Tool not found: ${toolName}`);
224
- }
225
- try {
226
- const result = await client.callTool({
227
- name: actualToolName,
228
- arguments: args,
229
- });
230
- return result;
231
- }
232
- catch (error) {
233
- throw new Error(`Failed to execute MCP tool ${toolName}: ${error instanceof Error ? error.message : String(error)}`);
234
- }
235
- }
236
- /**
237
- * Read a resource from an MCP server
238
- */
239
- async readResource(resourceUri) {
240
- // Parse server name from resourceUri (format: "serverName::actualUri")
241
- const parts = resourceUri.split('::');
242
- if (parts.length !== 2) {
243
- throw new Error(`Invalid MCP resource URI format: ${resourceUri}. Expected format: serverName::uri`);
244
- }
245
- const [serverName, actualUri] = parts;
246
- const client = this.clients.get(serverName);
247
- if (!client) {
248
- throw new Error(`Not connected to MCP server: ${serverName}`);
249
- }
250
- const resource = this.resources.get(resourceUri);
251
- if (!resource) {
252
- throw new Error(`Resource not found: ${resourceUri}`);
253
- }
254
- try {
255
- const result = await client.readResource({
256
- uri: actualUri,
257
- });
258
- return result;
259
- }
260
- catch (error) {
261
- throw new Error(`Failed to read MCP resource ${resourceUri}: ${error instanceof Error ? error.message : String(error)}`);
262
- }
263
- }
264
- /**
265
- * Get a prompt from an MCP server
266
- */
267
- async getPrompt(promptName, args) {
268
- // Parse server name from promptName (format: "serverName::actualPromptName")
269
- const parts = promptName.split('::');
270
- if (parts.length !== 2) {
271
- throw new Error(`Invalid MCP prompt name format: ${promptName}. Expected format: serverName::promptName`);
272
- }
273
- const [serverName, actualPromptName] = parts;
274
- const client = this.clients.get(serverName);
275
- if (!client) {
276
- throw new Error(`Not connected to MCP server: ${serverName}`);
277
- }
278
- const prompt = this.prompts.get(promptName);
279
- if (!prompt) {
280
- throw new Error(`Prompt not found: ${promptName}`);
281
- }
282
- try {
283
- const result = await client.getPrompt({
284
- name: actualPromptName,
285
- arguments: args,
286
- });
287
- return result;
288
- }
289
- catch (error) {
290
- throw new Error(`Failed to get MCP prompt ${promptName}: ${error instanceof Error ? error.message : String(error)}`);
291
- }
292
- }
293
- /**
294
- * Get list of connected servers
295
- */
296
- getConnectedServers() {
297
- return Array.from(this.clients.keys());
298
- }
299
- getServerStates() {
300
- return Array.from(this.serverStates.values()).sort((a, b) => a.name.localeCompare(b.name));
301
- }
302
- /**
303
- * Check if connected to a specific server
304
- */
305
- isConnected(serverName) {
306
- return this.clients.has(serverName);
307
- }
308
- /**
309
- * Get server configuration
310
- */
311
- getServerConfig(serverName) {
312
- return this.serverConfigs.get(serverName);
313
- }
314
- }
315
- //# sourceMappingURL=mcp-client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../../src/core/mcp-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAiCjF;;GAEG;AACH,MAAM,OAAO,gBAAgB;IACnB,OAAO,GAAwB,IAAI,GAAG,EAAE,CAAC;IACzC,aAAa,GAAiC,IAAI,GAAG,EAAE,CAAC;IACxD,KAAK,GAAyB,IAAI,GAAG,EAAE,CAAC;IACxC,SAAS,GAA6B,IAAI,GAAG,EAAE,CAAC;IAChD,OAAO,GAA2B,IAAI,GAAG,EAAE,CAAC;IAC5C,YAAY,GAAgC,IAAI,GAAG,EAAE,CAAC;IAEtD,QAAQ,CAAC,UAAkB,EAAE,KAA8B;QACjE,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAClD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE;YAChC,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,YAAY;YACrC,GAAG,OAAO;YACV,GAAG,KAAK;YACR,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,UAAkB,EAAE,YAA6B;QAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,KAAK,EAAE,KAAK,KAAK,YAAY,IAAI,KAAK,CAAC,cAAc,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;YAC/F,MAAM,IAAI,KAAK,CAAC,gDAAgD,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QACnH,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,oCAAoC,UAAU,EAAE,CAAC,CAAC;QACpE,CAAC;QAED,IAAI,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;YACzE,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;gBACxB,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,OAAO;aACjB,EAAE;gBACD,YAAY,EAAE,EAAE;aACjB,CAAC,CAAC;YAEH,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CAAC,iDAAiD,UAAU,EAAE,CAAC,CAAC;YACjF,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,oBAAoB,CAAC;gBACzC,OAAO,EAAE,YAAY,CAAC,OAAO;gBAC7B,IAAI,EAAE,YAAY,CAAC,IAAI,IAAI,EAAE;gBAC7B,GAAG,EAAE,YAAY,CAAC,GAAG;aACtB,CAAC,CAAC;YAEH,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAEhC,0BAA0B;YAC1B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YACrC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;YAEjD,kCAAkC;YAClC,MAAM,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;YAC5C,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,CAAC;QAErG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnE,+EAA+E;YAC/E,IAAI,6CAA6C,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5D,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;oBACxB,KAAK,EAAE,YAAY;oBACnB,SAAS,EAAE,GAAG;oBACd,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;iBAC5C,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;YAChE,CAAC;YACD,MAAM,IAAI,KAAK,CACb,mCAAmC,UAAU,KAC3C,GACF,EAAE,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CACd,OAAwC,EACxC,IAA+C;QAE/C,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,CAAC,CAAC;QACnC,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,GAAG,CAAC;QAEzC,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,MAAM,gBAAgB,GAAa,EAAE,CAAC;QACtC,MAAM,MAAM,GAA2C,EAAE,CAAC;QAE1D,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAClD,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,OAAO,IAAI,EAAE,CAAC;gBACZ,OAAO,EAAE,CAAC;gBACV,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;oBAC9B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACrB,MAAM;gBACR,CAAC;gBAAC,OAAO,GAAQ,EAAE,CAAC;oBAClB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBAC7D,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBACvC,IAAI,EAAE,EAAE,KAAK,KAAK,YAAY,EAAE,CAAC;wBAC/B,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBAC5B,MAAM;oBACR,CAAC;oBACD,IAAI,OAAO,GAAG,OAAO,EAAE,CAAC;wBACtB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;wBAClC,MAAM;oBACR,CAAC;oBACD,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC;gBAC/D,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,UAAkB;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,mDAAmD;YACnD,OAAO,CAAC,KAAK,CAAC,4BAA4B,UAAU,GAAG,EAAE,KAAK,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAChC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACtC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAC;QAEzE,6BAA6B;QAC7B,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;YAC/C,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;gBACnC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QACD,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;YACvD,IAAI,QAAQ,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;gBACvC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QACD,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YACnD,IAAI,MAAM,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;gBACrC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa;QACjB,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACpD,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,oBAAoB,CAAC,UAAkB;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,4BAA4B,UAAU,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,CAAC;YACH,iBAAiB;YACjB,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;YAC3C,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;gBACpB,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;oBACnC,MAAM,OAAO,GAAY,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,CAAC;oBACjD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,UAAU,KAAK,IAAI,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;gBACzD,CAAC;YACH,CAAC;YAED,qBAAqB;YACrB,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC;YACnD,IAAI,aAAa,CAAC,SAAS,EAAE,CAAC;gBAC5B,KAAK,MAAM,QAAQ,IAAI,aAAa,CAAC,SAAS,EAAE,CAAC;oBAC/C,MAAM,WAAW,GAAgB,EAAE,GAAG,QAAQ,EAAE,UAAU,EAAE,CAAC;oBAC7D,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,UAAU,KAAK,QAAQ,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;gBACpE,CAAC;YACH,CAAC;YAED,mBAAmB;YACnB,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;YAC/C,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;gBACxB,KAAK,MAAM,MAAM,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;oBACzC,MAAM,SAAS,GAAc,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,CAAC;oBACvD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,UAAU,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC;gBAC/D,CAAC;YACH,CAAC;QAEH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,uCAAuC,UAAU,KAC/C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CACvD,EAAE,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,qBAAqB;QACnB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,QAAgB,EAAE,IAA6B;QAClE,yEAAyE;QACzE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,iCAAiC,QAAQ,yCAAyC,CAAC,CAAC;QACtG,CAAC;QAED,MAAM,CAAC,UAAU,EAAE,cAAc,CAAC,GAAG,KAAK,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAE5C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,gCAAgC,UAAU,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;gBACnC,IAAI,EAAE,cAAc;gBACpB,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,8BAA8B,QAAQ,KACpC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CACvD,EAAE,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,WAAmB;QACpC,uEAAuE;QACvE,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,oCAAoC,WAAW,oCAAoC,CAAC,CAAC;QACvG,CAAC;QAED,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAE5C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,gCAAgC,UAAU,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,uBAAuB,WAAW,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC;gBACvC,GAAG,EAAE,SAAS;aACf,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,+BAA+B,WAAW,KACxC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CACvD,EAAE,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,UAAkB,EAAE,IAA6B;QAC/D,6EAA6E;QAC7E,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,mCAAmC,UAAU,2CAA2C,CAAC,CAAC;QAC5G,CAAC;QAED,MAAM,CAAC,UAAU,EAAE,gBAAgB,CAAC,GAAG,KAAK,CAAC;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAE5C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,gCAAgC,UAAU,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,qBAAqB,UAAU,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC;gBACpC,IAAI,EAAE,gBAAgB;gBACtB,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,4BAA4B,UAAU,KACpC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CACvD,EAAE,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,eAAe;QACb,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7F,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,UAAkB;QAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,UAAkB;QAChC,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC;CACF"}
@@ -1,15 +0,0 @@
1
- export interface PromotedMemory {
2
- key: string;
3
- value: string;
4
- promotedAt: string;
5
- source: 'session' | 'manual' | 'auto';
6
- }
7
- export declare class MemoryPromotions {
8
- private readonly workingDir;
9
- private readonly filePath;
10
- constructor(workingDir?: string);
11
- promote(key: string, value: string, source?: PromotedMemory['source']): Promise<void>;
12
- list(): Promise<PromotedMemory[]>;
13
- private save;
14
- }
15
- //# sourceMappingURL=memory-promotions.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory-promotions.d.ts","sourceRoot":"","sources":["../../src/core/memory-promotions.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;CACvC;AAED,qBAAa,gBAAgB;IAGf,OAAO,CAAC,QAAQ,CAAC,UAAU;IAFvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEL,UAAU,GAAE,MAAsB;IAIzD,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,cAAc,CAAC,QAAQ,CAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAchG,IAAI,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YASzB,IAAI;CAInB"}
@@ -1,38 +0,0 @@
1
- import * as fs from 'fs/promises';
2
- import * as path from 'path';
3
- export class MemoryPromotions {
4
- workingDir;
5
- filePath;
6
- constructor(workingDir = process.cwd()) {
7
- this.workingDir = workingDir;
8
- this.filePath = path.join(workingDir, '.xibecode', 'memory-promotions.json');
9
- }
10
- async promote(key, value, source = 'session') {
11
- const entries = await this.list();
12
- const existing = entries.find((entry) => entry.key === key);
13
- const now = new Date().toISOString();
14
- if (existing) {
15
- existing.value = value;
16
- existing.source = source;
17
- existing.promotedAt = now;
18
- }
19
- else {
20
- entries.push({ key, value, source, promotedAt: now });
21
- }
22
- await this.save(entries);
23
- }
24
- async list() {
25
- try {
26
- const raw = await fs.readFile(this.filePath, 'utf8');
27
- return JSON.parse(raw);
28
- }
29
- catch {
30
- return [];
31
- }
32
- }
33
- async save(entries) {
34
- await fs.mkdir(path.dirname(this.filePath), { recursive: true });
35
- await fs.writeFile(this.filePath, JSON.stringify(entries, null, 2), 'utf8');
36
- }
37
- }
38
- //# sourceMappingURL=memory-promotions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory-promotions.js","sourceRoot":"","sources":["../../src/core/memory-promotions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAS7B,MAAM,OAAO,gBAAgB;IAGE;IAFZ,QAAQ,CAAS;IAElC,YAA6B,aAAqB,OAAO,CAAC,GAAG,EAAE;QAAlC,eAAU,GAAV,UAAU,CAAwB;QAC7D,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,wBAAwB,CAAC,CAAC;IAC/E,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,KAAa,EAAE,SAAmC,SAAS;QACpF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QAC5D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;YACvB,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC;YACzB,QAAQ,CAAC,UAAU,GAAG,GAAG,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACrD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAqB,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,IAAI,CAAC,OAAyB;QAC1C,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACjE,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC9E,CAAC;CACF"}
@@ -1,32 +0,0 @@
1
- export interface MemoryItem {
2
- id: string;
3
- timestamp: number;
4
- trigger: string;
5
- action: string;
6
- outcome: string;
7
- tags: string[];
8
- embedding?: number[];
9
- }
10
- export interface MemoryStore {
11
- items: MemoryItem[];
12
- lastUpdated: number;
13
- }
14
- export declare class NeuralMemory {
15
- private workingDir;
16
- private memoryFile;
17
- private memory;
18
- private initialized;
19
- private promotions;
20
- constructor(workingDir?: string);
21
- init(): Promise<void>;
22
- addMemory(trigger: string, action: string, outcome: string, tags?: string[]): Promise<void>;
23
- /**
24
- * Retrieve relevant memories based on a query string (context or error message).
25
- * Currently uses keyword matching. Future: Vector search.
26
- */
27
- retrieve(query: string, limit?: number, minScore?: number): Promise<MemoryItem[]>;
28
- getAll(): Promise<MemoryItem[]>;
29
- private persist;
30
- promoteMemory(key: string, value: string): Promise<void>;
31
- }
32
- //# sourceMappingURL=memory.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/core/memory.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,UAAU;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IACxB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,YAAY;IAMT,OAAO,CAAC,UAAU;IAL9B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAA8C;IAC5D,OAAO,CAAC,WAAW,CAAkB;IACvC,OAAO,CAAC,UAAU,CAAmB;gBAEf,UAAU,GAAE,MAAsB;IAMhD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAsBrB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBrG;;;OAGG;IACG,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,EAAE,QAAQ,GAAE,MAAU,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAwDvF,MAAM,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YAKvB,OAAO;IAQf,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGjE"}
@@ -1,121 +0,0 @@
1
- import * as fs from 'fs/promises';
2
- import { existsSync } from 'fs';
3
- import * as path from 'path';
4
- import { createHash } from 'crypto';
5
- import { MemoryPromotions } from './memory-promotions.js';
6
- export class NeuralMemory {
7
- workingDir;
8
- memoryFile;
9
- memory = { items: [], lastUpdated: 0 };
10
- initialized = false;
11
- promotions;
12
- constructor(workingDir = process.cwd()) {
13
- this.workingDir = workingDir;
14
- const xibeDir = path.join(workingDir, '.xibecode');
15
- this.memoryFile = path.join(xibeDir, 'memory.json');
16
- this.promotions = new MemoryPromotions(workingDir);
17
- }
18
- async init() {
19
- if (this.initialized)
20
- return;
21
- try {
22
- const xibeDir = path.dirname(this.memoryFile);
23
- if (!existsSync(xibeDir)) {
24
- await fs.mkdir(xibeDir, { recursive: true });
25
- }
26
- if (existsSync(this.memoryFile)) {
27
- const content = await fs.readFile(this.memoryFile, 'utf-8');
28
- this.memory = JSON.parse(content);
29
- }
30
- this.initialized = true;
31
- }
32
- catch (error) {
33
- console.warn('Failed to initialize memory:', error);
34
- // Start with empty memory on failure
35
- this.memory = { items: [], lastUpdated: 0 };
36
- this.initialized = true;
37
- }
38
- }
39
- async addMemory(trigger, action, outcome, tags = []) {
40
- await this.init();
41
- const id = createHash('md5').update(`${trigger}:${action}:${Date.now()}`).digest('hex');
42
- const item = {
43
- id,
44
- timestamp: Date.now(),
45
- trigger,
46
- action,
47
- outcome,
48
- tags
49
- };
50
- this.memory.items.push(item);
51
- this.memory.lastUpdated = Date.now();
52
- await this.persist();
53
- }
54
- /**
55
- * Retrieve relevant memories based on a query string (context or error message).
56
- * Currently uses keyword matching. Future: Vector search.
57
- */
58
- async retrieve(query, limit = 5, minScore = 1) {
59
- await this.init();
60
- const queryLower = query.toLowerCase();
61
- const keywords = queryLower.split(/\s+/).filter(w => w.length > 3);
62
- const scored = this.memory.items.map(item => {
63
- let score = 0;
64
- const content = `${item.trigger} ${item.outcome} ${item.tags.join(' ')}`.toLowerCase();
65
- // Exact phrase match (high weight)
66
- if (content.includes(queryLower))
67
- score += 10;
68
- // Keyword match
69
- for (const word of keywords) {
70
- if (content.includes(word))
71
- score += 1;
72
- }
73
- // Recency boost (decay over 30 days)
74
- const daysOld = (Date.now() - item.timestamp) / (1000 * 60 * 60 * 24);
75
- const recencyScore = Math.max(0, 1 - daysOld / 30);
76
- score += recencyScore * 2;
77
- return { item, score };
78
- });
79
- // Filter zero scores and sort
80
- const results = scored
81
- .filter(r => r.score >= minScore)
82
- .sort((a, b) => b.score - a.score)
83
- .slice(0, limit)
84
- .map(r => r.item);
85
- // Include promoted durable memories as high-priority context hints.
86
- const promoted = await this.promotions.list();
87
- const promotedMatches = promoted
88
- .filter(entry => {
89
- const content = `${entry.key} ${entry.value}`.toLowerCase();
90
- return keywords.some((word) => content.includes(word)) || content.includes(queryLower);
91
- })
92
- .slice(0, Math.max(1, Math.min(3, limit)))
93
- .map((entry) => ({
94
- id: `promoted-${entry.key}`,
95
- timestamp: Date.parse(entry.promotedAt),
96
- trigger: entry.key,
97
- action: 'promoted_memory',
98
- outcome: entry.value,
99
- tags: ['promoted'],
100
- }));
101
- const merged = [...promotedMatches, ...results]
102
- .slice(0, limit);
103
- return merged;
104
- }
105
- async getAll() {
106
- await this.init();
107
- return this.memory.items;
108
- }
109
- async persist() {
110
- try {
111
- await fs.writeFile(this.memoryFile, JSON.stringify(this.memory, null, 2), 'utf-8');
112
- }
113
- catch (error) {
114
- console.error('Failed to save memory:', error);
115
- }
116
- }
117
- async promoteMemory(key, value) {
118
- await this.promotions.promote(key, value, 'manual');
119
- }
120
- }
121
- //# sourceMappingURL=memory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/core/memory.ts"],"names":[],"mappings":"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"}