supercode_interchange/orchestration/
profile.rs1use std::collections::BTreeMap;
5use std::path::PathBuf;
6
7use schemars::JsonSchema;
8use serde::{Deserialize, Serialize};
9use serde_json::Value;
10
11use super::agent::{AgentDecl, Budget, Conversation, Handoff, SessionUsage, Transfer};
12use super::{Access, ChannelConfig, Fire, Job, Obligation, Route, WebhookSubscription, WorkerSpec};
13use crate::ontology::Binding;
14
15#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
17pub struct PersonaRef {
18 pub path: String,
20 #[serde(default)]
22 pub text: Option<String>,
23 pub sha256: String,
25}
26
27#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
29pub struct ProfileResidue {
30 #[serde(default)]
32 pub config: BTreeMap<String, Value>,
33 #[serde(default)]
35 pub files: Vec<String>,
36}
37
38#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
40pub struct Profile {
41 pub name: String,
43 pub dir: PathBuf,
45 #[serde(default)]
47 pub worker: Option<WorkerSpec>,
48 #[serde(default)]
50 pub persona: Option<PersonaRef>,
51 #[serde(default)]
53 pub channels: BTreeMap<String, ChannelConfig>,
54 #[serde(default)]
56 pub routes: Vec<Route>,
57 #[serde(default)]
59 pub jobs: BTreeMap<String, Job>,
60 #[serde(default)]
62 pub subscriptions: BTreeMap<String, WebhookSubscription>,
63 #[serde(default)]
65 pub access: Access,
66 #[serde(default)]
69 pub bindings: BTreeMap<String, Binding>,
70 #[serde(default)]
72 pub fires: Vec<Fire>,
73 #[serde(default)]
75 pub obligations: Vec<Obligation>,
76 #[serde(default, skip_serializing_if = "Vec::is_empty")]
78 pub budgets: Vec<Budget>,
79 #[serde(default)]
81 pub residue: ProfileResidue,
82}
83
84#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
87pub struct Orchestration {
88 pub root: PathBuf,
90 pub profiles: BTreeMap<String, Profile>,
92 #[serde(default = "super::workflow::hermes_instance")]
94 pub workflow: super::Workflow,
95 #[serde(default)]
97 pub agents: BTreeMap<String, AgentDecl>,
98 #[serde(default)]
100 pub conversations: BTreeMap<String, Conversation>,
101 #[serde(default)]
103 pub transfers: Vec<Transfer>,
104 #[serde(default)]
106 pub handoffs: Vec<Handoff>,
107 #[serde(default)]
109 pub usage: BTreeMap<String, SessionUsage>,
110}