Skip to main content

opendev_runtime/
lib.rs

1//! Runtime services for the OpenDev AI coding assistant.
2//!
3//! This crate provides:
4//! - [`approval`] — Pattern-based command approval rules with persistence
5//! - [`cost_tracker`] — Session-level token usage and cost tracking
6//! - [`interrupt`] — Async-safe cancellation token (CancellationToken pattern)
7//! - [`plan_index`] — Plan-session-project association index (JSON CRUD)
8//! - [`plan_names`] — Unique plan name generation (adjective-verb-noun)
9//! - [`session_model`] — Per-session model configuration overlay
10//! - [`error_handler`] — Error classification, retry logic, user-facing recovery
11//! - [`errors`] — Structured error types with provider pattern matching
12
13pub mod action_summarizer;
14pub mod approval;
15pub mod ask_user_channel;
16pub mod constants;
17pub mod cost_tracker;
18pub mod custom_commands;
19pub mod debug_logger;
20pub mod error_handler;
21pub mod errors;
22pub mod event_bus;
23pub mod file_watcher;
24pub mod gitignore;
25pub mod interrupt;
26pub mod lazy_init;
27pub mod permissions;
28pub mod plan_approval;
29pub mod plan_index;
30pub mod plan_names;
31pub mod sandbox;
32pub mod secrets;
33pub mod session_model;
34pub mod session_status;
35pub mod snapshot;
36pub mod sound;
37pub mod state_snapshot;
38pub mod task_scheduler;
39pub mod todo;
40pub mod tool_approval_channel;
41pub mod tool_summarizer;
42
43// Re-export key types at crate root for convenience.
44pub use approval::{ApprovalRule, ApprovalRulesManager, RuleAction, RuleScope, RuleType};
45pub use constants::{AutonomyLevel, SAFE_COMMANDS, extract_command_prefix, is_safe_command};
46pub use cost_tracker::{CostTracker, PricingInfo, TokenUsage};
47pub use error_handler::{ErrorAction, ErrorResult, OperationError};
48pub use errors::{ErrorCategory, StructuredError, classify_api_error};
49pub use interrupt::{InterruptToken, InterruptedError};
50pub use plan_index::PlanIndex;
51pub use plan_names::generate_plan_name;
52pub use session_model::SessionModelManager;
53pub use todo::{
54    SubTodoItem, TodoItem, TodoManager, TodoStatus, parse_plan_steps, parse_status, strip_markdown,
55};
56
57pub use action_summarizer::summarize_action;
58pub use ask_user_channel::{AskUserReceiver, AskUserRequest, AskUserSender, ask_user_channel};
59pub use custom_commands::{CustomCommand, CustomCommandLoader};
60pub use debug_logger::SessionDebugLogger;
61pub use event_bus::{
62    Event, EventBus, EventTopic, FilteredSubscriber, RuntimeEvent, TopicSubscriber,
63    group_runtime_events_by_topic,
64};
65pub use file_watcher::{FileChange, FileChangeKind, FileWatcher, FileWatcherConfig};
66pub use gitignore::GitIgnoreParser;
67pub use lazy_init::{
68    LazyEmbeddings, LazyLsp, LazyMcp, LazySubsystem, SyncLazy, create_lazy_subsystems,
69};
70pub use permissions::{PermissionAction, PermissionRule, PermissionRuleSet, is_sensitive_file};
71pub use plan_approval::{
72    PlanApprovalReceiver, PlanApprovalRequest, PlanApprovalSender, PlanDecision,
73    plan_approval_channel,
74};
75pub use sandbox::SandboxConfig;
76pub use secrets::{SecretKind, SecretMatch, detect_secrets, redact_secrets};
77pub use session_status::{SessionStatus, SessionStatusTracker};
78pub use snapshot::SnapshotManager;
79pub use sound::play_finish_sound;
80pub use state_snapshot::{AppStateSnapshot, SnapshotPersistence, ToolResultEntry};
81pub use task_scheduler::TaskScheduler;
82pub use tool_approval_channel::{
83    ToolApprovalDecision, ToolApprovalReceiver, ToolApprovalRequest, ToolApprovalSender,
84    tool_approval_channel,
85};
86pub use tool_summarizer::{build_background_result, safe_truncate, summarize_tool_result};