1use kernel::{Address, B3Hash};
11use serde::{Deserialize, Serialize};
12
13#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
15#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
16pub struct AgentCatalogAnswer {
17 pub detected: Vec<AgentOffer>,
20 pub catalog: Vec<AgentOffer>,
23 pub added: Vec<AgentLine>,
25 pub snapshot: CatalogSnapshot,
26}
27
28#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
30#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
31pub struct CatalogSnapshot {
32 pub date: String,
34 pub etag: String,
36}
37
38#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
40#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
41pub struct AgentOffer {
42 pub id: String,
43 pub name: String,
44 pub source: AgentSource,
45 pub launch_preview: String,
47 pub version: Option<String>,
48 pub pinned: PinState,
49 pub licence: Option<String>,
50 pub env_names: Vec<String>,
53 pub login: Vec<LoginKind>,
54 pub spec_digest: B3Hash,
57}
58
59#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
61#[serde(rename_all = "snake_case")]
62#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
63pub enum AgentSource {
64 Registry,
66 Detected,
68 Pasted,
70}
71
72#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
74#[serde(rename_all = "snake_case")]
75#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
76pub enum PinState {
77 Exact,
79 Floating,
81 Unknown,
84}
85
86#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
88#[serde(rename_all = "snake_case")]
89#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
90pub enum LoginKind {
91 Agent,
93 Terminal,
95}
96
97#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
99#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
100pub struct AgentLine {
101 pub id: String,
102 pub name: String,
103 pub source: AgentSource,
104 pub version: Option<String>,
105 pub pinned: PinState,
106 pub login_state: LoginState,
107 pub auth_methods: Vec<AuthMethod>,
110 pub seated_in: Vec<Address>,
112}
113
114#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
116#[serde(rename_all = "snake_case")]
117#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
118pub enum LoginState {
119 Unasked,
121 Ready,
123 Required,
125}
126
127#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
129#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
130pub struct AuthMethod {
131 pub id: String,
132 pub name: String,
133 pub kind: LoginKind,
134}