@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.
- package/README.md +61 -0
- package/dist/cli.d.ts +14 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +427 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/bootstrap.d.ts +19 -0
- package/dist/commands/bootstrap.d.ts.map +1 -0
- package/dist/commands/bootstrap.js +157 -0
- package/dist/commands/bootstrap.js.map +1 -0
- package/dist/commands/cache.d.ts +19 -0
- package/dist/commands/cache.d.ts.map +1 -0
- package/dist/commands/cache.js +101 -0
- package/dist/commands/cache.js.map +1 -0
- package/dist/commands/clear.d.ts +12 -0
- package/dist/commands/clear.d.ts.map +1 -0
- package/dist/commands/clear.js +50 -0
- package/dist/commands/clear.js.map +1 -0
- package/dist/commands/config.d.ts +34 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +423 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/delta.d.ts +14 -0
- package/dist/commands/delta.d.ts.map +1 -0
- package/dist/commands/delta.js +140 -0
- package/dist/commands/delta.js.map +1 -0
- package/dist/commands/doctor.d.ts +8 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +187 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/export.d.ts +12 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +45 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/import.d.ts +13 -0
- package/dist/commands/import.d.ts.map +1 -0
- package/dist/commands/import.js +87 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/learn.d.ts +17 -0
- package/dist/commands/learn.d.ts.map +1 -0
- package/dist/commands/learn.js +193 -0
- package/dist/commands/learn.js.map +1 -0
- package/dist/commands/patterns.d.ts +13 -0
- package/dist/commands/patterns.d.ts.map +1 -0
- package/dist/commands/patterns.js +76 -0
- package/dist/commands/patterns.js.map +1 -0
- package/dist/commands/plugin.d.ts +26 -0
- package/dist/commands/plugin.d.ts.map +1 -0
- package/dist/commands/plugin.js +267 -0
- package/dist/commands/plugin.js.map +1 -0
- package/dist/commands/projects.d.ts +15 -0
- package/dist/commands/projects.d.ts.map +1 -0
- package/dist/commands/projects.js +122 -0
- package/dist/commands/projects.js.map +1 -0
- package/dist/commands/record.d.ts +32 -0
- package/dist/commands/record.d.ts.map +1 -0
- package/dist/commands/record.js +307 -0
- package/dist/commands/record.js.map +1 -0
- package/dist/commands/search.d.ts +16 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +125 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/status.d.ts +8 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +63 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/summarize.d.ts +17 -0
- package/dist/commands/summarize.d.ts.map +1 -0
- package/dist/commands/summarize.js +167 -0
- package/dist/commands/summarize.js.map +1 -0
- package/dist/commands/top.d.ts +14 -0
- package/dist/commands/top.d.ts.map +1 -0
- package/dist/commands/top.js +58 -0
- package/dist/commands/top.js.map +1 -0
- package/dist/commands/tune.d.ts +36 -0
- package/dist/commands/tune.d.ts.map +1 -0
- package/dist/commands/tune.js +354 -0
- package/dist/commands/tune.js.map +1 -0
- package/dist/formatters/playbook-formatter.d.ts +19 -0
- package/dist/formatters/playbook-formatter.d.ts.map +1 -0
- package/dist/formatters/playbook-formatter.js +56 -0
- package/dist/formatters/playbook-formatter.js.map +1 -0
- package/dist/formatters/search-formatter.d.ts +28 -0
- package/dist/formatters/search-formatter.d.ts.map +1 -0
- package/dist/formatters/search-formatter.js +48 -0
- package/dist/formatters/search-formatter.js.map +1 -0
- package/dist/formatters/status-formatter.d.ts +25 -0
- package/dist/formatters/status-formatter.d.ts.map +1 -0
- package/dist/formatters/status-formatter.js +46 -0
- package/dist/formatters/status-formatter.js.map +1 -0
- package/dist/services/config-loader.d.ts +8 -0
- package/dist/services/config-loader.d.ts.map +1 -0
- package/dist/services/config-loader.js +7 -0
- package/dist/services/config-loader.js.map +1 -0
- package/dist/services/initialization.d.ts +128 -0
- package/dist/services/initialization.d.ts.map +1 -0
- package/dist/services/initialization.js +874 -0
- package/dist/services/initialization.js.map +1 -0
- package/dist/services/language-detector.d.ts +63 -0
- package/dist/services/language-detector.d.ts.map +1 -0
- package/dist/services/language-detector.js +123 -0
- package/dist/services/language-detector.js.map +1 -0
- package/dist/services/logger.d.ts +97 -0
- package/dist/services/logger.d.ts.map +1 -0
- package/dist/services/logger.js +229 -0
- package/dist/services/logger.js.map +1 -0
- package/dist/services/plugin-loader.d.ts +84 -0
- package/dist/services/plugin-loader.d.ts.map +1 -0
- package/dist/services/plugin-loader.js +282 -0
- package/dist/services/plugin-loader.js.map +1 -0
- package/dist/services/recorder.d.ts +80 -0
- package/dist/services/recorder.d.ts.map +1 -0
- package/dist/services/recorder.js +267 -0
- package/dist/services/recorder.js.map +1 -0
- package/dist/services/server-client.d.ts +32 -0
- package/dist/services/server-client.d.ts.map +1 -0
- package/dist/services/server-client.js +68 -0
- package/dist/services/server-client.js.map +1 -0
- package/dist/services/session-storage.d.ts +20 -0
- package/dist/services/session-storage.d.ts.map +1 -0
- package/dist/services/session-storage.js +29 -0
- package/dist/services/session-storage.js.map +1 -0
- package/dist/types/config.d.ts +33 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +63 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/pattern.d.ts +8 -0
- package/dist/types/pattern.d.ts.map +1 -0
- package/dist/types/pattern.js +7 -0
- package/dist/types/pattern.js.map +1 -0
- package/dist/types/plugin.d.ts +87 -0
- package/dist/types/plugin.d.ts.map +1 -0
- package/dist/types/plugin.js +5 -0
- package/dist/types/plugin.js.map +1 -0
- package/dist/types/recorder.d.ts +44 -0
- package/dist/types/recorder.d.ts.map +1 -0
- package/dist/types/recorder.js +5 -0
- package/dist/types/recorder.js.map +1 -0
- package/dist/utils/code-extractor.d.ts +8 -0
- package/dist/utils/code-extractor.d.ts.map +1 -0
- package/dist/utils/code-extractor.js +7 -0
- package/dist/utils/code-extractor.js.map +1 -0
- package/dist/utils/semver.d.ts +13 -0
- package/dist/utils/semver.d.ts.map +1 -0
- package/dist/utils/semver.js +14 -0
- package/dist/utils/semver.js.map +1 -0
- package/dist/utils/version-checker.d.ts +27 -0
- package/dist/utils/version-checker.d.ts.map +1 -0
- package/dist/utils/version-checker.js +141 -0
- package/dist/utils/version-checker.js.map +1 -0
- 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"}
|