Files
IdeA/agents-dev/L6-agents.md
Blomios 307ae71857 feat: add main features
Agents for developpement added + frontend add + backend added. Git viewer created + agent and template creator + layout and project creator
2026-06-06 01:27:01 +02:00

4.9 KiB

L6 — Agents & contextes

Binôme : dev-agents / test-agents Zones : application/agent, infrastructure/store, frontend/features/agents Dépendances amont : L0, L1, L2, L3, L5.

Objectif

Agents de projet : contextes .md dans .ideai/, manifeste, et lancement d'un agent (injection contexte + spawn CLI dans une cellule terminal).

Périmètre (DEV)

  • Adapter IdeaiContextStore (compose FileSystem) : lecture/écriture .md + agents.json.
  • Use cases : CreateAgentFromScratch, LaunchAgent (résout profil+contexte, injecte, ouvre cellule PTY au bon cwd, spawn CLI), CRUD agents.
  • Front : panneau agents (créer, éditer le .md, activer → terminal).

Périmètre (TEST)

  • IdeaiContextStore : round-trip .md + manifeste (intégration tmpdir + mock FS pour les use cases).
  • LaunchAgent : ordre des appels (prepare_invocation → injection → pty.spawn) avec cwd correct.
  • Front : feature agents avec gateway mock.

Definition of Done

  • cargo test (agent/store) + vitest verts ; activer un agent ouvre un terminal avec la CLI lancée (dev manuel).

Spike

  • Injection conventionFile : symlink vs copie ; conflits si CLAUDE.md existe ; symlinks Windows.

Avancement

Backend (vert)

  • Domaine : ManifestEntry réconcilié avec le schéma documenté agents.json (ARCHITECTURE §9.1) — porte désormais name + profile_id ; helpers from_agent/to_agent (le manifeste est la forme persistée d'un Agent). Tests domaine maj, verts.
  • Infra : IdeaiContextStore (infrastructure/store/context.rs) implémente AgentContextStore en composant FileSystem ; écrit .ideai/agents.json + .ideai/agents/*.md, location-neutre (réutilisable local/SSH/WSL). Test d'intégration tmpdir (5 tests).
  • Application (application/agent/lifecycle.rs) : CreateAgentFromScratch, ListAgents, ReadAgentContext, UpdateAgentContext, DeleteAgent, et LaunchAgent (résout profil+contexte → prepare_invocation → injection → pty.spawn au bon cwd → event AgentLaunched). 9 tests use cases (ordre d'appel vérifié via trace partagée).
  • Spike conventionFile tranché pour L6 : copie du .md vers le fichier conventionnel (ex. CLAUDE.md), écrasement si présent — choix portable (symlinks Windows = privilèges, sémantique SFTP/WSL divergente). Stratégie Env → chemin absolu du .md ; Stdin → contenu piped après spawn.

Front (vert)

  • Port AgentGateway étendu (list/create/read/update/delete/launch) + type Agent dans domain ; mock stateful MockAgentGateway ; adapter Tauri TauriAgentGateway (src/adapters/agent.ts, commandes *_agent — câblage backend à venir).
  • Feature frontend/features/agents : hook useAgents(projectId) + AgentsPanel (liste, création nom+profil, éditeur de contexte .md, Launch/Delete), bâti sur le design system (LD) et intégré dans l'onglet projet actif.
  • Tests : 13 nouveaux (RTL + mock) ; suite front 116 verts, tsc clean. Garde-fou « no direct invoke » respecté.

IPC app-tauri (vert)

  • Composition root (state.rs) : IdeaiContextStore construit ; 6 use cases agents instanciés en réutilisant les ports existants ; LaunchAgent partage le même pty_port + terminal_sessions que les terminaux (indispensable au PtyBridge) ; handle project_store ajouté pour résoudre le Project depuis un projectId.
  • Commands (commands.rs) : create_agent, list_agents, read_agent_context, update_agent_context, delete_agent, launch_agent. launch_agent imite open_terminal (Channel + PtyBridge + thread de pompe). Enregistrées dans lib.rs.
  • DTOs (dto.rs) : AgentDto/AgentListDto (transparent, camelCase), request DTOs, parse_agent_id, From<LaunchAgentOutput> for TerminalSessionDto.
  • Tests : tests/dto_agents.rs (10) ; cargo test -p app-tauri 44 verts ; cargo test --workspace 256 verts, 0 régression ; clippy clean.

Terminal d'agent (front, vert) — L6 clos

  • AgentGateway.launchAgent(projectId, agentId, options, onData) renvoie désormais un TerminalHandle (signature calquée sur openTerminal) ; adapter Tauri = Channel<number[]> + invoke("launch_agent", …) + write/resize/close via les commandes terminal (clé sessionId) ; mock = greeting + echo.
  • TerminalView généralisé avec une prop open? optionnelle (par défaut = gateway terminal) → réutilisé tel quel pour le terminal d'agent (xterm/fit/resize/cleanup partagés).
  • AgentsPanel : bouton Launch monte un TerminalView (conteneur sombre h-96) branché sur la session d'agent ; bouton Stop le démonte (cleanup close()).
  • Tests front : 120 verts (tsc clean), garde-fou « no direct invoke » respecté. Backend/IPC : 256 verts.

Hors périmètre L6 (à reprendre plus tard)

  • Affiner la stratégie Env (support adapter de premier ordre).