khive_runtime/
mounted_verb.rs1use serde::{Deserialize, Serialize};
2use serde_json::{json, Value};
3
4use crate::mount_config::MountEffect;
5
6#[derive(Clone, Debug, Deserialize, Serialize)]
7pub struct MountedVerb {
8 pub name: String,
9 pub description: Option<String>,
10 pub input_schema: Value,
11 pub output_schema: Option<Value>,
12 pub effect: MountEffect,
13 pub digest: String,
14 pub generation: i64,
15}
16
17impl MountedVerb {
18 pub fn describe(&self, pack: &str) -> Value {
19 json!({
20 "verb": format!("{pack}.{}", self.name), "pack": pack,
21 "description": self.description.as_deref().unwrap_or("Mounted tool"),
22 "visibility": "Verb",
23 "signature": format!("{pack}.{}(...)", self.name),
24 "category": if self.effect == MountEffect::Read { "Assertive" } else { "Commissive" },
25 "input_schema": self.input_schema, "output_schema": self.output_schema,
26 "effect": self.effect, "generation": self.generation,
27 })
28 }
29}