@ace-sdk/cli 2.0.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 (150) hide show
  1. package/README.md +61 -0
  2. package/dist/cli.d.ts +14 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +427 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/commands/bootstrap.d.ts +19 -0
  7. package/dist/commands/bootstrap.d.ts.map +1 -0
  8. package/dist/commands/bootstrap.js +157 -0
  9. package/dist/commands/bootstrap.js.map +1 -0
  10. package/dist/commands/cache.d.ts +19 -0
  11. package/dist/commands/cache.d.ts.map +1 -0
  12. package/dist/commands/cache.js +101 -0
  13. package/dist/commands/cache.js.map +1 -0
  14. package/dist/commands/clear.d.ts +12 -0
  15. package/dist/commands/clear.d.ts.map +1 -0
  16. package/dist/commands/clear.js +50 -0
  17. package/dist/commands/clear.js.map +1 -0
  18. package/dist/commands/config.d.ts +34 -0
  19. package/dist/commands/config.d.ts.map +1 -0
  20. package/dist/commands/config.js +423 -0
  21. package/dist/commands/config.js.map +1 -0
  22. package/dist/commands/delta.d.ts +14 -0
  23. package/dist/commands/delta.d.ts.map +1 -0
  24. package/dist/commands/delta.js +140 -0
  25. package/dist/commands/delta.js.map +1 -0
  26. package/dist/commands/doctor.d.ts +8 -0
  27. package/dist/commands/doctor.d.ts.map +1 -0
  28. package/dist/commands/doctor.js +187 -0
  29. package/dist/commands/doctor.js.map +1 -0
  30. package/dist/commands/export.d.ts +12 -0
  31. package/dist/commands/export.d.ts.map +1 -0
  32. package/dist/commands/export.js +45 -0
  33. package/dist/commands/export.js.map +1 -0
  34. package/dist/commands/import.d.ts +13 -0
  35. package/dist/commands/import.d.ts.map +1 -0
  36. package/dist/commands/import.js +87 -0
  37. package/dist/commands/import.js.map +1 -0
  38. package/dist/commands/learn.d.ts +17 -0
  39. package/dist/commands/learn.d.ts.map +1 -0
  40. package/dist/commands/learn.js +193 -0
  41. package/dist/commands/learn.js.map +1 -0
  42. package/dist/commands/patterns.d.ts +13 -0
  43. package/dist/commands/patterns.d.ts.map +1 -0
  44. package/dist/commands/patterns.js +76 -0
  45. package/dist/commands/patterns.js.map +1 -0
  46. package/dist/commands/plugin.d.ts +26 -0
  47. package/dist/commands/plugin.d.ts.map +1 -0
  48. package/dist/commands/plugin.js +267 -0
  49. package/dist/commands/plugin.js.map +1 -0
  50. package/dist/commands/projects.d.ts +15 -0
  51. package/dist/commands/projects.d.ts.map +1 -0
  52. package/dist/commands/projects.js +122 -0
  53. package/dist/commands/projects.js.map +1 -0
  54. package/dist/commands/record.d.ts +32 -0
  55. package/dist/commands/record.d.ts.map +1 -0
  56. package/dist/commands/record.js +307 -0
  57. package/dist/commands/record.js.map +1 -0
  58. package/dist/commands/search.d.ts +16 -0
  59. package/dist/commands/search.d.ts.map +1 -0
  60. package/dist/commands/search.js +125 -0
  61. package/dist/commands/search.js.map +1 -0
  62. package/dist/commands/status.d.ts +8 -0
  63. package/dist/commands/status.d.ts.map +1 -0
  64. package/dist/commands/status.js +63 -0
  65. package/dist/commands/status.js.map +1 -0
  66. package/dist/commands/summarize.d.ts +17 -0
  67. package/dist/commands/summarize.d.ts.map +1 -0
  68. package/dist/commands/summarize.js +167 -0
  69. package/dist/commands/summarize.js.map +1 -0
  70. package/dist/commands/top.d.ts +14 -0
  71. package/dist/commands/top.d.ts.map +1 -0
  72. package/dist/commands/top.js +58 -0
  73. package/dist/commands/top.js.map +1 -0
  74. package/dist/commands/tune.d.ts +36 -0
  75. package/dist/commands/tune.d.ts.map +1 -0
  76. package/dist/commands/tune.js +354 -0
  77. package/dist/commands/tune.js.map +1 -0
  78. package/dist/formatters/playbook-formatter.d.ts +19 -0
  79. package/dist/formatters/playbook-formatter.d.ts.map +1 -0
  80. package/dist/formatters/playbook-formatter.js +56 -0
  81. package/dist/formatters/playbook-formatter.js.map +1 -0
  82. package/dist/formatters/search-formatter.d.ts +28 -0
  83. package/dist/formatters/search-formatter.d.ts.map +1 -0
  84. package/dist/formatters/search-formatter.js +48 -0
  85. package/dist/formatters/search-formatter.js.map +1 -0
  86. package/dist/formatters/status-formatter.d.ts +25 -0
  87. package/dist/formatters/status-formatter.d.ts.map +1 -0
  88. package/dist/formatters/status-formatter.js +46 -0
  89. package/dist/formatters/status-formatter.js.map +1 -0
  90. package/dist/services/config-loader.d.ts +8 -0
  91. package/dist/services/config-loader.d.ts.map +1 -0
  92. package/dist/services/config-loader.js +7 -0
  93. package/dist/services/config-loader.js.map +1 -0
  94. package/dist/services/initialization.d.ts +128 -0
  95. package/dist/services/initialization.d.ts.map +1 -0
  96. package/dist/services/initialization.js +874 -0
  97. package/dist/services/initialization.js.map +1 -0
  98. package/dist/services/language-detector.d.ts +63 -0
  99. package/dist/services/language-detector.d.ts.map +1 -0
  100. package/dist/services/language-detector.js +123 -0
  101. package/dist/services/language-detector.js.map +1 -0
  102. package/dist/services/logger.d.ts +97 -0
  103. package/dist/services/logger.d.ts.map +1 -0
  104. package/dist/services/logger.js +229 -0
  105. package/dist/services/logger.js.map +1 -0
  106. package/dist/services/plugin-loader.d.ts +84 -0
  107. package/dist/services/plugin-loader.d.ts.map +1 -0
  108. package/dist/services/plugin-loader.js +282 -0
  109. package/dist/services/plugin-loader.js.map +1 -0
  110. package/dist/services/recorder.d.ts +80 -0
  111. package/dist/services/recorder.d.ts.map +1 -0
  112. package/dist/services/recorder.js +267 -0
  113. package/dist/services/recorder.js.map +1 -0
  114. package/dist/services/server-client.d.ts +32 -0
  115. package/dist/services/server-client.d.ts.map +1 -0
  116. package/dist/services/server-client.js +68 -0
  117. package/dist/services/server-client.js.map +1 -0
  118. package/dist/services/session-storage.d.ts +20 -0
  119. package/dist/services/session-storage.d.ts.map +1 -0
  120. package/dist/services/session-storage.js +29 -0
  121. package/dist/services/session-storage.js.map +1 -0
  122. package/dist/types/config.d.ts +33 -0
  123. package/dist/types/config.d.ts.map +1 -0
  124. package/dist/types/config.js +63 -0
  125. package/dist/types/config.js.map +1 -0
  126. package/dist/types/pattern.d.ts +8 -0
  127. package/dist/types/pattern.d.ts.map +1 -0
  128. package/dist/types/pattern.js +7 -0
  129. package/dist/types/pattern.js.map +1 -0
  130. package/dist/types/plugin.d.ts +87 -0
  131. package/dist/types/plugin.d.ts.map +1 -0
  132. package/dist/types/plugin.js +5 -0
  133. package/dist/types/plugin.js.map +1 -0
  134. package/dist/types/recorder.d.ts +44 -0
  135. package/dist/types/recorder.d.ts.map +1 -0
  136. package/dist/types/recorder.js +5 -0
  137. package/dist/types/recorder.js.map +1 -0
  138. package/dist/utils/code-extractor.d.ts +8 -0
  139. package/dist/utils/code-extractor.d.ts.map +1 -0
  140. package/dist/utils/code-extractor.js +7 -0
  141. package/dist/utils/code-extractor.js.map +1 -0
  142. package/dist/utils/semver.d.ts +13 -0
  143. package/dist/utils/semver.d.ts.map +1 -0
  144. package/dist/utils/semver.js +14 -0
  145. package/dist/utils/semver.js.map +1 -0
  146. package/dist/utils/version-checker.d.ts +27 -0
  147. package/dist/utils/version-checker.d.ts.map +1 -0
  148. package/dist/utils/version-checker.js +141 -0
  149. package/dist/utils/version-checker.js.map +1 -0
  150. package/package.json +64 -0
@@ -0,0 +1,76 @@
1
+ /**
2
+ * View playbook patterns command
3
+ */
4
+ import { globalOptions } from '../cli.js';
5
+ import { createContext } from '../types/config.js';
6
+ import { ACEServerClient } from '../services/server-client.js';
7
+ import { Logger } from '../services/logger.js';
8
+ import { formatPlaybook } from '../formatters/playbook-formatter.js';
9
+ import chalk from 'chalk';
10
+ /**
11
+ * View playbook patterns
12
+ */
13
+ export async function patternsCommand(options) {
14
+ const logger = new Logger(globalOptions);
15
+ const spinner = logger.spinner('Fetching playbook...');
16
+ try {
17
+ const context = await createContext({ org: globalOptions.org, project: globalOptions.project });
18
+ const client = new ACEServerClient(context, logger);
19
+ // Fetch server config for defaults
20
+ const serverConfig = await client.getConfig();
21
+ const runtimeSettings = serverConfig?.runtime_settings || {};
22
+ const effectiveSection = options.section ?? runtimeSettings.patternDefaultSection;
23
+ const effectiveMinHelpful = options.minHelpful ?? runtimeSettings.patternMinHelpful ?? 0;
24
+ logger.debug(`Patterns: section=${effectiveSection || 'all'}, min_helpful=${effectiveMinHelpful}`);
25
+ const result = await client.getPlaybook({
26
+ forceRefresh: false,
27
+ include_metadata: true
28
+ });
29
+ spinner?.succeed('Playbook retrieved');
30
+ // Apply client-side filtering
31
+ let playbook = result.playbook;
32
+ if (effectiveSection) {
33
+ const emptyPlaybook = {
34
+ strategies_and_hard_rules: [],
35
+ useful_code_snippets: [],
36
+ troubleshooting_and_pitfalls: [],
37
+ apis_to_use: []
38
+ };
39
+ playbook = {
40
+ ...emptyPlaybook,
41
+ [effectiveSection]: playbook[effectiveSection] || []
42
+ };
43
+ }
44
+ if (effectiveMinHelpful > 0) {
45
+ for (const key of Object.keys(playbook)) {
46
+ playbook[key] = playbook[key].filter((b) => (b.helpful || 0) >= effectiveMinHelpful);
47
+ }
48
+ }
49
+ if (logger.isJson()) {
50
+ logger.output({ playbook, total_bullets: result.total_bullets });
51
+ }
52
+ else {
53
+ // Use total_bullets from server response (single source of truth)
54
+ // NOTE: Object.keys(playbook).length is ALWAYS 4 (even when empty), so it's unreliable
55
+ if (result.total_bullets === 0) {
56
+ logger.warn('No patterns found');
57
+ logger.stderr(chalk.dim('Run "ce-ace bootstrap" to initialize the playbook\n'));
58
+ return;
59
+ }
60
+ formatPlaybook(playbook, {
61
+ section: effectiveSection,
62
+ minHelpful: effectiveMinHelpful,
63
+ verbose: logger.isVerbose()
64
+ });
65
+ if (result.metadata && logger.isVerbose()) {
66
+ logger.debug('Metadata:', result.metadata);
67
+ }
68
+ }
69
+ }
70
+ catch (error) {
71
+ spinner?.fail('Failed to fetch playbook');
72
+ logger.error('Failed to fetch playbook', error instanceof Error ? error : String(error));
73
+ process.exit(1);
74
+ }
75
+ }
76
+ //# sourceMappingURL=patterns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../src/commands/patterns.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Plugin management commands
3
+ */
4
+ /**
5
+ * List all available plugins
6
+ */
7
+ export declare function pluginListCommand(): Promise<void>;
8
+ /**
9
+ * Trust a plugin
10
+ */
11
+ export declare function pluginTrustCommand(name: string, options: {
12
+ yes?: boolean;
13
+ }): Promise<void>;
14
+ /**
15
+ * Untrust a plugin
16
+ */
17
+ export declare function pluginUntrustCommand(name: string): Promise<void>;
18
+ /**
19
+ * Enable a plugin
20
+ */
21
+ export declare function pluginEnableCommand(name: string): Promise<void>;
22
+ /**
23
+ * Disable a plugin
24
+ */
25
+ export declare function pluginDisableCommand(name: string): Promise<void>;
26
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/commands/plugin.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH;;GAEG;AACH,wBAAsB,iBAAiB,kBAmEtC;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,iBAmFhF;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,iBA4BtD;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,iBAgDrD;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,iBA4BtD"}
@@ -0,0 +1,267 @@
1
+ /**
2
+ * Plugin management commands
3
+ */
4
+ import { getPluginLoader } from '../services/plugin-loader.js';
5
+ import { globalOptions } from '../cli.js';
6
+ import { Logger } from '../services/logger.js';
7
+ import chalk from 'chalk';
8
+ import * as readline from 'readline/promises';
9
+ import { stdin, stdout } from 'process';
10
+ /**
11
+ * List all available plugins
12
+ */
13
+ export async function pluginListCommand() {
14
+ const logger = new Logger(globalOptions);
15
+ try {
16
+ const loader = getPluginLoader(logger);
17
+ const plugins = loader.discoverPlugins();
18
+ // Note: registry available via loader.getRegistry() if needed
19
+ if (logger.isJson()) {
20
+ logger.output({
21
+ plugins: plugins.map(p => ({
22
+ name: p.name,
23
+ version: p.version,
24
+ description: p.description,
25
+ enabled: loader.isEnabled(p.name),
26
+ trusted: loader.isTrusted(p),
27
+ commands: p.commands?.length || 0
28
+ }))
29
+ });
30
+ }
31
+ else {
32
+ if (plugins.length === 0) {
33
+ logger.info('No plugins found');
34
+ logger.info(chalk.dim(`Install plugins to ~/.ace/plugins/`));
35
+ return;
36
+ }
37
+ logger.info(chalk.bold(`\nšŸ”Œ Available Plugins (${plugins.length})\n`));
38
+ for (const plugin of plugins) {
39
+ const trusted = loader.isTrusted(plugin);
40
+ const enabled = loader.isEnabled(plugin.name);
41
+ const statusIcon = !trusted ? chalk.yellow('⚠') : enabled ? chalk.green('āœ“') : chalk.dim('ā—‹');
42
+ const statusText = !trusted ? chalk.yellow('UNTRUSTED') : enabled ? chalk.green('ENABLED') : chalk.dim('DISABLED');
43
+ logger.info(`${statusIcon} ${chalk.cyan(plugin.name)} ${chalk.dim(`v${plugin.version}`)} [${statusText}]`);
44
+ if (plugin.description) {
45
+ logger.info(chalk.dim(` ${plugin.description}`));
46
+ }
47
+ if (plugin.commands && plugin.commands.length > 0) {
48
+ logger.info(chalk.dim(` Commands: ${plugin.commands.map(c => c.name).join(', ')}`));
49
+ }
50
+ if (!trusted) {
51
+ logger.info(chalk.yellow(` ⚠ Run 'ce-ace plugin trust ${plugin.name}' to trust this plugin`));
52
+ }
53
+ logger.info('');
54
+ }
55
+ logger.info(chalk.dim('Run \'ce-ace plugin trust <name>\' to trust a plugin'));
56
+ logger.info(chalk.dim('Run \'ce-ace plugin enable <name>\' to enable a plugin'));
57
+ logger.info(chalk.dim('Run \'ce-ace plugin disable <name>\' to disable a plugin\n'));
58
+ }
59
+ }
60
+ catch (error) {
61
+ if (logger.isJson()) {
62
+ logger.output({
63
+ success: false,
64
+ error: error instanceof Error ? error.message : String(error)
65
+ });
66
+ }
67
+ else {
68
+ logger.error('Failed to list plugins', error instanceof Error ? error : String(error));
69
+ }
70
+ process.exit(1);
71
+ }
72
+ }
73
+ /**
74
+ * Trust a plugin
75
+ */
76
+ export async function pluginTrustCommand(name, options) {
77
+ const logger = new Logger(globalOptions);
78
+ try {
79
+ const loader = getPluginLoader(logger);
80
+ const plugins = loader.discoverPlugins();
81
+ // Find plugin
82
+ const plugin = plugins.find(p => p.name === name);
83
+ if (!plugin) {
84
+ throw new Error(`Plugin not found: ${name}`);
85
+ }
86
+ // Check if already trusted
87
+ if (loader.isTrusted(plugin)) {
88
+ if (logger.isJson()) {
89
+ logger.output({
90
+ success: true,
91
+ message: 'Plugin already trusted',
92
+ plugin: name
93
+ });
94
+ }
95
+ else {
96
+ logger.info(chalk.yellow(`Plugin "${name}" is already trusted`));
97
+ }
98
+ return;
99
+ }
100
+ // Show warning and get confirmation
101
+ if (!options.yes && !logger.isJson()) {
102
+ logger.warn(`āš ļø Security Warning: Trusting plugins`);
103
+ logger.info('');
104
+ logger.info(chalk.dim('Plugins can execute arbitrary code with access to:'));
105
+ if (plugin.permissions?.network) {
106
+ logger.info(chalk.dim(' • Network requests'));
107
+ }
108
+ if (plugin.permissions?.filesystem) {
109
+ logger.info(chalk.dim(` • Filesystem (${plugin.permissions.filesystem})`));
110
+ }
111
+ if (plugin.permissions?.environment) {
112
+ logger.info(chalk.dim(' • Environment variables'));
113
+ }
114
+ if (plugin.permissions?.subprocess) {
115
+ logger.info(chalk.dim(' • Subprocess execution'));
116
+ }
117
+ logger.info('');
118
+ logger.info(chalk.dim('Only trust plugins from sources you trust.'));
119
+ logger.info('');
120
+ const rl = readline.createInterface({ input: stdin, output: stdout });
121
+ const answer = await rl.question(chalk.yellow(`Trust plugin "${name}" v${plugin.version}? (y/N): `));
122
+ rl.close();
123
+ if (answer.toLowerCase() !== 'y' && answer.toLowerCase() !== 'yes') {
124
+ logger.info(chalk.dim('Cancelled'));
125
+ return;
126
+ }
127
+ }
128
+ // Trust plugin
129
+ loader.trustPlugin(name, plugin.version);
130
+ if (logger.isJson()) {
131
+ logger.output({
132
+ success: true,
133
+ plugin: name,
134
+ version: plugin.version
135
+ });
136
+ }
137
+ else {
138
+ logger.success(`āœ… Plugin "${name}" v${plugin.version} is now trusted`);
139
+ logger.info(chalk.dim(`Run 'ce-ace plugin enable ${name}' to enable it`));
140
+ }
141
+ }
142
+ catch (error) {
143
+ if (logger.isJson()) {
144
+ logger.output({
145
+ success: false,
146
+ error: error instanceof Error ? error.message : String(error)
147
+ });
148
+ }
149
+ else {
150
+ logger.error('Failed to trust plugin', error instanceof Error ? error : String(error));
151
+ }
152
+ process.exit(1);
153
+ }
154
+ }
155
+ /**
156
+ * Untrust a plugin
157
+ */
158
+ export async function pluginUntrustCommand(name) {
159
+ const logger = new Logger(globalOptions);
160
+ try {
161
+ const loader = getPluginLoader(logger);
162
+ loader.untrustPlugin(name);
163
+ if (logger.isJson()) {
164
+ logger.output({
165
+ success: true,
166
+ plugin: name
167
+ });
168
+ }
169
+ else {
170
+ logger.success(`šŸ”“ Plugin "${name}" is no longer trusted`);
171
+ logger.info(chalk.dim('The plugin has been automatically disabled'));
172
+ }
173
+ }
174
+ catch (error) {
175
+ if (logger.isJson()) {
176
+ logger.output({
177
+ success: false,
178
+ error: error instanceof Error ? error.message : String(error)
179
+ });
180
+ }
181
+ else {
182
+ logger.error('Failed to untrust plugin', error instanceof Error ? error : String(error));
183
+ }
184
+ process.exit(1);
185
+ }
186
+ }
187
+ /**
188
+ * Enable a plugin
189
+ */
190
+ export async function pluginEnableCommand(name) {
191
+ const logger = new Logger(globalOptions);
192
+ try {
193
+ const loader = getPluginLoader(logger);
194
+ const plugins = loader.discoverPlugins();
195
+ // Find plugin
196
+ const plugin = plugins.find(p => p.name === name);
197
+ if (!plugin) {
198
+ throw new Error(`Plugin not found: ${name}`);
199
+ }
200
+ // Check if trusted
201
+ if (!loader.isTrusted(plugin)) {
202
+ throw new Error(`Plugin "${name}" is not trusted. Run "ce-ace plugin trust ${name}" first.`);
203
+ }
204
+ // Enable plugin
205
+ loader.enablePlugin(name);
206
+ if (logger.isJson()) {
207
+ logger.output({
208
+ success: true,
209
+ plugin: name
210
+ });
211
+ }
212
+ else {
213
+ logger.success(`āœ… Plugin "${name}" enabled`);
214
+ if (plugin.commands && plugin.commands.length > 0) {
215
+ logger.info(chalk.dim('Available commands:'));
216
+ for (const cmd of plugin.commands) {
217
+ logger.info(chalk.dim(` • ce-ace ${name}:${cmd.name} - ${cmd.description}`));
218
+ }
219
+ }
220
+ }
221
+ }
222
+ catch (error) {
223
+ if (logger.isJson()) {
224
+ logger.output({
225
+ success: false,
226
+ error: error instanceof Error ? error.message : String(error)
227
+ });
228
+ }
229
+ else {
230
+ logger.error('Failed to enable plugin', error instanceof Error ? error : String(error));
231
+ }
232
+ process.exit(1);
233
+ }
234
+ }
235
+ /**
236
+ * Disable a plugin
237
+ */
238
+ export async function pluginDisableCommand(name) {
239
+ const logger = new Logger(globalOptions);
240
+ try {
241
+ const loader = getPluginLoader(logger);
242
+ loader.disablePlugin(name);
243
+ if (logger.isJson()) {
244
+ logger.output({
245
+ success: true,
246
+ plugin: name
247
+ });
248
+ }
249
+ else {
250
+ logger.success(`āøļø Plugin "${name}" disabled`);
251
+ logger.info(chalk.dim(`Run 'ce-ace plugin enable ${name}' to re-enable it`));
252
+ }
253
+ }
254
+ catch (error) {
255
+ if (logger.isJson()) {
256
+ logger.output({
257
+ success: false,
258
+ error: error instanceof Error ? error.message : String(error)
259
+ });
260
+ }
261
+ else {
262
+ logger.error('Failed to disable plugin', error instanceof Error ? error : String(error));
263
+ }
264
+ process.exit(1);
265
+ }
266
+ }
267
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/commands/plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Projects command - List and discover projects from ACE server
3
+ */
4
+ /**
5
+ * Projects command options
6
+ */
7
+ interface ProjectsOptions {
8
+ org?: string;
9
+ }
10
+ /**
11
+ * List all projects across all organizations
12
+ */
13
+ export declare function projectsCommand(options?: ProjectsOptions): Promise<void>;
14
+ export {};
15
+ //# sourceMappingURL=projects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/commands/projects.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH;;GAEG;AACH,UAAU,eAAe;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,GAAE,eAAoB,iBAuHlE"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Projects command - List and discover projects from ACE server
3
+ */
4
+ import { globalOptions } from '../cli.js';
5
+ import { Logger } from '../services/logger.js';
6
+ import { ACEServerClient } from '../services/server-client.js';
7
+ import { loadConfig } from '../services/config-loader.js';
8
+ import chalk from 'chalk';
9
+ /**
10
+ * List all projects across all organizations
11
+ */
12
+ export async function projectsCommand(options = {}) {
13
+ const logger = new Logger(globalOptions);
14
+ try {
15
+ // Load global config
16
+ const config = loadConfig();
17
+ // Determine which orgs to query
18
+ const orgsToQuery = new Map();
19
+ if (options.org) {
20
+ // Filter to specific org
21
+ if (config.orgs && config.orgs[options.org]) {
22
+ orgsToQuery.set(options.org, {
23
+ apiToken: config.orgs[options.org].apiToken
24
+ });
25
+ }
26
+ else {
27
+ throw new Error(`Organization ${options.org} not found in config`);
28
+ }
29
+ }
30
+ else {
31
+ // Query all orgs
32
+ if (config.orgs) {
33
+ for (const [orgId, orgConfig] of Object.entries(config.orgs)) {
34
+ orgsToQuery.set(orgId, {
35
+ apiToken: orgConfig.apiToken
36
+ });
37
+ }
38
+ }
39
+ else if (config.apiToken) {
40
+ // Single-org mode - we don't know the org ID yet, will get from server
41
+ orgsToQuery.set('default', {
42
+ apiToken: config.apiToken
43
+ });
44
+ }
45
+ else {
46
+ throw new Error('No API tokens found in config. Run `ce-ace config` to configure.');
47
+ }
48
+ }
49
+ const spinner = logger.spinner('Fetching projects from server...');
50
+ // Query each org
51
+ const allProjects = [];
52
+ for (const [orgId, orgConfig] of orgsToQuery.entries()) {
53
+ try {
54
+ // Create temporary context for this org
55
+ const tempContext = {
56
+ serverUrl: config.serverUrl,
57
+ apiToken: orgConfig.apiToken,
58
+ projectId: 'temp', // Not used for verifyToken
59
+ cacheTtlMinutes: config.cacheTtlMinutes
60
+ };
61
+ const client = new ACEServerClient(tempContext, logger);
62
+ const result = await client.verifyToken();
63
+ allProjects.push({
64
+ orgId: result.org_id,
65
+ orgName: result.org_name,
66
+ projects: result.projects
67
+ });
68
+ }
69
+ catch (error) {
70
+ logger.debug(`Failed to query org ${orgId}: ${error instanceof Error ? error.message : String(error)}`);
71
+ // Continue with other orgs
72
+ }
73
+ }
74
+ spinner?.succeed();
75
+ // Output results
76
+ if (logger.isJson()) {
77
+ logger.output({
78
+ organizations: allProjects.map(org => ({
79
+ org_id: org.orgId,
80
+ org_name: org.orgName,
81
+ projects: org.projects
82
+ }))
83
+ });
84
+ }
85
+ else {
86
+ // Human-readable output
87
+ if (allProjects.length === 0) {
88
+ logger.info('No projects found');
89
+ logger.info(chalk.dim('Run `ce-ace config` to configure your API token'));
90
+ return;
91
+ }
92
+ logger.info(chalk.bold(`\nšŸ“‹ ACE Projects\n`));
93
+ for (const org of allProjects) {
94
+ logger.info(chalk.cyan.bold(`${org.orgName} (${org.orgId})`));
95
+ if (org.projects.length === 0) {
96
+ logger.info(chalk.dim(' No projects'));
97
+ }
98
+ else {
99
+ for (const project of org.projects) {
100
+ logger.info(` ${chalk.green('ā—')} ${project.project_name}`);
101
+ logger.info(chalk.dim(` ID: ${project.project_id}`));
102
+ }
103
+ }
104
+ logger.info('');
105
+ }
106
+ logger.info(chalk.dim('Tip: Use --org <org_id> to filter to a specific organization\n'));
107
+ }
108
+ }
109
+ catch (error) {
110
+ if (logger.isJson()) {
111
+ logger.output({
112
+ success: false,
113
+ error: error instanceof Error ? error.message : String(error)
114
+ });
115
+ }
116
+ else {
117
+ logger.error('Failed to fetch projects', error instanceof Error ? error : String(error));
118
+ }
119
+ process.exit(1);
120
+ }
121
+ }
122
+ //# sourceMappingURL=projects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/commands/projects.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Session recording commands
3
+ */
4
+ /**
5
+ * Start recording a session
6
+ */
7
+ export declare function recordStartCommand(options: {
8
+ session?: string;
9
+ }): Promise<void>;
10
+ /**
11
+ * Stop recording the current session
12
+ */
13
+ export declare function recordStopCommand(): Promise<void>;
14
+ /**
15
+ * List all recorded sessions
16
+ */
17
+ export declare function recordListCommand(): Promise<void>;
18
+ /**
19
+ * Export a session to a file
20
+ */
21
+ export declare function recordExportCommand(sessionId: string, outputPath: string): Promise<void>;
22
+ /**
23
+ * Delete a session recording
24
+ */
25
+ export declare function recordDeleteCommand(sessionId: string, options: {
26
+ yes?: boolean;
27
+ }): Promise<void>;
28
+ /**
29
+ * Get current recording status
30
+ */
31
+ export declare function recordStatusCommand(): Promise<void>;
32
+ //# sourceMappingURL=record.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../src/commands/record.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,iBAyCrE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,kBAoCtC;AAED;;GAEG;AACH,wBAAsB,iBAAiB,kBA6DtC;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,iBA2B9E;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,iBA+CtF;AAED;;GAEG;AACH,wBAAsB,mBAAmB,kBA2CxC"}