1#![forbid(unsafe_code)]
11#![warn(missing_docs)]
12
13mod attachment;
14mod background;
15mod client;
16mod daemon;
17mod error;
18mod frame;
19mod server;
20
21use serde::{Deserialize, Serialize};
22
23pub use attachment::{Attachment, ReplyAttachment, reply_attachment};
24pub use background::{JobChange, JobStatus, OriginKind, TurnOrigin, job_agent};
25pub use client::{ChatLog, ClientMessage};
26pub use daemon::{
27 ComponentHealth, ComponentState, ConfirmInfo, ConfirmState, DEFAULT_CONFIRM_SECONDS,
28 DaemonCommand, DaemonStatus, DelegationInfo, DelegationSummary, MAX_CONFIRM_SECONDS,
29 MailCounts, ProjectEvent, ProjectPhase, ProjectReport, ProjectResponse, ProjectRun,
30 ProjectRunStatus, ProjectStatus, ProjectSummary, ProjectTask, ProjectTaskStatus, Purpose,
31 RemoteTools, RestartInfo, Senders,
32};
33pub use error::{ErrorCode, ToolErrorKind};
34pub use frame::{Frame, FrameDecoder, Overflow, Step, encode_frame, trim_line};
35pub use server::ServerEvent;
36
37pub const PROTOCOL_VERSION: u32 = 3;
39
40pub const MAX_CHANNEL_NAME_BYTES: usize = 32;
42pub const MAX_SYSTEM_PROMPT_BYTES: usize = 16 * 1024;
44pub const MAX_TURN_ATTACHMENTS: usize = 16;
46pub const CHAT_ATTACH_TOOL: &str = "chat_attach";
48
49#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
51pub struct QueueEntry {
52 pub queue_id: String,
54 pub revision: u64,
56 pub prompt: String,
58 pub submitter: String,
60 #[serde(default, skip_serializing_if = "Vec::is_empty")]
62 pub attachments: Vec<Attachment>,
63}
64
65#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
67pub struct PeerInfo {
68 pub name: String,
70 pub version: String,
72}
73
74#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)]
76pub struct Usage {
77 #[serde(skip_serializing_if = "Option::is_none")]
79 pub input_tokens: Option<u64>,
80 #[serde(skip_serializing_if = "Option::is_none")]
82 pub output_tokens: Option<u64>,
83}
84
85#[cfg(test)]
86mod tests;