@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,267 @@
1
+ /**
2
+ * Session recording service
3
+ */
4
+ import { readFileSync, writeFileSync, existsSync, mkdirSync, readdirSync } from 'fs';
5
+ import { homedir } from 'os';
6
+ import { join } from 'path';
7
+ /**
8
+ * Session recorder for capturing CLI interactions
9
+ *
10
+ * Records commands, HTTP requests/responses, logs, and errors
11
+ * to ~/.ace/sessions/ for later analysis and summarization.
12
+ */
13
+ export class SessionRecorder {
14
+ sessionsDir;
15
+ stateFile;
16
+ state;
17
+ constructor() {
18
+ this.sessionsDir = join(homedir(), '.ace', 'sessions');
19
+ this.stateFile = join(homedir(), '.ace', 'recorder-state.json');
20
+ // Ensure sessions directory exists
21
+ if (!existsSync(this.sessionsDir)) {
22
+ mkdirSync(this.sessionsDir, { recursive: true });
23
+ }
24
+ // Load state
25
+ this.state = this.loadState();
26
+ }
27
+ /**
28
+ * Load recorder state from disk
29
+ */
30
+ loadState() {
31
+ if (!existsSync(this.stateFile)) {
32
+ return {
33
+ active: false,
34
+ sessionId: null,
35
+ startTime: null,
36
+ eventCount: 0
37
+ };
38
+ }
39
+ try {
40
+ const data = JSON.parse(readFileSync(this.stateFile, 'utf8'));
41
+ return {
42
+ active: data.active || false,
43
+ sessionId: data.sessionId || null,
44
+ startTime: data.startTime ? new Date(data.startTime) : null,
45
+ eventCount: data.eventCount || 0
46
+ };
47
+ }
48
+ catch {
49
+ return {
50
+ active: false,
51
+ sessionId: null,
52
+ startTime: null,
53
+ eventCount: 0
54
+ };
55
+ }
56
+ }
57
+ /**
58
+ * Save recorder state to disk
59
+ */
60
+ saveState() {
61
+ const stateDir = join(homedir(), '.ace');
62
+ if (!existsSync(stateDir)) {
63
+ mkdirSync(stateDir, { recursive: true });
64
+ }
65
+ writeFileSync(this.stateFile, JSON.stringify({
66
+ active: this.state.active,
67
+ sessionId: this.state.sessionId,
68
+ startTime: this.state.startTime?.toISOString() || null,
69
+ eventCount: this.state.eventCount
70
+ }, null, 2));
71
+ }
72
+ /**
73
+ * Get current recorder state
74
+ */
75
+ getState() {
76
+ return { ...this.state };
77
+ }
78
+ /**
79
+ * Check if recorder is active
80
+ */
81
+ isActive() {
82
+ return this.state.active;
83
+ }
84
+ /**
85
+ * Start a new recording session
86
+ */
87
+ start(command, projectId) {
88
+ if (this.state.active) {
89
+ throw new Error(`Recording already active (session: ${this.state.sessionId})`);
90
+ }
91
+ // Generate session ID: YYYYMMDD-HHMMSS
92
+ const now = new Date();
93
+ const sessionId = now.toISOString()
94
+ .replace(/[:.]/g, '-')
95
+ .replace('T', '-')
96
+ .split('-')
97
+ .slice(0, 6)
98
+ .join('')
99
+ .slice(0, 15); // YYYYMMDDHHMMSS
100
+ // Create session metadata
101
+ const metadata = {
102
+ id: sessionId,
103
+ startTime: now.toISOString(),
104
+ command,
105
+ projectId,
106
+ events: 0
107
+ };
108
+ // Initialize session file
109
+ const recording = {
110
+ metadata,
111
+ events: []
112
+ };
113
+ this.writeSession(sessionId, recording);
114
+ // Update state
115
+ this.state = {
116
+ active: true,
117
+ sessionId,
118
+ startTime: now,
119
+ eventCount: 0
120
+ };
121
+ this.saveState();
122
+ // Record session start event
123
+ this.recordEvent('metadata', {
124
+ action: 'session_start',
125
+ command,
126
+ projectId
127
+ });
128
+ return {
129
+ sessionId,
130
+ message: `Recording started (session: ${sessionId})`
131
+ };
132
+ }
133
+ /**
134
+ * Stop the current recording session
135
+ */
136
+ stop() {
137
+ if (!this.state.active) {
138
+ throw new Error('No active recording session');
139
+ }
140
+ const sessionId = this.state.sessionId;
141
+ const startTime = this.state.startTime;
142
+ const eventCount = this.state.eventCount;
143
+ const duration = Date.now() - startTime.getTime();
144
+ // Record session end event
145
+ this.recordEvent('metadata', {
146
+ action: 'session_end',
147
+ duration_ms: duration,
148
+ event_count: eventCount
149
+ });
150
+ // Update session metadata
151
+ const recording = this.readSession(sessionId);
152
+ recording.metadata.endTime = new Date().toISOString();
153
+ recording.metadata.events = this.state.eventCount;
154
+ this.writeSession(sessionId, recording);
155
+ // Reset state
156
+ this.state = {
157
+ active: false,
158
+ sessionId: null,
159
+ startTime: null,
160
+ eventCount: 0
161
+ };
162
+ this.saveState();
163
+ return {
164
+ sessionId,
165
+ events: eventCount,
166
+ duration
167
+ };
168
+ }
169
+ /**
170
+ * Record an event to the current session
171
+ */
172
+ recordEvent(type, data, duration) {
173
+ if (!this.state.active) {
174
+ return; // Silently ignore if not recording
175
+ }
176
+ const event = {
177
+ timestamp: new Date().toISOString(),
178
+ type,
179
+ data,
180
+ duration
181
+ };
182
+ // Append event to session file
183
+ const sessionId = this.state.sessionId;
184
+ const recording = this.readSession(sessionId);
185
+ recording.events.push(event);
186
+ this.writeSession(sessionId, recording);
187
+ // Update state
188
+ this.state.eventCount++;
189
+ this.saveState();
190
+ }
191
+ /**
192
+ * List all recorded sessions
193
+ */
194
+ listSessions() {
195
+ if (!existsSync(this.sessionsDir)) {
196
+ return [];
197
+ }
198
+ const files = readdirSync(this.sessionsDir)
199
+ .filter(f => f.endsWith('.json'))
200
+ .sort()
201
+ .reverse(); // Most recent first
202
+ return files.map(file => {
203
+ try {
204
+ const recording = this.readSession(file.replace('.json', ''));
205
+ return recording.metadata;
206
+ }
207
+ catch {
208
+ return null;
209
+ }
210
+ }).filter(Boolean);
211
+ }
212
+ /**
213
+ * Get a specific session recording
214
+ */
215
+ getSession(sessionId) {
216
+ return this.readSession(sessionId);
217
+ }
218
+ /**
219
+ * Export a session to a specific file
220
+ */
221
+ exportSession(sessionId, outputPath) {
222
+ const recording = this.readSession(sessionId);
223
+ writeFileSync(outputPath, JSON.stringify(recording, null, 2));
224
+ }
225
+ /**
226
+ * Delete a session recording
227
+ */
228
+ deleteSession(sessionId) {
229
+ const sessionFile = join(this.sessionsDir, `${sessionId}.json`);
230
+ if (existsSync(sessionFile)) {
231
+ const fs = require('fs');
232
+ fs.unlinkSync(sessionFile);
233
+ }
234
+ }
235
+ /**
236
+ * Read a session recording from disk
237
+ */
238
+ readSession(sessionId) {
239
+ const sessionFile = join(this.sessionsDir, `${sessionId}.json`);
240
+ if (!existsSync(sessionFile)) {
241
+ throw new Error(`Session not found: ${sessionId}`);
242
+ }
243
+ const data = readFileSync(sessionFile, 'utf8');
244
+ return JSON.parse(data);
245
+ }
246
+ /**
247
+ * Write a session recording to disk
248
+ */
249
+ writeSession(sessionId, recording) {
250
+ const sessionFile = join(this.sessionsDir, `${sessionId}.json`);
251
+ writeFileSync(sessionFile, JSON.stringify(recording, null, 2));
252
+ }
253
+ }
254
+ /**
255
+ * Singleton recorder instance
256
+ */
257
+ let recorderInstance = null;
258
+ /**
259
+ * Get the global recorder instance
260
+ */
261
+ export function getRecorder() {
262
+ if (!recorderInstance) {
263
+ recorderInstance = new SessionRecorder();
264
+ }
265
+ return recorderInstance;
266
+ }
267
+ //# sourceMappingURL=recorder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recorder.js","sourceRoot":"","sources":["../../src/services/recorder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Server Client - Wrapper for @ace-sdk/core AceClient
3
+ *
4
+ * Provides backwards-compatible ACEServerClient alias for CLI commands.
5
+ *
6
+ * @package @ace-sdk/cli
7
+ */
8
+ import { AceClient } from '@ace-sdk/core';
9
+ import type { AceClientOptions, AceConfig, AceContext, ILogger } from '@ace-sdk/core';
10
+ export type { AceClientOptions };
11
+ /**
12
+ * ACEServerClient - Backwards-compatible alias for AceClient
13
+ *
14
+ * Accepts optional Logger for backwards compatibility with CLI commands
15
+ * that were passing a Logger instance as the second argument.
16
+ *
17
+ * Also includes CLI-specific methods like saveConfig that save to disk.
18
+ *
19
+ * @deprecated Use AceClient directly from @ace-sdk/core
20
+ */
21
+ export declare class ACEServerClient extends AceClient {
22
+ constructor(config: AceConfig | AceContext, loggerArg?: ILogger);
23
+ /**
24
+ * Save ACE configuration to ~/.ace/config.json
25
+ * CLI-specific method - not part of core AceClient
26
+ *
27
+ * v3.8.1: Preserves existing orgs section and other fields
28
+ */
29
+ saveConfig(serverUrl: string, apiToken: string, projectId: string): Promise<void>;
30
+ }
31
+ export { AceClient };
32
+ //# sourceMappingURL=server-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-client.d.ts","sourceRoot":"","sources":["../../src/services/server-client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGtF,YAAY,EAAE,gBAAgB,EAAE,CAAC;AAEjC;;;;;;;;;GASG;AACH,qBAAa,eAAgB,SAAQ,SAAS;gBAChC,MAAM,EAAE,SAAS,GAAG,UAAU,EAAE,SAAS,CAAC,EAAE,OAAO;IAI/D;;;;;OAKG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAwCxF;AAGD,OAAO,EAAE,SAAS,EAAE,CAAC"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Server Client - Wrapper for @ace-sdk/core AceClient
3
+ *
4
+ * Provides backwards-compatible ACEServerClient alias for CLI commands.
5
+ *
6
+ * @package @ace-sdk/cli
7
+ */
8
+ import { AceClient } from '@ace-sdk/core';
9
+ import { logger as globalLogger, globalOptions } from './logger.js';
10
+ /**
11
+ * ACEServerClient - Backwards-compatible alias for AceClient
12
+ *
13
+ * Accepts optional Logger for backwards compatibility with CLI commands
14
+ * that were passing a Logger instance as the second argument.
15
+ *
16
+ * Also includes CLI-specific methods like saveConfig that save to disk.
17
+ *
18
+ * @deprecated Use AceClient directly from @ace-sdk/core
19
+ */
20
+ export class ACEServerClient extends AceClient {
21
+ constructor(config, loggerArg) {
22
+ super(config, { logger: loggerArg || globalLogger });
23
+ }
24
+ /**
25
+ * Save ACE configuration to ~/.ace/config.json
26
+ * CLI-specific method - not part of core AceClient
27
+ *
28
+ * v3.8.1: Preserves existing orgs section and other fields
29
+ */
30
+ async saveConfig(serverUrl, apiToken, projectId) {
31
+ const fs = await import('fs/promises');
32
+ const os = await import('os');
33
+ const path = await import('path');
34
+ const configDir = path.join(os.homedir(), '.ace');
35
+ const configPath = path.join(configDir, 'config.json');
36
+ // Ensure directory exists
37
+ await fs.mkdir(configDir, { recursive: true });
38
+ // v3.8.1: Read existing config to preserve orgs section and other fields
39
+ let existingConfig = {};
40
+ try {
41
+ const existingContent = await fs.readFile(configPath, 'utf8');
42
+ existingConfig = JSON.parse(existingContent);
43
+ }
44
+ catch {
45
+ // File doesn't exist or is invalid - start fresh
46
+ if (!globalOptions.json && !globalOptions.quiet) {
47
+ console.error('ℹ️ No existing config found, creating new one');
48
+ }
49
+ }
50
+ // Merge new values with existing config (preserves orgs section)
51
+ const config = {
52
+ ...existingConfig, // Keep existing fields (including orgs)
53
+ serverUrl, // Update these fields
54
+ apiToken,
55
+ projectId
56
+ };
57
+ await fs.writeFile(configPath, JSON.stringify(config, null, 2), 'utf8');
58
+ if (!globalOptions.json && !globalOptions.quiet) {
59
+ console.error(`✅ Configuration saved to ${configPath}`);
60
+ if (config.orgs) {
61
+ console.error(` Multi-org: ${Object.keys(config.orgs).length} organization(s) preserved`);
62
+ }
63
+ }
64
+ }
65
+ }
66
+ // Also export AceClient directly for new code
67
+ export { AceClient };
68
+ //# sourceMappingURL=server-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-client.js","sourceRoot":"","sources":["../../src/services/server-client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIpE;;;;;;;;;GASG;AACH,MAAM,OAAO,eAAgB,SAAQ,SAAS;IAC5C,YAAY,MAA8B,EAAE,SAAmB;QAC7D,KAAK,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,IAAI,YAAY,EAAE,CAAC,CAAC;IACvD,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,UAAU,CAAC,SAAiB,EAAE,QAAgB,EAAE,SAAiB;QACrE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACvC,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;QAElC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QAEvD,0BAA0B;QAC1B,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE/C,yEAAyE;QACzE,IAAI,cAAc,GAA4B,EAAE,CAAC;QACjD,IAAI,CAAC;YACH,MAAM,eAAe,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAC9D,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,iDAAiD;YACjD,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;gBAChD,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;QAED,iEAAiE;QACjE,MAAM,MAAM,GAAG;YACb,GAAG,cAAc,EAAS,wCAAwC;YAClE,SAAS,EAAiB,sBAAsB;YAChD,QAAQ;YACR,SAAS;SACV,CAAC;QAEF,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAExE,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;YAChD,OAAO,CAAC,KAAK,CAAC,4BAA4B,UAAU,EAAE,CAAC,CAAC;YACxD,IAAK,MAAkC,CAAC,IAAI,EAAE,CAAC;gBAC7C,OAAO,CAAC,KAAK,CAAC,iBAAiB,MAAM,CAAC,IAAI,CAAE,MAAkC,CAAC,IAA+B,CAAC,CAAC,MAAM,4BAA4B,CAAC,CAAC;YACtJ,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAED,8CAA8C;AAC9C,OAAO,EAAE,SAAS,EAAE,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Session Storage - Wrapper for @ace-sdk/core
3
+ *
4
+ * Provides backwards-compatible constructor that accepts Logger as first argument.
5
+ *
6
+ * @package @ace-sdk/cli
7
+ */
8
+ import { SessionStorage as CoreSessionStorage } from '@ace-sdk/core';
9
+ import type { SessionStorageConfig, SessionPin, SessionPinResult, ILogger } from '@ace-sdk/core';
10
+ export type { SessionStorageConfig, SessionPin, SessionPinResult };
11
+ /**
12
+ * SessionStorage wrapper for backwards compatibility
13
+ *
14
+ * Old CLI code passed Logger as the first argument, but core now expects
15
+ * config as first argument and logger as second. This wrapper handles both.
16
+ */
17
+ export declare class SessionStorage extends CoreSessionStorage {
18
+ constructor(configOrLogger?: SessionStorageConfig | ILogger, logger?: ILogger);
19
+ }
20
+ //# sourceMappingURL=session-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-storage.d.ts","sourceRoot":"","sources":["../../src/services/session-storage.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,cAAc,IAAI,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,KAAK,EAAE,oBAAoB,EAAE,UAAU,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAEjG,YAAY,EAAE,oBAAoB,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC;AAEnE;;;;;GAKG;AACH,qBAAa,cAAe,SAAQ,kBAAkB;gBACxC,cAAc,CAAC,EAAE,oBAAoB,GAAG,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO;CAY9E"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Session Storage - Wrapper for @ace-sdk/core
3
+ *
4
+ * Provides backwards-compatible constructor that accepts Logger as first argument.
5
+ *
6
+ * @package @ace-sdk/cli
7
+ */
8
+ import { SessionStorage as CoreSessionStorage } from '@ace-sdk/core';
9
+ /**
10
+ * SessionStorage wrapper for backwards compatibility
11
+ *
12
+ * Old CLI code passed Logger as the first argument, but core now expects
13
+ * config as first argument and logger as second. This wrapper handles both.
14
+ */
15
+ export class SessionStorage extends CoreSessionStorage {
16
+ constructor(configOrLogger, logger) {
17
+ // Check if first arg looks like a logger (has debug/info/error methods)
18
+ const isLogger = configOrLogger && typeof configOrLogger.debug === 'function';
19
+ if (isLogger) {
20
+ // Old signature: new SessionStorage(logger)
21
+ super(undefined, configOrLogger);
22
+ }
23
+ else {
24
+ // New signature: new SessionStorage(config, logger)
25
+ super(configOrLogger, logger);
26
+ }
27
+ }
28
+ }
29
+ //# sourceMappingURL=session-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-storage.js","sourceRoot":"","sources":["../../src/services/session-storage.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,cAAc,IAAI,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAKrE;;;;;GAKG;AACH,MAAM,OAAO,cAAe,SAAQ,kBAAkB;IACpD,YAAY,cAA+C,EAAE,MAAgB;QAC3E,wEAAwE;QACxE,MAAM,QAAQ,GAAG,cAAc,IAAI,OAAQ,cAA0B,CAAC,KAAK,KAAK,UAAU,CAAC;QAE3F,IAAI,QAAQ,EAAE,CAAC;YACb,4CAA4C;YAC5C,KAAK,CAAC,SAAS,EAAE,cAAyB,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,oDAAoD;YACpD,KAAK,CAAC,cAAkD,EAAE,MAAM,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * CLI Configuration Types and Helpers
3
+ *
4
+ * Re-exports types from @ace-sdk/core and provides CLI-specific convenience functions.
5
+ *
6
+ * @package @ace-sdk/cli
7
+ */
8
+ export type { AceConfig, OrgConfig, AceContext, AceRuntimeSettings, ServerConfig, ResolvedContext, ResolveContextOptions } from '@ace-sdk/core';
9
+ export { DEFAULT_RUNTIME_SETTINGS, loadConfig, resolveContext, getTokenForOrg } from '@ace-sdk/core';
10
+ import type { AceConfig, AceContext, ServerConfig, ResolveContextOptions } from '@ace-sdk/core';
11
+ /**
12
+ * Get config (legacy) - DEPRECATED
13
+ *
14
+ * @deprecated Commands should use createContext() instead
15
+ * This function is kept temporarily for backwards compatibility during migration
16
+ */
17
+ export declare function getConfig(): AceConfig;
18
+ /**
19
+ * Create AceContext from CLI flags, environment, and config files
20
+ *
21
+ * This function implements the complete context resolution flow:
22
+ * 1. Resolve org/project using 4-tier precedence (flags > env > .claude/settings.json > error)
23
+ * 2. Load global config to get server URL and tokens
24
+ * 3. Get the correct token for the resolved organization
25
+ * 4. Merge with server-derived runtime settings
26
+ *
27
+ * @param options - CLI flags for org/project override
28
+ * @param serverConfig - Optional server configuration (fetched via AceClient.getConfig())
29
+ * @returns Complete runtime context with merged settings
30
+ * @throws Error if context cannot be resolved
31
+ */
32
+ export declare function createContext(options?: ResolveContextOptions, serverConfig?: ServerConfig): Promise<AceContext>;
33
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,YAAY,EACV,SAAS,EACT,SAAS,EACT,UAAU,EACV,kBAAkB,EAClB,YAAY,EACZ,eAAe,EACf,qBAAqB,EACtB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,wBAAwB,EACxB,UAAU,EACV,cAAc,EACd,cAAc,EACf,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAsB,YAAY,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAGpH;;;;;GAKG;AACH,wBAAgB,SAAS,IAAI,SAAS,CAErC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,aAAa,CACjC,OAAO,GAAE,qBAA0B,EACnC,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,UAAU,CAAC,CAkCrB"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * CLI Configuration Types and Helpers
3
+ *
4
+ * Re-exports types from @ace-sdk/core and provides CLI-specific convenience functions.
5
+ *
6
+ * @package @ace-sdk/cli
7
+ */
8
+ export { DEFAULT_RUNTIME_SETTINGS, loadConfig, resolveContext, getTokenForOrg } from '@ace-sdk/core';
9
+ import { DEFAULT_RUNTIME_SETTINGS, loadConfig, resolveContext, getTokenForOrg } from '@ace-sdk/core';
10
+ /**
11
+ * Get config (legacy) - DEPRECATED
12
+ *
13
+ * @deprecated Commands should use createContext() instead
14
+ * This function is kept temporarily for backwards compatibility during migration
15
+ */
16
+ export function getConfig() {
17
+ return loadConfig();
18
+ }
19
+ /**
20
+ * Create AceContext from CLI flags, environment, and config files
21
+ *
22
+ * This function implements the complete context resolution flow:
23
+ * 1. Resolve org/project using 4-tier precedence (flags > env > .claude/settings.json > error)
24
+ * 2. Load global config to get server URL and tokens
25
+ * 3. Get the correct token for the resolved organization
26
+ * 4. Merge with server-derived runtime settings
27
+ *
28
+ * @param options - CLI flags for org/project override
29
+ * @param serverConfig - Optional server configuration (fetched via AceClient.getConfig())
30
+ * @returns Complete runtime context with merged settings
31
+ * @throws Error if context cannot be resolved
32
+ */
33
+ export async function createContext(options = {}, serverConfig) {
34
+ // Step 1: Resolve org and project IDs using precedence chain
35
+ const resolved = resolveContext(options);
36
+ const { orgId, projectId } = resolved;
37
+ // Step 2: Load global config
38
+ const globalConfig = loadConfig();
39
+ // Step 3: Get the correct API token for this organization
40
+ const apiToken = getTokenForOrg(globalConfig, orgId);
41
+ // Step 4: Merge server runtime settings with defaults
42
+ const runtimeSettings = {
43
+ ...DEFAULT_RUNTIME_SETTINGS,
44
+ ...(serverConfig?.runtime_settings || {})
45
+ };
46
+ // Step 5: Override with environment variables if present
47
+ if (process.env.ACE_SEARCH_THRESHOLD) {
48
+ runtimeSettings.searchThreshold = parseFloat(process.env.ACE_SEARCH_THRESHOLD);
49
+ }
50
+ if (process.env.ACE_LEARNING_ENABLED) {
51
+ runtimeSettings.learningEnabled = process.env.ACE_LEARNING_ENABLED === 'true';
52
+ }
53
+ // Step 6: Return complete context
54
+ return {
55
+ serverUrl: globalConfig.serverUrl,
56
+ apiToken,
57
+ projectId,
58
+ orgId,
59
+ cacheTtlMinutes: globalConfig.cacheTtlMinutes,
60
+ runtimeSettings
61
+ };
62
+ }
63
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAaH,OAAO,EACL,wBAAwB,EACxB,UAAU,EACV,cAAc,EACd,cAAc,EACf,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,wBAAwB,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAErG;;;;;GAKG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO,UAAU,EAAE,CAAC;AACtB,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,UAAiC,EAAE,EACnC,YAA2B;IAE3B,6DAA6D;IAC7D,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC;IAEtC,6BAA6B;IAC7B,MAAM,YAAY,GAAG,UAAU,EAAE,CAAC;IAElC,0DAA0D;IAC1D,MAAM,QAAQ,GAAG,cAAc,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IAErD,sDAAsD;IACtD,MAAM,eAAe,GAAuB;QAC1C,GAAG,wBAAwB;QAC3B,GAAG,CAAC,YAAY,EAAE,gBAAgB,IAAI,EAAE,CAAC;KAC1C,CAAC;IAEF,yDAAyD;IACzD,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;QACrC,eAAe,CAAC,eAAe,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IACjF,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;QACrC,eAAe,CAAC,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,MAAM,CAAC;IAChF,CAAC;IAED,kCAAkC;IAClC,OAAO;QACL,SAAS,EAAE,YAAY,CAAC,SAAS;QACjC,QAAQ;QACR,SAAS;QACT,KAAK;QACL,eAAe,EAAE,YAAY,CAAC,eAAe;QAC7C,eAAe;KAChB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Pattern Types - Re-export from @ace-sdk/core
3
+ *
4
+ * @package @ace-sdk/cli
5
+ */
6
+ export type { TrajectoryStep, ExecutionTrace, BulletSection, PlaybookBullet, DomainsSummary, StructuredPlaybook, DeltaOperationType, DeltaOperation, Reflection, PlaybookStats, TokenMetadata, SearchResponseWithMetadata, PlaybookResponseWithMetadata, BootstrapResponse, BootstrapMode, ThoroughnessLevel, ThoroughnessPreset, LearningStatistics, LearningResponse } from '@ace-sdk/core';
7
+ export { THOROUGHNESS_PRESETS } from '@ace-sdk/core';
8
+ //# sourceMappingURL=pattern.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern.d.ts","sourceRoot":"","sources":["../../src/types/pattern.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EACV,cAAc,EACd,cAAc,EACd,aAAa,EACb,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,UAAU,EACV,aAAa,EACb,aAAa,EACb,0BAA0B,EAC1B,4BAA4B,EAC5B,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Pattern Types - Re-export from @ace-sdk/core
3
+ *
4
+ * @package @ace-sdk/cli
5
+ */
6
+ export { THOROUGHNESS_PRESETS } from '@ace-sdk/core';
7
+ //# sourceMappingURL=pattern.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern.js","sourceRoot":"","sources":["../../src/types/pattern.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAwBH,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Plugin system types
3
+ */
4
+ /**
5
+ * Plugin metadata (from package.json or plugin.json)
6
+ */
7
+ export interface PluginMetadata {
8
+ name: string;
9
+ version: string;
10
+ description?: string;
11
+ author?: string;
12
+ homepage?: string;
13
+ keywords?: string[];
14
+ }
15
+ /**
16
+ * Plugin manifest (plugin.json)
17
+ */
18
+ export interface PluginManifest extends PluginMetadata {
19
+ main: string;
20
+ commands?: PluginCommand[];
21
+ permissions?: PluginPermissions;
22
+ }
23
+ /**
24
+ * Plugin command definition
25
+ */
26
+ export interface PluginCommand {
27
+ name: string;
28
+ description: string;
29
+ handler: string;
30
+ options?: PluginOption[];
31
+ }
32
+ /**
33
+ * Plugin command option
34
+ */
35
+ export interface PluginOption {
36
+ name: string;
37
+ description: string;
38
+ type?: 'string' | 'number' | 'boolean';
39
+ required?: boolean;
40
+ default?: any;
41
+ }
42
+ /**
43
+ * Plugin permissions (security)
44
+ */
45
+ export interface PluginPermissions {
46
+ network?: boolean;
47
+ filesystem?: 'read' | 'write' | 'full';
48
+ environment?: boolean;
49
+ subprocess?: boolean;
50
+ }
51
+ /**
52
+ * Loaded plugin instance
53
+ */
54
+ export interface Plugin {
55
+ metadata: PluginManifest;
56
+ path: string;
57
+ module: any;
58
+ enabled: boolean;
59
+ trusted: boolean;
60
+ }
61
+ /**
62
+ * Plugin trust record
63
+ */
64
+ export interface PluginTrust {
65
+ name: string;
66
+ version: string;
67
+ trustedAt: string;
68
+ trustedBy: 'user' | 'system';
69
+ checksum?: string;
70
+ }
71
+ /**
72
+ * Plugin registry (stored in ~/.ace/plugins.json)
73
+ */
74
+ export interface PluginRegistry {
75
+ trusted: PluginTrust[];
76
+ enabled: string[];
77
+ disabled: string[];
78
+ }
79
+ /**
80
+ * Plugin execution context
81
+ */
82
+ export interface PluginContext {
83
+ config: any;
84
+ logger: any;
85
+ client: any;
86
+ }
87
+ //# sourceMappingURL=plugin.d.ts.map