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…
takana etapa 4: los 10 crates de librería y el CLI pasan a takana-*
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;
23pub mod translator_claude;
24
25pub use client::{AgentClient, ClientError, CompileOutcome, Welcome};
26pub use orchestrator::{Orchestrator, Proposal, VerifyCheck};
27pub use translator::{IntentCatalog, IntentTranslator, MockTranslator, SystemContext, TranslateError};
28pub use translator_claude::{ClaudeConfig, ClaudeTranslator, HttpClient};
29
30#[derive(Debug, thiserror::Error)]
31pub enum Error {
32 #[error("client: {0}")]
33 Client(#[from] ClientError),
34 #[error("translator: {0}")]
35 Translate(#[from] TranslateError),
36 #[error("orchestrator: {0}")]
37 Orchestrate(String),
38 #[error("io: {0}")]
39 Io(#[from] std::io::Error),
40 #[error("overlay: {0}")]
41 Overlay(#[from] takana_overlay::Error),
42 #[error("apply: {0}")]
43 Apply(#[from] takana_core::apply::ApplyError),
44 #[error("core: {0}")]
45 Core(#[from] takana_core::Error),
46}
47
48pub type Result<T> = std::result::Result<T, Error>;