npm.io
0.1.0 • Published 18h ago

@mostajs/skill-library

Licence
AGPL-3.0-or-later
Version
0.1.0
Deps
0
Size
30 kB
Vulns
0
Weekly
0

@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-library

Usage — 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

  1. 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 → stats

Voir 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.

Keywords