Add IPC envelope and tool messages to proto
Implemented-By: Laguna S 2.1 (OpenCode)
This commit is contained in:
@@ -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,
|
||||
};
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
Reference in New Issue
Block a user