d2fed6087a
- Introduced `mcp-server.js` to expose KXKM personas as MCP tools, supporting chat, persona listing, web search, and status checks. - Implemented `mcp-server-smoke.js` for testing the MCP server functionality, ensuring compatibility with both new and legacy message formats. - Created `setup-voice-clone.sh` for managing voice cloning environment setup, including bootstrapping, sample generation, and smoke testing. - Added `state.json` to track project status and task outputs for various batches. - Generated summary files for deep cycle and overall project status, capturing performance and security findings.
12 KiB
12 KiB
TODO
P0 Critical (sécurité & stabilité)
- Fix bash injection dans
node-engine-runtimes.js— validation runtimeId/nodeType + timeout 30min - Ajouter timeout sur les appels Ollama — 15s metadata, 5min chat streaming
- Validation des entrées sur les messages WebSocket — 64KB max frame, 8192 chars text, type checks
- Rate limiting par user/IP sur chat —
rate-limit.js+ 30 msg/min par IP dans WebSocket escapeHtmldédupliqué →utils.jsnormalizeAuthconsolidé dansadmin-api.jsensureSeedGraphsguard flag ajoutéfinishRuncomptage d'artifacts sans JSON parserecoverRunnableRunsdouble-read corrigé
P1 V1 Quality
- Migrer vers le SDK officiel
ollama-js— fait en P7 (ollama.jsréécrit) - Ajouter un audit logging pour les actions admin —
audit-log.js+ intégré danshttp-api.jsetserver.js - Implémenter l'analyse image/audio dans
attachment-pipeline.js— stubs factory avec adapter slot - Corriger la validation d'origine
postMessage— déjà en place (personas.js:1476) - Ajouter la déduplication de requêtes dans
admin-api.js— fait en P7 (deduplicatedFetch) - Node Engine : validation de tri topologique — déjà en place (cycle detection dans runner)
- Node Engine : timeout d'exécution par nœud — 10min default via
NODE_ENGINE_STEP_TIMEOUT_MS
P2 V2 Domaines
- Schéma Postgres + migrations + repos typés (
packages/storage) — session, persona, graph, run repos - Module auth réel (
packages/auth) — crypto.scrypt, token gen, extractSessionId, validateLoginInput - Logique domaine chat (
packages/chat-domain) — ChatMessage, ChatSession, compactHistory, channel validation - Logique domaine persona (
packages/persona-domain) — validatePersonaUpdate, aggregateFeedback, computePersonaDiff - Brancher les repos Postgres dans
apps/api— asynccreateApp(), fallback in-memory si pas de DATABASE_URL
P3 Node Engine V2
- Porter registry →
packages/node-engine(15 node types, 7 familles) - Porter graph ops (topologicalSort, validateEdgeContracts, collectNodeInputs)
- Porter run state machine (createRun, RunStep, resolveFinalStatus)
- Porter queue logic (createQueueState, enqueue, dequeue, canDequeue)
- Runtime definitions (5 runtimes)
- Isoler les runtimes avec sandboxing approprié — fait en P8 (
sandbox.ts) - Adaptateurs d'entraînement réels (LoRA, QLoRA, SFT) — fait en P8 (
training.ts) - Brancher le runner V2 dans
apps/worker— poll loop, stub executors, graceful shutdown
P4 Frontend V2
- API client centralisé (
api.ts) - 9 composants React (Header, Login, Nav, PersonaList, PersonaDetail, NodeEngineOverview, GraphDetail, RunStatus, ChannelList)
- Routing hash-based + responsive CSS
- Interface chat React (WebSocket live) — fait en P7 (
Chat.tsx+useWebSocket.ts) - Éditeur visuel Node Engine (React Flow) — fait en P7 (
NodeEditor.tsx+EngineNode.tsx)
P5 TUI & Ops
- TUI health-check (V1+V2+Ollama+disk+memory)
- TUI queue-viewer (runs, statuses)
- TUI persona-manager (overview)
- Log rotation (--dry-run, --max-age-days)
- Packages/tui: ansi, statusDot, formatTable, drawBox
P6 Migration
- Matrice de parité V1 → V2 —
scripts/parity-check.js(persona, graph, channel, API shape checks) - Scripts de migration de données —
scripts/migrate-v1-to-v2.js(personas, graphs, runs → Postgres, --dry-run support) - Smoke tests pour V2 —
scripts/smoke-v2.js(22 tests, 5 catégories,npm run smoke:v2) - Procédure de rollback —
scripts/rollback-v2.js(drop/truncate tables with confirmation, --yes, --tables filter)
P0+ Sécurité V1 (deep analyse 2026-03-16)
- Path traversal dans
storage.js— sanitisation session IDs + boundary check memory paths - Path traversal dans
persona-registry.js/persona-store.js—safeFsId()helper - Path traversal dans
attachment-store.js— sanitisation IDs + boundary check - SSRF dans
web-tools.js— blocage localhost, IPs privées, .local/.internal - Response body limit dans
web-tools.js— truncation 2 MB - Log injection dans
storage.js— sanitisation paramètrerole - Crash JSONL corrompu dans
storage.js— try/catch par ligne - Map mutation during iteration dans
sessions.js— collect then process - Session leak
/msgdanscommands.js— clé stable au lieu de Date.now() - Unbounded userRateLimits dans
chat-routing.js— pruning > 200 entries - Session pruning O(n) dans
admin-session.js— throttle 60s
P7 Intégration avancée
- Migrer vers ollama-js SDK officiel —
ollama.jsréécrit avecOllamaclass, même interface - Chat WebSocket React live — hook
useWebSocket+ composant Chat IRC, auto-reconnect - Éditeur visuel Node Engine avec React Flow —
NodeEditor.tsx+EngineNode.tsx, 7 familles colorées - Déduplication requêtes GET dans
admin-api.js—deduplicatedFetchtransparent - Repos Postgres pour persona sources/feedback/proposals — 3 tables + repos + fallback in-memory
- CI/CD GitHub Actions —
.github/workflows/ci.yml(check V1+V2) - Deep analyse finale V1+V2 — 14 modules V1 vérifiés, 3 fixes TS V2, intégrité confirmée
P8 Production Readiness
- Adaptateurs training réels (TRL + Unsloth pour LoRA/DPO) —
packages/node-engine/src/training.ts+ worker intégré - Sandboxing runtimes Node Engine (containers/VM) —
packages/node-engine/src/sandbox.ts(none/subprocess/container) - Turborepo pour build orchestration monorepo —
turbo.json+ scripts alignés + CI mis à jour - Tests unitaires V2 avec node:test + supertest — 102 tests, 46 suites, 6 packages + API integration
- Tests React avec Vitest + RTL — 33 tests, 6 composants (Header, Login, Nav, PersonaList, RunStatus, ChannelList)
- Créer le repo GitHub privé — https://github.com/electron-rare/kxkm_clown
P9 Code Quality (simplify review)
- Triple filter → single-pass loop dans
node-engine.js:deriveAsyncMeta - Duplicate sanitization extraite dans
attachment-store.js:sanitizeId - Double
loadModelIndex()éliminé dansnode-engine-store.js:registerDeployment
P10 Lot 11 — Consolidation & Feature Parity
Phase A — Analyse & Recherche
- Deep analyse code V1+V2 (agent en cours)
- Veille OSS mise à jour (agent en cours)
- Recherche HuggingFace (agent en cours)
Phase B — Correctifs sécurité (deep analyse)
- P0 SEC-01 Path traversal
node-engine-runner.js— reject absolute paths + rootDir boundary check - P0 SEC-04 V2 login role self-assignment — viewer par défaut, admin via ADMIN_TOKEN
- P1 BUG-06 Health endpoint leaking DATABASE_URL — remplacé par storageMode string
- P1 BUG-02 Timeout promise leak
node-engine-runner.js— AbortSignal cancel - P1 SEC-03 Attachments sans auth — ajout requireAdminNetwork middleware
- Compilation + 119 tests OK après correctifs
Phase C — Feature Parity V2
- Recovery on crash worker —
recoverStaleRuns()+ worker startup recovery - Cancel support —
requestCancel()repo +shouldCancelcallback worker + API endpoint - Tab completion chat V2
- Commandes slash V2 —
parseSlashCommand,resolveCommand,generateHelpText+ 11 commandes + 17 tests - Mémoire conversationnelle V2 —
ConversationMemory,addToMemory,buildLlmContext,clearMemory - Status strip admin V2 — GET
/api/v2/status(personas, graphs, runs, queue) - Subnet gate V2 — CIDR middleware
/api/v2/admin/*avec ADMIN_SUBNET env - Retention sweep V2 —
deleteOlderThan()repo + POST/api/v2/admin/retention-sweep - Export HTML V2 — GET
/api/v2/export/htmlavec download attachment - Upload fichiers V2 — bouton upload base64 dans Chat.tsx, accept image/audio/text/pdf/json/csv
- Tab completion chat V2 — nicks + commandes slash, cycling Tab, reset auto
Phase D — Déploiement & Docs
- Docker —
Dockerfile(multi-stage Node 22 alpine) +docker-compose.yml(5 services) +.dockerignore - Documentation utilisateur
- Performance profiling
P11 Lot 17 — Deep Audit & Refactoring
Phase A — Analyse & documentation
- Script TUI deep-audit.js (security, perf, complexity, deps) —
ops/v2/deep-audit.js - Veille OSS enrichie 2026-03-17 (10 nouvelles catégories) —
docs/OSS_WATCH_2026-03-16.md - Diagrammes Mermaid (Context Store, Docker, Inter-persona) —
docs/ARCHITECTURE.md - AGENTS.md refondu (matrice 10 agents, Mermaid routing, pipeline) —
docs/AGENTS.md - PLAN.md consolidé avec lots 17-19
- TODO.md consolidé avec backlog Phase 6+
- Deep analyse code agents (api, web, packages, mascarade, v1+worker) — en cours
Phase B — Refactoring code
- P1 ws-chat.ts: extraction modules (1449 LOC → ~4×350 LOC)
- Extraire
ws-multimodal.ts(vision, STT, TTS, PDF handlers) - Extraire
ws-persona-router.ts(pickResponders, inter-persona, memory) - Extraire
ws-commands.ts(slash commands, /web, /imagine) - Garder
ws-chat.tscore (WebSocket lifecycle, broadcast, rate limit)
- Extraire
- P1 app.ts: extraction routes (1292 LOC → routes/ + middleware/)
- Extraire
routes/personas.ts - Extraire
routes/node-engine.ts - Extraire
routes/chat.ts - Extraire
middleware/auth.ts
- Extraire
- P2 writeFileSync → appendFile async dans ws-chat.ts (3 occurrences)
- P2 console.log → logger structuré (apps/api, apps/worker)
- P2 React.memo sur Chat, ChatHistory, VoiceChat, NodeEditor
- P2 Lazy load: React.lazy + Suspense pour routes lourdes
Phase C — Infrastructure
- SearXNG dans docker-compose (service searxng:8080, remplacer DuckDuckGo)
- MinerU/Docling dans docker-compose (remplacer pdf-parse)
- Spike BGE-M3 embeddings (upgrade nomic-embed-text)
- Déployer deep-audit.js sur kxkm-ai (cron quotidien)
- Créer utilisateur Discord Pharmacius (bot orchestrateur, bridge chat Discord ↔ KXKM)
Phase D — Nouveaux node types
music_generationnode (ACE-Step 1.5, <4GB VRAM)voice_clonenode (XTTS-v2, zero-shot 6s reference)document_extractionnode (MinerU/Docling)
P12 Lot 18 — Voice & MCP (futur)
- XTTS-v2 voice cloning par persona
- LLMRTC WebRTC streaming (TypeScript, VAD, barge-in)
- MCP SDK integration (personas = MCP servers)
- PCL + OpenCharacter pipeline fine-tune
- Chatterbox TTS evaluation
P13 Lot 19 — Music & Creative (futur)
- ACE-Step 1.5 production
/composecommand (prompt → musique)- Flux 2 dans ComfyUI
- A2A Protocol evaluation
Lot 20 - Deep Analyse Continue & Execution Chainee [en cours]
A faire maintenant:
- Poursuivre extraction modulaire de
ws-chat.ts(router, commandes, core). - Decouper
app.tsen routes + middleware sans regression. - Ajouter instrumentation perf API/WS (latence/debit/memoire).
- Integrer SearXNG + Docling et valider le pipeline.
Fait sur ce lot:
- Extraction modulaire du bloc upload/analyse de
ws-chat.ts(ws-upload-handler.ts). - Refonte UI Minitel depuis la racine du site (
public/index.html,public/styles.css,public/app.js). - Deep audit execute et relance apres correctifs.
- Corrections context-store appliquees et validees.
- check:v2 et test:v2 au vert.
- Correctif anti-decrement TTS negatif (
ttsActive). - Cleanup opportuniste des sessions expirees (mode memory).
- Purge des logs vides/obsoletes
ops/v2/logs. - Script
ops/v2/run-deep-cycle.shajoute et execute. - Tests
apps/api/src/context-store.test.tsajoutes et valides. - Scoring de dette technique integre dans
ops/v2/deep-audit.js. - Verification JSON dette: score 78/100 (niveau high).