use crate::base::hash::Hash256;
use crate::base::time::Time;
use crate::record::author::ActorId;
use crate::record::kind::*;
use crate::record::refs::RecordId;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct Attachment {
pub path: String,
pub content: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct RequestData {
pub objective: String,
pub scope: Hash256,
#[serde(default)]
pub attachments: Vec<Attachment>,
#[serde(default)]
pub parent_request_id: Option<RecordId>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct ActionData {
pub request_id: RecordId,
pub action_class: String,
pub scope: Hash256,
pub exec_mode: ExecMode,
pub params: serde_json::Value,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct ResponseData {
pub request_id: RecordId,
pub content: String,
pub turn_index: u32,
pub closes_request: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct ResultData {
pub action_id: RecordId,
pub status: ResultStatus,
pub output: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct CapabilityData {
pub actor_id: ActorId,
pub action_class: String,
pub scope: Hash256,
pub mode: CapabilityMode,
pub expiry: Option<Time>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct ApprovalData {
pub target_action: Option<Hash256>,
pub action_class: Option<String>,
pub scope: Hash256,
pub actor_id: Option<ActorId>,
pub expiry: Option<Time>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct SummaryData {
pub summary_type: SummaryType,
pub subject: Hash256,
pub scope: Hash256,
pub claim_payload: Vec<u8>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct RefusalData {
pub target_id: RecordId,
pub target_kind: RefusalTarget,
pub reason_code: Option<ReasonCode>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct RetractionData {
pub target_id: RecordId,
pub reason: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct UsageData {
pub actor: ActorId,
pub used_record: RecordId,
pub consuming_record: RecordId,
pub role: String,
pub outcome: UsageOutcome,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct VerdictData {
pub result: VerdictResult,
pub reason: Option<ReasonCode>,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct UsageOutcomeCounts {
pub done: u64,
pub not_done: u64,
pub no_change: u64,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum PlanStatus {
Running,
Completed,
Abandoned,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum TaskStatus {
Pending,
Running,
Done,
Failed,
Skipped,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum FailurePolicy {
Continue,
AskUser,
Abort,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
#[serde(rename_all = "snake_case")]
pub enum PlanTaskKind {
#[default]
Generic,
Inspect,
Search,
Extract,
Verify,
Write,
Summarize,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
#[serde(rename_all = "snake_case")]
pub enum TaskDoneWhen {
#[default]
ToolSuccess,
NonEmptyResult,
ContentRetrieved,
FinalResponse,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct PlanTask {
pub id: String,
pub description: String,
#[serde(default)]
pub kind: PlanTaskKind,
pub tool_hint: Option<String>,
#[serde(default)]
pub inputs_from: Vec<String>,
#[serde(default)]
pub produces: Option<String>,
#[serde(default)]
pub done_when: TaskDoneWhen,
pub status: TaskStatus,
pub result_record_id: Option<RecordId>,
#[serde(default)]
pub depends_on: Vec<String>,
pub on_failure: FailurePolicy,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct PlanData {
pub request_id: RecordId,
pub tasks: Vec<PlanTask>,
pub status: PlanStatus,
}