Skip to main content

khive_runtime/
mounted_verb.rs

1use 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}