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::ClientMessage;
26pub use daemon::{
27 ComponentHealth, ComponentState, ConfirmInfo, ConfirmState, DEFAULT_CONFIRM_SECONDS,
28 DaemonCommand, DaemonStatus, DelegationInfo, DelegationSummary, MAX_CONFIRM_SECONDS,
29 RemoteTools, RestartInfo, Senders,
30};
31pub use error::{ErrorCode, ToolErrorKind};
32pub use frame::{Frame, FrameDecoder, Overflow, Step, encode_frame, trim_line};
33pub use server::ServerEvent;
34
35pub const PROTOCOL_VERSION: u32 = 3;
37
38pub const MAX_CHANNEL_NAME_BYTES: usize = 32;
40pub const MAX_TURN_ATTACHMENTS: usize = 16;
42pub const CHAT_ATTACH_TOOL: &str = "chat_attach";
44
45#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
47pub struct QueueEntry {
48 pub queue_id: String,
50 pub revision: u64,
52 pub prompt: String,
54 pub submitter: String,
56 #[serde(default, skip_serializing_if = "Vec::is_empty")]
58 pub attachments: Vec<Attachment>,
59}
60
61#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
63pub struct PeerInfo {
64 pub name: String,
66 pub version: String,
68}
69
70#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)]
72pub struct Usage {
73 #[serde(skip_serializing_if = "Option::is_none")]
75 pub input_tokens: Option<u64>,
76 #[serde(skip_serializing_if = "Option::is_none")]
78 pub output_tokens: Option<u64>,
79}
80
81#[cfg(test)]
82mod tests;