@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,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Health diagnostics command
|
|
3
|
+
*/
|
|
4
|
+
import { existsSync } from 'fs';
|
|
5
|
+
import { homedir } from 'os';
|
|
6
|
+
import { join } from 'path';
|
|
7
|
+
import { globalOptions } from '../cli.js';
|
|
8
|
+
import { getConfig } from '../types/config.js';
|
|
9
|
+
import { ACEServerClient } from '../services/server-client.js';
|
|
10
|
+
import { Logger } from '../services/logger.js';
|
|
11
|
+
import chalk from 'chalk';
|
|
12
|
+
/**
|
|
13
|
+
* Run diagnostics on ACE configuration and connectivity
|
|
14
|
+
*/
|
|
15
|
+
export async function doctorCommand() {
|
|
16
|
+
const logger = new Logger(globalOptions);
|
|
17
|
+
const results = [];
|
|
18
|
+
// Check 1: Config file exists
|
|
19
|
+
let spinner = logger.spinner('Checking configuration file...');
|
|
20
|
+
const configPath = join(homedir(), '.ace', 'config.json');
|
|
21
|
+
if (existsSync(configPath)) {
|
|
22
|
+
results.push({
|
|
23
|
+
check: 'Config File',
|
|
24
|
+
status: 'pass',
|
|
25
|
+
message: `Found at ${configPath}`
|
|
26
|
+
});
|
|
27
|
+
spinner?.succeed('Configuration file found');
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
results.push({
|
|
31
|
+
check: 'Config File',
|
|
32
|
+
status: 'fail',
|
|
33
|
+
message: 'Configuration file not found. Run "ce-ace config" to set up.'
|
|
34
|
+
});
|
|
35
|
+
spinner?.fail('Configuration file not found');
|
|
36
|
+
}
|
|
37
|
+
// Check 2: Config is valid
|
|
38
|
+
spinner = logger.spinner('Validating configuration...');
|
|
39
|
+
let config;
|
|
40
|
+
try {
|
|
41
|
+
config = getConfig();
|
|
42
|
+
results.push({
|
|
43
|
+
check: 'Config Validity',
|
|
44
|
+
status: 'pass',
|
|
45
|
+
message: 'Configuration is valid',
|
|
46
|
+
details: {
|
|
47
|
+
serverUrl: config.serverUrl,
|
|
48
|
+
projectId: config.projectId,
|
|
49
|
+
hasApiToken: !!config.apiToken
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
spinner?.succeed('Configuration is valid');
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
results.push({
|
|
56
|
+
check: 'Config Validity',
|
|
57
|
+
status: 'fail',
|
|
58
|
+
message: error instanceof Error ? error.message : String(error)
|
|
59
|
+
});
|
|
60
|
+
spinner?.fail('Configuration is invalid');
|
|
61
|
+
}
|
|
62
|
+
// Check 3: Server connectivity
|
|
63
|
+
if (config) {
|
|
64
|
+
spinner = logger.spinner('Testing server connectivity...');
|
|
65
|
+
try {
|
|
66
|
+
const client = new ACEServerClient(config, logger);
|
|
67
|
+
// Try to get playbook analytics (minimal request)
|
|
68
|
+
await client.getAnalytics();
|
|
69
|
+
results.push({
|
|
70
|
+
check: 'Server Connectivity',
|
|
71
|
+
status: 'pass',
|
|
72
|
+
message: `Connected to ${config.serverUrl}`
|
|
73
|
+
});
|
|
74
|
+
spinner?.succeed('Server is reachable');
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
results.push({
|
|
78
|
+
check: 'Server Connectivity',
|
|
79
|
+
status: 'fail',
|
|
80
|
+
message: error instanceof Error ? error.message : String(error),
|
|
81
|
+
details: {
|
|
82
|
+
serverUrl: config.serverUrl
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
spinner?.fail('Cannot reach server');
|
|
86
|
+
}
|
|
87
|
+
// Check 4: API token validity
|
|
88
|
+
spinner = logger.spinner('Validating API token...');
|
|
89
|
+
try {
|
|
90
|
+
const client = new ACEServerClient(config, logger);
|
|
91
|
+
// Getting playbook also validates the token
|
|
92
|
+
await client.getPlaybook({ forceRefresh: false, include_metadata: false });
|
|
93
|
+
results.push({
|
|
94
|
+
check: 'API Token',
|
|
95
|
+
status: 'pass',
|
|
96
|
+
message: 'API token is valid'
|
|
97
|
+
});
|
|
98
|
+
spinner?.succeed('API token is valid');
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
102
|
+
if (errorMsg.includes('401') || errorMsg.includes('unauthorized')) {
|
|
103
|
+
results.push({
|
|
104
|
+
check: 'API Token',
|
|
105
|
+
status: 'fail',
|
|
106
|
+
message: 'API token is invalid or expired'
|
|
107
|
+
});
|
|
108
|
+
spinner?.fail('API token is invalid');
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
results.push({
|
|
112
|
+
check: 'API Token',
|
|
113
|
+
status: 'warn',
|
|
114
|
+
message: 'Could not validate API token',
|
|
115
|
+
details: { error: errorMsg }
|
|
116
|
+
});
|
|
117
|
+
spinner?.warn('Could not validate API token');
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// Check 5: Project/org existence
|
|
121
|
+
spinner = logger.spinner('Verifying project access...');
|
|
122
|
+
try {
|
|
123
|
+
const client = new ACEServerClient(config, logger);
|
|
124
|
+
const analytics = await client.getAnalytics();
|
|
125
|
+
results.push({
|
|
126
|
+
check: 'Project Access',
|
|
127
|
+
status: 'pass',
|
|
128
|
+
message: `Project ${config.projectId} is accessible`,
|
|
129
|
+
details: {
|
|
130
|
+
totalBullets: analytics.total_bullets || 0
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
spinner?.succeed('Project is accessible');
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
results.push({
|
|
137
|
+
check: 'Project Access',
|
|
138
|
+
status: 'fail',
|
|
139
|
+
message: `Cannot access project ${config.projectId}`,
|
|
140
|
+
details: {
|
|
141
|
+
error: error instanceof Error ? error.message : String(error)
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
spinner?.fail('Project is not accessible');
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// Output results
|
|
148
|
+
if (logger.isJson()) {
|
|
149
|
+
logger.output({
|
|
150
|
+
timestamp: new Date().toISOString(),
|
|
151
|
+
results,
|
|
152
|
+
summary: {
|
|
153
|
+
total: results.length,
|
|
154
|
+
passed: results.filter(r => r.status === 'pass').length,
|
|
155
|
+
failed: results.filter(r => r.status === 'fail').length,
|
|
156
|
+
warnings: results.filter(r => r.status === 'warn').length
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
logger.info(chalk.bold('\n📊 Diagnostic Results\n'));
|
|
162
|
+
results.forEach(result => {
|
|
163
|
+
const symbol = result.status === 'pass' ? chalk.green('✓') :
|
|
164
|
+
result.status === 'fail' ? chalk.red('✗') :
|
|
165
|
+
chalk.yellow('⚠');
|
|
166
|
+
logger.info(`${symbol} ${chalk.bold(result.check)}: ${result.message}`);
|
|
167
|
+
if (result.details && logger.isVerbose()) {
|
|
168
|
+
logger.debug(` ${JSON.stringify(result.details, null, 2)}`);
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
const passed = results.filter(r => r.status === 'pass').length;
|
|
172
|
+
const failed = results.filter(r => r.status === 'fail').length;
|
|
173
|
+
const warned = results.filter(r => r.status === 'warn').length;
|
|
174
|
+
logger.info('');
|
|
175
|
+
logger.info(chalk.bold('Summary:'));
|
|
176
|
+
logger.info(` ${chalk.green('✓')} Passed: ${passed}`);
|
|
177
|
+
if (failed > 0)
|
|
178
|
+
logger.info(` ${chalk.red('✗')} Failed: ${failed}`);
|
|
179
|
+
if (warned > 0)
|
|
180
|
+
logger.info(` ${chalk.yellow('⚠')} Warnings: ${warned}`);
|
|
181
|
+
logger.info('');
|
|
182
|
+
if (failed > 0) {
|
|
183
|
+
process.exit(1);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Export playbook command
|
|
3
|
+
*/
|
|
4
|
+
interface ExportOptions {
|
|
5
|
+
output?: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Export playbook to JSON
|
|
9
|
+
*/
|
|
10
|
+
export declare function exportCommand(options: ExportOptions): Promise<void>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=export.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,UAAU,aAAa;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,iBAmCzD"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Export playbook command
|
|
3
|
+
*/
|
|
4
|
+
import { writeFileSync } from 'fs';
|
|
5
|
+
import { globalOptions } from '../cli.js';
|
|
6
|
+
import { createContext } from '../types/config.js';
|
|
7
|
+
import { ACEServerClient } from '../services/server-client.js';
|
|
8
|
+
import { Logger } from '../services/logger.js';
|
|
9
|
+
import chalk from 'chalk';
|
|
10
|
+
/**
|
|
11
|
+
* Export playbook to JSON
|
|
12
|
+
*/
|
|
13
|
+
export async function exportCommand(options) {
|
|
14
|
+
const logger = new Logger(globalOptions);
|
|
15
|
+
const spinner = logger.spinner('Exporting playbook...');
|
|
16
|
+
try {
|
|
17
|
+
const context = await createContext({ org: globalOptions.org, project: globalOptions.project });
|
|
18
|
+
const client = new ACEServerClient(context, logger);
|
|
19
|
+
const result = await client.getPlaybook({ forceRefresh: false, include_metadata: false });
|
|
20
|
+
spinner?.succeed('Playbook exported');
|
|
21
|
+
const jsonOutput = JSON.stringify(result.playbook, null, 2);
|
|
22
|
+
if (options.output) {
|
|
23
|
+
// Write to file
|
|
24
|
+
writeFileSync(options.output, jsonOutput);
|
|
25
|
+
if (!logger.isJson()) {
|
|
26
|
+
logger.info(chalk.green(`\n✅ Playbook exported to ${options.output}\n`));
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
// Write to stdout
|
|
31
|
+
logger.output(jsonOutput);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
spinner?.fail('Failed to export playbook');
|
|
36
|
+
if (logger.isJson()) {
|
|
37
|
+
logger.output({ error: error instanceof Error ? error.message : String(error) });
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
logger.error(`Error: ${error instanceof Error ? error.message : String(error)}`);
|
|
41
|
+
}
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAsB;IACxD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAExD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,EAAE,GAAG,EAAE,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAChG,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAEpD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,CAAC;QAE1F,OAAO,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAEtC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAE5D,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,gBAAgB;YAChB,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAE1C,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;gBACrB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,4BAA4B,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;aAAM,CAAC;YACN,kBAAkB;YAClB,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAE3C,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;YACpB,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACnF,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACnF,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Import playbook command
|
|
3
|
+
*/
|
|
4
|
+
interface ImportOptions {
|
|
5
|
+
file?: string;
|
|
6
|
+
stdin?: boolean;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Import playbook from JSON file or stdin
|
|
10
|
+
*/
|
|
11
|
+
export declare function importCommand(fileArg: string | undefined, options: ImportOptions): Promise<void>;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=import.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../src/commands/import.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,aAAa,iBAmFtF"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Import playbook command
|
|
3
|
+
*/
|
|
4
|
+
import { readFileSync } from 'fs';
|
|
5
|
+
import { globalOptions } from '../cli.js';
|
|
6
|
+
import { createContext } from '../types/config.js';
|
|
7
|
+
import { ACEServerClient } from '../services/server-client.js';
|
|
8
|
+
import { Logger } from '../services/logger.js';
|
|
9
|
+
import chalk from 'chalk';
|
|
10
|
+
/**
|
|
11
|
+
* Import playbook from JSON file or stdin
|
|
12
|
+
*/
|
|
13
|
+
export async function importCommand(fileArg, options) {
|
|
14
|
+
const logger = new Logger(globalOptions);
|
|
15
|
+
const spinner = logger.spinner('Importing playbook...');
|
|
16
|
+
try {
|
|
17
|
+
let playbook;
|
|
18
|
+
// Read from stdin if specified
|
|
19
|
+
if (options.stdin) {
|
|
20
|
+
const stdinData = readFileSync(0, 'utf8'); // fd 0 is stdin
|
|
21
|
+
playbook = JSON.parse(stdinData.trim());
|
|
22
|
+
}
|
|
23
|
+
// Read from file (either from --file option or positional argument)
|
|
24
|
+
else {
|
|
25
|
+
const file = options.file || fileArg;
|
|
26
|
+
if (!file) {
|
|
27
|
+
throw new Error('Must provide either a file path or use --stdin');
|
|
28
|
+
}
|
|
29
|
+
const fileContent = readFileSync(file, 'utf8');
|
|
30
|
+
playbook = JSON.parse(fileContent);
|
|
31
|
+
}
|
|
32
|
+
const context = await createContext({ org: globalOptions.org, project: globalOptions.project });
|
|
33
|
+
const client = new ACEServerClient(context, logger);
|
|
34
|
+
// Convert playbook to code blocks for bootstrap
|
|
35
|
+
const codeBlocks = [];
|
|
36
|
+
// Add all patterns from each section
|
|
37
|
+
if (playbook.strategies_and_hard_rules) {
|
|
38
|
+
for (const pattern of playbook.strategies_and_hard_rules) {
|
|
39
|
+
codeBlocks.push(`[STRATEGY] ${pattern.content}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (playbook.useful_code_snippets) {
|
|
43
|
+
for (const pattern of playbook.useful_code_snippets) {
|
|
44
|
+
codeBlocks.push(pattern.content);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
if (playbook.troubleshooting_and_pitfalls) {
|
|
48
|
+
for (const pattern of playbook.troubleshooting_and_pitfalls) {
|
|
49
|
+
codeBlocks.push(`[TROUBLESHOOTING] ${pattern.content}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
if (playbook.apis_to_use) {
|
|
53
|
+
for (const pattern of playbook.apis_to_use) {
|
|
54
|
+
codeBlocks.push(`[API] ${pattern.content}`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Import via bootstrap
|
|
58
|
+
await client.bootstrap({
|
|
59
|
+
mode: 'local-files',
|
|
60
|
+
code_blocks: codeBlocks,
|
|
61
|
+
metadata: {
|
|
62
|
+
blocks_extracted: codeBlocks.length
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
// Invalidate cache
|
|
66
|
+
client.invalidateCache();
|
|
67
|
+
spinner?.succeed('Playbook imported');
|
|
68
|
+
const source = options.stdin ? 'stdin' : (options.file || fileArg);
|
|
69
|
+
if (logger.isJson()) {
|
|
70
|
+
logger.output({ success: true, message: 'Playbook imported', source });
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
logger.info(chalk.green(`\n✅ Playbook imported successfully from ${source}\n`));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
spinner?.fail('Failed to import playbook');
|
|
78
|
+
if (logger.isJson()) {
|
|
79
|
+
logger.output({ error: error instanceof Error ? error.message : String(error) });
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
logger.error(`Error: ${error instanceof Error ? error.message : String(error)}`);
|
|
83
|
+
}
|
|
84
|
+
process.exit(1);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=import.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import.js","sourceRoot":"","sources":["../../src/commands/import.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Learning command - submit execution traces to update playbook
|
|
3
|
+
*/
|
|
4
|
+
interface LearnOptions {
|
|
5
|
+
transcript?: string;
|
|
6
|
+
stdin?: boolean;
|
|
7
|
+
task?: string;
|
|
8
|
+
success?: boolean;
|
|
9
|
+
failure?: boolean;
|
|
10
|
+
output?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Submit learning event to update playbook
|
|
14
|
+
*/
|
|
15
|
+
export declare function learnCommand(options: LearnOptions): Promise<void>;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=learn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learn.d.ts","sourceRoot":"","sources":["../../src/commands/learn.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,iBAyLvD"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Learning command - submit execution traces to update playbook
|
|
3
|
+
*/
|
|
4
|
+
import { readFileSync } from 'fs';
|
|
5
|
+
import { globalOptions } from '../cli.js';
|
|
6
|
+
import { createContext } from '../types/config.js';
|
|
7
|
+
import { ACEServerClient } from '../services/server-client.js';
|
|
8
|
+
import { Logger } from '../services/logger.js';
|
|
9
|
+
import chalk from 'chalk';
|
|
10
|
+
/**
|
|
11
|
+
* Submit learning event to update playbook
|
|
12
|
+
*/
|
|
13
|
+
export async function learnCommand(options) {
|
|
14
|
+
const logger = new Logger(globalOptions);
|
|
15
|
+
let trace = null;
|
|
16
|
+
// Read from file if specified
|
|
17
|
+
if (options.transcript) {
|
|
18
|
+
try {
|
|
19
|
+
const content = readFileSync(options.transcript, 'utf8');
|
|
20
|
+
trace = JSON.parse(content);
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
if (logger.isJson()) {
|
|
24
|
+
logger.error('Failed to read transcript file');
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
logger.error(chalk.red(`Error: Failed to read transcript file: ${error instanceof Error ? error.message : String(error)}`));
|
|
28
|
+
}
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// Read from stdin if specified
|
|
33
|
+
else if (options.stdin) {
|
|
34
|
+
try {
|
|
35
|
+
const stdinData = readFileSync(0, 'utf8'); // fd 0 is stdin
|
|
36
|
+
trace = JSON.parse(stdinData.trim());
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
if (logger.isJson()) {
|
|
40
|
+
logger.error('Failed to read from stdin');
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
logger.error(chalk.red(`Error: Failed to read from stdin: ${error instanceof Error ? error.message : String(error)}`));
|
|
44
|
+
}
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
// Build from command-line options
|
|
49
|
+
else if (options.task && (options.success || options.failure) && options.output) {
|
|
50
|
+
const trajectory = [{
|
|
51
|
+
step: 1,
|
|
52
|
+
action: options.task,
|
|
53
|
+
args: {},
|
|
54
|
+
result: 'Completed'
|
|
55
|
+
}];
|
|
56
|
+
trace = {
|
|
57
|
+
task: options.task,
|
|
58
|
+
trajectory,
|
|
59
|
+
result: {
|
|
60
|
+
success: options.success || false,
|
|
61
|
+
output: options.output,
|
|
62
|
+
error: options.failure ? 'Task failed' : undefined
|
|
63
|
+
},
|
|
64
|
+
playbook_used: [],
|
|
65
|
+
timestamp: new Date().toISOString()
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
if (logger.isJson()) {
|
|
70
|
+
logger.error('Must provide either --transcript, --stdin, or --task + --success/--failure + --output');
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
logger.error(chalk.red('Error: Must provide either:'));
|
|
74
|
+
logger.info(chalk.dim(' - --transcript <file>'));
|
|
75
|
+
logger.info(chalk.dim(' - --stdin'));
|
|
76
|
+
logger.info(chalk.dim(' - --task + --success/--failure + --output'));
|
|
77
|
+
}
|
|
78
|
+
process.exit(1);
|
|
79
|
+
}
|
|
80
|
+
if (!trace) {
|
|
81
|
+
if (logger.isJson()) {
|
|
82
|
+
logger.error('Failed to create execution trace');
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
logger.error(chalk.red('Error: Failed to create execution trace'));
|
|
86
|
+
}
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
89
|
+
const spinner = logger.spinner('Submitting learning event...');
|
|
90
|
+
try {
|
|
91
|
+
const context = await createContext({ org: globalOptions.org, project: globalOptions.project });
|
|
92
|
+
const client = new ACEServerClient(context, logger);
|
|
93
|
+
// Check server config for learning settings
|
|
94
|
+
try {
|
|
95
|
+
const serverConfig = await client.getConfig();
|
|
96
|
+
const runtimeSettings = serverConfig?.runtime_settings || {};
|
|
97
|
+
// Warn if learning is disabled on server
|
|
98
|
+
if (runtimeSettings.learningEnabled === false) {
|
|
99
|
+
logger.warn('Learning is disabled on the server. Trace will be stored but not processed.');
|
|
100
|
+
}
|
|
101
|
+
// Log server thresholds
|
|
102
|
+
logger.debug(`Learning settings: enabled=${runtimeSettings.learningEnabled ?? true}, min_confidence=${runtimeSettings.learningMinConfidence ?? 0.3}, min_tokens=${runtimeSettings.learningMinTokens ?? 100}`);
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
logger.debug('Failed to fetch server config, proceeding with submission');
|
|
106
|
+
}
|
|
107
|
+
const result = await client.storeExecutionTrace(trace);
|
|
108
|
+
// Invalidate cache so next request gets fresh data
|
|
109
|
+
client.invalidateCache();
|
|
110
|
+
spinner?.succeed('Learning event submitted');
|
|
111
|
+
if (logger.isJson()) {
|
|
112
|
+
// JSON output includes full response
|
|
113
|
+
logger.output({
|
|
114
|
+
success: true,
|
|
115
|
+
message: 'Execution trace stored successfully',
|
|
116
|
+
task: trace.task,
|
|
117
|
+
timestamp: trace.timestamp,
|
|
118
|
+
analysis_performed: result.analysis_performed,
|
|
119
|
+
learning_statistics: result.learning_statistics
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
// Human-readable output
|
|
124
|
+
logger.info(chalk.green('\n✅ Learning event submitted successfully'));
|
|
125
|
+
logger.info(chalk.dim(` Task: ${trace.task}`));
|
|
126
|
+
logger.info(chalk.dim(` Timestamp: ${trace.timestamp}`));
|
|
127
|
+
// Show learning statistics if available (server v3.10.0+)
|
|
128
|
+
if (result.learning_statistics) {
|
|
129
|
+
const stats = result.learning_statistics;
|
|
130
|
+
logger.info(chalk.bold('\n📊 Learning Results:'));
|
|
131
|
+
// Show creation/update counts
|
|
132
|
+
if (stats.patterns_created > 0) {
|
|
133
|
+
logger.info(chalk.green(` • ${stats.patterns_created} new pattern${stats.patterns_created === 1 ? '' : 's'} created`));
|
|
134
|
+
}
|
|
135
|
+
if (stats.patterns_updated > 0) {
|
|
136
|
+
logger.info(chalk.cyan(` • ${stats.patterns_updated} pattern${stats.patterns_updated === 1 ? '' : 's'} updated`));
|
|
137
|
+
}
|
|
138
|
+
if (stats.patterns_pruned > 0) {
|
|
139
|
+
logger.info(chalk.yellow(` • ${stats.patterns_pruned} low-quality pattern${stats.patterns_pruned === 1 ? '' : 's'} pruned`));
|
|
140
|
+
}
|
|
141
|
+
if (stats.patterns_deduplicated > 0) {
|
|
142
|
+
logger.info(chalk.blue(` • ${stats.patterns_deduplicated} duplicate${stats.patterns_deduplicated === 1 ? '' : 's'} merged`));
|
|
143
|
+
}
|
|
144
|
+
// Show section breakdown if verbose
|
|
145
|
+
if (logger.isVerbose()) {
|
|
146
|
+
const sections = stats.by_section;
|
|
147
|
+
const totalSectionChanges = sections.strategies_and_hard_rules +
|
|
148
|
+
sections.useful_code_snippets +
|
|
149
|
+
sections.troubleshooting_and_pitfalls +
|
|
150
|
+
sections.apis_to_use;
|
|
151
|
+
if (totalSectionChanges > 0) {
|
|
152
|
+
logger.info(chalk.bold('\n Affected Sections:'));
|
|
153
|
+
if (sections.strategies_and_hard_rules > 0) {
|
|
154
|
+
logger.info(chalk.dim(` - Strategies & Hard Rules: ${sections.strategies_and_hard_rules}`));
|
|
155
|
+
}
|
|
156
|
+
if (sections.useful_code_snippets > 0) {
|
|
157
|
+
logger.info(chalk.dim(` - Useful Code Snippets: ${sections.useful_code_snippets}`));
|
|
158
|
+
}
|
|
159
|
+
if (sections.troubleshooting_and_pitfalls > 0) {
|
|
160
|
+
logger.info(chalk.dim(` - Troubleshooting & Pitfalls: ${sections.troubleshooting_and_pitfalls}`));
|
|
161
|
+
}
|
|
162
|
+
if (sections.apis_to_use > 0) {
|
|
163
|
+
logger.info(chalk.dim(` - APIs to Use: ${sections.apis_to_use}`));
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
// Show quality metrics
|
|
168
|
+
logger.info(chalk.bold('\n Quality Metrics:'));
|
|
169
|
+
logger.info(chalk.dim(` - Average confidence: ${(stats.average_confidence * 100).toFixed(0)}%`));
|
|
170
|
+
if (stats.helpful_delta > 0) {
|
|
171
|
+
logger.info(chalk.dim(` - Helpful feedback: +${stats.helpful_delta}`));
|
|
172
|
+
}
|
|
173
|
+
logger.info(chalk.dim(` - Analysis time: ${stats.analysis_time_seconds.toFixed(1)}s`));
|
|
174
|
+
logger.info('');
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
// Fallback for older servers without statistics
|
|
178
|
+
logger.info(chalk.dim(' Server is analyzing and updating playbook...\n'));
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
spinner?.fail('Failed to submit learning event');
|
|
184
|
+
if (logger.isJson()) {
|
|
185
|
+
logger.error(error instanceof Error ? error.message : String(error));
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
logger.error(chalk.red(`\nError: ${error instanceof Error ? error.message : String(error)}\n`));
|
|
189
|
+
}
|
|
190
|
+
process.exit(1);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=learn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learn.js","sourceRoot":"","sources":["../../src/commands/learn.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* View playbook patterns command
|
|
3
|
+
*/
|
|
4
|
+
interface PatternsOptions {
|
|
5
|
+
section?: string;
|
|
6
|
+
minHelpful?: number;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* View playbook patterns
|
|
10
|
+
*/
|
|
11
|
+
export declare function patternsCommand(options: PatternsOptions): Promise<void>;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=patterns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../src/commands/patterns.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,UAAU,eAAe;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,iBAwE7D"}
|