Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .cargo/config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
[env]
RUST_TEST_THREADS = "1"

# `cargo xtask <check|test|test-embed|test-crypto|ci>` : reproduit la matrice
# `cargo xtask <check|test|test-embed|ci>` : reproduit la matrice
# CI exacte (par-crate + features) — voir xtask/src/main.rs.
[alias]
xtask = "run --package xtask --"
25 changes: 12 additions & 13 deletions .claude/agents/architecture.agent.yaml
Original file line number Diff line number Diff line change
@@ -1,44 +1,43 @@
name: architecture
model: claude-opus-4-8
description: >
Expert en architecture de l'écosystème BaseMyAI / ForgeMyAI.
Valide les décisions cross-project, rédige les ADRs, maintient
Expert en architecture BaseMyAI.
Valide les décisions, rédige les ADRs, maintient
les invariants d'agnosticité et de dépendance entre crates.

system: |
Tu es l'architecte référent de l'écosystème BaseMyAI / ForgeMyAI.
Tu connais toutes les décisions prises (ADR-001 à ADR-013+) et leurs motivations.
Tu es l'architecte référent du workspace BaseMyAI.
Tu connais toutes les décisions prises (ADR-001+) et leurs motivations.

## Ton rôle

- Valider les décisions architecturales avant implémentation
- Détecter les violations de dépendance entre crates
- Rédiger de nouveaux ADRs quand une décision change
- Maintenir la cohérence basemyai-core / basemyai / forgemyai-app
- Maintenir la cohérence basemyai-core / basemyai / surfaces

## Règles de dépendance (jamais violer)

```
basemyai-core ← basemyai ← [PyO3, NAPI, REST]
basemyai-core ← forgemyai-app
basemyai-engine ← basemyai-core ← basemyai ← [PyO3, NAPI, REST, CLI]
basemyai-core ← consommateurs Rust tiers (hors repo)
```

- `basemyai-core` ne dépend de rien au-dessus
- `forgemyai-app` importe `basemyai-core` JAMAIS `basemyai`
- Les consommateurs tiers importent `basemyai-core` JAMAIS `basemyai`
- Les SDKs wrappent `basemyai`, jamais le core directement

## Invariant d'agnosticité (ADR-001)

`basemyai-core` ne connaît JAMAIS : `agent_id`, `valid_until`, `episodic`, `Symbol`, `Edge`, LLM.
Toute sémantique métier est injectée via traits (`Filter`, `MaintenanceTask`, `LlmInference`).

## Stack non-négociable (ADR-011, ADR-013)
## Stack non-négociable (ADR-032, natif-only)

- **DB** : libSQL async (pas rusqlite, pas sqlx, pas de DB externe)
- **Vecteur** : natif libSQL (pas d'extension, pas pgvector)
- **Stockage** : moteur natif `basemyai-engine` (pas libSQL, pas sqlx, pas DB externe)
- **Vecteur / FTS / graphe** : index natifs in-process
- **Embeddings** : Candle, baseline `all-MiniLM-L6-v2` 384d
- **Chiffrement** : libSQL feature `crypto`
- **Futur** : Turso DB (pur Rust)
- **Chiffrement** : enveloppe native ADR-030

## Workflow ADR

Expand Down
4 changes: 2 additions & 2 deletions .claude/agents/feature-dev.agent.yaml
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
name: feature-dev
model: claude-opus-4-8
description: >
Agent de développement de features pour BaseMyAI / ForgeMyAI.
Agent de développement de features pour BaseMyAI.
Scaffolde les nouvelles fonctionnalités end-to-end : module, trait, test,
migration SQL, en respectant les patterns du projet.

system: |
Tu es un développeur senior chargé d'implémenter des features dans le workspace BaseMyAI / ForgeMyAI.
Tu es un développeur senior chargé d'implémenter des features dans le workspace BaseMyAI.
Tu produis du code complet, testable, et conforme aux invariants du projet.

## Ton rôle
Expand Down
4 changes: 2 additions & 2 deletions .claude/agents/rust-expert.agent.yaml
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
name: rust-expert
model: claude-opus-4-8
description: >
Senior Rust 2026 expert pour l'écosystème BaseMyAI / ForgeMyAI.
Senior Rust 2026 expert pour le workspace BaseMyAI.
Révise le code, détecte les violations d'invariants, propose des corrections
conformes au style édition 2024 du workspace.

system: |
Tu es un expert Rust senior pour le workspace BaseMyAI / ForgeMyAI.
Tu es un expert Rust senior pour le workspace BaseMyAI.
Tu connais parfaitement le codebase, ses invariants et ses contraintes.

## Ton rôle
Expand Down
4 changes: 2 additions & 2 deletions .claude/agents/security.agent.yaml
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
name: security
model: claude-opus-4-8
description: >
Agent de review sécurité pour BaseMyAI / ForgeMyAI.
Agent de review sécurité pour BaseMyAI.
Détecte les injections SQL, timing attacks, fuites de clés,
violations d'isolation agent, et logging de contenu sensible.

system: |
Tu es un expert sécurité spécialisé sur le codebase BaseMyAI / ForgeMyAI.
Tu es un expert sécurité spécialisé sur le codebase BaseMyAI.
Tu identifies les vulnérabilités spécifiques à ce projet : injection SQL via Filter,
timing attacks sur l'auth MCP, isolation multi-agent, et fuites de contenu en logs.

Expand Down
111 changes: 50 additions & 61 deletions .claude/skills/architecture/content.md
Original file line number Diff line number Diff line change
@@ -1,78 +1,78 @@
# Skill: architecture — Écosystème BaseMyAI / ForgeMyAI
# Skill: architecture — BaseMyAI

## Vue d'ensemble de l'écosystème
## Vue d'ensemble du workspace

```
┌──────────────────────────────┐
│ basemyai-core │
│ (crate Rust, agnostique) │
Store libSQL · sqlite-vec
moteur natif · vecteur · FTS
│ Candle · MaintenanceWorker │
└─────────────────────────────┘
┌───────────────▼──────┐ ┌────▼──────────────┐
basemyai ForgeMyAI
│ (sémantique mémoire) │ (contexte code)
│ 4 couches · RAG │ graphe · RRF
│ agent_id · valid_* MCP/LSP
└──┬────────┬──────┬────┘ └───────────────────┘
│ │ │
┌────▼──┐ ┌──▼──┐ ┌▼────┐
│SDK Py │ │SDK │ │REST │
│(PyO3) │ │Node │ │side │
└───────┘ │NAPI │ │ car │
└─────┘ └─────┘
└─────────────────────────────┘
┌──────────────▼───────────────┐
basemyai
│ (sémantique mémoire)
4 couches · RAG temporel
agent_id · valid_* · graphe
└──┬────────┬──────┬───────────┘
│ │ │
┌────▼──┐ ┌──▼──┐ ┌▼────┐
│SDK Py │ │SDK │ │REST │
│(PyO3) │ │Node │ │side │
└───────┘ │NAPI │ │ car │
└─────┘ └─────┘
```

Des crates Rust tiers peuvent aussi consommer `basemyai-core` directement (sémantique propre, hors de ce repo). Voir [`../../ECOSYSTEM_ARCHITECTURE.md`](../../ECOSYSTEM_ARCHITECTURE.md) pour le contexte écosystème.

## Règle de dépendance (JAMAIS violer)

- **`basemyai-core`** ne dépend de rien au-dessus : ni `basemyai`, ni `forge-*`.
- **`basemyai`** importe `basemyai-core` (jamais `forge-*`).
- **`forgemyai-app`** importe `basemyai-core` — **PAS `basemyai`** (sinon hérite du RAG temporel / `agent_id` inutiles pour du code).
- Les SDKs PyO3/NAPI/REST wrappent `basemyai` (la sémantique), jamais le core directement.
- **`basemyai-engine`** : moteur interne, non publié — consommé par `basemyai-core` uniquement.
- **`basemyai-core`** ne dépend de rien au-dessus : ni `basemyai`, ni produit tiers.
- **`basemyai`** importe `basemyai-core` (jamais l'inverse).
- Les SDKs PyO3/NAPI/REST/CLI wrappent `basemyai` (la sémantique), jamais le core directement.

## Invariant d'agnosticité de `basemyai-core` (ADR-001)

`basemyai-core` ne connaît **jamais** :
- `agent_id`, `valid_from`, `valid_until` — sémantique mémoire de `basemyai`
- `Symbol`, `Edge`, call graph, FTS — sémantique code de ForgeMyAI
- `Symbol`, `Edge`, call graph — sémantique code d'un consommateur tiers
- Couches mémoire (episodic, semantic, procedural, short-term)
- LLM, inférence, consolidation

**Test d'agnosticité** (doit retourner zéro) :
```bash
grep -rE 'agent_id|valid_until|episodic|Symbol|Edge|semantic|graph|entity' \
crates/basemyai-core/src
grep -rE 'agent_id|valid_until|episodic|Symbol|Edge' crates/basemyai-core/src
```

## Principe fondateur : mécanisme au core, sens au consommateur

| Brique core | Sens ajouté par basemyai | Sens ajouté par ForgeMyAI |
|-------------|--------------------------|---------------------------|
| `Store.knn(q, k, filter?)` | filter = `agent_id = ? AND valid_until > now()` | filter = `file_path = ? AND lang = ?` |
| `MaintenanceWorker.register(task)` | task = GC `valid_until` expiré | task = purge vieilles versions MVCC |
| `Filter { sql, params }` | params = `[agent_id, timestamp]` | params = `[symbol_id, version]` |
| Brique core | Sens ajouté par `basemyai` |
|-------------|----------------------------|
| recherche vectorielle + filtres | isolation `agent_id`, validité temporelle |
| `MaintenanceWorker.register(task)` | GC expiration, oubli adaptatif, consolidation |
| graphe / FTS | entités mémoire, relations entre faits |

## Workflow ADR

**Un ADR ne se modifie JAMAIS.** Une décision qui change = **un nouvel ADR**.

Fichiers de décision :
- `basemyai/ADR.md` — décisions BaseMyAI (001 à 013+)
- `basemyai/PRD.md` — product requirements
- `forgemyai-app/ADR (1).md` — décisions ForgeMyAI
- `forgemyai-app/ADR-013-basemyai-core.md` — décision d'adopter basemyai-core
- `ECOSYSTEM_ARCHITECTURE.md` — relation entre les deux produits

## Stack technique actée (ADR-011, ADR-013)

| Composant | Choix | Interdit |
|-----------|-------|---------|
| Base de données | **libSQL async** | rusqlite, sqlx, DB externe |
| Vecteur | **natif libSQL** (`vector_top_k`, `F32_BLOB`) | extension externe, pgvector |
| Embeddings | **Candle** (`all-MiniLM-L6-v2`, 384d) | ONNX, fastembed |
| Chiffrement | **libSQL feature `crypto`** | sqlcipher séparé, AES manuel |
| Futur | Turso DB (pur Rust) | cloud-only DBs |
- `docs/ADR.md` — index des décisions BaseMyAI
- `docs/PRD.md` — product requirements
- `../ECOSYSTEM_ARCHITECTURE.md` — relation avec les autres produits de l'écosystème

## Stack technique actée (ADR-032, natif-only)

| Composant | Choix |
|-----------|-------|
| Stockage | **moteur natif** `basemyai-engine` (WAL + LSM + SST) |
| Vecteur | **LM-DiskANN / Vamana** in-process |
| FTS | index inversé natif (BM25) |
| Graphe | layout KV préfixé par agent |
| Embeddings | **Candle** (`all-MiniLM-L6-v2`, 384d) |
| Chiffrement | enveloppe native ADR-030 (XChaCha20-Poly1305) |

## Provisioning hardware-aware (ADR-010)

Expand All @@ -84,34 +84,23 @@ Fichiers de décision :
## Modèle en V1

- **Baseline unique** : `all-MiniLM-L6-v2` (384d, Candle, pur Rust)
- Garantit la compatibilité `.idx` entre basemyai et ForgeMyAI
- Multi-modèles = V2

## Gouvernance des releases

- **Semver strict** sur `basemyai-core` : tout changement d'API = bump de version
- ForgeMyAI **pin** la version de `basemyai-core` dans son `Cargo.toml`
- `basemyai-core` testé Linux + Windows dès son premier commit (il porte du code C via bindgen)
- Les consommateurs tiers **pin** la version de `basemyai-core` dans leur `Cargo.toml`

## Surfaces SDK de basemyai (4 surfaces)
## Surfaces de basemyai

| Surface | Consommateur | Couche |
|---------|-------------|--------|
| SDK Python (PyO3) | builders d'agents Python | `basemyai` |
| SDK Node (NAPI-RS) | builders d'agents JS/TS | `basemyai` |
| Sidecar REST (axum) | Go, Ruby, etc. | `basemyai` |
| Crate Rust natif | ForgeMyAI | `basemyai-core` |

## Statut juin 2026

**BaseMyAI** : workspace scaffoldé, Phases 1+2 implémentées :
- KNN cosine + oversampling ×8 (ADR-012)
- Graphe entités/relations CTE récursive
- RRF (`rrf_fuse`, k=60)
- Oubli adaptatif hyperbolique
- Consolidation épisodes → faits (`LlmInference` injecté)
- LLM provision 20 modèles, 8 backends
| CLI (`basemyai`) | ops, scripting | `basemyai` |
| Crate Rust natif | programmes custom | `basemyai-core` |

**Reste ouvert** : wiring `ConsolidationTask` dans `MaintenanceWorker`, publication SDKs.
## Statut juillet 2026

**ForgeMyAI** : docs/ADRs seulement — pas encore scaffoldé.
Workspace **100 % moteur natif** (ADR-032). Phases 1+2 implémentées ; surfaces MCP/REST/bindings/CLI en place. Voir `docs/status.md`.
4 changes: 2 additions & 2 deletions .claude/skills/feature-dev/content.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Skill: feature-dev — Scaffolding de features BaseMyAI / ForgeMyAI
# Skill: feature-dev — Scaffolding de features BaseMyAI

## Checklist avant de coder

Expand All @@ -21,7 +21,7 @@
| Tool MCP (remember, recall…) | `crates/basemyai-mcp/` |
| Binding Python | `bindings/basemyai-py/` |
| Binding Node | `bindings/basemyai-node/` |
| Contexte de code (symboles, graphe d'appel) | ForgeMyAI (pas encore scaffoldé) |
| Sémantique code (symboles, graphe d'appel) | hors scope — consommateur tiers de `basemyai-core` |

## Pattern : ajouter une feature à `basemyai` (sémantique)

Expand Down
2 changes: 1 addition & 1 deletion .claude/skills/rust-expert/content.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Skill: rust-expert — BaseMyAI / ForgeMyAI
# Skill: rust-expert — BaseMyAI

## Stack et édition

Expand Down
2 changes: 1 addition & 1 deletion .claude/skills/security/content.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Skill: security — BaseMyAI / ForgeMyAI
# Skill: security — BaseMyAI

## Surface d'attaque principale

Expand Down
2 changes: 1 addition & 1 deletion .github/labeler.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@

# ── Infra / storage ──────────────────────────────────────────────────────────
"storage":
- '/(\blibsql\b|\bsqlite\b|\bvector.top.k\b|\bannf?\b)/i'
- '/(\bbasemyai.engine\b|\bnative\s+engine\b|\bwal\b|\bsst\b|\blsm\b|\bdiskann\b|\bvamana\b|\bannf?\b)/i'

"embeddings":
- '/(\bcandle\b|\bembedd?ing\b|\bminilm\b|\ball.minilm\b)/i'
Expand Down
Loading
Loading