@defai.digital/ax-cli 3.1.5 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/.ax-cli/memory.json +8 -1
  2. package/README.md +93 -6
  3. package/config/models.yaml +13 -0
  4. package/dist/agent/context-manager.d.ts +5 -5
  5. package/dist/agent/context-manager.js +19 -9
  6. package/dist/agent/context-manager.js.map +1 -1
  7. package/dist/agent/llm-agent.d.ts +0 -2
  8. package/dist/agent/llm-agent.js +7 -50
  9. package/dist/agent/llm-agent.js.map +1 -1
  10. package/dist/agent/subagent.js +2 -1
  11. package/dist/agent/subagent.js.map +1 -1
  12. package/dist/commands/doctor.d.ts +6 -0
  13. package/dist/commands/doctor.js +527 -0
  14. package/dist/commands/doctor.js.map +1 -0
  15. package/dist/commands/frontend.d.ts +9 -0
  16. package/dist/commands/frontend.js +645 -0
  17. package/dist/commands/frontend.js.map +1 -0
  18. package/dist/commands/mcp.js +409 -3
  19. package/dist/commands/mcp.js.map +1 -1
  20. package/dist/commands/models.js +2 -2
  21. package/dist/commands/models.js.map +1 -1
  22. package/dist/commands/setup.js +15 -13
  23. package/dist/commands/setup.js.map +1 -1
  24. package/dist/constants.d.ts +1 -0
  25. package/dist/constants.js +1 -0
  26. package/dist/constants.js.map +1 -1
  27. package/dist/hooks/use-enhanced-input.js +16 -3
  28. package/dist/hooks/use-enhanced-input.js.map +1 -1
  29. package/dist/hooks/use-input-handler.d.ts +5 -1
  30. package/dist/hooks/use-input-handler.js +118 -31
  31. package/dist/hooks/use-input-handler.js.map +1 -1
  32. package/dist/index.js +29 -5
  33. package/dist/index.js.map +1 -1
  34. package/dist/llm/client.d.ts +1 -0
  35. package/dist/llm/types.d.ts +49 -22
  36. package/dist/llm/types.js +12 -8
  37. package/dist/llm/types.js.map +1 -1
  38. package/dist/mcp/config.d.ts +1 -1
  39. package/dist/mcp/config.js +2 -2
  40. package/dist/mcp/config.js.map +1 -1
  41. package/dist/mcp/health.d.ts +111 -0
  42. package/dist/mcp/health.js +244 -0
  43. package/dist/mcp/health.js.map +1 -0
  44. package/dist/mcp/templates.d.ts +52 -0
  45. package/dist/mcp/templates.js +624 -0
  46. package/dist/mcp/templates.js.map +1 -0
  47. package/dist/schemas/api-schemas.d.ts +2 -1
  48. package/dist/schemas/api-schemas.js +6 -4
  49. package/dist/schemas/api-schemas.js.map +1 -1
  50. package/dist/schemas/settings-schemas.d.ts +14 -0
  51. package/dist/schemas/settings-schemas.js +10 -0
  52. package/dist/schemas/settings-schemas.js.map +1 -1
  53. package/dist/tools/bash.js +25 -10
  54. package/dist/tools/bash.js.map +1 -1
  55. package/dist/ui/components/api-key-input.js +2 -2
  56. package/dist/ui/components/api-key-input.js.map +1 -1
  57. package/dist/ui/components/chat-history.js +14 -7
  58. package/dist/ui/components/chat-history.js.map +1 -1
  59. package/dist/ui/components/chat-input.js +12 -7
  60. package/dist/ui/components/chat-input.js.map +1 -1
  61. package/dist/ui/components/chat-interface.js +64 -53
  62. package/dist/ui/components/chat-interface.js.map +1 -1
  63. package/dist/ui/components/keyboard-hints.js +3 -2
  64. package/dist/ui/components/keyboard-hints.js.map +1 -1
  65. package/dist/ui/components/quick-actions.js +1 -0
  66. package/dist/ui/components/quick-actions.js.map +1 -1
  67. package/dist/ui/components/reasoning-display.js +14 -4
  68. package/dist/ui/components/reasoning-display.js.map +1 -1
  69. package/dist/ui/components/toast-notification.d.ts +29 -0
  70. package/dist/ui/components/toast-notification.js +15 -1
  71. package/dist/ui/components/toast-notification.js.map +1 -1
  72. package/dist/ui/components/welcome-panel.js +21 -2
  73. package/dist/ui/components/welcome-panel.js.map +1 -1
  74. package/dist/utils/config-loader.d.ts +1 -0
  75. package/dist/utils/config-loader.js.map +1 -1
  76. package/dist/utils/settings-manager.d.ts +21 -1
  77. package/dist/utils/settings-manager.js +67 -0
  78. package/dist/utils/settings-manager.js.map +1 -1
  79. package/dist/utils/setup-validator.js +1 -0
  80. package/dist/utils/setup-validator.js.map +1 -1
  81. package/dist/utils/text-utils.d.ts +1 -0
  82. package/dist/utils/text-utils.js +12 -0
  83. package/dist/utils/text-utils.js.map +1 -1
  84. package/package.json +1 -2
  85. package/vitest.config.ts +1 -0
@@ -0,0 +1,527 @@
1
+ /**
2
+ * Doctor command - Diagnose AX CLI configuration and environment
3
+ * Checks API configuration, file system, MCP servers, models, and dependencies
4
+ */
5
+ import { Command } from "commander";
6
+ import chalk from "chalk";
7
+ import { existsSync } from "fs";
8
+ import { homedir } from "os";
9
+ import { join } from "path";
10
+ import { exec } from "child_process";
11
+ import { promisify } from "util";
12
+ import OpenAI from "openai";
13
+ import { getSettingsManager } from "../utils/settings-manager.js";
14
+ import { GLM_MODELS } from "../constants.js";
15
+ import { parseJsonFile } from "../utils/json-utils.js";
16
+ const execAsync = promisify(exec);
17
+ export function createDoctorCommand() {
18
+ const doctorCmd = new Command("doctor")
19
+ .description("Diagnose AX CLI configuration and environment")
20
+ .option("--json", "Output results in JSON format")
21
+ .option("--verbose", "Show detailed diagnostic information")
22
+ .action(async (options) => {
23
+ try {
24
+ console.log(chalk.bold.cyan("\n🏥 AX CLI Doctor - Running diagnostics...\n"));
25
+ const results = [];
26
+ // 1. Check Node.js version
27
+ results.push(await checkNodeVersion());
28
+ // 2. Check config files
29
+ results.push(...checkConfigFiles());
30
+ // 3. Check API configuration
31
+ results.push(...await checkApiConfiguration());
32
+ // 4. Check model configuration
33
+ results.push(checkModelConfiguration());
34
+ // 5. Check MCP servers
35
+ results.push(...await checkMCPServers());
36
+ // 6. Check dependencies
37
+ results.push(...await checkDependencies());
38
+ // Output results
39
+ if (options.json) {
40
+ console.log(JSON.stringify(results, null, 2));
41
+ }
42
+ else {
43
+ displayResults(results, options.verbose);
44
+ }
45
+ // Exit code based on results
46
+ const hasFailures = results.some(r => r.status === "fail");
47
+ process.exit(hasFailures ? 1 : 0);
48
+ }
49
+ catch (error) {
50
+ console.error(chalk.red("\n❌ Doctor command failed:"), error instanceof Error ? error.message : String(error));
51
+ process.exit(1);
52
+ }
53
+ });
54
+ return doctorCmd;
55
+ }
56
+ /**
57
+ * Check Node.js version
58
+ */
59
+ async function checkNodeVersion() {
60
+ const currentVersion = process.version;
61
+ const majorVersion = parseInt(currentVersion.slice(1).split('.')?.[0] || '0', 10);
62
+ const requiredVersion = 24;
63
+ if (majorVersion >= requiredVersion) {
64
+ return {
65
+ name: "Node.js Version",
66
+ status: "pass",
67
+ message: `${currentVersion}`,
68
+ details: [`Required: Node.js ${requiredVersion}+`],
69
+ };
70
+ }
71
+ return {
72
+ name: "Node.js Version",
73
+ status: "fail",
74
+ message: `${currentVersion} (requires ${requiredVersion}+)`,
75
+ suggestion: `Upgrade Node.js to version ${requiredVersion} or higher`,
76
+ };
77
+ }
78
+ /**
79
+ * Check configuration files
80
+ */
81
+ function checkConfigFiles() {
82
+ const results = [];
83
+ // User config
84
+ const userConfigPath = join(homedir(), ".ax-cli", "config.json");
85
+ if (existsSync(userConfigPath)) {
86
+ const parseResult = parseJsonFile(userConfigPath);
87
+ if (parseResult.success) {
88
+ results.push({
89
+ name: "User Config File",
90
+ status: "pass",
91
+ message: "Found and valid",
92
+ details: [`Location: ${userConfigPath}`],
93
+ });
94
+ }
95
+ else {
96
+ results.push({
97
+ name: "User Config File",
98
+ status: "fail",
99
+ message: "Found but corrupted",
100
+ details: [`Location: ${userConfigPath}`, `Error: ${parseResult.error}`],
101
+ suggestion: "Run 'ax-cli setup' to recreate configuration",
102
+ });
103
+ }
104
+ }
105
+ else {
106
+ results.push({
107
+ name: "User Config File",
108
+ status: "warning",
109
+ message: "Not found",
110
+ details: [`Expected location: ${userConfigPath}`],
111
+ suggestion: "Run 'ax-cli setup' to create configuration",
112
+ });
113
+ }
114
+ // Project settings
115
+ const projectSettingsPath = join(process.cwd(), ".ax-cli", "settings.json");
116
+ if (existsSync(projectSettingsPath)) {
117
+ const parseResult = parseJsonFile(projectSettingsPath);
118
+ if (parseResult.success) {
119
+ results.push({
120
+ name: "Project Settings",
121
+ status: "pass",
122
+ message: "Found and valid",
123
+ details: [`Location: ${projectSettingsPath}`],
124
+ });
125
+ }
126
+ else {
127
+ results.push({
128
+ name: "Project Settings",
129
+ status: "warning",
130
+ message: "Found but corrupted",
131
+ details: [`Location: ${projectSettingsPath}`, `Error: ${parseResult.error}`],
132
+ suggestion: "Run 'ax-cli init' to recreate project settings",
133
+ });
134
+ }
135
+ }
136
+ else {
137
+ results.push({
138
+ name: "Project Settings",
139
+ status: "pass",
140
+ message: "Not configured (using user settings)",
141
+ details: [`Optional: ${projectSettingsPath}`],
142
+ });
143
+ }
144
+ return results;
145
+ }
146
+ /**
147
+ * Check API configuration
148
+ */
149
+ async function checkApiConfiguration() {
150
+ const results = [];
151
+ const manager = getSettingsManager();
152
+ // API Key
153
+ const apiKey = manager.getApiKey();
154
+ if (apiKey && apiKey.trim()) {
155
+ results.push({
156
+ name: "API Key",
157
+ status: "pass",
158
+ message: "Configured",
159
+ details: [`Length: ${apiKey.length} characters`],
160
+ });
161
+ }
162
+ else {
163
+ results.push({
164
+ name: "API Key",
165
+ status: "fail",
166
+ message: "Not configured",
167
+ suggestion: "Run 'ax-cli setup' to configure API key",
168
+ });
169
+ }
170
+ // Base URL
171
+ const baseURL = manager.getBaseURL();
172
+ if (baseURL && baseURL.trim()) {
173
+ // Test reachability
174
+ const reachable = await testEndpointReachability(baseURL);
175
+ if (reachable.success) {
176
+ results.push({
177
+ name: "Base URL",
178
+ status: "pass",
179
+ message: "Configured and reachable",
180
+ details: [`URL: ${baseURL}`],
181
+ });
182
+ }
183
+ else {
184
+ results.push({
185
+ name: "Base URL",
186
+ status: "warning",
187
+ message: "Configured but unreachable",
188
+ details: [`URL: ${baseURL}`, `Error: ${reachable.error}`],
189
+ suggestion: "Check internet connection or firewall settings",
190
+ });
191
+ }
192
+ }
193
+ else {
194
+ results.push({
195
+ name: "Base URL",
196
+ status: "fail",
197
+ message: "Not configured",
198
+ suggestion: "Run 'ax-cli setup' to configure base URL",
199
+ });
200
+ }
201
+ // Test API with minimal request
202
+ if (apiKey && baseURL) {
203
+ const model = manager.getCurrentModel();
204
+ if (model) {
205
+ const apiTest = await testApiConnection(baseURL, apiKey, model);
206
+ if (apiTest.success) {
207
+ results.push({
208
+ name: "API Connection",
209
+ status: "pass",
210
+ message: "Successfully connected",
211
+ details: [`Model: ${model}`],
212
+ });
213
+ }
214
+ else {
215
+ results.push({
216
+ name: "API Connection",
217
+ status: "fail",
218
+ message: "Connection failed",
219
+ details: [`Error: ${apiTest.error}`],
220
+ suggestion: "Verify API key and base URL are correct",
221
+ });
222
+ }
223
+ }
224
+ }
225
+ return results;
226
+ }
227
+ /**
228
+ * Check model configuration
229
+ */
230
+ function checkModelConfiguration() {
231
+ const manager = getSettingsManager();
232
+ const model = manager.getCurrentModel();
233
+ if (!model) {
234
+ return {
235
+ name: "Model Configuration",
236
+ status: "fail",
237
+ message: "No model configured",
238
+ suggestion: "Run 'ax-cli setup' to configure default model",
239
+ };
240
+ }
241
+ // Check if model is in predefined list
242
+ const modelConfig = GLM_MODELS[model];
243
+ if (modelConfig) {
244
+ return {
245
+ name: "Model Configuration",
246
+ status: "pass",
247
+ message: `${model} (supported)`,
248
+ details: [
249
+ `Context: ${formatTokens(modelConfig.contextWindow)}`,
250
+ `Max Output: ${formatTokens(modelConfig.maxOutputTokens)}`,
251
+ `Thinking: ${modelConfig.supportsThinking ? "Yes" : "No"}`,
252
+ ],
253
+ };
254
+ }
255
+ // Custom model (Ollama, etc)
256
+ return {
257
+ name: "Model Configuration",
258
+ status: "pass",
259
+ message: `${model} (custom)`,
260
+ details: ["This is a custom model not in predefined list"],
261
+ };
262
+ }
263
+ /**
264
+ * Check MCP servers
265
+ */
266
+ async function checkMCPServers() {
267
+ const results = [];
268
+ const manager = getSettingsManager();
269
+ try {
270
+ const projectSettings = manager.loadProjectSettings();
271
+ const mcpServers = projectSettings.mcpServers || {};
272
+ const serverNames = Object.keys(mcpServers);
273
+ if (serverNames.length === 0) {
274
+ results.push({
275
+ name: "MCP Servers",
276
+ status: "pass",
277
+ message: "No MCP servers configured",
278
+ details: ["Optional feature - run 'ax-cli mcp add' to add servers"],
279
+ });
280
+ return results;
281
+ }
282
+ results.push({
283
+ name: "MCP Servers",
284
+ status: "pass",
285
+ message: `${serverNames.length} server(s) configured`,
286
+ details: serverNames.map(name => `• ${name}`),
287
+ });
288
+ // Check each server configuration
289
+ for (const serverName of serverNames) {
290
+ const serverConfig = mcpServers[serverName];
291
+ const hasValidTransport = serverConfig.transport || (serverConfig.command && serverConfig.args);
292
+ if (hasValidTransport) {
293
+ results.push({
294
+ name: `MCP Server: ${serverName}`,
295
+ status: "pass",
296
+ message: "Configuration valid",
297
+ details: serverConfig.transport
298
+ ? [`Transport: ${serverConfig.transport.type}`]
299
+ : [`Command: ${serverConfig.command}`],
300
+ });
301
+ }
302
+ else {
303
+ results.push({
304
+ name: `MCP Server: ${serverName}`,
305
+ status: "warning",
306
+ message: "Configuration incomplete",
307
+ suggestion: "Check server configuration in .ax-cli/settings.json",
308
+ });
309
+ }
310
+ }
311
+ }
312
+ catch (error) {
313
+ results.push({
314
+ name: "MCP Servers",
315
+ status: "warning",
316
+ message: "Could not check MCP configuration",
317
+ details: [error instanceof Error ? error.message : String(error)],
318
+ });
319
+ }
320
+ return results;
321
+ }
322
+ /**
323
+ * Check dependencies
324
+ */
325
+ async function checkDependencies() {
326
+ const results = [];
327
+ // Check ripgrep (for search tool)
328
+ const rgCheck = await checkCommand("rg --version");
329
+ if (rgCheck.found) {
330
+ results.push({
331
+ name: "ripgrep (search)",
332
+ status: "pass",
333
+ message: "Installed",
334
+ details: rgCheck.version ? [`Version: ${rgCheck.version}`] : undefined,
335
+ });
336
+ }
337
+ else {
338
+ results.push({
339
+ name: "ripgrep (search)",
340
+ status: "warning",
341
+ message: "Not found",
342
+ suggestion: "Install ripgrep for faster file search: brew install ripgrep",
343
+ });
344
+ }
345
+ // Check git
346
+ const gitCheck = await checkCommand("git --version");
347
+ if (gitCheck.found) {
348
+ results.push({
349
+ name: "git",
350
+ status: "pass",
351
+ message: "Installed",
352
+ details: gitCheck.version ? [`Version: ${gitCheck.version}`] : undefined,
353
+ });
354
+ }
355
+ else {
356
+ results.push({
357
+ name: "git",
358
+ status: "warning",
359
+ message: "Not found",
360
+ details: ["Required for git operations"],
361
+ suggestion: "Install git: https://git-scm.com/downloads",
362
+ });
363
+ }
364
+ return results;
365
+ }
366
+ /**
367
+ * Test endpoint reachability
368
+ */
369
+ async function testEndpointReachability(baseURL) {
370
+ try {
371
+ // For local endpoints, check if service is running
372
+ if (baseURL.includes("localhost") || baseURL.includes("127.0.0.1")) {
373
+ const response = await fetch(baseURL.replace("/v1", "") + "/api/version", {
374
+ method: "GET",
375
+ signal: AbortSignal.timeout(3000),
376
+ });
377
+ if (response.ok) {
378
+ return { success: true };
379
+ }
380
+ return {
381
+ success: false,
382
+ error: "Local service not responding",
383
+ };
384
+ }
385
+ // For remote endpoints, try a simple request
386
+ const response = await fetch(baseURL + "/models", {
387
+ method: "GET",
388
+ signal: AbortSignal.timeout(5000),
389
+ });
390
+ // Any response means endpoint is reachable
391
+ if (response.status === 401 || response.status === 403 || response.ok) {
392
+ return { success: true };
393
+ }
394
+ return {
395
+ success: false,
396
+ error: `Server returned ${response.status}`,
397
+ };
398
+ }
399
+ catch (error) {
400
+ if (error?.name === "AbortError" || error?.name === "TimeoutError") {
401
+ return { success: false, error: "Connection timeout" };
402
+ }
403
+ if (error?.code === "ECONNREFUSED") {
404
+ return { success: false, error: "Connection refused" };
405
+ }
406
+ return {
407
+ success: false,
408
+ error: error instanceof Error ? error.message : "Network error",
409
+ };
410
+ }
411
+ }
412
+ /**
413
+ * Test API connection with minimal request
414
+ */
415
+ async function testApiConnection(baseURL, apiKey, model) {
416
+ try {
417
+ const client = new OpenAI({
418
+ baseURL,
419
+ apiKey,
420
+ timeout: 10000, // 10 second timeout
421
+ });
422
+ await client.chat.completions.create({
423
+ model,
424
+ messages: [{ role: "user", content: "test" }],
425
+ max_tokens: 1,
426
+ });
427
+ return { success: true };
428
+ }
429
+ catch (error) {
430
+ let errorMessage = error instanceof Error ? error.message : "Connection failed";
431
+ if (error?.status === 401) {
432
+ errorMessage = "Invalid or expired API key";
433
+ }
434
+ else if (error?.status === 403) {
435
+ errorMessage = "API key lacks required permissions";
436
+ }
437
+ else if (error?.status === 404) {
438
+ errorMessage = "Model not found";
439
+ }
440
+ else if (error?.error?.message) {
441
+ errorMessage = error.error.message;
442
+ }
443
+ return {
444
+ success: false,
445
+ error: errorMessage,
446
+ };
447
+ }
448
+ }
449
+ /**
450
+ * Check if a command exists
451
+ */
452
+ async function checkCommand(command) {
453
+ try {
454
+ const { stdout } = await execAsync(command, { timeout: 3000 });
455
+ const version = stdout.trim().split("\n")?.[0];
456
+ return { found: true, version };
457
+ }
458
+ catch {
459
+ return { found: false };
460
+ }
461
+ }
462
+ /**
463
+ * Display results in formatted output
464
+ */
465
+ function displayResults(results, verbose) {
466
+ let passCount = 0;
467
+ let warnCount = 0;
468
+ let failCount = 0;
469
+ console.log(chalk.bold("Diagnostic Results:\n"));
470
+ for (const result of results) {
471
+ let icon;
472
+ let color;
473
+ switch (result.status) {
474
+ case "pass":
475
+ icon = "✓";
476
+ color = chalk.green;
477
+ passCount++;
478
+ break;
479
+ case "warning":
480
+ icon = "⚠";
481
+ color = chalk.yellow;
482
+ warnCount++;
483
+ break;
484
+ case "fail":
485
+ icon = "✗";
486
+ color = chalk.red;
487
+ failCount++;
488
+ break;
489
+ }
490
+ console.log(color(`${icon} ${result.name}: ${result.message}`));
491
+ if (verbose && result.details) {
492
+ result.details.forEach(detail => {
493
+ console.log(chalk.dim(` ${detail}`));
494
+ });
495
+ }
496
+ if (result.suggestion) {
497
+ console.log(chalk.cyan(` 💡 ${result.suggestion}`));
498
+ }
499
+ console.log();
500
+ }
501
+ // Summary
502
+ console.log(chalk.bold("\nSummary:"));
503
+ console.log(chalk.green(` ✓ ${passCount} passed`));
504
+ if (warnCount > 0) {
505
+ console.log(chalk.yellow(` ⚠ ${warnCount} warnings`));
506
+ }
507
+ if (failCount > 0) {
508
+ console.log(chalk.red(` ✗ ${failCount} failed`));
509
+ }
510
+ console.log();
511
+ if (failCount === 0 && warnCount === 0) {
512
+ console.log(chalk.green.bold("✅ All checks passed! AX CLI is configured correctly.\n"));
513
+ }
514
+ else if (failCount > 0) {
515
+ console.log(chalk.red.bold("❌ Some checks failed. Please address the issues above.\n"));
516
+ }
517
+ else {
518
+ console.log(chalk.yellow.bold("⚠️ Some warnings detected. Review suggestions above.\n"));
519
+ }
520
+ }
521
+ function formatTokens(tokens) {
522
+ if (tokens >= 1000) {
523
+ return `${(tokens / 1000).toFixed(0)}K tokens`;
524
+ }
525
+ return `${tokens} tokens`;
526
+ }
527
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Frontend development workflow commands
3
+ * Specialized commands for design-to-code workflows with Figma integration
4
+ */
5
+ import { Command } from 'commander';
6
+ /**
7
+ * Create the frontend command group
8
+ */
9
+ export declare function createFrontendCommand(): Command;