Sustituye la política hardcodeada por una declarativa (SDD 07 §4).
hammer-core/src/caps.rs:
- AgentCapsConfig { default, rule[] }; CapRule { uid?, gid?, caps }.
- caps_for(uid, gid): primera regla que casa (todos los campos
declarados deben coincidir) o default. load(path) → Ok(None) si falta.
- 8 tests: orden de reglas, match uid+gid, fallback, regla vacía ignorada.
hammerd:
- bus::policy_from_config(cfg) construye la CapsPolicy desde la config.
- main: --agent-caps (default /etc/hammer/agent-caps.toml). Con fichero
usa la config; sin fichero o con fichero inválido cae a default_policy
(avisando). +1 test del policy_from_config.
examples/agent-caps.toml: plantilla comentada.
22 binarios de test verdes.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
40 lines
1.1 KiB
Rust
40 lines
1.1 KiB
Rust
//! Tipos núcleo de hammer, compartidos por el lab, la CLI y el daemon.
|
|
//!
|
|
//! Ver `docs/01-architecture.md` y siguientes. Esto es el esqueleto de Fase 0: los tipos y
|
|
//! contratos están definidos; la lógica pesada (sandbox, fanotify, bus) vive en los otros
|
|
//! crates y se irá rellenando por fase.
|
|
|
|
pub mod apply;
|
|
pub mod caps;
|
|
pub mod hash;
|
|
pub mod proto;
|
|
pub mod query;
|
|
pub mod recipe;
|
|
pub mod sign;
|
|
pub mod store;
|
|
pub mod swm;
|
|
|
|
pub use caps::{AgentCapsConfig, CapRule};
|
|
pub use hash::ArtifactHash;
|
|
pub use recipe::{Compiler, LinkMode, Phases, Recipe, Source, SourceKind};
|
|
pub use sign::{KeyPair, SigStatus, TrustStore};
|
|
pub use store::Store;
|
|
pub use swm::{Base, BaseCompat, BaseRef, Mutation, PinDiff, Signature, Swm, SwmBuild};
|
|
|
|
/// Error común del ecosistema hammer.
|
|
#[derive(Debug, thiserror::Error)]
|
|
pub enum Error {
|
|
#[error("io: {0}")]
|
|
Io(#[from] std::io::Error),
|
|
#[error("serialización: {0}")]
|
|
Serde(String),
|
|
#[error("receta inválida: {0}")]
|
|
Recipe(String),
|
|
#[error("store: {0}")]
|
|
Store(String),
|
|
#[error(transparent)]
|
|
Other(#[from] anyhow::Error),
|
|
}
|
|
|
|
pub type Result<T> = std::result::Result<T, Error>;
|