1#![forbid(unsafe_code)]
11#![warn(missing_docs)]
12
13mod attachment;
14mod background;
15mod client;
16mod daemon;
17mod error;
18mod frame;
19mod review;
20mod server;
21mod workbench;
22
23use serde::{Deserialize, Serialize};
24
25pub use attachment::{Attachment, ReplyAttachment, reply_attachment};
26pub use background::{
27 JobChange, JobReport, JobStatus, OriginKind, TurnOrigin, describe_reports, job_agent,
28};
29pub use client::{ChatLog, ClientMessage};
30pub use daemon::{
31 ComponentHealth, ComponentState, ConfirmInfo, ConfirmState, DEFAULT_CONFIRM_SECONDS,
32 DaemonCommand, DaemonStatus, DelegationInfo, DelegationSummary, MAX_CONFIRM_SECONDS,
33 MailAction, MailCounts, ProjectEvent, ProjectPhase, ProjectReport, ProjectResponse, ProjectRun,
34 ProjectRunStatus, ProjectStatus, ProjectSummary, ProjectTask, ProjectTaskStatus, Purpose,
35 RemoteTools, RestartInfo, Senders,
36};
37pub use error::{ErrorCode, ToolErrorKind};
38pub use frame::{Frame, FrameDecoder, Overflow, Step, encode_frame, trim_line};
39pub use review::{
40 JobOutcome, LandMode, LandingEvidence, LandingStatus, LandingSummary, OpenFinding, Refusal,
41 ReviewOutcome, ReviewSummary, ReviewerResult, TriedReviewer, describe_outcome, outcome_notice,
42};
43pub use server::ServerEvent;
44pub use workbench::{
45 AgentState, AttachColor, AttachPage, AttachRow, AttachSpan, JobOrigin, JobResult,
46 MAX_JOB_RESULT_BYTES, RestorableSession, RestoredQueue, RunEvent, RunEventKind, RunLogPage,
47 SendMode, WorkbenchApproval, WorkbenchJob, WorkbenchRun, WorkbenchSession, WorkbenchSnapshot,
48 WorktreeInfo, WorktreeRef,
49};
50
51pub const PROTOCOL_VERSION: u32 = 3;
53
54pub const MAX_CHANNEL_NAME_BYTES: usize = 32;
56pub const MAX_SYSTEM_PROMPT_BYTES: usize = 16 * 1024;
58pub const MAX_TURN_ATTACHMENTS: usize = 16;
60pub const CHAT_ATTACH_TOOL: &str = "chat_attach";
62
63#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
65pub struct QueueEntry {
66 pub queue_id: String,
68 pub revision: u64,
70 pub prompt: String,
72 pub submitter: String,
74 #[serde(default, skip_serializing_if = "Vec::is_empty")]
76 pub attachments: Vec<Attachment>,
77}
78
79#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
81pub struct PeerInfo {
82 pub name: String,
84 pub version: String,
86}
87
88#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)]
90pub struct Usage {
91 #[serde(skip_serializing_if = "Option::is_none")]
93 pub input_tokens: Option<u64>,
94 #[serde(skip_serializing_if = "Option::is_none")]
96 pub output_tokens: Option<u64>,
97}
98
99#[cfg(test)]
100mod tests;