@defai.digital/ax-cli 3.7.2 → 3.8.2

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 (213) hide show
  1. package/README.md +148 -53
  2. package/dist/agent/context-manager.d.ts +15 -1
  3. package/dist/agent/context-manager.js +50 -19
  4. package/dist/agent/context-manager.js.map +1 -1
  5. package/dist/agent/dependency-resolver.js +13 -7
  6. package/dist/agent/dependency-resolver.js.map +1 -1
  7. package/dist/agent/llm-agent.d.ts +37 -0
  8. package/dist/agent/llm-agent.js +318 -98
  9. package/dist/agent/llm-agent.js.map +1 -1
  10. package/dist/agent/status-reporter.d.ts +114 -0
  11. package/dist/agent/status-reporter.js +335 -0
  12. package/dist/agent/status-reporter.js.map +1 -0
  13. package/dist/analyzers/best-practices/rules/typescript/no-magic-numbers.js +8 -2
  14. package/dist/analyzers/best-practices/rules/typescript/no-magic-numbers.js.map +1 -1
  15. package/dist/analyzers/best-practices/rules/typescript/no-unused-vars.js +3 -1
  16. package/dist/analyzers/best-practices/rules/typescript/no-unused-vars.js.map +1 -1
  17. package/dist/analyzers/best-practices/rules/typescript/prefer-const.js +3 -1
  18. package/dist/analyzers/best-practices/rules/typescript/prefer-const.js.map +1 -1
  19. package/dist/analyzers/best-practices/rules/typescript/prefer-readonly.js +3 -1
  20. package/dist/analyzers/best-practices/rules/typescript/prefer-readonly.js.map +1 -1
  21. package/dist/analyzers/code-smells/detectors/duplicate-code-detector.js +9 -3
  22. package/dist/analyzers/code-smells/detectors/duplicate-code-detector.js.map +1 -1
  23. package/dist/analyzers/git/churn-calculator.d.ts +2 -0
  24. package/dist/analyzers/git/churn-calculator.js +42 -8
  25. package/dist/analyzers/git/churn-calculator.js.map +1 -1
  26. package/dist/analyzers/git/hotspot-detector.js +2 -2
  27. package/dist/analyzers/git/hotspot-detector.js.map +1 -1
  28. package/dist/analyzers/metrics/metrics-analyzer.js +1 -1
  29. package/dist/analyzers/metrics/metrics-analyzer.js.map +1 -1
  30. package/dist/analyzers/security/security-analyzer.js +1 -1
  31. package/dist/analyzers/security/security-analyzer.js.map +1 -1
  32. package/dist/checkpoint/manager.d.ts +1 -0
  33. package/dist/checkpoint/manager.js +49 -9
  34. package/dist/checkpoint/manager.js.map +1 -1
  35. package/dist/checkpoint/storage.js +2 -2
  36. package/dist/checkpoint/storage.js.map +1 -1
  37. package/dist/commands/mcp-migrate.d.ts +9 -0
  38. package/dist/commands/mcp-migrate.js +172 -0
  39. package/dist/commands/mcp-migrate.js.map +1 -0
  40. package/dist/commands/status.d.ts +7 -0
  41. package/dist/commands/status.js +211 -0
  42. package/dist/commands/status.js.map +1 -0
  43. package/dist/commands/vscode.d.ts +7 -0
  44. package/dist/commands/vscode.js +363 -0
  45. package/dist/commands/vscode.js.map +1 -0
  46. package/dist/index.js +79 -30
  47. package/dist/index.js.map +1 -1
  48. package/dist/llm/client.js +33 -4
  49. package/dist/llm/client.js.map +1 -1
  50. package/dist/mcp/automatosx-loader.d.ts +84 -0
  51. package/dist/mcp/automatosx-loader.js +238 -0
  52. package/dist/mcp/automatosx-loader.js.map +1 -0
  53. package/dist/mcp/client-mutex-patch.d.ts +36 -0
  54. package/dist/mcp/client-mutex-patch.js +75 -0
  55. package/dist/mcp/client-mutex-patch.js.map +1 -0
  56. package/dist/mcp/client-v2.d.ts +229 -0
  57. package/dist/mcp/client-v2.js +740 -0
  58. package/dist/mcp/client-v2.js.map +1 -0
  59. package/dist/mcp/client.d.ts +111 -13
  60. package/dist/mcp/client.js +168 -253
  61. package/dist/mcp/client.js.map +1 -1
  62. package/dist/mcp/config-detector-v2.d.ts +83 -0
  63. package/dist/mcp/config-detector-v2.js +328 -0
  64. package/dist/mcp/config-detector-v2.js.map +1 -0
  65. package/dist/mcp/config-detector.d.ts +90 -0
  66. package/dist/mcp/config-detector.js +242 -0
  67. package/dist/mcp/config-detector.js.map +1 -0
  68. package/dist/mcp/config-migrator-v2.d.ts +89 -0
  69. package/dist/mcp/config-migrator-v2.js +288 -0
  70. package/dist/mcp/config-migrator-v2.js.map +1 -0
  71. package/dist/mcp/config-migrator.d.ts +63 -0
  72. package/dist/mcp/config-migrator.js +269 -0
  73. package/dist/mcp/config-migrator.js.map +1 -0
  74. package/dist/mcp/config-v2.d.ts +106 -0
  75. package/dist/mcp/config-v2.js +417 -0
  76. package/dist/mcp/config-v2.js.map +1 -0
  77. package/dist/mcp/config.d.ts +12 -1
  78. package/dist/mcp/config.js +95 -10
  79. package/dist/mcp/config.js.map +1 -1
  80. package/dist/mcp/error-formatter.d.ts +46 -0
  81. package/dist/mcp/error-formatter.js +244 -0
  82. package/dist/mcp/error-formatter.js.map +1 -0
  83. package/dist/mcp/health.d.ts +5 -0
  84. package/dist/mcp/health.js +22 -2
  85. package/dist/mcp/health.js.map +1 -1
  86. package/dist/mcp/invariants.d.ts +141 -0
  87. package/dist/mcp/invariants.js +243 -0
  88. package/dist/mcp/invariants.js.map +1 -0
  89. package/dist/mcp/mutex-safe.d.ts +153 -0
  90. package/dist/mcp/mutex-safe.js +260 -0
  91. package/dist/mcp/mutex-safe.js.map +1 -0
  92. package/dist/mcp/mutex.d.ts +73 -0
  93. package/dist/mcp/mutex.js +137 -0
  94. package/dist/mcp/mutex.js.map +1 -0
  95. package/dist/mcp/reconnection.d.ts +4 -0
  96. package/dist/mcp/reconnection.js +25 -1
  97. package/dist/mcp/reconnection.js.map +1 -1
  98. package/dist/mcp/transports-v2.d.ts +152 -0
  99. package/dist/mcp/transports-v2.js +481 -0
  100. package/dist/mcp/transports-v2.js.map +1 -0
  101. package/dist/mcp/type-safety.d.ts +231 -0
  102. package/dist/mcp/type-safety.js +273 -0
  103. package/dist/mcp/type-safety.js.map +1 -0
  104. package/dist/planner/task-planner.js +13 -0
  105. package/dist/planner/task-planner.js.map +1 -1
  106. package/dist/planner/types.d.ts +6 -6
  107. package/dist/schemas/confirmation-schemas.d.ts +2 -2
  108. package/dist/schemas/settings-schemas.d.ts +196 -0
  109. package/dist/schemas/settings-schemas.js +146 -5
  110. package/dist/schemas/settings-schemas.js.map +1 -1
  111. package/dist/sdk/index.d.ts +118 -2
  112. package/dist/sdk/index.js +146 -4
  113. package/dist/sdk/index.js.map +1 -1
  114. package/dist/sdk/testing.d.ts +182 -0
  115. package/dist/sdk/testing.js +231 -0
  116. package/dist/sdk/testing.js.map +1 -1
  117. package/dist/sdk/version.d.ts +114 -15
  118. package/dist/sdk/version.js +137 -15
  119. package/dist/sdk/version.js.map +1 -1
  120. package/dist/tools/bash.js +54 -9
  121. package/dist/tools/bash.js.map +1 -1
  122. package/dist/tools/registry.d.ts +146 -0
  123. package/dist/tools/registry.js +170 -0
  124. package/dist/tools/registry.js.map +1 -0
  125. package/dist/tools/search.js +12 -2
  126. package/dist/tools/search.js.map +1 -1
  127. package/dist/tools/text-editor.js +84 -26
  128. package/dist/tools/text-editor.js.map +1 -1
  129. package/dist/ui/components/chat-history.js +6 -1
  130. package/dist/ui/components/chat-history.js.map +1 -1
  131. package/dist/ui/components/chat-input.d.ts +2 -1
  132. package/dist/ui/components/chat-input.js +5 -2
  133. package/dist/ui/components/chat-input.js.map +1 -1
  134. package/dist/ui/components/chat-interface.js +187 -5
  135. package/dist/ui/components/chat-interface.js.map +1 -1
  136. package/dist/ui/components/context-breakdown.d.ts +23 -0
  137. package/dist/ui/components/context-breakdown.js +124 -0
  138. package/dist/ui/components/context-breakdown.js.map +1 -0
  139. package/dist/ui/components/keyboard-help.d.ts +17 -0
  140. package/dist/ui/components/keyboard-help.js +116 -0
  141. package/dist/ui/components/keyboard-help.js.map +1 -0
  142. package/dist/ui/components/keyboard-hints.js +2 -2
  143. package/dist/ui/components/keyboard-hints.js.map +1 -1
  144. package/dist/ui/components/quick-actions.js +43 -7
  145. package/dist/ui/components/quick-actions.js.map +1 -1
  146. package/dist/ui/components/status-bar.d.ts +3 -0
  147. package/dist/ui/components/status-bar.js +25 -16
  148. package/dist/ui/components/status-bar.js.map +1 -1
  149. package/dist/ui/components/toast-notification.d.ts +42 -0
  150. package/dist/ui/components/toast-notification.js +30 -2
  151. package/dist/ui/components/toast-notification.js.map +1 -1
  152. package/dist/ui/components/tool-group-display.js +34 -4
  153. package/dist/ui/components/tool-group-display.js.map +1 -1
  154. package/dist/ui/components/welcome-panel.js +2 -2
  155. package/dist/ui/components/welcome-panel.js.map +1 -1
  156. package/dist/ui/hooks/use-enhanced-input.d.ts +9 -1
  157. package/dist/ui/hooks/use-enhanced-input.js +901 -90
  158. package/dist/ui/hooks/use-enhanced-input.js.map +1 -1
  159. package/dist/ui/hooks/use-input-handler.d.ts +11 -1
  160. package/dist/ui/hooks/use-input-handler.js +67 -3
  161. package/dist/ui/hooks/use-input-handler.js.map +1 -1
  162. package/dist/ui/hooks/use-input-history.d.ts +1 -1
  163. package/dist/ui/hooks/use-input-history.js +50 -14
  164. package/dist/ui/hooks/use-input-history.js.map +1 -1
  165. package/dist/ui/utils/bracketed-paste-handler.d.ts +97 -0
  166. package/dist/ui/utils/bracketed-paste-handler.js +322 -0
  167. package/dist/ui/utils/bracketed-paste-handler.js.map +1 -0
  168. package/dist/ui/utils/change-summarizer.js +16 -6
  169. package/dist/ui/utils/change-summarizer.js.map +1 -1
  170. package/dist/ui/utils/tool-grouper.d.ts +10 -1
  171. package/dist/ui/utils/tool-grouper.js +143 -30
  172. package/dist/ui/utils/tool-grouper.js.map +1 -1
  173. package/dist/utils/auto-accept-logger.d.ts +173 -0
  174. package/dist/utils/auto-accept-logger.js +420 -0
  175. package/dist/utils/auto-accept-logger.js.map +1 -0
  176. package/dist/utils/background-task-manager.d.ts +11 -0
  177. package/dist/utils/background-task-manager.js +124 -38
  178. package/dist/utils/background-task-manager.js.map +1 -1
  179. package/dist/utils/confirmation-service.d.ts +1 -0
  180. package/dist/utils/confirmation-service.js +6 -1
  181. package/dist/utils/confirmation-service.js.map +1 -1
  182. package/dist/utils/encryption.d.ts +8 -0
  183. package/dist/utils/encryption.js +44 -27
  184. package/dist/utils/encryption.js.map +1 -1
  185. package/dist/utils/enhanced-error-messages.d.ts +33 -0
  186. package/dist/utils/enhanced-error-messages.js +420 -0
  187. package/dist/utils/enhanced-error-messages.js.map +1 -0
  188. package/dist/utils/error-handler.d.ts +13 -3
  189. package/dist/utils/error-handler.js +16 -4
  190. package/dist/utils/error-handler.js.map +1 -1
  191. package/dist/utils/external-editor.d.ts +47 -0
  192. package/dist/utils/external-editor.js +179 -0
  193. package/dist/utils/external-editor.js.map +1 -0
  194. package/dist/utils/history-migration.d.ts +9 -0
  195. package/dist/utils/history-migration.js +36 -0
  196. package/dist/utils/history-migration.js.map +1 -0
  197. package/dist/utils/paste-utils.js +12 -11
  198. package/dist/utils/paste-utils.js.map +1 -1
  199. package/dist/utils/rate-limiter.js +20 -1
  200. package/dist/utils/rate-limiter.js.map +1 -1
  201. package/dist/utils/safety-rules.d.ts +64 -0
  202. package/dist/utils/safety-rules.js +225 -0
  203. package/dist/utils/safety-rules.js.map +1 -0
  204. package/dist/utils/settings-manager.d.ts +89 -1
  205. package/dist/utils/settings-manager.js +359 -3
  206. package/dist/utils/settings-manager.js.map +1 -1
  207. package/dist/utils/token-counter.d.ts +2 -0
  208. package/dist/utils/token-counter.js +32 -9
  209. package/dist/utils/token-counter.js.map +1 -1
  210. package/dist/utils/version.d.ts +11 -2
  211. package/dist/utils/version.js +54 -21
  212. package/dist/utils/version.js.map +1 -1
  213. package/package.json +2 -1
@@ -0,0 +1,211 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import * as fs from 'fs/promises';
4
+ import * as path from 'path';
5
+ import { homedir } from 'os';
6
+ import { ConsoleMessenger } from '../utils/console-messenger.js';
7
+ /**
8
+ * Create the status command
9
+ *
10
+ * Provides status reports and summaries for task execution
11
+ */
12
+ export function createStatusCommand() {
13
+ const statusCommand = new Command('status');
14
+ statusCommand.description('View task execution status and summaries');
15
+ // Show latest status report
16
+ statusCommand
17
+ .command('show')
18
+ .description('Show the latest status report')
19
+ .option('-n, --count <number>', 'Number of reports to show', '1')
20
+ .option('-j, --json', 'Output in JSON format')
21
+ .action(async (options) => {
22
+ try {
23
+ const outputDir = path.join(homedir(), 'automatosx', 'tmp');
24
+ // Find all status reports
25
+ const files = await fs.readdir(outputDir);
26
+ const statusFiles = files
27
+ .filter(f => f.startsWith('status-') && f.endsWith('.md'))
28
+ .sort()
29
+ .reverse();
30
+ if (statusFiles.length === 0) {
31
+ console.log(chalk.yellow('No status reports found.'));
32
+ console.log(chalk.gray(`Expected location: ${outputDir}`));
33
+ console.log();
34
+ console.log(chalk.gray('💡 Status reports are generated when:'));
35
+ console.log(chalk.gray(' - A multi-phase plan completes'));
36
+ console.log(chalk.gray(' - You run: ax status generate'));
37
+ console.log();
38
+ return;
39
+ }
40
+ const count = Math.min(parseInt(options.count), statusFiles.length);
41
+ const reportsToShow = statusFiles.slice(0, count);
42
+ if (options.json) {
43
+ const reports = await Promise.all(reportsToShow.map(async (file) => ({
44
+ filename: file,
45
+ path: path.join(outputDir, file),
46
+ content: await fs.readFile(path.join(outputDir, file), 'utf-8')
47
+ })));
48
+ console.log(JSON.stringify(reports, null, 2));
49
+ return;
50
+ }
51
+ // Display in human-readable format
52
+ for (const file of reportsToShow) {
53
+ const filePath = path.join(outputDir, file);
54
+ const content = await fs.readFile(filePath, 'utf-8');
55
+ console.log();
56
+ console.log(chalk.bold.blue('📊 Status Report'));
57
+ console.log(chalk.gray('─'.repeat(60)));
58
+ console.log(chalk.gray(`File: ${file}`));
59
+ console.log(chalk.gray(`Path: ${filePath}`));
60
+ console.log(chalk.gray('─'.repeat(60)));
61
+ console.log();
62
+ console.log(content);
63
+ console.log();
64
+ }
65
+ if (statusFiles.length > count) {
66
+ console.log(chalk.gray(`💡 ${statusFiles.length - count} more report(s) available.`));
67
+ console.log(chalk.gray(` Use: ax status show -n ${statusFiles.length} to see all`));
68
+ console.log();
69
+ }
70
+ }
71
+ catch (error) {
72
+ ConsoleMessenger.error('status_commands.error_showing_status', { error: error.message });
73
+ process.exit(1);
74
+ }
75
+ });
76
+ // List all status reports and summaries
77
+ statusCommand
78
+ .command('list')
79
+ .description('List all status reports and summaries')
80
+ .option('-s, --summaries', 'Show summaries instead of status reports')
81
+ .option('-a, --all', 'Show both status reports and summaries')
82
+ .action(async (options) => {
83
+ try {
84
+ const outputDir = path.join(homedir(), 'automatosx', 'tmp');
85
+ // Find files
86
+ const files = await fs.readdir(outputDir);
87
+ const statusFiles = files.filter(f => f.startsWith('status-') && f.endsWith('.md')).sort().reverse();
88
+ const summaryFiles = files.filter(f => f.startsWith('summary-') && f.endsWith('.md')).sort().reverse();
89
+ console.log();
90
+ console.log(chalk.bold.blue('📊 Available Reports'));
91
+ console.log(chalk.gray('─'.repeat(60)));
92
+ console.log();
93
+ if (options.all || !options.summaries) {
94
+ console.log(chalk.bold('Status Reports:'));
95
+ if (statusFiles.length === 0) {
96
+ console.log(chalk.gray(' No status reports found'));
97
+ }
98
+ else {
99
+ for (const file of statusFiles) {
100
+ const stats = await fs.stat(path.join(outputDir, file));
101
+ const timestamp = stats.mtime.toLocaleString();
102
+ console.log(` ${chalk.cyan(file)} ${chalk.gray(`(${timestamp})`)}`);
103
+ }
104
+ }
105
+ console.log();
106
+ }
107
+ if (options.all || options.summaries) {
108
+ console.log(chalk.bold('Context Summaries:'));
109
+ if (summaryFiles.length === 0) {
110
+ console.log(chalk.gray(' No summaries found'));
111
+ }
112
+ else {
113
+ for (const file of summaryFiles) {
114
+ const stats = await fs.stat(path.join(outputDir, file));
115
+ const timestamp = stats.mtime.toLocaleString();
116
+ console.log(` ${chalk.cyan(file)} ${chalk.gray(`(${timestamp})`)}`);
117
+ }
118
+ }
119
+ console.log();
120
+ }
121
+ console.log(chalk.gray('💡 View a report: ax status show'));
122
+ console.log(chalk.gray(' View location: ' + outputDir));
123
+ console.log();
124
+ }
125
+ catch (error) {
126
+ ConsoleMessenger.error('status_commands.error_listing_reports', { error: error.message });
127
+ process.exit(1);
128
+ }
129
+ });
130
+ // Generate a status report on demand
131
+ statusCommand
132
+ .command('generate')
133
+ .description('Generate a status report from current session')
134
+ .action(async () => {
135
+ try {
136
+ console.log(chalk.yellow('⚠️ Status report generation requires an active agent session.'));
137
+ console.log(chalk.gray(' This command is not yet implemented for on-demand generation.'));
138
+ console.log();
139
+ console.log(chalk.gray('💡 Status reports are automatically generated when:'));
140
+ console.log(chalk.gray(' - A multi-phase plan completes successfully'));
141
+ console.log(chalk.gray(' - Context window approaches limit (summaries)'));
142
+ console.log();
143
+ console.log(chalk.gray(' To view existing reports: ax status show'));
144
+ console.log();
145
+ }
146
+ catch (error) {
147
+ ConsoleMessenger.error('status_commands.error_generating_report', { error: error.message });
148
+ process.exit(1);
149
+ }
150
+ });
151
+ // Clean up old reports
152
+ statusCommand
153
+ .command('clean')
154
+ .description('Clean up old status reports and summaries')
155
+ .option('-d, --days <number>', 'Keep reports from last N days', '7')
156
+ .option('-f, --force', 'Skip confirmation')
157
+ .action(async (options) => {
158
+ try {
159
+ const outputDir = path.join(homedir(), 'automatosx', 'tmp');
160
+ const days = parseInt(options.days);
161
+ const cutoffDate = new Date();
162
+ cutoffDate.setDate(cutoffDate.getDate() - days);
163
+ // Find files
164
+ const files = await fs.readdir(outputDir);
165
+ const reportFiles = files.filter(f => (f.startsWith('status-') || f.startsWith('summary-')) && f.endsWith('.md'));
166
+ const filesToDelete = [];
167
+ for (const file of reportFiles) {
168
+ const filePath = path.join(outputDir, file);
169
+ const stats = await fs.stat(filePath);
170
+ if (stats.mtime < cutoffDate) {
171
+ filesToDelete.push(file);
172
+ }
173
+ }
174
+ if (filesToDelete.length === 0) {
175
+ console.log(chalk.green('✓ No old reports to clean up'));
176
+ console.log(chalk.gray(` All reports are from the last ${days} day(s)`));
177
+ console.log();
178
+ return;
179
+ }
180
+ console.log();
181
+ console.log(chalk.yellow(`⚠️ Found ${filesToDelete.length} report(s) older than ${days} day(s):`));
182
+ console.log();
183
+ for (const file of filesToDelete) {
184
+ const stats = await fs.stat(path.join(outputDir, file));
185
+ console.log(` ${chalk.gray(file)} ${chalk.gray(`(${stats.mtime.toLocaleDateString()})`)}`);
186
+ }
187
+ console.log();
188
+ if (!options.force) {
189
+ console.log(chalk.yellow('Use --force to delete these files'));
190
+ console.log();
191
+ return;
192
+ }
193
+ // Delete files
194
+ for (const file of filesToDelete) {
195
+ await fs.unlink(path.join(outputDir, file));
196
+ }
197
+ console.log(chalk.green(`✓ Deleted ${filesToDelete.length} old report(s)`));
198
+ console.log();
199
+ }
200
+ catch (error) {
201
+ ConsoleMessenger.error('status_commands.error_cleaning_reports', { error: error.message });
202
+ process.exit(1);
203
+ }
204
+ });
205
+ // Default action (show latest)
206
+ statusCommand.action(() => {
207
+ statusCommand.commands.find(cmd => cmd.name() === 'show')?.parseAsync(['node', 'ax', 'status', 'show'], { from: 'user' });
208
+ });
209
+ return statusCommand;
210
+ }
211
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { Command } from 'commander';
2
+ /**
3
+ * Create the vscode command
4
+ *
5
+ * Manages VSCode extension installation and status
6
+ */
7
+ export declare function createVSCodeCommand(): Command;
@@ -0,0 +1,363 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import * as fs from 'fs/promises';
4
+ import * as path from 'path';
5
+ import { exec } from 'child_process';
6
+ import { promisify } from 'util';
7
+ import { ConsoleMessenger } from '../utils/console-messenger.js';
8
+ const execAsync = promisify(exec);
9
+ /**
10
+ * VSCode Extension Information
11
+ */
12
+ const EXTENSION_ID = 'defai-digital.ax-cli-vscode';
13
+ const VSIX_FILENAME = 'ax-cli-vscode-0.1.0.vsix';
14
+ /**
15
+ * Detect if VSCode is installed
16
+ */
17
+ async function isVSCodeInstalled() {
18
+ try {
19
+ // Try 'code' command
20
+ await execAsync('code --version');
21
+ return true;
22
+ }
23
+ catch {
24
+ try {
25
+ // Try alternative paths on macOS
26
+ await execAsync('/usr/local/bin/code --version');
27
+ return true;
28
+ }
29
+ catch {
30
+ try {
31
+ // Try VSCodium
32
+ await execAsync('codium --version');
33
+ return true;
34
+ }
35
+ catch {
36
+ return false;
37
+ }
38
+ }
39
+ }
40
+ }
41
+ /**
42
+ * Get the code command (code, codium, or full path)
43
+ */
44
+ async function getCodeCommand() {
45
+ try {
46
+ await execAsync('code --version');
47
+ return 'code';
48
+ }
49
+ catch {
50
+ try {
51
+ await execAsync('/usr/local/bin/code --version');
52
+ return '/usr/local/bin/code';
53
+ }
54
+ catch {
55
+ try {
56
+ await execAsync('codium --version');
57
+ return 'codium';
58
+ }
59
+ catch {
60
+ throw new Error('VSCode command not found');
61
+ }
62
+ }
63
+ }
64
+ }
65
+ /**
66
+ * Check if AX CLI extension is installed
67
+ */
68
+ async function isExtensionInstalled() {
69
+ try {
70
+ const codeCmd = await getCodeCommand();
71
+ const { stdout } = await execAsync(`${codeCmd} --list-extensions`);
72
+ return stdout.includes(EXTENSION_ID);
73
+ }
74
+ catch {
75
+ return false;
76
+ }
77
+ }
78
+ /**
79
+ * Get extension version if installed
80
+ */
81
+ async function getInstalledVersion() {
82
+ try {
83
+ const codeCmd = await getCodeCommand();
84
+ const { stdout } = await execAsync(`${codeCmd} --list-extensions --show-versions`);
85
+ const lines = stdout.split('\n');
86
+ const extensionLine = lines.find(line => line.startsWith(EXTENSION_ID));
87
+ if (extensionLine) {
88
+ const match = extensionLine.match(/@(.+)$/);
89
+ return match ? match[1] : null;
90
+ }
91
+ return null;
92
+ }
93
+ catch {
94
+ return null;
95
+ }
96
+ }
97
+ /**
98
+ * Find the VSIX file in the vscode-extension directory
99
+ */
100
+ async function findVSIXFile() {
101
+ try {
102
+ // Check in the vscode-extension directory relative to the package
103
+ const possiblePaths = [
104
+ // Development: relative to src/commands/
105
+ path.resolve(__dirname, '../../vscode-extension', VSIX_FILENAME),
106
+ // Installed package: in node_modules
107
+ path.resolve(__dirname, '../../../vscode-extension', VSIX_FILENAME),
108
+ // Alternative: check parent directory
109
+ path.resolve(__dirname, '../../../../vscode-extension', VSIX_FILENAME),
110
+ ];
111
+ for (const vsixPath of possiblePaths) {
112
+ try {
113
+ await fs.access(vsixPath);
114
+ return vsixPath;
115
+ }
116
+ catch {
117
+ // Try next path
118
+ }
119
+ }
120
+ return null;
121
+ }
122
+ catch {
123
+ return null;
124
+ }
125
+ }
126
+ /**
127
+ * Install the VSIX extension
128
+ */
129
+ async function installExtension(vsixPath) {
130
+ const codeCmd = await getCodeCommand();
131
+ await execAsync(`${codeCmd} --install-extension "${vsixPath}"`);
132
+ }
133
+ /**
134
+ * Uninstall the extension
135
+ */
136
+ async function uninstallExtension() {
137
+ const codeCmd = await getCodeCommand();
138
+ await execAsync(`${codeCmd} --uninstall-extension ${EXTENSION_ID}`);
139
+ }
140
+ /**
141
+ * Create the vscode command
142
+ *
143
+ * Manages VSCode extension installation and status
144
+ */
145
+ export function createVSCodeCommand() {
146
+ const vscodeCommand = new Command('vscode');
147
+ vscodeCommand.description('Manage AX CLI VSCode extension');
148
+ // Check extension status
149
+ vscodeCommand
150
+ .command('status')
151
+ .description('Check VSCode extension installation status')
152
+ .action(async () => {
153
+ try {
154
+ console.log();
155
+ console.log(chalk.bold.blue('📊 VSCode Extension Status'));
156
+ console.log(chalk.gray('─'.repeat(60)));
157
+ console.log();
158
+ // Check VSCode installation
159
+ const vscodeInstalled = await isVSCodeInstalled();
160
+ if (!vscodeInstalled) {
161
+ console.log(chalk.red('✗ VSCode not found'));
162
+ console.log();
163
+ console.log(chalk.gray('💡 Install VSCode from:'));
164
+ console.log(chalk.gray(' https://code.visualstudio.com/'));
165
+ console.log();
166
+ return;
167
+ }
168
+ const codeCmd = await getCodeCommand();
169
+ console.log(chalk.green(`✓ VSCode installed (${codeCmd})`));
170
+ // Check extension installation
171
+ const extensionInstalled = await isExtensionInstalled();
172
+ if (!extensionInstalled) {
173
+ console.log(chalk.yellow('○ AX CLI extension not installed'));
174
+ console.log();
175
+ console.log(chalk.gray('💡 Install with:'));
176
+ console.log(chalk.gray(' ax-cli vscode install'));
177
+ console.log();
178
+ return;
179
+ }
180
+ const version = await getInstalledVersion();
181
+ console.log(chalk.green(`✓ AX CLI extension installed${version ? ` (v${version})` : ''}`));
182
+ console.log();
183
+ // Check for VSIX file
184
+ const vsixPath = await findVSIXFile();
185
+ if (vsixPath) {
186
+ console.log(chalk.gray(`📦 VSIX file available: ${vsixPath}`));
187
+ }
188
+ else {
189
+ console.log(chalk.yellow('⚠️ VSIX file not found (reinstall may not be available)'));
190
+ }
191
+ console.log();
192
+ console.log(chalk.gray('💡 Commands:'));
193
+ console.log(chalk.gray(' ax-cli vscode install - Install/update extension'));
194
+ console.log(chalk.gray(' ax-cli vscode uninstall - Remove extension'));
195
+ console.log();
196
+ }
197
+ catch (error) {
198
+ ConsoleMessenger.error('vscode_commands.error_checking_status', { error: error.message });
199
+ process.exit(1);
200
+ }
201
+ });
202
+ // Install extension
203
+ vscodeCommand
204
+ .command('install')
205
+ .description('Install or update the AX CLI VSCode extension')
206
+ .option('-f, --force', 'Force reinstall even if already installed')
207
+ .action(async (options) => {
208
+ try {
209
+ console.log();
210
+ console.log(chalk.bold.blue('📦 Installing AX CLI VSCode Extension'));
211
+ console.log(chalk.gray('─'.repeat(60)));
212
+ console.log();
213
+ // Check VSCode installation
214
+ const vscodeInstalled = await isVSCodeInstalled();
215
+ if (!vscodeInstalled) {
216
+ console.log(chalk.red('✗ VSCode not found'));
217
+ console.log();
218
+ console.log(chalk.gray('💡 Please install VSCode first:'));
219
+ console.log(chalk.gray(' https://code.visualstudio.com/'));
220
+ console.log();
221
+ process.exit(1);
222
+ }
223
+ const codeCmd = await getCodeCommand();
224
+ console.log(chalk.green(`✓ VSCode found (${codeCmd})`));
225
+ // Check if already installed
226
+ if (!options.force) {
227
+ const extensionInstalled = await isExtensionInstalled();
228
+ if (extensionInstalled) {
229
+ const version = await getInstalledVersion();
230
+ console.log(chalk.yellow(`○ Extension already installed${version ? ` (v${version})` : ''}`));
231
+ console.log();
232
+ console.log(chalk.gray('💡 Use --force to reinstall'));
233
+ console.log();
234
+ return;
235
+ }
236
+ }
237
+ // Find VSIX file
238
+ const vsixPath = await findVSIXFile();
239
+ if (!vsixPath) {
240
+ console.log(chalk.red('✗ VSIX file not found'));
241
+ console.log();
242
+ console.log(chalk.gray('Expected locations:'));
243
+ console.log(chalk.gray(' ./vscode-extension/' + VSIX_FILENAME));
244
+ console.log(chalk.gray(' ../vscode-extension/' + VSIX_FILENAME));
245
+ console.log();
246
+ console.log(chalk.gray('💡 Build the extension first:'));
247
+ console.log(chalk.gray(' cd vscode-extension'));
248
+ console.log(chalk.gray(' npm run package:vsix'));
249
+ console.log();
250
+ process.exit(1);
251
+ }
252
+ console.log(chalk.green(`✓ VSIX file found: ${path.basename(vsixPath)}`));
253
+ console.log();
254
+ // Uninstall if forcing
255
+ if (options.force) {
256
+ const extensionInstalled = await isExtensionInstalled();
257
+ if (extensionInstalled) {
258
+ console.log(chalk.yellow('○ Uninstalling previous version...'));
259
+ await uninstallExtension();
260
+ console.log(chalk.green('✓ Previous version uninstalled'));
261
+ }
262
+ }
263
+ // Install extension
264
+ console.log(chalk.yellow('○ Installing extension...'));
265
+ await installExtension(vsixPath);
266
+ console.log(chalk.green('✓ Extension installed successfully!'));
267
+ console.log();
268
+ console.log(chalk.bold.green('🎉 AX CLI VSCode Extension Ready!'));
269
+ console.log();
270
+ console.log(chalk.gray('Next steps:'));
271
+ console.log(chalk.gray(' 1. Reload VSCode if it\'s already open'));
272
+ console.log(chalk.gray(' 2. Press Cmd+Shift+A (Mac) or Ctrl+Shift+A (Windows/Linux)'));
273
+ console.log(chalk.gray(' 3. Start chatting with AX CLI!'));
274
+ console.log();
275
+ }
276
+ catch (error) {
277
+ ConsoleMessenger.error('vscode_commands.error_installing', { error: error.message });
278
+ process.exit(1);
279
+ }
280
+ });
281
+ // Uninstall extension
282
+ vscodeCommand
283
+ .command('uninstall')
284
+ .description('Uninstall the AX CLI VSCode extension')
285
+ .action(async () => {
286
+ try {
287
+ console.log();
288
+ console.log(chalk.bold.yellow('🗑️ Uninstalling AX CLI VSCode Extension'));
289
+ console.log(chalk.gray('─'.repeat(60)));
290
+ console.log();
291
+ // Check VSCode installation
292
+ const vscodeInstalled = await isVSCodeInstalled();
293
+ if (!vscodeInstalled) {
294
+ console.log(chalk.yellow('○ VSCode not found'));
295
+ console.log();
296
+ return;
297
+ }
298
+ // Check if extension is installed
299
+ const extensionInstalled = await isExtensionInstalled();
300
+ if (!extensionInstalled) {
301
+ console.log(chalk.yellow('○ Extension not installed'));
302
+ console.log();
303
+ return;
304
+ }
305
+ // Uninstall
306
+ console.log(chalk.yellow('○ Uninstalling extension...'));
307
+ await uninstallExtension();
308
+ console.log(chalk.green('✓ Extension uninstalled successfully'));
309
+ console.log();
310
+ }
311
+ catch (error) {
312
+ ConsoleMessenger.error('vscode_commands.error_uninstalling', { error: error.message });
313
+ process.exit(1);
314
+ }
315
+ });
316
+ // Auto-install command (silent, for startup check)
317
+ vscodeCommand
318
+ .command('auto-install')
319
+ .description('Automatically install extension if VSCode is detected (silent)')
320
+ .option('--check-only', 'Only check, don\'t install')
321
+ .action(async (options) => {
322
+ try {
323
+ // Silent check - only show output if action needed
324
+ const vscodeInstalled = await isVSCodeInstalled();
325
+ if (!vscodeInstalled) {
326
+ // VSCode not installed, skip silently
327
+ return;
328
+ }
329
+ const extensionInstalled = await isExtensionInstalled();
330
+ if (extensionInstalled) {
331
+ // Already installed, skip silently
332
+ return;
333
+ }
334
+ if (options.checkOnly) {
335
+ // Just checking, report status
336
+ console.log(chalk.yellow('AX CLI VSCode extension not installed'));
337
+ console.log(chalk.gray('Run: ax-cli vscode install'));
338
+ return;
339
+ }
340
+ // Try to auto-install
341
+ const vsixPath = await findVSIXFile();
342
+ if (!vsixPath) {
343
+ // VSIX not available, skip silently
344
+ return;
345
+ }
346
+ console.log();
347
+ console.log(chalk.blue('📦 Installing AX CLI VSCode extension...'));
348
+ await installExtension(vsixPath);
349
+ console.log(chalk.green('✓ Extension installed! Reload VSCode to activate.'));
350
+ console.log();
351
+ }
352
+ catch (error) {
353
+ // Silent failure - don't interrupt CLI startup
354
+ // User can manually install with 'ax-cli vscode install'
355
+ }
356
+ });
357
+ // Default action (show status)
358
+ vscodeCommand.action(() => {
359
+ vscodeCommand.commands.find(cmd => cmd.name() === 'status')?.parseAsync(['node', 'ax', 'vscode', 'status'], { from: 'user' });
360
+ });
361
+ return vscodeCommand;
362
+ }
363
+ //# sourceMappingURL=vscode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vscode.js","sourceRoot":"","sources":["../../src/commands/vscode.ts"],"names":[],"mappings":"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"}