Skip to main content

atomr_agents_coding_cli_harness/
spec.rs

1use std::path::PathBuf;
2use std::time::Duration;
3
4use serde::{Deserialize, Serialize};
5
6/// Top-level harness configuration.
7#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct CodingCliHarnessSpec {
9    /// Default model used when a `CliRequest` does not name one.
10    #[serde(default)]
11    pub default_model: Option<String>,
12    /// Default wall-clock budget per headless run.
13    #[serde(default = "default_wall_clock")]
14    pub default_wall_clock: Duration,
15    /// Cap on simultaneous headless runs. Beyond this the harness
16    /// queues incoming requests (FIFO).
17    #[serde(default = "default_max_runs")]
18    pub max_concurrent_runs: usize,
19    /// Cap on simultaneous interactive sessions.
20    #[serde(default = "default_max_sessions")]
21    pub max_concurrent_sessions: usize,
22    /// Capacity of the broadcast event channel.
23    #[serde(default = "default_channel_cap")]
24    pub event_channel_capacity: usize,
25    /// Optional root path where run logs and configs are kept.
26    #[serde(default)]
27    pub state_dir: Option<PathBuf>,
28}
29
30impl Default for CodingCliHarnessSpec {
31    fn default() -> Self {
32        Self {
33            default_model: None,
34            default_wall_clock: default_wall_clock(),
35            max_concurrent_runs: default_max_runs(),
36            max_concurrent_sessions: default_max_sessions(),
37            event_channel_capacity: default_channel_cap(),
38            state_dir: None,
39        }
40    }
41}
42
43fn default_wall_clock() -> Duration {
44    Duration::from_secs(30 * 60)
45}
46fn default_max_runs() -> usize {
47    8
48}
49fn default_max_sessions() -> usize {
50    16
51}
52fn default_channel_cap() -> usize {
53    512
54}