nexus_memory_hooks/lib.rs
1//! Nexus Hooks - Agent hooks system for automated memory extraction
2//!
3//! This crate provides a four-layer extraction system for capturing
4//! agent session context with 95-100% reliability:
5//!
6//! 1. **Native Hooks** (100%): Claude Skills, Gemini Functions, Qwen Hooks, pi-mono, oh-my-pi
7//! 2. **Session Monitor** (95%): Process monitoring via sysinfo
8//! 3. **Inactivity Detector** (90%): Configurable timeout detection
9//! 4. **Persistent Buffer** (99%): Crash recovery from buffer
10//!
11//! # Supported Agents
12//!
13//! - **Claude Code**: Skills-based (SKILL.md format)
14//! - **Gemini**: Function Calling
15//! - **Qwen**: Hooks SubAgent
16//! - **pi-mono**: Skills-based (TypeScript/Bun)
17//! - **oh-my-pi**: Skills-based (TypeScript/Bun + Rust N-API)
18//! - **pi-skills**: Cross-compatible skills
19//! - **CLI Agents**: Amp, Droid, OpenCode, Codex (atexit/signals)
20//!
21//! # Example
22//!
23//! ```rust,no_run
24//! use nexus_hooks::{HookFactory, AgentHook, MultiLayerExtractor};
25//!
26//! #[tokio::main]
27//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
28//! // Create hook for specific agent
29//! let factory = HookFactory::new();
30//! let mut hook = factory.create_hook("claude-code")?;
31//!
32//! // Check if session is active
33//! let activity = hook.detect_session_activity().await?;
34//! println!("Session active: {}", activity.is_active);
35//!
36//! // Extract session context
37//! if activity.is_active {
38//! let context = hook.extract_session_context().await?;
39//! println!("Extracted context: {:?}", context);
40//! }
41//!
42//! Ok(())
43//! }
44//! ```
45
46pub mod agents;
47pub mod base;
48pub mod buffer;
49pub mod detector;
50pub mod error;
51pub mod extractor;
52pub mod factory;
53pub mod monitor;
54pub mod session;
55pub mod signal;
56pub mod types;
57
58// Re-export main types
59pub use base::{AgentHook, HookResult};
60pub use buffer::PersistentBuffer;
61pub use detector::InactivityDetector;
62pub use error::{HookError, Result};
63pub use extractor::MultiLayerExtractor;
64pub use factory::HookFactory;
65pub use monitor::{ProcessMonitor, SessionMonitor};
66pub use session::SessionContext;
67pub use types::*;
68
69// Re-export agent hooks
70pub use agents::{
71 CLIHook, ClaudeCodeHook, GeminiHook, OhMyPiHook, PiMonoHook, PiSkillsHook, QwenHook,
72};
73
74/// Hook version
75pub const VERSION: &str = env!("CARGO_PKG_VERSION");
76
77/// Default inactivity timeout in seconds (5 minutes)
78pub const DEFAULT_INACTIVITY_TIMEOUT_SECS: u64 = 300;
79
80/// Default buffer flush interval in seconds
81pub const DEFAULT_BUFFER_FLUSH_INTERVAL_SECS: u64 = 10;
82
83/// Default process polling interval in seconds
84pub const DEFAULT_POLLING_INTERVAL_SECS: u64 = 5;