docs: align regex-search with Cursor article; claw upstream submodule; SSO data ownership

- Add services/claw-harness-api/upstream → chinanpc/claude-code-rust (shallow)
- Document claw submodule and MIT Rust harness in service-claw-harness + feature doc
- agent-regex-search: map design principles to rg implementation vs indexed search
- SSO gateway: no user/project account storage; product DBs own identity context
This commit is contained in:
Nicolas Cantu 2026-04-03 22:54:07 +02:00
parent 466ed6b65f
commit 3b3e1e67de
10 changed files with 46 additions and 13 deletions

6
.gitmodules vendored
View File

@ -5,10 +5,10 @@
# services/chandra/upstream → datalab-to/chandra # services/chandra/upstream → datalab-to/chandra
# services/pageindex/upstream → VectifyAI/PageIndex # services/pageindex/upstream → VectifyAI/PageIndex
# services/langextract-api/upstream → google/langextract # services/langextract-api/upstream → google/langextract
# services/claw-harness-api/upstream → chinanpc/claude-code-rust (harnais Rust MIT, voir service-claw-harness.md)
# #
# — Code versionné dans ce dépôt uniquement (pas de sous-module sur la racine du service) : # — Code versionné dans ce dépôt uniquement (pas de sous-module sur la racine du service) :
# services/agent-regex-search-api # services/agent-regex-search-api
# services/claw-harness-api (claw-code amont : clone séparé, voir docs/repo/service-claw-harness.md)
[submodule "services/carbonyl/upstream"] [submodule "services/carbonyl/upstream"]
path = services/carbonyl/upstream path = services/carbonyl/upstream
@ -26,3 +26,7 @@
path = services/langextract-api/upstream path = services/langextract-api/upstream
url = https://github.com/google/langextract.git url = https://github.com/google/langextract.git
shallow = true shallow = true
[submodule "services/claw-harness-api/upstream"]
path = services/claw-harness-api/upstream
url = https://github.com/chinanpc/claude-code-rust.git
shallow = true

View File

@ -33,6 +33,10 @@ Liste les clés de proxy disponibles : `{ "upstreams": [ "orchestrator", ... ] }
Len-tête `Authorization` utilisateur nest **pas** transmis à lamont ; il est remplacé par le jeton de service configuré. Voir [sso-gateway-service.md](../features/sso-gateway-service.md). Len-tête `Authorization` utilisateur nest **pas** transmis à lamont ; il est remplacé par le jeton de service configuré. Voir [sso-gateway-service.md](../features/sso-gateway-service.md).
### Comptes et projets
Aucun stockage d**utilisateurs** ou de **comptes par projet** dans ce service : uniquement validation OIDC et proxy. Les données de compte et dappartenance projet vivent dans les **bases métier** des produits ; la passerelle ne les duplique pas.
## Variables denvironnement (passerelle) ## Variables denvironnement (passerelle)
| Variable | Rôle | | Variable | Rôle |

View File

@ -2,11 +2,18 @@
## Objectif ## Objectif
Offrir aux clients locaux (futur shell Lapce, gateway, agents) une **API HTTP** pour exécuter des **recherches par expression régulière** sur une arborescence contrôlée, sans dépendre du moteur propriétaire décrit dans le billet Cursor [Recherche regex rapide : indexer le texte pour les outils des agents](https://cursor.com/fr/blog/fast-regex-search). Offrir aux clients locaux (futur shell Lapce, gateway, agents) une **API HTTP** pour exécuter des **recherches par expression régulière** sur une arborescence contrôlée. La référence de conception est le billet Cursor [Recherche regex rapide : indexer le texte pour les outils des agents](https://cursor.com/fr/blog/fast-regex-search) : y sont posés le rôle central de la regex pour les agents, lenjeu de latence sur grands dépôts, et les familles dalgorithmes (index inversé trigrammes, sparse n-grams, etc.).
## Ce que ce nest pas ## Rapport article ↔ code
Larticle Cursor décrit des index **sparse n-grams**, fichiers sur disque, `mmap`, etc. **Ce code nest pas reproduit ici** : Cursor ne publie pas ce moteur en open source. Le service `agent-regex-search-api` sappuie sur **[ripgrep](https://github.com/BurntSushi/ripgrep)** (`rg`), outil standard, rapide, et adapté aux flux « agent » qui enchaînent beaucoup de recherches. | Aspect (article Cursor) | Dans `agent-regex-search-api` |
|---------------------------|-------------------------------|
| Outil « grep / regex » pour agents, borné dans le temps | `POST /search` avec `timeoutMs`, `maxMatches` |
| Réduction du périmètre fichiers | `REGEX_SEARCH_ROOT` + `subpath` relatif sans `..` |
| Moteur : ripgrep comme base courante | `rg --json` (aligné sur ce que larticle cite comme usage large dans les agents) |
| Index préalable (trigrammes, sparse n-grams, stockage disque) | **Non** : pas recodé ; évolution possible via Zoekt ou équivalent open source |
Cursor ne publie pas son moteur « instant grep » ; ce dépôt ne le reproduit pas. Le service sappuie sur **[ripgrep](https://github.com/BurntSushi/ripgrep)** (`rg`), pratique et rapide pour beaucoup de dépôts ; les sections algorithmiques du billet servent de **cible** si un index local devient nécessaire.
## Périmètre fonctionnel ## Périmètre fonctionnel
@ -25,7 +32,7 @@ Larticle Cursor décrit des index **sparse n-grams**, fichiers sur disque, `m
## Évolutions possibles (hors périmètre initial) ## Évolutions possibles (hors périmètre initial)
Pour des monorepos extrêmement volumineux, des backends **indexés** open source (ex. **Zoekt**, familles dindex **trigram** / n-grams) peuvent compléter ou remplacer le seul `rg`, en réutilisant les idées du billet Cursor comme **références algorithmiques**, pas comme implémentation fournie. Pour des monorepos extrêmement volumineux, des backends **indexés** open source (ex. **Zoekt**, familles dindex **trigram** / n-grams) peuvent compléter ou remplacer le seul `rg`, en réutilisant les idées du billet Cursor comme **références algorithmiques**.
## Intégration architecture ## Intégration architecture

View File

@ -8,8 +8,9 @@ Documenter et outiller lusage du dépôt **claw-code** (runtime type « harne
- Page miroir : [gitlawb — claw-code](https://gitlawb.com/node/repos/z6Mks1jg/claw-code) - Page miroir : [gitlawb — claw-code](https://gitlawb.com/node/repos/z6Mks1jg/claw-code)
- Dépôt GitHub souvent utilisé pour cloner : [instructkr/claw-code](https://github.com/instructkr/claw-code) - Dépôt GitHub souvent utilisé pour cloner : [instructkr/claw-code](https://github.com/instructkr/claw-code)
- Variante Rust MIT sous-module dans ce monorepo : [chinanpc/claude-code-rust](https://github.com/chinanpc/claude-code-rust) → `services/claw-harness-api/upstream`
Le dépôt amont évolue (Rust / Python, binaires, serveur HTTP). Ce dépôt **ne vend pas** claw-code : seulement README, exemple de politique fournisseurs, et un **proxy HTTP** optionnel. Le dépôt amont évolue (Rust / Python, binaires, serveur HTTP). Ce dépôt **ne vend pas** claw-code : seulement README, exemple de politique fournisseurs, sous-module optionnel ci-dessus, et un **proxy HTTP** optionnel.
## Fichiers locaux ## Fichiers locaux

View File

@ -26,6 +26,14 @@ En plus de lauthentification de service, la passerelle peut envoyer :
Les services amont peuvent sen servir pour du **journal** ou des **règles fines** ; la **politique dautorisation** métier reste de leur responsabilité. Les services amont peuvent sen servir pour du **journal** ou des **règles fines** ; la **politique dautorisation** métier reste de leur responsabilité.
## Comptes, projets et bases métier
La passerelle **ne conserve pas** de comptes utilisateurs, de profils projet, ni de quotas métier : elle ne fait que **vérifier** le JWT OIDC et **relayer** vers les micro-services.
Les **comptes**, droits par **projet**, abonnements, historiques et toute persistance **métier** liée à lidentité restent dans les **bases des applications** (ex. docv, Enso, autres produits) et dans leurs schémas de données — pas dans `smart-ide-sso-gateway`. Le découpage par projet côté IDE et chemins de déploiement est décrit sous `projects/<id>/conf.json` — [repo/projects-directory.md](../repo/projects-directory.md).
Les services amont qui reçoivent `X-OIDC-Sub` / `X-OIDC-Email` sont responsables de **résoudre** lutilisateur vers un contexte projet via **leurs** API et bases.
## Documentation détaillée ## Documentation détaillée
- [API/sso-gateway-api.md](../API/sso-gateway-api.md) - [API/sso-gateway-api.md](../API/sso-gateway-api.md)

View File

@ -1,6 +1,6 @@
# agent-regex-search-api (`services/agent-regex-search-api/`) # agent-regex-search-api (`services/agent-regex-search-api/`)
API HTTP locale sur **`127.0.0.1`** pour la **recherche regex sur fichiers** via [ripgrep](https://github.com/BurntSushi/ripgrep) (`rg`). Approche locale ouverte ; ce nest pas limplémentation « instant grep » propriétaire de Cursor. API HTTP locale sur **`127.0.0.1`** pour la **recherche regex sur fichiers** via [ripgrep](https://github.com/BurntSushi/ripgrep) (`rg`). Elle matérialise côté `smart_ide` les **principes de conception** décrits pour les agents dans [Recherche regex rapide : indexer le texte pour les outils des agents](https://cursor.com/fr/blog/fast-regex-search) (outil regex dédié aux agents, plafonds de latence, périmètre de fichiers borné). Le **moteur indexé** du billet (trigrammes, sparse n-grams, fichiers `mmap`, etc.) nest **pas** recodé ici : limplémentation actuelle sappuie sur `rg`, comme la majorité des chaînes dagents ; une couche dindex open source (famille Zoekt / codesearch) reste une évolution possible pour les très gros arbres.
## Prérequis ## Prérequis

View File

@ -1,11 +1,17 @@
# claw-harness-api (`services/claw-harness-api/`) # claw-harness-api (`services/claw-harness-api/`)
Notes dintégration et **proxy HTTP mince** pour le harnais **claw-code** (runtime multi-modèles). Amont : Notes dintégration et **proxy HTTP mince** pour un harnais **claw** (agent terminal, binaire `claw`).
## Amont Rust (sous-module optionnel)
Un clone **shallow** du dépôt **[chinanpc/claude-code-rust](https://github.com/chinanpc/claude-code-rust)** est disponible sous **`services/claw-harness-api/upstream`** (sous-module Git, licence **MIT** selon le dépôt amont). Après `git clone` du monorepo : `git submodule update --init services/claw-harness-api/upstream`. Builder et lancer le binaire selon le `README` amont (workspace Rust, `cargo build --release`, etc.).
## Autres références claw (hors sous-module)
- [gitlawb — claw-code](https://gitlawb.com/node/repos/z6Mks1jg/claw-code) - [gitlawb — claw-code](https://gitlawb.com/node/repos/z6Mks1jg/claw-code)
- [instructkr/claw-code](https://github.com/instructkr/claw-code) (clone fréquent) - [instructkr/claw-code](https://github.com/instructkr/claw-code) (accès réseau selon visibilité du dépôt)
Ce dossier **ne vend pas** claw-code : cloner amont, builder selon son `README` (workspace Rust `rust/`, etc.). Le proxy **`proxy/`** du monorepo nembarque pas le runtime : il attend une URL **`CLAW_UPSTREAM_URL`** vers un serveur HTTP claw déjà démarré.
## Politique : pas dAnthropic dans les gabarits ## Politique : pas dAnthropic dans les gabarits

View File

@ -1,3 +1,3 @@
# agent-regex-search-api # agent-regex-search-api
**[docs/repo/service-agent-regex-search.md](../../docs/repo/service-agent-regex-search.md)** **[docs/repo/service-agent-regex-search.md](../../docs/repo/service-agent-regex-search.md)** — conception liée au billet Cursor [Recherche regex rapide](https://cursor.com/fr/blog/fast-regex-search) (détails : [features/agent-regex-search-api.md](../../docs/features/agent-regex-search-api.md)).

@ -0,0 +1 @@
Subproject commit 14fd3e06888b510c7e3c7088b24348e42edaad12

View File

@ -9,6 +9,8 @@ HTTP gateway that validates **user** access tokens from the docv / Enso OIDC iss
- Expose `GET /v1/token/verify` and `GET /v1/upstreams` with user Bearer. - Expose `GET /v1/token/verify` and `GET /v1/upstreams` with user Bearer.
- Proxy `ANY /proxy/<upstream_key>/<path>` to the configured upstream, replacing the user token with the service token and adding `X-OIDC-Sub` / `X-OIDC-Email` when present in the JWT. - Proxy `ANY /proxy/<upstream_key>/<path>` to the configured upstream, replacing the user token with the service token and adding `X-OIDC-Sub` / `X-OIDC-Email` when present in the JWT.
User accounts, project membership, and product databases stay in **each applications backend** (docv, Enso, etc.); this gateway does not store them.
## Run ## Run
```bash ```bash