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::{
25 JobChange, JobReport, JobStatus, OriginKind, TurnOrigin, describe_reports, job_agent,
26};
27pub use client::{ChatLog, ClientMessage};
28pub use daemon::{
29 ComponentHealth, ComponentState, ConfirmInfo, ConfirmState, DEFAULT_CONFIRM_SECONDS,
30 DaemonCommand, DaemonStatus, DelegationInfo, DelegationSummary, MAX_CONFIRM_SECONDS,
31 MailAction, MailCounts, ProjectEvent, ProjectPhase, ProjectReport, ProjectResponse, ProjectRun,
32 ProjectRunStatus, ProjectStatus, ProjectSummary, ProjectTask, ProjectTaskStatus, Purpose,
33 RemoteTools, RestartInfo, Senders,
34};
35pub use error::{ErrorCode, ToolErrorKind};
36pub use frame::{Frame, FrameDecoder, Overflow, Step, encode_frame, trim_line};
37pub use server::ServerEvent;
38
39pub const PROTOCOL_VERSION: u32 = 3;
41
42pub const MAX_CHANNEL_NAME_BYTES: usize = 32;
44pub const MAX_SYSTEM_PROMPT_BYTES: usize = 16 * 1024;
46pub const MAX_TURN_ATTACHMENTS: usize = 16;
48pub const CHAT_ATTACH_TOOL: &str = "chat_attach";
50
51#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
53pub struct QueueEntry {
54 pub queue_id: String,
56 pub revision: u64,
58 pub prompt: String,
60 pub submitter: String,
62 #[serde(default, skip_serializing_if = "Vec::is_empty")]
64 pub attachments: Vec<Attachment>,
65}
66
67#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
69pub struct PeerInfo {
70 pub name: String,
72 pub version: String,
74}
75
76#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)]
78pub struct Usage {
79 #[serde(skip_serializing_if = "Option::is_none")]
81 pub input_tokens: Option<u64>,
82 #[serde(skip_serializing_if = "Option::is_none")]
84 pub output_tokens: Option<u64>,
85}
86
87#[cfg(test)]
88mod tests;