@mcptoolshop/ai-loadout 1.0.1 → 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 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 ADDED
@@ -0,0 +1,198 @@
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
+
5
+ <p align="center">
6
+ <img src="https://raw.githubusercontent.com/mcp-tool-shop-org/brand/main/logos/ai-loadout/readme.png" width="400" alt="ai-loadout">
7
+ </p>
8
+
9
+ <p align="center">
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>
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>
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>
15
+ </p>
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
+
25
+ ```bash
26
+ npm install @mcptoolshop/ai-loadout
27
+ ```
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
+
35
+ ```json
36
+ {
37
+ "version": "1.0.0",
38
+ "generated": "2026-03-06T12:00:00Z",
39
+ "entries": [
40
+ {
41
+ "id": "github-actions",
42
+ "path": ".rules/github-actions.md",
43
+ "keywords": ["ci", "workflow", "runner"],
44
+ "patterns": ["ci_pipeline"],
45
+ "priority": "domain",
46
+ "summary": "CI triggers, path gating, runner cost control",
47
+ "triggers": { "task": true, "plan": true, "edit": false },
48
+ "tokens_est": 680,
49
+ "lines": 56
50
+ }
51
+ ],
52
+ "budget": {
53
+ "always_loaded_est": 320,
54
+ "on_demand_total_est": 8100,
55
+ "avg_task_load_est": 520,
56
+ "avg_task_load_observed": null
57
+ }
58
+ }
59
+ ```
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
+
73
+ ```markdown
74
+ ---
75
+ id: github-actions
76
+ keywords: [ci, workflow, runner, dependabot]
77
+ patterns: [ci_pipeline]
78
+ priority: domain
79
+ triggers:
80
+ task: true
81
+ plan: true
82
+ edit: false
83
+ ---
84
+
85
+ # GitHub Actions Rules
86
+ CI minutes are finite...
87
+ ```
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
+
97
+ ```typescript
98
+ import { matchLoadout } from "@mcptoolshop/ai-loadout";
99
+
100
+ const results = matchLoadout("fix the CI workflow", index);
101
+ // [{ entry: { id: "github-actions", ... }, score: 0.67, matchedKeywords: ["ci", "workflow"] }]
102
+ ```
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
+
113
+ ```typescript
114
+ import { lookupEntry } from "@mcptoolshop/ai-loadout";
115
+
116
+ const entry = lookupEntry("github-actions", index);
117
+ ```
118
+
119
+ ### `parseFrontmatter(contenido)`
120
+
121
+ Analiza el metadato en formato YAML de un archivo de datos.
122
+
123
+ ```typescript
124
+ import { parseFrontmatter } from "@mcptoolshop/ai-loadout";
125
+
126
+ const { frontmatter, body } = parseFrontmatter(fileContent);
127
+ if (frontmatter) {
128
+ console.log(frontmatter.id, frontmatter.keywords);
129
+ }
130
+ ```
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
+
140
+ ```typescript
141
+ import { validateIndex } from "@mcptoolshop/ai-loadout";
142
+
143
+ const issues = validateIndex(index);
144
+ const errors = issues.filter(i => i.severity === "error");
145
+ if (errors.length > 0) {
146
+ console.error("Index has errors:", errors);
147
+ }
148
+ ```
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
+
156
+ ```typescript
157
+ import { estimateTokens } from "@mcptoolshop/ai-loadout";
158
+
159
+ const tokens = estimateTokens(fileContent); // ~250
160
+ ```
161
+
162
+ ## Tipos
163
+
164
+ ```typescript
165
+ import type {
166
+ LoadoutEntry,
167
+ LoadoutIndex,
168
+ Frontmatter,
169
+ MatchResult,
170
+ ValidationIssue,
171
+ Priority, // "core" | "domain" | "manual"
172
+ Triggers, // { task, plan, edit }
173
+ Budget,
174
+ } from "@mcptoolshop/ai-loadout";
175
+ ```
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
+
196
+ ---
197
+
198
+ Creado por [MCP Tool Shop](https://mcp-tool-shop.github.io/)
package/README.fr.md ADDED
@@ -0,0 +1,198 @@
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
+
5
+ <p align="center">
6
+ <img src="https://raw.githubusercontent.com/mcp-tool-shop-org/brand/main/logos/ai-loadout/readme.png" width="400" alt="ai-loadout">
7
+ </p>
8
+
9
+ <p align="center">
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>
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>
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>
15
+ </p>
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
+
25
+ ```bash
26
+ npm install @mcptoolshop/ai-loadout
27
+ ```
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
+
35
+ ```json
36
+ {
37
+ "version": "1.0.0",
38
+ "generated": "2026-03-06T12:00:00Z",
39
+ "entries": [
40
+ {
41
+ "id": "github-actions",
42
+ "path": ".rules/github-actions.md",
43
+ "keywords": ["ci", "workflow", "runner"],
44
+ "patterns": ["ci_pipeline"],
45
+ "priority": "domain",
46
+ "summary": "CI triggers, path gating, runner cost control",
47
+ "triggers": { "task": true, "plan": true, "edit": false },
48
+ "tokens_est": 680,
49
+ "lines": 56
50
+ }
51
+ ],
52
+ "budget": {
53
+ "always_loaded_est": 320,
54
+ "on_demand_total_est": 8100,
55
+ "avg_task_load_est": 520,
56
+ "avg_task_load_observed": null
57
+ }
58
+ }
59
+ ```
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
+
73
+ ```markdown
74
+ ---
75
+ id: github-actions
76
+ keywords: [ci, workflow, runner, dependabot]
77
+ patterns: [ci_pipeline]
78
+ priority: domain
79
+ triggers:
80
+ task: true
81
+ plan: true
82
+ edit: false
83
+ ---
84
+
85
+ # GitHub Actions Rules
86
+ CI minutes are finite...
87
+ ```
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
+
97
+ ```typescript
98
+ import { matchLoadout } from "@mcptoolshop/ai-loadout";
99
+
100
+ const results = matchLoadout("fix the CI workflow", index);
101
+ // [{ entry: { id: "github-actions", ... }, score: 0.67, matchedKeywords: ["ci", "workflow"] }]
102
+ ```
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
+
113
+ ```typescript
114
+ import { lookupEntry } from "@mcptoolshop/ai-loadout";
115
+
116
+ const entry = lookupEntry("github-actions", index);
117
+ ```
118
+
119
+ ### `parseFrontmatter(contenu)`
120
+
121
+ Analyse les métadonnées au format YAML d'un fichier de données.
122
+
123
+ ```typescript
124
+ import { parseFrontmatter } from "@mcptoolshop/ai-loadout";
125
+
126
+ const { frontmatter, body } = parseFrontmatter(fileContent);
127
+ if (frontmatter) {
128
+ console.log(frontmatter.id, frontmatter.keywords);
129
+ }
130
+ ```
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
+
140
+ ```typescript
141
+ import { validateIndex } from "@mcptoolshop/ai-loadout";
142
+
143
+ const issues = validateIndex(index);
144
+ const errors = issues.filter(i => i.severity === "error");
145
+ if (errors.length > 0) {
146
+ console.error("Index has errors:", errors);
147
+ }
148
+ ```
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
+
156
+ ```typescript
157
+ import { estimateTokens } from "@mcptoolshop/ai-loadout";
158
+
159
+ const tokens = estimateTokens(fileContent); // ~250
160
+ ```
161
+
162
+ ## Types
163
+
164
+ ```typescript
165
+ import type {
166
+ LoadoutEntry,
167
+ LoadoutIndex,
168
+ Frontmatter,
169
+ MatchResult,
170
+ ValidationIssue,
171
+ Priority, // "core" | "domain" | "manual"
172
+ Triggers, // { task, plan, edit }
173
+ Budget,
174
+ } from "@mcptoolshop/ai-loadout";
175
+ ```
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
+
196
+ ---
197
+
198
+ Développé par [MCP Tool Shop](https://mcp-tool-shop.github.io/)
package/README.hi.md ADDED
@@ -0,0 +1,198 @@
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.fr.md">Français</a> | <a href="README.md">English</a> | <a href="README.it.md">Italiano</a> | <a href="README.pt-BR.md">Português (BR)</a>
3
+ </p>
4
+
5
+ <p align="center">
6
+ <img src="https://raw.githubusercontent.com/mcp-tool-shop-org/brand/main/logos/ai-loadout/readme.png" width="400" alt="ai-loadout">
7
+ </p>
8
+
9
+ <p align="center">
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>
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>
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>
15
+ </p>
16
+
17
+ संदर्भ-जागरूक ज्ञान राउटर जो एआई एजेंटों के लिए है।
18
+
19
+ `ai-loadout` एक डिस्पैच टेबल फॉर्मेट और मिलान इंजन है जो एआई एजेंटों को उस कार्य के लिए सही ज्ञान लोड करने की अनुमति देता है। संदर्भ में सब कुछ डालने के बजाय, आप एक छोटा इंडेक्स रखते हैं और आवश्यकतानुसार डेटा लोड करते हैं।
20
+
21
+ इसे एक गेम लोडआउट की तरह सोचें - आप एजेंट को प्रत्येक मिशन से पहले आवश्यक ज्ञान से लैस करते हैं।
22
+
23
+ ## इंस्टॉल करें
24
+
25
+ ```bash
26
+ npm install @mcptoolshop/ai-loadout
27
+ ```
28
+
29
+ ## मुख्य अवधारणाएं
30
+
31
+ ### डिस्पैच टेबल
32
+
33
+ `LoadoutIndex` ज्ञान डेटा के एक संरचित इंडेक्स है:
34
+
35
+ ```json
36
+ {
37
+ "version": "1.0.0",
38
+ "generated": "2026-03-06T12:00:00Z",
39
+ "entries": [
40
+ {
41
+ "id": "github-actions",
42
+ "path": ".rules/github-actions.md",
43
+ "keywords": ["ci", "workflow", "runner"],
44
+ "patterns": ["ci_pipeline"],
45
+ "priority": "domain",
46
+ "summary": "CI triggers, path gating, runner cost control",
47
+ "triggers": { "task": true, "plan": true, "edit": false },
48
+ "tokens_est": 680,
49
+ "lines": 56
50
+ }
51
+ ],
52
+ "budget": {
53
+ "always_loaded_est": 320,
54
+ "on_demand_total_est": 8100,
55
+ "avg_task_load_est": 520,
56
+ "avg_task_load_observed": null
57
+ }
58
+ }
59
+ ```
60
+
61
+ ### प्राथमिकता स्तर
62
+
63
+ | स्तर | व्यवहार | उदाहरण |
64
+ |------|----------|---------|
65
+ | `core` | हमेशा लोड किया जाता है | "CI को हरा करने के लिए कभी भी परीक्षणों को छोड़ें नहीं" |
66
+ | `domain` | जब कार्य कीवर्ड मेल खाते हैं तो लोड किया जाता है | वर्कफ़्लो संपादित करते समय CI नियम |
67
+ | `manual` | कभी भी स्वचालित रूप से लोड नहीं किया जाता है, केवल स्पष्ट खोज | अस्पष्ट प्लेटफ़ॉर्म संबंधी समस्याएं |
68
+
69
+ ### डेटा का प्रारंभिक भाग
70
+
71
+ प्रत्येक डेटा फ़ाइल में अपना रूटिंग मेटाडेटा होता है:
72
+
73
+ ```markdown
74
+ ---
75
+ id: github-actions
76
+ keywords: [ci, workflow, runner, dependabot]
77
+ patterns: [ci_pipeline]
78
+ priority: domain
79
+ triggers:
80
+ task: true
81
+ plan: true
82
+ edit: false
83
+ ---
84
+
85
+ # GitHub Actions Rules
86
+ CI minutes are finite...
87
+ ```
88
+
89
+ प्रारंभिक भाग सत्य का स्रोत है। इंडेक्स इससे प्राप्त होता है।
90
+
91
+ ## एपीआई
92
+
93
+ ### `matchLoadout(task, index)`
94
+
95
+ एक कार्य विवरण को लोडआउट इंडेक्स के खिलाफ मिलाएं। उन प्रविष्टियों को लौटाता है जिन्हें लोड किया जाना चाहिए, जो मिलान की शक्ति के आधार पर क्रमबद्ध हैं।
96
+
97
+ ```typescript
98
+ import { matchLoadout } from "@mcptoolshop/ai-loadout";
99
+
100
+ const results = matchLoadout("fix the CI workflow", index);
101
+ // [{ entry: { id: "github-actions", ... }, score: 0.67, matchedKeywords: ["ci", "workflow"] }]
102
+ ```
103
+
104
+ - मुख्य प्रविष्टियाँ हमेशा शामिल होती हैं (स्कोर 1.0)
105
+ - मैन्युअल प्रविष्टियाँ कभी भी स्वचालित रूप से शामिल नहीं होती हैं
106
+ - डोमेन प्रविष्टियों को कीवर्ड ओवरलैप + पैटर्न बोनस से स्कोर किया जाता है
107
+ - परिणाम स्कोर के अवरोही क्रम में क्रमबद्ध होते हैं
108
+
109
+ ### `lookupEntry(id, index)`
110
+
111
+ आईडी द्वारा एक विशिष्ट प्रविष्टि खोजें। मैन्युअल प्रविष्टियों या स्पष्ट पहुंच के लिए।
112
+
113
+ ```typescript
114
+ import { lookupEntry } from "@mcptoolshop/ai-loadout";
115
+
116
+ const entry = lookupEntry("github-actions", index);
117
+ ```
118
+
119
+ ### `parseFrontmatter(content)`
120
+
121
+ एक डेटा फ़ाइल से YAML-जैसे प्रारंभिक भाग को पार्स करें।
122
+
123
+ ```typescript
124
+ import { parseFrontmatter } from "@mcptoolshop/ai-loadout";
125
+
126
+ const { frontmatter, body } = parseFrontmatter(fileContent);
127
+ if (frontmatter) {
128
+ console.log(frontmatter.id, frontmatter.keywords);
129
+ }
130
+ ```
131
+
132
+ ### `serializeFrontmatter(fm)`
133
+
134
+ एक `Frontmatter` ऑब्जेक्ट को वापस एक स्ट्रिंग में क्रमबद्ध करें।
135
+
136
+ ### `validateIndex(index)`
137
+
138
+ एक `LoadoutIndex` की संरचनात्मक अखंडता को मान्य करें। मुद्दों का एक सरणी लौटाता है।
139
+
140
+ ```typescript
141
+ import { validateIndex } from "@mcptoolshop/ai-loadout";
142
+
143
+ const issues = validateIndex(index);
144
+ const errors = issues.filter(i => i.severity === "error");
145
+ if (errors.length > 0) {
146
+ console.error("Index has errors:", errors);
147
+ }
148
+ ```
149
+
150
+ जांच: आवश्यक फ़ील्ड, अद्वितीय आईडी, केबाब-केस प्रारूप, सारांश सीमाएं, डोमेन प्रविष्टियों के लिए कीवर्ड की उपस्थिति, मान्य प्राथमिकताएं, गैर-नकारात्मक बजट।
151
+
152
+ ### `estimateTokens(text)`
153
+
154
+ पाठ से टोकन की संख्या का अनुमान लगाएं। chars/4 अनुमान का उपयोग करता है।
155
+
156
+ ```typescript
157
+ import { estimateTokens } from "@mcptoolshop/ai-loadout";
158
+
159
+ const tokens = estimateTokens(fileContent); // ~250
160
+ ```
161
+
162
+ ## प्रकार
163
+
164
+ ```typescript
165
+ import type {
166
+ LoadoutEntry,
167
+ LoadoutIndex,
168
+ Frontmatter,
169
+ MatchResult,
170
+ ValidationIssue,
171
+ Priority, // "core" | "domain" | "manual"
172
+ Triggers, // { task, plan, edit }
173
+ Budget,
174
+ } from "@mcptoolshop/ai-loadout";
175
+ ```
176
+
177
+ ## उपभोक्ता
178
+
179
+ - **[@mcptoolshop/claude-rules](https://github.com/mcp-tool-shop-org/claude-rules)** — क्लाउड कोड के लिए CLAUDE.md ऑप्टिमाइज़र। डिस्पैच टेबल और मिलान के लिए ai-loadout का उपयोग करता है।
180
+
181
+ ## सुरक्षा
182
+
183
+ यह पैकेज एक शुद्ध डेटा लाइब्रेरी है। यह फ़ाइल सिस्टम तक नहीं पहुंचता है, नेटवर्क अनुरोध नहीं करता है, या टेलीमेट्री एकत्र नहीं करता है। सभी इनपुट/आउटपुट उपभोक्ता की जिम्मेदारी है।
184
+
185
+ ### खतरे का मॉडल
186
+
187
+ | खतरा | शमन |
188
+ |--------|------------|
189
+ | खराब प्रारूप वाला प्रारंभिक भाग इनपुट | `parseFrontmatter()` अमान्य इनपुट पर `null` लौटाता है - कोई अपवाद नहीं, कोई eval नहीं |
190
+ | प्रोटोकॉल प्रदूषण | हाथ से बनाया गया पार्सर केवल साधारण ऑब्जेक्ट लिटरल का उपयोग करता है, अविश्वसनीय नेस्टेड संरचनाओं का `JSON.parse` नहीं करता है |
191
+ | खराब डेटा वाला इंडेक्स | `validateIndex()` संरचनात्मक मुद्दों को फैलने से पहले पकड़ लेता है |
192
+ | रेगेक्स DoS | कोई उपयोगकर्ता-प्रदत्त रेगेक्स नहीं - पैटर्न को साधारण स्ट्रिंग लुकअप के रूप में मिलान किया जाता है |
193
+
194
+ पूर्ण सुरक्षा नीति के लिए [SECURITY.md](SECURITY.md) देखें।
195
+
196
+ ---
197
+
198
+ [MCP Tool Shop](https://mcp-tool-shop.github.io/) द्वारा बनाया गया