@defai.digital/ax-cli 3.2.0 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (239) hide show
  1. package/.ax-cli/memory.json +8 -1
  2. package/README.md +118 -2
  3. package/config/models.yaml +13 -0
  4. package/config/settings.yaml +6 -0
  5. package/dist/agent/context-manager.d.ts +5 -5
  6. package/dist/agent/context-manager.js +19 -9
  7. package/dist/agent/context-manager.js.map +1 -1
  8. package/dist/agent/dependency-resolver.js +2 -1
  9. package/dist/agent/dependency-resolver.js.map +1 -1
  10. package/dist/agent/llm-agent.d.ts +3 -2
  11. package/dist/agent/llm-agent.js +64 -58
  12. package/dist/agent/llm-agent.js.map +1 -1
  13. package/dist/agent/subagent.js +2 -1
  14. package/dist/agent/subagent.js.map +1 -1
  15. package/dist/analyzers/architecture/anti-pattern-detectors/god-object-detector.d.ts +29 -0
  16. package/dist/analyzers/architecture/anti-pattern-detectors/god-object-detector.js +103 -0
  17. package/dist/analyzers/architecture/anti-pattern-detectors/god-object-detector.js.map +1 -0
  18. package/dist/analyzers/architecture/architecture-analyzer.d.ts +58 -0
  19. package/dist/analyzers/architecture/architecture-analyzer.js +276 -0
  20. package/dist/analyzers/architecture/architecture-analyzer.js.map +1 -0
  21. package/dist/analyzers/architecture/index.d.ts +12 -0
  22. package/dist/analyzers/architecture/index.js +14 -0
  23. package/dist/analyzers/architecture/index.js.map +1 -0
  24. package/dist/analyzers/architecture/pattern-detectors/base-detector.d.ts +27 -0
  25. package/dist/analyzers/architecture/pattern-detectors/base-detector.js +31 -0
  26. package/dist/analyzers/architecture/pattern-detectors/base-detector.js.map +1 -0
  27. package/dist/analyzers/architecture/pattern-detectors/clean-architecture-detector.d.ts +11 -0
  28. package/dist/analyzers/architecture/pattern-detectors/clean-architecture-detector.js +57 -0
  29. package/dist/analyzers/architecture/pattern-detectors/clean-architecture-detector.js.map +1 -0
  30. package/dist/analyzers/architecture/pattern-detectors/mvc-detector.d.ts +11 -0
  31. package/dist/analyzers/architecture/pattern-detectors/mvc-detector.js +43 -0
  32. package/dist/analyzers/architecture/pattern-detectors/mvc-detector.js.map +1 -0
  33. package/dist/analyzers/architecture/pattern-detectors/repository-detector.d.ts +11 -0
  34. package/dist/analyzers/architecture/pattern-detectors/repository-detector.js +49 -0
  35. package/dist/analyzers/architecture/pattern-detectors/repository-detector.js.map +1 -0
  36. package/dist/analyzers/architecture/project-structure-scanner.d.ts +54 -0
  37. package/dist/analyzers/architecture/project-structure-scanner.js +200 -0
  38. package/dist/analyzers/architecture/project-structure-scanner.js.map +1 -0
  39. package/dist/analyzers/best-practices/base-rule.d.ts +45 -0
  40. package/dist/analyzers/best-practices/base-rule.js +45 -0
  41. package/dist/analyzers/best-practices/base-rule.js.map +1 -0
  42. package/dist/analyzers/best-practices/best-practice-validator.d.ts +35 -0
  43. package/dist/analyzers/best-practices/best-practice-validator.js +181 -0
  44. package/dist/analyzers/best-practices/best-practice-validator.js.map +1 -0
  45. package/dist/analyzers/best-practices/rules/index.d.ts +7 -0
  46. package/dist/analyzers/best-practices/rules/index.js +56 -0
  47. package/dist/analyzers/best-practices/rules/index.js.map +1 -0
  48. package/dist/analyzers/best-practices/rules/typescript/consistent-naming.d.ts +17 -0
  49. package/dist/analyzers/best-practices/rules/typescript/consistent-naming.js +41 -0
  50. package/dist/analyzers/best-practices/rules/typescript/consistent-naming.js.map +1 -0
  51. package/dist/analyzers/best-practices/rules/typescript/function-complexity.d.ts +27 -0
  52. package/dist/analyzers/best-practices/rules/typescript/function-complexity.js +76 -0
  53. package/dist/analyzers/best-practices/rules/typescript/function-complexity.js.map +1 -0
  54. package/dist/analyzers/best-practices/rules/typescript/index.d.ts +15 -0
  55. package/dist/analyzers/best-practices/rules/typescript/index.js +16 -0
  56. package/dist/analyzers/best-practices/rules/typescript/index.js.map +1 -0
  57. package/dist/analyzers/best-practices/rules/typescript/max-file-length.d.ts +18 -0
  58. package/dist/analyzers/best-practices/rules/typescript/max-file-length.js +25 -0
  59. package/dist/analyzers/best-practices/rules/typescript/max-file-length.js.map +1 -0
  60. package/dist/analyzers/best-practices/rules/typescript/no-any-type.d.ts +17 -0
  61. package/dist/analyzers/best-practices/rules/typescript/no-any-type.js +27 -0
  62. package/dist/analyzers/best-practices/rules/typescript/no-any-type.js.map +1 -0
  63. package/dist/analyzers/best-practices/rules/typescript/no-implicit-any.d.ts +18 -0
  64. package/dist/analyzers/best-practices/rules/typescript/no-implicit-any.js +39 -0
  65. package/dist/analyzers/best-practices/rules/typescript/no-implicit-any.js.map +1 -0
  66. package/dist/analyzers/best-practices/rules/typescript/no-magic-numbers.d.ts +17 -0
  67. package/dist/analyzers/best-practices/rules/typescript/no-magic-numbers.js +32 -0
  68. package/dist/analyzers/best-practices/rules/typescript/no-magic-numbers.js.map +1 -0
  69. package/dist/analyzers/best-practices/rules/typescript/no-unused-vars.d.ts +17 -0
  70. package/dist/analyzers/best-practices/rules/typescript/no-unused-vars.js +36 -0
  71. package/dist/analyzers/best-practices/rules/typescript/no-unused-vars.js.map +1 -0
  72. package/dist/analyzers/best-practices/rules/typescript/prefer-const.d.ts +17 -0
  73. package/dist/analyzers/best-practices/rules/typescript/prefer-const.js +33 -0
  74. package/dist/analyzers/best-practices/rules/typescript/prefer-const.js.map +1 -0
  75. package/dist/analyzers/best-practices/rules/typescript/prefer-readonly.d.ts +17 -0
  76. package/dist/analyzers/best-practices/rules/typescript/prefer-readonly.js +34 -0
  77. package/dist/analyzers/best-practices/rules/typescript/prefer-readonly.js.map +1 -0
  78. package/dist/analyzers/best-practices/rules/typescript/proper-error-handling.d.ts +17 -0
  79. package/dist/analyzers/best-practices/rules/typescript/proper-error-handling.js +27 -0
  80. package/dist/analyzers/best-practices/rules/typescript/proper-error-handling.js.map +1 -0
  81. package/dist/analyzers/best-practices/types.d.ts +86 -0
  82. package/dist/analyzers/best-practices/types.js +7 -0
  83. package/dist/analyzers/best-practices/types.js.map +1 -0
  84. package/dist/analyzers/cache/analysis-cache.d.ts +41 -0
  85. package/dist/analyzers/cache/analysis-cache.js +84 -0
  86. package/dist/analyzers/cache/analysis-cache.js.map +1 -0
  87. package/dist/analyzers/errors.d.ts +51 -0
  88. package/dist/analyzers/errors.js +79 -0
  89. package/dist/analyzers/errors.js.map +1 -0
  90. package/dist/commands/doctor.js +3 -2
  91. package/dist/commands/doctor.js.map +1 -1
  92. package/dist/commands/frontend.d.ts +9 -0
  93. package/dist/commands/frontend.js +645 -0
  94. package/dist/commands/frontend.js.map +1 -0
  95. package/dist/commands/mcp.js +652 -3
  96. package/dist/commands/mcp.js.map +1 -1
  97. package/dist/commands/models.js +2 -2
  98. package/dist/commands/models.js.map +1 -1
  99. package/dist/commands/setup.js +100 -41
  100. package/dist/commands/setup.js.map +1 -1
  101. package/dist/constants.d.ts +4 -0
  102. package/dist/constants.js +4 -0
  103. package/dist/constants.js.map +1 -1
  104. package/dist/hooks/use-enhanced-input.js +16 -3
  105. package/dist/hooks/use-enhanced-input.js.map +1 -1
  106. package/dist/hooks/use-input-handler.js +9 -4
  107. package/dist/hooks/use-input-handler.js.map +1 -1
  108. package/dist/index.js +5 -2
  109. package/dist/index.js.map +1 -1
  110. package/dist/llm/client.d.ts +1 -0
  111. package/dist/llm/tools.js +86 -0
  112. package/dist/llm/tools.js.map +1 -1
  113. package/dist/llm/types.d.ts +49 -22
  114. package/dist/llm/types.js +12 -8
  115. package/dist/llm/types.js.map +1 -1
  116. package/dist/mcp/client.d.ts +5 -0
  117. package/dist/mcp/client.js +55 -0
  118. package/dist/mcp/client.js.map +1 -1
  119. package/dist/mcp/config.d.ts +1 -1
  120. package/dist/mcp/config.js +2 -2
  121. package/dist/mcp/config.js.map +1 -1
  122. package/dist/mcp/health.d.ts +120 -0
  123. package/dist/mcp/health.js +267 -0
  124. package/dist/mcp/health.js.map +1 -0
  125. package/dist/mcp/reconnection.d.ts +93 -0
  126. package/dist/mcp/reconnection.js +216 -0
  127. package/dist/mcp/reconnection.js.map +1 -0
  128. package/dist/mcp/registry.d.ts +71 -0
  129. package/dist/mcp/registry.js +257 -0
  130. package/dist/mcp/registry.js.map +1 -0
  131. package/dist/mcp/resources.d.ts +53 -0
  132. package/dist/mcp/resources.js +135 -0
  133. package/dist/mcp/resources.js.map +1 -0
  134. package/dist/mcp/templates.d.ts +52 -0
  135. package/dist/mcp/templates.js +624 -0
  136. package/dist/mcp/templates.js.map +1 -0
  137. package/dist/mcp/validation.d.ts +25 -0
  138. package/dist/mcp/validation.js +209 -0
  139. package/dist/mcp/validation.js.map +1 -0
  140. package/dist/memory/context-generator.js +1 -2
  141. package/dist/memory/context-generator.js.map +1 -1
  142. package/dist/planner/types.d.ts +2 -2
  143. package/dist/schemas/api-schemas.d.ts +2 -1
  144. package/dist/schemas/api-schemas.js +6 -4
  145. package/dist/schemas/api-schemas.js.map +1 -1
  146. package/dist/schemas/index.d.ts +4 -4
  147. package/dist/schemas/tool-schemas.d.ts +2 -2
  148. package/dist/schemas/yaml-schemas.d.ts +15 -0
  149. package/dist/schemas/yaml-schemas.js +3 -0
  150. package/dist/schemas/yaml-schemas.js.map +1 -1
  151. package/dist/sdk/index.d.ts +138 -0
  152. package/dist/sdk/index.js +173 -0
  153. package/dist/sdk/index.js.map +1 -0
  154. package/dist/sdk/types.d.ts +53 -0
  155. package/dist/sdk/types.js +8 -0
  156. package/dist/sdk/types.js.map +1 -0
  157. package/dist/tools/analysis-tools/architecture-tool.d.ts +46 -0
  158. package/dist/tools/analysis-tools/architecture-tool.js +124 -0
  159. package/dist/tools/analysis-tools/architecture-tool.js.map +1 -0
  160. package/dist/tools/analysis-tools/validation-tool.d.ts +51 -0
  161. package/dist/tools/analysis-tools/validation-tool.js +121 -0
  162. package/dist/tools/analysis-tools/validation-tool.js.map +1 -0
  163. package/dist/tools/bash.js +25 -10
  164. package/dist/tools/bash.js.map +1 -1
  165. package/dist/tools/web-search/cache.d.ts +62 -0
  166. package/dist/tools/web-search/cache.js +105 -0
  167. package/dist/tools/web-search/cache.js.map +1 -0
  168. package/dist/tools/web-search/engines/brave.d.ts +16 -0
  169. package/dist/tools/web-search/engines/brave.js +99 -0
  170. package/dist/tools/web-search/engines/brave.js.map +1 -0
  171. package/dist/tools/web-search/engines/crates.d.ts +19 -0
  172. package/dist/tools/web-search/engines/crates.js +87 -0
  173. package/dist/tools/web-search/engines/crates.js.map +1 -0
  174. package/dist/tools/web-search/engines/npm.d.ts +18 -0
  175. package/dist/tools/web-search/engines/npm.js +86 -0
  176. package/dist/tools/web-search/engines/npm.js.map +1 -0
  177. package/dist/tools/web-search/engines/pypi.d.ts +18 -0
  178. package/dist/tools/web-search/engines/pypi.js +75 -0
  179. package/dist/tools/web-search/engines/pypi.js.map +1 -0
  180. package/dist/tools/web-search/engines/tavily.d.ts +17 -0
  181. package/dist/tools/web-search/engines/tavily.js +73 -0
  182. package/dist/tools/web-search/engines/tavily.js.map +1 -0
  183. package/dist/tools/web-search/index.d.ts +13 -0
  184. package/dist/tools/web-search/index.js +13 -0
  185. package/dist/tools/web-search/index.js.map +1 -0
  186. package/dist/tools/web-search/router.d.ts +36 -0
  187. package/dist/tools/web-search/router.js +280 -0
  188. package/dist/tools/web-search/router.js.map +1 -0
  189. package/dist/tools/web-search/types.d.ts +45 -0
  190. package/dist/tools/web-search/types.js +6 -0
  191. package/dist/tools/web-search/types.js.map +1 -0
  192. package/dist/tools/web-search/web-search-tool.d.ts +51 -0
  193. package/dist/tools/web-search/web-search-tool.js +256 -0
  194. package/dist/tools/web-search/web-search-tool.js.map +1 -0
  195. package/dist/types/analysis.d.ts +177 -0
  196. package/dist/types/analysis.js +8 -0
  197. package/dist/types/analysis.js.map +1 -0
  198. package/dist/ui/components/api-key-input.js +2 -2
  199. package/dist/ui/components/api-key-input.js.map +1 -1
  200. package/dist/ui/components/chat-history.js +14 -7
  201. package/dist/ui/components/chat-history.js.map +1 -1
  202. package/dist/ui/components/chat-input.js +12 -7
  203. package/dist/ui/components/chat-input.js.map +1 -1
  204. package/dist/ui/components/chat-interface.js +75 -54
  205. package/dist/ui/components/chat-interface.js.map +1 -1
  206. package/dist/ui/components/keyboard-hints.js +5 -4
  207. package/dist/ui/components/keyboard-hints.js.map +1 -1
  208. package/dist/ui/components/quick-actions.js +1 -0
  209. package/dist/ui/components/quick-actions.js.map +1 -1
  210. package/dist/ui/components/reasoning-display.js +14 -4
  211. package/dist/ui/components/reasoning-display.js.map +1 -1
  212. package/dist/ui/components/status-bar.d.ts +1 -0
  213. package/dist/ui/components/status-bar.js +37 -39
  214. package/dist/ui/components/status-bar.js.map +1 -1
  215. package/dist/ui/components/toast-notification.d.ts +29 -0
  216. package/dist/ui/components/toast-notification.js +17 -3
  217. package/dist/ui/components/toast-notification.js.map +1 -1
  218. package/dist/ui/components/welcome-panel.d.ts +1 -0
  219. package/dist/ui/components/welcome-panel.js +106 -4
  220. package/dist/ui/components/welcome-panel.js.map +1 -1
  221. package/dist/utils/analysis-logger.d.ts +47 -0
  222. package/dist/utils/analysis-logger.js +70 -0
  223. package/dist/utils/analysis-logger.js.map +1 -0
  224. package/dist/utils/automatosx-detector.d.ts +19 -0
  225. package/dist/utils/automatosx-detector.js +52 -0
  226. package/dist/utils/automatosx-detector.js.map +1 -0
  227. package/dist/utils/config-loader.d.ts +4 -0
  228. package/dist/utils/config-loader.js.map +1 -1
  229. package/dist/utils/confirmation-service.js +1 -1
  230. package/dist/utils/confirmation-service.js.map +1 -1
  231. package/dist/utils/init-previewer.js +26 -4
  232. package/dist/utils/init-previewer.js.map +1 -1
  233. package/dist/utils/setup-validator.js +1 -0
  234. package/dist/utils/setup-validator.js.map +1 -1
  235. package/dist/utils/text-utils.d.ts +1 -0
  236. package/dist/utils/text-utils.js +12 -0
  237. package/dist/utils/text-utils.js.map +1 -1
  238. package/package.json +19 -4
  239. package/vitest.config.ts +1 -0
@@ -0,0 +1,257 @@
1
+ /**
2
+ * MCP Server Registry Integration (Phase 5)
3
+ *
4
+ * Enables discovery and installation of MCP servers from the GitHub MCP Registry
5
+ * Provides one-command install and browsing capabilities
6
+ */
7
+ import axios from 'axios';
8
+ /**
9
+ * Search the MCP server registry
10
+ */
11
+ export async function searchRegistry(options = {}) {
12
+ const { query = '', category, transport, sortBy = 'stars', limit = 20 } = options;
13
+ try {
14
+ // Search GitHub for MCP servers
15
+ const searchQuery = buildGitHubSearchQuery(query, category, transport);
16
+ const sort = sortBy === 'stars' ? 'stars' : sortBy === 'updated' ? 'updated' : undefined;
17
+ const response = await axios.get('https://api.github.com/search/repositories', {
18
+ params: {
19
+ q: searchQuery,
20
+ sort,
21
+ order: 'desc',
22
+ per_page: Math.min(limit, 100)
23
+ },
24
+ headers: {
25
+ 'Accept': 'application/vnd.github.v3+json',
26
+ 'User-Agent': 'ax-cli-mcp-registry'
27
+ }
28
+ });
29
+ // Parse and filter results
30
+ const servers = response.data.items
31
+ .map(parseGitHubRepo)
32
+ .filter((server) => server !== null);
33
+ return servers;
34
+ }
35
+ catch (error) {
36
+ if (axios.isAxiosError(error) && error.response?.status === 403) {
37
+ throw new Error('GitHub API rate limit exceeded. Please try again later or set GITHUB_TOKEN env var.');
38
+ }
39
+ throw new Error(`Failed to search registry: ${error instanceof Error ? error.message : String(error)}`);
40
+ }
41
+ }
42
+ /**
43
+ * Get details for a specific server from the registry
44
+ */
45
+ export async function getRegistryServer(nameOrPackage) {
46
+ try {
47
+ // Try to find by package name first
48
+ if (nameOrPackage.startsWith('@')) {
49
+ const results = await searchRegistry({ query: nameOrPackage, limit: 5 });
50
+ const match = results.find(s => s.packageName === nameOrPackage);
51
+ if (match)
52
+ return match;
53
+ }
54
+ // Try to find by repository name
55
+ const results = await searchRegistry({ query: nameOrPackage, limit: 10 });
56
+ const match = results.find(s => s.name.toLowerCase() === nameOrPackage.toLowerCase() ||
57
+ s.displayName.toLowerCase() === nameOrPackage.toLowerCase());
58
+ return match || null;
59
+ }
60
+ catch (error) {
61
+ throw new Error(`Failed to fetch server details: ${error instanceof Error ? error.message : String(error)}`);
62
+ }
63
+ }
64
+ /**
65
+ * Get popular/featured MCP servers
66
+ */
67
+ export async function getPopularServers() {
68
+ return searchRegistry({
69
+ sortBy: 'stars',
70
+ limit: 20
71
+ });
72
+ }
73
+ /**
74
+ * Get servers by category
75
+ */
76
+ export async function getServersByCategory(category) {
77
+ return searchRegistry({
78
+ category,
79
+ sortBy: 'stars',
80
+ limit: 20
81
+ });
82
+ }
83
+ /**
84
+ * Generate MCP server configuration from registry entry
85
+ */
86
+ export function generateConfigFromRegistry(server) {
87
+ const config = {
88
+ name: server.name,
89
+ transport: {
90
+ type: server.transport
91
+ }
92
+ };
93
+ // Configure based on transport type
94
+ if (server.transport === 'stdio' && server.packageName) {
95
+ config.transport = {
96
+ type: 'stdio',
97
+ command: 'npx',
98
+ args: ['-y', server.packageName]
99
+ };
100
+ }
101
+ else if (server.transport === 'http' || server.transport === 'sse') {
102
+ // For HTTP/SSE servers, we'd need the URL from the repo
103
+ // This would typically be in the README or package.json
104
+ config.transport = {
105
+ type: server.transport,
106
+ url: server.homepage || `https://${server.name}.com`
107
+ };
108
+ }
109
+ return config;
110
+ }
111
+ /**
112
+ * Build GitHub search query
113
+ */
114
+ function buildGitHubSearchQuery(query, category, transport) {
115
+ const parts = [];
116
+ // Base search terms
117
+ parts.push('mcp-server');
118
+ parts.push('OR');
119
+ parts.push('model-context-protocol');
120
+ // Add custom query
121
+ if (query) {
122
+ parts.push(query);
123
+ }
124
+ // Add topic filter
125
+ parts.push('topic:mcp');
126
+ // Add category filter
127
+ if (category) {
128
+ parts.push(`topic:${category}`);
129
+ }
130
+ // Add transport filter
131
+ if (transport) {
132
+ parts.push(`topic:${transport}`);
133
+ }
134
+ return parts.join(' ');
135
+ }
136
+ /**
137
+ * Parse GitHub repository into RegistryServer
138
+ */
139
+ function parseGitHubRepo(repo) {
140
+ try {
141
+ // Extract package name from description or README
142
+ const packageName = extractPackageName(repo);
143
+ // Determine transport type from topics
144
+ const transport = determineTransport(repo.topics || []);
145
+ // Determine category from topics
146
+ const category = determineCategory(repo.topics || []);
147
+ // Check if verified (official modelcontextprotocol org)
148
+ const verified = repo.owner.login === 'modelcontextprotocol';
149
+ return {
150
+ name: extractServerName(repo.name),
151
+ displayName: repo.name.replace(/-/g, ' ').replace(/\bmcp\b/gi, 'MCP'),
152
+ description: repo.description || 'No description available',
153
+ repository: repo.html_url,
154
+ stars: repo.stargazers_count,
155
+ category,
156
+ transport,
157
+ packageName,
158
+ installCommand: packageName ? `npx ${packageName}` : 'See repository for installation',
159
+ verified,
160
+ author: repo.owner.login,
161
+ version: undefined, // Would need to query npm or GitHub releases
162
+ homepage: repo.homepage || repo.html_url
163
+ };
164
+ }
165
+ catch (error) {
166
+ console.warn(`Failed to parse repository: ${repo.name}`, error);
167
+ return null;
168
+ }
169
+ }
170
+ /**
171
+ * Extract NPM package name from repo metadata
172
+ */
173
+ function extractPackageName(repo) {
174
+ // Check if description mentions package name
175
+ const description = repo.description || '';
176
+ const packageMatch = description.match(/@[\w-]+\/[\w-]+/);
177
+ if (packageMatch) {
178
+ return packageMatch[0];
179
+ }
180
+ // For official servers, construct package name
181
+ if (repo.owner.login === 'modelcontextprotocol' && repo.name.startsWith('server-')) {
182
+ return `@modelcontextprotocol/${repo.name}`;
183
+ }
184
+ return undefined;
185
+ }
186
+ /**
187
+ * Determine transport type from topics
188
+ */
189
+ function determineTransport(topics) {
190
+ if (topics.includes('http') || topics.includes('rest'))
191
+ return 'http';
192
+ if (topics.includes('sse') || topics.includes('server-sent-events'))
193
+ return 'sse';
194
+ return 'stdio'; // Default
195
+ }
196
+ /**
197
+ * Determine category from topics
198
+ */
199
+ function determineCategory(topics) {
200
+ const categoryMap = {
201
+ 'design': 'design',
202
+ 'figma': 'design',
203
+ 'deployment': 'deployment',
204
+ 'vercel': 'deployment',
205
+ 'database': 'database',
206
+ 'postgres': 'database',
207
+ 'mysql': 'database',
208
+ 'testing': 'testing',
209
+ 'api': 'api',
210
+ 'file-system': 'filesystem',
211
+ 'project-management': 'project-management',
212
+ 'linear': 'project-management',
213
+ 'github': 'version-control',
214
+ 'git': 'version-control'
215
+ };
216
+ for (const topic of topics) {
217
+ if (categoryMap[topic]) {
218
+ return categoryMap[topic];
219
+ }
220
+ }
221
+ return 'other';
222
+ }
223
+ /**
224
+ * Extract clean server name from repository name
225
+ */
226
+ function extractServerName(repoName) {
227
+ // Remove common prefixes
228
+ let name = repoName
229
+ .replace(/^mcp-server-/i, '')
230
+ .replace(/^server-/i, '')
231
+ .replace(/^mcp-/i, '');
232
+ // Convert to lowercase with hyphens
233
+ name = name.toLowerCase();
234
+ return name;
235
+ }
236
+ /**
237
+ * Format registry server for display
238
+ */
239
+ export function formatRegistryServer(server, compact = false) {
240
+ if (compact) {
241
+ const badge = server.verified ? '✓' : '';
242
+ return `${server.displayName} ${badge} ⭐ ${server.stars} - ${server.description}`;
243
+ }
244
+ const lines = [];
245
+ lines.push(`${server.displayName} ${server.verified ? '(verified)' : ''}`);
246
+ lines.push(` Description: ${server.description}`);
247
+ lines.push(` Category: ${server.category}`);
248
+ lines.push(` Transport: ${server.transport}`);
249
+ lines.push(` Stars: ${server.stars}`);
250
+ lines.push(` Repository: ${server.repository}`);
251
+ if (server.packageName) {
252
+ lines.push(` Package: ${server.packageName}`);
253
+ }
254
+ lines.push(` Install: ax-cli mcp install ${server.name}`);
255
+ return lines.join('\n');
256
+ }
257
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/mcp/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * MCP Resource Management (Phase 4)
3
+ *
4
+ * Enables users to reference MCP-exposed resources using @mcp: syntax
5
+ * Similar to file references, but for database tables, API endpoints, etc.
6
+ */
7
+ import type { MCPManager } from './client.js';
8
+ export interface MCPResource {
9
+ /** Resource URI (e.g., database://users, api://endpoints/get-user) */
10
+ uri: string;
11
+ /** Human-readable name */
12
+ name: string;
13
+ /** Resource description */
14
+ description?: string;
15
+ /** MIME type if applicable */
16
+ mimeType?: string;
17
+ /** Server that provides this resource */
18
+ serverName: string;
19
+ /** Full reference string for user input: @mcp:server/uri */
20
+ reference: string;
21
+ }
22
+ /**
23
+ * List all resources from MCP servers
24
+ */
25
+ export declare function listAllResources(mcpManager: MCPManager): Promise<MCPResource[]>;
26
+ /**
27
+ * List resources from a specific MCP server
28
+ */
29
+ export declare function listServerResources(mcpManager: MCPManager, serverName: string): Promise<MCPResource[]>;
30
+ /**
31
+ * Get resource content from MCP server
32
+ */
33
+ export declare function getResourceContent(mcpManager: MCPManager, serverName: string, uri: string): Promise<string>;
34
+ /**
35
+ * Parse @mcp: reference
36
+ * Format: @mcp:server/uri
37
+ */
38
+ export declare function parseMCPReference(reference: string): {
39
+ serverName: string;
40
+ uri: string;
41
+ } | null;
42
+ /**
43
+ * Extract all MCP references from text
44
+ */
45
+ export declare function extractMCPReferences(text: string): string[];
46
+ /**
47
+ * Replace MCP references in text with actual content
48
+ */
49
+ export declare function resolveMCPReferences(text: string, mcpManager: MCPManager): Promise<string>;
50
+ /**
51
+ * Search resources by name or URI
52
+ */
53
+ export declare function searchResources(resources: MCPResource[], query: string): MCPResource[];
@@ -0,0 +1,135 @@
1
+ /**
2
+ * MCP Resource Management (Phase 4)
3
+ *
4
+ * Enables users to reference MCP-exposed resources using @mcp: syntax
5
+ * Similar to file references, but for database tables, API endpoints, etc.
6
+ */
7
+ /**
8
+ * List all resources from MCP servers
9
+ */
10
+ export async function listAllResources(mcpManager) {
11
+ const resources = [];
12
+ const servers = mcpManager.getServers();
13
+ for (const serverName of servers) {
14
+ try {
15
+ const serverResources = await listServerResources(mcpManager, serverName);
16
+ resources.push(...serverResources);
17
+ }
18
+ catch (error) {
19
+ // Silently skip servers that don't support resources
20
+ console.warn(`Server "${serverName}" does not support resources or failed to list them`);
21
+ }
22
+ }
23
+ return resources;
24
+ }
25
+ /**
26
+ * List resources from a specific MCP server
27
+ */
28
+ export async function listServerResources(mcpManager, serverName) {
29
+ try {
30
+ // Get the client for this server
31
+ const client = mcpManager.clients.get(serverName);
32
+ if (!client) {
33
+ return [];
34
+ }
35
+ // Try to list resources
36
+ const result = await client.listResources();
37
+ // Convert to our resource format
38
+ return result.resources.map((resource) => ({
39
+ uri: resource.uri,
40
+ name: resource.name || resource.uri,
41
+ description: resource.description,
42
+ mimeType: resource.mimeType,
43
+ serverName,
44
+ reference: `@mcp:${serverName}/${resource.uri}`
45
+ }));
46
+ }
47
+ catch (error) {
48
+ // Server doesn't support resources
49
+ return [];
50
+ }
51
+ }
52
+ /**
53
+ * Get resource content from MCP server
54
+ */
55
+ export async function getResourceContent(mcpManager, serverName, uri) {
56
+ try {
57
+ const client = mcpManager.clients.get(serverName);
58
+ if (!client) {
59
+ throw new Error(`Server "${serverName}" not connected`);
60
+ }
61
+ const result = await client.readResource({ uri });
62
+ // Extract text content
63
+ if (result.contents && result.contents.length > 0) {
64
+ const content = result.contents[0];
65
+ if (content.text) {
66
+ return content.text;
67
+ }
68
+ if (content.blob) {
69
+ // Handle base64 encoded content
70
+ return Buffer.from(content.blob, 'base64').toString('utf-8');
71
+ }
72
+ }
73
+ return '';
74
+ }
75
+ catch (error) {
76
+ throw new Error(`Failed to read resource ${uri}: ${error instanceof Error ? error.message : String(error)}`);
77
+ }
78
+ }
79
+ /**
80
+ * Parse @mcp: reference
81
+ * Format: @mcp:server/uri
82
+ */
83
+ export function parseMCPReference(reference) {
84
+ if (!reference.startsWith('@mcp:')) {
85
+ return null;
86
+ }
87
+ const withoutPrefix = reference.substring(5); // Remove '@mcp:'
88
+ const slashIndex = withoutPrefix.indexOf('/');
89
+ if (slashIndex === -1) {
90
+ return null;
91
+ }
92
+ const serverName = withoutPrefix.substring(0, slashIndex);
93
+ const uri = withoutPrefix.substring(slashIndex + 1);
94
+ return { serverName, uri };
95
+ }
96
+ /**
97
+ * Extract all MCP references from text
98
+ */
99
+ export function extractMCPReferences(text) {
100
+ const pattern = /@mcp:[a-z0-9_-]+\/[^\s]+/gi;
101
+ const matches = text.match(pattern);
102
+ return matches || [];
103
+ }
104
+ /**
105
+ * Replace MCP references in text with actual content
106
+ */
107
+ export async function resolveMCPReferences(text, mcpManager) {
108
+ const references = extractMCPReferences(text);
109
+ let result = text;
110
+ for (const reference of references) {
111
+ const parsed = parseMCPReference(reference);
112
+ if (!parsed)
113
+ continue;
114
+ try {
115
+ const content = await getResourceContent(mcpManager, parsed.serverName, parsed.uri);
116
+ // Replace reference with content (with context)
117
+ result = result.replace(reference, `\n--- Resource: ${reference} ---\n${content}\n--- End Resource ---\n`);
118
+ }
119
+ catch (error) {
120
+ // Replace with error message
121
+ result = result.replace(reference, `[Error: Could not load resource ${reference}]`);
122
+ }
123
+ }
124
+ return result;
125
+ }
126
+ /**
127
+ * Search resources by name or URI
128
+ */
129
+ export function searchResources(resources, query) {
130
+ const lowerQuery = query.toLowerCase();
131
+ return resources.filter(resource => resource.name.toLowerCase().includes(lowerQuery) ||
132
+ resource.uri.toLowerCase().includes(lowerQuery) ||
133
+ (resource.description && resource.description.toLowerCase().includes(lowerQuery)));
134
+ }
135
+ //# sourceMappingURL=resources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.js","sourceRoot":"","sources":["../../src/mcp/resources.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Pre-configured MCP server templates for popular services
3
+ * Enables one-command setup: ax-cli mcp add <name> --template
4
+ */
5
+ import { MCPServerConfig } from '../schemas/settings-schemas.js';
6
+ export interface MCPServerTemplate {
7
+ name: string;
8
+ description: string;
9
+ category: 'design' | 'deployment' | 'testing' | 'monitoring' | 'backend' | 'version-control';
10
+ officialServer: boolean;
11
+ config: MCPServerConfig;
12
+ requiredEnv: Array<{
13
+ name: string;
14
+ description: string;
15
+ url?: string;
16
+ }>;
17
+ setupInstructions: string;
18
+ usageExamples: string[];
19
+ troubleshooting: Array<{
20
+ issue: string;
21
+ solution: string;
22
+ }>;
23
+ }
24
+ /**
25
+ * Pre-configured templates for popular MCP servers
26
+ * Focus on front-end development tools
27
+ */
28
+ export declare const TEMPLATES: Record<string, MCPServerTemplate>;
29
+ /**
30
+ * Get all available template names
31
+ */
32
+ export declare function getTemplateNames(): string[];
33
+ /**
34
+ * Get template by name
35
+ */
36
+ export declare function getTemplate(name: string): MCPServerTemplate | undefined;
37
+ /**
38
+ * Get templates by category
39
+ */
40
+ export declare function getTemplatesByCategory(category: MCPServerTemplate['category']): MCPServerTemplate[];
41
+ /**
42
+ * Search templates by keyword
43
+ */
44
+ export declare function searchTemplates(query: string): MCPServerTemplate[];
45
+ /**
46
+ * Check if a template exists
47
+ */
48
+ export declare function hasTemplate(name: string): boolean;
49
+ /**
50
+ * Generate MCP config from template with environment variables
51
+ */
52
+ export declare function generateConfigFromTemplate(templateName: string, envVars: Record<string, string>): MCPServerConfig;