Metadata-Version: 2.4
Name: dyneco-aim
Version: 0.3.0
Summary: AIM — compilateur de contexte client pour agents de code
Project-URL: Documentation, https://ca-aim-docs.nicerock-2e5bc469.westeurope.azurecontainerapps.io
Project-URL: Console, https://ca-aim-web.nicerock-2e5bc469.westeurope.azurecontainerapps.io
Project-URL: Source, https://dev.azure.com/aiintelligencemanagement/AI%20Intelligence%20Management/_git/aim
Author-email: DYNECO SRL <augustin.poelmans@dyneco.io>
License: Copyright (c) 2026 DYNECO SRL. Tous droits réservés.
        
        Ce logiciel et sa documentation sont la propriété de DYNECO SRL.
        
        UTILISATION AUTORISÉE
        
        DYNECO SRL accorde à toute personne obtenant une copie de ce logiciel le droit
        non exclusif et révocable de l'installer et de l'utiliser, à titre gratuit, pour
        interagir avec une instance de la plateforme AIM à laquelle elle a légitimement
        accès.
        
        RESTRICTIONS
        
        Sont interdits sans autorisation écrite préalable de DYNECO SRL :
        
          - la redistribution du logiciel, modifié ou non, sous quelque forme que ce soit ;
          - la création et la diffusion d'œuvres dérivées ;
          - l'utilisation du logiciel pour fournir un service commercial à des tiers ;
          - le retrait ou l'altération des mentions de propriété.
        
        ABSENCE DE GARANTIE
        
        LE LOGICIEL EST FOURNI « EN L'ÉTAT », SANS GARANTIE D'AUCUNE SORTE, EXPRESSE OU
        IMPLICITE, Y COMPRIS SANS S'Y LIMITER LES GARANTIES DE QUALITÉ MARCHANDE,
        D'ADÉQUATION À UN USAGE PARTICULIER ET D'ABSENCE DE CONTREFAÇON. EN AUCUN CAS
        DYNECO SRL NE POURRA ÊTRE TENUE RESPONSABLE D'UNE RÉCLAMATION, D'UN DOMMAGE OU
        DE TOUTE AUTRE RESPONSABILITÉ, CONTRACTUELLE, DÉLICTUELLE OU AUTRE, DÉCOULANT DU
        LOGICIEL OU DE SON UTILISATION.
        
        Contact : augustin.poelmans@dyneco.io
License-File: LICENSE
Keywords: agents,claude,context,developer-tools,llm,mcp
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: License :: Other/Proprietary License
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Software Development :: Documentation
Requires-Python: >=3.11
Requires-Dist: httpx>=0.28
Requires-Dist: pydantic>=2.9
Requires-Dist: rich>=13.9
Requires-Dist: typer>=0.15
Provides-Extra: server
Requires-Dist: azure-identity>=1.19; extra == 'server'
Requires-Dist: azure-storage-blob>=12.24; extra == 'server'
Requires-Dist: fastapi>=0.115; extra == 'server'
Requires-Dist: mcp>=1.12; extra == 'server'
Requires-Dist: psycopg[binary,pool]>=3.2; extra == 'server'
Requires-Dist: pyjwt[crypto]>=2.10; extra == 'server'
Requires-Dist: python-multipart>=0.0.18; extra == 'server'
Requires-Dist: pyyaml>=6.0; extra == 'server'
Requires-Dist: uvicorn[standard]>=0.32; extra == 'server'
Description-Content-Type: text/markdown

# AIM — AI Intelligence Management

**Un compilateur de contexte client pour agents de code.**

Tu codes chez plusieurs clients. Chacun a sa stack, ses conventions, son processus
de livraison. AIM absorbe ce qui décrit leur façon de travailler et le **compile**
en instructions directement consommables par Claude Code, OpenCode et GitHub
Copilot.

L'objectif n'est pas de faire du RAG sur de la documentation. C'est de transformer
un corpus hétérogène en un petit ensemble de **faits typés, sourcés et vérifiables**,
puis de les livrer sous la forme la moins coûteuse possible pour le LLM.

```bash
aim client new                              # assistant interactif
aim add ~/Downloads/archi.pdf notes.md      # depuis n'importe où
aim add --repo ~/code/payment-service       # le code ne quitte pas ta machine
aim link                                    # ce dépôt ↔ ce client, une fois
aim sync                                    # écrit CLAUDE.md, AGENTS.md, Copilot
```

Aucune arborescence à respecter, aucun fichier à ranger, aucun format à préparer.
Tu déposes ce qui est pertinent, AIM s'occupe du reste.

---

## Les deux canaux de livraison

Un agent de code a besoin de deux choses très différentes, et les confondre est
l'erreur classique :

| | Pack statique | Recherche à la demande |
|---|---|---|
| **Contenu** | Les ~100 faits qui s'appliquent *toujours* | Les milliers de détails qui s'appliquent *parfois* |
| **Livraison** | Fichiers dans le dépôt, lus à chaque session | Appel d'API ou d'outil MCP |
| **Coût** | Payé une fois par session | Payé seulement quand utile |
| **Exemple** | « Les handlers HTTP vont dans `internal/api/`, jamais dans `pkg/` » | « Quelle est la procédure exacte de rollback du service paiement ? » |

Le pack statique fait l'essentiel du gain : il empêche l'agent de se tromper *par
défaut*. La recherche couvre la longue traîne. Les deux sortent de la même base de
faits.

## Architecture

```
     TON POSTE                        AZURE
┌───────────────────┐        ┌────────────────────────────┐
│ aim add fichiers  │──HTTPS─▶│  API (Container Apps)      │
│ aim add --repo    │  Entra │  ├ conversion 20+ formats   │
│   ↳ signaux only  │        │  ├ extraction LLM           │
│                   │        │  └ consolidation            │
│ aim sync          │◀───────│                             │
│   ↳ CLAUDE.md     │  pack  │  PostgreSQL (privé)         │
│   ↳ AGENTS.md     │        │  Blob (sources brutes)      │
│   ↳ copilot       │        └────────────────────────────┘
│ ~/.aim/cache      │
│   ↳ mode dégradé  │
└───────────────────┘
```

PostgreSQL n'est joignable que depuis l'API. Ni le CLI, ni un agent, ni une équipe
côté client ne voit jamais la base.

**Le code source des clients ne quitte pas ta machine.** Un dépôt n'est pas
téléversé : le CLI en calcule six signaux de structure (découpage, dépendances,
livraison, docs, conventions observées, historique) et n'envoie que ces résumés.

## Le modèle de faits

Toute la valeur tient dans le fait que l'extraction produit des objets **typés**
plutôt que du texte libre.

| Type | Question à laquelle il répond |
|---|---|
| `stack` | Quelles technos, quelles versions, pour quel rôle ? |
| `convention` | Comment écrit-on du code qui passe la revue ici ? |
| `architecture` | Pourquoi c'est structuré comme ça ? |
| `runbook` | Comment on livre, release, rollback, débogue ? |
| `constraint` | Qu'est-ce qui est interdit (sécurité, conformité, SLA) ? |
| `pitfall` | Quel piège a déjà coûté cher à quelqu'un ? |
| `glossary` | Que veut dire ce terme interne ? |
| `contact` | Qui possède quoi ? |

Chaque fait porte un `statement` impératif d'une phrase, un `detail` markdown, une
`scope` (les chemins concernés), une `confidence`, un `status`, et une
**provenance** : le document et la citation exacte dont il est tiré. Un fait sans
provenance est rejeté par construction — c'est ce qui rend le pack auditable et
défendable devant un client.

## Cloisonnement

Une équipe côté client reçoit un rôle sur *son* client et n'apprend jamais
l'existence des autres. Un client auquel on n'a pas accès répond `404`, jamais
`403` : le code d'erreur lui-même ne doit rien révéler.

| Rôle | Peut |
|---|---|
| `reader` | Lire les faits, compiler le pack |
| `contributor` | Ingérer, extraire, valider les faits |
| `owner` | Gérer les accès, supprimer le client |

L'authentification passe par Entra ID : ton `az login` suffit, il n'y a aucun
secret propre à AIM à distribuer ni à faire tourner.

## Mode dégradé

Sur un poste client derrière un proxy ou un VPN, `aim sync` bascule tout seul sur
le dernier pack reçu, mis en cache dans `~/.aim/cache`. Le repli ne s'enclenche que
si l'API est **injoignable** : un accès révoqué renvoie une erreur applicative et
ne sert jamais un pack périmé.

## Documentation

**La documentation complète est publiée** : concepts, guides d'onboarding,
référence CLI / API / MCP, architecture, exploitation.

> https://ca-aim-docs.nicerock-2e5bc469.westeurope.azurecontainerapps.io

Elle vit dans [`website/`](website/) et se déploie avec `./scripts/deploy-docs.sh`.
Pour la prévisualiser : `uv run --group docs mkdocs serve -f website/mkdocs.yml`.

[`ROADMAP.md`](ROADMAP.md) suit l'état d'avancement et les limites connues.

## Développement local

```bash
uv sync --all-extras
docker compose up -d --build      # API + PostgreSQL, authentification désactivée
uv run aim login --api-url http://localhost:8899
uv run pytest -q
```
