@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 +18 -2
- package/CLAUDE.md +3 -3
- package/README.md +2 -2
- package/install.js +83 -32
- package/package.json +1 -1
- package/rules/_bootstrap.md +2 -2
- package/scripts/create_skill.js +1 -1
- package/scripts/validate_skills.js +3 -2
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
|
+
> 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
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
  
|
|
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.
|
|
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
|
|
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
|
-
|
|
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
|
|
904
|
-
console.log(chalk.bold('\n
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
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
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
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.
|
|
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
package/rules/_bootstrap.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 🚀 LMAgent Bootstrap — Instrucciones Iniciales
|
|
2
2
|
|
|
3
|
-
> **Tipo**: `rule` | **Versión**: 2.6.
|
|
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.
|
|
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`)
|
package/scripts/create_skill.js
CHANGED
|
@@ -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.
|
|
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
|
-
|
|
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/'));
|