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.
- package/LICENSE +21 -0
- package/README.md +133 -0
- package/dist/bin/agent-ctx.d.ts +7 -0
- package/dist/bin/agent-ctx.d.ts.map +1 -0
- package/dist/bin/agent-ctx.js +8 -0
- package/dist/bin/agent-ctx.js.map +1 -0
- package/dist/bin/agentrc.d.ts +7 -0
- package/dist/bin/agentrc.d.ts.map +1 -0
- package/dist/bin/agentrc.js +8 -0
- package/dist/bin/agentrc.js.map +1 -0
- package/dist/commands/add.d.ts +12 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +17 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/centralize.d.ts +12 -0
- package/dist/commands/centralize.d.ts.map +1 -0
- package/dist/commands/centralize.js +111 -0
- package/dist/commands/centralize.js.map +1 -0
- package/dist/commands/clean.d.ts +13 -0
- package/dist/commands/clean.d.ts.map +1 -0
- package/dist/commands/clean.js +109 -0
- package/dist/commands/clean.js.map +1 -0
- package/dist/commands/doctor.d.ts +12 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +168 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/init.d.ts +14 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +189 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/update.d.ts +13 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +97 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +76 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/bridges.d.ts +35 -0
- package/dist/lib/bridges.d.ts.map +1 -0
- package/dist/lib/bridges.js +171 -0
- package/dist/lib/bridges.js.map +1 -0
- package/dist/lib/config.d.ts +31 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +75 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/i18n.d.ts +22 -0
- package/dist/lib/i18n.d.ts.map +1 -0
- package/dist/lib/i18n.js +170 -0
- package/dist/lib/i18n.js.map +1 -0
- package/dist/lib/logger.d.ts +55 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +168 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/templates.d.ts +46 -0
- package/dist/lib/templates.d.ts.map +1 -0
- package/dist/lib/templates.js +88 -0
- package/dist/lib/templates.js.map +1 -0
- package/dist/lib/utils.d.ts +39 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +127 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/lib/wizard.d.ts +22 -0
- package/dist/lib/wizard.d.ts.map +1 -0
- package/dist/lib/wizard.js +197 -0
- package/dist/lib/wizard.js.map +1 -0
- package/package.json +63 -0
- package/src/templates/en/base/_agents.md +62 -0
- package/src/templates/en/base/_architecture.md +90 -0
- package/src/templates/en/base/_bootstrap.md +89 -0
- package/src/templates/en/base/_doc.md +65 -0
- package/src/templates/en/base/_mcp.md +81 -0
- package/src/templates/en/base/_project_state.md +48 -0
- package/src/templates/en/base/_rule.md +56 -0
- package/src/templates/en/base/_skill.md +60 -0
- package/src/templates/en/docs/doc-readme.md +43 -0
- package/src/templates/en/docs/mcp-readme.md +21 -0
- package/src/templates/en/memory/active_context.md +38 -0
- package/src/templates/en/memory/progress.md +35 -0
- package/src/templates/en/memory/project_brief.md +34 -0
- package/src/templates/en/memory/tech_context.md +44 -0
- package/src/templates/en/rules/rule-coding-standards.md +22 -0
- package/src/templates/en/skills/skill-agents.md +74 -0
- package/src/templates/en/skills/skill-api.md +117 -0
- package/src/templates/en/skills/skill-architecture.md +87 -0
- package/src/templates/en/skills/skill-generating.md +116 -0
- package/src/templates/en/skills/skill-git.md +109 -0
- package/src/templates/en/skills/skill-project-state.md +99 -0
- package/src/templates/en/skills/skill-react.md +94 -0
- package/src/templates/en/skills/skill-rules.md +100 -0
- package/src/templates/en/skills/skill-testing.md +139 -0
- package/src/templates/es/base/_agents.md +62 -0
- package/src/templates/es/base/_architecture.md +90 -0
- package/src/templates/es/base/_bootstrap.md +89 -0
- package/src/templates/es/base/_doc.md +65 -0
- package/src/templates/es/base/_mcp.md +81 -0
- package/src/templates/es/base/_project_state.md +48 -0
- package/src/templates/es/base/_rule.md +56 -0
- package/src/templates/es/base/_skill.md +60 -0
- package/src/templates/es/docs/doc-readme.md +43 -0
- package/src/templates/es/docs/mcp-readme.md +21 -0
- package/src/templates/es/memory/active_context.md +38 -0
- package/src/templates/es/memory/progress.md +35 -0
- package/src/templates/es/memory/project_brief.md +34 -0
- package/src/templates/es/memory/tech_context.md +44 -0
- package/src/templates/es/rules/rule-coding-standards.md +22 -0
- package/src/templates/es/skills/skill-agents.md +74 -0
- package/src/templates/es/skills/skill-api.md +117 -0
- package/src/templates/es/skills/skill-architecture.md +87 -0
- package/src/templates/es/skills/skill-generating.md +116 -0
- package/src/templates/es/skills/skill-git.md +108 -0
- package/src/templates/es/skills/skill-project-state.md +99 -0
- package/src/templates/es/skills/skill-react.md +94 -0
- package/src/templates/es/skills/skill-rules.md +100 -0
- package/src/templates/es/skills/skill-testing.md +139 -0
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logger - Utilidades de output con colores y soporte quiet
|
|
3
|
+
*/
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import ora from 'ora';
|
|
6
|
+
import figlet from 'figlet';
|
|
7
|
+
// Estado global del logger
|
|
8
|
+
let quietMode = false;
|
|
9
|
+
let currentSpinner = null;
|
|
10
|
+
/**
|
|
11
|
+
* Configura el modo quiet
|
|
12
|
+
*/
|
|
13
|
+
export function setQuietMode(enabled) {
|
|
14
|
+
quietMode = enabled;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Verifica si está en modo quiet
|
|
18
|
+
*/
|
|
19
|
+
export function isQuiet() {
|
|
20
|
+
return quietMode;
|
|
21
|
+
}
|
|
22
|
+
export const logger = {
|
|
23
|
+
// === Mensajes básicos ===
|
|
24
|
+
info: (msg) => {
|
|
25
|
+
if (!quietMode)
|
|
26
|
+
console.log(chalk.blue('› ') + msg);
|
|
27
|
+
},
|
|
28
|
+
success: (msg) => {
|
|
29
|
+
if (!quietMode)
|
|
30
|
+
console.log(chalk.green('✔ ') + msg);
|
|
31
|
+
},
|
|
32
|
+
warning: (msg) => {
|
|
33
|
+
// Warnings siempre se muestran
|
|
34
|
+
console.log(chalk.yellow('⚠ ') + chalk.yellow(msg));
|
|
35
|
+
},
|
|
36
|
+
error: (msg) => {
|
|
37
|
+
// Errores siempre se muestran
|
|
38
|
+
console.log(chalk.red('✖ ') + chalk.red(msg));
|
|
39
|
+
},
|
|
40
|
+
skip: (msg) => {
|
|
41
|
+
if (!quietMode)
|
|
42
|
+
console.log(chalk.gray('› ') + chalk.gray(msg));
|
|
43
|
+
},
|
|
44
|
+
// === Dry-run ===
|
|
45
|
+
dryRun: (msg) => {
|
|
46
|
+
if (!quietMode)
|
|
47
|
+
console.log(chalk.cyan('[DRY] ') + chalk.cyan(msg));
|
|
48
|
+
},
|
|
49
|
+
// === Headers decorativos ===
|
|
50
|
+
header: (title) => {
|
|
51
|
+
if (quietMode)
|
|
52
|
+
return;
|
|
53
|
+
const line = '─'.repeat(Math.max(40, title.length + 4));
|
|
54
|
+
console.log(chalk.blue(title));
|
|
55
|
+
console.log(chalk.gray(line));
|
|
56
|
+
},
|
|
57
|
+
logo: () => {
|
|
58
|
+
if (quietMode)
|
|
59
|
+
return;
|
|
60
|
+
console.log(chalk.blue(figlet.textSync('agent-ctx', {
|
|
61
|
+
font: 'Standard',
|
|
62
|
+
horizontalLayout: 'default',
|
|
63
|
+
verticalLayout: 'default'
|
|
64
|
+
})));
|
|
65
|
+
},
|
|
66
|
+
// === Secciones ===
|
|
67
|
+
section: (title) => {
|
|
68
|
+
if (!quietMode)
|
|
69
|
+
console.log('\n' + chalk.blue(`${title}`));
|
|
70
|
+
},
|
|
71
|
+
// === Línea separadora ===
|
|
72
|
+
divider: () => {
|
|
73
|
+
if (!quietMode)
|
|
74
|
+
console.log(chalk.gray('─'.repeat(50)));
|
|
75
|
+
},
|
|
76
|
+
// === Items de lista ===
|
|
77
|
+
item: (text, indent = 1) => {
|
|
78
|
+
if (quietMode)
|
|
79
|
+
return;
|
|
80
|
+
const padding = ' '.repeat(indent);
|
|
81
|
+
console.log(padding + chalk.gray('• ') + text);
|
|
82
|
+
},
|
|
83
|
+
// === Box de resumen ===
|
|
84
|
+
summary: (title, isSuccess = true) => {
|
|
85
|
+
if (quietMode)
|
|
86
|
+
return;
|
|
87
|
+
const color = isSuccess ? chalk.green : chalk.cyan;
|
|
88
|
+
const symbol = isSuccess ? '✔' : 'ℹ';
|
|
89
|
+
console.log('');
|
|
90
|
+
console.log(color(`${symbol} ${title}`));
|
|
91
|
+
},
|
|
92
|
+
// === Saltos de línea ===
|
|
93
|
+
newline: () => {
|
|
94
|
+
if (!quietMode)
|
|
95
|
+
console.log('');
|
|
96
|
+
},
|
|
97
|
+
// === Raw output (respeta quiet) ===
|
|
98
|
+
log: (msg) => {
|
|
99
|
+
if (!quietMode)
|
|
100
|
+
console.log(msg);
|
|
101
|
+
},
|
|
102
|
+
// === Clear console ===
|
|
103
|
+
clear: () => {
|
|
104
|
+
if (!quietMode) {
|
|
105
|
+
process.stdout.write('\x1Bc');
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
// === Box decorativo simplificado ===
|
|
109
|
+
box: (lines, color = 'blue') => {
|
|
110
|
+
if (quietMode)
|
|
111
|
+
return;
|
|
112
|
+
const colorFn = color === 'green' ? chalk.green : color === 'cyan' ? chalk.cyan : chalk.blue;
|
|
113
|
+
console.log('');
|
|
114
|
+
for (const line of lines) {
|
|
115
|
+
console.log(colorFn(` ${line}`));
|
|
116
|
+
}
|
|
117
|
+
console.log('');
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
// === Spinners ===
|
|
121
|
+
/**
|
|
122
|
+
* Crea un spinner con mensaje
|
|
123
|
+
*/
|
|
124
|
+
export function startSpinner(text) {
|
|
125
|
+
if (quietMode) {
|
|
126
|
+
return {
|
|
127
|
+
succeed: () => { },
|
|
128
|
+
fail: () => { },
|
|
129
|
+
warn: () => { },
|
|
130
|
+
stop: () => { },
|
|
131
|
+
text: ''
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
currentSpinner = ora({
|
|
135
|
+
text,
|
|
136
|
+
color: 'blue',
|
|
137
|
+
spinner: 'dots'
|
|
138
|
+
}).start();
|
|
139
|
+
return currentSpinner;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Detiene el spinner actual con éxito
|
|
143
|
+
*/
|
|
144
|
+
export function succeedSpinner(text) {
|
|
145
|
+
if (currentSpinner && !quietMode) {
|
|
146
|
+
currentSpinner.succeed(text);
|
|
147
|
+
currentSpinner = null;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Detiene el spinner actual con error
|
|
152
|
+
*/
|
|
153
|
+
export function failSpinner(text) {
|
|
154
|
+
if (currentSpinner) {
|
|
155
|
+
currentSpinner.fail(text);
|
|
156
|
+
currentSpinner = null;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Detiene el spinner actual con warning
|
|
161
|
+
*/
|
|
162
|
+
export function warnSpinner(text) {
|
|
163
|
+
if (currentSpinner) {
|
|
164
|
+
currentSpinner.warn(text);
|
|
165
|
+
currentSpinner = null;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Manejo de templates embebidos para generación de archivos
|
|
3
|
+
* @module lib/templates
|
|
4
|
+
*/
|
|
5
|
+
import { type FileOperationOptions } from './utils.js';
|
|
6
|
+
import { type SupportedLanguage } from './i18n.js';
|
|
7
|
+
export interface TemplateMapping {
|
|
8
|
+
dest: string;
|
|
9
|
+
isRoot?: boolean;
|
|
10
|
+
name?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Obtiene la ruta absoluta a un template, respetando el idioma actual
|
|
14
|
+
*/
|
|
15
|
+
export declare function getTemplatePath(name: string, lang?: SupportedLanguage): string;
|
|
16
|
+
/**
|
|
17
|
+
* Lee el contenido de un template
|
|
18
|
+
*/
|
|
19
|
+
export declare function readTemplate(name: string, lang?: SupportedLanguage): string;
|
|
20
|
+
/**
|
|
21
|
+
* Copia un template a la ruta de destino
|
|
22
|
+
*/
|
|
23
|
+
export declare function copyTemplate(name: string, destPath: string, options?: FileOperationOptions): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Mapeo de templates disponibles a sus destinos
|
|
26
|
+
*/
|
|
27
|
+
export declare const TEMPLATE_MAPPINGS: Record<string, TemplateMapping>;
|
|
28
|
+
/**
|
|
29
|
+
* Template opcional para bootstrap de IA (prompt de personalización)
|
|
30
|
+
*/
|
|
31
|
+
export declare const BOOTSTRAP_TEMPLATE: TemplateMapping;
|
|
32
|
+
/**
|
|
33
|
+
* Templates de skills que se instalan siempre (estructura de carpetas con SKILL.md)
|
|
34
|
+
* Los skills base ayudan al agente a crear y mantener la estructura del proyecto
|
|
35
|
+
*/
|
|
36
|
+
export declare const BASE_SKILLS: Record<string, TemplateMapping>;
|
|
37
|
+
/**
|
|
38
|
+
* Templates de skills opcionales que pueden instalarse (estructura de carpetas con SKILL.md)
|
|
39
|
+
*/
|
|
40
|
+
export declare const OPTIONAL_SKILLS: Record<string, TemplateMapping>;
|
|
41
|
+
/**
|
|
42
|
+
* Templates de Memory Bank para persistencia de contexto
|
|
43
|
+
* Basado en el patrón Memory Bank de Cline/Roo Code
|
|
44
|
+
*/
|
|
45
|
+
export declare const MEMORY_BANK: Record<string, TemplateMapping>;
|
|
46
|
+
//# sourceMappingURL=templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/lib/templates.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAY,KAAK,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAe,KAAK,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAYhE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAG9E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAG3E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAGxG;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAO7D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,eAIhC,CAAC;AAGF;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAMvD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAK3D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAKvD,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Manejo de templates embebidos para generación de archivos
|
|
3
|
+
* @module lib/templates
|
|
4
|
+
*/
|
|
5
|
+
import { readFileSync, existsSync } from 'fs';
|
|
6
|
+
import { fileURLToPath } from 'url';
|
|
7
|
+
import { dirname, join } from 'path';
|
|
8
|
+
import { copyFile } from './utils.js';
|
|
9
|
+
import { getLanguage } from './i18n.js';
|
|
10
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
11
|
+
const __dirname = dirname(__filename);
|
|
12
|
+
// Templates are always in src/templates, whether code runs from src/ or dist/
|
|
13
|
+
// From dist/lib/, we need to go ../../src/templates
|
|
14
|
+
// From src/lib/, we need to go ../templates
|
|
15
|
+
const srcTemplates = join(__dirname, '../../src/templates');
|
|
16
|
+
const localTemplates = join(__dirname, '../templates');
|
|
17
|
+
const TEMPLATES_DIR = existsSync(srcTemplates) ? srcTemplates : localTemplates;
|
|
18
|
+
/**
|
|
19
|
+
* Obtiene la ruta absoluta a un template, respetando el idioma actual
|
|
20
|
+
*/
|
|
21
|
+
export function getTemplatePath(name, lang) {
|
|
22
|
+
const language = lang || getLanguage();
|
|
23
|
+
return join(TEMPLATES_DIR, language, name);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Lee el contenido de un template
|
|
27
|
+
*/
|
|
28
|
+
export function readTemplate(name, lang) {
|
|
29
|
+
const path = getTemplatePath(name, lang);
|
|
30
|
+
return readFileSync(path, 'utf-8');
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Copia un template a la ruta de destino
|
|
34
|
+
*/
|
|
35
|
+
export function copyTemplate(name, destPath, options = {}) {
|
|
36
|
+
const srcPath = getTemplatePath(name);
|
|
37
|
+
return copyFile(srcPath, destPath, options);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Mapeo de templates disponibles a sus destinos
|
|
41
|
+
*/
|
|
42
|
+
export const TEMPLATE_MAPPINGS = {
|
|
43
|
+
'base/_agents.md': { dest: 'AGENTS.md', isRoot: true },
|
|
44
|
+
'base/_architecture.md': { dest: '.context/architecture.md' },
|
|
45
|
+
'base/_project_state.md': { dest: '.context/project_state.md' },
|
|
46
|
+
'rules/rule-coding-standards.md': { dest: '.context/rules/coding-standards.md' },
|
|
47
|
+
'docs/doc-readme.md': { dest: '.context/docs/README.md' },
|
|
48
|
+
'docs/mcp-readme.md': { dest: '.context/mcp/README.md' }
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Template opcional para bootstrap de IA (prompt de personalización)
|
|
52
|
+
*/
|
|
53
|
+
export const BOOTSTRAP_TEMPLATE = {
|
|
54
|
+
dest: 'AI_BOOTSTRAP.md',
|
|
55
|
+
isRoot: true,
|
|
56
|
+
name: 'AI Bootstrap Prompt'
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Templates de skills que se instalan siempre (estructura de carpetas con SKILL.md)
|
|
60
|
+
* Los skills base ayudan al agente a crear y mantener la estructura del proyecto
|
|
61
|
+
*/
|
|
62
|
+
export const BASE_SKILLS = {
|
|
63
|
+
'skills/skill-generating.md': { dest: '.context/skills/generating-skills/SKILL.md', name: 'Generating Skills' },
|
|
64
|
+
'skills/skill-agents.md': { dest: '.context/skills/managing-agents/SKILL.md', name: 'Managing Agents' },
|
|
65
|
+
'skills/skill-architecture.md': { dest: '.context/skills/documenting-architecture/SKILL.md', name: 'Documenting Architecture' },
|
|
66
|
+
'skills/skill-rules.md': { dest: '.context/skills/creating-rules/SKILL.md', name: 'Creating Rules' },
|
|
67
|
+
'skills/skill-project-state.md': { dest: '.context/skills/tracking-project-state/SKILL.md', name: 'Tracking Project State' }
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Templates de skills opcionales que pueden instalarse (estructura de carpetas con SKILL.md)
|
|
71
|
+
*/
|
|
72
|
+
export const OPTIONAL_SKILLS = {
|
|
73
|
+
'skills/skill-react.md': { dest: '.context/skills/react-patterns/SKILL.md', name: 'React Patterns' },
|
|
74
|
+
'skills/skill-api.md': { dest: '.context/skills/api-design/SKILL.md', name: 'API Design' },
|
|
75
|
+
'skills/skill-testing.md': { dest: '.context/skills/testing-practices/SKILL.md', name: 'Testing Practices' },
|
|
76
|
+
'skills/skill-git.md': { dest: '.context/skills/git-workflow/SKILL.md', name: 'Git Workflow' }
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Templates de Memory Bank para persistencia de contexto
|
|
80
|
+
* Basado en el patrón Memory Bank de Cline/Roo Code
|
|
81
|
+
*/
|
|
82
|
+
export const MEMORY_BANK = {
|
|
83
|
+
'memory/project_brief.md': { dest: '.context/memory/project_brief.md', name: 'Project Brief' },
|
|
84
|
+
'memory/tech_context.md': { dest: '.context/memory/tech_context.md', name: 'Tech Context' },
|
|
85
|
+
'memory/active_context.md': { dest: '.context/memory/active_context.md', name: 'Active Context' },
|
|
86
|
+
'memory/progress.md': { dest: '.context/memory/progress.md', name: 'Progress' }
|
|
87
|
+
};
|
|
88
|
+
//# sourceMappingURL=templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/lib/templates.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Utilidades comunes para operaciones de archivos y directorios
|
|
3
|
+
* @module lib/utils
|
|
4
|
+
*/
|
|
5
|
+
export interface FileOperationOptions {
|
|
6
|
+
force?: boolean;
|
|
7
|
+
dryRun?: boolean;
|
|
8
|
+
silent?: boolean;
|
|
9
|
+
backup?: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Resuelve y valida que un directorio exista
|
|
13
|
+
*/
|
|
14
|
+
export declare function resolveDirectory(dir?: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* Valida que no estemos en la raíz del sistema
|
|
17
|
+
*/
|
|
18
|
+
export declare function validateNotRoot(dir: string): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Crea un directorio si no existe
|
|
21
|
+
*/
|
|
22
|
+
export declare function ensureDir(dir: string, options?: FileOperationOptions): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Copia un archivo con opciones de force y backup
|
|
25
|
+
*/
|
|
26
|
+
export declare function copyFile(src: string, dest: string, options?: FileOperationOptions): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Escribe contenido a un archivo con opciones de force y backup
|
|
29
|
+
*/
|
|
30
|
+
export declare function writeFile(path: string, content: string, options?: FileOperationOptions): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Lista de carpetas de editores conocidas que pueden contener skills/rules
|
|
33
|
+
*/
|
|
34
|
+
export declare const EDITOR_FOLDERS: string[];
|
|
35
|
+
/**
|
|
36
|
+
* Lista blanca de carpetas a preservar durante limpieza
|
|
37
|
+
*/
|
|
38
|
+
export declare const WHITELIST: string[];
|
|
39
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAY,GAAG,MAAM,CAQ1D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAcpD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAclF;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAkC/F;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAuBpG;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,EAOlC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,MAAM,EAAoC,CAAC"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Utilidades comunes para operaciones de archivos y directorios
|
|
3
|
+
* @module lib/utils
|
|
4
|
+
*/
|
|
5
|
+
import { existsSync, mkdirSync, copyFileSync, writeFileSync } from 'fs';
|
|
6
|
+
import { resolve, basename } from 'path';
|
|
7
|
+
import { logger } from './logger.js';
|
|
8
|
+
/**
|
|
9
|
+
* Resuelve y valida que un directorio exista
|
|
10
|
+
*/
|
|
11
|
+
export function resolveDirectory(dir = '.') {
|
|
12
|
+
const resolved = resolve(dir);
|
|
13
|
+
if (!existsSync(resolved)) {
|
|
14
|
+
throw new Error(`El directorio '${dir}' no existe.`);
|
|
15
|
+
}
|
|
16
|
+
return resolved;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Valida que no estemos en la raíz del sistema
|
|
20
|
+
*/
|
|
21
|
+
export function validateNotRoot(dir) {
|
|
22
|
+
const normalized = resolve(dir);
|
|
23
|
+
// Windows: C:\, D:\, etc.
|
|
24
|
+
if (/^[A-Z]:\\?$/i.test(normalized)) {
|
|
25
|
+
throw new Error('No se puede ejecutar en la raíz del sistema.');
|
|
26
|
+
}
|
|
27
|
+
// Unix: /
|
|
28
|
+
if (normalized === '/') {
|
|
29
|
+
throw new Error('No se puede ejecutar en la raíz del sistema.');
|
|
30
|
+
}
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Crea un directorio si no existe
|
|
35
|
+
*/
|
|
36
|
+
export function ensureDir(dir, options = {}) {
|
|
37
|
+
const { dryRun = false, silent = false } = options;
|
|
38
|
+
if (existsSync(dir)) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
if (dryRun) {
|
|
42
|
+
if (!silent)
|
|
43
|
+
logger.dryRun(`Create dir: ${dir}`);
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
mkdirSync(dir, { recursive: true });
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Copia un archivo con opciones de force y backup
|
|
51
|
+
*/
|
|
52
|
+
export function copyFile(src, dest, options = {}) {
|
|
53
|
+
const { force = false, dryRun = false, silent = false, backup = true } = options;
|
|
54
|
+
const name = basename(dest);
|
|
55
|
+
if (!existsSync(src)) {
|
|
56
|
+
logger.warning(`Template not found: ${src}`);
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
if (existsSync(dest) && !force) {
|
|
60
|
+
if (!silent)
|
|
61
|
+
logger.item(`${name} (exists, skipped)`);
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
if (dryRun) {
|
|
65
|
+
if (!silent)
|
|
66
|
+
logger.dryRun(`Copy: ${name}`);
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
// Create parent directories if needed (for skill folder structure)
|
|
70
|
+
const parentDir = dest.substring(0, dest.lastIndexOf('/'));
|
|
71
|
+
if (parentDir && !existsSync(parentDir)) {
|
|
72
|
+
mkdirSync(parentDir, { recursive: true });
|
|
73
|
+
}
|
|
74
|
+
// Crear backup si existe y hay force, y los backups están habilitados
|
|
75
|
+
if (existsSync(dest) && force && backup) {
|
|
76
|
+
copyFileSync(dest, `${dest}.bak`);
|
|
77
|
+
if (!silent)
|
|
78
|
+
logger.item(`${name}.bak (backup created)`);
|
|
79
|
+
}
|
|
80
|
+
copyFileSync(src, dest);
|
|
81
|
+
if (!silent)
|
|
82
|
+
logger.item(`+ ${name}`);
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Escribe contenido a un archivo con opciones de force y backup
|
|
87
|
+
*/
|
|
88
|
+
export function writeFile(path, content, options = {}) {
|
|
89
|
+
const { force = false, dryRun = false, silent = false, backup = true } = options;
|
|
90
|
+
const name = basename(path);
|
|
91
|
+
if (existsSync(path) && !force) {
|
|
92
|
+
if (!silent)
|
|
93
|
+
logger.item(`${name} (exists, skipped)`);
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
if (dryRun) {
|
|
97
|
+
if (!silent)
|
|
98
|
+
logger.dryRun(`Create: ${name}`);
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
// Crear backup si existe y hay force, y los backups están habilitados
|
|
102
|
+
if (existsSync(path) && force && backup) {
|
|
103
|
+
copyFileSync(path, `${path}.bak`);
|
|
104
|
+
if (!silent)
|
|
105
|
+
logger.item(`${name}.bak (backup created)`);
|
|
106
|
+
}
|
|
107
|
+
writeFileSync(path, content, 'utf-8');
|
|
108
|
+
if (!silent)
|
|
109
|
+
logger.item(`+ ${name}`);
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Lista de carpetas de editores conocidas que pueden contener skills/rules
|
|
114
|
+
*/
|
|
115
|
+
export const EDITOR_FOLDERS = [
|
|
116
|
+
'.agent', '.agents', '.cursor', '.windsurf', '.gemini', '.cline',
|
|
117
|
+
'.vscode', '.codebuddy', '.claude', '.adal', '.augment', '.codex',
|
|
118
|
+
'.commandcode', '.continue', '.copilot', '.factory', '.junie',
|
|
119
|
+
'.kilocode', '.kiro', '.kode', '.mcpjam', '.moltbot', '.mux',
|
|
120
|
+
'.neovate', '.openclaude', '.openhands', '.pochi', '.qoder',
|
|
121
|
+
'.qwen', '.roo', '.trae-cn', '.trae', '.vibe', '.zencoder'
|
|
122
|
+
];
|
|
123
|
+
/**
|
|
124
|
+
* Lista blanca de carpetas a preservar durante limpieza
|
|
125
|
+
*/
|
|
126
|
+
export const WHITELIST = ['.context', '.git', '.github'];
|
|
127
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Wizard interactivo para configuración de proyectos
|
|
3
|
+
* @module lib/wizard
|
|
4
|
+
*/
|
|
5
|
+
type ProjectType = 'frontend' | 'backend' | 'fullstack' | 'library' | 'cli';
|
|
6
|
+
export interface ProjectConfig {
|
|
7
|
+
type: ProjectType;
|
|
8
|
+
framework: string;
|
|
9
|
+
typescript?: boolean;
|
|
10
|
+
styling?: string;
|
|
11
|
+
features?: string[];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Ejecuta el wizard interactivo para configurar el proyecto
|
|
15
|
+
*/
|
|
16
|
+
export declare function runWizard(): Promise<ProjectConfig>;
|
|
17
|
+
/**
|
|
18
|
+
* Genera contenido de architecture.md basado en la configuración
|
|
19
|
+
*/
|
|
20
|
+
export declare function generateArchitecture(config: ProjectConfig): string;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=wizard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wizard.d.ts","sourceRoot":"","sources":["../../src/lib/wizard.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,KAAK,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,KAAK,CAAC;AAE5E,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AA4CD;;GAEG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,aAAa,CAAC,CAgExD;AAuBD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAiElE"}
|