use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[schemars(rename = "laboratories.daemon.RequestPayload")]
#[serde(tag = "type", rename_all = "snake_case")]
pub enum RequestPayload {
#[schemars(title = "Initialize")]
Initialize,
#[schemars(title = "SessionTerminate")]
SessionTerminate,
#[schemars(title = "ToolsList")]
ToolsList(crate::mcp::tool::ListToolsRequest),
#[schemars(title = "ToolsCall")]
ToolsCall(crate::mcp::tool::CallToolRequestParams),
#[schemars(title = "ResourcesList")]
ResourcesList(crate::mcp::resource::ListResourcesRequest),
#[schemars(title = "ResourcesRead")]
ResourcesRead(crate::mcp::resource::ReadResourceRequestParams),
#[schemars(title = "Drop")]
Drop(DropRequest),
#[schemars(title = "Filetree")]
Filetree(FiletreeRequest),
#[schemars(title = "ExportBegin")]
ExportBegin(ExportBeginRequest),
#[schemars(title = "ExportRead")]
ExportRead(TransferIdRequest),
#[schemars(title = "ExportAbort")]
ExportAbort(TransferIdRequest),
#[schemars(title = "ImportBegin")]
ImportBegin(ImportBeginRequest),
#[schemars(title = "ImportWrite")]
ImportWrite(ImportWriteRequest),
#[schemars(title = "ImportEnd")]
ImportEnd(TransferIdRequest),
#[schemars(title = "ImportAbort")]
ImportAbort(TransferIdRequest),
#[schemars(title = "Create")]
Create(CreateRequest),
#[schemars(title = "Delete")]
Delete(DeleteRequest),
#[schemars(title = "LocalTransfer")]
LocalTransfer(LocalTransferRequest),
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[schemars(rename = "laboratories.daemon.ResponsePayload")]
#[serde(tag = "type", rename_all = "snake_case")]
pub enum ResponsePayload {
#[schemars(title = "Initialize")]
Initialize(JsonRpcResult<InitializeReply>),
#[schemars(title = "SessionTerminate")]
SessionTerminate(JsonRpcResult<()>),
#[schemars(title = "ToolsList")]
ToolsList(JsonRpcResult<crate::mcp::tool::ListToolsResult>),
#[schemars(title = "ToolsCall")]
ToolsCall(JsonRpcResult<crate::mcp::tool::CallToolResult>),
#[schemars(title = "ResourcesList")]
ResourcesList(JsonRpcResult<crate::mcp::resource::ListResourcesResult>),
#[schemars(title = "ResourcesRead")]
ResourcesRead(JsonRpcResult<crate::mcp::resource::ReadResourceResult>),
#[schemars(title = "Drop")]
Drop(DropResult),
#[schemars(title = "Filetree")]
Filetree(JsonRpcResult<TransferAck>),
#[schemars(title = "ExportBegin")]
ExportBegin(JsonRpcResult<TransferBeginResult>),
#[schemars(title = "ExportRead")]
ExportRead(JsonRpcResult<ExportChunk>),
#[schemars(title = "ExportAbort")]
ExportAbort(JsonRpcResult<TransferAck>),
#[schemars(title = "ImportBegin")]
ImportBegin(JsonRpcResult<TransferBeginResult>),
#[schemars(title = "ImportWrite")]
ImportWrite(JsonRpcResult<TransferAck>),
#[schemars(title = "ImportEnd")]
ImportEnd(JsonRpcResult<ImportEndResult>),
#[schemars(title = "ImportAbort")]
ImportAbort(JsonRpcResult<TransferAck>),
#[schemars(title = "Create")]
Create(JsonRpcResult<super::Identify>),
#[schemars(title = "Delete")]
Delete(JsonRpcResult<TransferAck>),
#[schemars(title = "LocalTransfer")]
LocalTransfer(JsonRpcResult<LocalTransferResult>),
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[schemars(rename = "laboratories.daemon.JsonRpcResult.{R}", bound = "R: JsonSchema")]
#[serde(tag = "kind", rename_all = "snake_case")]
pub enum JsonRpcResult<R> {
#[schemars(title = "Ok")]
Ok { result: R },
#[schemars(title = "Err")]
Err {
code: i64,
message: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
#[schemars(extend("omitempty" = true))]
data: Option<serde_json::Value>,
},
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[schemars(rename = "laboratories.daemon.InitializeReply")]
pub struct InitializeReply {
pub mcp_session_id: String,
pub result: crate::mcp::initialize_result::InitializeResult,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[schemars(rename = "laboratories.daemon.DropRequest")]
pub struct DropRequest {
pub response_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[schemars(rename = "laboratories.daemon.DropResult")]
pub struct DropResult {
pub dropped: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[schemars(rename = "laboratories.daemon.FiletreeRequest")]
pub struct FiletreeRequest {
pub on: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[schemars(rename = "laboratories.daemon.ExportBeginRequest")]
pub struct ExportBeginRequest {
pub path: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[schemars(rename = "laboratories.daemon.ImportBeginRequest")]
pub struct ImportBeginRequest {
pub path: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[schemars(rename = "laboratories.daemon.TransferIdRequest")]
pub struct TransferIdRequest {
pub transfer_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[schemars(rename = "laboratories.daemon.ImportWriteRequest")]
pub struct ImportWriteRequest {
pub transfer_id: String,
pub data: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[schemars(rename = "laboratories.daemon.TransferBeginResult")]
pub struct TransferBeginResult {
pub transfer_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[schemars(rename = "laboratories.daemon.ExportChunk")]
pub struct ExportChunk {
pub data: String,
pub eof: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[schemars(rename = "laboratories.daemon.TransferAck")]
pub struct TransferAck {}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[schemars(rename = "laboratories.daemon.ImportEndResult")]
pub struct ImportEndResult {
pub bytes: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[schemars(rename = "laboratories.daemon.LocalTransferResult")]
pub struct LocalTransferResult {
pub bytes: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[schemars(rename = "laboratories.daemon.CreateRequest")]
pub struct CreateRequest {
pub id: String,
pub image: crate::laboratories::LaboratoryImage,
pub mounts: Vec<[String; 2]>,
pub env: Vec<[String; 2]>,
pub cwd: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
#[schemars(extend("omitempty" = true))]
pub agent_full_id: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[schemars(rename = "laboratories.daemon.DeleteRequest")]
pub struct DeleteRequest {
pub id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[schemars(rename = "laboratories.daemon.LocalTransferRequest")]
pub struct LocalTransferRequest {
pub source_id: String,
pub source_path: String,
pub destination_id: String,
pub destination_path: String,
}