@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,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 @@
|
|
|
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
|