Skip to main content

crabtalk_daemon/hook/system/
mod.rs

1//! System subsystem — task executor and memory configuration.
2//!
3//! Groups `[system.tasks]` and `[system.memory]` config under a single
4//! `SystemConfig` struct. Task registry and tool dispatch live in `task/`.
5
6use serde::{Deserialize, Serialize};
7
8pub mod ask_user;
9pub mod memory;
10pub mod session;
11pub mod task;
12
13/// Top-level `[system]` configuration.
14#[derive(Debug, Clone, Serialize, Deserialize, Default)]
15#[serde(default)]
16pub struct SystemConfig {
17    /// The default system agent config (model, heartbeat, thinking).
18    pub crab: wcore::AgentConfig,
19    /// Task executor pool configuration (`[system.tasks]`).
20    pub tasks: TasksConfig,
21    /// Built-in memory configuration (`[system.memory]`).
22    pub memory: MemoryConfig,
23}
24
25/// Task executor pool configuration.
26#[derive(Debug, Clone, Serialize, Deserialize)]
27#[serde(default)]
28pub struct TasksConfig {
29    /// Maximum number of concurrently InProgress tasks (default 4).
30    pub max_concurrent: usize,
31    /// Maximum number of tasks returned by queries (default 16).
32    pub viewable_window: usize,
33    /// Per-task execution timeout in seconds (default 300).
34    pub task_timeout: u64,
35}
36
37impl Default for TasksConfig {
38    fn default() -> Self {
39        Self {
40            max_concurrent: 4,
41            viewable_window: 16,
42            task_timeout: 300,
43        }
44    }
45}
46
47/// Built-in memory configuration.
48#[derive(Debug, Clone, Serialize, Deserialize)]
49#[serde(default)]
50pub struct MemoryConfig {
51    /// Maximum entries returned by auto-recall (default 5).
52    pub recall_limit: usize,
53    /// Whether the agent can edit Crab.md via the soul tool (default true).
54    pub soul_editable: bool,
55}
56
57impl Default for MemoryConfig {
58    fn default() -> Self {
59        Self {
60            recall_limit: 5,
61            soul_editable: true,
62        }
63    }
64}