agent_protocols/knowledge/
types.rs1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3use std::collections::BTreeMap;
4
5macro_rules! wire_enum {
6 ($name:ident { $($variant:ident => $wire:literal),+ $(,)? }) => {
7 #[derive(Clone, Copy, Debug, Serialize, Deserialize, PartialEq, Eq)]
8 pub enum $name { $(#[serde(rename = $wire)] $variant),+ }
9 };
10}
11wire_enum!(KnowledgeKind { Question => "question", Hypothesis => "hypothesis", Definition => "definition", Observation => "observation", Inference => "inference", Procedure => "procedure", Resource => "resource", NegativeResult => "negative_result", Synthesis => "synthesis", Collection => "collection" });
12wire_enum!(KnowledgeRelationKind { DerivedFrom => "derived_from", Addresses => "addresses", Tests => "tests", Extends => "extends", Supports => "supports", Contradicts => "contradicts", Supersedes => "supersedes", Contains => "contains" });
13wire_enum!(KnowledgeVerdict { Supports => "supports", Challenges => "challenges", Reproduced => "reproduced", NotReproduced => "not_reproduced", Applied => "applied", Inconclusive => "inconclusive" });
14wire_enum!(EvidenceRole { Source => "source", Input => "input", Output => "output", Environment => "environment", Validation => "validation" });
15wire_enum!(EvidenceStatus { Unchecked => "unchecked", Matched => "matched", Mismatched => "mismatched", Unavailable => "unavailable" });
16wire_enum!(SearchMode { Lexical => "lexical", Semantic => "semantic", Hybrid => "hybrid" });
17
18#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
19#[serde(deny_unknown_fields)]
20pub struct KnowledgeContext {
21 pub scope: String,
22 pub conditions: Vec<String>,
23 pub limitations: Vec<String>,
24}
25#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
26#[serde(deny_unknown_fields)]
27pub struct KnowledgeReproduction {
28 pub environment: String,
29 pub steps: Vec<String>,
30 pub expected: String,
31 #[serde(default, skip_serializing_if = "Option::is_none")]
32 pub observed: Option<String>,
33}
34#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
35#[serde(deny_unknown_fields)]
36pub struct KnowledgeEvidence {
37 pub url: String,
38 pub description: String,
39 #[serde(default, skip_serializing_if = "Option::is_none")]
40 pub digest: Option<String>,
41 #[serde(default, skip_serializing_if = "Option::is_none")]
42 pub media_type: Option<String>,
43 #[serde(default, skip_serializing_if = "Option::is_none")]
44 pub role: Option<EvidenceRole>,
45}
46#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
47#[serde(deny_unknown_fields)]
48pub struct KnowledgeRelation {
49 pub relation: KnowledgeRelationKind,
50 pub target: String,
51}
52#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
53#[serde(deny_unknown_fields)]
54pub struct KnowledgeProfileReference {
55 pub url: String,
56 pub digest: String,
57}
58#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
59#[serde(deny_unknown_fields)]
60pub struct KnowledgeProfileBinding {
61 pub profile: KnowledgeProfileReference,
62 pub data: BTreeMap<String, Value>,
63}
64#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
65#[serde(deny_unknown_fields)]
66pub struct KnowledgePublishPayload {
67 pub license: String,
68 pub kind: KnowledgeKind,
69 pub title: String,
70 pub statement: String,
71 pub language: String,
72 pub context: KnowledgeContext,
73 pub basis: String,
74 #[serde(default, skip_serializing_if = "Option::is_none")]
75 pub evidence: Option<Vec<KnowledgeEvidence>>,
76 #[serde(default, skip_serializing_if = "Option::is_none")]
77 pub reproduction: Option<KnowledgeReproduction>,
78 #[serde(default, skip_serializing_if = "Option::is_none")]
79 pub relations: Option<Vec<KnowledgeRelation>>,
80 #[serde(default, skip_serializing_if = "Option::is_none")]
81 pub tags: Option<Vec<String>>,
82 #[serde(default, skip_serializing_if = "Option::is_none")]
83 pub profiles: Option<Vec<KnowledgeProfileBinding>>,
84 #[serde(default, skip_serializing_if = "Option::is_none")]
85 pub extra: Option<BTreeMap<String, Value>>,
86}
87#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
88#[serde(deny_unknown_fields)]
89pub struct KnowledgeAssessPayload {
90 pub license: String,
91 pub target: String,
92 pub verdict: KnowledgeVerdict,
93 pub summary: String,
94 pub context: KnowledgeContext,
95 pub basis: String,
96 #[serde(default, skip_serializing_if = "Option::is_none")]
97 pub evidence: Option<Vec<KnowledgeEvidence>>,
98 #[serde(default, skip_serializing_if = "Option::is_none")]
99 pub reproduction: Option<KnowledgeReproduction>,
100 #[serde(default, skip_serializing_if = "Option::is_none")]
101 pub profiles: Option<Vec<KnowledgeProfileBinding>>,
102 #[serde(default, skip_serializing_if = "Option::is_none")]
103 pub extra: Option<BTreeMap<String, Value>>,
104}
105#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
106#[serde(deny_unknown_fields)]
107pub struct KnowledgeRetractPayload {
108 pub target: String,
109 pub reason: String,
110 #[serde(default, skip_serializing_if = "Option::is_none")]
111 pub extra: Option<BTreeMap<String, Value>>,
112}
113
114#[derive(Clone, Debug, Default, PartialEq)]
118pub struct KnowledgeSearchSelection {
119 pub candidates: Vec<String>,
120 pub ranking: Value,
121 pub coverage: Value,
122 pub explanations: BTreeMap<String, String>,
123}