Skip to main content

gate4agent_types/
readiness.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize)]
4#[serde(rename_all = "kebab-case")]
5pub enum DraftReadySignal {
6    BracketedPaste,
7    ClaudeComposerPrompt,
8    QuietAfterBracketedPaste,
9    CodexComposerPrompt,
10    CursorAfterBracketedPaste,
11}
12
13#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)]
14pub struct AgentReadinessSpec {
15    pub timeout_ms: u64,
16    pub poll_interval_ms: u64,
17    pub wrapper_child_fallback_after_polls: Option<u32>,
18    pub allow_title_idle: bool,
19    /// Require both foreground ownership and the configured terminal signal
20    /// before submitting a follow-up prompt.
21    #[serde(default)]
22    pub followup_requires_terminal: bool,
23    pub draft_signal: DraftReadySignal,
24    pub draft_quiet_ms: u64,
25}
26
27impl Default for AgentReadinessSpec {
28    fn default() -> Self {
29        Self {
30            timeout_ms: 5_000,
31            poll_interval_ms: 150,
32            wrapper_child_fallback_after_polls: Some(4),
33            allow_title_idle: true,
34            followup_requires_terminal: false,
35            draft_signal: DraftReadySignal::QuietAfterBracketedPaste,
36            draft_quiet_ms: 1_500,
37        }
38    }
39}