sergio/takana
> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…
⎇ 89ecd54135a72e486f94df045d191d231b253638
crates/hammer-agent/src/lib.rs
Historia
Quién tocó qué
crudo
Fase 6 — bucle agéntico: hammer-agent (cliente + translator + orchestrator) y hammer ai
1//! Cliente del bus de agente + bucle agéntico (Fase 6). Ver `docs/08-ai-integration.md`.
2//!
3//! Tres piezas:
4//!
5//! 1. [`client`] — `AgentClient`: envoltorio síncrono de `/run/agent.sock`. Hace el
6//! handshake, envía comandos y devuelve eventos. Diseñado para que el orquestador
7//! pueda esperar a un `BuildReady` específico tras un `Compile`.
8//! 2. [`translator`] — Trait `IntentTranslator` + `MockTranslator`: convierte una intención
9//! en lenguaje natural a un `.swm`. El traductor real (LLM) se conecta detrás del trait;
10//! el mock cubre los tests y los smoke en el host de desarrollo.
11//! 3. [`orchestrator`] — El bucle plan→build→try→apply→verify→propose. Aplica las
12//! mutaciones a un overlay (o a un prefix para tests), valida postcondiciones y
13//! devuelve un `Proposal` que el humano usa para decidir `commit`.
14//!
15//! Decisión de diseño: el cliente es **bloqueante** (std::sync), no async. La cadencia
16//! agéntica es de comandos/seg, no de RPS; y un cliente sync es 5× menos código y debuggable
17//! con un breakpoint normal. Cuando aparezca un caso real de N agentes concurrentes,
18//! evaluamos tokio.
19
20pub mod client;
21pub mod orchestrator;
22pub mod translator;
23
24pub use client::{AgentClient, ClientError, Welcome};
25pub use orchestrator::{Orchestrator, Proposal, VerifyCheck};
26pub use translator::{IntentCatalog, IntentTranslator, MockTranslator, SystemContext, TranslateError};
27
28#[derive(Debug, thiserror::Error)]
29pub enum Error {
30 #[error("client: {0}")]
31 Client(#[from] ClientError),
32 #[error("translator: {0}")]
33 Translate(#[from] TranslateError),
34 #[error("orchestrator: {0}")]
35 Orchestrate(String),
36 #[error("io: {0}")]
37 Io(#[from] std::io::Error),
38 #[error("overlay: {0}")]
39 Overlay(#[from] hammer_overlay::Error),
40 #[error("apply: {0}")]
41 Apply(#[from] hammer_core::apply::ApplyError),
42 #[error("core: {0}")]
43 Core(#[from] hammer_core::Error),
44}
45
46pub type Result<T> = std::result::Result<T, Error>;