@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,307 @@
1
+ /**
2
+ * Session recording commands
3
+ */
4
+ import { getRecorder } from '../services/recorder.js';
5
+ import { globalOptions } from '../cli.js';
6
+ import { Logger } from '../services/logger.js';
7
+ import chalk from 'chalk';
8
+ import { createContext } from '../types/config.js';
9
+ /**
10
+ * Start recording a session
11
+ */
12
+ export async function recordStartCommand(options) {
13
+ const logger = new Logger(globalOptions);
14
+ try {
15
+ const recorder = getRecorder();
16
+ // Get project ID from config if available
17
+ let projectId;
18
+ try {
19
+ const context = await createContext({ org: globalOptions.org, project: globalOptions.project });
20
+ projectId = context.projectId;
21
+ }
22
+ catch {
23
+ // Config not available, continue without project ID
24
+ }
25
+ // Build command description
26
+ const command = options.session || 'ce-ace session';
27
+ const result = recorder.start(command, projectId);
28
+ if (logger.isJson()) {
29
+ logger.output({
30
+ success: true,
31
+ sessionId: result.sessionId,
32
+ message: result.message
33
+ });
34
+ }
35
+ else {
36
+ logger.success(`🔴 ${result.message}`);
37
+ logger.info(chalk.dim(` Run 'ce-ace record stop' to end recording`));
38
+ }
39
+ }
40
+ catch (error) {
41
+ if (logger.isJson()) {
42
+ logger.output({
43
+ success: false,
44
+ error: error instanceof Error ? error.message : String(error)
45
+ });
46
+ }
47
+ else {
48
+ logger.error('Failed to start recording', error instanceof Error ? error : String(error));
49
+ }
50
+ process.exit(1);
51
+ }
52
+ }
53
+ /**
54
+ * Stop recording the current session
55
+ */
56
+ export async function recordStopCommand() {
57
+ const logger = new Logger(globalOptions);
58
+ try {
59
+ const recorder = getRecorder();
60
+ const result = recorder.stop();
61
+ const durationSeconds = (result.duration / 1000).toFixed(1);
62
+ if (logger.isJson()) {
63
+ logger.output({
64
+ success: true,
65
+ sessionId: result.sessionId,
66
+ events: result.events,
67
+ duration_ms: result.duration
68
+ });
69
+ }
70
+ else {
71
+ logger.success(`⏹️ Recording stopped`);
72
+ logger.info(chalk.dim(` Session: ${result.sessionId}`));
73
+ logger.info(chalk.dim(` Events: ${result.events}`));
74
+ logger.info(chalk.dim(` Duration: ${durationSeconds}s`));
75
+ logger.info('');
76
+ logger.info(chalk.dim(` Run 'ce-ace record list' to see all sessions`));
77
+ logger.info(chalk.dim(` Run 'ce-ace summarize ${result.sessionId}' to analyze this session`));
78
+ }
79
+ }
80
+ catch (error) {
81
+ if (logger.isJson()) {
82
+ logger.output({
83
+ success: false,
84
+ error: error instanceof Error ? error.message : String(error)
85
+ });
86
+ }
87
+ else {
88
+ logger.error('Failed to stop recording', error instanceof Error ? error : String(error));
89
+ }
90
+ process.exit(1);
91
+ }
92
+ }
93
+ /**
94
+ * List all recorded sessions
95
+ */
96
+ export async function recordListCommand() {
97
+ const logger = new Logger(globalOptions);
98
+ try {
99
+ const recorder = getRecorder();
100
+ const sessions = recorder.listSessions();
101
+ if (logger.isJson()) {
102
+ logger.output({
103
+ sessions: sessions.map(s => ({
104
+ id: s.id,
105
+ startTime: s.startTime,
106
+ endTime: s.endTime,
107
+ command: s.command,
108
+ events: s.events,
109
+ projectId: s.projectId
110
+ }))
111
+ });
112
+ }
113
+ else {
114
+ if (sessions.length === 0) {
115
+ logger.info('No recorded sessions found');
116
+ logger.info(chalk.dim(`Run 'ce-ace record start' to begin recording`));
117
+ return;
118
+ }
119
+ logger.info(chalk.bold(`\n📼 Recorded Sessions (${sessions.length})\n`));
120
+ for (const session of sessions) {
121
+ const status = session.endTime ? chalk.green('✓') : chalk.yellow('⏺');
122
+ const duration = session.endTime
123
+ ? chalk.dim(formatDuration(session.startTime, session.endTime))
124
+ : chalk.yellow('(in progress)');
125
+ logger.info(`${status} ${chalk.cyan(session.id)}`);
126
+ logger.info(chalk.dim(` Started: ${formatTimestamp(session.startTime)}`));
127
+ if (session.endTime) {
128
+ logger.info(chalk.dim(` Ended: ${formatTimestamp(session.endTime)}`));
129
+ }
130
+ logger.info(chalk.dim(` Duration: ${duration}`));
131
+ logger.info(chalk.dim(` Events: ${session.events}`));
132
+ logger.info(chalk.dim(` Command: ${session.command}`));
133
+ if (session.projectId) {
134
+ logger.info(chalk.dim(` Project: ${session.projectId}`));
135
+ }
136
+ logger.info('');
137
+ }
138
+ logger.info(chalk.dim('Run \'ce-ace record export <sessionId> <output>\' to export a session'));
139
+ logger.info(chalk.dim('Run \'ce-ace summarize <sessionId>\' to analyze a session\n'));
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 list sessions', error instanceof Error ? error : String(error));
151
+ }
152
+ process.exit(1);
153
+ }
154
+ }
155
+ /**
156
+ * Export a session to a file
157
+ */
158
+ export async function recordExportCommand(sessionId, outputPath) {
159
+ const logger = new Logger(globalOptions);
160
+ try {
161
+ const recorder = getRecorder();
162
+ recorder.exportSession(sessionId, outputPath);
163
+ if (logger.isJson()) {
164
+ logger.output({
165
+ success: true,
166
+ sessionId,
167
+ output: outputPath
168
+ });
169
+ }
170
+ else {
171
+ logger.success(`📄 Session exported to ${outputPath}`);
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 export session', error instanceof Error ? error : String(error));
183
+ }
184
+ process.exit(1);
185
+ }
186
+ }
187
+ /**
188
+ * Delete a session recording
189
+ */
190
+ export async function recordDeleteCommand(sessionId, options) {
191
+ const logger = new Logger(globalOptions);
192
+ try {
193
+ const recorder = getRecorder();
194
+ // Verify session exists
195
+ recorder.getSession(sessionId);
196
+ // Confirm deletion if --yes not provided
197
+ if (!options.yes && !logger.isJson()) {
198
+ const readline = await import('readline/promises');
199
+ const { stdin, stdout } = await import('process');
200
+ const rl = readline.createInterface({ input: stdin, output: stdout });
201
+ const answer = await rl.question(chalk.yellow(`⚠️ Delete session ${sessionId}? (y/N): `));
202
+ rl.close();
203
+ if (answer.toLowerCase() !== 'y' && answer.toLowerCase() !== 'yes') {
204
+ logger.info(chalk.dim('Cancelled'));
205
+ return;
206
+ }
207
+ }
208
+ recorder.deleteSession(sessionId);
209
+ if (logger.isJson()) {
210
+ logger.output({
211
+ success: true,
212
+ sessionId
213
+ });
214
+ }
215
+ else {
216
+ logger.success(`🗑️ Session ${sessionId} deleted`);
217
+ }
218
+ }
219
+ catch (error) {
220
+ if (logger.isJson()) {
221
+ logger.output({
222
+ success: false,
223
+ error: error instanceof Error ? error.message : String(error)
224
+ });
225
+ }
226
+ else {
227
+ logger.error('Failed to delete session', error instanceof Error ? error : String(error));
228
+ }
229
+ process.exit(1);
230
+ }
231
+ }
232
+ /**
233
+ * Get current recording status
234
+ */
235
+ export async function recordStatusCommand() {
236
+ const logger = new Logger(globalOptions);
237
+ try {
238
+ const recorder = getRecorder();
239
+ const state = recorder.getState();
240
+ if (logger.isJson()) {
241
+ logger.output({
242
+ active: state.active,
243
+ sessionId: state.sessionId,
244
+ startTime: state.startTime?.toISOString(),
245
+ eventCount: state.eventCount
246
+ });
247
+ }
248
+ else {
249
+ if (state.active) {
250
+ const duration = state.startTime
251
+ ? formatDuration(state.startTime.toISOString(), new Date().toISOString())
252
+ : 'unknown';
253
+ logger.info(chalk.bold('\n🔴 Recording Active\n'));
254
+ logger.info(chalk.dim(` Session: ${state.sessionId}`));
255
+ logger.info(chalk.dim(` Started: ${formatTimestamp(state.startTime.toISOString())}`));
256
+ logger.info(chalk.dim(` Duration: ${duration}`));
257
+ logger.info(chalk.dim(` Events: ${state.eventCount}`));
258
+ logger.info('');
259
+ logger.info(chalk.dim(`Run 'ce-ace record stop' to end recording\n`));
260
+ }
261
+ else {
262
+ logger.info(chalk.dim('No active recording'));
263
+ logger.info(chalk.dim(`Run 'ce-ace record start' to begin recording\n`));
264
+ }
265
+ }
266
+ }
267
+ catch (error) {
268
+ if (logger.isJson()) {
269
+ logger.output({
270
+ success: false,
271
+ error: error instanceof Error ? error.message : String(error)
272
+ });
273
+ }
274
+ else {
275
+ logger.error('Failed to get status', error instanceof Error ? error : String(error));
276
+ }
277
+ process.exit(1);
278
+ }
279
+ }
280
+ /**
281
+ * Format timestamp for display
282
+ */
283
+ function formatTimestamp(timestamp) {
284
+ const date = new Date(timestamp);
285
+ return date.toLocaleString();
286
+ }
287
+ /**
288
+ * Format duration between two timestamps
289
+ */
290
+ function formatDuration(start, end) {
291
+ const startTime = new Date(start).getTime();
292
+ const endTime = new Date(end).getTime();
293
+ const durationMs = endTime - startTime;
294
+ const seconds = Math.floor(durationMs / 1000);
295
+ const minutes = Math.floor(seconds / 60);
296
+ const hours = Math.floor(minutes / 60);
297
+ if (hours > 0) {
298
+ return `${hours}h ${minutes % 60}m`;
299
+ }
300
+ else if (minutes > 0) {
301
+ return `${minutes}m ${seconds % 60}s`;
302
+ }
303
+ else {
304
+ return `${seconds}s`;
305
+ }
306
+ }
307
+ //# sourceMappingURL=record.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record.js","sourceRoot":"","sources":["../../src/commands/record.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Semantic search command
3
+ */
4
+ interface SearchOptions {
5
+ stdin?: boolean;
6
+ threshold?: number;
7
+ section?: string;
8
+ topK?: number;
9
+ pinSession?: string;
10
+ }
11
+ /**
12
+ * Search for patterns using semantic search
13
+ */
14
+ export declare function searchCommand(query: string, options: SearchOptions): Promise<void>;
15
+ export {};
16
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,UAAU,aAAa;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,iBAiIxE"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Semantic search command
3
+ */
4
+ import { readFileSync } from 'fs';
5
+ import { globalOptions } from '../cli.js';
6
+ import { ACEServerClient } from '../services/server-client.js';
7
+ import { SessionStorage } from '../services/session-storage.js';
8
+ import { formatSearchResults } from '../formatters/search-formatter.js';
9
+ import { Logger } from '../services/logger.js';
10
+ import chalk from 'chalk';
11
+ /**
12
+ * Search for patterns using semantic search
13
+ */
14
+ export async function searchCommand(query, options) {
15
+ const logger = new Logger(globalOptions);
16
+ let finalQuery = query;
17
+ // Read from stdin if requested
18
+ if (options.stdin) {
19
+ try {
20
+ const stdinData = readFileSync(0, 'utf8'); // fd 0 is stdin
21
+ finalQuery = stdinData.trim();
22
+ }
23
+ catch (error) {
24
+ if (logger.isJson()) {
25
+ logger.error('Failed to read from stdin');
26
+ }
27
+ else {
28
+ logger.error(chalk.red('Error: Failed to read from stdin'));
29
+ }
30
+ process.exit(1);
31
+ }
32
+ }
33
+ if (!finalQuery) {
34
+ if (logger.isJson()) {
35
+ logger.error('Query is required');
36
+ }
37
+ else {
38
+ logger.error(chalk.red('Error: Query is required'));
39
+ }
40
+ process.exit(1);
41
+ }
42
+ const spinner = logger.spinner('Searching playbook...');
43
+ try {
44
+ // Create context using 4-tier precedence (flags > env > .claude/settings.json > error)
45
+ const context = await import('../types/config.js').then(m => m.createContext({ org: globalOptions.org, project: globalOptions.project }));
46
+ // Create client with resolved context
47
+ const client = new ACEServerClient(context, logger);
48
+ // Fetch server-derived runtime settings
49
+ const serverConfig = await client.getConfig();
50
+ const runtimeSettings = serverConfig?.runtime_settings || context.runtimeSettings;
51
+ // Use CLI option if provided, otherwise use server's constitution_threshold
52
+ // NOTE: constitution_threshold is the actual field returned by the server for search similarity
53
+ // Server ALWAYS returns this field (confirmed by server team) - if missing, server is broken
54
+ const threshold = options.threshold ?? serverConfig?.constitution_threshold;
55
+ if (threshold === undefined) {
56
+ logger.error(chalk.red('Error: Server did not provide constitution_threshold'));
57
+ logger.error(chalk.dim('This indicates a server configuration issue. Please contact support.'));
58
+ process.exit(1);
59
+ }
60
+ const section = options.section ?? runtimeSettings.patternDefaultSection;
61
+ // Parse and validate top_k parameter - use server default if not provided
62
+ let topK = undefined;
63
+ if (options.topK !== undefined) {
64
+ topK = typeof options.topK === 'number' ? options.topK : parseInt(String(options.topK), 10);
65
+ if (isNaN(topK) || topK < 1 || topK > 100) {
66
+ logger.error(chalk.red('Error: --top-k must be between 1 and 100'));
67
+ process.exit(1);
68
+ }
69
+ }
70
+ else {
71
+ // Use server's search_top_k as default when flag not provided
72
+ topK = serverConfig?.search_top_k;
73
+ }
74
+ logger.debug(`Using search threshold: ${threshold} ${options.threshold ? '(CLI override)' : '(server-derived)'}`);
75
+ logger.debug(`Context source: flags=${!!globalOptions.org}, env=${!!process.env.ACE_ORG_ID}, project=${!!context.orgId}`);
76
+ if (topK !== undefined) {
77
+ logger.debug(`Using top_k: ${topK} ${options.topK ? '(CLI override)' : '(server-derived)'}`);
78
+ }
79
+ const result = await client.searchPatterns({
80
+ query: finalQuery,
81
+ threshold,
82
+ section,
83
+ top_k: topK,
84
+ include_metadata: true
85
+ });
86
+ // Pin patterns to session if requested
87
+ if (options.pinSession && result.similar_patterns && result.similar_patterns.length > 0) {
88
+ const sessionStorage = new SessionStorage(logger);
89
+ await sessionStorage.initialize();
90
+ await sessionStorage.pinSession(options.pinSession, finalQuery, result.similar_patterns, threshold, topK || result.top_k || 25);
91
+ sessionStorage.close();
92
+ logger.debug(`📌 Patterns pinned to session: ${options.pinSession}`);
93
+ }
94
+ spinner?.succeed(`Found ${result.similar_patterns?.length || 0} patterns`);
95
+ if (logger.isJson()) {
96
+ logger.output(result);
97
+ }
98
+ else {
99
+ if (!result.similar_patterns || result.similar_patterns.length === 0) {
100
+ logger.info(chalk.yellow('\n⚠️ No matching patterns found\n'));
101
+ logger.info(chalk.dim(`Try lowering the threshold (current: ${threshold})\n`));
102
+ return;
103
+ }
104
+ formatSearchResults(result.similar_patterns, {
105
+ query: finalQuery,
106
+ verbose: logger.isVerbose()
107
+ });
108
+ if (result.metadata && logger.isVerbose()) {
109
+ logger.debug(chalk.dim('\nMetadata:'));
110
+ logger.debug(chalk.dim(` ${JSON.stringify(result.metadata, null, 2)}`));
111
+ }
112
+ }
113
+ }
114
+ catch (error) {
115
+ spinner?.fail('Search failed');
116
+ if (logger.isJson()) {
117
+ logger.error(error instanceof Error ? error.message : String(error));
118
+ }
119
+ else {
120
+ logger.error(chalk.red(`\nError: ${error instanceof Error ? error.message : String(error)}\n`));
121
+ }
122
+ process.exit(1);
123
+ }
124
+ }
125
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Playbook status command
3
+ */
4
+ /**
5
+ * Show playbook statistics
6
+ */
7
+ export declare function statusCommand(): Promise<void>;
8
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH;;GAEG;AACH,wBAAsB,aAAa,kBAyDlC"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Playbook status 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 chalk from 'chalk';
9
+ /**
10
+ * Show playbook statistics
11
+ */
12
+ export async function statusCommand() {
13
+ const logger = new Logger(globalOptions);
14
+ let spinner = logger.spinner('Fetching playbook status...');
15
+ try {
16
+ // Create context using 4-tier precedence (flags > env > .claude/settings.json > error)
17
+ const context = await createContext({ org: globalOptions.org, project: globalOptions.project });
18
+ const client = new ACEServerClient(context, logger);
19
+ const status = await client.getAnalytics();
20
+ spinner?.succeed('Status retrieved');
21
+ if (logger.isJson()) {
22
+ logger.output(status);
23
+ }
24
+ else {
25
+ logger.info(chalk.bold('\n📊 Playbook Status\n'));
26
+ // Handle both total_patterns (new) and total_bullets (legacy)
27
+ const totalCount = status.total_patterns ?? status.total_bullets ?? 0;
28
+ logger.info(` ${chalk.cyan('Total Patterns:')} ${totalCount}`);
29
+ logger.info(` ${chalk.cyan('Project ID:')} ${context.projectId}`);
30
+ if (status.by_section) {
31
+ logger.info(chalk.bold('\n📑 By Section:\n'));
32
+ Object.entries(status.by_section).forEach(([section, count]) => {
33
+ const label = section.replace(/_/g, ' ').replace(/\b\w/g, l => l.toUpperCase());
34
+ logger.info(` ${chalk.dim('•')} ${label}: ${count}`);
35
+ });
36
+ }
37
+ if (status.top_helpful && status.top_helpful.length > 0) {
38
+ logger.info(chalk.bold('\n⭐ Top Helpful Patterns:\n'));
39
+ status.top_helpful.slice(0, 5).forEach((bullet, index) => {
40
+ logger.info(` ${chalk.green(index + 1)}. ${chalk.bold(`[+${bullet.helpful}]`)} ${bullet.content.substring(0, 60)}...`);
41
+ });
42
+ }
43
+ if (status.top_harmful && status.top_harmful.length > 0) {
44
+ logger.info(chalk.bold('\n⚠️ Top Harmful Patterns:\n'));
45
+ status.top_harmful.slice(0, 3).forEach((bullet, index) => {
46
+ logger.info(` ${chalk.red(index + 1)}. ${chalk.bold(`[-${bullet.harmful}]`)} ${bullet.content.substring(0, 60)}...`);
47
+ });
48
+ }
49
+ logger.info('');
50
+ }
51
+ }
52
+ catch (error) {
53
+ spinner?.fail('Failed to fetch status');
54
+ if (logger.isJson()) {
55
+ logger.error(JSON.stringify({ error: error instanceof Error ? error.message : String(error) }));
56
+ }
57
+ else {
58
+ logger.error(chalk.red(`\n❌ Error: ${error instanceof Error ? error.message : String(error)}\n`));
59
+ }
60
+ process.exit(1);
61
+ }
62
+ }
63
+ //# 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,17 @@
1
+ /**
2
+ * Session summarization command
3
+ */
4
+ /**
5
+ * Summarize command options
6
+ */
7
+ interface SummarizeOptions {
8
+ output?: string;
9
+ format?: string;
10
+ stdin?: boolean;
11
+ }
12
+ /**
13
+ * Summarize a recorded session
14
+ */
15
+ export declare function summarizeCommand(sessionIdOrFile: string | undefined, options?: SummarizeOptions): Promise<void>;
16
+ export {};
17
+ //# sourceMappingURL=summarize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summarize.d.ts","sourceRoot":"","sources":["../../src/commands/summarize.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH;;GAEG;AACH,UAAU,gBAAgB;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAkBD;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,GAAE,gBAAqB,iBAsGzG"}