Kalli
Get Started

Structure du dépôt

Arborescence réelle du monorepo nAI'vi et rôle de chaque dossier

Structure du dépôt

Le dépôt est un workspace Bun. Chaque application est déployée séparément, à partir de la même base de code.

naivi-bots/
├── apps/
│   ├── server/                       # API du back-office (Bun, Hono, oRPC, Drizzle)
│   │   ├── drizzle/                  # Migrations SQL
│   │   ├── src/
│   │   │   ├── index.ts              # App Hono : CORS, /api/auth, /rpc, /health, /api/i18n
│   │   │   ├── db/schema/            # auth.ts (Better Auth), naivi.ts (fichiers, chunks, Q&R, tags, rôles, index)
│   │   │   ├── lib/                  # auth.ts, orpc.ts (procédures), context.ts, i18n.ts
│   │   │   ├── routers/              # auth.ts, naivi.ts, roles-tags.ts, index.ts
│   │   │   ├── utils/                # Traitement des fichiers, Q&R, tags, client document-processor
│   │   │   └── scripts/              # migrate.ts, check-migrations.ts
│   │   └── tests/                    # Autorisations des procédures, upload Q&R, finetuned
│   │
│   ├── web/                          # Interface du back-office (React 19, Vite, TanStack Router)
│   │   ├── src/
│   │   │   ├── routes/               # Routes fichiers : (public), (auth), (protected), (protected)/admin
│   │   │   ├── features/             # Pages et composants métier : admin, auth, common, public
│   │   │   ├── components/ui/        # Composants shadcn/ui
│   │   │   ├── hooks/                # Hooks TanStack Query (fichiers, chunks, Q&R, tags)
│   │   │   ├── lib/                  # auth-client.ts, i18n
│   │   │   └── utils/                # orpc.ts (client typé), runtime-env.ts, types.ts
│   │   ├── vite.config.ts            # Plugin runtime-env (window.RUNTIME_ENV)
│   │   └── tests/                    # Garde des routes (Vitest)
│   │
│   ├── rag-agent/                    # Deux services Python : agent (POST /chat) et API d'index
│   │   ├── src/rag_agent/
│   │   │   ├── interfaces/agent/app.py          # FastAPI : POST /chat (SSE), GET /healthz
│   │   │   ├── interfaces/index/index_api.py    # FastAPI : régénération de l'index
│   │   │   ├── core/orchestration.py            # Orchestration des requêtes
│   │   │   └── rag/                             # Indexation FAISS et recherche
│   │   ├── src/common/               # db.py, litellm.py (appels HTTP au proxy LiteLLM)
│   │   ├── src/config/               # Paramètres RAG et i18n
│   │   └── tests/
│   │
│   └── document-processor/           # Parsing et découpage (FastAPI, Docling)
│       ├── src/
│       │   ├── main.py               # App FastAPI et routes (dont /health)
│       │   ├── parsers/              # Un parseur par famille de formats
│       │   ├── chunking.py           # Découpage en fragments
│       │   ├── job_queue.py, job_store.py   # File de jobs asynchrones
│       │   └── config.py             # Variables DOCLING_* et limites de taille
│       └── tests/
│
├── docs/                             # Site de documentation (Next.js, Fumadocs)
│   └── content/docs/                 # Pages MDX
│
├── helm/                             # Chart Helm (un déploiement par bot)
│   ├── values.yaml
│   └── templates/                    # Deployments, services, ingress, configmap, secrets
│
├── data/                             # Ignoré par Git, sauf mock-docs/ et fake_csv.csv
├── scripts/                          # convert_i18n_to_helm_values.py
├── biome.json                        # Lint TypeScript (Biome)
├── docker-compose.yml                # Stack locale
├── Dockerfile, Dockerfile.local      # Images de production et de développement
├── .env.example                      # Variables d'environnement
├── i18n.json.example                 # Source des traductions (copiée dans helm/values.yaml)
└── package.json                      # Scripts racine (dev, build, check-types, db:*)

Où modifier quoi

  • Nouvelle procédure oRPC : apps/server/src/routers/, puis l'exposer dans routers/index.ts. Elle doit figurer dans une seule liste de apps/server/tests/authorization.test.ts : PUBLIC, SIGNED_IN ou ADMIN_ONLY.
  • Nouvelle page web : fichier dans apps/web/src/routes/ (routage fichier, généré par TanStack Router), composants dans features/.
  • Nouveau format de fichier : parseur dans apps/document-processor/src/parsers/, puis enregistrement dans registry.py.
  • Paramètres RAG : apps/rag-agent/src/config/.
  • Textes de l'interface : i18n.json.example, puis scripts/convert_i18n_to_helm_values.py.

Pour le détail de chaque application, voir Serveur, Base de données et RAG.