@defai.digital/ax-cli 2.3.0 → 2.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 (104) hide show
  1. package/.ax-cli/CUSTOM.md +111 -89
  2. package/.ax-cli/index.json +4 -3
  3. package/README.md +43 -16
  4. package/config/prompts.yaml +9 -0
  5. package/config/settings.yaml +2 -0
  6. package/dist/agent/llm-agent.d.ts +17 -0
  7. package/dist/agent/llm-agent.js +151 -52
  8. package/dist/agent/llm-agent.js.map +1 -1
  9. package/dist/commands/init/wizard.d.ts +66 -0
  10. package/dist/commands/init/wizard.js +310 -0
  11. package/dist/commands/init/wizard.js.map +1 -0
  12. package/dist/commands/init.js +146 -26
  13. package/dist/commands/init.js.map +1 -1
  14. package/dist/commands/mcp.js +3 -2
  15. package/dist/commands/mcp.js.map +1 -1
  16. package/dist/commands/memory.d.ts +5 -0
  17. package/dist/commands/memory.js +257 -0
  18. package/dist/commands/memory.js.map +1 -0
  19. package/dist/commands/setup.js +1 -1
  20. package/dist/commands/setup.js.map +1 -1
  21. package/dist/commands/templates.d.ts +5 -0
  22. package/dist/commands/templates.js +244 -0
  23. package/dist/commands/templates.js.map +1 -0
  24. package/dist/commands/update.js +9 -2
  25. package/dist/commands/update.js.map +1 -1
  26. package/dist/commands/usage.js +1 -1
  27. package/dist/commands/usage.js.map +1 -1
  28. package/dist/constants.d.ts +2 -0
  29. package/dist/constants.js +2 -0
  30. package/dist/constants.js.map +1 -1
  31. package/dist/hooks/use-input-handler.js +49 -12
  32. package/dist/hooks/use-input-handler.js.map +1 -1
  33. package/dist/index.js +143 -16
  34. package/dist/index.js.map +1 -1
  35. package/dist/llm/client.d.ts +5 -0
  36. package/dist/llm/client.js +43 -37
  37. package/dist/llm/client.js.map +1 -1
  38. package/dist/schemas/index.d.ts +69 -0
  39. package/dist/schemas/index.js +29 -0
  40. package/dist/schemas/index.js.map +1 -1
  41. package/dist/schemas/yaml-schemas.d.ts +10 -0
  42. package/dist/schemas/yaml-schemas.js +2 -0
  43. package/dist/schemas/yaml-schemas.js.map +1 -1
  44. package/dist/tools/search.js +7 -1
  45. package/dist/tools/search.js.map +1 -1
  46. package/dist/tools/text-editor.js +24 -14
  47. package/dist/tools/text-editor.js.map +1 -1
  48. package/dist/tools/todo-tool.js +62 -21
  49. package/dist/tools/todo-tool.js.map +1 -1
  50. package/dist/types/template.d.ts +53 -0
  51. package/dist/types/template.js +5 -0
  52. package/dist/types/template.js.map +1 -0
  53. package/dist/ui/components/command-suggestions.js +2 -2
  54. package/dist/ui/components/command-suggestions.js.map +1 -1
  55. package/dist/utils/cache.d.ts +1 -0
  56. package/dist/utils/cache.js +39 -5
  57. package/dist/utils/cache.js.map +1 -1
  58. package/dist/utils/config-loader.d.ts +2 -0
  59. package/dist/utils/config-loader.js +2 -1
  60. package/dist/utils/config-loader.js.map +1 -1
  61. package/dist/utils/confirmation-service.js +6 -3
  62. package/dist/utils/confirmation-service.js.map +1 -1
  63. package/dist/utils/error-handler.d.ts +5 -0
  64. package/dist/utils/error-handler.js +9 -3
  65. package/dist/utils/error-handler.js.map +1 -1
  66. package/dist/utils/init-previewer.d.ts +56 -0
  67. package/dist/utils/init-previewer.js +217 -0
  68. package/dist/utils/init-previewer.js.map +1 -0
  69. package/dist/utils/init-validator.d.ts +61 -0
  70. package/dist/utils/init-validator.js +248 -0
  71. package/dist/utils/init-validator.js.map +1 -0
  72. package/dist/utils/llm-optimized-instruction-generator.d.ts +31 -0
  73. package/dist/utils/llm-optimized-instruction-generator.js +296 -0
  74. package/dist/utils/llm-optimized-instruction-generator.js.map +1 -0
  75. package/dist/utils/onboarding-manager.d.ts +45 -0
  76. package/dist/utils/onboarding-manager.js +130 -0
  77. package/dist/utils/onboarding-manager.js.map +1 -0
  78. package/dist/utils/path-utils.d.ts +83 -0
  79. package/dist/utils/path-utils.js +122 -0
  80. package/dist/utils/path-utils.js.map +1 -0
  81. package/dist/utils/progress-tracker.d.ts +51 -0
  82. package/dist/utils/progress-tracker.js +152 -0
  83. package/dist/utils/progress-tracker.js.map +1 -0
  84. package/dist/utils/project-analyzer.js +8 -14
  85. package/dist/utils/project-analyzer.js.map +1 -1
  86. package/dist/utils/settings-manager.d.ts +3 -3
  87. package/dist/utils/settings-manager.js +6 -13
  88. package/dist/utils/settings-manager.js.map +1 -1
  89. package/dist/utils/string-utils.d.ts +19 -0
  90. package/dist/utils/string-utils.js +28 -0
  91. package/dist/utils/string-utils.js.map +1 -0
  92. package/dist/utils/template-manager.d.ts +54 -0
  93. package/dist/utils/template-manager.js +421 -0
  94. package/dist/utils/template-manager.js.map +1 -0
  95. package/dist/utils/text-utils.js +3 -1
  96. package/dist/utils/text-utils.js.map +1 -1
  97. package/package.json +2 -1
  98. package/vitest.config.ts +6 -0
  99. package/dist/utils/model-config.d.ts +0 -28
  100. package/dist/utils/model-config.js +0 -43
  101. package/dist/utils/model-config.js.map +0 -1
  102. package/dist/utils/tool-helpers.d.ts +0 -25
  103. package/dist/utils/tool-helpers.js +0 -53
  104. package/dist/utils/tool-helpers.js.map +0 -1
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Template Manager for AX CLI
3
+ * Manages project templates including built-in and user-created templates
4
+ */
5
+ import { type ProjectTemplate } from '../schemas/index.js';
6
+ import type { TemplateListItem, TemplateCreateOptions } from '../types/template.js';
7
+ export declare class TemplateManager {
8
+ private static readonly BUILTIN_TEMPLATES_DIR;
9
+ private static readonly USER_TEMPLATES_DIR;
10
+ /**
11
+ * Ensure user templates directory exists
12
+ */
13
+ private static ensureUserTemplatesDir;
14
+ /**
15
+ * List all available templates (built-in + user)
16
+ */
17
+ static listTemplates(): TemplateListItem[];
18
+ /**
19
+ * Get a specific template by ID
20
+ */
21
+ static getTemplate(templateId: string): ProjectTemplate | null;
22
+ /**
23
+ * Load and validate a template from file
24
+ */
25
+ private static loadTemplate;
26
+ /**
27
+ * Save a user template
28
+ */
29
+ static saveTemplate(template: ProjectTemplate): boolean;
30
+ /**
31
+ * Generate a unique template ID
32
+ */
33
+ private static generateUniqueId;
34
+ /**
35
+ * Create a new template from current project
36
+ */
37
+ static createFromProject(projectRoot: string, options: TemplateCreateOptions): ProjectTemplate;
38
+ /**
39
+ * Delete a user template
40
+ */
41
+ static deleteTemplate(templateId: string): boolean;
42
+ /**
43
+ * Export a template to a file (with atomic write)
44
+ */
45
+ static exportTemplate(templateId: string, outputPath: string): boolean;
46
+ /**
47
+ * Import a template from a file
48
+ */
49
+ static importTemplate(filePath: string): boolean;
50
+ /**
51
+ * Apply a template to a project directory
52
+ */
53
+ static applyTemplate(template: ProjectTemplate, projectRoot: string): boolean;
54
+ }
@@ -0,0 +1,421 @@
1
+ /**
2
+ * Template Manager for AX CLI
3
+ * Manages project templates including built-in and user-created templates
4
+ */
5
+ import * as fs from 'fs';
6
+ import * as path from 'path';
7
+ import * as os from 'os';
8
+ import { fileURLToPath } from 'url';
9
+ import { safeValidateProjectTemplate, ProjectTemplateSchema } from '../schemas/index.js';
10
+ import { parseJsonFile } from './json-utils.js';
11
+ // ESM-compatible __dirname
12
+ const __filename = fileURLToPath(import.meta.url);
13
+ const __dirname = path.dirname(__filename);
14
+ export class TemplateManager {
15
+ static BUILTIN_TEMPLATES_DIR = path.join(__dirname, '../../templates');
16
+ static USER_TEMPLATES_DIR = path.join(os.homedir(), '.ax-cli', 'templates');
17
+ /**
18
+ * Ensure user templates directory exists
19
+ */
20
+ static ensureUserTemplatesDir() {
21
+ if (!fs.existsSync(this.USER_TEMPLATES_DIR)) {
22
+ fs.mkdirSync(this.USER_TEMPLATES_DIR, { recursive: true });
23
+ }
24
+ }
25
+ /**
26
+ * List all available templates (built-in + user)
27
+ */
28
+ static listTemplates() {
29
+ const templates = [];
30
+ // Load built-in templates
31
+ if (fs.existsSync(this.BUILTIN_TEMPLATES_DIR)) {
32
+ const builtinFiles = fs.readdirSync(this.BUILTIN_TEMPLATES_DIR)
33
+ .filter(f => f.endsWith('.json'));
34
+ for (const file of builtinFiles) {
35
+ try {
36
+ const templatePath = path.join(this.BUILTIN_TEMPLATES_DIR, file);
37
+ const template = this.loadTemplate(templatePath);
38
+ if (template) {
39
+ templates.push({
40
+ id: template.id,
41
+ name: template.name,
42
+ description: template.description,
43
+ projectType: template.projectType,
44
+ tags: template.tags,
45
+ isBuiltIn: true,
46
+ });
47
+ }
48
+ }
49
+ catch (error) {
50
+ // Skip invalid templates
51
+ console.warn(`Failed to load built-in template ${file}:`, error);
52
+ }
53
+ }
54
+ }
55
+ // Load user templates
56
+ this.ensureUserTemplatesDir();
57
+ const userFiles = fs.readdirSync(this.USER_TEMPLATES_DIR)
58
+ .filter(f => f.endsWith('.json'));
59
+ for (const file of userFiles) {
60
+ try {
61
+ const templatePath = path.join(this.USER_TEMPLATES_DIR, file);
62
+ const template = this.loadTemplate(templatePath);
63
+ if (template) {
64
+ templates.push({
65
+ id: template.id,
66
+ name: template.name,
67
+ description: template.description,
68
+ projectType: template.projectType,
69
+ tags: template.tags,
70
+ isBuiltIn: false,
71
+ });
72
+ }
73
+ }
74
+ catch (error) {
75
+ // Skip invalid templates
76
+ console.warn(`Failed to load user template ${file}:`, error);
77
+ }
78
+ }
79
+ return templates;
80
+ }
81
+ /**
82
+ * Get a specific template by ID
83
+ */
84
+ static getTemplate(templateId) {
85
+ // Check built-in templates first
86
+ const builtinPath = path.join(this.BUILTIN_TEMPLATES_DIR, `${templateId}.json`);
87
+ if (fs.existsSync(builtinPath)) {
88
+ return this.loadTemplate(builtinPath);
89
+ }
90
+ // Check user templates
91
+ this.ensureUserTemplatesDir();
92
+ const userPath = path.join(this.USER_TEMPLATES_DIR, `${templateId}.json`);
93
+ if (fs.existsSync(userPath)) {
94
+ return this.loadTemplate(userPath);
95
+ }
96
+ return null;
97
+ }
98
+ /**
99
+ * Load and validate a template from file
100
+ */
101
+ static loadTemplate(filePath) {
102
+ try {
103
+ const result = parseJsonFile(filePath, ProjectTemplateSchema);
104
+ if (result.success) {
105
+ return result.data;
106
+ }
107
+ console.warn(`Invalid template at ${filePath}:`, result.error);
108
+ return null;
109
+ }
110
+ catch (error) {
111
+ console.warn(`Failed to load template at ${filePath}:`, error);
112
+ return null;
113
+ }
114
+ }
115
+ /**
116
+ * Save a user template
117
+ */
118
+ static saveTemplate(template) {
119
+ try {
120
+ // Only save user templates (not built-in)
121
+ if (template.isBuiltIn) {
122
+ console.error('Cannot modify built-in templates');
123
+ return false;
124
+ }
125
+ this.ensureUserTemplatesDir();
126
+ const templatePath = path.join(this.USER_TEMPLATES_DIR, `${template.id}.json`);
127
+ // Validate template before saving
128
+ const result = safeValidateProjectTemplate(template);
129
+ if (!result.success) {
130
+ console.error('Invalid template data:', result.error);
131
+ return false;
132
+ }
133
+ // Atomic write using temporary file
134
+ const tmpPath = `${templatePath}.tmp`;
135
+ try {
136
+ fs.writeFileSync(tmpPath, JSON.stringify(template, null, 2), 'utf-8');
137
+ fs.renameSync(tmpPath, templatePath); // Atomic operation on POSIX systems
138
+ }
139
+ catch (writeError) {
140
+ // Cleanup temp file on error
141
+ if (fs.existsSync(tmpPath)) {
142
+ try {
143
+ fs.unlinkSync(tmpPath);
144
+ }
145
+ catch {
146
+ // Ignore cleanup errors
147
+ }
148
+ }
149
+ throw writeError;
150
+ }
151
+ return true;
152
+ }
153
+ catch (error) {
154
+ console.error('Failed to save template:', error);
155
+ return false;
156
+ }
157
+ }
158
+ /**
159
+ * Generate a unique template ID
160
+ */
161
+ static generateUniqueId(name) {
162
+ const MAX_ATTEMPTS = 1000;
163
+ let baseId = name.toLowerCase()
164
+ .replace(/\s+/g, '-')
165
+ .replace(/[^a-z0-9-]/g, '')
166
+ .substring(0, 50); // Limit base ID length
167
+ if (!baseId) {
168
+ baseId = 'template'; // Fallback for empty names
169
+ }
170
+ let id = baseId;
171
+ let counter = 1;
172
+ while (this.getTemplate(id)) {
173
+ if (counter >= MAX_ATTEMPTS) {
174
+ // Use timestamp + random string to ensure uniqueness
175
+ const randomSuffix = Math.random().toString(36).substring(2, 9);
176
+ id = `${baseId}-${Date.now()}-${randomSuffix}`;
177
+ break;
178
+ }
179
+ id = `${baseId}-${counter++}`;
180
+ }
181
+ // Final verification
182
+ if (this.getTemplate(id)) {
183
+ throw new Error('Failed to generate unique template ID after maximum attempts');
184
+ }
185
+ return id;
186
+ }
187
+ /**
188
+ * Create a new template from current project
189
+ */
190
+ static createFromProject(projectRoot, options) {
191
+ const customMdPath = path.join(projectRoot, '.ax-cli', 'CUSTOM.md');
192
+ const indexPath = path.join(projectRoot, '.ax-cli', 'index.json');
193
+ // Load existing instructions if available
194
+ let instructions = '';
195
+ if (fs.existsSync(customMdPath)) {
196
+ instructions = fs.readFileSync(customMdPath, 'utf-8');
197
+ }
198
+ // Validate instructions are non-empty
199
+ if (!instructions || instructions.trim().length === 0) {
200
+ throw new Error('Cannot create template: CUSTOM.md is empty. ' +
201
+ 'Run "ax-cli init" first to generate custom instructions.');
202
+ }
203
+ // Validate minimum length
204
+ if (instructions.trim().length < 100) {
205
+ throw new Error('Cannot create template: CUSTOM.md is too short (< 100 characters). ' +
206
+ 'Ensure the file contains meaningful instructions.');
207
+ }
208
+ // Load existing metadata if available
209
+ let metadata = {};
210
+ if (fs.existsSync(indexPath)) {
211
+ const result = parseJsonFile(indexPath);
212
+ if (result.success) {
213
+ const indexData = result.data;
214
+ metadata = {
215
+ conventions: indexData.conventions,
216
+ scripts: indexData.scripts,
217
+ directories: indexData.directories,
218
+ keyFiles: indexData.keyFiles,
219
+ };
220
+ }
221
+ // Use empty metadata if index.json is invalid
222
+ }
223
+ const template = {
224
+ id: this.generateUniqueId(options.name),
225
+ name: options.name,
226
+ description: options.description,
227
+ version: '1.0.0',
228
+ projectType: options.projectType,
229
+ tags: options.tags || [],
230
+ instructions,
231
+ metadata,
232
+ createdAt: new Date().toISOString(),
233
+ isBuiltIn: false,
234
+ author: options.author,
235
+ };
236
+ return template;
237
+ }
238
+ /**
239
+ * Delete a user template
240
+ */
241
+ static deleteTemplate(templateId) {
242
+ try {
243
+ const template = this.getTemplate(templateId);
244
+ if (!template) {
245
+ console.error(`Template '${templateId}' not found`);
246
+ return false;
247
+ }
248
+ if (template.isBuiltIn) {
249
+ console.error('Cannot delete built-in templates');
250
+ return false;
251
+ }
252
+ const userPath = path.join(this.USER_TEMPLATES_DIR, `${templateId}.json`);
253
+ fs.unlinkSync(userPath);
254
+ return true;
255
+ }
256
+ catch (error) {
257
+ console.error('Failed to delete template:', error);
258
+ return false;
259
+ }
260
+ }
261
+ /**
262
+ * Export a template to a file (with atomic write)
263
+ */
264
+ static exportTemplate(templateId, outputPath) {
265
+ try {
266
+ const template = this.getTemplate(templateId);
267
+ if (!template) {
268
+ console.error(`Template '${templateId}' not found`);
269
+ return false;
270
+ }
271
+ // Atomic write using temporary file
272
+ const tmpPath = `${outputPath}.tmp`;
273
+ try {
274
+ fs.writeFileSync(tmpPath, JSON.stringify(template, null, 2), 'utf-8');
275
+ fs.renameSync(tmpPath, outputPath); // Atomic operation
276
+ }
277
+ catch (writeError) {
278
+ // Cleanup temp file on error
279
+ if (fs.existsSync(tmpPath)) {
280
+ try {
281
+ fs.unlinkSync(tmpPath);
282
+ }
283
+ catch {
284
+ // Ignore cleanup errors
285
+ }
286
+ }
287
+ throw writeError;
288
+ }
289
+ return true;
290
+ }
291
+ catch (error) {
292
+ console.error('Failed to export template:', error);
293
+ return false;
294
+ }
295
+ }
296
+ /**
297
+ * Import a template from a file
298
+ */
299
+ static importTemplate(filePath) {
300
+ try {
301
+ // Validate path to prevent directory traversal attacks
302
+ const resolvedPath = path.resolve(filePath);
303
+ // Check if path is absolute
304
+ if (!path.isAbsolute(resolvedPath)) {
305
+ console.error('Invalid file path - must be absolute');
306
+ return false;
307
+ }
308
+ // Ensure path is within safe directories (home or cwd)
309
+ const userHome = os.homedir();
310
+ const cwd = process.cwd();
311
+ const isInHome = resolvedPath.startsWith(userHome);
312
+ const isInCwd = resolvedPath.startsWith(cwd);
313
+ if (!isInHome && !isInCwd) {
314
+ console.error('Template must be in home directory or current directory');
315
+ return false;
316
+ }
317
+ // Prevent access to sensitive files
318
+ const sensitivePatterns = [
319
+ /\.ssh/i,
320
+ /\.gnupg/i,
321
+ /password/i,
322
+ /secret/i,
323
+ /\.env/i,
324
+ /id_rsa/i,
325
+ /\.pem$/i,
326
+ /\.key$/i,
327
+ ];
328
+ const basename = path.basename(resolvedPath);
329
+ if (sensitivePatterns.some(pattern => pattern.test(basename))) {
330
+ console.error('Cannot import sensitive files');
331
+ return false;
332
+ }
333
+ // Ensure file has .json extension
334
+ if (path.extname(resolvedPath) !== '.json') {
335
+ console.error('Template file must have .json extension');
336
+ return false;
337
+ }
338
+ // Ensure file exists and is readable
339
+ if (!fs.existsSync(resolvedPath)) {
340
+ console.error(`File not found: ${resolvedPath}`);
341
+ return false;
342
+ }
343
+ // Ensure it's a file, not a directory
344
+ const stats = fs.statSync(resolvedPath);
345
+ if (!stats.isFile()) {
346
+ console.error('Path must be a file, not a directory');
347
+ return false;
348
+ }
349
+ // Check file size to prevent DOS
350
+ const MAX_TEMPLATE_SIZE = 10 * 1024 * 1024; // 10MB
351
+ if (stats.size > MAX_TEMPLATE_SIZE) {
352
+ console.error(`Template file too large: ${(stats.size / 1024 / 1024).toFixed(2)}MB (max: 10MB)`);
353
+ return false;
354
+ }
355
+ const template = this.loadTemplate(resolvedPath);
356
+ if (!template) {
357
+ console.error('Invalid template file');
358
+ return false;
359
+ }
360
+ // Force as user template (not built-in)
361
+ template.isBuiltIn = false;
362
+ return this.saveTemplate(template);
363
+ }
364
+ catch (error) {
365
+ console.error('Failed to import template:', error);
366
+ return false;
367
+ }
368
+ }
369
+ /**
370
+ * Apply a template to a project directory
371
+ */
372
+ static applyTemplate(template, projectRoot) {
373
+ try {
374
+ const axCliDir = path.join(projectRoot, '.ax-cli');
375
+ if (!fs.existsSync(axCliDir)) {
376
+ fs.mkdirSync(axCliDir, { recursive: true });
377
+ }
378
+ // Write CUSTOM.md using atomic operation
379
+ const customMdPath = path.join(axCliDir, 'CUSTOM.md');
380
+ const tmpCustomPath = `${customMdPath}.tmp`;
381
+ // Write index.json with template metadata
382
+ const indexPath = path.join(axCliDir, 'index.json');
383
+ const tmpIndexPath = `${indexPath}.tmp`;
384
+ const indexData = {
385
+ projectName: template.name,
386
+ version: template.version,
387
+ projectType: template.projectType,
388
+ ...template.metadata,
389
+ templateId: template.id,
390
+ templateAppliedAt: new Date().toISOString(),
391
+ };
392
+ try {
393
+ // Write to temp files first
394
+ fs.writeFileSync(tmpCustomPath, template.instructions, 'utf-8');
395
+ fs.writeFileSync(tmpIndexPath, JSON.stringify(indexData, null, 2), 'utf-8');
396
+ // Atomic rename
397
+ fs.renameSync(tmpCustomPath, customMdPath);
398
+ fs.renameSync(tmpIndexPath, indexPath);
399
+ }
400
+ catch (writeError) {
401
+ // Cleanup temp files on error
402
+ try {
403
+ if (fs.existsSync(tmpCustomPath))
404
+ fs.unlinkSync(tmpCustomPath);
405
+ if (fs.existsSync(tmpIndexPath))
406
+ fs.unlinkSync(tmpIndexPath);
407
+ }
408
+ catch {
409
+ // Ignore cleanup errors
410
+ }
411
+ throw writeError;
412
+ }
413
+ return true;
414
+ }
415
+ catch (error) {
416
+ console.error('Failed to apply template:', error);
417
+ return false;
418
+ }
419
+ }
420
+ }
421
+ //# sourceMappingURL=template-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-manager.js","sourceRoot":"","sources":["../../src/utils/template-manager.ts"],"names":[],"mappings":"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"}
@@ -181,9 +181,11 @@ export function deleteCharAfter(text, position) {
181
181
  */
182
182
  export function insertText(text, position, insert) {
183
183
  const newText = text.slice(0, position) + insert + text.slice(position);
184
+ // Use grapheme-aware length for correct cursor position with emoji/Unicode
185
+ const insertGraphemes = [...insert].length;
184
186
  return {
185
187
  text: newText,
186
- position: position + insert.length,
188
+ position: position + insertGraphemes,
187
189
  };
188
190
  }
189
191
  //# sourceMappingURL=text-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"text-utils.js","sourceRoot":"","sources":["../../src/utils/text-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"text-utils.js","sourceRoot":"","sources":["../../src/utils/text-utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defai.digital/ax-cli",
3
- "version": "2.3.0",
3
+ "version": "2.4.0",
4
4
  "description": "Enterprise-Class AI Command Line Interface - Primary support for GLM (General Language Model) with multi-provider AI orchestration powered by AutomatosX.",
5
5
  "type": "module",
6
6
  "workspaces": [
@@ -65,6 +65,7 @@
65
65
  "license": "MIT",
66
66
  "dependencies": {
67
67
  "@ax-cli/schemas": "npm:@defai.digital/ax-cli-schemas@^1.0.0",
68
+ "@clack/prompts": "^0.11.0",
68
69
  "@modelcontextprotocol/sdk": "^1.17.0",
69
70
  "axios": "^1.7.0",
70
71
  "cfonts": "^3.3.0",
package/vitest.config.ts CHANGED
@@ -4,6 +4,11 @@ export default defineConfig({
4
4
  test: {
5
5
  globals: true,
6
6
  environment: 'node',
7
+ exclude: [
8
+ '**/node_modules/**',
9
+ '**/dist/**',
10
+ '**/vscode-extension/**', // VSCode extension has its own test setup
11
+ ],
7
12
  coverage: {
8
13
  provider: 'v8',
9
14
  reporter: ['text', 'json', 'html', 'json-summary'],
@@ -14,6 +19,7 @@ export default defineConfig({
14
19
  '**/*.config.*',
15
20
  '**/mockData',
16
21
  'tests/',
22
+ 'vscode-extension/', // Exclude from coverage
17
23
  ],
18
24
  },
19
25
  },
@@ -1,28 +0,0 @@
1
- import { UserSettings, ProjectSettings } from './settings-manager.js';
2
- export interface ModelOption {
3
- model: string;
4
- }
5
- export type ModelConfig = string;
6
- export { UserSettings, ProjectSettings };
7
- /**
8
- * Get the effective current model
9
- * Priority: project current model > user default model > system default
10
- */
11
- export declare function getCurrentModel(): string;
12
- /**
13
- * Load model configuration
14
- * Priority: user-settings.json models > default hardcoded
15
- */
16
- export declare function loadModelConfig(): ModelOption[];
17
- /**
18
- * Get default models list
19
- */
20
- export declare function getDefaultModels(): string[];
21
- /**
22
- * Update the current model in project settings
23
- */
24
- export declare function updateCurrentModel(modelName: string): void;
25
- /**
26
- * Update the user's default model preference
27
- */
28
- export declare function updateDefaultModel(modelName: string): void;
@@ -1,43 +0,0 @@
1
- import { getSettingsManager } from './settings-manager.js';
2
- import { ModelIdSchema } from '@ax-cli/schemas';
3
- /**
4
- * Get the effective current model
5
- * Priority: project current model > user default model > system default
6
- */
7
- export function getCurrentModel() {
8
- const manager = getSettingsManager();
9
- return manager.getCurrentModel();
10
- }
11
- /**
12
- * Load model configuration
13
- * Priority: user-settings.json models > default hardcoded
14
- */
15
- export function loadModelConfig() {
16
- const manager = getSettingsManager();
17
- const models = manager.getAvailableModels();
18
- return models.map(model => ({
19
- model: model.trim()
20
- }));
21
- }
22
- /**
23
- * Get default models list
24
- */
25
- export function getDefaultModels() {
26
- const manager = getSettingsManager();
27
- return manager.getAvailableModels();
28
- }
29
- /**
30
- * Update the current model in project settings
31
- */
32
- export function updateCurrentModel(modelName) {
33
- const manager = getSettingsManager();
34
- manager.setCurrentModel(modelName);
35
- }
36
- /**
37
- * Update the user's default model preference
38
- */
39
- export function updateDefaultModel(modelName) {
40
- const manager = getSettingsManager();
41
- manager.updateUserSetting('defaultModel', ModelIdSchema.parse(modelName));
42
- }
43
- //# sourceMappingURL=model-config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"model-config.js","sourceRoot":"","sources":["../../src/utils/model-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAiC,MAAM,uBAAuB,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAWhD;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;IACrC,OAAO,OAAO,CAAC,eAAe,EAAE,CAAC;AACnC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;IACrC,MAAM,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAE5C,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1B,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE;KACpB,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;IACrC,OAAO,OAAO,CAAC,kBAAkB,EAAE,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAiB;IAClD,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;IACrC,OAAO,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAiB;IAClD,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;IACrC,OAAO,CAAC,iBAAiB,CAAC,cAAc,EAAE,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;AAC5E,CAAC"}