feat(hive-claude): add InfiniteSession (name+store+compaction policy)
This commit is contained in:
parent
bf93a81e1d
commit
80d819e444
8 changed files with 501 additions and 283 deletions
|
|
@ -7,9 +7,16 @@
|
|||
//! prompt-too-long, …) and hard failures (spawn, non-zero exit) — is a variant
|
||||
//! of the single [`Error`] enum, so callers branch with one `match`. The crate
|
||||
//! also locates and archives on-disk sessions by title ([`SessionStore`]). It
|
||||
//! knows only about the Claude Code CLI — no application types, policy,
|
||||
//! watermarks, or logging. Callers wire streaming output through a [`Sink`] and
|
||||
//! layer their own compaction / retry / reset policy on top.
|
||||
//! knows only about the Claude Code CLI — no application types, hard-coded
|
||||
//! watermarks, or logging. Callers wire streaming output through a [`Sink`].
|
||||
//!
|
||||
//! Two layers:
|
||||
//!
|
||||
//! - [`Claude::run`] — the low-level driver: one turn, one [`Attach`] target.
|
||||
//! - [`InfiniteSession`] — a durable session (name + [`SessionStore`] +
|
||||
//! [`CompactionPolicy`]) that keeps itself alive across the context window by
|
||||
//! compacting reactively (on overflow) and proactively (per policy — e.g.
|
||||
//! [`PercentPolicy`]). This is the one you usually want.
|
||||
//!
|
||||
//! # `thiserror` here, `anyhow` in the apps
|
||||
//!
|
||||
|
|
@ -32,13 +39,13 @@
|
|||
//!
|
||||
//! ```no_run
|
||||
//! # async fn ex() {
|
||||
//! use hive_claude::{Claude, Config, Error, NoopSink, Session};
|
||||
//! use hive_claude::{Attach, Claude, Config, Error, NoopSink};
|
||||
//!
|
||||
//! let config = Config {
|
||||
//! model: "haiku".into(),
|
||||
//! ..Default::default()
|
||||
//! };
|
||||
//! match Claude::run(&config, &Session::Resume("my-session".into()), "hello", &NoopSink).await {
|
||||
//! match Claude::run(&config, &Attach::Resume("my-session".into()), "hello", &NoopSink).await {
|
||||
//! Ok(()) => {}
|
||||
//! Err(Error::PromptTooLong) => { /* caller compacts + retries */ }
|
||||
//! Err(Error::RateLimited) => { /* caller parks + retries */ }
|
||||
|
|
@ -51,11 +58,17 @@ mod classify;
|
|||
mod config;
|
||||
mod driver;
|
||||
mod error;
|
||||
mod policy;
|
||||
mod session;
|
||||
mod sink;
|
||||
mod store;
|
||||
mod usage;
|
||||
|
||||
pub use config::{Config, Session};
|
||||
pub use config::{Attach, Config};
|
||||
pub use driver::Claude;
|
||||
pub use error::{Error, Result};
|
||||
pub use policy::{CompactionPolicy, NeverCompact, PercentPolicy};
|
||||
pub use session::{InfiniteSession, Progress};
|
||||
pub use sink::{NoopSink, Sink};
|
||||
pub use store::SessionStore;
|
||||
pub use usage::Usage;
|
||||
|
|
|
|||
Loading…
Reference in a new issue