agent-ctx 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +133 -0
  3. package/dist/bin/agent-ctx.d.ts +7 -0
  4. package/dist/bin/agent-ctx.d.ts.map +1 -0
  5. package/dist/bin/agent-ctx.js +8 -0
  6. package/dist/bin/agent-ctx.js.map +1 -0
  7. package/dist/bin/agentrc.d.ts +7 -0
  8. package/dist/bin/agentrc.d.ts.map +1 -0
  9. package/dist/bin/agentrc.js +8 -0
  10. package/dist/bin/agentrc.js.map +1 -0
  11. package/dist/commands/add.d.ts +12 -0
  12. package/dist/commands/add.d.ts.map +1 -0
  13. package/dist/commands/add.js +17 -0
  14. package/dist/commands/add.js.map +1 -0
  15. package/dist/commands/centralize.d.ts +12 -0
  16. package/dist/commands/centralize.d.ts.map +1 -0
  17. package/dist/commands/centralize.js +111 -0
  18. package/dist/commands/centralize.js.map +1 -0
  19. package/dist/commands/clean.d.ts +13 -0
  20. package/dist/commands/clean.d.ts.map +1 -0
  21. package/dist/commands/clean.js +109 -0
  22. package/dist/commands/clean.js.map +1 -0
  23. package/dist/commands/doctor.d.ts +12 -0
  24. package/dist/commands/doctor.d.ts.map +1 -0
  25. package/dist/commands/doctor.js +168 -0
  26. package/dist/commands/doctor.js.map +1 -0
  27. package/dist/commands/init.d.ts +14 -0
  28. package/dist/commands/init.d.ts.map +1 -0
  29. package/dist/commands/init.js +189 -0
  30. package/dist/commands/init.js.map +1 -0
  31. package/dist/commands/update.d.ts +13 -0
  32. package/dist/commands/update.d.ts.map +1 -0
  33. package/dist/commands/update.js +97 -0
  34. package/dist/commands/update.js.map +1 -0
  35. package/dist/index.d.ts +6 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +76 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/lib/bridges.d.ts +35 -0
  40. package/dist/lib/bridges.d.ts.map +1 -0
  41. package/dist/lib/bridges.js +171 -0
  42. package/dist/lib/bridges.js.map +1 -0
  43. package/dist/lib/config.d.ts +31 -0
  44. package/dist/lib/config.d.ts.map +1 -0
  45. package/dist/lib/config.js +75 -0
  46. package/dist/lib/config.js.map +1 -0
  47. package/dist/lib/i18n.d.ts +22 -0
  48. package/dist/lib/i18n.d.ts.map +1 -0
  49. package/dist/lib/i18n.js +170 -0
  50. package/dist/lib/i18n.js.map +1 -0
  51. package/dist/lib/logger.d.ts +55 -0
  52. package/dist/lib/logger.d.ts.map +1 -0
  53. package/dist/lib/logger.js +168 -0
  54. package/dist/lib/logger.js.map +1 -0
  55. package/dist/lib/templates.d.ts +46 -0
  56. package/dist/lib/templates.d.ts.map +1 -0
  57. package/dist/lib/templates.js +88 -0
  58. package/dist/lib/templates.js.map +1 -0
  59. package/dist/lib/utils.d.ts +39 -0
  60. package/dist/lib/utils.d.ts.map +1 -0
  61. package/dist/lib/utils.js +127 -0
  62. package/dist/lib/utils.js.map +1 -0
  63. package/dist/lib/wizard.d.ts +22 -0
  64. package/dist/lib/wizard.d.ts.map +1 -0
  65. package/dist/lib/wizard.js +197 -0
  66. package/dist/lib/wizard.js.map +1 -0
  67. package/package.json +63 -0
  68. package/src/templates/en/base/_agents.md +62 -0
  69. package/src/templates/en/base/_architecture.md +90 -0
  70. package/src/templates/en/base/_bootstrap.md +89 -0
  71. package/src/templates/en/base/_doc.md +65 -0
  72. package/src/templates/en/base/_mcp.md +81 -0
  73. package/src/templates/en/base/_project_state.md +48 -0
  74. package/src/templates/en/base/_rule.md +56 -0
  75. package/src/templates/en/base/_skill.md +60 -0
  76. package/src/templates/en/docs/doc-readme.md +43 -0
  77. package/src/templates/en/docs/mcp-readme.md +21 -0
  78. package/src/templates/en/memory/active_context.md +38 -0
  79. package/src/templates/en/memory/progress.md +35 -0
  80. package/src/templates/en/memory/project_brief.md +34 -0
  81. package/src/templates/en/memory/tech_context.md +44 -0
  82. package/src/templates/en/rules/rule-coding-standards.md +22 -0
  83. package/src/templates/en/skills/skill-agents.md +74 -0
  84. package/src/templates/en/skills/skill-api.md +117 -0
  85. package/src/templates/en/skills/skill-architecture.md +87 -0
  86. package/src/templates/en/skills/skill-generating.md +116 -0
  87. package/src/templates/en/skills/skill-git.md +109 -0
  88. package/src/templates/en/skills/skill-project-state.md +99 -0
  89. package/src/templates/en/skills/skill-react.md +94 -0
  90. package/src/templates/en/skills/skill-rules.md +100 -0
  91. package/src/templates/en/skills/skill-testing.md +139 -0
  92. package/src/templates/es/base/_agents.md +62 -0
  93. package/src/templates/es/base/_architecture.md +90 -0
  94. package/src/templates/es/base/_bootstrap.md +89 -0
  95. package/src/templates/es/base/_doc.md +65 -0
  96. package/src/templates/es/base/_mcp.md +81 -0
  97. package/src/templates/es/base/_project_state.md +48 -0
  98. package/src/templates/es/base/_rule.md +56 -0
  99. package/src/templates/es/base/_skill.md +60 -0
  100. package/src/templates/es/docs/doc-readme.md +43 -0
  101. package/src/templates/es/docs/mcp-readme.md +21 -0
  102. package/src/templates/es/memory/active_context.md +38 -0
  103. package/src/templates/es/memory/progress.md +35 -0
  104. package/src/templates/es/memory/project_brief.md +34 -0
  105. package/src/templates/es/memory/tech_context.md +44 -0
  106. package/src/templates/es/rules/rule-coding-standards.md +22 -0
  107. package/src/templates/es/skills/skill-agents.md +74 -0
  108. package/src/templates/es/skills/skill-api.md +117 -0
  109. package/src/templates/es/skills/skill-architecture.md +87 -0
  110. package/src/templates/es/skills/skill-generating.md +116 -0
  111. package/src/templates/es/skills/skill-git.md +108 -0
  112. package/src/templates/es/skills/skill-project-state.md +99 -0
  113. package/src/templates/es/skills/skill-react.md +94 -0
  114. package/src/templates/es/skills/skill-rules.md +100 -0
  115. package/src/templates/es/skills/skill-testing.md +139 -0
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Comando: doctor
3
+ * Verifica integridad de .context y archivos puente, ofrece reparaciones
4
+ */
5
+ import { join } from 'path';
6
+ import { existsSync, readFileSync } from 'fs';
7
+ import { logger, startSpinner, succeedSpinner, warnSpinner, failSpinner } from '../lib/logger.js';
8
+ import { resolveDirectory, validateNotRoot, ensureDir, writeFile } from '../lib/utils.js';
9
+ import { BRIDGE_FILES } from '../lib/bridges.js';
10
+ /**
11
+ * Ejecuta el comando doctor
12
+ */
13
+ export async function doctorCommand(directory, options) {
14
+ try {
15
+ const targetDir = resolveDirectory(directory);
16
+ validateNotRoot(targetDir);
17
+ const { fix = false } = options;
18
+ // Header
19
+ logger.header('🩺 Diagnóstico del proyecto');
20
+ logger.log(`\n📁 Directorio: ${targetDir}`);
21
+ if (fix) {
22
+ logger.log('🔧 Modo FIX: reparará problemas automáticamente');
23
+ }
24
+ const issues = [];
25
+ const contextDir = join(targetDir, '.context');
26
+ // 1. Verificar estructura .context
27
+ const spinner1 = startSpinner('Verificando estructura .context/...');
28
+ const requiredDirs = [
29
+ { path: '.context', name: '.context/' },
30
+ { path: '.context/rules', name: '.context/rules/' },
31
+ { path: '.context/skills', name: '.context/skills/' },
32
+ { path: '.context/docs', name: '.context/docs/' },
33
+ { path: '.context/mcp', name: '.context/mcp/' }
34
+ ];
35
+ let dirIssues = 0;
36
+ for (const dir of requiredDirs) {
37
+ const fullPath = join(targetDir, dir.path);
38
+ if (!existsSync(fullPath)) {
39
+ dirIssues++;
40
+ issues.push({
41
+ type: 'missing_dir',
42
+ path: fullPath,
43
+ name: dir.name
44
+ });
45
+ }
46
+ }
47
+ if (dirIssues === 0) {
48
+ succeedSpinner('Estructura .context/ completa');
49
+ }
50
+ else {
51
+ warnSpinner(`Faltan ${dirIssues} directorio(s) en .context/`);
52
+ }
53
+ // 2. Verificar archivos de contexto
54
+ const spinner2 = startSpinner('Verificando archivos de contexto...');
55
+ const requiredFiles = [
56
+ { path: 'AGENTS.md', name: 'AGENTS.md' },
57
+ { path: '.context/architecture.md', name: 'architecture.md' },
58
+ { path: '.context/project_state.md', name: 'project_state.md' },
59
+ { path: '.context/rules/coding-standards.md', name: 'coding-standards.md' }
60
+ ];
61
+ let fileIssues = 0;
62
+ for (const file of requiredFiles) {
63
+ const fullPath = join(targetDir, file.path);
64
+ if (!existsSync(fullPath)) {
65
+ fileIssues++;
66
+ issues.push({
67
+ type: 'missing_file',
68
+ path: fullPath,
69
+ name: file.name,
70
+ optional: true
71
+ });
72
+ }
73
+ }
74
+ if (fileIssues === 0) {
75
+ succeedSpinner('Archivos de contexto completos');
76
+ }
77
+ else {
78
+ warnSpinner(`Faltan ${fileIssues} archivo(s) de contexto (opcionales)`);
79
+ }
80
+ // 3. Verificar archivos puente
81
+ const spinner3 = startSpinner('Verificando archivos puente...');
82
+ let bridgeOk = 0;
83
+ let bridgeMissing = 0;
84
+ let bridgeOutdated = 0;
85
+ for (const [file, config] of Object.entries(BRIDGE_FILES)) {
86
+ const fullPath = join(targetDir, file);
87
+ if (existsSync(fullPath)) {
88
+ // Verificar que contenga referencias a .context
89
+ const content = readFileSync(fullPath, 'utf-8');
90
+ if (content.includes('.context') || content.includes('AGENTS.md')) {
91
+ bridgeOk++;
92
+ }
93
+ else {
94
+ bridgeOutdated++;
95
+ issues.push({
96
+ type: 'outdated_bridge',
97
+ path: fullPath,
98
+ name: file,
99
+ config
100
+ });
101
+ }
102
+ }
103
+ else {
104
+ bridgeMissing++;
105
+ issues.push({
106
+ type: 'missing_bridge',
107
+ path: fullPath,
108
+ name: file,
109
+ config
110
+ });
111
+ }
112
+ }
113
+ if (bridgeMissing === 0 && bridgeOutdated === 0) {
114
+ succeedSpinner(`${bridgeOk} archivos puente configurados`);
115
+ }
116
+ else {
117
+ warnSpinner(`${bridgeOk} OK, ${bridgeMissing} faltan, ${bridgeOutdated} desactualizados`);
118
+ }
119
+ // Resumen
120
+ 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');
123
+ if (issues.length === 0) {
124
+ logger.summary('✅ ¡Todo en orden!');
125
+ logger.log('\nTu proyecto está correctamente configurado.');
126
+ return;
127
+ }
128
+ logger.log(`\n📊 Resumen:`);
129
+ logger.log(` - Problemas críticos: ${criticalIssues.length}`);
130
+ logger.log(` - Problemas menores/opcionales: ${optionalIssues.length}`);
131
+ // Reparar si se solicitó
132
+ if (fix && issues.length > 0) {
133
+ const fixSpinner = startSpinner('Aplicando reparaciones...');
134
+ let fixed = 0;
135
+ for (const issue of issues) {
136
+ switch (issue.type) {
137
+ case 'missing_dir':
138
+ ensureDir(issue.path, { dryRun: false });
139
+ fixed++;
140
+ break;
141
+ case 'outdated_bridge':
142
+ case 'missing_bridge':
143
+ if (issue.config) {
144
+ if (issue.config.needsDir) {
145
+ ensureDir(join(targetDir, issue.config.needsDir), { dryRun: false });
146
+ }
147
+ const content = issue.config.generator();
148
+ writeFile(issue.path, content, { force: true, dryRun: false });
149
+ fixed++;
150
+ }
151
+ break;
152
+ }
153
+ }
154
+ succeedSpinner(`${fixed} problema(s) reparado(s)`);
155
+ logger.summary('🔧 Reparaciones aplicadas');
156
+ }
157
+ else if (issues.length > 0) {
158
+ logger.log('\n💡 Ejecuta `agent-ctx doctor --fix` para reparar automáticamente.');
159
+ }
160
+ }
161
+ catch (error) {
162
+ failSpinner('Error durante diagnóstico');
163
+ const message = error instanceof Error ? error.message : String(error);
164
+ logger.error(message);
165
+ process.exit(1);
166
+ }
167
+ }
168
+ //# 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,14 @@
1
+ /**
2
+ * Comando: init
3
+ * Inicializa la estructura .context y archivos puente
4
+ */
5
+ export interface InitOptions {
6
+ yes?: boolean;
7
+ force?: boolean;
8
+ dryRun?: boolean;
9
+ }
10
+ /**
11
+ * Ejecuta el comando init
12
+ */
13
+ export declare function initCommand(directory: string, options: InitOptions): Promise<void>;
14
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,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+MxF"}
@@ -0,0 +1,189 @@
1
+ /**
2
+ * Comando: init
3
+ * Inicializa la estructura .context y archivos puente
4
+ */
5
+ import { join } from 'path';
6
+ import inquirer from 'inquirer';
7
+ import chalk from 'chalk';
8
+ import { logger, startSpinner, succeedSpinner, failSpinner } from '../lib/logger.js';
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';
11
+ import { BRIDGE_FILES } from '../lib/bridges.js';
12
+ import { setLanguage, LANGUAGES, t } from '../lib/i18n.js';
13
+ import { loadConfig, hasConfig } from '../lib/config.js';
14
+ /**
15
+ * Ejecuta el comando init
16
+ */
17
+ export async function initCommand(directory, options) {
18
+ try {
19
+ const targetDir = resolveDirectory(directory);
20
+ validateNotRoot(targetDir);
21
+ const { yes = false, force = false, dryRun = false } = options;
22
+ // Cargar configuración existente
23
+ const config = loadConfig(targetDir);
24
+ const hasExistingConfig = hasConfig(targetDir);
25
+ // Determinar idioma (antes de cualquier otra cosa)
26
+ let selectedLanguage = config.language || 'en'; // Default: Config or English
27
+ if (!yes && !dryRun && !hasExistingConfig) {
28
+ const langAnswer = await inquirer.prompt([
29
+ {
30
+ type: 'list',
31
+ name: 'language',
32
+ message: t('prompt.selectLanguage'),
33
+ choices: Object.entries(LANGUAGES).map(([code, name]) => ({
34
+ name: name,
35
+ value: code
36
+ })),
37
+ default: 'en'
38
+ }
39
+ ]);
40
+ selectedLanguage = langAnswer.language;
41
+ }
42
+ setLanguage(selectedLanguage);
43
+ // Clear and show header
44
+ logger.clear();
45
+ logger.logo();
46
+ logger.header(t('init.header'));
47
+ logger.log(`\n${t('init.targetDir')} ${chalk.gray(targetDir)}\n`);
48
+ if (force) {
49
+ logger.warning(t('init.modeForce'));
50
+ }
51
+ if (yes) {
52
+ logger.log(t('init.modeNonInteractive'));
53
+ }
54
+ if (dryRun) {
55
+ logger.log(t('init.modeDryRun'));
56
+ }
57
+ if (hasExistingConfig) {
58
+ logger.log(chalk.cyan(`📄 Config loaded from .agent-ctx.json`));
59
+ }
60
+ // Determinar tipo de inicialización
61
+ let initType = 'quick';
62
+ let selectedEditors = [];
63
+ if (!yes && !dryRun) {
64
+ const initTypeAnswer = await inquirer.prompt([
65
+ {
66
+ type: 'list',
67
+ name: 'initType',
68
+ message: t('prompt.selectInitType'),
69
+ choices: [
70
+ { name: t('init.quickStart'), value: 'quick' },
71
+ { name: t('init.customBridges'), value: 'custom' }
72
+ ],
73
+ default: 'quick'
74
+ }
75
+ ]);
76
+ initType = initTypeAnswer.initType;
77
+ // Solo mostrar selección de bridges si elige personalizado
78
+ if (initType === 'custom') {
79
+ logger.log('');
80
+ logger.warning(t('init.bridgesNotNeeded'));
81
+ logger.log('');
82
+ const answers = await inquirer.prompt([
83
+ {
84
+ type: 'checkbox',
85
+ name: 'editors',
86
+ message: t('prompt.selectEditors'),
87
+ choices: Object.entries(BRIDGE_FILES).map(([file, configBridge]) => ({
88
+ name: configBridge.name,
89
+ value: file,
90
+ checked: config.editors.includes(configBridge.name) || config.editors.includes(file) || config.editors.length === 0
91
+ }))
92
+ }
93
+ ]);
94
+ selectedEditors = answers.editors;
95
+ }
96
+ }
97
+ // Preguntar por AI Bootstrap Prompt (si no es dry-run y interactivo)
98
+ // En modo 'quick' con --yes, asumimos TRUE por defecto (para ayudar al usuario)
99
+ let createBootstrap = initType === 'quick';
100
+ if (!yes && !dryRun) {
101
+ const bootstrapAnswer = await inquirer.prompt([
102
+ {
103
+ type: 'confirm',
104
+ name: 'createBootstrap',
105
+ message: t('prompt.bootstrap'),
106
+ default: true
107
+ }
108
+ ]);
109
+ createBootstrap = bootstrapAnswer.createBootstrap;
110
+ }
111
+ // 1. Crear estructura .context
112
+ startSpinner(t('spinner.creatingContext'));
113
+ const contextDir = join(targetDir, '.context');
114
+ const subDirs = ['rules', 'skills', 'docs', 'mcp', 'memory'];
115
+ ensureDir(contextDir, { dryRun, silent: true, backup: config.backups });
116
+ for (const subDir of subDirs) {
117
+ const subPath = join(contextDir, subDir);
118
+ ensureDir(subPath, { dryRun, silent: true, backup: config.backups });
119
+ }
120
+ succeedSpinner(t('spinner.contextCreated'));
121
+ // 2. Copiar templates
122
+ startSpinner(t('spinner.copyingTemplates'));
123
+ for (const [templateName, templateConfig] of Object.entries(TEMPLATE_MAPPINGS)) {
124
+ const destPath = templateConfig.isRoot
125
+ ? join(targetDir, templateConfig.dest)
126
+ : join(targetDir, templateConfig.dest);
127
+ copyTemplate(templateName, destPath, { force, dryRun, silent: true, backup: config.backups });
128
+ }
129
+ succeedSpinner(t('spinner.templatesCopied'));
130
+ // 2.5. Instalar BASE_SKILLS (skills fundamentales con estructura de carpetas)
131
+ startSpinner('Installing base skills...');
132
+ for (const [templateName, skillConfig] of Object.entries(BASE_SKILLS)) {
133
+ const destPath = join(targetDir, skillConfig.dest);
134
+ copyTemplate(templateName, destPath, { force, dryRun, silent: true, backup: config.backups });
135
+ }
136
+ succeedSpinner(`Base skills installed (${Object.keys(BASE_SKILLS).length} skills)`);
137
+ // 2.6. Instalar Memory Bank (persistencia de contexto)
138
+ startSpinner('Installing Memory Bank...');
139
+ for (const [templateName, memConfig] of Object.entries(MEMORY_BANK)) {
140
+ const destPath = join(targetDir, memConfig.dest);
141
+ copyTemplate(templateName, destPath, { force, dryRun, silent: true, backup: config.backups });
142
+ }
143
+ succeedSpinner(`Memory Bank installed (${Object.keys(MEMORY_BANK).length} files)`);
144
+ // 3. Crear archivos puente (solo si se eligió modo personalizado)
145
+ if (initType === 'custom' && selectedEditors.length > 0) {
146
+ startSpinner(t('spinner.generatingBridges'));
147
+ for (const [file, bridgeConfig] of Object.entries(BRIDGE_FILES)) {
148
+ if (!selectedEditors.includes(file))
149
+ continue;
150
+ // Crear directorio si es necesario
151
+ if (bridgeConfig.needsDir) {
152
+ ensureDir(join(targetDir, bridgeConfig.needsDir), { dryRun, silent: true, backup: config.backups });
153
+ }
154
+ const filePath = join(targetDir, file);
155
+ const content = bridgeConfig.generator();
156
+ writeFile(filePath, content, { force, dryRun, silent: true, backup: config.backups });
157
+ }
158
+ succeedSpinner(t('spinner.bridgesGenerated', { count: selectedEditors.length }));
159
+ }
160
+ // 4. Crear AI Bootstrap Prompt (si se solicitó)
161
+ if (createBootstrap) {
162
+ const destPath = join(targetDir, BOOTSTRAP_TEMPLATE.dest);
163
+ copyTemplate('base/_bootstrap.md', destPath, { force, dryRun, silent: true, backup: config.backups });
164
+ logger.log('');
165
+ logger.success(t('init.bootstrapGenerated'));
166
+ }
167
+ // Resumen final
168
+ if (dryRun) {
169
+ logger.summary(t('summary.simulationComplete'), false);
170
+ logger.log(`\n${t('summary.runWithoutDryRun')}\n`);
171
+ }
172
+ else {
173
+ logger.summary(t('summary.initComplete'), true);
174
+ logger.log(`\n${t('summary.projectConfigured')} ${chalk.green(targetDir)}\n`);
175
+ logger.log(t('summary.nextSteps'));
176
+ logger.item(t('summary.step1'));
177
+ logger.item(t('summary.step2'));
178
+ logger.item(t('summary.step3'));
179
+ logger.log('');
180
+ }
181
+ }
182
+ catch (error) {
183
+ failSpinner(t('error.initFailed'));
184
+ const message = error instanceof Error ? error.message : String(error);
185
+ logger.error(message);
186
+ process.exit(1);
187
+ }
188
+ }
189
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Comando: update
3
+ * Regenera archivos puente sin tocar .context/
4
+ */
5
+ export interface UpdateOptions {
6
+ yes?: boolean;
7
+ force?: boolean;
8
+ }
9
+ /**
10
+ * Ejecuta el comando update
11
+ */
12
+ export declare function updateCommand(directory: string, options: UpdateOptions): Promise<void>;
13
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAgG5F"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Comando: update
3
+ * Regenera archivos puente sin tocar .context/
4
+ */
5
+ import { join } from 'path';
6
+ import { existsSync } from 'fs';
7
+ import inquirer from 'inquirer';
8
+ import { logger, startSpinner, succeedSpinner } from '../lib/logger.js';
9
+ import { resolveDirectory, validateNotRoot, ensureDir, writeFile } from '../lib/utils.js';
10
+ import { BRIDGE_FILES } from '../lib/bridges.js';
11
+ import { loadConfig } from '../lib/config.js';
12
+ /**
13
+ * Ejecuta el comando update
14
+ */
15
+ export async function updateCommand(directory, options) {
16
+ try {
17
+ const targetDir = resolveDirectory(directory);
18
+ validateNotRoot(targetDir);
19
+ const { yes, force } = options;
20
+ // Cargar configuración
21
+ const config = loadConfig(targetDir);
22
+ // Header
23
+ logger.header('🔄 Actualización de archivos puente');
24
+ logger.log(`\n📁 Directorio: ${targetDir}`);
25
+ // Determinar qué editores actualizar
26
+ let selectedEditors = Object.keys(BRIDGE_FILES);
27
+ if (!yes) {
28
+ // Mostrar cuáles existen actualmente
29
+ const existing = [];
30
+ const missing = [];
31
+ for (const [file, config] of Object.entries(BRIDGE_FILES)) {
32
+ const filePath = join(targetDir, file);
33
+ if (existsSync(filePath)) {
34
+ existing.push({ file, config });
35
+ }
36
+ else {
37
+ missing.push({ file, config });
38
+ }
39
+ }
40
+ if (existing.length > 0) {
41
+ logger.log('\n📋 Archivos puente existentes:');
42
+ for (const { file, config } of existing) {
43
+ logger.item(`✅ ${file} (${config.name})`);
44
+ }
45
+ }
46
+ if (missing.length > 0) {
47
+ logger.log('\n📋 Archivos puente faltantes:');
48
+ for (const { file, config } of missing) {
49
+ logger.item(`⚪ ${file} (${config.name})`);
50
+ }
51
+ }
52
+ const answers = await inquirer.prompt([
53
+ {
54
+ type: 'checkbox',
55
+ name: 'editors',
56
+ message: '¿Qué archivos puente quieres actualizar/crear?',
57
+ choices: Object.entries(BRIDGE_FILES).map(([file, config]) => ({
58
+ name: `${config.name} (${file})`,
59
+ value: file,
60
+ checked: existsSync(join(targetDir, file))
61
+ }))
62
+ }
63
+ ]);
64
+ selectedEditors = answers.editors;
65
+ if (selectedEditors.length === 0) {
66
+ logger.success('No se seleccionó ningún archivo. Operación cancelada.');
67
+ return;
68
+ }
69
+ }
70
+ // Actualizar archivos puente
71
+ const spinner = startSpinner('Actualizando archivos puente...');
72
+ let updated = 0;
73
+ for (const [file, configBridge] of Object.entries(BRIDGE_FILES)) {
74
+ if (!selectedEditors.includes(file))
75
+ continue;
76
+ // Crear directorio si es necesario
77
+ if (configBridge.needsDir) {
78
+ ensureDir(join(targetDir, configBridge.needsDir), { dryRun: false, backup: config.backups });
79
+ }
80
+ const filePath = join(targetDir, file);
81
+ const content = configBridge.generator();
82
+ // Usar force:true porque el usuario eligió explícitamente actualizar
83
+ writeFile(filePath, content, { force: true, dryRun: false, backup: config.backups });
84
+ updated++;
85
+ }
86
+ succeedSpinner(`${updated} archivo(s) puente actualizados`);
87
+ // Resumen
88
+ logger.summary('✨ Actualización completada');
89
+ logger.log('\nTus archivos puente ahora usan la última versión de agent-ctx.');
90
+ }
91
+ catch (error) {
92
+ const message = error instanceof Error ? error.message : String(error);
93
+ logger.error(message);
94
+ process.exit(1);
95
+ }
96
+ }
97
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * agent-ctx - CLI Principal
3
+ * Registra todos los comandos y maneja la ejecución
4
+ */
5
+ export declare function run(): void;
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAqBH,wBAAgB,GAAG,SA+DlB"}
package/dist/index.js ADDED
@@ -0,0 +1,76 @@
1
+ /**
2
+ * agent-ctx - CLI Principal
3
+ * Registra todos los comandos y maneja la ejecución
4
+ */
5
+ import { Command } from 'commander';
6
+ import { readFileSync } from 'fs';
7
+ import { fileURLToPath } from 'url';
8
+ import { dirname, join } from 'path';
9
+ import { initCommand } from './commands/init.js';
10
+ import { centralizeCommand } from './commands/centralize.js';
11
+ import { cleanCommand } from './commands/clean.js';
12
+ import { doctorCommand } from './commands/doctor.js';
13
+ import { updateCommand } from './commands/update.js';
14
+ import { addCommand } from './commands/add.js';
15
+ import { setQuietMode } from './lib/logger.js';
16
+ const __filename = fileURLToPath(import.meta.url);
17
+ const __dirname = dirname(__filename);
18
+ // Leer versión desde package.json
19
+ const pkg = JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf-8'));
20
+ export function run() {
21
+ const program = new Command();
22
+ program
23
+ .name('agent-ctx')
24
+ .description('CLI tool to initialize and manage AI agent context for your projects')
25
+ .version(pkg.version, '-v, --version', 'Show version number')
26
+ .option('-q, --quiet', 'Suppress non-essential output')
27
+ .hook('preAction', (thisCommand) => {
28
+ const opts = thisCommand.opts();
29
+ if (opts.quiet) {
30
+ setQuietMode(true);
31
+ }
32
+ });
33
+ // Comando: init
34
+ program
35
+ .command('init [directory]')
36
+ .description('Initialize .context structure and bridge files')
37
+ .option('-y, --yes', 'Non-interactive mode (accept all defaults)')
38
+ .option('-f, --force', 'Overwrite existing files')
39
+ .option('--dry-run', 'Show what would be done without executing')
40
+ .action(initCommand);
41
+ // Comando: centralize
42
+ program
43
+ .command('centralize [directory]')
44
+ .description('Find and move scattered skills to .context/skills/')
45
+ .option('--dry-run', 'Show what would be done without executing')
46
+ .action(centralizeCommand);
47
+ // Comando: clean
48
+ program
49
+ .command('clean [directory]')
50
+ .description('Remove redundant editor folders that duplicate skills/rules')
51
+ .option('-y, --yes', 'Delete without confirmation')
52
+ .option('--dry-run', 'Show what would be done without executing')
53
+ .action(cleanCommand);
54
+ // Comando: doctor
55
+ program
56
+ .command('doctor [directory]')
57
+ .description('Check integrity of .context and bridge files, offer repairs')
58
+ .option('--fix', 'Automatically fix issues found')
59
+ .action(doctorCommand);
60
+ // Comando: update
61
+ program
62
+ .command('update [directory]')
63
+ .description('Regenerate bridge files with latest templates')
64
+ .option('-y, --yes', 'Non-interactive mode (update all)')
65
+ .option('-f, --force', 'Force update even if files exist')
66
+ .action(updateCommand);
67
+ // Comando: add
68
+ program
69
+ .command('add <skill-name>')
70
+ .description('Download and install a skill from npm')
71
+ .option('-d, --directory <dir>', 'Target project directory', '.')
72
+ .action(addCommand);
73
+ // Parsear argumentos
74
+ program.parse();
75
+ }
76
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}