lifeloop/lib.rs
1//! Provider-neutral lifecycle contracts for AI harnesses.
2//!
3//! `docs/specs/lifecycle-contract/body.md` is the normative target. This module
4//! implements the `lifeloop.v0.2` slice of that contract: the wire enums,
5//! lifecycle receipt, payload envelope, and the callback request/response
6//! envelopes that clients implement.
7
8pub mod host_assets;
9pub mod protocol;
10pub mod router;
11pub mod telemetry;
12
13mod callback_contract;
14mod manifest_contract;
15mod receipt_contract;
16mod wire;
17
18pub const SCHEMA_VERSION: &str = "lifeloop.v0.2";
19
20pub use callback_contract::{CallbackRequest, CallbackResponse, DispatchEnvelope};
21pub use manifest_contract::*;
22pub use receipt_contract::LifecycleReceipt;
23pub use wire::*;
24
25pub(crate) use wire::require_non_empty;
26
27// ============================================================================
28// Domain module aliases (added 0.1.1)
29//
30// These submodules are pure re-exports of the canonical top-level surface
31// they exist so consumers can write `use lifeloop::event::LifecycleEventKind`
32// instead of `use lifeloop::LifecycleEventKind`. The canonical paths remain
33// authoritative; aliases must stay in lockstep. See
34// `tests/domain_modules.rs` for the alias-identity contract.
35// ============================================================================
36
37/// Lifecycle event vocabulary. Re-exports of canonical crate-root items.
38pub mod event {
39 pub use crate::{LifecycleEventKind, lifecycle_event_kinds};
40}
41
42/// Adapter manifest types and registry. Re-exports of canonical crate-root items.
43pub mod manifest {
44 pub use crate::{
45 AdapterManifest, ConformanceLevel, ManifestApprovalSurface, ManifestContextPressure,
46 ManifestKnownDegradation, ManifestLifecycleEventSupport, ManifestPlacementClass,
47 ManifestPlacementSupport, ManifestReceipts, ManifestRenewal, ManifestRenewalContinuation,
48 ManifestRenewalReset, ManifestSessionIdentity, ManifestSessionRename,
49 ManifestTelemetrySource, RegisteredAdapter, lookup_manifest, manifest_registry,
50 };
51}
52
53/// Built-in adapter registry and per-harness manifest constructors.
54/// Re-exports of canonical crate-root items.
55pub mod adapters {
56 pub use crate::{
57 claude_manifest, codex_manifest, gemini_manifest, hermes_manifest, lookup_manifest,
58 manifest_registry, openclaw_manifest, opencode_manifest,
59 };
60}
61
62/// Capability vocabulary and negotiation entry point. Re-exports the canonical
63/// router items so consumers can use `lifeloop::capability::*` without taking
64/// a dependency on the `router` module path. The `CapabilityKind` /
65/// `CapabilityRequest` split is preserved deliberately — `CapabilityKind` is
66/// the identity used as a manifest lookup key, and `CapabilityRequest` adds
67/// policy (`desired`, `level`).
68pub mod capability {
69 pub use crate::router::{
70 CapabilityKind, CapabilityRequest, CapabilityRequirement, DefaultNegotiationStrategy,
71 NegotiatedPlan, PayloadPlacementDecision, PlacementRejection, negotiate,
72 };
73}