@qubiit/lmagent 2.6.3 → 2.6.5

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/AGENTS.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # 🤖 LMAgent Intelligence Catalog
2
2
 
3
- > Catálogo completo de capacidades del ecosistema **LMAgent v2.6.3**.
3
+ > Catálogo completo de capacidades del ecosistema **LMAgent v2.6.5**.
4
4
  > Última actualización: 2026-02-11
5
5
 
6
6
  ---
@@ -105,7 +105,19 @@ skills/{skill-name}/
105
105
  | **scrum-master** | `/sm`, `/agile`, `/coach` | Ceremonias Scrum, sprints, retrospectivas | `references/sprint-ceremonies.md` |
106
106
  | **technical-writer** | `/doc`, `/readme`, `/guide` | Documentación, API refs, guías de usuario | `references/doc-templates.md` |
107
107
  | **ux-ui-designer** | `/ux`, `/ui`, `/design` | Design systems, UX research, accesibilidad | `references/design-system-foundation.md` |
108
- | **testing-strategist** | `/test-plan`, `/strategy` | Pirámide de testing, planificación y estrategia de QA | **Uso:** Definición de estrategia. **Vs QA:** Strategist piensa el 'qué'; QA ejecuta el 'cómo'. |
108
+
109
+ ## 📚 2. Knowledge Base (Documentación)
110
+ *Ubicación: `docs/` en la raíz del proyecto.*
111
+
112
+ El agente debe consultar estos archivos si el usuario tiene dudas sobre el framework:
113
+
114
+ | Archivo | Propósito |
115
+ | :--- | :--- |
116
+ | `docs/getting-started.md` | Configuración inicial y primeros pasos |
117
+ | `docs/usage-guide.md` | Cómo interactuar con el agente y comandos |
118
+ | `docs/customization-guide.md` | Cómo crear nuevos skills o reglas |
119
+ | `docs/commands.md` | Referencia de comandos CLI (`lmagent ...`) |
120
+ | `docs/navigation-index.md` | Mapa completo de archivos y sus relaciones |
109
121
 
110
122
  ### 📐 Methodologies
111
123
 
@@ -141,6 +153,8 @@ Rules definen **CÓMO** debe comportarse el agente. Son restricciones y estánda
141
153
 
142
154
  Workflows son **SOPs (Standard Operating Procedures)** que guían al agente en procesos complejos multi-paso.
143
155
 
156
+ > **Instrucción para Agente**: Antes de iniciar una tarea compleja, **verifica si existe un workflow** aquí. Si existe, **LÉELO** y síguelo paso a paso.
157
+
144
158
  | Workflow | Propósito |
145
159
  |----------|----------|
146
160
  | **bugfix-backend.md** | Protocolo para diagnosticar, corregir y verificar bugs de backend |
@@ -178,6 +192,8 @@ Workflows son **SOPs (Standard Operating Procedures)** que guían al agente en p
178
192
 
179
193
  👉 **[Ver Guía de Uso de Templates](templates/USAGE.md)**
180
194
 
195
+ > **Instrucción para Agente**: Cuando debas crear nuevos archivos o proyectos, **usa estos templates como referencia** para mantener la consistencia, no inventes estructuras desde cero.
196
+
181
197
  | Template | Descripción |
182
198
  |----------|-------------|
183
199
  | **backend-python/** | FastAPI backend con SQLModel |
package/CLAUDE.md CHANGED
@@ -1,12 +1,12 @@
1
- # LMAgent Framework v2.6.3 - Claude Code Instructions
1
+ # LMAgent Framework v2.6.5 - Claude Code Instructions
2
2
 
3
3
  > [!IMPORTANT]
4
- > **ANTES DE HACER CUALQUIER COSA**: Este proyecto usa el framework **LMAgent v2.6.3**.
4
+ > **ANTES DE HACER CUALQUIER COSA**: Este proyecto usa el framework **LMAgent v2.6.5**.
5
5
  > **DEBES** leer `AGENTS.md` y `rules/_bootstrap.md` antes de implementar cualquier cambio.
6
6
 
7
7
  ## Framework
8
8
 
9
- Estás trabajando con **LMAgent v2.6.3**, un framework para desarrollo de automatizaciones y agentes de IA. Organiza las capacidades del agente en tres pilares: **Skills**, **Rules** y **Workflows**.
9
+ Estás trabajando con **LMAgent v2.6.4**, un framework para desarrollo de automatizaciones y agentes de IA. Organiza las capacidades del agente en tres pilares: **Skills**, **Rules** y **Workflows**.
10
10
 
11
11
  ## ⚡ Inicio Rápido
12
12
 
package/README.md CHANGED
@@ -6,11 +6,11 @@
6
6
  ██║ ██╔████╔██║███████║██║ ███╗█████╗ ██╔██╗ ██║ ██║
7
7
  ██║ ██║╚██╔╝██║██╔══██║██║ ██║██╔══╝ ██║╚██╗██║ ██║
8
8
  ███████╗██║ ╚═╝ ██║██║ ██║╚██████╔╝███████╗██║ ╚████║ ██║
9
- ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝
9
+ ╚══════╝╚╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝
10
10
  by QuBit
11
11
  ```
12
12
 
13
- ![Version](https://img.shields.io/badge/Version-2.6.3-purple?style=for-the-badge) ![License](https://img.shields.io/badge/License-MIT-green?style=for-the-badge) ![Agentic](https://img.shields.io/badge/AI-Agentic_Workflow-cyan?style=for-the-badge)
13
+ ![Version](https://img.shields.io/badge/version-2.6.5-blue.svg) ![License](https://img.shields.io/badge/License-MIT-green?style=for-the-badge) ![Agentic](https://img.shields.io/badge/AI-Agentic_Workflow-cyan?style=for-the-badge)
14
14
 
15
15
  > **"Separate the reasoning from the execution."**
16
16
  > LMAgent is the foundational runtime that empowers your AI Agents with standardized **Skills**, **Rules**, and **Workflows** across any IDE (Cursor, Windsurf, VSCode, Zed, Qodo).
package/install.js CHANGED
@@ -29,6 +29,7 @@ const INIT_DIRS = [
29
29
  { src: 'config', desc: 'Configuración del framework' },
30
30
  { src: 'templates', desc: 'Templates de proyecto' },
31
31
  { src: 'docs', desc: 'Documentación extendida' },
32
+ { src: 'workflows', desc: 'SOPs y Procedimientos' },
32
33
  ];
33
34
 
34
35
  // Configuración: IDEs y Agentes soportados
@@ -368,7 +369,7 @@ const IDE_CONFIGS = [
368
369
  program
369
370
  .name('lmagent')
370
371
  .description('CLI para instalar skills y reglas de LMAgent')
371
- .version('2.6.3'); // Version bump
372
+ .version('2.6.5'); // Version bump
372
373
 
373
374
  program.command('install')
374
375
  .description('Instalar skills, rules y workflows en el IDE del proyecto')
@@ -514,6 +515,7 @@ async function runInstall(options) {
514
515
  installTarget = targetAnswer.target;
515
516
  targetRoot = (installTarget === 'user') ? userHome : projectRoot;
516
517
 
518
+ console.log('');
517
519
  const methodAnswer = await inquirer.prompt([
518
520
  {
519
521
  type: 'list',
@@ -587,21 +589,31 @@ async function runInstall(options) {
587
589
 
588
590
  console.log('');
589
591
  console.log(chalk.gray('--- Selección de Contenido ---'));
590
- const contentAnswers = await inquirer.prompt([
592
+ const skillsAnswer = await inquirer.prompt([
591
593
  {
592
594
  type: 'checkbox',
593
595
  name: 'skills',
594
596
  message: 'Selecciona los Skills:',
595
597
  choices: availableSkills.map(s => ({ name: s, checked: true })),
596
598
  pageSize: 15
597
- },
599
+ }
600
+ ]);
601
+ selectedSkills = skillsAnswer.skills;
602
+
603
+ console.log('');
604
+ const rulesAnswer = await inquirer.prompt([
598
605
  {
599
606
  type: 'checkbox',
600
607
  name: 'rules',
601
608
  message: 'Selecciona las Reglas:',
602
609
  choices: availableRules.map(r => ({ name: r, checked: true })),
603
610
  pageSize: 15
604
- },
611
+ }
612
+ ]);
613
+ selectedRules = rulesAnswer.rules;
614
+
615
+ console.log('');
616
+ const workflowsAnswer = await inquirer.prompt([
605
617
  {
606
618
  type: 'checkbox',
607
619
  name: 'workflows',
@@ -610,10 +622,9 @@ async function runInstall(options) {
610
622
  pageSize: 15
611
623
  }
612
624
  ]);
613
- selectedSkills = contentAnswers.skills;
614
- selectedRules = contentAnswers.rules;
615
- selectedWorkflows = contentAnswers.workflows;
625
+ selectedWorkflows = workflowsAnswer.workflows;
616
626
 
627
+ console.log('');
617
628
  const { confirm } = await inquirer.prompt([{
618
629
  type: 'confirm',
619
630
  name: 'confirm',
@@ -843,6 +854,7 @@ function getAllItems(dir, isNested) {
843
854
  // ============================================
844
855
 
845
856
  async function runInit(options) {
857
+ let targetIdes = []; // Initialize targetIdes
846
858
  console.clear();
847
859
  const branding = figlet.textSync('LMAGENT', { font: 'ANSI Shadow' });
848
860
  console.log(gradient.pastel.multiline(branding));
@@ -898,34 +910,73 @@ async function runInit(options) {
898
910
  ]);
899
911
  filesToCopy = INIT_FILES.filter(f => answers.files.includes(f.src));
900
912
  dirsToCopy = INIT_DIRS.filter(d => answers.dirs.includes(d.src));
913
+ filesToCopy = INIT_FILES.filter(f => answers.files.includes(f.src));
914
+ dirsToCopy = INIT_DIRS.filter(d => answers.dirs.includes(d.src));
915
+
916
+ // Seleccionar IDE para destino de archivos
917
+ console.log('');
918
+ const ideAnswer = await inquirer.prompt([
919
+ {
920
+ type: 'checkbox',
921
+ name: 'ides',
922
+ message: 'Selecciona tu IDE principal (para ubicar las carpetas):',
923
+ choices: IDE_CONFIGS.filter(i => i.value !== 'custom').map(i => ({
924
+ name: i.name,
925
+ value: i.value,
926
+ checked: i.value === 'cursor'
927
+ }))
928
+ }
929
+ ]);
930
+ targetIdes = IDE_CONFIGS.filter(i => ideAnswer.ides.includes(i.value));
931
+ } else {
932
+ // Defaults for non-interactive
933
+ targetIdes = [IDE_CONFIGS.find(i => i.value === 'cursor')];
901
934
  }
902
935
 
903
- // Copiar archivos individuales
904
- console.log(chalk.bold('\n📄 Copiando archivos de proyecto:'));
905
- for (const file of filesToCopy) {
906
- const src = path.join(__dirname, file.src);
907
- const dest = path.join(projectRoot, file.src);
908
- if (fs.existsSync(src)) {
909
- const exists = fs.existsSync(dest);
910
- fs.copyFileSync(src, dest);
911
- console.log(` ${chalk.green('✔')} ${file.src} ${exists ? chalk.yellow('(actualizado)') : chalk.green('(nuevo)')}`);
912
- } else {
913
- console.log(` ${chalk.red('✘')} ${file.src} ${chalk.red('(no encontrado en el paquete)')}`);
936
+ // Copiar archivos del framework a la carpeta del Agente (Clean Root)
937
+ console.log(chalk.bold('\n📦 Instalando framework en directorios de Agente:'));
938
+
939
+ for (const ide of targetIdes) {
940
+ if (!ide.skillsDir) continue; // Skip custom/manual if no dir defined
941
+
942
+ // Determinar "Agent Root" (ej: .cursor/ o .github/)
943
+ // Asume que skillsDir es "root/skills", así que dirname obtiene "root"
944
+ const agentRootDir = path.join(targetRoot, path.dirname(ide.skillsDir));
945
+
946
+ console.log(chalk.dim(` Destino: ${agentRootDir}`));
947
+
948
+ // Crear directorio root si no existe
949
+ if (!fs.existsSync(agentRootDir)) fs.mkdirSync(agentRootDir, { recursive: true });
950
+
951
+ // Copiar Archivos (AGENTS.md, etc - EXCEPTO CLAUDE.md que suele ir en root)
952
+ for (const file of filesToCopy) {
953
+ if (file.src === 'CLAUDE.md') {
954
+ // CLAUDE.md se queda en projectRoot para visibilidad inmediata si se usa Claude
955
+ // Opcional: Podríamos moverlo también, pero por ahora lo dejamos en root para compatibilidad
956
+ const dest = path.join(projectRoot, file.src);
957
+ if (fs.existsSync(path.join(__dirname, file.src))) {
958
+ fs.copyFileSync(path.join(__dirname, file.src), dest);
959
+ console.log(` ${chalk.green('✔')} ${file.src} (Project Root)`);
960
+ }
961
+ continue;
962
+ }
963
+
964
+ const src = path.join(__dirname, file.src);
965
+ const dest = path.join(agentRootDir, file.src);
966
+ if (fs.existsSync(src)) {
967
+ fs.copyFileSync(src, dest);
968
+ console.log(` ${chalk.green('✔')} ${file.src} -> ${path.dirname(ide.skillsDir)}/${file.src}`);
969
+ }
914
970
  }
915
- }
916
971
 
917
- // Copiar directorios
918
- console.log(chalk.bold('\n📁 Copiando directorios:'));
919
- for (const dir of dirsToCopy) {
920
- const src = path.join(__dirname, dir.src);
921
- const dest = path.join(projectRoot, dir.src);
922
- if (fs.existsSync(src)) {
923
- const exists = fs.existsSync(dest);
924
- copyRecursiveSync(src, dest, true);
925
- const itemCount = getAllItemsFlat(src).length;
926
- console.log(` ${chalk.green('✔')} ${dir.src}/ (${itemCount} archivos) ${exists ? chalk.yellow('(actualizado)') : chalk.green('(nuevo)')}`);
927
- } else {
928
- console.log(` ${chalk.red('✘')} ${dir.src}/ ${chalk.red('(no encontrado en el paquete)')}`);
972
+ // Copiar Directorios (docs, config, templates)
973
+ for (const dir of dirsToCopy) {
974
+ const src = path.join(__dirname, dir.src);
975
+ const dest = path.join(agentRootDir, dir.src);
976
+ if (fs.existsSync(src)) {
977
+ copyRecursiveSync(src, dest, true); // Force overwrite
978
+ console.log(` ${chalk.green('✔')} ${dir.src}/ -> ${path.dirname(ide.skillsDir)}/${dir.src}/`);
979
+ }
929
980
  }
930
981
  }
931
982
 
@@ -965,7 +1016,7 @@ DEBUG=true
965
1016
  }
966
1017
 
967
1018
  // Resumen
968
- console.log(gradient.pastel.multiline('\n✨ Proyecto inicializado con LMAgent v2.3.0 ✨'));
1019
+ console.log(gradient.pastel.multiline('\n✨ Proyecto inicializado con LMAgent v2.6.5 ✨'));
969
1020
  console.log('');
970
1021
  console.log(chalk.cyan('Próximos pasos:'));
971
1022
  console.log(` 1. ${chalk.bold('lmagent install')} - Instalar skills/rules/workflows en tu IDE`);
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "2.6.3",
6
+ "version": "2.6.5",
7
7
  "description": "CLI to install LMAgent skills and rules into your IDE",
8
8
  "main": "install.js",
9
9
  "bin": {
@@ -1,6 +1,6 @@
1
1
  # 🚀 LMAgent Bootstrap — Instrucciones Iniciales
2
2
 
3
- > **Tipo**: `rule` | **Versión**: 2.6.3 | **Prioridad**: MÁXIMA
3
+ > **Tipo**: `rule` | **Versión**: 2.6.5 | **Prioridad**: MÁXIMA
4
4
  > Esta regla se aplica **SIEMPRE** como primer paso antes de cualquier tarea.
5
5
 
6
6
  ---
@@ -15,7 +15,7 @@
15
15
 
16
16
  ## 🧠 Framework
17
17
 
18
- Estás trabajando con **LMAgent v2.6.3**. Antes de implementar cualquier cambio:
18
+ Estás trabajando con **LMAgent v2.6.5**. Antes de implementar cualquier cambio:
19
19
 
20
20
  1. **Lee `AGENTS.md`** — Catálogo completo de skills, rules y workflows
21
21
  2. **Clasifica la tarea** — Nivel 0-4 según complejidad (ver `rules/workflow.md`)
@@ -212,7 +212,7 @@ Antes de considerar una tarea terminada, verifica TODO:
212
212
 
213
213
  // ─── Main ─────────────────────────────────────────────────────
214
214
  async function main() {
215
- console.log(c.bold('\n🛠️ LMAgent Skill Generator v2.6.3\n'));
215
+ console.log(c.bold('\n🛠️ LMAgent Skill Generator v2.6.5\n'));
216
216
 
217
217
  const prompt = createPrompt();
218
218
 
@@ -194,12 +194,13 @@ function validateSkill(skillDir) {
194
194
  function main() {
195
195
  const filterSkill = process.argv[2];
196
196
 
197
- console.log(gradient.pastel.multiline('\n🚀 LMAgent Skills Validator v2.6.3\n'));
197
+ const c = chalk;
198
+
199
+ console.log(c.bold('\n🔍 LMAgent Skill Validator v2.6.5\n'));
198
200
  console.log(chalk.dim(` Directorio: ${SKILLS_DIR}`));
199
201
  console.log(chalk.dim(` Campos obligatorios: ${REQUIRED_FIELDS.length}`));
200
202
  console.log('');
201
203
 
202
- const c = chalk;
203
204
 
204
205
  if (!existsSync(SKILLS_DIR)) {
205
206
  console.error(c.red('❌ No se encontró el directorio skills/'));