xibecode 1.0.3 → 1.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 (268) hide show
  1. package/dist/commands/chat.d.ts.map +1 -1
  2. package/dist/commands/chat.js +10 -7
  3. package/dist/commands/chat.js.map +1 -1
  4. package/dist/commands/diagnostics.js +1 -1
  5. package/dist/commands/diagnostics.js.map +1 -1
  6. package/dist/commands/mcp.js +1 -1
  7. package/dist/commands/mcp.js.map +1 -1
  8. package/dist/commands/resume.js +1 -1
  9. package/dist/commands/resume.js.map +1 -1
  10. package/dist/commands/run-pr.d.ts.map +1 -1
  11. package/dist/commands/run-pr.js +10 -9
  12. package/dist/commands/run-pr.js.map +1 -1
  13. package/dist/commands/run.d.ts.map +1 -1
  14. package/dist/commands/run.js +14 -13
  15. package/dist/commands/run.js.map +1 -1
  16. package/dist/commands/skills.d.ts.map +1 -1
  17. package/dist/commands/skills.js +3 -2
  18. package/dist/commands/skills.js.map +1 -1
  19. package/dist/components/AssistantMarkdown.js +1 -1
  20. package/dist/components/AssistantMarkdown.js.map +1 -1
  21. package/dist/ui/claude-style-chat.d.ts.map +1 -1
  22. package/dist/ui/claude-style-chat.js +12 -10
  23. package/dist/ui/claude-style-chat.js.map +1 -1
  24. package/dist/utils/built-in-skills-dir.d.ts +7 -0
  25. package/dist/utils/built-in-skills-dir.d.ts.map +1 -0
  26. package/dist/utils/built-in-skills-dir.js +11 -0
  27. package/dist/utils/built-in-skills-dir.js.map +1 -0
  28. package/dist/utils/config.d.ts +2 -119
  29. package/dist/utils/config.d.ts.map +1 -1
  30. package/dist/utils/config.js +3 -88
  31. package/dist/utils/config.js.map +1 -1
  32. package/package.json +11 -17
  33. package/dist/commands/punycode.d.ts +0 -5
  34. package/dist/commands/punycode.d.ts.map +0 -1
  35. package/dist/commands/punycode.js +0 -48
  36. package/dist/commands/punycode.js.map +0 -1
  37. package/dist/commands/tui.d.ts +0 -9
  38. package/dist/commands/tui.d.ts.map +0 -1
  39. package/dist/commands/tui.js +0 -83
  40. package/dist/commands/tui.js.map +0 -1
  41. package/dist/core/agent-tool-policies.d.ts +0 -5
  42. package/dist/core/agent-tool-policies.d.ts.map +0 -1
  43. package/dist/core/agent-tool-policies.js +0 -18
  44. package/dist/core/agent-tool-policies.js.map +0 -1
  45. package/dist/core/agent.d.ts +0 -181
  46. package/dist/core/agent.d.ts.map +0 -1
  47. package/dist/core/agent.js +0 -1777
  48. package/dist/core/agent.js.map +0 -1
  49. package/dist/core/background-agent.d.ts +0 -23
  50. package/dist/core/background-agent.d.ts.map +0 -1
  51. package/dist/core/background-agent.js +0 -175
  52. package/dist/core/background-agent.js.map +0 -1
  53. package/dist/core/code-graph.d.ts +0 -18
  54. package/dist/core/code-graph.d.ts.map +0 -1
  55. package/dist/core/code-graph.js +0 -105
  56. package/dist/core/code-graph.js.map +0 -1
  57. package/dist/core/conflict-solver.d.ts +0 -26
  58. package/dist/core/conflict-solver.d.ts.map +0 -1
  59. package/dist/core/conflict-solver.js +0 -108
  60. package/dist/core/conflict-solver.js.map +0 -1
  61. package/dist/core/context-compactor.d.ts +0 -10
  62. package/dist/core/context-compactor.d.ts.map +0 -1
  63. package/dist/core/context-compactor.js +0 -158
  64. package/dist/core/context-compactor.js.map +0 -1
  65. package/dist/core/context-pruner.d.ts +0 -19
  66. package/dist/core/context-pruner.d.ts.map +0 -1
  67. package/dist/core/context-pruner.js +0 -103
  68. package/dist/core/context-pruner.js.map +0 -1
  69. package/dist/core/context.d.ts +0 -82
  70. package/dist/core/context.d.ts.map +0 -1
  71. package/dist/core/context.js +0 -273
  72. package/dist/core/context.js.map +0 -1
  73. package/dist/core/conversation-recovery.d.ts +0 -9
  74. package/dist/core/conversation-recovery.d.ts.map +0 -1
  75. package/dist/core/conversation-recovery.js +0 -15
  76. package/dist/core/conversation-recovery.js.map +0 -1
  77. package/dist/core/debug-workflow.d.ts +0 -9
  78. package/dist/core/debug-workflow.d.ts.map +0 -1
  79. package/dist/core/debug-workflow.js +0 -19
  80. package/dist/core/debug-workflow.js.map +0 -1
  81. package/dist/core/docs-scraper.d.ts +0 -40
  82. package/dist/core/docs-scraper.d.ts.map +0 -1
  83. package/dist/core/docs-scraper.js +0 -386
  84. package/dist/core/docs-scraper.js.map +0 -1
  85. package/dist/core/editor.d.ts +0 -87
  86. package/dist/core/editor.d.ts.map +0 -1
  87. package/dist/core/editor.js +0 -377
  88. package/dist/core/editor.js.map +0 -1
  89. package/dist/core/export.d.ts +0 -11
  90. package/dist/core/export.d.ts.map +0 -1
  91. package/dist/core/export.js +0 -54
  92. package/dist/core/export.js.map +0 -1
  93. package/dist/core/history-manager.d.ts +0 -75
  94. package/dist/core/history-manager.d.ts.map +0 -1
  95. package/dist/core/history-manager.js +0 -146
  96. package/dist/core/history-manager.js.map +0 -1
  97. package/dist/core/marketplace-client.d.ts +0 -52
  98. package/dist/core/marketplace-client.d.ts.map +0 -1
  99. package/dist/core/marketplace-client.js +0 -71
  100. package/dist/core/marketplace-client.js.map +0 -1
  101. package/dist/core/mcp/mcp-config.d.ts +0 -10
  102. package/dist/core/mcp/mcp-config.d.ts.map +0 -1
  103. package/dist/core/mcp/mcp-config.js +0 -70
  104. package/dist/core/mcp/mcp-config.js.map +0 -1
  105. package/dist/core/mcp/mcp-policy.d.ts +0 -17
  106. package/dist/core/mcp/mcp-policy.d.ts.map +0 -1
  107. package/dist/core/mcp/mcp-policy.js +0 -56
  108. package/dist/core/mcp/mcp-policy.js.map +0 -1
  109. package/dist/core/mcp/oauth-flow.d.ts +0 -30
  110. package/dist/core/mcp/oauth-flow.d.ts.map +0 -1
  111. package/dist/core/mcp/oauth-flow.js +0 -230
  112. package/dist/core/mcp/oauth-flow.js.map +0 -1
  113. package/dist/core/mcp/oauth-store.d.ts +0 -13
  114. package/dist/core/mcp/oauth-store.d.ts.map +0 -1
  115. package/dist/core/mcp/oauth-store.js +0 -68
  116. package/dist/core/mcp/oauth-store.js.map +0 -1
  117. package/dist/core/mcp/resolve-mcp-servers.d.ts +0 -16
  118. package/dist/core/mcp/resolve-mcp-servers.d.ts.map +0 -1
  119. package/dist/core/mcp/resolve-mcp-servers.js +0 -83
  120. package/dist/core/mcp/resolve-mcp-servers.js.map +0 -1
  121. package/dist/core/mcp-client.d.ts +0 -99
  122. package/dist/core/mcp-client.d.ts.map +0 -1
  123. package/dist/core/mcp-client.js +0 -317
  124. package/dist/core/mcp-client.js.map +0 -1
  125. package/dist/core/memory-promotions.d.ts +0 -15
  126. package/dist/core/memory-promotions.d.ts.map +0 -1
  127. package/dist/core/memory-promotions.js +0 -38
  128. package/dist/core/memory-promotions.js.map +0 -1
  129. package/dist/core/memory.d.ts +0 -32
  130. package/dist/core/memory.d.ts.map +0 -1
  131. package/dist/core/memory.js +0 -121
  132. package/dist/core/memory.js.map +0 -1
  133. package/dist/core/modes.d.ts +0 -432
  134. package/dist/core/modes.d.ts.map +0 -1
  135. package/dist/core/modes.js +0 -1094
  136. package/dist/core/modes.js.map +0 -1
  137. package/dist/core/pattern-miner.d.ts +0 -43
  138. package/dist/core/pattern-miner.d.ts.map +0 -1
  139. package/dist/core/pattern-miner.js +0 -123
  140. package/dist/core/pattern-miner.js.map +0 -1
  141. package/dist/core/permission-store.d.ts +0 -15
  142. package/dist/core/permission-store.d.ts.map +0 -1
  143. package/dist/core/permission-store.js +0 -30
  144. package/dist/core/permission-store.js.map +0 -1
  145. package/dist/core/permissions.d.ts +0 -33
  146. package/dist/core/permissions.d.ts.map +0 -1
  147. package/dist/core/permissions.js +0 -141
  148. package/dist/core/permissions.js.map +0 -1
  149. package/dist/core/plan-artifacts.d.ts +0 -10
  150. package/dist/core/plan-artifacts.d.ts.map +0 -1
  151. package/dist/core/plan-artifacts.js +0 -60
  152. package/dist/core/plan-artifacts.js.map +0 -1
  153. package/dist/core/plan-session.d.ts +0 -25
  154. package/dist/core/plan-session.d.ts.map +0 -1
  155. package/dist/core/plan-session.js +0 -99
  156. package/dist/core/plan-session.js.map +0 -1
  157. package/dist/core/planMode.d.ts +0 -51
  158. package/dist/core/planMode.d.ts.map +0 -1
  159. package/dist/core/planMode.js +0 -245
  160. package/dist/core/planMode.js.map +0 -1
  161. package/dist/core/plugins.d.ts +0 -96
  162. package/dist/core/plugins.d.ts.map +0 -1
  163. package/dist/core/plugins.js +0 -204
  164. package/dist/core/plugins.js.map +0 -1
  165. package/dist/core/session-bridge.d.ts +0 -128
  166. package/dist/core/session-bridge.d.ts.map +0 -1
  167. package/dist/core/session-bridge.js +0 -328
  168. package/dist/core/session-bridge.js.map +0 -1
  169. package/dist/core/session-manager.d.ts +0 -80
  170. package/dist/core/session-manager.d.ts.map +0 -1
  171. package/dist/core/session-manager.js +0 -166
  172. package/dist/core/session-manager.js.map +0 -1
  173. package/dist/core/session-memory.d.ts +0 -45
  174. package/dist/core/session-memory.d.ts.map +0 -1
  175. package/dist/core/session-memory.js +0 -103
  176. package/dist/core/session-memory.js.map +0 -1
  177. package/dist/core/skill-selection.d.ts +0 -36
  178. package/dist/core/skill-selection.d.ts.map +0 -1
  179. package/dist/core/skill-selection.js +0 -172
  180. package/dist/core/skill-selection.js.map +0 -1
  181. package/dist/core/skills-sh-client.d.ts +0 -19
  182. package/dist/core/skills-sh-client.d.ts.map +0 -1
  183. package/dist/core/skills-sh-client.js +0 -75
  184. package/dist/core/skills-sh-client.js.map +0 -1
  185. package/dist/core/skills.d.ts +0 -97
  186. package/dist/core/skills.d.ts.map +0 -1
  187. package/dist/core/skills.js +0 -339
  188. package/dist/core/skills.js.map +0 -1
  189. package/dist/core/swarm.d.ts +0 -34
  190. package/dist/core/swarm.d.ts.map +0 -1
  191. package/dist/core/swarm.js +0 -111
  192. package/dist/core/swarm.js.map +0 -1
  193. package/dist/core/task-status.d.ts +0 -13
  194. package/dist/core/task-status.d.ts.map +0 -1
  195. package/dist/core/task-status.js +0 -17
  196. package/dist/core/task-status.js.map +0 -1
  197. package/dist/core/tool-orchestrator.d.ts +0 -30
  198. package/dist/core/tool-orchestrator.d.ts.map +0 -1
  199. package/dist/core/tool-orchestrator.js +0 -89
  200. package/dist/core/tool-orchestrator.js.map +0 -1
  201. package/dist/core/tools.d.ts +0 -462
  202. package/dist/core/tools.d.ts.map +0 -1
  203. package/dist/core/tools.js +0 -2916
  204. package/dist/core/tools.js.map +0 -1
  205. package/dist/core/transcript-cleanup.d.ts +0 -8
  206. package/dist/core/transcript-cleanup.d.ts.map +0 -1
  207. package/dist/core/transcript-cleanup.js +0 -52
  208. package/dist/core/transcript-cleanup.js.map +0 -1
  209. package/dist/core/visual-feedback.d.ts +0 -20
  210. package/dist/core/visual-feedback.d.ts.map +0 -1
  211. package/dist/core/visual-feedback.js +0 -117
  212. package/dist/core/visual-feedback.js.map +0 -1
  213. package/dist/tools/browser.d.ts +0 -120
  214. package/dist/tools/browser.d.ts.map +0 -1
  215. package/dist/tools/browser.js +0 -439
  216. package/dist/tools/browser.js.map +0 -1
  217. package/dist/tools/test-generator.d.ts +0 -157
  218. package/dist/tools/test-generator.d.ts.map +0 -1
  219. package/dist/tools/test-generator.js +0 -893
  220. package/dist/tools/test-generator.js.map +0 -1
  221. package/dist/tui/InkApp.d.ts +0 -21
  222. package/dist/tui/InkApp.d.ts.map +0 -1
  223. package/dist/tui/InkApp.js +0 -146
  224. package/dist/tui/InkApp.js.map +0 -1
  225. package/dist/tui/MarkdownMessage.d.ts +0 -16
  226. package/dist/tui/MarkdownMessage.d.ts.map +0 -1
  227. package/dist/tui/MarkdownMessage.js +0 -63
  228. package/dist/tui/MarkdownMessage.js.map +0 -1
  229. package/dist/tui/blessed-chat.d.ts +0 -9
  230. package/dist/tui/blessed-chat.d.ts.map +0 -1
  231. package/dist/tui/blessed-chat.js +0 -887
  232. package/dist/tui/blessed-chat.js.map +0 -1
  233. package/dist/tui/markdown-to-blessed.d.ts +0 -6
  234. package/dist/tui/markdown-to-blessed.d.ts.map +0 -1
  235. package/dist/tui/markdown-to-blessed.js +0 -26
  236. package/dist/tui/markdown-to-blessed.js.map +0 -1
  237. package/dist/ui/ink/App.d.ts +0 -25
  238. package/dist/ui/ink/App.d.ts.map +0 -1
  239. package/dist/ui/ink/App.js +0 -372
  240. package/dist/ui/ink/App.js.map +0 -1
  241. package/dist/utils/at-references.d.ts +0 -14
  242. package/dist/utils/at-references.d.ts.map +0 -1
  243. package/dist/utils/at-references.js +0 -47
  244. package/dist/utils/at-references.js.map +0 -1
  245. package/dist/utils/auto-memory.d.ts +0 -24
  246. package/dist/utils/auto-memory.d.ts.map +0 -1
  247. package/dist/utils/auto-memory.js +0 -153
  248. package/dist/utils/auto-memory.js.map +0 -1
  249. package/dist/utils/git.d.ts +0 -89
  250. package/dist/utils/git.d.ts.map +0 -1
  251. package/dist/utils/git.js +0 -444
  252. package/dist/utils/git.js.map +0 -1
  253. package/dist/utils/mcp-servers-file.d.ts +0 -46
  254. package/dist/utils/mcp-servers-file.d.ts.map +0 -1
  255. package/dist/utils/mcp-servers-file.js +0 -212
  256. package/dist/utils/mcp-servers-file.js.map +0 -1
  257. package/dist/utils/safety.d.ts +0 -60
  258. package/dist/utils/safety.d.ts.map +0 -1
  259. package/dist/utils/safety.js +0 -254
  260. package/dist/utils/safety.js.map +0 -1
  261. package/dist/utils/smithery.d.ts +0 -25
  262. package/dist/utils/smithery.d.ts.map +0 -1
  263. package/dist/utils/smithery.js +0 -50
  264. package/dist/utils/smithery.js.map +0 -1
  265. package/dist/utils/testRunner.d.ts +0 -44
  266. package/dist/utils/testRunner.d.ts.map +0 -1
  267. package/dist/utils/testRunner.js +0 -270
  268. package/dist/utils/testRunner.js.map +0 -1
@@ -1,212 +0,0 @@
1
- import * as fs from 'fs/promises';
2
- import * as path from 'path';
3
- import * as os from 'os';
4
- /**
5
- * Manages MCP servers configuration file
6
- */
7
- export class MCPServersFileManager {
8
- filePath;
9
- constructor() {
10
- const configDir = path.join(os.homedir(), '.xibecode');
11
- this.filePath = path.join(configDir, 'mcp-servers.json');
12
- }
13
- /**
14
- * Get the path to the MCP servers config file
15
- */
16
- getFilePath() {
17
- return this.filePath;
18
- }
19
- /**
20
- * Check if the file exists
21
- */
22
- async fileExists() {
23
- try {
24
- await fs.access(this.filePath);
25
- return true;
26
- }
27
- catch {
28
- return false;
29
- }
30
- }
31
- /**
32
- * Load MCP servers from file
33
- * Supports both new object-based format and legacy array-based format
34
- * Automatically migrates legacy format to new format
35
- */
36
- async loadMCPServers() {
37
- try {
38
- if (!(await this.fileExists())) {
39
- return {};
40
- }
41
- const content = await fs.readFile(this.filePath, 'utf-8');
42
- const data = JSON.parse(content);
43
- // Check if it's the new object-based format
44
- if (data.mcpServers && typeof data.mcpServers === 'object' && !Array.isArray(data.mcpServers)) {
45
- // New format - validate and return
46
- const validatedServers = {};
47
- for (const [serverName, serverConfig] of Object.entries(data.mcpServers)) {
48
- const config = serverConfig;
49
- if (!config.command) {
50
- throw new Error(`Invalid server config for "${serverName}": missing required field "command"`);
51
- }
52
- validatedServers[serverName] = {
53
- command: config.command,
54
- args: config.args,
55
- env: config.env,
56
- };
57
- }
58
- return validatedServers;
59
- }
60
- // Check if it's the legacy array-based format
61
- if (data.servers && Array.isArray(data.servers)) {
62
- // Legacy format - migrate to new format
63
- const legacyData = data;
64
- const migratedServers = {};
65
- for (const server of legacyData.servers) {
66
- if (!server.name || !server.command) {
67
- throw new Error(`Invalid server config in legacy format: missing required fields (name, command)`);
68
- }
69
- // Remove transport field and use name as key
70
- migratedServers[server.name] = {
71
- command: server.command,
72
- args: server.args,
73
- env: server.env,
74
- };
75
- }
76
- // Auto-migrate: save in new format
77
- console.log('Migrating MCP servers configuration to new format...');
78
- await this.saveMCPServers(migratedServers);
79
- return migratedServers;
80
- }
81
- throw new Error('Invalid file format: must contain "mcpServers" object or legacy "servers" array');
82
- }
83
- catch (error) {
84
- if (error.code === 'ENOENT') {
85
- return {};
86
- }
87
- throw new Error(`Failed to load MCP servers file: ${error.message}`);
88
- }
89
- }
90
- /**
91
- * Save MCP servers to file
92
- * Uses new object-based format
93
- */
94
- async saveMCPServers(servers) {
95
- try {
96
- const configDir = path.dirname(this.filePath);
97
- // Ensure directory exists
98
- await fs.mkdir(configDir, { recursive: true });
99
- const data = {
100
- mcpServers: servers,
101
- };
102
- await fs.writeFile(this.filePath, JSON.stringify(data, null, 2) + '\n', 'utf-8');
103
- }
104
- catch (error) {
105
- throw new Error(`Failed to save MCP servers file: ${error.message}`);
106
- }
107
- }
108
- /**
109
- * Create default config file with examples
110
- */
111
- async createDefaultFile() {
112
- const defaultServers = {
113
- 'filesystem': {
114
- command: 'mcp-server-filesystem',
115
- args: ['--root', '/path/to/files'],
116
- },
117
- 'github': {
118
- command: 'mcp-server-github',
119
- args: ['--token', 'YOUR_GITHUB_TOKEN'],
120
- },
121
- };
122
- await this.saveMCPServers(defaultServers);
123
- }
124
- /**
125
- * Validate the file format
126
- * Supports both new object-based and legacy array-based formats
127
- */
128
- async validateFile() {
129
- const errors = [];
130
- try {
131
- if (!(await this.fileExists())) {
132
- return { valid: false, errors: ['File does not exist'] };
133
- }
134
- const content = await fs.readFile(this.filePath, 'utf-8');
135
- let data;
136
- try {
137
- data = JSON.parse(content);
138
- }
139
- catch (error) {
140
- errors.push(`Invalid JSON: ${error.message}`);
141
- return { valid: false, errors };
142
- }
143
- // Check for new object-based format
144
- if (data.mcpServers) {
145
- if (typeof data.mcpServers !== 'object' || Array.isArray(data.mcpServers)) {
146
- errors.push('"mcpServers" must be an object (not an array)');
147
- }
148
- else {
149
- // Validate each server
150
- for (const [serverName, serverConfig] of Object.entries(data.mcpServers)) {
151
- const config = serverConfig;
152
- if (!config || typeof config !== 'object') {
153
- errors.push(`Server "${serverName}": configuration must be an object`);
154
- continue;
155
- }
156
- if (!config.command) {
157
- errors.push(`Server "${serverName}": missing "command" field`);
158
- }
159
- if (config.args && !Array.isArray(config.args)) {
160
- errors.push(`Server "${serverName}": "args" must be an array`);
161
- }
162
- if (config.env && typeof config.env !== 'object') {
163
- errors.push(`Server "${serverName}": "env" must be an object`);
164
- }
165
- }
166
- }
167
- }
168
- // Check for legacy array-based format
169
- else if (data.servers) {
170
- if (!Array.isArray(data.servers)) {
171
- errors.push('Legacy format: "servers" must be an array');
172
- }
173
- else {
174
- // Validate legacy format
175
- data.servers.forEach((server, index) => {
176
- if (!server.name) {
177
- errors.push(`Server ${index + 1}: missing "name"`);
178
- }
179
- if (!server.command) {
180
- errors.push(`Server ${index + 1}: missing "command"`);
181
- }
182
- if (server.transport && server.transport !== 'stdio') {
183
- errors.push(`Server ${index + 1}: invalid transport "${server.transport}" (only "stdio" supported)`);
184
- }
185
- });
186
- // Check for duplicate names
187
- const names = data.servers.map((s) => s.name).filter(Boolean);
188
- const duplicates = names.filter((name, index) => names.indexOf(name) !== index);
189
- if (duplicates.length > 0) {
190
- errors.push(`Duplicate server names: ${[...new Set(duplicates)].join(', ')}`);
191
- }
192
- // Suggest migration
193
- if (errors.length === 0) {
194
- errors.push('Note: Using legacy array-based format. Will auto-migrate to new object-based format on load.');
195
- }
196
- }
197
- }
198
- else {
199
- errors.push('Missing "mcpServers" field (or legacy "servers" field)');
200
- }
201
- return {
202
- valid: errors.length === 0 || (errors.length === 1 && errors[0].startsWith('Note:')),
203
- errors,
204
- };
205
- }
206
- catch (error) {
207
- errors.push(`Failed to read file: ${error.message}`);
208
- return { valid: false, errors };
209
- }
210
- }
211
- }
212
- //# sourceMappingURL=mcp-servers-file.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-servers-file.js","sourceRoot":"","sources":["../../src/utils/mcp-servers-file.ts"],"names":[],"mappings":"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"}
@@ -1,60 +0,0 @@
1
- /**
2
- * Safety utilities for classifying and managing risky operations
3
- */
4
- export type RiskLevel = 'low' | 'medium' | 'high';
5
- /**
6
- * Resolve a file path against a working directory and ensure it stays inside it (no path traversal).
7
- * Use for all user-provided paths before file operations.
8
- */
9
- export declare function sanitizePath(workingDir: string, filePath: string): {
10
- ok: true;
11
- path: string;
12
- } | {
13
- ok: false;
14
- message: string;
15
- };
16
- /**
17
- * Validate URL for fetch_url to reduce SSRF risk: only http/https, no localhost or private IPs by default.
18
- */
19
- export declare function sanitizeUrl(url: string, allowLocalhost?: boolean): {
20
- ok: true;
21
- url: string;
22
- } | {
23
- ok: false;
24
- message: string;
25
- };
26
- export interface RiskAssessment {
27
- level: RiskLevel;
28
- reasons: string[];
29
- warnings: string[];
30
- }
31
- export declare class SafetyChecker {
32
- /**
33
- * Assess the risk level of a tool operation
34
- */
35
- assessToolRisk(toolName: string, params: any): RiskAssessment;
36
- /**
37
- * Assess the risk level of a shell command
38
- */
39
- assessCommandRisk(command: string): RiskLevel;
40
- /**
41
- * Check if a command should be blocked entirely
42
- */
43
- isCommandBlocked(command: string): {
44
- blocked: boolean;
45
- reason?: string;
46
- };
47
- /**
48
- * Suggest safer alternatives for risky commands
49
- */
50
- suggestSaferAlternative(command: string): string | null;
51
- /**
52
- * Check if a file path is sensitive
53
- */
54
- isSensitivePath(filepath: string): boolean;
55
- /**
56
- * Validate dry-run compatibility for a tool
57
- */
58
- canDryRun(toolName: string): boolean;
59
- }
60
- //# sourceMappingURL=safety.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"safety.d.ts","sourceRoot":"","sources":["../../src/utils/safety.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAElD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAQ9H;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,cAAc,UAAQ,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAiB3H;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,qBAAa,aAAa;IACxB;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,cAAc;IAqG7D;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS;IAkD7C;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;IAqBxE;;OAEG;IACH,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IA0BvD;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAgB1C;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;CAgBrC"}
@@ -1,254 +0,0 @@
1
- /**
2
- * Safety utilities for classifying and managing risky operations
3
- */
4
- import * as path from 'path';
5
- /**
6
- * Resolve a file path against a working directory and ensure it stays inside it (no path traversal).
7
- * Use for all user-provided paths before file operations.
8
- */
9
- export function sanitizePath(workingDir, filePath) {
10
- const normalized = path.normalize(filePath).replace(/^(\.\.(\/|\\))+/, '');
11
- const resolved = path.resolve(workingDir, normalized);
12
- const relative = path.relative(workingDir, resolved);
13
- if (relative.startsWith('..') || path.isAbsolute(relative)) {
14
- return { ok: false, message: 'Path escapes working directory and is not allowed' };
15
- }
16
- return { ok: true, path: resolved };
17
- }
18
- /**
19
- * Validate URL for fetch_url to reduce SSRF risk: only http/https, no localhost or private IPs by default.
20
- */
21
- export function sanitizeUrl(url, allowLocalhost = false) {
22
- let parsed;
23
- try {
24
- parsed = new URL(url);
25
- }
26
- catch {
27
- return { ok: false, message: 'Invalid URL' };
28
- }
29
- if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {
30
- return { ok: false, message: 'Only http and https URLs are allowed' };
31
- }
32
- if (!allowLocalhost) {
33
- const host = (parsed.hostname || '').toLowerCase();
34
- if (host === 'localhost' || host === '127.0.0.1' || host.startsWith('192.168.') || host.startsWith('10.') || host.endsWith('.local')) {
35
- return { ok: false, message: 'Local or private URLs are not allowed' };
36
- }
37
- }
38
- return { ok: true, url: parsed.toString() };
39
- }
40
- export class SafetyChecker {
41
- /**
42
- * Assess the risk level of a tool operation
43
- */
44
- assessToolRisk(toolName, params) {
45
- const reasons = [];
46
- const warnings = [];
47
- let level = 'low';
48
- switch (toolName) {
49
- case 'delete_file':
50
- level = 'high';
51
- reasons.push('Deletes files/directories permanently');
52
- warnings.push('Ensure backups exist before deletion');
53
- // Check if deleting important directories
54
- if (params.path) {
55
- const dangerousPaths = [
56
- 'node_modules',
57
- '.git',
58
- 'dist',
59
- 'build',
60
- 'src',
61
- '/',
62
- '~',
63
- ];
64
- for (const dangerous of dangerousPaths) {
65
- if (params.path.includes(dangerous)) {
66
- level = 'high';
67
- warnings.push(`Deleting ${dangerous} directory - HIGH RISK`);
68
- }
69
- }
70
- }
71
- break;
72
- case 'write_file':
73
- // Writing is generally safe but can overwrite
74
- if (params.path) {
75
- // Check for important files
76
- const importantFiles = [
77
- 'package.json',
78
- 'tsconfig.json',
79
- '.gitignore',
80
- 'README.md',
81
- '.env',
82
- ];
83
- if (importantFiles.some(f => params.path.endsWith(f))) {
84
- level = 'medium';
85
- reasons.push('Modifying important configuration file');
86
- warnings.push('Verify changes to avoid breaking the project');
87
- }
88
- }
89
- break;
90
- case 'edit_file':
91
- case 'edit_lines':
92
- case 'insert_at_line':
93
- level = 'low';
94
- reasons.push('File edits are backed up automatically');
95
- break;
96
- case 'move_file':
97
- level = 'medium';
98
- reasons.push('Moving files can break imports and references');
99
- warnings.push('Update imports after moving files');
100
- break;
101
- case 'run_command':
102
- level = this.assessCommandRisk(params.command);
103
- if (level === 'high') {
104
- reasons.push('Command can make irreversible changes');
105
- }
106
- break;
107
- case 'create_git_checkpoint':
108
- level = 'low';
109
- reasons.push('Creates a safe restore point');
110
- break;
111
- case 'revert_to_git_checkpoint':
112
- level = 'high';
113
- reasons.push('Reverts code changes');
114
- warnings.push('Ensure correct checkpoint before reverting');
115
- if (!params.confirm) {
116
- warnings.push('Requires explicit confirmation');
117
- }
118
- break;
119
- case 'revert_file':
120
- level = 'medium';
121
- reasons.push('Reverts file to previous version');
122
- warnings.push('Verify backup index before reverting');
123
- break;
124
- default:
125
- level = 'low';
126
- }
127
- return { level, reasons, warnings };
128
- }
129
- /**
130
- * Assess the risk level of a shell command
131
- */
132
- assessCommandRisk(command) {
133
- const cmd = command.toLowerCase().trim();
134
- // High-risk commands
135
- const highRiskPatterns = [
136
- /rm\s+-rf/,
137
- /git\s+reset\s+--hard/,
138
- /git\s+push\s+--force/,
139
- /git\s+push\s+-f/,
140
- /dd\s+if=/,
141
- /mkfs/,
142
- /format/,
143
- /:\(\)\{.*\}/, // Fork bomb pattern
144
- /chmod\s+777/,
145
- /chown\s+-R/,
146
- /sudo\s+rm/,
147
- /> \/dev\//,
148
- /curl.*\|\s*(bash|sh)/,
149
- /wget.*\|\s*(bash|sh)/,
150
- ];
151
- for (const pattern of highRiskPatterns) {
152
- if (pattern.test(cmd)) {
153
- return 'high';
154
- }
155
- }
156
- // Medium-risk commands
157
- const mediumRiskPatterns = [
158
- /git\s+push/,
159
- /npm\s+publish/,
160
- /rm\s+/,
161
- /git\s+reset/,
162
- /git\s+rebase/,
163
- /git\s+merge/,
164
- /docker\s+rm/,
165
- /docker\s+rmi/,
166
- /kill\s+-9/,
167
- /pkill/,
168
- ];
169
- for (const pattern of mediumRiskPatterns) {
170
- if (pattern.test(cmd)) {
171
- return 'medium';
172
- }
173
- }
174
- return 'low';
175
- }
176
- /**
177
- * Check if a command should be blocked entirely
178
- */
179
- isCommandBlocked(command) {
180
- const cmd = command.toLowerCase().trim();
181
- // Block extremely dangerous commands
182
- const blockedPatterns = [
183
- { pattern: /:\(\)\{.*\}/, reason: 'Fork bomb detected' },
184
- { pattern: /rm\s+-rf\s+\/($|\s)/, reason: 'Attempting to delete root directory' },
185
- { pattern: /rm\s+-rf\s+~($|\s)/, reason: 'Attempting to delete home directory' },
186
- { pattern: /> \/dev\/sda/, reason: 'Attempting to write directly to disk' },
187
- { pattern: /mkfs/, reason: 'Attempting to format filesystem' },
188
- ];
189
- for (const { pattern, reason } of blockedPatterns) {
190
- if (pattern.test(cmd)) {
191
- return { blocked: true, reason };
192
- }
193
- }
194
- return { blocked: false };
195
- }
196
- /**
197
- * Suggest safer alternatives for risky commands
198
- */
199
- suggestSaferAlternative(command) {
200
- const cmd = command.toLowerCase().trim();
201
- // Normalize multiple spaces for simpler matching
202
- const normalized = cmd.replace(/\s+/g, ' ');
203
- if (normalized.includes('git reset --hard')) {
204
- return 'Use "git stash" to save changes, then "git stash drop" if you really want to discard them';
205
- }
206
- if (normalized.includes('git push --force') || normalized.includes('git push -f')) {
207
- return 'Use "git push --force-with-lease" to avoid overwriting others\' work';
208
- }
209
- if (normalized.match(/rm\s+-rf/)) {
210
- return 'Consider using "mv" to move files to a temporary location first';
211
- }
212
- // Suggest alternative package managers only for explicit "npm install"
213
- if (/^npm\s+install\b/.test(normalized) && !normalized.includes('-g')) {
214
- return 'Consider using "pnpm install" or "bun install" for faster, more efficient installs';
215
- }
216
- return null;
217
- }
218
- /**
219
- * Check if a file path is sensitive
220
- */
221
- isSensitivePath(filepath) {
222
- const sensitive = [
223
- '.env',
224
- '.env.local',
225
- '.env.production',
226
- 'credentials.json',
227
- 'secrets.yaml',
228
- 'private.key',
229
- '.ssh/',
230
- 'id_rsa',
231
- 'id_ed25519',
232
- ];
233
- return sensitive.some(pattern => filepath.includes(pattern));
234
- }
235
- /**
236
- * Validate dry-run compatibility for a tool
237
- */
238
- canDryRun(toolName) {
239
- const dryRunnable = [
240
- 'write_file',
241
- 'edit_file',
242
- 'edit_lines',
243
- 'insert_at_line',
244
- 'delete_file',
245
- 'move_file',
246
- 'create_directory',
247
- 'create_git_checkpoint',
248
- 'revert_to_git_checkpoint',
249
- 'revert_file',
250
- ];
251
- return dryRunnable.includes(toolName);
252
- }
253
- }
254
- //# sourceMappingURL=safety.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"safety.js","sourceRoot":"","sources":["../../src/utils/safety.ts"],"names":[],"mappings":"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"}
@@ -1,25 +0,0 @@
1
- export interface SmitheryServer {
2
- qualifiedName: string;
3
- displayName?: string;
4
- description?: string;
5
- useCount?: number;
6
- connectionUrl?: string;
7
- }
8
- export declare class SmitheryClient {
9
- /**
10
- * Search for MCP servers using Smithery CLI
11
- */
12
- search(query: string): Promise<SmitheryServer[]>;
13
- /**
14
- * Construct the command configuration for running an MCP server via Smithery
15
- */
16
- getRunConfig(serverName: string, config?: Record<string, any>): {
17
- command: string;
18
- args: string[];
19
- };
20
- /**
21
- * Check if Smithery CLI is usable (has node/npx)
22
- */
23
- isAvailable(): Promise<boolean>;
24
- }
25
- //# sourceMappingURL=smithery.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"smithery.d.ts","sourceRoot":"","sources":["../../src/utils/smithery.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,cAAc;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,cAAc;IACvB;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAYtD;;OAEG;IACH,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE;IAcvG;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;CAQxC"}
@@ -1,50 +0,0 @@
1
- import { exec } from 'child_process';
2
- import { promisify } from 'util';
3
- import chalk from 'chalk';
4
- const execAsync = promisify(exec);
5
- export class SmitheryClient {
6
- /**
7
- * Search for MCP servers using Smithery CLI
8
- */
9
- async search(query) {
10
- try {
11
- // Use --json to get structured output
12
- const { stdout } = await execAsync(`npx -y @smithery/cli search "${query}" --json`);
13
- const data = JSON.parse(stdout);
14
- return Array.isArray(data) ? data : [];
15
- }
16
- catch (error) {
17
- console.error(chalk.red('Failed to search Smithery:'), error.message);
18
- return [];
19
- }
20
- }
21
- /**
22
- * Construct the command configuration for running an MCP server via Smithery
23
- */
24
- getRunConfig(serverName, config = {}) {
25
- return {
26
- command: 'npx',
27
- args: [
28
- '-y',
29
- '@smithery/cli@latest',
30
- 'run',
31
- serverName,
32
- '--config',
33
- JSON.stringify(config) // Config must be passed as a JSON string to the CLI
34
- ]
35
- };
36
- }
37
- /**
38
- * Check if Smithery CLI is usable (has node/npx)
39
- */
40
- async isAvailable() {
41
- try {
42
- await execAsync('npx --version');
43
- return true;
44
- }
45
- catch {
46
- return false;
47
- }
48
- }
49
- }
50
- //# sourceMappingURL=smithery.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"smithery.js","sourceRoot":"","sources":["../../src/utils/smithery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAUlC,MAAM,OAAO,cAAc;IACvB;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,KAAa;QACtB,IAAI,CAAC;YACD,sCAAsC;YACtC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,gCAAgC,KAAK,UAAU,CAAC,CAAC;YACpF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAChC,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACtE,OAAO,EAAE,CAAC;QACd,CAAC;IACL,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,UAAkB,EAAE,SAA8B,EAAE;QAC7D,OAAO;YACH,OAAO,EAAE,KAAK;YACd,IAAI,EAAE;gBACF,IAAI;gBACJ,sBAAsB;gBACtB,KAAK;gBACL,UAAU;gBACV,UAAU;gBACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,oDAAoD;aAC9E;SACJ,CAAC;IACN,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW;QACb,IAAI,CAAC;YACD,MAAM,SAAS,CAAC,eAAe,CAAC,CAAC;YACjC,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;CACJ"}