@mostajs/skill-library
@mostajs/skill-library
Mémoire de solveur apprenante — décore un solveur, apprend quelle recette marche pour quelle forme de problème, la réutilise, et recycle.
Auteur : Dr Hamid MADANI drmdh@msn.com · Licence : AGPL-3.0-or-later
Module mince à responsabilité unique. Il décore un Solver (typiquement @mostajs/ro-pla.solve) : il mémorise les recettes de résolution (dialecte + paramètres) indexées par signature de problème, leur attribue un indice d'efficacité, les réutilise quand une forme se représente — sinon il retombe sur le solveur et recycle. Le solveur décoré a la même signature que le Solver de @mostajs/auto-pilot, donc il s'injecte tel quel.
Patron : Case-Based Reasoning + algorithm-selection (portfolio) + feedback HITL. Idée née et validée empiriquement sur le CRM TRADING (banc « armes » : la stratégie gagnante dépend de la forme du problème).
Principe clé : un skill = la recette re-résolue, pas la solution figée. On mémorise comment résoudre (rapide car le solveur est déterministe), pas le résultat — qui périme dès que la donnée change.
Installation
npm install @mostajs/skill-libraryUsage — composition réelle
import { solve as roPlaSolve } from '@mostajs/ro-pla';
import { createAutoPilot } from '@mostajs/auto-pilot';
import { createSkillLibrary } from '@mostajs/skill-library';
const lib = createSkillLibrary({ repositories: ormRepos, solver: roPlaSolve, audit, domain: 'matching' });
const pilot = createAutoPilot({ solver: lib.solver }); // ← le solveur DÉCORÉ s'injecte tel quel
// Résolution (via le copilote / l'app) ; la solution est annotée _skill
const res = await pilot.solve('assignment', input, { confirm: true });
// Confirmation HITL du copilote → renforce (ou pénalise) la recette
await lib.recordFeedback(res.solution, { accepted: true });API
| Membre | Rôle |
|---|---|
lib.solver(problem, opts?) |
Solver décoré → solution annotée _skill:{ id, runId, from:'ro-pla'|'cache', efficacy } |
lib.recordFeedback(runRef, { accepted?|rejected?|observedMetric? }) |
Apprentissage HITL → { skillId, efficacy, active } |
lib.skills.{list,all,get,find,retire,importSeed} |
Gestion des skills (dont bootstrap depuis bancs) |
lib.stats() |
{ skills, runs, reuseRate, avgEfficacy, byKind } |
lib.signatureOf(problem) · lib.lastRun |
Signature d'un problème · dernier run |
Options : signature, score, extractMetric (surchargeables) · epsilon (exploration) · decayHalfLifeDays (décroissance) · reviewAfterDays (re-validation) · retireBelow/retireMinSamples (anti-biais) · now/rng (déterminisme).
Garde-fous intégrés
- skill = recette re-résolue (pas de solution figée) · 2. feedback HITL prioritaire (label supervisé) · 3. indice normalisé par
kind· 4. décroissance + re-validation périodique · 5. ε-exploration · retrait des skills effondrés (anti-biais).
Gouvernance : le module ne contourne aucune garde. Un skill autopiloté reste soumis, côté app, à la permission
<domaine>.autopilot+@mostajs/rules/trigger+@mostajs/audit. Le permission-gating reste la mitigation de l'injection de prompt.
Tests & exemple
npm test # 8 tests unitaires
npm run example # apprentissage → réutilisation → feedback HITL → statsVoir docs/00-PROPOSITION-PLAN-SKILL-LIBRARY-20062026.md (cas C, étape E13) et l'audit Entreprise/TRADING/docs/AUDIT-APPRENTISSAGE-SKILL-LIBRARY-2026-06-20.md.