@qubiit/lmagent 2.6.3 → 2.7.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/AGENTS.md +19 -3
- package/CLAUDE.md +3 -3
- package/README.md +26 -2
- package/install.js +88 -36
- package/package.json +16 -1
- package/rules/_bootstrap.md +2 -2
- package/scripts/create_skill.js +4 -4
- package/scripts/validate_skills.js +5 -4
- package/skills/ai-agent-engineer/SKILL.md +1 -1
- package/skills/api-designer/SKILL.md +2 -2
- package/skills/architect/SKILL.md +1 -1
- package/skills/automation-engineer/SKILL.md +1 -1
- package/skills/backend-engineer/SKILL.md +1 -1
- package/skills/bmad-methodology/SKILL.md +2 -2
- package/skills/browser-agent/SKILL.md +1 -1
- package/skills/code-reviewer/SKILL.md +2 -2
- package/skills/data-engineer/SKILL.md +1 -1
- package/skills/devops-engineer/SKILL.md +1 -1
- package/skills/document-generator/SKILL.md +1 -1
- package/skills/frontend-engineer/SKILL.md +1 -1
- package/skills/git-workflow/SKILL.md +2 -2
- package/skills/mcp-builder/SKILL.md +2 -2
- package/skills/mobile-engineer/SKILL.md +1 -1
- package/skills/orchestrator/SKILL.md +1 -1
- package/skills/performance-engineer/SKILL.md +1 -1
- package/skills/product-manager/SKILL.md +1 -1
- package/skills/prompt-engineer/SKILL.md +1 -1
- package/skills/qa-engineer/SKILL.md +1 -1
- package/skills/scrum-master/SKILL.md +1 -1
- package/skills/security-analyst/SKILL.md +1 -1
- package/skills/seo-auditor/SKILL.md +1 -1
- package/skills/spec-driven-dev/SKILL.md +2 -2
- package/skills/supabase-expert/SKILL.md +2 -2
- package/skills/swe-agent/SKILL.md +2 -2
- package/skills/systematic-debugger/SKILL.md +1 -1
- package/skills/tech-lead/SKILL.md +1 -1
- package/skills/technical-writer/SKILL.md +1 -1
- package/skills/testing-strategist/SKILL.md +2 -2
- package/skills/ux-ui-designer/SKILL.md +1 -1
- package/.editorconfig +0 -18
- package/pyproject.toml +0 -182
package/AGENTS.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# 🤖 LMAgent Intelligence Catalog
|
|
2
2
|
|
|
3
|
-
> Catálogo completo de capacidades del ecosistema **LMAgent v2.
|
|
4
|
-
> Última actualización: 2026-02-
|
|
3
|
+
> Catálogo completo de capacidades del ecosistema **LMAgent v2.7.0**.
|
|
4
|
+
> Última actualización: 2026-02-12
|
|
5
5
|
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -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.
|
|
1
|
+
# LMAgent Framework v2.7.0 - Claude Code Instructions
|
|
2
2
|
|
|
3
3
|
> [!IMPORTANT]
|
|
4
|
-
> **ANTES DE HACER CUALQUIER COSA**: Este proyecto usa el framework **LMAgent v2.
|
|
4
|
+
> **ANTES DE HACER CUALQUIER COSA**: Este proyecto usa el framework **LMAgent v2.7.0**.
|
|
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.
|
|
9
|
+
Estás trabajando con **LMAgent v2.7.0**, 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).
|
|
@@ -63,6 +63,30 @@ lmagent doctor
|
|
|
63
63
|
|
|
64
64
|
---
|
|
65
65
|
|
|
66
|
+
## 🏛️ Architecture: Global Brain vs. Local Project
|
|
67
|
+
|
|
68
|
+
LMAgent uses a **Hybrid Architecture** to balance **Centralized Updates** with **Project Portability**.
|
|
69
|
+
|
|
70
|
+
### The Problem it Solves
|
|
71
|
+
* **Global Installs** run the risk of breaking projects if they rely on your specific machine paths.
|
|
72
|
+
* **Local Copies** become stale and are hard to update across 10+ projects.
|
|
73
|
+
|
|
74
|
+
### The Solution: "Symlink Bridge"
|
|
75
|
+
|
|
76
|
+
| Layer | Location | Purpose |
|
|
77
|
+
| :--- | :--- | :--- |
|
|
78
|
+
| **1. Global Brain** | `~/.agents/` | **Single Source of Truth**. Hosted in your user home. Updated via `npm update -g`. |
|
|
79
|
+
| **2. Local Project** | `./.cursor/skills/` | **Symlinks** pointing to the Global Brain. Lightweight and bridge-like. |
|
|
80
|
+
| **3. Context** | `./CLAUDE.md` | Points to **Local Symlinks** (Relative Paths). **100% Portable** to other devs. |
|
|
81
|
+
|
|
82
|
+
### Why `init` and `install` are separate?
|
|
83
|
+
1. **`lmagent init`**: Creates the **Portable Structure** (files that *must* exist in the repo to work, like `CLAUDE.md`).
|
|
84
|
+
2. **`lmagent install`**: Builds the **Bridge** (Symlinks) specific to *your* machine's environment.
|
|
85
|
+
|
|
86
|
+
> **Best Practice**: Commit `CLAUDE.md` and `AGENTS.md`. **Do NOT** commit the `.cursor/skills` folder (add it to `.gitignore`), as each developer should run `lmagent install` to link their own brain.
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
66
90
|
## 🛠️ Creating New Skills
|
|
67
91
|
Need a custom agent? Use the interactive generator:
|
|
68
92
|
|
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.
|
|
372
|
+
.version('2.7.0'); // 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,33 +589,46 @@ async function runInstall(options) {
|
|
|
587
589
|
|
|
588
590
|
console.log('');
|
|
589
591
|
console.log(chalk.gray('--- Selección de Contenido ---'));
|
|
590
|
-
|
|
592
|
+
// Seleccionar Skills
|
|
593
|
+
console.log(chalk.bold('\n🔹 Skills Disponibles:'));
|
|
594
|
+
const skillsAnswer = await inquirer.prompt([
|
|
591
595
|
{
|
|
592
596
|
type: 'checkbox',
|
|
593
597
|
name: 'skills',
|
|
594
|
-
message: 'Selecciona
|
|
598
|
+
message: 'Selecciona:',
|
|
595
599
|
choices: availableSkills.map(s => ({ name: s, checked: true })),
|
|
596
600
|
pageSize: 15
|
|
597
|
-
}
|
|
601
|
+
}
|
|
602
|
+
]);
|
|
603
|
+
selectedSkills = skillsAnswer.skills;
|
|
604
|
+
|
|
605
|
+
// Seleccionar Rules
|
|
606
|
+
console.log(chalk.bold('\n🔹 Reglas Disponibles:'));
|
|
607
|
+
const rulesAnswer = await inquirer.prompt([
|
|
598
608
|
{
|
|
599
609
|
type: 'checkbox',
|
|
600
610
|
name: 'rules',
|
|
601
|
-
message: 'Selecciona
|
|
611
|
+
message: 'Selecciona:',
|
|
602
612
|
choices: availableRules.map(r => ({ name: r, checked: true })),
|
|
603
613
|
pageSize: 15
|
|
604
|
-
}
|
|
614
|
+
}
|
|
615
|
+
]);
|
|
616
|
+
selectedRules = rulesAnswer.rules;
|
|
617
|
+
|
|
618
|
+
// Seleccionar Workflows
|
|
619
|
+
console.log(chalk.bold('\n🔹 Workflows Disponibles:'));
|
|
620
|
+
const workflowsAnswer = await inquirer.prompt([
|
|
605
621
|
{
|
|
606
622
|
type: 'checkbox',
|
|
607
623
|
name: 'workflows',
|
|
608
|
-
message: 'Selecciona
|
|
624
|
+
message: 'Selecciona:',
|
|
609
625
|
choices: availableWorkflows.map(w => ({ name: w, checked: true })),
|
|
610
626
|
pageSize: 15
|
|
611
627
|
}
|
|
612
628
|
]);
|
|
613
|
-
|
|
614
|
-
selectedRules = contentAnswers.rules;
|
|
615
|
-
selectedWorkflows = contentAnswers.workflows;
|
|
629
|
+
selectedWorkflows = workflowsAnswer.workflows;
|
|
616
630
|
|
|
631
|
+
console.log('');
|
|
617
632
|
const { confirm } = await inquirer.prompt([{
|
|
618
633
|
type: 'confirm',
|
|
619
634
|
name: 'confirm',
|
|
@@ -843,6 +858,7 @@ function getAllItems(dir, isNested) {
|
|
|
843
858
|
// ============================================
|
|
844
859
|
|
|
845
860
|
async function runInit(options) {
|
|
861
|
+
let targetIdes = []; // Initialize targetIdes
|
|
846
862
|
console.clear();
|
|
847
863
|
const branding = figlet.textSync('LMAGENT', { font: 'ANSI Shadow' });
|
|
848
864
|
console.log(gradient.pastel.multiline(branding));
|
|
@@ -896,36 +912,72 @@ async function runInit(options) {
|
|
|
896
912
|
}))
|
|
897
913
|
}
|
|
898
914
|
]);
|
|
899
|
-
filesToCopy = INIT_FILES.filter(f => answers.files.includes(f.src));
|
|
900
915
|
dirsToCopy = INIT_DIRS.filter(d => answers.dirs.includes(d.src));
|
|
916
|
+
|
|
917
|
+
// Seleccionar IDE para destino de archivos
|
|
918
|
+
console.log('');
|
|
919
|
+
const ideAnswer = await inquirer.prompt([
|
|
920
|
+
{
|
|
921
|
+
type: 'checkbox',
|
|
922
|
+
name: 'ides',
|
|
923
|
+
message: 'Selecciona tu IDE principal (para ubicar las carpetas):',
|
|
924
|
+
choices: IDE_CONFIGS.filter(i => i.value !== 'custom').map(i => ({
|
|
925
|
+
name: i.name,
|
|
926
|
+
value: i.value,
|
|
927
|
+
checked: i.value === 'cursor'
|
|
928
|
+
}))
|
|
929
|
+
}
|
|
930
|
+
]);
|
|
931
|
+
targetIdes = IDE_CONFIGS.filter(i => ideAnswer.ides.includes(i.value));
|
|
932
|
+
} else {
|
|
933
|
+
// Defaults for non-interactive
|
|
934
|
+
targetIdes = [IDE_CONFIGS.find(i => i.value === 'cursor')];
|
|
901
935
|
}
|
|
902
936
|
|
|
903
|
-
// Copiar archivos
|
|
904
|
-
console.log(chalk.bold('\n
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
937
|
+
// Copiar archivos del framework a la carpeta del Agente (Clean Root)
|
|
938
|
+
console.log(chalk.bold('\n📦 Instalando framework en directorios de Agente:'));
|
|
939
|
+
|
|
940
|
+
for (const ide of targetIdes) {
|
|
941
|
+
if (!ide.skillsDir) continue; // Skip custom/manual if no dir defined
|
|
942
|
+
|
|
943
|
+
// Determinar "Agent Root" (ej: .cursor/ o .github/)
|
|
944
|
+
// Asume que skillsDir es "root/skills", así que dirname obtiene "root"
|
|
945
|
+
const agentRootDir = path.join(targetRoot, path.dirname(ide.skillsDir));
|
|
946
|
+
|
|
947
|
+
console.log(chalk.dim(` Destino: ${agentRootDir}`));
|
|
948
|
+
|
|
949
|
+
// Crear directorio root si no existe
|
|
950
|
+
if (!fs.existsSync(agentRootDir)) fs.mkdirSync(agentRootDir, { recursive: true });
|
|
951
|
+
|
|
952
|
+
// Copiar Archivos (AGENTS.md, etc - EXCEPTO CLAUDE.md que suele ir en root)
|
|
953
|
+
for (const file of filesToCopy) {
|
|
954
|
+
if (file.src === 'CLAUDE.md') {
|
|
955
|
+
// CLAUDE.md se queda en projectRoot para visibilidad inmediata si se usa Claude
|
|
956
|
+
// Opcional: Podríamos moverlo también, pero por ahora lo dejamos en root para compatibilidad
|
|
957
|
+
const dest = path.join(projectRoot, file.src);
|
|
958
|
+
if (fs.existsSync(path.join(__dirname, file.src))) {
|
|
959
|
+
fs.copyFileSync(path.join(__dirname, file.src), dest);
|
|
960
|
+
console.log(` ${chalk.green('✔')} ${file.src} (Project Root)`);
|
|
961
|
+
}
|
|
962
|
+
continue;
|
|
963
|
+
}
|
|
964
|
+
|
|
965
|
+
const src = path.join(__dirname, file.src);
|
|
966
|
+
const dest = path.join(agentRootDir, file.src);
|
|
967
|
+
if (fs.existsSync(src)) {
|
|
968
|
+
fs.copyFileSync(src, dest);
|
|
969
|
+
console.log(` ${chalk.green('✔')} ${file.src} -> ${path.dirname(ide.skillsDir)}/${file.src}`);
|
|
970
|
+
}
|
|
914
971
|
}
|
|
915
|
-
}
|
|
916
972
|
|
|
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)')}`);
|
|
973
|
+
// Copiar Directorios (docs, config, templates)
|
|
974
|
+
for (const dir of dirsToCopy) {
|
|
975
|
+
const src = path.join(__dirname, dir.src);
|
|
976
|
+
const dest = path.join(agentRootDir, dir.src);
|
|
977
|
+
if (fs.existsSync(src)) {
|
|
978
|
+
copyRecursiveSync(src, dest, true); // Force overwrite
|
|
979
|
+
console.log(` ${chalk.green('✔')} ${dir.src}/ -> ${path.dirname(ide.skillsDir)}/${dir.src}/`);
|
|
980
|
+
}
|
|
929
981
|
}
|
|
930
982
|
}
|
|
931
983
|
|
|
@@ -965,7 +1017,7 @@ DEBUG=true
|
|
|
965
1017
|
}
|
|
966
1018
|
|
|
967
1019
|
// Resumen
|
|
968
|
-
console.log(gradient.pastel.multiline('\n✨ Proyecto inicializado con LMAgent v2.
|
|
1020
|
+
console.log(gradient.pastel.multiline('\n✨ Proyecto inicializado con LMAgent v2.7.0 ✨'));
|
|
969
1021
|
console.log('');
|
|
970
1022
|
console.log(chalk.cyan('Próximos pasos:'));
|
|
971
1023
|
console.log(` 1. ${chalk.bold('lmagent install')} - Instalar skills/rules/workflows en tu IDE`);
|
package/package.json
CHANGED
|
@@ -3,7 +3,22 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "2.
|
|
6
|
+
"version": "2.7.0",
|
|
7
|
+
"files": [
|
|
8
|
+
"install.js",
|
|
9
|
+
"README.md",
|
|
10
|
+
"LICENSE",
|
|
11
|
+
"AGENTS.md",
|
|
12
|
+
"CLAUDE.md",
|
|
13
|
+
"CONTRIBUTING.md",
|
|
14
|
+
"config",
|
|
15
|
+
"docs",
|
|
16
|
+
"rules",
|
|
17
|
+
"scripts",
|
|
18
|
+
"skills",
|
|
19
|
+
"templates",
|
|
20
|
+
"workflows"
|
|
21
|
+
],
|
|
7
22
|
"description": "CLI to install LMAgent skills and rules into your IDE",
|
|
8
23
|
"main": "install.js",
|
|
9
24
|
"bin": {
|
package/rules/_bootstrap.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 🚀 LMAgent Bootstrap — Instrucciones Iniciales
|
|
2
2
|
|
|
3
|
-
> **Tipo**: `rule` | **Versión**: 2.
|
|
3
|
+
> **Tipo**: `rule` | **Versión**: 2.7.0 | **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.
|
|
18
|
+
Estás trabajando con **LMAgent v2.7.0**. 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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* LMAgent Skill Generator — v2.
|
|
4
|
+
* LMAgent Skill Generator — v2.7.0
|
|
5
5
|
*
|
|
6
6
|
* Genera la estructura completa de un nuevo skill interactivamente.
|
|
7
7
|
*
|
|
@@ -92,7 +92,7 @@ name: ${data.name}
|
|
|
92
92
|
description: ${data.description}
|
|
93
93
|
role: ${data.role}
|
|
94
94
|
type: ${data.type}
|
|
95
|
-
version: 2.
|
|
95
|
+
version: 2.7
|
|
96
96
|
icon: ${data.icon}
|
|
97
97
|
expertise:
|
|
98
98
|
${expertise}
|
|
@@ -206,13 +206,13 @@ Antes de considerar una tarea terminada, verifica TODO:
|
|
|
206
206
|
|
|
207
207
|
---
|
|
208
208
|
|
|
209
|
-
*Skill version: 2.
|
|
209
|
+
*Skill version: 2.7 | LMAgent Framework*
|
|
210
210
|
`;
|
|
211
211
|
}
|
|
212
212
|
|
|
213
213
|
// ─── Main ─────────────────────────────────────────────────────
|
|
214
214
|
async function main() {
|
|
215
|
-
console.log(c.bold('\n🛠️ LMAgent Skill Generator v2.
|
|
215
|
+
console.log(c.bold('\n🛠️ LMAgent Skill Generator v2.7.0\n'));
|
|
216
216
|
|
|
217
217
|
const prompt = createPrompt();
|
|
218
218
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* LMAgent Skills Validator — v2.
|
|
4
|
+
* LMAgent Skills Validator — v2.7.0
|
|
5
5
|
*
|
|
6
6
|
* Valida la integridad de todos los skills del framework.
|
|
7
7
|
* Verifica: frontmatter YAML, campos obligatorios, estructura de directorio.
|
|
@@ -29,7 +29,7 @@ const SKILLS_DIR = join(ROOT, 'skills');
|
|
|
29
29
|
// ─── Configuración ────────────────────────────────────────────
|
|
30
30
|
const REQUIRED_FIELDS = ['name', 'description', 'role', 'type', 'version', 'icon', 'expertise', 'activates_on', 'triggers'];
|
|
31
31
|
const VALID_TYPES = ['agent_persona', 'methodology'];
|
|
32
|
-
const CURRENT_VERSION = 2.
|
|
32
|
+
const CURRENT_VERSION = 2.7;
|
|
33
33
|
const OPTIONAL_DIRS = ['scripts', 'references', 'assets'];
|
|
34
34
|
|
|
35
35
|
// ─── Colores (sin dependencias) ───────────────────────────────
|
|
@@ -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.7.0\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/'));
|
|
@@ -3,7 +3,7 @@ name: AI Agent Engineer
|
|
|
3
3
|
description: Especialista en diseño, desarrollo y optimización de agentes de inteligencia artificial y flujos RAG.
|
|
4
4
|
role: Diseño y Desarrollo de Agentes IA
|
|
5
5
|
type: agent_persona
|
|
6
|
-
version: 2.
|
|
6
|
+
version: 2.7
|
|
7
7
|
icon: 🤖
|
|
8
8
|
expertise:
|
|
9
9
|
- LLM integration
|
|
@@ -3,7 +3,7 @@ name: API Designer
|
|
|
3
3
|
description: Arquitecto de APIs REST y GraphQL con enfoque en diseño consistente, documentación OpenAPI y experiencia del desarrollador.
|
|
4
4
|
role: Especialista en Diseño de APIs y Developer Experience
|
|
5
5
|
type: agent_persona
|
|
6
|
-
version: 2.
|
|
6
|
+
version: 2.7
|
|
7
7
|
icon: 🔌
|
|
8
8
|
expertise:
|
|
9
9
|
- REST API design
|
|
@@ -426,4 +426,4 @@ components:
|
|
|
426
426
|
|
|
427
427
|
---
|
|
428
428
|
|
|
429
|
-
|
|
429
|
+
|
|
@@ -3,7 +3,7 @@ name: Architect
|
|
|
3
3
|
description: Diseño de arquitectura de software, patrones de diseño y estructuración de sistemas robustos.
|
|
4
4
|
role: Senior Solutions Architect - Diseño de Sistemas Distribuidos
|
|
5
5
|
type: agent_persona
|
|
6
|
-
version: 2.
|
|
6
|
+
version: 2.7
|
|
7
7
|
icon: 🏛️
|
|
8
8
|
expertise:
|
|
9
9
|
- System Design
|
|
@@ -3,7 +3,7 @@ name: Backend Engineer
|
|
|
3
3
|
description: Desarrollo de lógica de servidor, gestión de bases de datos, APIs y servicios escalables.
|
|
4
4
|
role: Senior Backend Engineer & Tech Lead - Ingeniería de Software Robusta
|
|
5
5
|
type: agent_persona
|
|
6
|
-
version: 2.
|
|
6
|
+
version: 2.7
|
|
7
7
|
icon: ⚙️
|
|
8
8
|
expertise:
|
|
9
9
|
- Python 3.12+ (FastAPI, SQLModel, Pydantic v2)
|
|
@@ -3,7 +3,7 @@ name: BMAD Methodology
|
|
|
3
3
|
description: Experto en la aplicación de la metodología Best Model Agent Driven (BMAD).
|
|
4
4
|
role: Scale-Adaptive Intelligence & Project Orchestration
|
|
5
5
|
type: methodology
|
|
6
|
-
version: 2.
|
|
6
|
+
version: 2.7
|
|
7
7
|
icon: 🧠
|
|
8
8
|
expertise:
|
|
9
9
|
- Scale-Adaptive Intelligence (Levels 0-4)
|
|
@@ -198,5 +198,5 @@ BMAD coordina personas según la fase del proyecto:
|
|
|
198
198
|
|
|
199
199
|
---
|
|
200
200
|
|
|
201
|
-
|
|
201
|
+
|
|
202
202
|
*Compatible con: Spec-Driven Development + SWE-Agent*
|
|
@@ -3,7 +3,7 @@ name: Browser Agent
|
|
|
3
3
|
description: Automatización inteligente de navegador con Playwright/Puppeteer para scraping, auditorías, flujos interactivos y extracción de datos.
|
|
4
4
|
role: Automatización de Navegador para Agentes IA
|
|
5
5
|
type: agent_persona
|
|
6
|
-
version: 2.
|
|
6
|
+
version: 2.7
|
|
7
7
|
icon: 🌐
|
|
8
8
|
expertise:
|
|
9
9
|
- Browser Automation (Playwright, Puppeteer)
|
|
@@ -3,7 +3,7 @@ name: Code Reviewer
|
|
|
3
3
|
description: Especialista en revisiones de código sistemáticas, asegurando calidad, seguridad y mantenibilidad.
|
|
4
4
|
role: Experto en Code Review y Calidad de Código
|
|
5
5
|
type: agent_persona
|
|
6
|
-
version: 2.
|
|
6
|
+
version: 2.7
|
|
7
7
|
icon: 🔍
|
|
8
8
|
expertise:
|
|
9
9
|
- Code review sistemático
|
|
@@ -303,4 +303,4 @@ def add_item(item, items=None):
|
|
|
303
303
|
|
|
304
304
|
---
|
|
305
305
|
|
|
306
|
-
|
|
306
|
+
|
|
@@ -3,7 +3,7 @@ name: Data Engineer / DBA
|
|
|
3
3
|
description: Gestión de pipelines de datos, almacenamiento, procesamiento y análisis de información.
|
|
4
4
|
role: Diseño y Administración de Bases de Datos
|
|
5
5
|
type: agent_persona
|
|
6
|
-
version: 2.
|
|
6
|
+
version: 2.7
|
|
7
7
|
icon: 🗜️
|
|
8
8
|
expertise:
|
|
9
9
|
- PostgreSQL/MySQL
|
|
@@ -3,7 +3,7 @@ name: DevOps Engineer
|
|
|
3
3
|
description: Configuración de CI/CD, infraestructura en la nube, contenedores y automatización de despliegues.
|
|
4
4
|
role: Infrastructure, CI/CD y Operaciones
|
|
5
5
|
type: agent_persona
|
|
6
|
-
version: 2.
|
|
6
|
+
version: 2.7
|
|
7
7
|
icon: 🚀
|
|
8
8
|
expertise:
|
|
9
9
|
- Docker/Kubernetes
|
|
@@ -3,7 +3,7 @@ name: Document Generator
|
|
|
3
3
|
description: Generación programática de documentos formales (PDF, DOCX, XLSX, PPTX) con librerías especializadas.
|
|
4
4
|
role: Generación de Documentos de Oficina
|
|
5
5
|
type: agent_persona
|
|
6
|
-
version: 2.
|
|
6
|
+
version: 2.7
|
|
7
7
|
icon: 📄
|
|
8
8
|
expertise:
|
|
9
9
|
- PDF Generation (pdfmake, jsPDF, Puppeteer)
|
|
@@ -3,7 +3,7 @@ name: Frontend Engineer
|
|
|
3
3
|
description: Desarrollo de interfaces de usuario modernas, responsivas y centradas en la experiencia del usuario.
|
|
4
4
|
role: Desarrollo de Interfaces de Usuario
|
|
5
5
|
type: agent_persona
|
|
6
|
-
version: 2.
|
|
6
|
+
version: 2.7
|
|
7
7
|
icon: 🎨
|
|
8
8
|
expertise:
|
|
9
9
|
- React 18+ / Next.js 14+
|
|
@@ -3,7 +3,7 @@ name: Git Workflow
|
|
|
3
3
|
description: Experto en estrategias de branching, flujos de trabajo Git, y gestión de releases.
|
|
4
4
|
role: Especialista en Git Workflows y Release Management
|
|
5
5
|
type: agent_persona
|
|
6
|
-
version: 2.
|
|
6
|
+
version: 2.7
|
|
7
7
|
icon: 🌿
|
|
8
8
|
expertise:
|
|
9
9
|
- Git branching strategies
|
|
@@ -371,4 +371,4 @@ git rebase --abort # Volver al estado anterior
|
|
|
371
371
|
|
|
372
372
|
---
|
|
373
373
|
|
|
374
|
-
|
|
374
|
+
|
|
@@ -3,7 +3,7 @@ name: MCP Builder
|
|
|
3
3
|
description: Experto en construir MCP Servers, Tools, Resources y Prompts para extender agentes de IA.
|
|
4
4
|
role: Especialista en Model Context Protocol y Agent Tooling
|
|
5
5
|
type: agent_persona
|
|
6
|
-
version: 2.
|
|
6
|
+
version: 2.7
|
|
7
7
|
icon: 🔧
|
|
8
8
|
expertise:
|
|
9
9
|
- Model Context Protocol (MCP)
|
|
@@ -468,4 +468,4 @@ return {
|
|
|
468
468
|
|
|
469
469
|
---
|
|
470
470
|
|
|
471
|
-
|
|
471
|
+
|
|
@@ -3,7 +3,7 @@ name: Mobile Engineer
|
|
|
3
3
|
description: Desarrollo de aplicaciones móviles utilizando React Native, Expo y otras tecnologías nativas.
|
|
4
4
|
role: Desarrollo de Aplicaciones Móviles
|
|
5
5
|
type: agent_persona
|
|
6
|
-
version: 2.
|
|
6
|
+
version: 2.7
|
|
7
7
|
icon: 📱
|
|
8
8
|
expertise:
|
|
9
9
|
- React Native / Expo
|
|
@@ -3,7 +3,7 @@ name: Orchestrator
|
|
|
3
3
|
description: Agente orquestador encargado de dirigir las solicitudes al experto más adecuado.
|
|
4
4
|
role: Meta-Agent que decide qué persona y workflow activar
|
|
5
5
|
type: agent_persona
|
|
6
|
-
version: 2.
|
|
6
|
+
version: 2.7
|
|
7
7
|
icon: 🎯
|
|
8
8
|
expertise:
|
|
9
9
|
- Task classification
|
|
@@ -3,7 +3,7 @@ name: Performance Engineer
|
|
|
3
3
|
description: Especialista en identificación y resolución de cuellos de botella para optimizar el rendimiento y la escalabilidad.
|
|
4
4
|
role: Optimización de Rendimiento y Escalabilidad
|
|
5
5
|
type: agent_persona
|
|
6
|
-
version: 2.
|
|
6
|
+
version: 2.7
|
|
7
7
|
icon: 🏎️
|
|
8
8
|
expertise:
|
|
9
9
|
- Performance profiling
|
|
@@ -3,7 +3,7 @@ name: Product Manager
|
|
|
3
3
|
description: Definición de la visión del producto, roadmap y requisitos detallados para maximizar el valor al usuario.
|
|
4
4
|
role: Senior Product Manager - Estrategia y Visión de Producto
|
|
5
5
|
type: agent_persona
|
|
6
|
-
version: 2.
|
|
6
|
+
version: 2.7
|
|
7
7
|
icon: 📊
|
|
8
8
|
expertise:
|
|
9
9
|
- Product Strategy
|
|
@@ -3,7 +3,7 @@ name: Prompt Engineer
|
|
|
3
3
|
description: Optimización de prompts para maximizar la calidad, precisión y razonamiento de los outputs de los LLMs.
|
|
4
4
|
role: Ingeniería de Prompts y Arquitectura Cognitiva
|
|
5
5
|
type: agent_persona
|
|
6
|
-
version: 2.
|
|
6
|
+
version: 2.7
|
|
7
7
|
icon: 🧠
|
|
8
8
|
expertise:
|
|
9
9
|
- Advanced Prompting (CoT, ToT, ReAct)
|
|
@@ -3,7 +3,7 @@ name: QA Engineer
|
|
|
3
3
|
description: Aseguramiento de la calidad mediante pruebas automatizadas, manuales y validación rigurosa de criterios de aceptación.
|
|
4
4
|
role: Testing y Aseguramiento de Calidad
|
|
5
5
|
type: agent_persona
|
|
6
|
-
version: 2.
|
|
6
|
+
version: 2.7
|
|
7
7
|
icon: 🧪
|
|
8
8
|
expertise:
|
|
9
9
|
- Unit testing (pytest, jest)
|
|
@@ -3,7 +3,7 @@ name: Scrum Master
|
|
|
3
3
|
description: Facilitador de metodologías ágiles enfocado en la eliminación de obstáculos y la mejora continua del equipo.
|
|
4
4
|
role: Agile Coach & Senior Scrum Master - Facilitador de Alto Rendimiento
|
|
5
5
|
type: agent_persona
|
|
6
|
-
version: 2.
|
|
6
|
+
version: 2.7
|
|
7
7
|
icon: 🏉
|
|
8
8
|
expertise:
|
|
9
9
|
- Agile Methodologies (Scrum, Kanban, XP)
|
|
@@ -3,7 +3,7 @@ name: Security Analyst
|
|
|
3
3
|
description: Auditoría de vulnerabilidades, protección de datos y cumplimiento de estándares de seguridad internacionales.
|
|
4
4
|
role: Seguridad y Compliance
|
|
5
5
|
type: agent_persona
|
|
6
|
-
version: 2.
|
|
6
|
+
version: 2.7
|
|
7
7
|
icon: 🛡️
|
|
8
8
|
expertise:
|
|
9
9
|
- Application security
|
|
@@ -3,7 +3,7 @@ name: SEO Auditor
|
|
|
3
3
|
description: Auditoría técnica completa de sitios web incluyendo SEO on-page, Core Web Vitals, accesibilidad WCAG, schema markup y Open Graph.
|
|
4
4
|
role: Auditoría Web y SEO Técnico
|
|
5
5
|
type: agent_persona
|
|
6
|
-
version: 2.
|
|
6
|
+
version: 2.7
|
|
7
7
|
icon: 🔎
|
|
8
8
|
expertise:
|
|
9
9
|
- SEO On-Page & Technical SEO
|
|
@@ -3,7 +3,7 @@ name: Spec-Driven Agentic Development
|
|
|
3
3
|
description: Metodología de desarrollo basada rigurosamente en especificaciones y contratos técnicos para garantizar trazabilidad.
|
|
4
4
|
role: Development Methodology - Specification as Source of Truth
|
|
5
5
|
type: methodology
|
|
6
|
-
version: 2.
|
|
6
|
+
version: 2.7
|
|
7
7
|
icon: 📋
|
|
8
8
|
expertise:
|
|
9
9
|
- Specification-first development
|
|
@@ -338,5 +338,5 @@ User Input → Orchestrator clasifica nivel
|
|
|
338
338
|
|
|
339
339
|
---
|
|
340
340
|
|
|
341
|
-
|
|
341
|
+
|
|
342
342
|
*Compatible con: BMAD-METHOD + SWE-Agent*
|
|
@@ -3,7 +3,7 @@ name: Supabase Expert
|
|
|
3
3
|
description: Especialista en Supabase, incluyendo PostgreSQL, RLS, Edge Functions, Auth, Realtime y Storage.
|
|
4
4
|
role: Experto en Supabase Platform & PostgreSQL
|
|
5
5
|
type: agent_persona
|
|
6
|
-
version: 2.
|
|
6
|
+
version: 2.7
|
|
7
7
|
icon: ⚡
|
|
8
8
|
expertise:
|
|
9
9
|
- Supabase platform
|
|
@@ -599,4 +599,4 @@ CREATE INDEX idx_users_auth_id ON public.users(auth_id);
|
|
|
599
599
|
|
|
600
600
|
---
|
|
601
601
|
|
|
602
|
-
|
|
602
|
+
|
|
@@ -3,7 +3,7 @@ name: SWE-Agent
|
|
|
3
3
|
description: Agente de ingeniería de software especializado en la resolución autónoma de issues y refactorización sistemática.
|
|
4
4
|
role: Autonomous Software Engineering Agent
|
|
5
5
|
type: methodology
|
|
6
|
-
version: 2.
|
|
6
|
+
version: 2.7
|
|
7
7
|
icon: 🔧
|
|
8
8
|
expertise:
|
|
9
9
|
- Autonomous issue resolution
|
|
@@ -307,5 +307,5 @@ SWE-Agent utiliza el sistema de herramientas definido en el framework:
|
|
|
307
307
|
|
|
308
308
|
---
|
|
309
309
|
|
|
310
|
-
|
|
310
|
+
|
|
311
311
|
*Compatible con: BMAD-METHOD + Spec-Driven Development*
|
|
@@ -3,7 +3,7 @@ name: Systematic Debugger
|
|
|
3
3
|
description: Metodología rigurosa de debugging en 4 fases para encontrar la causa raíz antes de aplicar cualquier fix.
|
|
4
4
|
role: Debugging Metódico y Resolución de Problemas
|
|
5
5
|
type: agent_persona
|
|
6
|
-
version: 2.
|
|
6
|
+
version: 2.7
|
|
7
7
|
icon: 🔍
|
|
8
8
|
activates_on:
|
|
9
9
|
- Debugging de bugs y errores
|
|
@@ -3,7 +3,7 @@ name: Tech Lead
|
|
|
3
3
|
description: Liderazgo técnico, revisión de código crítica y establecimiento de mejores prácticas de ingeniería de software.
|
|
4
4
|
role: Liderazgo Técnico y Mentorship
|
|
5
5
|
type: agent_persona
|
|
6
|
-
version: 2.
|
|
6
|
+
version: 2.7
|
|
7
7
|
icon: 🧭
|
|
8
8
|
expertise:
|
|
9
9
|
- Technical decision making
|
|
@@ -3,7 +3,7 @@ name: Technical Writer
|
|
|
3
3
|
description: Creación de documentación técnica clara, manuales de usuario y guías que reducen la curva de aprendizaje.
|
|
4
4
|
role: Documentación Técnica y Comunicación
|
|
5
5
|
type: agent_persona
|
|
6
|
-
version: 2.
|
|
6
|
+
version: 2.7
|
|
7
7
|
icon: 📝
|
|
8
8
|
expertise:
|
|
9
9
|
- API documentation
|
|
@@ -3,7 +3,7 @@ name: Testing Strategist
|
|
|
3
3
|
description: Experto en estrategias de testing automatizado, TDD/BDD, y frameworks de testing modernos.
|
|
4
4
|
role: Especialista en Testing Strategy y Quality Assurance Automation
|
|
5
5
|
type: agent_persona
|
|
6
|
-
version: 2.
|
|
6
|
+
version: 2.7
|
|
7
7
|
icon: 🧪
|
|
8
8
|
expertise:
|
|
9
9
|
- Test-Driven Development (TDD)
|
|
@@ -473,4 +473,4 @@ it('should debounce search', async () => {
|
|
|
473
473
|
|
|
474
474
|
---
|
|
475
475
|
|
|
476
|
-
|
|
476
|
+
|
|
@@ -3,7 +3,7 @@ name: UX/UI Designer
|
|
|
3
3
|
description: Diseño visual e interactivo centrado en la usabilidad, estética moderna y accesibilidad universal.
|
|
4
4
|
role: Diseño de Experiencia e Interfaz de Usuario
|
|
5
5
|
type: agent_persona
|
|
6
|
-
version: 2.
|
|
6
|
+
version: 2.7
|
|
7
7
|
icon: 🎨
|
|
8
8
|
expertise:
|
|
9
9
|
- User Experience (UX)
|
package/.editorconfig
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
# EditorConfig helps maintain consistent coding styles
|
|
2
|
-
# https://editorconfig.org
|
|
3
|
-
|
|
4
|
-
root = true
|
|
5
|
-
|
|
6
|
-
[*]
|
|
7
|
-
charset = utf-8
|
|
8
|
-
end_of_line = lf
|
|
9
|
-
insert_final_newline = true
|
|
10
|
-
trim_trailing_whitespace = true
|
|
11
|
-
indent_style = space
|
|
12
|
-
indent_size = 2
|
|
13
|
-
|
|
14
|
-
[*.md]
|
|
15
|
-
trim_trailing_whitespace = false
|
|
16
|
-
|
|
17
|
-
[*.py]
|
|
18
|
-
indent_size = 4
|
package/pyproject.toml
DELETED
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
[project]
|
|
2
|
-
name = "lmagent"
|
|
3
|
-
version = "2.3.0"
|
|
4
|
-
description = "Framework for automation and AI agent development"
|
|
5
|
-
readme = "README.md"
|
|
6
|
-
license = { text = "MIT" }
|
|
7
|
-
requires-python = ">=3.12"
|
|
8
|
-
authors = [
|
|
9
|
-
{ name = "QuBiit0", email = "info@leandroalvarez.com.ar" }
|
|
10
|
-
]
|
|
11
|
-
keywords = [
|
|
12
|
-
"ai",
|
|
13
|
-
"agents",
|
|
14
|
-
"automation",
|
|
15
|
-
"llm",
|
|
16
|
-
"framework",
|
|
17
|
-
"mcp"
|
|
18
|
-
]
|
|
19
|
-
classifiers = [
|
|
20
|
-
"Development Status :: 5 - Production/Stable",
|
|
21
|
-
"Intended Audience :: Developers",
|
|
22
|
-
"License :: OSI Approved :: MIT License",
|
|
23
|
-
"Programming Language :: Python :: 3",
|
|
24
|
-
"Programming Language :: Python :: 3.12",
|
|
25
|
-
"Programming Language :: Python :: 3.13",
|
|
26
|
-
"Topic :: Software Development :: Libraries :: Application Frameworks",
|
|
27
|
-
"Topic :: Scientific/Engineering :: Artificial Intelligence",
|
|
28
|
-
]
|
|
29
|
-
|
|
30
|
-
dependencies = [
|
|
31
|
-
"pydantic>=2.10",
|
|
32
|
-
"pydantic-settings>=2.4",
|
|
33
|
-
"pyyaml>=6.0",
|
|
34
|
-
"structlog>=24.1",
|
|
35
|
-
"httpx>=0.27",
|
|
36
|
-
"python-dotenv>=1.0",
|
|
37
|
-
"fastapi>=0.115",
|
|
38
|
-
"sqlmodel>=0.0.22",
|
|
39
|
-
"litellm>=1.45",
|
|
40
|
-
]
|
|
41
|
-
|
|
42
|
-
[project.optional-dependencies]
|
|
43
|
-
dev = [
|
|
44
|
-
"pytest>=8.0",
|
|
45
|
-
"pytest-asyncio>=0.23",
|
|
46
|
-
"pytest-cov>=5.0",
|
|
47
|
-
"ruff>=0.5",
|
|
48
|
-
"mypy>=1.10",
|
|
49
|
-
"pre-commit>=3.7",
|
|
50
|
-
]
|
|
51
|
-
llm = [
|
|
52
|
-
"openai>=1.40",
|
|
53
|
-
"anthropic>=0.30",
|
|
54
|
-
"google-generativeai>=0.7",
|
|
55
|
-
"litellm>=1.45",
|
|
56
|
-
"langchain>=0.2.10",
|
|
57
|
-
"langgraph>=0.1.5",
|
|
58
|
-
]
|
|
59
|
-
tools = [
|
|
60
|
-
"aiohttp>=3.10",
|
|
61
|
-
"asyncpg>=0.29",
|
|
62
|
-
"redis>=5.0",
|
|
63
|
-
"pandas>=2.2",
|
|
64
|
-
]
|
|
65
|
-
all = [
|
|
66
|
-
"lmagent[dev]",
|
|
67
|
-
"lmagent[llm]",
|
|
68
|
-
"lmagent[tools]",
|
|
69
|
-
]
|
|
70
|
-
|
|
71
|
-
[project.urls]
|
|
72
|
-
Homepage = "https://github.com/QuBiit0/lmagent"
|
|
73
|
-
Documentation = "https://github.com/QuBiit0/lmagent#readme"
|
|
74
|
-
Repository = "https://github.com/QuBiit0/lmagent"
|
|
75
|
-
Issues = "https://github.com/QuBiit0/lmagent/issues"
|
|
76
|
-
|
|
77
|
-
# [build-system]
|
|
78
|
-
# requires = ["hatchling"]
|
|
79
|
-
# build-backend = "hatchling.build"
|
|
80
|
-
|
|
81
|
-
# [tool.hatch.build.targets.wheel]
|
|
82
|
-
# packages = ["agents"]
|
|
83
|
-
|
|
84
|
-
# ============================================
|
|
85
|
-
# RUFF (Linter & Formatter)
|
|
86
|
-
# ============================================
|
|
87
|
-
|
|
88
|
-
[tool.ruff]
|
|
89
|
-
target-version = "py312"
|
|
90
|
-
line-length = 100
|
|
91
|
-
exclude = [
|
|
92
|
-
".git",
|
|
93
|
-
".venv",
|
|
94
|
-
"venv",
|
|
95
|
-
"__pycache__",
|
|
96
|
-
"node_modules",
|
|
97
|
-
".ruff_cache",
|
|
98
|
-
]
|
|
99
|
-
|
|
100
|
-
[tool.ruff.lint]
|
|
101
|
-
select = [
|
|
102
|
-
"E", # pycodestyle errors
|
|
103
|
-
"W", # pycodestyle warnings
|
|
104
|
-
"F", # pyflakes
|
|
105
|
-
"I", # isort
|
|
106
|
-
"B", # flake8-bugbear
|
|
107
|
-
"C4", # flake8-comprehensions
|
|
108
|
-
"UP", # pyupgrade
|
|
109
|
-
"ARG", # flake8-unused-arguments
|
|
110
|
-
"SIM", # flake8-simplify
|
|
111
|
-
]
|
|
112
|
-
ignore = [
|
|
113
|
-
"E501", # line too long (handled by formatter)
|
|
114
|
-
"B008", # do not perform function calls in argument defaults
|
|
115
|
-
]
|
|
116
|
-
|
|
117
|
-
[tool.ruff.lint.isort]
|
|
118
|
-
known-first-party = ["agents", "lmagent"]
|
|
119
|
-
|
|
120
|
-
[tool.ruff.format]
|
|
121
|
-
quote-style = "double"
|
|
122
|
-
indent-style = "space"
|
|
123
|
-
skip-magic-trailing-comma = false
|
|
124
|
-
|
|
125
|
-
# ============================================
|
|
126
|
-
# MYPY (Type Checking)
|
|
127
|
-
# ============================================
|
|
128
|
-
|
|
129
|
-
[tool.mypy]
|
|
130
|
-
python_version = "3.12"
|
|
131
|
-
warn_return_any = true
|
|
132
|
-
warn_unused_ignores = true
|
|
133
|
-
disallow_untyped_defs = true
|
|
134
|
-
disallow_incomplete_defs = true
|
|
135
|
-
check_untyped_defs = true
|
|
136
|
-
ignore_missing_imports = true
|
|
137
|
-
exclude = [
|
|
138
|
-
"tests",
|
|
139
|
-
"venv",
|
|
140
|
-
".venv",
|
|
141
|
-
]
|
|
142
|
-
|
|
143
|
-
# ============================================
|
|
144
|
-
# PYTEST
|
|
145
|
-
# ============================================
|
|
146
|
-
|
|
147
|
-
[tool.pytest.ini_options]
|
|
148
|
-
minversion = "7.0"
|
|
149
|
-
asyncio_mode = "auto"
|
|
150
|
-
testpaths = ["tests"]
|
|
151
|
-
python_files = ["test_*.py", "*_test.py"]
|
|
152
|
-
python_functions = ["test_*"]
|
|
153
|
-
addopts = [
|
|
154
|
-
"-v",
|
|
155
|
-
"--tb=short",
|
|
156
|
-
"--strict-markers",
|
|
157
|
-
]
|
|
158
|
-
markers = [
|
|
159
|
-
"slow: marks tests as slow",
|
|
160
|
-
"integration: marks tests as integration tests",
|
|
161
|
-
]
|
|
162
|
-
filterwarnings = [
|
|
163
|
-
"ignore::DeprecationWarning",
|
|
164
|
-
]
|
|
165
|
-
|
|
166
|
-
[tool.coverage.run]
|
|
167
|
-
source = ["agents"]
|
|
168
|
-
branch = true
|
|
169
|
-
omit = [
|
|
170
|
-
"*/tests/*",
|
|
171
|
-
"*/__pycache__/*",
|
|
172
|
-
]
|
|
173
|
-
|
|
174
|
-
[tool.coverage.report]
|
|
175
|
-
exclude_lines = [
|
|
176
|
-
"pragma: no cover",
|
|
177
|
-
"def __repr__",
|
|
178
|
-
"raise NotImplementedError",
|
|
179
|
-
"if __name__ == .__main__.:",
|
|
180
|
-
"if TYPE_CHECKING:",
|
|
181
|
-
]
|
|
182
|
-
fail_under = 80
|