Add the channel messages and the usage record to proto
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{CallId, DataClass, SessionId, Timestamp};
|
||||
use crate::{CallId, DataClass, SessionId, Timestamp, Usage};
|
||||
|
||||
pub const PROTOCOL_VERSION: u32 = 1;
|
||||
|
||||
@@ -24,6 +24,9 @@ pub enum Message {
|
||||
ToolRequest(ToolRequest),
|
||||
ToolResponse(ToolResponse),
|
||||
Error(WireError),
|
||||
Turn(Turn),
|
||||
TurnEvent(TurnEvent),
|
||||
TurnDone(TurnDone),
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||
@@ -40,6 +43,12 @@ pub enum ErrorCode {
|
||||
BadVersion,
|
||||
BadMessage,
|
||||
Internal,
|
||||
SessionFull,
|
||||
TurnLimit,
|
||||
SessionBusy,
|
||||
NoSuchSession,
|
||||
SessionExists,
|
||||
Inference,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||
@@ -82,3 +91,63 @@ pub enum DenyReason {
|
||||
ApprovalRefused,
|
||||
ApprovalExpired,
|
||||
}
|
||||
|
||||
// JSON: {"kind":"turn","body":{"session":"…","content":"…","resume":false}}
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||
#[serde(deny_unknown_fields)]
|
||||
pub struct Turn {
|
||||
pub session: SessionId,
|
||||
pub content: String,
|
||||
pub resume: bool,
|
||||
}
|
||||
|
||||
// JSON: {"event":"content","text":"…"} — the tag sits beside the fields, snake_case
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||
#[serde(tag = "event", deny_unknown_fields, rename_all = "snake_case")]
|
||||
pub enum TurnEvent {
|
||||
Queued {
|
||||
ahead: u64,
|
||||
},
|
||||
Waiting {
|
||||
slot_busy: bool,
|
||||
},
|
||||
Progress {
|
||||
total: u64,
|
||||
cache: u64,
|
||||
processed: u64,
|
||||
},
|
||||
Reasoning {
|
||||
text: String,
|
||||
},
|
||||
Content {
|
||||
text: String,
|
||||
},
|
||||
ToolCallStarted {
|
||||
name: String,
|
||||
},
|
||||
ToolResult {
|
||||
name: String,
|
||||
class: DataClass,
|
||||
truncated: bool,
|
||||
},
|
||||
ThinkingCapped {
|
||||
tokens: u64,
|
||||
},
|
||||
Retrying {
|
||||
attempt: u32,
|
||||
after_ms: u64,
|
||||
error: String,
|
||||
},
|
||||
CacheLoss {
|
||||
expected: u64,
|
||||
got: u64,
|
||||
},
|
||||
}
|
||||
|
||||
// JSON: {"kind":"turn_done","body":{"content":"…","usage":{…}}}
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||
#[serde(deny_unknown_fields)]
|
||||
pub struct TurnDone {
|
||||
pub content: String,
|
||||
pub usage: Usage,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user