Add IPC envelope and tool messages to proto

Implemented-By: Laguna S 2.1 (OpenCode)
This commit is contained in:
2026-09-17 07:53:40 -07:00
parent 1e1b543a7c
commit 56e12f40a6
10 changed files with 273 additions and 0 deletions
+5
View File
@@ -2,6 +2,11 @@
pub mod class;
pub mod ids;
pub mod wire;
pub use class::DataClass;
pub use ids::{CallId, Epoch, Hash32, SessionId, Timestamp, ValueError};
pub use wire::{
DenyReason, Envelope, ErrorCode, Message, PROTOCOL_VERSION, ToolRequest, ToolResponse,
WireError,
};
+84
View File
@@ -0,0 +1,84 @@
use serde::{Deserialize, Serialize};
use crate::{CallId, DataClass, SessionId, Timestamp};
pub const PROTOCOL_VERSION: u32 = 1;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct Envelope {
pub v: u32,
pub id: u64,
pub r#final: bool,
pub msg: Message,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(
tag = "kind",
content = "body",
deny_unknown_fields,
rename_all = "snake_case"
)]
pub enum Message {
ToolRequest(ToolRequest),
ToolResponse(ToolResponse),
Error(WireError),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct WireError {
pub code: ErrorCode,
pub detail: String,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum ErrorCode {
BadFrame,
BadVersion,
BadMessage,
Internal,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct ToolRequest {
pub session: SessionId,
pub call: CallId,
pub tool: String,
pub arguments: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(tag = "status", deny_unknown_fields, rename_all = "snake_case")]
pub enum ToolResponse {
PendingApproval {
approval: String,
expires: Timestamp,
},
Result {
content: String,
class: DataClass,
untrusted: bool,
truncated: bool,
},
Failed {
message: String,
},
Denied {
reason: DenyReason,
},
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum DenyReason {
NoGrant,
GrantExpired,
TaintTooHigh,
DeniedByGrant,
ApprovalRefused,
ApprovalExpired,
}