@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,84 @@
1
+ /**
2
+ * Plugin loader and management service
3
+ */
4
+ import { Plugin, PluginManifest, PluginRegistry, PluginContext } from '../types/plugin.js';
5
+ import { Logger } from './logger.js';
6
+ /**
7
+ * Plugin loader - discovers, loads, and manages ACE CLI plugins
8
+ *
9
+ * Plugins are stored in ~/.ace/plugins/
10
+ * Plugin registry is stored in ~/.ace/plugins.json
11
+ */
12
+ export declare class PluginLoader {
13
+ private pluginsDir;
14
+ private registryFile;
15
+ private registry;
16
+ private loadedPlugins;
17
+ private logger;
18
+ constructor(logger: Logger);
19
+ /**
20
+ * Load plugin registry from disk
21
+ */
22
+ private loadRegistry;
23
+ /**
24
+ * Save plugin registry to disk
25
+ */
26
+ private saveRegistry;
27
+ /**
28
+ * Get plugin registry
29
+ */
30
+ getRegistry(): PluginRegistry;
31
+ /**
32
+ * Discover all plugins in plugins directory
33
+ */
34
+ discoverPlugins(): PluginManifest[];
35
+ /**
36
+ * Load plugin manifest from directory
37
+ */
38
+ private loadManifest;
39
+ /**
40
+ * Load and activate a plugin
41
+ */
42
+ loadPlugin(name: string, context: PluginContext): Promise<Plugin>;
43
+ /**
44
+ * Check if plugin is trusted
45
+ */
46
+ isTrusted(manifest: PluginManifest): boolean;
47
+ /**
48
+ * Check if plugin is enabled
49
+ */
50
+ isEnabled(name: string): boolean;
51
+ /**
52
+ * Trust a plugin
53
+ */
54
+ trustPlugin(name: string, version: string): void;
55
+ /**
56
+ * Untrust a plugin
57
+ */
58
+ untrustPlugin(name: string): void;
59
+ /**
60
+ * Enable a plugin
61
+ */
62
+ enablePlugin(name: string): void;
63
+ /**
64
+ * Disable a plugin
65
+ */
66
+ disablePlugin(name: string): void;
67
+ /**
68
+ * Get loaded plugin
69
+ */
70
+ getPlugin(name: string): Plugin | undefined;
71
+ /**
72
+ * List all loaded plugins
73
+ */
74
+ listLoadedPlugins(): Plugin[];
75
+ /**
76
+ * Execute a plugin command
77
+ */
78
+ executePluginCommand(pluginName: string, commandName: string, args: any[], context: PluginContext): Promise<any>;
79
+ }
80
+ /**
81
+ * Get the global plugin loader instance
82
+ */
83
+ export declare function getPluginLoader(logger: Logger): PluginLoader;
84
+ //# sourceMappingURL=plugin-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-loader.d.ts","sourceRoot":"","sources":["../../src/services/plugin-loader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,EAAe,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxG,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC;;;;;GAKG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,MAAM;IAe1B;;OAEG;IACH,OAAO,CAAC,YAAY;IAqBpB;;OAEG;IACH,OAAO,CAAC,YAAY;IAIpB;;OAEG;IACH,WAAW,IAAI,cAAc;IAI7B;;OAEG;IACH,eAAe,IAAI,cAAc,EAAE;IAyBnC;;OAEG;IACH,OAAO,CAAC,YAAY;IAkBpB;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAkEvE;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO;IAM5C;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAKhC;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAgBhD;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQjC;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAYhC;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAejC;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI3C;;OAEG;IACH,iBAAiB,IAAI,MAAM,EAAE;IAI7B;;OAEG;IACG,oBAAoB,CACxB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,GAAG,EAAE,EACX,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,GAAG,CAAC;CAkChB;AAOD;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAK5D"}
@@ -0,0 +1,282 @@
1
+ /**
2
+ * Plugin loader and management service
3
+ */
4
+ import { readFileSync, writeFileSync, existsSync, mkdirSync, readdirSync, statSync } from 'fs';
5
+ import { homedir } from 'os';
6
+ import { join } from 'path';
7
+ /**
8
+ * Plugin loader - discovers, loads, and manages ACE CLI plugins
9
+ *
10
+ * Plugins are stored in ~/.ace/plugins/
11
+ * Plugin registry is stored in ~/.ace/plugins.json
12
+ */
13
+ export class PluginLoader {
14
+ pluginsDir;
15
+ registryFile;
16
+ registry;
17
+ loadedPlugins;
18
+ logger;
19
+ constructor(logger) {
20
+ this.logger = logger;
21
+ this.pluginsDir = join(homedir(), '.ace', 'plugins');
22
+ this.registryFile = join(homedir(), '.ace', 'plugins.json');
23
+ this.loadedPlugins = new Map();
24
+ // Ensure plugins directory exists
25
+ if (!existsSync(this.pluginsDir)) {
26
+ mkdirSync(this.pluginsDir, { recursive: true });
27
+ }
28
+ // Load registry
29
+ this.registry = this.loadRegistry();
30
+ }
31
+ /**
32
+ * Load plugin registry from disk
33
+ */
34
+ loadRegistry() {
35
+ if (!existsSync(this.registryFile)) {
36
+ return {
37
+ trusted: [],
38
+ enabled: [],
39
+ disabled: []
40
+ };
41
+ }
42
+ try {
43
+ const data = readFileSync(this.registryFile, 'utf8');
44
+ return JSON.parse(data);
45
+ }
46
+ catch {
47
+ return {
48
+ trusted: [],
49
+ enabled: [],
50
+ disabled: []
51
+ };
52
+ }
53
+ }
54
+ /**
55
+ * Save plugin registry to disk
56
+ */
57
+ saveRegistry() {
58
+ writeFileSync(this.registryFile, JSON.stringify(this.registry, null, 2));
59
+ }
60
+ /**
61
+ * Get plugin registry
62
+ */
63
+ getRegistry() {
64
+ return { ...this.registry };
65
+ }
66
+ /**
67
+ * Discover all plugins in plugins directory
68
+ */
69
+ discoverPlugins() {
70
+ if (!existsSync(this.pluginsDir)) {
71
+ return [];
72
+ }
73
+ const plugins = [];
74
+ const entries = readdirSync(this.pluginsDir);
75
+ for (const entry of entries) {
76
+ const pluginPath = join(this.pluginsDir, entry);
77
+ const stat = statSync(pluginPath);
78
+ if (stat.isDirectory()) {
79
+ try {
80
+ const manifest = this.loadManifest(pluginPath);
81
+ plugins.push(manifest);
82
+ }
83
+ catch (error) {
84
+ this.logger.debug(`Failed to load plugin manifest: ${entry}`, error);
85
+ }
86
+ }
87
+ }
88
+ return plugins;
89
+ }
90
+ /**
91
+ * Load plugin manifest from directory
92
+ */
93
+ loadManifest(pluginPath) {
94
+ const manifestFile = join(pluginPath, 'plugin.json');
95
+ if (!existsSync(manifestFile)) {
96
+ throw new Error('Plugin manifest (plugin.json) not found');
97
+ }
98
+ const data = readFileSync(manifestFile, 'utf8');
99
+ const manifest = JSON.parse(data);
100
+ // Validate required fields
101
+ if (!manifest.name || !manifest.version || !manifest.main) {
102
+ throw new Error('Invalid plugin manifest: missing required fields (name, version, main)');
103
+ }
104
+ return manifest;
105
+ }
106
+ /**
107
+ * Load and activate a plugin
108
+ */
109
+ async loadPlugin(name, context) {
110
+ // Check if already loaded
111
+ if (this.loadedPlugins.has(name)) {
112
+ return this.loadedPlugins.get(name);
113
+ }
114
+ // Find plugin directory
115
+ const pluginPath = join(this.pluginsDir, name);
116
+ if (!existsSync(pluginPath)) {
117
+ throw new Error(`Plugin not found: ${name}`);
118
+ }
119
+ // Load manifest
120
+ const manifest = this.loadManifest(pluginPath);
121
+ // Check if plugin is trusted
122
+ const trusted = this.isTrusted(manifest);
123
+ if (!trusted) {
124
+ throw new Error(`Plugin "${name}" is not trusted. Run "ce-ace plugin trust ${name}" to trust this plugin.`);
125
+ }
126
+ // Check if plugin is enabled
127
+ const enabled = this.isEnabled(manifest.name);
128
+ // Load plugin module
129
+ const mainFile = join(pluginPath, manifest.main);
130
+ if (!existsSync(mainFile)) {
131
+ throw new Error(`Plugin entry point not found: ${manifest.main}`);
132
+ }
133
+ let module;
134
+ try {
135
+ module = await import(mainFile);
136
+ }
137
+ catch (error) {
138
+ throw new Error(`Failed to load plugin module: ${error instanceof Error ? error.message : String(error)}`);
139
+ }
140
+ // Create plugin instance
141
+ const plugin = {
142
+ metadata: manifest,
143
+ path: pluginPath,
144
+ module,
145
+ enabled,
146
+ trusted
147
+ };
148
+ // Initialize plugin if it has an init function
149
+ if (module.init && typeof module.init === 'function') {
150
+ try {
151
+ await module.init(context);
152
+ }
153
+ catch (error) {
154
+ throw new Error(`Plugin initialization failed: ${error instanceof Error ? error.message : String(error)}`);
155
+ }
156
+ }
157
+ // Store loaded plugin
158
+ this.loadedPlugins.set(name, plugin);
159
+ return plugin;
160
+ }
161
+ /**
162
+ * Check if plugin is trusted
163
+ */
164
+ isTrusted(manifest) {
165
+ return this.registry.trusted.some(trust => trust.name === manifest.name && trust.version === manifest.version);
166
+ }
167
+ /**
168
+ * Check if plugin is enabled
169
+ */
170
+ isEnabled(name) {
171
+ // Enabled by default if not explicitly disabled
172
+ return !this.registry.disabled.includes(name);
173
+ }
174
+ /**
175
+ * Trust a plugin
176
+ */
177
+ trustPlugin(name, version) {
178
+ // Remove existing trust for this plugin
179
+ this.registry.trusted = this.registry.trusted.filter(t => t.name !== name);
180
+ // Add new trust
181
+ const trust = {
182
+ name,
183
+ version,
184
+ trustedAt: new Date().toISOString(),
185
+ trustedBy: 'user'
186
+ };
187
+ this.registry.trusted.push(trust);
188
+ this.saveRegistry();
189
+ }
190
+ /**
191
+ * Untrust a plugin
192
+ */
193
+ untrustPlugin(name) {
194
+ this.registry.trusted = this.registry.trusted.filter(t => t.name !== name);
195
+ this.saveRegistry();
196
+ // Unload plugin if loaded
197
+ this.loadedPlugins.delete(name);
198
+ }
199
+ /**
200
+ * Enable a plugin
201
+ */
202
+ enablePlugin(name) {
203
+ // Remove from disabled list
204
+ this.registry.disabled = this.registry.disabled.filter(p => p !== name);
205
+ // Add to enabled list if not already there
206
+ if (!this.registry.enabled.includes(name)) {
207
+ this.registry.enabled.push(name);
208
+ }
209
+ this.saveRegistry();
210
+ }
211
+ /**
212
+ * Disable a plugin
213
+ */
214
+ disablePlugin(name) {
215
+ // Remove from enabled list
216
+ this.registry.enabled = this.registry.enabled.filter(p => p !== name);
217
+ // Add to disabled list if not already there
218
+ if (!this.registry.disabled.includes(name)) {
219
+ this.registry.disabled.push(name);
220
+ }
221
+ this.saveRegistry();
222
+ // Unload plugin if loaded
223
+ this.loadedPlugins.delete(name);
224
+ }
225
+ /**
226
+ * Get loaded plugin
227
+ */
228
+ getPlugin(name) {
229
+ return this.loadedPlugins.get(name);
230
+ }
231
+ /**
232
+ * List all loaded plugins
233
+ */
234
+ listLoadedPlugins() {
235
+ return Array.from(this.loadedPlugins.values());
236
+ }
237
+ /**
238
+ * Execute a plugin command
239
+ */
240
+ async executePluginCommand(pluginName, commandName, args, context) {
241
+ // Load plugin if not loaded
242
+ let plugin = this.loadedPlugins.get(pluginName);
243
+ if (!plugin) {
244
+ plugin = await this.loadPlugin(pluginName, context);
245
+ }
246
+ // Check if plugin is enabled
247
+ if (!plugin.enabled) {
248
+ throw new Error(`Plugin "${pluginName}" is disabled. Run "ce-ace plugin enable ${pluginName}" to enable it.`);
249
+ }
250
+ // Find command in manifest
251
+ const command = plugin.metadata.commands?.find(cmd => cmd.name === commandName);
252
+ if (!command) {
253
+ throw new Error(`Command "${commandName}" not found in plugin "${pluginName}"`);
254
+ }
255
+ // Get handler function from module
256
+ const handler = plugin.module[command.handler];
257
+ if (!handler || typeof handler !== 'function') {
258
+ throw new Error(`Handler function "${command.handler}" not found in plugin module`);
259
+ }
260
+ // Execute handler
261
+ try {
262
+ return await handler(args, context);
263
+ }
264
+ catch (error) {
265
+ throw new Error(`Plugin command failed: ${error instanceof Error ? error.message : String(error)}`);
266
+ }
267
+ }
268
+ }
269
+ /**
270
+ * Singleton plugin loader instance
271
+ */
272
+ let loaderInstance = null;
273
+ /**
274
+ * Get the global plugin loader instance
275
+ */
276
+ export function getPluginLoader(logger) {
277
+ if (!loaderInstance) {
278
+ loaderInstance = new PluginLoader(logger);
279
+ }
280
+ return loaderInstance;
281
+ }
282
+ //# sourceMappingURL=plugin-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-loader.js","sourceRoot":"","sources":["../../src/services/plugin-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Session recording service
3
+ */
4
+ import { SessionEventType, SessionMetadata, SessionRecording, RecorderState } from '../types/recorder.js';
5
+ /**
6
+ * Session recorder for capturing CLI interactions
7
+ *
8
+ * Records commands, HTTP requests/responses, logs, and errors
9
+ * to ~/.ace/sessions/ for later analysis and summarization.
10
+ */
11
+ export declare class SessionRecorder {
12
+ private sessionsDir;
13
+ private stateFile;
14
+ private state;
15
+ constructor();
16
+ /**
17
+ * Load recorder state from disk
18
+ */
19
+ private loadState;
20
+ /**
21
+ * Save recorder state to disk
22
+ */
23
+ private saveState;
24
+ /**
25
+ * Get current recorder state
26
+ */
27
+ getState(): RecorderState;
28
+ /**
29
+ * Check if recorder is active
30
+ */
31
+ isActive(): boolean;
32
+ /**
33
+ * Start a new recording session
34
+ */
35
+ start(command: string, projectId?: string): {
36
+ sessionId: string;
37
+ message: string;
38
+ };
39
+ /**
40
+ * Stop the current recording session
41
+ */
42
+ stop(): {
43
+ sessionId: string;
44
+ events: number;
45
+ duration: number;
46
+ };
47
+ /**
48
+ * Record an event to the current session
49
+ */
50
+ recordEvent(type: SessionEventType, data: any, duration?: number): void;
51
+ /**
52
+ * List all recorded sessions
53
+ */
54
+ listSessions(): SessionMetadata[];
55
+ /**
56
+ * Get a specific session recording
57
+ */
58
+ getSession(sessionId: string): SessionRecording;
59
+ /**
60
+ * Export a session to a specific file
61
+ */
62
+ exportSession(sessionId: string, outputPath: string): void;
63
+ /**
64
+ * Delete a session recording
65
+ */
66
+ deleteSession(sessionId: string): void;
67
+ /**
68
+ * Read a session recording from disk
69
+ */
70
+ private readSession;
71
+ /**
72
+ * Write a session recording to disk
73
+ */
74
+ private writeSession;
75
+ }
76
+ /**
77
+ * Get the global recorder instance
78
+ */
79
+ export declare function getRecorder(): SessionRecorder;
80
+ //# sourceMappingURL=recorder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recorder.d.ts","sourceRoot":"","sources":["../../src/services/recorder.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAgB,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAExH;;;;;GAKG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,KAAK,CAAgB;;IAe7B;;OAEG;IACH,OAAO,CAAC,SAAS;IA4BjB;;OAEG;IACH,OAAO,CAAC,SAAS;IAcjB;;OAEG;IACH,QAAQ,IAAI,aAAa;IAIzB;;OAEG;IACH,QAAQ,IAAI,OAAO;IAInB;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAsDlF;;OAEG;IACH,IAAI,IAAI;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;IAuC/D;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAuBvE;;OAEG;IACH,YAAY,IAAI,eAAe,EAAE;IAoBjC;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB;IAI/C;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAK1D;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAQtC;;OAEG;IACH,OAAO,CAAC,WAAW;IAWnB;;OAEG;IACH,OAAO,CAAC,YAAY;CAIrB;AAOD;;GAEG;AACH,wBAAgB,WAAW,IAAI,eAAe,CAK7C"}