thatgfsj-code 3.0.4 → 3.0.7

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 (205) hide show
  1. package/README.md +64 -21
  2. package/dist/app/index.d.ts +93 -22
  3. package/dist/app/index.d.ts.map +1 -1
  4. package/dist/app/index.js +232 -40
  5. package/dist/app/index.js.map +1 -1
  6. package/dist/cmd/index.d.ts +12 -20
  7. package/dist/cmd/index.d.ts.map +1 -1
  8. package/dist/cmd/index.js +192 -146
  9. package/dist/cmd/index.js.map +1 -1
  10. package/dist/config/index.d.ts +4 -0
  11. package/dist/config/index.d.ts.map +1 -1
  12. package/dist/config/index.js +5 -0
  13. package/dist/config/index.js.map +1 -1
  14. package/dist/config/types.d.ts +5 -0
  15. package/dist/config/types.d.ts.map +1 -1
  16. package/dist/llm/anthropic.d.ts +1 -1
  17. package/dist/llm/anthropic.d.ts.map +1 -1
  18. package/dist/llm/anthropic.js +116 -84
  19. package/dist/llm/anthropic.js.map +1 -1
  20. package/dist/llm/gemini.d.ts +27 -3
  21. package/dist/llm/gemini.d.ts.map +1 -1
  22. package/dist/llm/gemini.js +196 -73
  23. package/dist/llm/gemini.js.map +1 -1
  24. package/dist/llm/index.d.ts +20 -1
  25. package/dist/llm/index.d.ts.map +1 -1
  26. package/dist/llm/index.js +66 -6
  27. package/dist/llm/index.js.map +1 -1
  28. package/dist/llm/openai.d.ts +5 -1
  29. package/dist/llm/openai.d.ts.map +1 -1
  30. package/dist/llm/openai.js +126 -66
  31. package/dist/llm/openai.js.map +1 -1
  32. package/dist/mcp/client.d.ts +84 -34
  33. package/dist/mcp/client.d.ts.map +1 -1
  34. package/dist/mcp/client.js +291 -126
  35. package/dist/mcp/client.js.map +1 -1
  36. package/dist/session/compactor.d.ts +27 -7
  37. package/dist/session/compactor.d.ts.map +1 -1
  38. package/dist/session/compactor.js +78 -23
  39. package/dist/session/compactor.js.map +1 -1
  40. package/dist/session/index.d.ts +96 -33
  41. package/dist/session/index.d.ts.map +1 -1
  42. package/dist/session/index.js +278 -60
  43. package/dist/session/index.js.map +1 -1
  44. package/dist/tools/file.d.ts +10 -2
  45. package/dist/tools/file.d.ts.map +1 -1
  46. package/dist/tools/file.js +54 -5
  47. package/dist/tools/file.js.map +1 -1
  48. package/dist/tools/git.d.ts +16 -2
  49. package/dist/tools/git.d.ts.map +1 -1
  50. package/dist/tools/git.js +61 -18
  51. package/dist/tools/git.js.map +1 -1
  52. package/dist/tools/nwt.d.ts.map +1 -1
  53. package/dist/tools/nwt.js +8 -1
  54. package/dist/tools/nwt.js.map +1 -1
  55. package/dist/tools/search.d.ts +8 -1
  56. package/dist/tools/search.d.ts.map +1 -1
  57. package/dist/tools/search.js +105 -34
  58. package/dist/tools/search.js.map +1 -1
  59. package/dist/tools/shell.d.ts +0 -4
  60. package/dist/tools/shell.d.ts.map +1 -1
  61. package/dist/tools/shell.js +11 -26
  62. package/dist/tools/shell.js.map +1 -1
  63. package/dist/tools/types.d.ts +7 -0
  64. package/dist/tools/types.d.ts.map +1 -1
  65. package/dist/tools/types.js.map +1 -1
  66. package/dist/tui/app.d.ts.map +1 -1
  67. package/dist/tui/app.js +90 -18
  68. package/dist/tui/app.js.map +1 -1
  69. package/dist/tui/components/ChatMessage.d.ts.map +1 -1
  70. package/dist/tui/components/ChatMessage.js +9 -2
  71. package/dist/tui/components/ChatMessage.js.map +1 -1
  72. package/dist/tui/components/ConfirmPrompt.d.ts +21 -0
  73. package/dist/tui/components/ConfirmPrompt.d.ts.map +1 -0
  74. package/dist/tui/components/ConfirmPrompt.js +45 -0
  75. package/dist/tui/components/ConfirmPrompt.js.map +1 -0
  76. package/dist/tui/components/Header.d.ts +10 -5
  77. package/dist/tui/components/Header.d.ts.map +1 -1
  78. package/dist/tui/components/Header.js +13 -5
  79. package/dist/tui/components/Header.js.map +1 -1
  80. package/dist/tui/components/StatusBar.d.ts +7 -0
  81. package/dist/tui/components/StatusBar.d.ts.map +1 -1
  82. package/dist/tui/components/StatusBar.js +8 -3
  83. package/dist/tui/components/StatusBar.js.map +1 -1
  84. package/dist/tui/components/Thinking.d.ts +5 -0
  85. package/dist/tui/components/Thinking.d.ts.map +1 -1
  86. package/dist/tui/components/Thinking.js +24 -2
  87. package/dist/tui/components/Thinking.js.map +1 -1
  88. package/dist/tui/components/ToolCall.d.ts +6 -1
  89. package/dist/tui/components/ToolCall.d.ts.map +1 -1
  90. package/dist/tui/components/ToolCall.js +50 -22
  91. package/dist/tui/components/ToolCall.js.map +1 -1
  92. package/dist/tui/components/UserInput.d.ts +5 -0
  93. package/dist/tui/components/UserInput.d.ts.map +1 -1
  94. package/dist/tui/components/UserInput.js +9 -13
  95. package/dist/tui/components/UserInput.js.map +1 -1
  96. package/dist/tui/hooks/useChat.d.ts +1 -0
  97. package/dist/tui/hooks/useChat.d.ts.map +1 -1
  98. package/dist/tui/hooks/useChat.js +36 -16
  99. package/dist/tui/hooks/useChat.js.map +1 -1
  100. package/dist/tui/hooks/useCommands.d.ts +7 -1
  101. package/dist/tui/hooks/useCommands.d.ts.map +1 -1
  102. package/dist/tui/hooks/useCommands.js +77 -41
  103. package/dist/tui/hooks/useCommands.js.map +1 -1
  104. package/dist/tui/theme.d.ts +34 -0
  105. package/dist/tui/theme.d.ts.map +1 -0
  106. package/dist/tui/theme.js +34 -0
  107. package/dist/tui/theme.js.map +1 -0
  108. package/dist/tui/welcome.d.ts.map +1 -1
  109. package/dist/tui/welcome.js +9 -7
  110. package/dist/tui/welcome.js.map +1 -1
  111. package/dist/types.d.ts +16 -1
  112. package/dist/types.d.ts.map +1 -1
  113. package/dist/utils/diff.d.ts +5 -0
  114. package/dist/utils/diff.d.ts.map +1 -1
  115. package/dist/utils/diff.js +15 -0
  116. package/dist/utils/diff.js.map +1 -1
  117. package/dist/version.d.ts +12 -0
  118. package/dist/version.d.ts.map +1 -0
  119. package/dist/version.js +29 -0
  120. package/dist/version.js.map +1 -0
  121. package/package.json +19 -7
  122. package/CHANGELOG.md +0 -192
  123. package/DEVELOPMENT.md +0 -286
  124. package/ROADMAP.md +0 -91
  125. package/docs/API_KEY_GUIDE.md +0 -236
  126. package/docs/FAQ.md +0 -182
  127. package/install.bat +0 -63
  128. package/install.ps1 +0 -238
  129. package/install.sh +0 -113
  130. package/src/app/index.ts +0 -197
  131. package/src/cache/fingerprint.ts +0 -101
  132. package/src/cache/index.ts +0 -21
  133. package/src/cache/smartModel.ts +0 -133
  134. package/src/cache/stats.ts +0 -199
  135. package/src/cache/volatile.ts +0 -47
  136. package/src/cmd/index.tsx +0 -288
  137. package/src/config/index.ts +0 -156
  138. package/src/config/providers.ts +0 -234
  139. package/src/config/types.ts +0 -71
  140. package/src/hooks/index.ts +0 -111
  141. package/src/llm/anthropic.ts +0 -413
  142. package/src/llm/gemini.ts +0 -169
  143. package/src/llm/index.ts +0 -303
  144. package/src/llm/openai.ts +0 -243
  145. package/src/llm/provider.ts +0 -71
  146. package/src/mcp/client.ts +0 -330
  147. package/src/prompts/index.ts +0 -260
  148. package/src/session/compactor.ts +0 -103
  149. package/src/session/index.ts +0 -181
  150. package/src/session/message.ts +0 -42
  151. package/src/skills/brainstorming.ts +0 -43
  152. package/src/skills/code-review.ts +0 -45
  153. package/src/skills/executing-plans.ts +0 -27
  154. package/src/skills/frontend-design.ts +0 -35
  155. package/src/skills/git-workflow.ts +0 -36
  156. package/src/skills/improve-architecture.ts +0 -38
  157. package/src/skills/index.ts +0 -136
  158. package/src/skills/neuroweave.ts +0 -47
  159. package/src/skills/playwright.ts +0 -72
  160. package/src/skills/prototype.ts +0 -30
  161. package/src/skills/subagent.ts +0 -28
  162. package/src/skills/supabase.ts +0 -44
  163. package/src/skills/systematic-debugging.ts +0 -44
  164. package/src/skills/tdd.ts +0 -39
  165. package/src/skills/triage.ts +0 -35
  166. package/src/skills/verification.ts +0 -31
  167. package/src/skills/writing-plans.ts +0 -42
  168. package/src/tools/file.ts +0 -143
  169. package/src/tools/git.ts +0 -132
  170. package/src/tools/index.ts +0 -111
  171. package/src/tools/nwt.ts +0 -598
  172. package/src/tools/search.ts +0 -263
  173. package/src/tools/shell.ts +0 -136
  174. package/src/tools/types.ts +0 -122
  175. package/src/tui/app.tsx +0 -159
  176. package/src/tui/components/ChatList.tsx +0 -41
  177. package/src/tui/components/ChatMessage.tsx +0 -54
  178. package/src/tui/components/Header.tsx +0 -66
  179. package/src/tui/components/InitWizard.tsx +0 -247
  180. package/src/tui/components/Markdown.tsx +0 -35
  181. package/src/tui/components/ModelSelector.tsx +0 -107
  182. package/src/tui/components/StatusBar.tsx +0 -30
  183. package/src/tui/components/Thinking.tsx +0 -17
  184. package/src/tui/components/ToolCall.tsx +0 -102
  185. package/src/tui/components/UserInput.tsx +0 -151
  186. package/src/tui/hooks/useChat.ts +0 -287
  187. package/src/tui/hooks/useCommands.ts +0 -271
  188. package/src/tui/index.ts +0 -6
  189. package/src/tui/welcome.ts +0 -177
  190. package/src/types.ts +0 -104
  191. package/src/utils/diff.ts +0 -71
  192. package/src/utils/project.ts +0 -99
  193. package/src/utils/stableStringify.ts +0 -47
  194. package/src/utils/thinking.ts +0 -119
  195. package/tests/cache/fingerprint.test.ts +0 -75
  196. package/tests/cache/providerCatalog.test.ts +0 -31
  197. package/tests/cache/smartModel.test.ts +0 -100
  198. package/tests/cache/stableStringify.test.ts +0 -43
  199. package/tests/cache/stats.test.ts +0 -146
  200. package/tests/cache/volatile.test.ts +0 -75
  201. package/tests/smoke-pollution.mjs +0 -78
  202. package/tests/smoke-thinking.mjs +0 -110
  203. package/tests/smoke-tool-stream.mjs +0 -69
  204. package/tests/smoke-tool.mjs +0 -117
  205. package/tsconfig.json +0 -21
@@ -1,11 +1,40 @@
1
1
  /**
2
- * S07: MCP Client (Model Context Protocol)
3
- * Connect to MCP servers and expose their tools as agent tools
2
+ * MCP Client (Model Context Protocol)
3
+ * Connect to MCP servers over stdio and expose their tools as agent tools.
4
4
  *
5
- * MCP turns the agent from a closed system into an open platform.
6
- * Any server can expose tools via the MCP JSON-RPC 2.0 protocol.
5
+ * v3.0.5 this module was previously dead code and is now wired into
6
+ * App.create(). Fixes applied while wiring it up:
7
+ *
8
+ * 1. Connection check: `process.connected` is undefined for stdio-spawned
9
+ * child processes (it only exists for Node IPC channels), so every
10
+ * request was rejected with "MCP process not connected". We now track
11
+ * our own `connected` flag set after a successful initialize handshake.
12
+ * 2. Tool naming: `server:tool` contains a colon, which violates the
13
+ * function-name grammar of all three provider APIs
14
+ * (^[a-zA-Z0-9_-]{1,64}$) — the very first request carrying an MCP
15
+ * tool would 400. Names are now `mcp__<server>__<tool>`.
16
+ * 3. Timer hygiene: the 30s connect timeout and per-request timeouts are
17
+ * now stored, cleared when satisfied, and .unref()'d so they never
18
+ * keep the event loop alive after the CLI work is done.
19
+ * 4. Schema mapping: `type` is passed through; array/enum details are
20
+ * folded into the parameter description (our flat ToolParameter shape
21
+ * cannot express JSON-Schema recursively). Nested object parameters
22
+ * are declared as JSON-string params and decoded before dispatch.
7
23
  */
8
24
  import { spawn } from 'child_process';
25
+ const REQUEST_TIMEOUT_MS = 30000;
26
+ const CONNECT_TIMEOUT_MS = 30000;
27
+ /**
28
+ * Sanitize a server/tool name pair into a provider-safe tool name.
29
+ * All three provider APIs only allow [a-zA-Z0-9_-]; colons would 400.
30
+ */
31
+ export function mcpToolName(server, tool) {
32
+ const s = server.replace(/[^a-zA-Z0-9_-]/g, '_');
33
+ const t = tool.replace(/[^a-zA-Z0-9_-]/g, '_');
34
+ const name = `mcp__${s}__${t}`;
35
+ // OpenAI caps function names at 64 chars.
36
+ return name.length <= 64 ? name : name.slice(0, 64);
37
+ }
9
38
  // ==================== MCP Client ====================
10
39
  export class MCPClient {
11
40
  process = null;
@@ -14,75 +43,117 @@ export class MCPClient {
14
43
  pendingRequests = new Map();
15
44
  name;
16
45
  connected = false;
46
+ connectTimer;
47
+ /** Original tool name keyed by sanitized name, for dispatch back to the server. */
48
+ nameMap = new Map();
17
49
  constructor(name) {
18
50
  this.name = name;
19
51
  }
20
52
  /**
21
- * S07: Connect to an MCP server
53
+ * Connect to an MCP server over stdio.
22
54
  * @param command Command to run (e.g., 'npx', 'node')
23
- * @param args Arguments (e.g., ['-y', '@modelcontextprotocol/server-filesystem', '/path/to/dir'])
55
+ * @param args Arguments (e.g., ['-y', '@modelcontextprotocol/server-filesystem', '/path'])
56
+ * @param env Extra environment variables for the child process
24
57
  */
25
- async connect(command, args) {
58
+ async connect(command, args, env) {
26
59
  return new Promise((resolve, reject) => {
27
- this.process = spawn(command, args, {
28
- stdio: ['pipe', 'pipe', 'pipe']
29
- });
60
+ let settled = false;
61
+ const settle = (err) => {
62
+ if (settled)
63
+ return;
64
+ settled = true;
65
+ if (this.connectTimer) {
66
+ clearTimeout(this.connectTimer);
67
+ this.connectTimer = undefined;
68
+ }
69
+ if (err)
70
+ reject(err);
71
+ else
72
+ resolve();
73
+ };
74
+ this.connectTimer = setTimeout(() => {
75
+ settle(new Error(`MCP server "${this.name}" connection timeout (${CONNECT_TIMEOUT_MS / 1000}s)`));
76
+ }, CONNECT_TIMEOUT_MS);
77
+ this.connectTimer.unref?.();
78
+ let child;
79
+ try {
80
+ child = spawn(command, args, {
81
+ stdio: ['pipe', 'pipe', 'pipe'],
82
+ env: env ? { ...process.env, ...env } : process.env,
83
+ windowsHide: true,
84
+ });
85
+ }
86
+ catch (err) {
87
+ settle(new Error(`MCP server "${this.name}" failed to spawn ${command}: ${err.message}`));
88
+ return;
89
+ }
90
+ this.process = child;
30
91
  let buffer = '';
31
- this.process.stdout?.on('data', (data) => {
92
+ child.stdout?.on('data', (data) => {
32
93
  buffer += data.toString();
33
94
  const lines = buffer.split('\n');
34
95
  buffer = lines.pop() || '';
35
96
  for (const line of lines) {
36
- if (line.trim()) {
97
+ if (line.trim())
37
98
  this.handleMessage(line);
38
- }
39
99
  }
40
100
  });
41
- this.process.stderr?.on('data', (data) => {
42
- console.error(`[MCP ${this.name}] stderr:`, data.toString().trim());
101
+ child.stderr?.on('data', (data) => {
102
+ // MCP servers commonly log to stderr; surface it without crashing.
103
+ process.stderr.write(`[mcp:${this.name}] ${data.toString().trim()}\n`);
43
104
  });
44
- this.process.on('error', (err) => {
45
- reject(err);
105
+ child.on('error', (err) => {
106
+ this.connected = false;
107
+ settle(new Error(`MCP server "${this.name}" process error: ${err.message}`));
46
108
  });
47
- this.process.on('close', (code) => {
109
+ child.on('close', (code) => {
48
110
  this.connected = false;
49
- console.log(`[MCP ${this.name}] exited with code ${code}`);
111
+ // Reject every in-flight request so callers never hang on a dead server.
112
+ for (const [, pending] of this.pendingRequests) {
113
+ if (pending.timer)
114
+ clearTimeout(pending.timer);
115
+ pending.reject(new Error(`MCP server "${this.name}" exited (code ${code})`));
116
+ }
117
+ this.pendingRequests.clear();
50
118
  });
51
- // Initialize MCP connection
119
+ // Initialize handshake. Success gates `connected`, which gates every
120
+ // subsequent sendRequest.
52
121
  this.sendRequest('initialize', {
53
122
  protocolVersion: '2024-11-05',
54
123
  capabilities: { tools: {} },
55
- clientInfo: { name: 'thatgfsj-code', version: '1.0.0' }
56
- }).then(() => {
124
+ clientInfo: { name: 'thatgfsj-code', version: '3.0.5' },
125
+ }).then(async () => {
57
126
  this.connected = true;
58
- // Send initialized notification
59
127
  this.sendNotification('initialized', {});
60
- // List available tools
61
- return this.listTools();
62
- }).then(() => {
63
- resolve();
64
- }).catch(reject);
65
- // Timeout
66
- setTimeout(() => reject(new Error('MCP connection timeout')), 30000);
128
+ try {
129
+ await this.listTools();
130
+ }
131
+ catch {
132
+ // A server with zero tools is still a successful connection.
133
+ }
134
+ settle();
135
+ }).catch((err) => {
136
+ settle(err instanceof Error ? err : new Error(String(err)));
137
+ });
67
138
  });
68
139
  }
69
140
  /**
70
- * S07: Handle incoming JSON-RPC message
141
+ * Handle incoming JSON-RPC message
71
142
  */
72
143
  handleMessage(raw) {
73
144
  try {
74
145
  const msg = JSON.parse(raw);
75
- // Handle response
76
146
  const pending = this.pendingRequests.get(msg.id);
77
147
  if (pending) {
78
148
  this.pendingRequests.delete(msg.id);
149
+ if (pending.timer)
150
+ clearTimeout(pending.timer);
79
151
  if (msg.error) {
80
152
  pending.reject(new Error(msg.error.message));
81
153
  }
82
154
  else {
83
155
  pending.resolve(msg.result);
84
156
  }
85
- return;
86
157
  }
87
158
  }
88
159
  catch {
@@ -90,140 +161,243 @@ export class MCPClient {
90
161
  }
91
162
  }
92
163
  /**
93
- * S07: Send a JSON-RPC request
164
+ * Send a JSON-RPC request
94
165
  */
95
166
  sendRequest(method, params) {
96
167
  return new Promise((resolve, reject) => {
97
- if (!this.process?.connected) {
98
- reject(new Error('MCP process not connected'));
168
+ // v3.0.5: the old check read `this.process?.connected`, which is
169
+ // undefined for stdio spawns — every request failed. Gate on our own
170
+ // handshake flag instead (except for `initialize` itself, which runs
171
+ // before the flag is set).
172
+ if (!this.process || !this.process.stdin || (method !== 'initialize' && !this.connected)) {
173
+ reject(new Error(`MCP server "${this.name}" is not connected`));
99
174
  return;
100
175
  }
101
176
  const id = ++this.requestId;
102
- this.pendingRequests.set(id, { resolve, reject });
177
+ const timer = setTimeout(() => {
178
+ if (this.pendingRequests.has(id)) {
179
+ this.pendingRequests.delete(id);
180
+ reject(new Error(`MCP request timeout: ${method}`));
181
+ }
182
+ }, REQUEST_TIMEOUT_MS);
183
+ timer.unref?.();
184
+ this.pendingRequests.set(id, { resolve, reject, timer });
103
185
  const request = {
104
186
  jsonrpc: '2.0',
105
187
  id,
106
188
  method,
107
- params
189
+ params,
108
190
  };
109
- this.process.stdin?.write(JSON.stringify(request) + '\n');
110
- // Timeout
111
- setTimeout(() => {
112
- if (this.pendingRequests.has(id)) {
191
+ this.process.stdin.write(JSON.stringify(request) + '\n', (err) => {
192
+ if (err) {
113
193
  this.pendingRequests.delete(id);
114
- reject(new Error('MCP request timeout: ' + method));
194
+ if (timer)
195
+ clearTimeout(timer);
196
+ reject(new Error(`MCP write failed: ${err.message}`));
115
197
  }
116
- }, 30000);
198
+ });
117
199
  });
118
200
  }
119
201
  /**
120
- * S07: Send a notification (no response expected)
202
+ * Send a notification (no response expected)
121
203
  */
122
204
  sendNotification(method, params) {
123
- if (!this.process?.connected)
205
+ if (!this.process || !this.process.stdin || !this.connected)
124
206
  return;
125
- const notification = {
126
- jsonrpc: '2.0',
127
- method,
128
- params
129
- };
130
- this.process.stdin?.write(JSON.stringify(notification) + '\n');
207
+ this.process.stdin.write(JSON.stringify({ jsonrpc: '2.0', method, params }) + '\n');
131
208
  }
132
209
  /**
133
- * S07: Call an MCP tool
210
+ * Call an MCP tool (by its ORIGINAL server-side name)
134
211
  */
135
212
  async callTool(name, arguments_) {
136
213
  try {
137
214
  const result = await this.sendRequest('tools/call', {
138
215
  name,
139
- arguments: arguments_
216
+ arguments: arguments_,
140
217
  });
141
- return {
142
- success: true,
143
- output: typeof result === 'string' ? result : JSON.stringify(result)
144
- };
218
+ // MCP tool results are content blocks: [{type:'text', text:'...'}, ...]
219
+ let output;
220
+ if (typeof result === 'string') {
221
+ output = result;
222
+ }
223
+ else if (Array.isArray(result?.content)) {
224
+ output = result.content
225
+ .map((block) => (block.type === 'text' ? block.text : JSON.stringify(block)))
226
+ .join('\n');
227
+ }
228
+ else {
229
+ output = JSON.stringify(result ?? null);
230
+ }
231
+ return { success: result?.isError ? false : true, output };
145
232
  }
146
233
  catch (error) {
147
- return {
148
- success: false,
149
- error: error.message
150
- };
234
+ return { success: false, error: error.message };
151
235
  }
152
236
  }
153
237
  /**
154
- * S07: List tools from MCP server
238
+ * List tools from the server and refresh the local registry
155
239
  */
156
240
  async listTools() {
157
- try {
158
- const result = await this.sendRequest('tools/list', {});
159
- const tools = result.tools || [];
160
- this.tools.clear();
161
- for (const tool of tools) {
162
- this.tools.set(tool.name, tool);
163
- }
164
- console.log(`[MCP ${this.name}] Loaded ${tools.length} tools:`, [...this.tools.keys()].join(', '));
165
- }
166
- catch (error) {
167
- console.error(`[MCP ${this.name}] Failed to list tools:`, error.message);
241
+ const result = await this.sendRequest('tools/list', {});
242
+ const tools = result.tools || [];
243
+ this.tools.clear();
244
+ this.nameMap.clear();
245
+ for (const tool of tools) {
246
+ this.tools.set(tool.name, tool);
247
+ this.nameMap.set(mcpToolName(this.name, tool.name), tool.name);
168
248
  }
169
249
  }
170
250
  /**
171
- * S07: Get registered tools as agent Tool[]
251
+ * Get registered tools as agent Tool[] with provider-safe names.
252
+ *
253
+ * v3.0.5 fix: MCP tools route through the same permission gate as built-in
254
+ * tools — previously execute() dropped the ctx, so in 'ask' mode any MCP
255
+ * write/execute tool ran without confirmation (contradicting the
256
+ * fail-closed design promise).
172
257
  */
173
258
  getTools() {
174
- return [...this.tools.values()].map(mcpTool => ({
175
- name: this.name + ':' + mcpTool.name,
176
- description: mcpTool.description,
177
- parameters: Object.entries(mcpTool.inputSchema.properties || {}).map(([name, schema]) => ({
178
- name,
179
- type: schema.type || 'string',
180
- description: schema.description || '',
181
- required: (mcpTool.inputSchema.required || []).includes(name)
182
- })),
183
- execute: async (params) => {
184
- return this.callTool(mcpTool.name, params);
185
- }
186
- }));
259
+ return [...this.tools.values()].map(mcpTool => {
260
+ const exposedName = mcpToolName(this.name, mcpTool.name);
261
+ return {
262
+ name: exposedName,
263
+ description: mcpTool.description || `(MCP tool ${this.name}/${mcpTool.name})`,
264
+ parameters: this.mapParameters(mcpTool),
265
+ execute: async (params, ctx) => {
266
+ if (ctx?.confirmAction) {
267
+ const argPreview = Object.keys(params).length > 0
268
+ ? ` ${JSON.stringify(params).slice(0, 100)}`
269
+ : '';
270
+ const ok = await ctx.confirmAction(`调用 MCP 工具 ${exposedName}${argPreview}`);
271
+ if (!ok) {
272
+ return { success: false, error: 'MCP tool call cancelled by user' };
273
+ }
274
+ }
275
+ else {
276
+ return { success: false, error: 'MCP tool call requires confirmation, but no confirmation channel is available (headless? add --yolo)' };
277
+ }
278
+ // JSON-string params for nested object schemas are decoded here.
279
+ const decoded = this.decodeParams(mcpTool, params);
280
+ return this.callTool(mcpTool.name, decoded);
281
+ },
282
+ };
283
+ });
187
284
  }
188
285
  /**
189
- * S07: Get tool names
286
+ * Map a JSON Schema to our flat ToolParameter list. `type` passes through;
287
+ * arrays/enums are described in text; nested objects become JSON-string
288
+ * params (decoded in decodeParams).
190
289
  */
290
+ mapParameters(mcpTool) {
291
+ const required = new Set(mcpTool.inputSchema.required || []);
292
+ return Object.entries(mcpTool.inputSchema.properties || {}).map(([name, schema]) => {
293
+ let type = typeof schema.type === 'string' ? schema.type : 'string';
294
+ let description = schema.description || '';
295
+ if (type === 'array') {
296
+ type = 'string';
297
+ description += ' (JSON array string, e.g. ["a","b"])';
298
+ }
299
+ else if (type === 'object') {
300
+ type = 'string';
301
+ description += ' (JSON object string, e.g. {"key":"value"})';
302
+ }
303
+ if (Array.isArray(schema.enum) && schema.enum.length > 0) {
304
+ description += ` (one of: ${schema.enum.join(', ')})`;
305
+ }
306
+ if (schema.items?.type) {
307
+ description += ` [array items: ${schema.items.type}]`;
308
+ }
309
+ return { name, type, description: description.trim(), required: required.has(name) };
310
+ });
311
+ }
312
+ /** Decode JSON-string params back into real values for object/array schemas. */
313
+ decodeParams(mcpTool, params) {
314
+ const out = { ...params };
315
+ for (const [name, schema] of Object.entries(mcpTool.inputSchema.properties || {})) {
316
+ const t = schema?.type;
317
+ const v = out[name];
318
+ if ((t === 'object' || t === 'array') && typeof v === 'string') {
319
+ try {
320
+ out[name] = JSON.parse(v);
321
+ }
322
+ catch { /* keep raw string; server will report the error */ }
323
+ }
324
+ }
325
+ return out;
326
+ }
327
+ /** Original server-side tool name for an exposed (sanitized) name. */
328
+ resolveToolName(exposedName) {
329
+ return this.nameMap.get(exposedName);
330
+ }
191
331
  getToolNames() {
192
332
  return [...this.tools.keys()];
193
333
  }
194
- /**
195
- * S07: Check if connected
196
- */
197
334
  isConnected() {
198
335
  return this.connected;
199
336
  }
200
- /**
201
- * S07: Disconnect from MCP server
202
- */
337
+ getServerName() {
338
+ return this.name;
339
+ }
203
340
  disconnect() {
341
+ if (this.connectTimer) {
342
+ clearTimeout(this.connectTimer);
343
+ this.connectTimer = undefined;
344
+ }
345
+ for (const [, pending] of this.pendingRequests) {
346
+ if (pending.timer)
347
+ clearTimeout(pending.timer);
348
+ pending.reject(new Error(`MCP server "${this.name}" disconnected`));
349
+ }
350
+ this.pendingRequests.clear();
204
351
  if (this.process) {
205
- this.process.kill();
352
+ try {
353
+ this.process.kill();
354
+ }
355
+ catch { /* already dead */ }
206
356
  this.process = null;
207
357
  }
208
358
  this.connected = false;
209
359
  this.tools.clear();
210
- this.pendingRequests.clear();
360
+ this.nameMap.clear();
211
361
  }
212
362
  }
213
363
  // ==================== MCP Server Manager ====================
214
364
  export class MCPServerManager {
215
365
  clients = new Map();
216
366
  /**
217
- * S07: Add and connect an MCP server
367
+ * Load servers from a config object and connect to each. A failing server
368
+ * is reported but never blocks startup — one broken MCP server must not
369
+ * take the whole CLI down.
370
+ *
371
+ * @returns per-server connect results for the /mcp command and startup log
218
372
  */
219
- async addServer(name, command, args) {
220
- const client = new MCPClient(name);
221
- await client.connect(command, args);
222
- this.clients.set(name, client);
373
+ async connectFromConfig(config) {
374
+ const servers = config.mcpServers || config.servers || {};
375
+ const results = [];
376
+ for (const [name, def] of Object.entries(servers)) {
377
+ if (!def || typeof def.command !== 'string' || !def.command.trim()) {
378
+ results.push({ name, ok: false, error: 'missing "command"', tools: 0 });
379
+ continue;
380
+ }
381
+ const client = new MCPClient(name);
382
+ try {
383
+ await client.connect(def.command, def.args || [], def.env);
384
+ this.clients.set(name, client);
385
+ results.push({ name, ok: true, tools: client.getToolNames().length });
386
+ }
387
+ catch (err) {
388
+ // v3.0.5 fix: kill the spawned child on failed handshake — otherwise
389
+ // the server process lingers as an orphan (it never joins
390
+ // this.clients, so disconnectAll can not reap it).
391
+ try {
392
+ client.disconnect();
393
+ }
394
+ catch { /* best-effort */ }
395
+ results.push({ name, ok: false, error: err.message, tools: 0 });
396
+ }
397
+ }
398
+ return results;
223
399
  }
224
- /**
225
- * S07: Get all tools from all servers
226
- */
400
+ /** Get all tools from all connected servers, with provider-safe names. */
227
401
  getAllTools() {
228
402
  const allTools = [];
229
403
  for (const client of this.clients.values()) {
@@ -231,21 +405,6 @@ export class MCPServerManager {
231
405
  }
232
406
  return allTools;
233
407
  }
234
- /**
235
- * S07: Get tool names from all servers
236
- */
237
- getAllToolNames() {
238
- const names = [];
239
- for (const [serverName, client] of this.clients) {
240
- for (const toolName of client.getToolNames()) {
241
- names.push(serverName + ':' + toolName);
242
- }
243
- }
244
- return names;
245
- }
246
- /**
247
- * S07: Disconnect a server
248
- */
249
408
  removeServer(name) {
250
409
  const client = this.clients.get(name);
251
410
  if (client) {
@@ -253,15 +412,21 @@ export class MCPServerManager {
253
412
  this.clients.delete(name);
254
413
  }
255
414
  }
415
+ disconnectAll() {
416
+ for (const client of this.clients.values()) {
417
+ client.disconnect();
418
+ }
419
+ this.clients.clear();
420
+ }
256
421
  /**
257
- * S07: Get server status
422
+ * Status report for the /mcp command.
258
423
  */
259
424
  getStatus() {
260
- const status = {};
261
- for (const [name, client] of this.clients) {
262
- status[name] = client.isConnected();
263
- }
264
- return status;
425
+ return [...this.clients.values()].map(c => ({
426
+ name: c.getServerName(),
427
+ connected: c.isConnected(),
428
+ tools: c.getToolNames(),
429
+ }));
265
430
  }
266
431
  }
267
432
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/mcp/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/mcp/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,KAAK,EAAgB,MAAM,eAAe,CAAC;AA6BpD,MAAM,kBAAkB,GAAG,KAAK,CAAC;AACjC,MAAM,kBAAkB,GAAG,KAAK,CAAC;AAQjC;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,MAAc,EAAE,IAAY;IACtD,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;IACjD,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;IAC/B,0CAA0C;IAC1C,OAAO,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACtD,CAAC;AAED,uDAAuD;AAEvD,MAAM,OAAO,SAAS;IACZ,OAAO,GAAwB,IAAI,CAAC;IACpC,KAAK,GAAyB,IAAI,GAAG,EAAE,CAAC;IACxC,SAAS,GAAG,CAAC,CAAC;IACd,eAAe,GAIlB,IAAI,GAAG,EAAE,CAAC;IACP,IAAI,CAAS;IACb,SAAS,GAAG,KAAK,CAAC;IAClB,YAAY,CAAiC;IACrD,mFAAmF;IAC3E,OAAO,GAAwB,IAAI,GAAG,EAAE,CAAC;IAEjD,YAAY,IAAY;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,OAAO,CAAC,OAAe,EAAE,IAAc,EAAE,GAA4B;QACzE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE;gBAC7B,IAAI,OAAO;oBAAE,OAAO;gBACpB,OAAO,GAAG,IAAI,CAAC;gBACf,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;oBACtB,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBAChC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;gBAChC,CAAC;gBACD,IAAI,GAAG;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;oBAChB,OAAO,EAAE,CAAC;YACjB,CAAC,CAAC;YAEF,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;gBAClC,MAAM,CAAC,IAAI,KAAK,CAAC,eAAe,IAAI,CAAC,IAAI,yBAAyB,kBAAkB,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC;YACpG,CAAC,EAAE,kBAAkB,CAAC,CAAC;YACvB,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC;YAE5B,IAAI,KAAmB,CAAC;YACxB,IAAI,CAAC;gBACH,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;oBAC3B,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;oBAC/B,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG;oBACnD,WAAW,EAAE,IAAI;iBAClB,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,MAAM,CAAC,IAAI,KAAK,CAAC,eAAe,IAAI,CAAC,IAAI,qBAAqB,OAAO,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBAC1F,OAAO;YACT,CAAC;YACD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YAErB,IAAI,MAAM,GAAG,EAAE,CAAC;YAEhB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;gBACxC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACjC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;gBAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,IAAI,IAAI,CAAC,IAAI,EAAE;wBAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;gBACxC,mEAAmE;gBACnE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACzE,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACxB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;gBACvB,MAAM,CAAC,IAAI,KAAK,CAAC,eAAe,IAAI,CAAC,IAAI,oBAAoB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAC/E,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACzB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;gBACvB,yEAAyE;gBACzE,KAAK,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;oBAC/C,IAAI,OAAO,CAAC,KAAK;wBAAE,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAC/C,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,eAAe,IAAI,CAAC,IAAI,kBAAkB,IAAI,GAAG,CAAC,CAAC,CAAC;gBAC/E,CAAC;gBACD,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;YAC/B,CAAC,CAAC,CAAC;YAEH,qEAAqE;YACrE,0BAA0B;YAC1B,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;gBAC7B,eAAe,EAAE,YAAY;gBAC7B,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;gBAC3B,UAAU,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,EAAE;aACxD,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;gBACjB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBACtB,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;gBACzC,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;gBACzB,CAAC;gBAAC,MAAM,CAAC;oBACP,6DAA6D;gBAC/D,CAAC;gBACD,MAAM,EAAE,CAAC;YACX,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACf,MAAM,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC9D,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,GAAW;QAC/B,IAAI,CAAC;YACH,MAAM,GAAG,GAAuB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAEhD,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACjD,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACpC,IAAI,OAAO,CAAC,KAAK;oBAAE,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC/C,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;oBACd,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC/C,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,mBAAmB;QACrB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,MAAc,EAAE,MAAW;QAC7C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,iEAAiE;YACjE,qEAAqE;YACrE,qEAAqE;YACrE,2BAA2B;YAC3B,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,MAAM,KAAK,YAAY,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBACzF,MAAM,CAAC,IAAI,KAAK,CAAC,eAAe,IAAI,CAAC,IAAI,oBAAoB,CAAC,CAAC,CAAC;gBAChE,OAAO;YACT,CAAC;YAED,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC;YAC5B,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;oBACjC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBAChC,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,MAAM,EAAE,CAAC,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC,EAAE,kBAAkB,CAAC,CAAC;YACvB,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;YAEhB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YAEzD,MAAM,OAAO,GAAsB;gBACjC,OAAO,EAAE,KAAK;gBACd,EAAE;gBACF,MAAM;gBACN,MAAM;aACP,CAAC;YAEF,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC/D,IAAI,GAAG,EAAE,CAAC;oBACR,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBAChC,IAAI,KAAK;wBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;oBAC/B,MAAM,CAAC,IAAI,KAAK,CAAC,qBAAqB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBACxD,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,MAAc,EAAE,MAAW;QAClD,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QACpE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IACtF,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,IAAY,EAAE,UAA+B;QAC1D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;gBAClD,IAAI;gBACJ,SAAS,EAAE,UAAU;aACtB,CAAC,CAAC;YAEH,wEAAwE;YACxE,IAAI,MAAc,CAAC;YACnB,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,MAAM,GAAG,MAAM,CAAC;YAClB,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;gBAC1C,MAAM,GAAG,MAAM,CAAC,OAAO;qBACpB,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;qBACjF,IAAI,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;YAC1C,CAAC;YAED,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QAC7D,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QAClD,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,SAAS;QACrB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QACxD,MAAM,KAAK,GAAc,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;QAE5C,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAChC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACH,QAAQ;QACN,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;YAC5C,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YACzD,OAAO;gBACL,IAAI,EAAE,WAAW;gBACjB,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,aAAa,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,GAAG;gBAC7E,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;gBACvC,OAAO,EAAE,KAAK,EAAE,MAA2B,EAAE,GAAiB,EAAuB,EAAE;oBACrF,IAAI,GAAG,EAAE,aAAa,EAAE,CAAC;wBACvB,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC;4BAC/C,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;4BAC5C,CAAC,CAAC,EAAE,CAAC;wBACP,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,aAAa,WAAW,GAAG,UAAU,EAAE,CAAC,CAAC;wBAC5E,IAAI,CAAC,EAAE,EAAE,CAAC;4BACR,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC;wBACtE,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,sGAAsG,EAAE,CAAC;oBAC3I,CAAC;oBACD,iEAAiE;oBACjE,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;oBACnD,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAC9C,CAAC;aACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACK,aAAa,CAAC,OAAgB;QACpC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;QAC7D,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAgB,EAAE,EAAE;YAChG,IAAI,IAAI,GAAG,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;YACpE,IAAI,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;YAC3C,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;gBACrB,IAAI,GAAG,QAAQ,CAAC;gBAChB,WAAW,IAAI,sCAAsC,CAAC;YACxD,CAAC;iBAAM,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7B,IAAI,GAAG,QAAQ,CAAC;gBAChB,WAAW,IAAI,6CAA6C,CAAC;YAC/D,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzD,WAAW,IAAI,aAAa,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;YACxD,CAAC;YACD,IAAI,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;gBACvB,WAAW,IAAI,kBAAkB,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC;YACxD,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACvF,CAAC,CAAC,CAAC;IACL,CAAC;IAED,gFAAgF;IACxE,YAAY,CAAC,OAAgB,EAAE,MAA2B;QAChE,MAAM,GAAG,GAAwB,EAAE,GAAG,MAAM,EAAE,CAAC;QAC/C,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC;YAClF,MAAM,CAAC,GAAI,MAAc,EAAE,IAAI,CAAC;YAChC,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;YACpB,IAAI,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAC/D,IAAI,CAAC;oBAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,mDAAmD,CAAC,CAAC;YAClG,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,sEAAsE;IACtE,eAAe,CAAC,WAAmB;QACjC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACvC,CAAC;IAED,YAAY;QACV,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAChC,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,UAAU;QACR,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAChC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;QAChC,CAAC;QACD,KAAK,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAC/C,IAAI,OAAO,CAAC,KAAK;gBAAE,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC/C,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,eAAe,IAAI,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC;gBACH,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACtB,CAAC;YAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;YAC9B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;CACF;AAED,+DAA+D;AAE/D,MAAM,OAAO,gBAAgB;IACnB,OAAO,GAA2B,IAAI,GAAG,EAAE,CAAC;IAEpD;;;;;;OAMG;IACH,KAAK,CAAC,iBAAiB,CAAC,MAAqB;QAC3C,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;QAC1D,MAAM,OAAO,GAAwE,EAAE,CAAC;QAExF,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;gBACnE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;gBACxE,SAAS;YACX,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC3D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBAC/B,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;YACxE,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,qEAAqE;gBACrE,0DAA0D;gBAC1D,mDAAmD;gBACnD,IAAI,CAAC;oBAAC,MAAM,CAAC,UAAU,EAAE,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;gBACxD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,0EAA0E;IAC1E,WAAW;QACT,MAAM,QAAQ,GAAW,EAAE,CAAC;QAC5B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAC3C,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,YAAY,CAAC,IAAY;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,UAAU,EAAE,CAAC;YACpB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,aAAa;QACX,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAC3C,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1C,IAAI,EAAE,CAAC,CAAC,aAAa,EAAE;YACvB,SAAS,EAAE,CAAC,CAAC,WAAW,EAAE;YAC1B,KAAK,EAAE,CAAC,CAAC,YAAY,EAAE;SACxB,CAAC,CAAC,CAAC;IACN,CAAC;CACF"}