@mcptoolshop/ai-loadout 1.0.2 → 1.0.3
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/CHANGELOG.md +14 -0
- package/README.es.md +103 -101
- package/README.fr.md +103 -101
- package/README.hi.md +103 -101
- package/README.it.md +103 -101
- package/README.ja.md +103 -101
- package/README.md +6 -5
- package/README.pt-BR.md +103 -101
- package/README.zh.md +103 -101
- package/package.json +3 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.0.3 — 2026-03-06
|
|
4
|
+
|
|
5
|
+
- Brand logo URL (mcp-tool-shop-org/brand)
|
|
6
|
+
- Code coverage via c8 + Codecov badge
|
|
7
|
+
- Translations re-done via polyglot-mcp (TranslateGemma 12B)
|
|
8
|
+
- SHIP_GATE.md and SCORECARD.md (shipcheck audit: 100% pass)
|
|
9
|
+
- dependabot.yml (monthly, grouped)
|
|
10
|
+
- .gitignore: site/.astro/, site/dist/, .polyglot-cache.json
|
|
11
|
+
|
|
12
|
+
## 1.0.2 — 2026-03-06
|
|
13
|
+
|
|
14
|
+
- Shipcheck gates added (SHIP_GATE.md, SCORECARD.md)
|
|
15
|
+
- dependabot.yml
|
|
16
|
+
|
|
3
17
|
## 1.0.1 — 2026-03-06
|
|
4
18
|
|
|
5
19
|
- Add `hint` field to `ValidationIssue` (Tier 1 error shape compliance)
|
package/README.es.md
CHANGED
|
@@ -1,35 +1,37 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<a href="README.ja.md">日本語</a> | <a href="README.zh.md">中文</a> | <a href="README.md">English</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.it.md">Italiano</a> | <a href="README.pt-BR.md">Português (BR)</a>
|
|
3
|
+
</p>
|
|
4
|
+
|
|
1
5
|
<p align="center">
|
|
2
|
-
<
|
|
6
|
+
<img src="https://raw.githubusercontent.com/mcp-tool-shop-org/brand/main/logos/ai-loadout/readme.png" width="400" alt="ai-loadout">
|
|
3
7
|
</p>
|
|
4
|
-
|
|
5
|
-
<p align="center">
|
|
6
|
-
<img src="logo.png" width="400" alt="ai-loadout">
|
|
7
|
-
</p>
|
|
8
|
-
|
|
8
|
+
|
|
9
9
|
<p align="center">
|
|
10
10
|
<a href="https://github.com/mcp-tool-shop-org/ai-loadout/actions/workflows/ci.yml"><img src="https://github.com/mcp-tool-shop-org/ai-loadout/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
|
|
11
|
+
<a href="https://codecov.io/gh/mcp-tool-shop-org/ai-loadout"><img src="https://codecov.io/gh/mcp-tool-shop-org/ai-loadout/graph/badge.svg" alt="Coverage"></a>
|
|
11
12
|
<a href="https://www.npmjs.com/package/@mcptoolshop/ai-loadout"><img src="https://img.shields.io/npm/v/@mcptoolshop/ai-loadout" alt="npm"></a>
|
|
12
|
-
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue" alt="
|
|
13
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue" alt="MIT License"></a>
|
|
14
|
+
<a href="https://mcp-tool-shop-org.github.io/ai-loadout/"><img src="https://img.shields.io/badge/Landing_Page-live-blue" alt="Landing Page"></a>
|
|
13
15
|
</p>
|
|
14
|
-
|
|
15
|
-
Enrutador de conocimiento contextual para agentes de IA.
|
|
16
|
-
|
|
17
|
-
`ai-loadout` es el formato de tabla de
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
## Instalación
|
|
22
|
-
|
|
16
|
+
|
|
17
|
+
Enrutador de conocimiento contextual para agentes de IA.
|
|
18
|
+
|
|
19
|
+
`ai-loadout` es el formato de la tabla de distribución y el motor de coincidencia que permite a los agentes de IA cargar el conocimiento adecuado para la tarea en cuestión. En lugar de incluir todo en el contexto, se mantiene un índice pequeño y se cargan los datos según sea necesario.
|
|
20
|
+
|
|
21
|
+
Piénselo como la configuración de un juego: se equipa al agente con exactamente el conocimiento que necesita antes de cada misión.
|
|
22
|
+
|
|
23
|
+
## Instalación
|
|
24
|
+
|
|
23
25
|
```bash
|
|
24
26
|
npm install @mcptoolshop/ai-loadout
|
|
25
27
|
```
|
|
26
|
-
|
|
27
|
-
## Conceptos
|
|
28
|
-
|
|
29
|
-
### La
|
|
30
|
-
|
|
31
|
-
Un `LoadoutIndex` es un índice estructurado de
|
|
32
|
-
|
|
28
|
+
|
|
29
|
+
## Conceptos básicos
|
|
30
|
+
|
|
31
|
+
### La tabla de distribución
|
|
32
|
+
|
|
33
|
+
Un `LoadoutIndex` es un índice estructurado de datos de conocimiento:
|
|
34
|
+
|
|
33
35
|
```json
|
|
34
36
|
{
|
|
35
37
|
"version": "1.0.0",
|
|
@@ -55,19 +57,19 @@ Un `LoadoutIndex` es un índice estructurado de contenidos de conocimiento:
|
|
|
55
57
|
}
|
|
56
58
|
}
|
|
57
59
|
```
|
|
58
|
-
|
|
59
|
-
### Niveles de
|
|
60
|
-
|
|
61
|
-
| Nivel | Comportamiento | Ejemplo |
|
|
62
|
-
|
|
63
|
-
| `core` |
|
|
64
|
-
| `domain` | Cargado cuando las palabras clave de la tarea coinciden | Reglas de
|
|
65
|
-
| `manual` | Nunca se carga automáticamente, solo búsqueda explícita |
|
|
66
|
-
|
|
67
|
-
###
|
|
68
|
-
|
|
69
|
-
Cada archivo de
|
|
70
|
-
|
|
60
|
+
|
|
61
|
+
### Niveles de prioridad
|
|
62
|
+
|
|
63
|
+
| Nivel | Comportamiento | Ejemplo |
|
|
64
|
+
|------|----------|---------|
|
|
65
|
+
| `core` | Cargado siempre | "nunca omitir pruebas para que la integración continua sea exitosa" |
|
|
66
|
+
| `domain` | Cargado cuando las palabras clave de la tarea coinciden | Reglas de integración continua al editar flujos de trabajo |
|
|
67
|
+
| `manual` | Nunca se carga automáticamente, solo búsqueda explícita | Aspectos técnicos de la plataforma que pueden ser difíciles de entender |
|
|
68
|
+
|
|
69
|
+
### Metadatos del archivo de datos
|
|
70
|
+
|
|
71
|
+
Cada archivo de datos contiene sus propios metadatos de enrutamiento:
|
|
72
|
+
|
|
71
73
|
```markdown
|
|
72
74
|
---
|
|
73
75
|
id: github-actions
|
|
@@ -83,41 +85,41 @@ triggers:
|
|
|
83
85
|
# GitHub Actions Rules
|
|
84
86
|
CI minutes are finite...
|
|
85
87
|
```
|
|
86
|
-
|
|
87
|
-
El
|
|
88
|
-
|
|
89
|
-
## API
|
|
90
|
-
|
|
91
|
-
### `matchLoadout(
|
|
92
|
-
|
|
93
|
-
Compara una descripción de tarea
|
|
94
|
-
|
|
88
|
+
|
|
89
|
+
El metadato es la fuente de la verdad. El índice se deriva de él.
|
|
90
|
+
|
|
91
|
+
## API
|
|
92
|
+
|
|
93
|
+
### `matchLoadout(tarea, índice)`
|
|
94
|
+
|
|
95
|
+
Compara una descripción de la tarea con un índice de configuración. Devuelve las entradas que deben cargarse, clasificadas por la fuerza de la coincidencia.
|
|
96
|
+
|
|
95
97
|
```typescript
|
|
96
98
|
import { matchLoadout } from "@mcptoolshop/ai-loadout";
|
|
97
99
|
|
|
98
100
|
const results = matchLoadout("fix the CI workflow", index);
|
|
99
101
|
// [{ entry: { id: "github-actions", ... }, score: 0.67, matchedKeywords: ["ci", "workflow"] }]
|
|
100
102
|
```
|
|
101
|
-
|
|
102
|
-
- Las entradas
|
|
103
|
-
- Las entradas
|
|
104
|
-
- Las entradas
|
|
105
|
-
- Los resultados se ordenan por puntuación descendente
|
|
106
|
-
|
|
107
|
-
### `lookupEntry(id,
|
|
108
|
-
|
|
109
|
-
Busca una entrada específica por ID. Para entradas manuales o acceso explícito.
|
|
110
|
-
|
|
103
|
+
|
|
104
|
+
- Las entradas principales siempre se incluyen (puntuación 1.0)
|
|
105
|
+
- Las entradas manuales nunca se incluyen automáticamente
|
|
106
|
+
- Las entradas de dominio se puntúan según la superposición de palabras clave + bonificación de patrones
|
|
107
|
+
- Los resultados se ordenan por puntuación descendente
|
|
108
|
+
|
|
109
|
+
### `lookupEntry(id, índice)`
|
|
110
|
+
|
|
111
|
+
Busca una entrada específica por ID. Para entradas manuales o acceso explícito.
|
|
112
|
+
|
|
111
113
|
```typescript
|
|
112
114
|
import { lookupEntry } from "@mcptoolshop/ai-loadout";
|
|
113
115
|
|
|
114
116
|
const entry = lookupEntry("github-actions", index);
|
|
115
117
|
```
|
|
116
|
-
|
|
117
|
-
### `parseFrontmatter(
|
|
118
|
-
|
|
119
|
-
Analiza el
|
|
120
|
-
|
|
118
|
+
|
|
119
|
+
### `parseFrontmatter(contenido)`
|
|
120
|
+
|
|
121
|
+
Analiza el metadato en formato YAML de un archivo de datos.
|
|
122
|
+
|
|
121
123
|
```typescript
|
|
122
124
|
import { parseFrontmatter } from "@mcptoolshop/ai-loadout";
|
|
123
125
|
|
|
@@ -126,15 +128,15 @@ if (frontmatter) {
|
|
|
126
128
|
console.log(frontmatter.id, frontmatter.keywords);
|
|
127
129
|
}
|
|
128
130
|
```
|
|
129
|
-
|
|
130
|
-
### `serializeFrontmatter(fm)`
|
|
131
|
-
|
|
132
|
-
Serializa un objeto `Frontmatter` de
|
|
133
|
-
|
|
134
|
-
### `validateIndex(
|
|
135
|
-
|
|
136
|
-
Valida la integridad estructural de un `LoadoutIndex`. Devuelve un
|
|
137
|
-
|
|
131
|
+
|
|
132
|
+
### `serializeFrontmatter(fm)`
|
|
133
|
+
|
|
134
|
+
Serializa un objeto `Frontmatter` de nuevo a una cadena.
|
|
135
|
+
|
|
136
|
+
### `validateIndex(índice)`
|
|
137
|
+
|
|
138
|
+
Valida la integridad estructural de un `LoadoutIndex`. Devuelve un array de problemas.
|
|
139
|
+
|
|
138
140
|
```typescript
|
|
139
141
|
import { validateIndex } from "@mcptoolshop/ai-loadout";
|
|
140
142
|
|
|
@@ -144,21 +146,21 @@ if (errors.length > 0) {
|
|
|
144
146
|
console.error("Index has errors:", errors);
|
|
145
147
|
}
|
|
146
148
|
```
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
### `estimateTokens(
|
|
151
|
-
|
|
152
|
-
Estima el
|
|
153
|
-
|
|
149
|
+
|
|
150
|
+
Comprobaciones: campos obligatorios, IDs únicos, formato kebab-case, límites del resumen, presencia de palabras clave para entradas de dominio, prioridades válidas, presupuestos no negativos.
|
|
151
|
+
|
|
152
|
+
### `estimateTokens(texto)`
|
|
153
|
+
|
|
154
|
+
Estima el número de tokens a partir de un texto. Utiliza la heurística de chars/4.
|
|
155
|
+
|
|
154
156
|
```typescript
|
|
155
157
|
import { estimateTokens } from "@mcptoolshop/ai-loadout";
|
|
156
158
|
|
|
157
159
|
const tokens = estimateTokens(fileContent); // ~250
|
|
158
160
|
```
|
|
159
|
-
|
|
160
|
-
## Tipos
|
|
161
|
-
|
|
161
|
+
|
|
162
|
+
## Tipos
|
|
163
|
+
|
|
162
164
|
```typescript
|
|
163
165
|
import type {
|
|
164
166
|
LoadoutEntry,
|
|
@@ -171,26 +173,26 @@ import type {
|
|
|
171
173
|
Budget,
|
|
172
174
|
} from "@mcptoolshop/ai-loadout";
|
|
173
175
|
```
|
|
174
|
-
|
|
175
|
-
## Consumidores
|
|
176
|
-
|
|
177
|
-
- **[@mcptoolshop/claude-rules](https://github.com/mcp-tool-shop-org/claude-rules)** — Optimizador de CLAUDE.md para Claude Code.
|
|
178
|
-
|
|
179
|
-
## Seguridad
|
|
180
|
-
|
|
181
|
-
Este paquete es una biblioteca de datos pura. No accede al sistema de archivos,
|
|
182
|
-
|
|
183
|
-
### Modelo de
|
|
184
|
-
|
|
185
|
-
| Amenaza | Mitigación |
|
|
186
|
-
|
|
187
|
-
|
|
|
188
|
-
| Contaminación de
|
|
189
|
-
| Índice con datos incorrectos | `validateIndex()` detecta problemas estructurales antes de que se propaguen |
|
|
190
|
-
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
176
|
+
|
|
177
|
+
## Consumidores
|
|
178
|
+
|
|
179
|
+
- **[@mcptoolshop/claude-rules](https://github.com/mcp-tool-shop-org/claude-rules)** — Optimizador de CLAUDE.md para Claude Code. Utiliza ai-loadout para la tabla de distribución y la coincidencia.
|
|
180
|
+
|
|
181
|
+
## Seguridad
|
|
182
|
+
|
|
183
|
+
Este paquete es una biblioteca de datos pura. No accede al sistema de archivos, realiza solicitudes de red ni recopila datos de telemetría. Toda la entrada/salida es responsabilidad del consumidor.
|
|
184
|
+
|
|
185
|
+
### Modelo de amenazas
|
|
186
|
+
|
|
187
|
+
| Amenaza | Mitigación |
|
|
188
|
+
|--------|------------|
|
|
189
|
+
| Metadato de entrada con formato incorrecto | `parseFrontmatter()` devuelve `null` en caso de entrada no válida; no se generan excepciones ni se utiliza `eval` |
|
|
190
|
+
| Contaminación de prototipos | El analizador personalizado utiliza literales de objetos simples, no `JSON.parse` de estructuras anidadas no confiables. |
|
|
191
|
+
| Índice con datos incorrectos | `validateIndex()` detecta problemas estructurales antes de que se propaguen. |
|
|
192
|
+
| Ataque de denegación de servicio con expresiones regulares | No se utilizan expresiones regulares proporcionadas por el usuario; los patrones se comparan como búsquedas de cadenas simples. |
|
|
193
|
+
|
|
194
|
+
Consulte [SECURITY.md](SECURITY.md) para obtener la política de seguridad completa.
|
|
195
|
+
|
|
194
196
|
---
|
|
195
|
-
|
|
196
|
-
Creado por [MCP Tool Shop](https://mcp-tool-shop.github.io/)
|
|
197
|
+
|
|
198
|
+
Creado por [MCP Tool Shop](https://mcp-tool-shop.github.io/)
|
package/README.fr.md
CHANGED
|
@@ -1,35 +1,37 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<a href="README.ja.md">日本語</a> | <a href="README.zh.md">中文</a> | <a href="README.es.md">Español</a> | <a href="README.md">English</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.it.md">Italiano</a> | <a href="README.pt-BR.md">Português (BR)</a>
|
|
3
|
+
</p>
|
|
4
|
+
|
|
1
5
|
<p align="center">
|
|
2
|
-
<
|
|
6
|
+
<img src="https://raw.githubusercontent.com/mcp-tool-shop-org/brand/main/logos/ai-loadout/readme.png" width="400" alt="ai-loadout">
|
|
3
7
|
</p>
|
|
4
|
-
|
|
5
|
-
<p align="center">
|
|
6
|
-
<img src="logo.png" width="400" alt="ai-loadout">
|
|
7
|
-
</p>
|
|
8
|
-
|
|
8
|
+
|
|
9
9
|
<p align="center">
|
|
10
10
|
<a href="https://github.com/mcp-tool-shop-org/ai-loadout/actions/workflows/ci.yml"><img src="https://github.com/mcp-tool-shop-org/ai-loadout/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
|
|
11
|
+
<a href="https://codecov.io/gh/mcp-tool-shop-org/ai-loadout"><img src="https://codecov.io/gh/mcp-tool-shop-org/ai-loadout/graph/badge.svg" alt="Coverage"></a>
|
|
11
12
|
<a href="https://www.npmjs.com/package/@mcptoolshop/ai-loadout"><img src="https://img.shields.io/npm/v/@mcptoolshop/ai-loadout" alt="npm"></a>
|
|
12
|
-
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue" alt="
|
|
13
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue" alt="MIT License"></a>
|
|
14
|
+
<a href="https://mcp-tool-shop-org.github.io/ai-loadout/"><img src="https://img.shields.io/badge/Landing_Page-live-blue" alt="Landing Page"></a>
|
|
13
15
|
</p>
|
|
14
|
-
|
|
15
|
-
Routeur de connaissances contextuel pour agents IA.
|
|
16
|
-
|
|
17
|
-
`ai-loadout` est le format de table de
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
## Installation
|
|
22
|
-
|
|
16
|
+
|
|
17
|
+
Routeur de connaissances contextuel pour les agents d'IA.
|
|
18
|
+
|
|
19
|
+
`ai-loadout` est le format de table de répartition et le moteur de correspondance qui permet aux agents d'IA de charger les connaissances appropriées pour la tâche en cours. Au lieu de tout inclure dans le contexte, vous conservez un index minimal et chargez les données à la demande.
|
|
20
|
+
|
|
21
|
+
Considérez cela comme une configuration de jeu : vous équipez l'agent des connaissances dont il a strictement besoin avant chaque mission.
|
|
22
|
+
|
|
23
|
+
## Installation
|
|
24
|
+
|
|
23
25
|
```bash
|
|
24
26
|
npm install @mcptoolshop/ai-loadout
|
|
25
27
|
```
|
|
26
|
-
|
|
27
|
-
## Concepts
|
|
28
|
-
|
|
29
|
-
### La
|
|
30
|
-
|
|
31
|
-
Un `LoadoutIndex` est un index
|
|
32
|
-
|
|
28
|
+
|
|
29
|
+
## Concepts clés
|
|
30
|
+
|
|
31
|
+
### La table de répartition
|
|
32
|
+
|
|
33
|
+
Un `LoadoutIndex` est un index structuré des données de connaissances :
|
|
34
|
+
|
|
33
35
|
```json
|
|
34
36
|
{
|
|
35
37
|
"version": "1.0.0",
|
|
@@ -55,19 +57,19 @@ Un `LoadoutIndex` est un index structure de contenus de connaissances :
|
|
|
55
57
|
}
|
|
56
58
|
}
|
|
57
59
|
```
|
|
58
|
-
|
|
59
|
-
### Niveaux de
|
|
60
|
-
|
|
61
|
-
| Niveau | Comportement | Exemple |
|
|
62
|
-
|
|
63
|
-
| `core` | Toujours
|
|
64
|
-
| `domain` |
|
|
65
|
-
| `manual` | Jamais
|
|
66
|
-
|
|
67
|
-
###
|
|
68
|
-
|
|
69
|
-
Chaque fichier de
|
|
70
|
-
|
|
60
|
+
|
|
61
|
+
### Niveaux de priorité
|
|
62
|
+
|
|
63
|
+
| Niveau | Comportement | Exemple |
|
|
64
|
+
|------|----------|---------|
|
|
65
|
+
| `core` | Toujours chargé | "Ne jamais ignorer les tests pour que l'intégration continue soit réussie" |
|
|
66
|
+
| `domain` | Chargé lorsque les mots-clés de la tâche correspondent | Règles d'intégration continue lors de la modification des flux de travail |
|
|
67
|
+
| `manual` | Jamais chargé automatiquement, recherche explicite uniquement | Détails spécifiques à certaines plateformes |
|
|
68
|
+
|
|
69
|
+
### Métadonnées du fichier de données
|
|
70
|
+
|
|
71
|
+
Chaque fichier de données contient ses propres métadonnées de routage :
|
|
72
|
+
|
|
71
73
|
```markdown
|
|
72
74
|
---
|
|
73
75
|
id: github-actions
|
|
@@ -83,41 +85,41 @@ triggers:
|
|
|
83
85
|
# GitHub Actions Rules
|
|
84
86
|
CI minutes are finite...
|
|
85
87
|
```
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
## API
|
|
90
|
-
|
|
91
|
-
### `matchLoadout(
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
88
|
+
|
|
89
|
+
Les métadonnées sont la source de vérité. L'index est dérivé de celles-ci.
|
|
90
|
+
|
|
91
|
+
## API
|
|
92
|
+
|
|
93
|
+
### `matchLoadout(tâche, index)`
|
|
94
|
+
|
|
95
|
+
Fait correspondre une description de tâche à un index de configuration. Renvoie les entrées qui doivent être chargées, classées par force de correspondance.
|
|
96
|
+
|
|
95
97
|
```typescript
|
|
96
98
|
import { matchLoadout } from "@mcptoolshop/ai-loadout";
|
|
97
99
|
|
|
98
100
|
const results = matchLoadout("fix the CI workflow", index);
|
|
99
101
|
// [{ entry: { id: "github-actions", ... }, score: 0.67, matchedKeywords: ["ci", "workflow"] }]
|
|
100
102
|
```
|
|
101
|
-
|
|
102
|
-
- Les
|
|
103
|
-
- Les
|
|
104
|
-
- Les
|
|
105
|
-
- Les
|
|
106
|
-
|
|
107
|
-
### `lookupEntry(id, index)`
|
|
108
|
-
|
|
109
|
-
Recherche une
|
|
110
|
-
|
|
103
|
+
|
|
104
|
+
- Les entrées principales sont toujours incluses (score de 1,0)
|
|
105
|
+
- Les entrées manuelles ne sont jamais incluses automatiquement
|
|
106
|
+
- Les entrées spécifiques à un domaine sont notées en fonction du chevauchement des mots-clés et d'un bonus de motif
|
|
107
|
+
- Les résultats sont triés par score décroissant
|
|
108
|
+
|
|
109
|
+
### `lookupEntry(id, index)`
|
|
110
|
+
|
|
111
|
+
Recherche une entrée spécifique par ID. Pour les entrées manuelles ou l'accès explicite.
|
|
112
|
+
|
|
111
113
|
```typescript
|
|
112
114
|
import { lookupEntry } from "@mcptoolshop/ai-loadout";
|
|
113
115
|
|
|
114
116
|
const entry = lookupEntry("github-actions", index);
|
|
115
117
|
```
|
|
116
|
-
|
|
117
|
-
### `parseFrontmatter(
|
|
118
|
-
|
|
119
|
-
Analyse
|
|
120
|
-
|
|
118
|
+
|
|
119
|
+
### `parseFrontmatter(contenu)`
|
|
120
|
+
|
|
121
|
+
Analyse les métadonnées au format YAML d'un fichier de données.
|
|
122
|
+
|
|
121
123
|
```typescript
|
|
122
124
|
import { parseFrontmatter } from "@mcptoolshop/ai-loadout";
|
|
123
125
|
|
|
@@ -126,15 +128,15 @@ if (frontmatter) {
|
|
|
126
128
|
console.log(frontmatter.id, frontmatter.keywords);
|
|
127
129
|
}
|
|
128
130
|
```
|
|
129
|
-
|
|
130
|
-
### `serializeFrontmatter(fm)`
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
### `validateIndex(index)`
|
|
135
|
-
|
|
136
|
-
Valide l'
|
|
137
|
-
|
|
131
|
+
|
|
132
|
+
### `serializeFrontmatter(fm)`
|
|
133
|
+
|
|
134
|
+
Série les métadonnées d'un objet `Frontmatter` en une chaîne de caractères.
|
|
135
|
+
|
|
136
|
+
### `validateIndex(index)`
|
|
137
|
+
|
|
138
|
+
Valide l'intégrité structurelle d'un `LoadoutIndex`. Renvoie un tableau de problèmes.
|
|
139
|
+
|
|
138
140
|
```typescript
|
|
139
141
|
import { validateIndex } from "@mcptoolshop/ai-loadout";
|
|
140
142
|
|
|
@@ -144,21 +146,21 @@ if (errors.length > 0) {
|
|
|
144
146
|
console.error("Index has errors:", errors);
|
|
145
147
|
}
|
|
146
148
|
```
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
### `estimateTokens(
|
|
151
|
-
|
|
152
|
-
Estime le nombre de
|
|
153
|
-
|
|
149
|
+
|
|
150
|
+
Vérifications : champs obligatoires, ID uniques, format kebab-case, limites du résumé, présence de mots-clés pour les entrées de domaine, priorités valides, budgets non négatifs.
|
|
151
|
+
|
|
152
|
+
### `estimateTokens(texte)`
|
|
153
|
+
|
|
154
|
+
Estime le nombre de jetons à partir d'un texte. Utilise l'heuristique chars/4.
|
|
155
|
+
|
|
154
156
|
```typescript
|
|
155
157
|
import { estimateTokens } from "@mcptoolshop/ai-loadout";
|
|
156
158
|
|
|
157
159
|
const tokens = estimateTokens(fileContent); // ~250
|
|
158
160
|
```
|
|
159
|
-
|
|
160
|
-
## Types
|
|
161
|
-
|
|
161
|
+
|
|
162
|
+
## Types
|
|
163
|
+
|
|
162
164
|
```typescript
|
|
163
165
|
import type {
|
|
164
166
|
LoadoutEntry,
|
|
@@ -171,26 +173,26 @@ import type {
|
|
|
171
173
|
Budget,
|
|
172
174
|
} from "@mcptoolshop/ai-loadout";
|
|
173
175
|
```
|
|
174
|
-
|
|
175
|
-
## Consommateurs
|
|
176
|
-
|
|
177
|
-
- **[@mcptoolshop/claude-rules](https://github.com/mcp-tool-shop-org/claude-rules)** — Optimiseur
|
|
178
|
-
|
|
179
|
-
##
|
|
180
|
-
|
|
181
|
-
Ce paquet est une
|
|
182
|
-
|
|
183
|
-
###
|
|
184
|
-
|
|
185
|
-
| Menace |
|
|
186
|
-
|
|
187
|
-
|
|
|
188
|
-
| Pollution de prototype |
|
|
189
|
-
| Index avec des
|
|
190
|
-
|
|
|
191
|
-
|
|
192
|
-
Consultez [SECURITY.md](SECURITY.md) pour la politique de
|
|
193
|
-
|
|
176
|
+
|
|
177
|
+
## Consommateurs
|
|
178
|
+
|
|
179
|
+
- **[@mcptoolshop/claude-rules](https://github.com/mcp-tool-shop-org/claude-rules)** — Optimiseur CLAUDE.md pour Claude Code. Utilise ai-loadout pour la table de répartition et la correspondance.
|
|
180
|
+
|
|
181
|
+
## Sécurité
|
|
182
|
+
|
|
183
|
+
Ce paquet est une bibliothèque de données pure. Il n'accède pas au système de fichiers, ne fait pas de requêtes réseau ni ne collecte de données télémétriques. Toutes les opérations d'entrée/sortie sont de la responsabilité du consommateur.
|
|
184
|
+
|
|
185
|
+
### Modèle de menace
|
|
186
|
+
|
|
187
|
+
| Menace | Atténuation |
|
|
188
|
+
|--------|------------|
|
|
189
|
+
| Métadonnées corrompues | `parseFrontmatter()` renvoie `null` en cas d'entrée invalide, sans exceptions ni évaluation de code. |
|
|
190
|
+
| Pollution de prototype | L'analyseur personnalisé utilise des littéraux d'objets simples, sans `JSON.parse` de structures imbriquées non fiables. |
|
|
191
|
+
| Index avec des données incorrectes | `validateIndex()` détecte les problèmes structurels avant qu'ils ne se propagent. |
|
|
192
|
+
| Attaque par regex DoS | Aucune expression régulière fournie par l'utilisateur, les motifs sont correspondés comme des recherches de chaînes simples. |
|
|
193
|
+
|
|
194
|
+
Consultez [SECURITY.md](SECURITY.md) pour la politique de sécurité complète.
|
|
195
|
+
|
|
194
196
|
---
|
|
195
|
-
|
|
196
|
-
|
|
197
|
+
|
|
198
|
+
Développé par [MCP Tool Shop](https://mcp-tool-shop.github.io/)
|