mirror of
https://github.com/outbackdingo/optimclaw.git
synced 2026-08-25 23:10:11 +00:00
* fix: persist turns after approval and add agent-level tests Port relevant changes from PR #112 that were not carried over to #237: - Add persist_turn calls in process_approval for the response, error, and auth-required paths. Previously, turns completed after tool approval were never persisted to DB — if the process crashed after approval the entire turn (user message + assistant response) was lost. - Add agent-level unit tests: StaticLlmProvider mock, make_test_agent helper, tests for auto-approval logic, destructive shell command detection, and PendingApproval backward-compatible deserialization (without deferred_tool_calls field). - Remove unused _thread_state binding in process_approval. Co-Authored-By: Claude Opus 4.6 <[email protected]> * fix: address 14 audit findings in src/agent/ Audit of the agent module found 2 High, 7 Medium, 3 Low, and 2 Nit severity issues. This commit fixes all of them: High: - Remove 4 `.expect()` calls in session.rs (entry API, match, direct indexing, if-let) to eliminate panic paths in production - Add typed RoutineError enum replacing Result<_, String> across routine.rs, routine_engine.rs, and callers in history/store.rs and db/libsql/mod.rs Medium: - Sanitize routine names in path construction to prevent directory traversal (routine_engine.rs) - Log warnings for 5 silently-swallowed errors in scheduler.rs, compaction.rs, and worker.rs - Extract shared handle_auth_intercept helper to deduplicate auth interception in thread_ops.rs - Add session count warning threshold in session_manager.rs - Make FullJob stub degradation visible via warn-level log and prepended warning in output Low: - Restrict dead code visibility with #[cfg(test)] on 19 unused items in submission.rs, task.rs, and undo.rs - Narrow pub to pub(crate) on self_repair.rs builder methods - Remove TaskStatus from mod.rs re-exports (test-only type) Co-Authored-By: Claude Opus 4.6 <[email protected]> * fix: address PR review comments - Reorder persist_turn before persist_response_chain so the conversation row exists before the metadata UPDATE runs - Add persist_response_chain call to handle_auth_intercept so auth-required paths preserve the response chain - Harden sanitize_routine_name to use allowlist (alphanumeric, dash, underscore) instead of denylist replacements - Fix stale active_thread ID in get_or_create_thread: fall back to create_thread() when the stored ID is missing from the map - Persist turn on approval rejection so user messages survive crashes after a tool is rejected Co-Authored-By: Claude Opus 4.6 <[email protected]> --------- Co-authored-by: Claude Opus 4.6 <[email protected]>
50 lines
1.6 KiB
Rust
50 lines
1.6 KiB
Rust
//! Core agent logic.
|
|
//!
|
|
//! The agent orchestrates:
|
|
//! - Message routing from channels
|
|
//! - Job scheduling and execution
|
|
//! - Tool invocation with safety
|
|
//! - Self-repair for stuck jobs
|
|
//! - Proactive heartbeat execution
|
|
//! - Routine-based scheduled and reactive jobs
|
|
//! - Turn-based session management with undo
|
|
//! - Context compaction for long conversations
|
|
|
|
mod agent_loop;
|
|
mod commands;
|
|
pub mod compaction;
|
|
pub mod context_monitor;
|
|
pub mod cost_guard;
|
|
mod dispatcher;
|
|
mod heartbeat;
|
|
pub mod job_monitor;
|
|
mod router;
|
|
pub mod routine;
|
|
pub mod routine_engine;
|
|
mod scheduler;
|
|
mod self_repair;
|
|
pub mod session;
|
|
mod session_manager;
|
|
pub mod submission;
|
|
pub mod task;
|
|
mod thread_ops;
|
|
pub mod undo;
|
|
pub mod worker;
|
|
|
|
pub(crate) use agent_loop::truncate_for_preview;
|
|
pub use agent_loop::{Agent, AgentDeps};
|
|
pub use compaction::{CompactionResult, ContextCompactor};
|
|
pub use context_monitor::{CompactionStrategy, ContextBreakdown, ContextMonitor};
|
|
pub use heartbeat::{HeartbeatConfig, HeartbeatResult, HeartbeatRunner, spawn_heartbeat};
|
|
pub use router::{MessageIntent, Router};
|
|
pub use routine::{Routine, RoutineAction, RoutineRun, Trigger};
|
|
pub use routine_engine::RoutineEngine;
|
|
pub use scheduler::Scheduler;
|
|
pub use self_repair::{BrokenTool, RepairResult, RepairTask, SelfRepair, StuckJob};
|
|
pub use session::{PendingApproval, PendingAuth, Session, Thread, ThreadState, Turn, TurnState};
|
|
pub use session_manager::SessionManager;
|
|
pub use submission::{Submission, SubmissionParser, SubmissionResult};
|
|
pub use task::{Task, TaskContext, TaskHandler, TaskOutput};
|
|
pub use undo::{Checkpoint, UndoManager};
|
|
pub use worker::{Worker, WorkerDeps};
|