agent-ctx 1.0.1 → 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 +56 -51
- package/dist/commands/add.d.ts +1 -1
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +1 -1
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/centralize.d.ts +3 -3
- package/dist/commands/centralize.d.ts.map +1 -1
- package/dist/commands/centralize.js +21 -21
- package/dist/commands/centralize.js.map +1 -1
- package/dist/commands/clean.d.ts +3 -3
- package/dist/commands/clean.d.ts.map +1 -1
- package/dist/commands/clean.js +31 -31
- package/dist/commands/clean.js.map +1 -1
- package/dist/commands/doctor.d.ts +3 -3
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +132 -50
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.d.ts +3 -3
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +97 -38
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/update.d.ts +3 -4
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +169 -52
- package/dist/commands/update.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -12
- package/dist/index.js.map +1 -1
- package/dist/lib/bridges.d.ts +8 -8
- package/dist/lib/bridges.d.ts.map +1 -1
- package/dist/lib/bridges.js +108 -108
- package/dist/lib/bridges.js.map +1 -1
- package/dist/lib/config.d.ts +18 -6
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +54 -18
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/i18n.d.ts.map +1 -1
- package/dist/lib/i18n.js +56 -6
- package/dist/lib/i18n.js.map +1 -1
- package/dist/lib/logger.d.ts +7 -7
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js +17 -17
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/templates.d.ts +1 -5
- package/dist/lib/templates.d.ts.map +1 -1
- package/dist/lib/templates.js +28 -18
- package/dist/lib/templates.js.map +1 -1
- package/dist/lib/utils.d.ts +8 -8
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +47 -20
- package/dist/lib/utils.js.map +1 -1
- package/package.json +77 -63
- package/src/templates/en/skills/skill-agents.md +43 -18
- package/src/templates/en/skills/skill-memory.md +97 -0
- package/src/templates/es/skills/skill-agents.md +43 -18
- package/src/templates/es/skills/skill-memory.md +97 -0
- package/dist/bin/agentrc.d.ts +0 -7
- package/dist/bin/agentrc.d.ts.map +0 -1
- package/dist/bin/agentrc.js +0 -8
- package/dist/bin/agentrc.js.map +0 -1
- package/dist/lib/wizard.d.ts +0 -22
- package/dist/lib/wizard.d.ts.map +0 -1
- package/dist/lib/wizard.js +0 -197
- package/dist/lib/wizard.js.map +0 -1
- package/src/templates/en/skills/skill-api.md +0 -117
- package/src/templates/en/skills/skill-git.md +0 -109
- package/src/templates/en/skills/skill-react.md +0 -94
- package/src/templates/en/skills/skill-testing.md +0 -139
- package/src/templates/es/skills/skill-api.md +0 -117
- package/src/templates/es/skills/skill-git.md +0 -108
- package/src/templates/es/skills/skill-react.md +0 -94
- package/src/templates/es/skills/skill-testing.md +0 -139
package/dist/commands/doctor.js
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* Command: doctor
|
|
3
|
+
* Checks integrity of .context and bridge files, offers repairs
|
|
4
4
|
*/
|
|
5
5
|
import { join } from 'path';
|
|
6
6
|
import { existsSync, readFileSync } from 'fs';
|
|
7
7
|
import { logger, startSpinner, succeedSpinner, warnSpinner, failSpinner } from '../lib/logger.js';
|
|
8
|
-
import { resolveDirectory, validateNotRoot, ensureDir
|
|
8
|
+
import { resolveDirectory, validateNotRoot, ensureDir } from '../lib/utils.js';
|
|
9
9
|
import { BRIDGE_FILES } from '../lib/bridges.js';
|
|
10
|
+
import { loadConfig, hasConfig } from '../lib/config.js';
|
|
11
|
+
import { BASE_SKILLS, copyTemplate } from '../lib/templates.js';
|
|
10
12
|
/**
|
|
11
|
-
*
|
|
13
|
+
* Executes the doctor command
|
|
12
14
|
*/
|
|
13
15
|
export async function doctorCommand(directory, options) {
|
|
14
16
|
try {
|
|
@@ -16,21 +18,37 @@ export async function doctorCommand(directory, options) {
|
|
|
16
18
|
validateNotRoot(targetDir);
|
|
17
19
|
const { fix = false } = options;
|
|
18
20
|
// Header
|
|
19
|
-
logger.header('🩺
|
|
20
|
-
logger.log(`\n📁
|
|
21
|
+
logger.header('🩺 Project Diagnostics');
|
|
22
|
+
logger.log(`\n📁 Directory: ${targetDir}`);
|
|
21
23
|
if (fix) {
|
|
22
|
-
logger.log('🔧
|
|
24
|
+
logger.log('🔧 FIX mode: will automatically repair issues');
|
|
23
25
|
}
|
|
24
26
|
const issues = [];
|
|
25
|
-
const
|
|
26
|
-
//
|
|
27
|
-
const
|
|
27
|
+
const newSkillsInfo = []; // Informational only, NOT issues
|
|
28
|
+
// 0. Check configuration
|
|
29
|
+
const configExists = hasConfig(targetDir);
|
|
30
|
+
const config = loadConfig(targetDir);
|
|
31
|
+
if (!configExists) {
|
|
32
|
+
logger.warning('⚠️ No .agent-ctx.json found - run `agent-ctx init` first');
|
|
33
|
+
issues.push({
|
|
34
|
+
type: 'no_config',
|
|
35
|
+
path: join(targetDir, '.agent-ctx.json'),
|
|
36
|
+
name: '.agent-ctx.json',
|
|
37
|
+
optional: false,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
logger.log('📄 Config loaded from .agent-ctx.json');
|
|
42
|
+
}
|
|
43
|
+
// 1. Check .context structure
|
|
44
|
+
startSpinner('Checking .context/ structure...');
|
|
28
45
|
const requiredDirs = [
|
|
29
46
|
{ path: '.context', name: '.context/' },
|
|
30
47
|
{ path: '.context/rules', name: '.context/rules/' },
|
|
31
48
|
{ path: '.context/skills', name: '.context/skills/' },
|
|
32
49
|
{ path: '.context/docs', name: '.context/docs/' },
|
|
33
|
-
{ path: '.context/mcp', name: '.context/mcp/' }
|
|
50
|
+
{ path: '.context/mcp', name: '.context/mcp/' },
|
|
51
|
+
{ path: '.context/memory', name: '.context/memory/' },
|
|
34
52
|
];
|
|
35
53
|
let dirIssues = 0;
|
|
36
54
|
for (const dir of requiredDirs) {
|
|
@@ -40,7 +58,7 @@ export async function doctorCommand(directory, options) {
|
|
|
40
58
|
issues.push({
|
|
41
59
|
type: 'missing_dir',
|
|
42
60
|
path: fullPath,
|
|
43
|
-
name: dir.name
|
|
61
|
+
name: dir.name,
|
|
44
62
|
});
|
|
45
63
|
}
|
|
46
64
|
}
|
|
@@ -48,15 +66,15 @@ export async function doctorCommand(directory, options) {
|
|
|
48
66
|
succeedSpinner('Estructura .context/ completa');
|
|
49
67
|
}
|
|
50
68
|
else {
|
|
51
|
-
warnSpinner(`
|
|
69
|
+
warnSpinner(`Missing ${dirIssues} directory(ies) in .context/`);
|
|
52
70
|
}
|
|
53
|
-
// 2.
|
|
54
|
-
|
|
71
|
+
// 2. Check basic context files
|
|
72
|
+
startSpinner('Checking context files...');
|
|
55
73
|
const requiredFiles = [
|
|
56
74
|
{ path: 'AGENTS.md', name: 'AGENTS.md' },
|
|
57
75
|
{ path: '.context/architecture.md', name: 'architecture.md' },
|
|
58
76
|
{ path: '.context/project_state.md', name: 'project_state.md' },
|
|
59
|
-
{ path: '.context/rules/coding-standards.md', name: 'coding-standards.md' }
|
|
77
|
+
{ path: '.context/rules/coding-standards.md', name: 'coding-standards.md' },
|
|
60
78
|
];
|
|
61
79
|
let fileIssues = 0;
|
|
62
80
|
for (const file of requiredFiles) {
|
|
@@ -67,25 +85,70 @@ export async function doctorCommand(directory, options) {
|
|
|
67
85
|
type: 'missing_file',
|
|
68
86
|
path: fullPath,
|
|
69
87
|
name: file.name,
|
|
70
|
-
optional: true
|
|
88
|
+
optional: true,
|
|
71
89
|
});
|
|
72
90
|
}
|
|
73
91
|
}
|
|
74
92
|
if (fileIssues === 0) {
|
|
75
|
-
succeedSpinner('
|
|
93
|
+
succeedSpinner('Context files complete');
|
|
76
94
|
}
|
|
77
95
|
else {
|
|
78
|
-
warnSpinner(`
|
|
96
|
+
warnSpinner(`Missing ${fileIssues} context file(s) (optional)`);
|
|
79
97
|
}
|
|
80
|
-
// 3.
|
|
81
|
-
|
|
98
|
+
// 3. Verify registered skills in config vs actual files
|
|
99
|
+
if (configExists) {
|
|
100
|
+
startSpinner('Verifying installed skills...');
|
|
101
|
+
let skillsMissing = 0;
|
|
102
|
+
let skillsOk = 0;
|
|
103
|
+
// Check registered skills exist
|
|
104
|
+
for (const skillKey of config.skills) {
|
|
105
|
+
const skillConfig = BASE_SKILLS[skillKey];
|
|
106
|
+
if (skillConfig) {
|
|
107
|
+
const destPath = join(targetDir, skillConfig.dest);
|
|
108
|
+
if (existsSync(destPath)) {
|
|
109
|
+
skillsOk++;
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
skillsMissing++;
|
|
113
|
+
issues.push({
|
|
114
|
+
type: 'missing_skill',
|
|
115
|
+
path: destPath,
|
|
116
|
+
name: skillConfig.name || skillKey,
|
|
117
|
+
templateKey: skillKey,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// Check for NEW skills in CLI not registered in config (informational only)
|
|
123
|
+
let newSkills = 0;
|
|
124
|
+
for (const [skillKey, skillConfig] of Object.entries(BASE_SKILLS)) {
|
|
125
|
+
if (!config.skills.includes(skillKey)) {
|
|
126
|
+
newSkills++;
|
|
127
|
+
newSkillsInfo.push({
|
|
128
|
+
name: skillConfig.name || skillKey,
|
|
129
|
+
key: skillKey,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
if (skillsMissing === 0 && newSkills === 0) {
|
|
134
|
+
succeedSpinner(`${skillsOk} skills verified`);
|
|
135
|
+
}
|
|
136
|
+
else if (skillsMissing > 0) {
|
|
137
|
+
warnSpinner(`${skillsOk} OK, ${skillsMissing} missing, ${newSkills} new available`);
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
succeedSpinner(`${skillsOk} skills OK - ${newSkills} new available from CLI`);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// 4. Verify bridge files
|
|
144
|
+
startSpinner('Verifying bridge files...');
|
|
82
145
|
let bridgeOk = 0;
|
|
83
146
|
let bridgeMissing = 0;
|
|
84
147
|
let bridgeOutdated = 0;
|
|
85
|
-
for (const [file,
|
|
148
|
+
for (const [file, bridgeConfig] of Object.entries(BRIDGE_FILES)) {
|
|
86
149
|
const fullPath = join(targetDir, file);
|
|
87
150
|
if (existsSync(fullPath)) {
|
|
88
|
-
//
|
|
151
|
+
// Verify that it contains references to .context
|
|
89
152
|
const content = readFileSync(fullPath, 'utf-8');
|
|
90
153
|
if (content.includes('.context') || content.includes('AGENTS.md')) {
|
|
91
154
|
bridgeOk++;
|
|
@@ -96,7 +159,7 @@ export async function doctorCommand(directory, options) {
|
|
|
96
159
|
type: 'outdated_bridge',
|
|
97
160
|
path: fullPath,
|
|
98
161
|
name: file,
|
|
99
|
-
config
|
|
162
|
+
config: bridgeConfig,
|
|
100
163
|
});
|
|
101
164
|
}
|
|
102
165
|
}
|
|
@@ -106,60 +169,79 @@ export async function doctorCommand(directory, options) {
|
|
|
106
169
|
type: 'missing_bridge',
|
|
107
170
|
path: fullPath,
|
|
108
171
|
name: file,
|
|
109
|
-
config
|
|
172
|
+
config: bridgeConfig,
|
|
110
173
|
});
|
|
111
174
|
}
|
|
112
175
|
}
|
|
113
176
|
if (bridgeMissing === 0 && bridgeOutdated === 0) {
|
|
114
|
-
succeedSpinner(`${bridgeOk}
|
|
177
|
+
succeedSpinner(`${bridgeOk} bridge files configured`);
|
|
115
178
|
}
|
|
116
179
|
else {
|
|
117
|
-
warnSpinner(`${bridgeOk} OK, ${bridgeMissing}
|
|
180
|
+
warnSpinner(`${bridgeOk} OK, ${bridgeMissing} missing, ${bridgeOutdated} outdated`);
|
|
118
181
|
}
|
|
119
|
-
//
|
|
182
|
+
// Summary
|
|
120
183
|
logger.divider();
|
|
121
|
-
const criticalIssues = issues.filter(i => !i.optional && i.type !== 'missing_bridge');
|
|
122
|
-
const optionalIssues = issues.filter(i => i.optional || i.type === 'missing_bridge');
|
|
184
|
+
const criticalIssues = issues.filter((i) => !i.optional && i.type !== 'missing_bridge');
|
|
185
|
+
const optionalIssues = issues.filter((i) => i.optional || i.type === 'missing_bridge');
|
|
123
186
|
if (issues.length === 0) {
|
|
124
|
-
logger.summary('✅
|
|
187
|
+
logger.summary('✅ All good!');
|
|
125
188
|
logger.log('\nTu proyecto está correctamente configurado.');
|
|
126
189
|
return;
|
|
127
190
|
}
|
|
128
|
-
logger.log(`\n📊
|
|
129
|
-
logger.log(` -
|
|
130
|
-
logger.log(` -
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
191
|
+
logger.log(`\n📊 Summary:`);
|
|
192
|
+
logger.log(` - Critical issues: ${criticalIssues.length}`);
|
|
193
|
+
logger.log(` - Minor/optional issues: ${optionalIssues.length}`);
|
|
194
|
+
if (newSkillsInfo.length > 0) {
|
|
195
|
+
logger.log(` - Nuevos skills disponibles: ${newSkillsInfo.length}`);
|
|
196
|
+
logger.log('\n📦 New base skills available from CLI:');
|
|
197
|
+
for (const skill of newSkillsInfo) {
|
|
198
|
+
logger.item(`${skill.name}`);
|
|
199
|
+
}
|
|
200
|
+
logger.log('\n💡 Run `agent-ctx update` to install new skills.');
|
|
201
|
+
}
|
|
202
|
+
// Repair if requested (only structure and registered skills, NOT bridges)
|
|
203
|
+
const fixableIssues = issues.filter((i) => i.type === 'missing_dir' || i.type === 'missing_skill');
|
|
204
|
+
if (fix && fixableIssues.length > 0) {
|
|
205
|
+
startSpinner('Applying repairs...');
|
|
134
206
|
let fixed = 0;
|
|
135
|
-
for (const issue of
|
|
207
|
+
for (const issue of fixableIssues) {
|
|
136
208
|
switch (issue.type) {
|
|
137
209
|
case 'missing_dir':
|
|
138
210
|
ensureDir(issue.path, { dryRun: false });
|
|
139
211
|
fixed++;
|
|
140
212
|
break;
|
|
141
|
-
case '
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
if (
|
|
145
|
-
|
|
213
|
+
case 'missing_skill':
|
|
214
|
+
if (issue.templateKey) {
|
|
215
|
+
const skillConfig = BASE_SKILLS[issue.templateKey];
|
|
216
|
+
if (skillConfig) {
|
|
217
|
+
copyTemplate(issue.templateKey, issue.path, {
|
|
218
|
+
force: false,
|
|
219
|
+
dryRun: false,
|
|
220
|
+
silent: true,
|
|
221
|
+
});
|
|
222
|
+
fixed++;
|
|
146
223
|
}
|
|
147
|
-
const content = issue.config.generator();
|
|
148
|
-
writeFile(issue.path, content, { force: true, dryRun: false });
|
|
149
|
-
fixed++;
|
|
150
224
|
}
|
|
151
225
|
break;
|
|
152
226
|
}
|
|
153
227
|
}
|
|
154
|
-
succeedSpinner(`${fixed}
|
|
155
|
-
logger.summary('🔧
|
|
228
|
+
succeedSpinner(`${fixed} issue(s) repaired`);
|
|
229
|
+
logger.summary('🔧 Repairs applied');
|
|
230
|
+
// If there are bridge issues, indicate to use update
|
|
231
|
+
const bridgeIssues = issues.filter((i) => i.type === 'missing_bridge' || i.type === 'outdated_bridge');
|
|
232
|
+
if (bridgeIssues.length > 0) {
|
|
233
|
+
logger.log('\n💡 To update bridge files, run `agent-ctx update`.');
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
else if (fixableIssues.length > 0) {
|
|
237
|
+
logger.log('\n💡 Run `agent-ctx doctor --fix` to repair structure and skills.');
|
|
156
238
|
}
|
|
157
239
|
else if (issues.length > 0) {
|
|
158
|
-
logger.log('\n💡
|
|
240
|
+
logger.log('\n💡 Run `agent-ctx update` to manage bridge files.');
|
|
159
241
|
}
|
|
160
242
|
}
|
|
161
243
|
catch (error) {
|
|
162
|
-
failSpinner('Error
|
|
244
|
+
failSpinner('Error during diagnostics');
|
|
163
245
|
const message = error instanceof Error ? error.message : String(error);
|
|
164
246
|
logger.error(message);
|
|
165
247
|
process.exit(1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAE9C,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAClG,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/init.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* Command: init
|
|
3
|
+
* Initializes .context structure and bridge files
|
|
4
4
|
*/
|
|
5
5
|
export interface InitOptions {
|
|
6
6
|
yes?: boolean;
|
|
@@ -8,7 +8,7 @@ export interface InitOptions {
|
|
|
8
8
|
dryRun?: boolean;
|
|
9
9
|
}
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
11
|
+
* Executes the init command
|
|
12
12
|
*/
|
|
13
13
|
export declare function initCommand(directory: string, options: InitOptions): Promise<void>;
|
|
14
14
|
//# sourceMappingURL=init.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA0BH,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA+QxF"}
|
package/dist/commands/init.js
CHANGED
|
@@ -1,29 +1,32 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* Command: init
|
|
3
|
+
* Initializes .context structure and bridge files
|
|
4
4
|
*/
|
|
5
5
|
import { join } from 'path';
|
|
6
6
|
import inquirer from 'inquirer';
|
|
7
7
|
import chalk from 'chalk';
|
|
8
8
|
import { logger, startSpinner, succeedSpinner, failSpinner } from '../lib/logger.js';
|
|
9
9
|
import { resolveDirectory, validateNotRoot, ensureDir, writeFile } from '../lib/utils.js';
|
|
10
|
-
import { copyTemplate, TEMPLATE_MAPPINGS, BASE_SKILLS, MEMORY_BANK, BOOTSTRAP_TEMPLATE } from '../lib/templates.js';
|
|
10
|
+
import { copyTemplate, TEMPLATE_MAPPINGS, BASE_SKILLS, MEMORY_BANK, BOOTSTRAP_TEMPLATE, } from '../lib/templates.js';
|
|
11
11
|
import { BRIDGE_FILES } from '../lib/bridges.js';
|
|
12
12
|
import { setLanguage, LANGUAGES, t } from '../lib/i18n.js';
|
|
13
|
-
import { loadConfig, hasConfig } from '../lib/config.js';
|
|
13
|
+
import { loadConfig, hasConfig, saveConfig, getCliVersion, EDITOR_MAP, } from '../lib/config.js';
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
15
|
+
* Executes the init command
|
|
16
16
|
*/
|
|
17
17
|
export async function initCommand(directory, options) {
|
|
18
18
|
try {
|
|
19
19
|
const targetDir = resolveDirectory(directory);
|
|
20
20
|
validateNotRoot(targetDir);
|
|
21
21
|
const { yes = false, force = false, dryRun = false } = options;
|
|
22
|
-
//
|
|
23
|
-
const
|
|
22
|
+
// Load existing configuration
|
|
23
|
+
const existingConfig = loadConfig(targetDir);
|
|
24
24
|
const hasExistingConfig = hasConfig(targetDir);
|
|
25
|
-
//
|
|
26
|
-
|
|
25
|
+
// Track what we install for the final config
|
|
26
|
+
const installedSkills = [];
|
|
27
|
+
const installedRules = [];
|
|
28
|
+
// Determine language (before anything else)
|
|
29
|
+
let selectedLanguage = existingConfig.language || 'en'; // Default: Config or English
|
|
27
30
|
if (!yes && !dryRun && !hasExistingConfig) {
|
|
28
31
|
const langAnswer = await inquirer.prompt([
|
|
29
32
|
{
|
|
@@ -32,10 +35,10 @@ export async function initCommand(directory, options) {
|
|
|
32
35
|
message: t('prompt.selectLanguage'),
|
|
33
36
|
choices: Object.entries(LANGUAGES).map(([code, name]) => ({
|
|
34
37
|
name: name,
|
|
35
|
-
value: code
|
|
38
|
+
value: code,
|
|
36
39
|
})),
|
|
37
|
-
default: 'en'
|
|
38
|
-
}
|
|
40
|
+
default: 'en',
|
|
41
|
+
},
|
|
39
42
|
]);
|
|
40
43
|
selectedLanguage = langAnswer.language;
|
|
41
44
|
}
|
|
@@ -57,7 +60,7 @@ export async function initCommand(directory, options) {
|
|
|
57
60
|
if (hasExistingConfig) {
|
|
58
61
|
logger.log(chalk.cyan(`📄 Config loaded from .agent-ctx.json`));
|
|
59
62
|
}
|
|
60
|
-
//
|
|
63
|
+
// Determine initialization type
|
|
61
64
|
let initType = 'quick';
|
|
62
65
|
let selectedEditors = [];
|
|
63
66
|
if (!yes && !dryRun) {
|
|
@@ -68,13 +71,13 @@ export async function initCommand(directory, options) {
|
|
|
68
71
|
message: t('prompt.selectInitType'),
|
|
69
72
|
choices: [
|
|
70
73
|
{ name: t('init.quickStart'), value: 'quick' },
|
|
71
|
-
{ name: t('init.customBridges'), value: 'custom' }
|
|
74
|
+
{ name: t('init.customBridges'), value: 'custom' },
|
|
72
75
|
],
|
|
73
|
-
default: 'quick'
|
|
74
|
-
}
|
|
76
|
+
default: 'quick',
|
|
77
|
+
},
|
|
75
78
|
]);
|
|
76
79
|
initType = initTypeAnswer.initType;
|
|
77
|
-
//
|
|
80
|
+
// Only show bridge selection if custom mode is chosen
|
|
78
81
|
if (initType === 'custom') {
|
|
79
82
|
logger.log('');
|
|
80
83
|
logger.warning(t('init.bridgesNotNeeded'));
|
|
@@ -87,15 +90,17 @@ export async function initCommand(directory, options) {
|
|
|
87
90
|
choices: Object.entries(BRIDGE_FILES).map(([file, configBridge]) => ({
|
|
88
91
|
name: configBridge.name,
|
|
89
92
|
value: file,
|
|
90
|
-
checked:
|
|
91
|
-
|
|
92
|
-
|
|
93
|
+
checked: existingConfig.editors.includes(configBridge.name) ||
|
|
94
|
+
existingConfig.editors.includes(file) ||
|
|
95
|
+
existingConfig.editors.length === 0,
|
|
96
|
+
})),
|
|
97
|
+
},
|
|
93
98
|
]);
|
|
94
99
|
selectedEditors = answers.editors;
|
|
95
100
|
}
|
|
96
101
|
}
|
|
97
|
-
//
|
|
98
|
-
//
|
|
102
|
+
// Ask about AI Bootstrap Prompt (if not dry-run and interactive)
|
|
103
|
+
// In 'quick' mode with --yes, we assume TRUE by default (to help the user)
|
|
99
104
|
let createBootstrap = initType === 'quick';
|
|
100
105
|
if (!yes && !dryRun) {
|
|
101
106
|
const bootstrapAnswer = await inquirer.prompt([
|
|
@@ -103,19 +108,19 @@ export async function initCommand(directory, options) {
|
|
|
103
108
|
type: 'confirm',
|
|
104
109
|
name: 'createBootstrap',
|
|
105
110
|
message: t('prompt.bootstrap'),
|
|
106
|
-
default: true
|
|
107
|
-
}
|
|
111
|
+
default: true,
|
|
112
|
+
},
|
|
108
113
|
]);
|
|
109
114
|
createBootstrap = bootstrapAnswer.createBootstrap;
|
|
110
115
|
}
|
|
111
|
-
// 1.
|
|
116
|
+
// 1. Create .context structure
|
|
112
117
|
startSpinner(t('spinner.creatingContext'));
|
|
113
118
|
const contextDir = join(targetDir, '.context');
|
|
114
119
|
const subDirs = ['rules', 'skills', 'docs', 'mcp', 'memory'];
|
|
115
|
-
ensureDir(contextDir, { dryRun, silent: true, backup:
|
|
120
|
+
ensureDir(contextDir, { dryRun, silent: true, backup: existingConfig.backups });
|
|
116
121
|
for (const subDir of subDirs) {
|
|
117
122
|
const subPath = join(contextDir, subDir);
|
|
118
|
-
ensureDir(subPath, { dryRun, silent: true, backup:
|
|
123
|
+
ensureDir(subPath, { dryRun, silent: true, backup: existingConfig.backups });
|
|
119
124
|
}
|
|
120
125
|
succeedSpinner(t('spinner.contextCreated'));
|
|
121
126
|
// 2. Copiar templates
|
|
@@ -124,46 +129,100 @@ export async function initCommand(directory, options) {
|
|
|
124
129
|
const destPath = templateConfig.isRoot
|
|
125
130
|
? join(targetDir, templateConfig.dest)
|
|
126
131
|
: join(targetDir, templateConfig.dest);
|
|
127
|
-
copyTemplate(templateName, destPath, {
|
|
132
|
+
copyTemplate(templateName, destPath, {
|
|
133
|
+
force,
|
|
134
|
+
dryRun,
|
|
135
|
+
silent: true,
|
|
136
|
+
backup: existingConfig.backups,
|
|
137
|
+
});
|
|
138
|
+
// Track installed rules
|
|
139
|
+
if (templateName.startsWith('rules/')) {
|
|
140
|
+
installedRules.push(templateName);
|
|
141
|
+
}
|
|
128
142
|
}
|
|
129
143
|
succeedSpinner(t('spinner.templatesCopied'));
|
|
130
|
-
// 2.5.
|
|
144
|
+
// 2.5. Install BASE_SKILLS (fundamental skills with folder structure)
|
|
131
145
|
startSpinner('Installing base skills...');
|
|
132
146
|
for (const [templateName, skillConfig] of Object.entries(BASE_SKILLS)) {
|
|
133
147
|
const destPath = join(targetDir, skillConfig.dest);
|
|
134
|
-
copyTemplate(templateName, destPath, {
|
|
148
|
+
copyTemplate(templateName, destPath, {
|
|
149
|
+
force,
|
|
150
|
+
dryRun,
|
|
151
|
+
silent: true,
|
|
152
|
+
backup: existingConfig.backups,
|
|
153
|
+
});
|
|
154
|
+
installedSkills.push(templateName);
|
|
135
155
|
}
|
|
136
156
|
succeedSpinner(`Base skills installed (${Object.keys(BASE_SKILLS).length} skills)`);
|
|
137
|
-
// 2.6.
|
|
157
|
+
// 2.6. Install Memory Bank (context persistence)
|
|
138
158
|
startSpinner('Installing Memory Bank...');
|
|
139
159
|
for (const [templateName, memConfig] of Object.entries(MEMORY_BANK)) {
|
|
140
160
|
const destPath = join(targetDir, memConfig.dest);
|
|
141
|
-
copyTemplate(templateName, destPath, {
|
|
161
|
+
copyTemplate(templateName, destPath, {
|
|
162
|
+
force,
|
|
163
|
+
dryRun,
|
|
164
|
+
silent: true,
|
|
165
|
+
backup: existingConfig.backups,
|
|
166
|
+
});
|
|
142
167
|
}
|
|
143
168
|
succeedSpinner(`Memory Bank installed (${Object.keys(MEMORY_BANK).length} files)`);
|
|
144
|
-
// 3.
|
|
169
|
+
// 3. Create bridge files (only if custom mode was chosen)
|
|
145
170
|
if (initType === 'custom' && selectedEditors.length > 0) {
|
|
146
171
|
startSpinner(t('spinner.generatingBridges'));
|
|
147
172
|
for (const [file, bridgeConfig] of Object.entries(BRIDGE_FILES)) {
|
|
148
173
|
if (!selectedEditors.includes(file))
|
|
149
174
|
continue;
|
|
150
|
-
//
|
|
175
|
+
// Create directory if needed
|
|
151
176
|
if (bridgeConfig.needsDir) {
|
|
152
|
-
ensureDir(join(targetDir, bridgeConfig.needsDir), {
|
|
177
|
+
ensureDir(join(targetDir, bridgeConfig.needsDir), {
|
|
178
|
+
dryRun,
|
|
179
|
+
silent: true,
|
|
180
|
+
backup: existingConfig.backups,
|
|
181
|
+
});
|
|
153
182
|
}
|
|
154
183
|
const filePath = join(targetDir, file);
|
|
155
184
|
const content = bridgeConfig.generator();
|
|
156
|
-
writeFile(filePath, content, {
|
|
185
|
+
writeFile(filePath, content, {
|
|
186
|
+
force,
|
|
187
|
+
dryRun,
|
|
188
|
+
silent: true,
|
|
189
|
+
backup: existingConfig.backups,
|
|
190
|
+
});
|
|
157
191
|
}
|
|
158
192
|
succeedSpinner(t('spinner.bridgesGenerated', { count: selectedEditors.length }));
|
|
159
193
|
}
|
|
160
|
-
// 4.
|
|
194
|
+
// 4. Create AI Bootstrap Prompt (if requested)
|
|
161
195
|
if (createBootstrap) {
|
|
162
196
|
const destPath = join(targetDir, BOOTSTRAP_TEMPLATE.dest);
|
|
163
|
-
copyTemplate('base/_bootstrap.md', destPath, {
|
|
197
|
+
copyTemplate('base/_bootstrap.md', destPath, {
|
|
198
|
+
force,
|
|
199
|
+
dryRun,
|
|
200
|
+
silent: true,
|
|
201
|
+
backup: existingConfig.backups,
|
|
202
|
+
});
|
|
164
203
|
logger.log('');
|
|
165
204
|
logger.success(t('init.bootstrapGenerated'));
|
|
166
205
|
}
|
|
206
|
+
// 5. Save configuration (.agent-ctx.json)
|
|
207
|
+
if (!dryRun) {
|
|
208
|
+
// Convert bridge file paths to editor IDs
|
|
209
|
+
const editorIds = selectedEditors
|
|
210
|
+
.map((file) => EDITOR_MAP[file] || file)
|
|
211
|
+
.filter((id, index, self) => self.indexOf(id) === index); // deduplicate
|
|
212
|
+
const newConfig = {
|
|
213
|
+
version: getCliVersion(),
|
|
214
|
+
editors: editorIds,
|
|
215
|
+
language: selectedLanguage,
|
|
216
|
+
backups: existingConfig.backups,
|
|
217
|
+
customTemplates: existingConfig.customTemplates,
|
|
218
|
+
skills: [...new Set([...existingConfig.skills, ...installedSkills])],
|
|
219
|
+
rules: [...new Set([...existingConfig.rules, ...installedRules])],
|
|
220
|
+
mcps: existingConfig.mcps,
|
|
221
|
+
};
|
|
222
|
+
saveConfig(targetDir, newConfig);
|
|
223
|
+
logger.log('');
|
|
224
|
+
logger.success('Configuration saved to .agent-ctx.json');
|
|
225
|
+
}
|
|
167
226
|
// Resumen final
|
|
168
227
|
if (dryRun) {
|
|
169
228
|
logger.summary(t('summary.simulationComplete'), false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC1F,OAAO,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|