@defai.digital/ax-cli 3.1.4 → 3.2.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.
- package/.ax-cli/memory.json +4 -4
- package/README.md +85 -4
- package/dist/agent/context-manager.js +19 -8
- package/dist/agent/context-manager.js.map +1 -1
- package/dist/agent/llm-agent.d.ts +8 -0
- package/dist/agent/llm-agent.js +35 -33
- package/dist/agent/llm-agent.js.map +1 -1
- package/dist/agent/subagent-orchestrator.js +12 -0
- package/dist/agent/subagent-orchestrator.js.map +1 -1
- package/dist/agent/subagent.js +18 -0
- package/dist/agent/subagent.js.map +1 -1
- package/dist/commands/doctor.d.ts +6 -0
- package/dist/commands/doctor.js +527 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/memory.js +5 -1
- package/dist/commands/memory.js.map +1 -1
- package/dist/constants.d.ts +12 -2
- package/dist/constants.js +15 -2
- package/dist/constants.js.map +1 -1
- package/dist/hooks/use-input-handler.d.ts +5 -1
- package/dist/hooks/use-input-handler.js +114 -31
- package/dist/hooks/use-input-handler.js.map +1 -1
- package/dist/index.js +24 -3
- package/dist/index.js.map +1 -1
- package/dist/memory/context-injector.d.ts +15 -1
- package/dist/memory/context-injector.js +18 -1
- package/dist/memory/context-injector.js.map +1 -1
- package/dist/memory/context-store.d.ts +27 -0
- package/dist/memory/context-store.js +60 -6
- package/dist/memory/context-store.js.map +1 -1
- package/dist/schemas/settings-schemas.d.ts +14 -0
- package/dist/schemas/settings-schemas.js +10 -0
- package/dist/schemas/settings-schemas.js.map +1 -1
- package/dist/tools/search.js +39 -16
- package/dist/tools/search.js.map +1 -1
- package/dist/ui/components/chat-history.js +52 -19
- package/dist/ui/components/chat-history.js.map +1 -1
- package/dist/ui/components/chat-input.js +12 -5
- package/dist/ui/components/chat-input.js.map +1 -1
- package/dist/ui/components/command-suggestions.d.ts +12 -0
- package/dist/ui/components/command-suggestions.js +68 -3
- package/dist/ui/components/command-suggestions.js.map +1 -1
- package/dist/ui/components/confirmation-dialog.js +8 -2
- package/dist/ui/components/confirmation-dialog.js.map +1 -1
- package/dist/ui/components/loading-spinner.js +12 -3
- package/dist/ui/components/loading-spinner.js.map +1 -1
- package/dist/ui/components/reasoning-display.d.ts +8 -1
- package/dist/ui/components/reasoning-display.js +14 -8
- package/dist/ui/components/reasoning-display.js.map +1 -1
- package/dist/ui/components/status-bar.d.ts +4 -1
- package/dist/ui/components/status-bar.js +65 -4
- package/dist/ui/components/status-bar.js.map +1 -1
- package/dist/ui/components/subagent-monitor.d.ts +8 -0
- package/dist/ui/components/subagent-monitor.js +36 -50
- package/dist/ui/components/subagent-monitor.js.map +1 -1
- package/dist/ui/components/virtualized-chat-history.js +10 -10
- package/dist/ui/components/virtualized-chat-history.js.map +1 -1
- package/dist/ui/components/welcome-panel.d.ts +1 -1
- package/dist/ui/components/welcome-panel.js +2 -4
- package/dist/ui/components/welcome-panel.js.map +1 -1
- package/dist/utils/error-handler.d.ts +8 -1
- package/dist/utils/error-handler.js +61 -1
- package/dist/utils/error-handler.js.map +1 -1
- package/dist/utils/settings-manager.d.ts +21 -1
- package/dist/utils/settings-manager.js +67 -0
- package/dist/utils/settings-manager.js.map +1 -1
- package/dist/utils/token-counter.d.ts +6 -0
- package/dist/utils/token-counter.js +24 -1
- package/dist/utils/token-counter.js.map +1 -1
- package/package.json +1 -1
|
@@ -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], 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":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGvD,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAUlC,MAAM,UAAU,mBAAmB;IACjC,MAAM,SAAS,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;SACpC,WAAW,CAAC,+CAA+C,CAAC;SAC5D,MAAM,CAAC,QAAQ,EAAE,+BAA+B,CAAC;SACjD,MAAM,CAAC,WAAW,EAAE,sCAAsC,CAAC;SAC3D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC,CAAC;YAE9E,MAAM,OAAO,GAAkB,EAAE,CAAC;YAElC,2BAA2B;YAC3B,OAAO,CAAC,IAAI,CAAC,MAAM,gBAAgB,EAAE,CAAC,CAAC;YAEvC,wBAAwB;YACxB,OAAO,CAAC,IAAI,CAAC,GAAG,gBAAgB,EAAE,CAAC,CAAC;YAEpC,6BAA6B;YAC7B,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,qBAAqB,EAAE,CAAC,CAAC;YAE/C,+BAA+B;YAC/B,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC,CAAC;YAExC,uBAAuB;YACvB,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,eAAe,EAAE,CAAC,CAAC;YAEzC,wBAAwB;YACxB,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,iBAAiB,EAAE,CAAC,CAAC;YAE3C,iBAAiB;YACjB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACN,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YAC3C,CAAC;YAED,6BAA6B;YAC7B,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,gBAAgB;IAC7B,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IACvC,MAAM,YAAY,GAAG,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACzE,MAAM,eAAe,GAAG,EAAE,CAAC;IAE3B,IAAI,YAAY,IAAI,eAAe,EAAE,CAAC;QACpC,OAAO;YACL,IAAI,EAAE,iBAAiB;YACvB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,GAAG,cAAc,EAAE;YAC5B,OAAO,EAAE,CAAC,qBAAqB,eAAe,GAAG,CAAC;SACnD,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,iBAAiB;QACvB,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,GAAG,cAAc,cAAc,eAAe,IAAI;QAC3D,UAAU,EAAE,8BAA8B,eAAe,YAAY;KACtE,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB;IACvB,MAAM,OAAO,GAAkB,EAAE,CAAC;IAElC,cAAc;IACd,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;IACjE,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QAC/B,MAAM,WAAW,GAAG,aAAa,CAAe,cAAc,CAAC,CAAC;QAChE,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,kBAAkB;gBACxB,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,iBAAiB;gBAC1B,OAAO,EAAE,CAAC,aAAa,cAAc,EAAE,CAAC;aACzC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,kBAAkB;gBACxB,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,qBAAqB;gBAC9B,OAAO,EAAE,CAAC,aAAa,cAAc,EAAE,EAAE,UAAU,WAAW,CAAC,KAAK,EAAE,CAAC;gBACvE,UAAU,EAAE,8CAA8C;aAC3D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,kBAAkB;YACxB,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,WAAW;YACpB,OAAO,EAAE,CAAC,sBAAsB,cAAc,EAAE,CAAC;YACjD,UAAU,EAAE,4CAA4C;SACzD,CAAC,CAAC;IACL,CAAC;IAED,mBAAmB;IACnB,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IAC5E,IAAI,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACpC,MAAM,WAAW,GAAG,aAAa,CAAkB,mBAAmB,CAAC,CAAC;QACxE,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,kBAAkB;gBACxB,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,iBAAiB;gBAC1B,OAAO,EAAE,CAAC,aAAa,mBAAmB,EAAE,CAAC;aAC9C,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,kBAAkB;gBACxB,MAAM,EAAE,SAAS;gBACjB,OAAO,EAAE,qBAAqB;gBAC9B,OAAO,EAAE,CAAC,aAAa,mBAAmB,EAAE,EAAE,UAAU,WAAW,CAAC,KAAK,EAAE,CAAC;gBAC5E,UAAU,EAAE,gDAAgD;aAC7D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,kBAAkB;YACxB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,sCAAsC;YAC/C,OAAO,EAAE,CAAC,aAAa,mBAAmB,EAAE,CAAC;SAC9C,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,qBAAqB;IAClC,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;IAErC,UAAU;IACV,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IACnC,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,YAAY;YACrB,OAAO,EAAE,CAAC,WAAW,MAAM,CAAC,MAAM,aAAa,CAAC;SACjD,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,gBAAgB;YACzB,UAAU,EAAE,yCAAyC;SACtD,CAAC,CAAC;IACL,CAAC;IAED,WAAW;IACX,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IACrC,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QAC9B,oBAAoB;QACpB,MAAM,SAAS,GAAG,MAAM,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAC1D,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,UAAU;gBAChB,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,0BAA0B;gBACnC,OAAO,EAAE,CAAC,QAAQ,OAAO,EAAE,CAAC;aAC7B,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,UAAU;gBAChB,MAAM,EAAE,SAAS;gBACjB,OAAO,EAAE,4BAA4B;gBACrC,OAAO,EAAE,CAAC,QAAQ,OAAO,EAAE,EAAE,UAAU,SAAS,CAAC,KAAK,EAAE,CAAC;gBACzD,UAAU,EAAE,gDAAgD;aAC7D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,gBAAgB;YACzB,UAAU,EAAE,0CAA0C;SACvD,CAAC,CAAC;IACL,CAAC;IAED,gCAAgC;IAChC,IAAI,MAAM,IAAI,OAAO,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;QACxC,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;YAChE,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,gBAAgB;oBACtB,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,wBAAwB;oBACjC,OAAO,EAAE,CAAC,UAAU,KAAK,EAAE,CAAC;iBAC7B,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,gBAAgB;oBACtB,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,mBAAmB;oBAC5B,OAAO,EAAE,CAAC,UAAU,OAAO,CAAC,KAAK,EAAE,CAAC;oBACpC,UAAU,EAAE,yCAAyC;iBACtD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB;IAC9B,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAExC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;YACL,IAAI,EAAE,qBAAqB;YAC3B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,qBAAqB;YAC9B,UAAU,EAAE,+CAA+C;SAC5D,CAAC;IACJ,CAAC;IAED,uCAAuC;IACvC,MAAM,WAAW,GAAG,UAAU,CAAC,KAAgC,CAAC,CAAC;IACjE,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO;YACL,IAAI,EAAE,qBAAqB;YAC3B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,GAAG,KAAK,cAAc;YAC/B,OAAO,EAAE;gBACP,YAAY,YAAY,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE;gBACrD,eAAe,YAAY,CAAC,WAAW,CAAC,eAAe,CAAC,EAAE;gBAC1D,aAAa,WAAW,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;aAC3D;SACF,CAAC;IACJ,CAAC;IAED,6BAA6B;IAC7B,OAAO;QACL,IAAI,EAAE,qBAAqB;QAC3B,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,GAAG,KAAK,WAAW;QAC5B,OAAO,EAAE,CAAC,+CAA+C,CAAC;KAC3D,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,eAAe;IAC5B,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;IAErC,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACtD,MAAM,UAAU,GAAG,eAAe,CAAC,UAAU,IAAI,EAAE,CAAC;QACpD,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE5C,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,aAAa;gBACnB,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,2BAA2B;gBACpC,OAAO,EAAE,CAAC,wDAAwD,CAAC;aACpE,CAAC,CAAC;YACH,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,aAAa;YACnB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,GAAG,WAAW,CAAC,MAAM,uBAAuB;YACrD,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;SAC9C,CAAC,CAAC;QAEH,kCAAkC;QAClC,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,MAAM,YAAY,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;YAC5C,MAAM,iBAAiB,GAAG,YAAY,CAAC,SAAS,IAAI,CAAC,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;YAEhG,IAAI,iBAAiB,EAAE,CAAC;gBACtB,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,eAAe,UAAU,EAAE;oBACjC,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,qBAAqB;oBAC9B,OAAO,EAAE,YAAY,CAAC,SAAS;wBAC7B,CAAC,CAAC,CAAC,cAAc,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;wBAC/C,CAAC,CAAC,CAAC,YAAY,YAAY,CAAC,OAAO,EAAE,CAAC;iBACzC,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,eAAe,UAAU,EAAE;oBACjC,MAAM,EAAE,SAAS;oBACjB,OAAO,EAAE,0BAA0B;oBACnC,UAAU,EAAE,qDAAqD;iBAClE,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IAEH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,aAAa;YACnB,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,mCAAmC;YAC5C,OAAO,EAAE,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SAClE,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,iBAAiB;IAC9B,MAAM,OAAO,GAAkB,EAAE,CAAC;IAElC,kCAAkC;IAClC,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,cAAc,CAAC,CAAC;IACnD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,kBAAkB;YACxB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,WAAW;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;SACvE,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,kBAAkB;YACxB,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,WAAW;YACpB,UAAU,EAAE,8DAA8D;SAC3E,CAAC,CAAC;IACL,CAAC;IAED,YAAY;IACZ,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,eAAe,CAAC,CAAC;IACrD,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,KAAK;YACX,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,WAAW;YACpB,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;SACzE,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,KAAK;YACX,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,WAAW;YACpB,OAAO,EAAE,CAAC,6BAA6B,CAAC;YACxC,UAAU,EAAE,4CAA4C;SACzD,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,wBAAwB,CAAC,OAAe;IACrD,IAAI,CAAC;QACH,mDAAmD;QACnD,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACnE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,cAAc,EAAE;gBACxE,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;aAClC,CAAC,CAAC;YAEH,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAChB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC3B,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,8BAA8B;aACtC,CAAC;QACJ,CAAC;QAED,6CAA6C;QAC7C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,GAAG,SAAS,EAAE;YAChD,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;SAClC,CAAC,CAAC;QAEH,2CAA2C;QAC3C,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;YACtE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3B,CAAC;QAED,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,mBAAmB,QAAQ,CAAC,MAAM,EAAE;SAC5C,CAAC;IAEJ,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,IAAI,KAAK,EAAE,IAAI,KAAK,YAAY,IAAI,KAAK,EAAE,IAAI,KAAK,cAAc,EAAE,CAAC;YACnE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;QACzD,CAAC;QAED,IAAI,KAAK,EAAE,IAAI,KAAK,cAAc,EAAE,CAAC;YACnC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;QACzD,CAAC;QAED,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAChE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,iBAAiB,CAC9B,OAAe,EACf,MAAc,EACd,KAAa;IAEb,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;YACxB,OAAO;YACP,MAAM;YACN,OAAO,EAAE,KAAK,EAAE,oBAAoB;SACrC,CAAC,CAAC;QAEH,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YACnC,KAAK;YACL,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;YAC7C,UAAU,EAAE,CAAC;SACd,CAAC,CAAC;QAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAE3B,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,IAAI,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC;QAEhF,IAAI,KAAK,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;YAC1B,YAAY,GAAG,4BAA4B,CAAC;QAC9C,CAAC;aAAM,IAAI,KAAK,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;YACjC,YAAY,GAAG,oCAAoC,CAAC;QACtD,CAAC;aAAM,IAAI,KAAK,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;YACjC,YAAY,GAAG,iBAAiB,CAAC;QACnC,CAAC;aAAM,IAAI,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;YACjC,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;QACrC,CAAC;QAED,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,YAAY;SACpB,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,YAAY,CACzB,OAAe;IAEf,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC1B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,OAAsB,EAAE,OAAgB;IAC9D,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAEjD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,IAAY,CAAC;QACjB,IAAI,KAA+B,CAAC;QAEpC,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;YACtB,KAAK,MAAM;gBACT,IAAI,GAAG,GAAG,CAAC;gBACX,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;gBACpB,SAAS,EAAE,CAAC;gBACZ,MAAM;YACR,KAAK,SAAS;gBACZ,IAAI,GAAG,GAAG,CAAC;gBACX,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;gBACrB,SAAS,EAAE,CAAC;gBACZ,MAAM;YACR,KAAK,MAAM;gBACT,IAAI,GAAG,GAAG,CAAC;gBACX,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;gBAClB,SAAS,EAAE,CAAC;gBACZ,MAAM;QACV,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAEhE,IAAI,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YAC9B,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;gBAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,MAAM,EAAE,CAAC,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QACzD,CAAC;QAED,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,UAAU;IACV,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,SAAS,SAAS,CAAC,CAAC,CAAC;IACpD,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,SAAS,WAAW,CAAC,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,SAAS,SAAS,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,IAAI,SAAS,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC,CAAC;IAC1F,CAAC;SAAM,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC,CAAC;IAC1F,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC,CAAC;IAC5F,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,MAAc;IAClC,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACnB,OAAO,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;IACjD,CAAC;IACD,OAAO,GAAG,MAAM,SAAS,CAAC;AAC5B,CAAC"}
|
package/dist/commands/memory.js
CHANGED
|
@@ -10,7 +10,7 @@ import { execFile } from 'child_process';
|
|
|
10
10
|
import { promisify } from 'util';
|
|
11
11
|
import { parseJsonFile } from '../utils/json-utils.js';
|
|
12
12
|
import { TOKEN_CONFIG } from '../constants.js';
|
|
13
|
-
import { ContextGenerator, ContextStore, StatsCollector, } from '../memory/index.js';
|
|
13
|
+
import { ContextGenerator, ContextStore, StatsCollector, resetDefaultInjector, } from '../memory/index.js';
|
|
14
14
|
const execFileAsync = promisify(execFile);
|
|
15
15
|
// Whitelist of safe editors to prevent command injection
|
|
16
16
|
const SAFE_EDITORS = ['code', 'vim', 'nano', 'vi', 'emacs', 'subl', 'nvim', 'gedit', 'kate', 'notepad'];
|
|
@@ -93,6 +93,8 @@ export function createMemoryCommand() {
|
|
|
93
93
|
console.error(`\n❌ Failed to save: ${saveResult.error}`);
|
|
94
94
|
process.exit(1);
|
|
95
95
|
}
|
|
96
|
+
// Clear cached memory in any active sessions
|
|
97
|
+
resetDefaultInjector();
|
|
96
98
|
console.log(`\n✅ Saved to .ax-cli/memory.json`);
|
|
97
99
|
console.log('\n💡 This context will be automatically included in ax plan/think/spec');
|
|
98
100
|
console.log(' z.ai will cache identical content for faster responses\n');
|
|
@@ -145,6 +147,8 @@ export function createMemoryCommand() {
|
|
|
145
147
|
console.error(`❌ Failed to save: ${saveResult.error}`);
|
|
146
148
|
process.exit(1);
|
|
147
149
|
}
|
|
150
|
+
// Clear cached memory in any active sessions
|
|
151
|
+
resetDefaultInjector();
|
|
148
152
|
const diff = newMemory.context.token_estimate - previousTokens;
|
|
149
153
|
const diffStr = diff >= 0 ? `+${diff}` : `${diff}`;
|
|
150
154
|
console.log('✓ Project memory updated');
|