# Service `ia-dev-gateway` — exécution agents et déploiements ## Objectif Remplacer à terme l’appel **direct** au répertoire module [`ia_dev`](../ia_dev-module.md) par un **service HTTP** sous [`services/ia-dev-gateway/`](../../services/ia-dev-gateway/) qui : - Pointe vers un **fork** de [4nk/ia_dev](https://git.4nkweb.com/4nk/ia_dev.git) (même historique Git, gouvernance dans le monorepo `smart_ide`). - **N’implémente pas** la logique métier des projets : il **oriente** les jobs vers `projects//`, `deploy/`, scripts existants, avec policy et journalisation. - Expose un **registre d’agents** et des **runs** pour Lapce, le front web et l’orchestrateur. ## Périmètre | Inclus | Exclus | |--------|--------| | Auth service-to-service (Bearer) | Duplication des recettes métier dans `smart_ide` | | Soumission de jobs (deploy, agent, script) | Exécution hors sandbox / OpenShell si policy impose un runtime | | Stream d’événements (SSE ou WebSocket) | UI complète (reste Lapce / front) | | Lecture du registre agents depuis le checkout `ia_dev` | Modification des secrets des projets cibles | ## Cohabitation avec le sous-module Aujourd’hui `./ia_dev` reste le **checkout canonique** sur l’hôte. Le binaire `ia-dev-gateway` reçoit `IA_DEV_ROOT` (défaut : répertoire parent du service ou chemin absolu vers `./ia_dev`). **Trajectoire** : module `ia_dev` dans le monorepo jusqu’à ce qu’un fork soit **vendored** ou **cloné par le service** au déploiement ; documentation de migration dans [ia_dev-module.md](../ia_dev-module.md). ## API (spécification) Référence détaillée : [API/ia-dev-gateway.md](../API/ia-dev-gateway.md). Résumé : - `GET /health` — liveness. - `GET /v1/agents` — liste des agents enregistrés (métadonnées dérivées du registre `ia_dev`). - `GET /v1/agents/{id}` — descripteur stable (rôle, droits, commandes déclenchantes). - `POST /v1/runs` — corps JSON : `{ "agentId", "projectId", "intent", "payload"?, "env"? }` ; réponse : `{ "runId", "status" }`. - `GET /v1/runs/{runId}` — statut et sortie partielle. - `GET /v1/runs/{runId}/events` — **SSE** (ou upgrade WebSocket selon implémentation) : flux `started`, `tool_selected`, `completed`, `failed`, etc. (aligné [system-architecture.md](../system-architecture.md)). Les codes d’erreur **401/403/404/409/422** sont explicites ; pas de fallback silencieux. ## Variables d’environnement (cible) | Variable | Obligatoire | Description | |----------|-------------|-------------| | `IA_DEV_GATEWAY_TOKEN` | oui | Bearer attendu des clients autorisés | | `IA_DEV_GATEWAY_HOST` | non | Bind (défaut `127.0.0.1`) | | `IA_DEV_GATEWAY_PORT` | non | Port (défaut `37144`) | | `IA_DEV_ROOT` | non | Chemin racine du checkout `ia_dev` (fork) | ## Implémentation Le répertoire [`services/ia-dev-gateway/`](../../services/ia-dev-gateway/) contient un **serveur Node/TypeScript** (`npm run build && npm start`) : scan des agents `.md`, runs en mémoire avec statut stub `completed`, flux SSE minimal. Brancher le **runner** réel (`ia_dev` scripts) sur `POST /v1/runs` reste à faire. L’orchestrateur [orchestrator-api.md](./orchestrator-api.md) peut cibler ce service pour `agent.run`. ## Voir aussi - [platform-target.md](../platform-target.md) — trois environnements - [system-architecture.md](../system-architecture.md) — agent gateway, policy