aboutsummaryrefslogtreecommitdiffstats
path: root/crates/atuin-ai/src/event_serde.rs
diff options
context:
space:
mode:
authorMichelle Tilley <michelle@michelletilley.net>2026-04-23 13:43:01 -0700
committerGitHub <noreply@github.com>2026-04-23 13:43:01 -0700
commit461ef4c43589c6ca68176c180fd04f2755c9f036 (patch)
treec646ea272d6016533c4941592f9a22baa2a54488 /crates/atuin-ai/src/event_serde.rs
parentfeat: Send user-defined context with `TERMINAL.md` (#3443) (diff)
downloadatuin-461ef4c43589c6ca68176c180fd04f2755c9f036.zip
feat: Add skill discovery, loading, and invocation (#3444)
Adds a skills system that lets users define reusable LLM instructions as `SKILL.md` files with YAML frontmatter.
Diffstat (limited to 'crates/atuin-ai/src/event_serde.rs')
-rw-r--r--crates/atuin-ai/src/event_serde.rs21
1 files changed, 21 insertions, 0 deletions
diff --git a/crates/atuin-ai/src/event_serde.rs b/crates/atuin-ai/src/event_serde.rs
index 546d6e5b..e3f9d6f7 100644
--- a/crates/atuin-ai/src/event_serde.rs
+++ b/crates/atuin-ai/src/event_serde.rs
@@ -64,6 +64,19 @@ pub(crate) fn serialize_event(event: &ConversationEvent) -> (String, String) {
"system_context".to_string(),
serde_json::json!({ "content": content }).to_string(),
),
+ ConversationEvent::SkillInvocation {
+ name,
+ arguments,
+ content,
+ } => (
+ "skill_invocation".to_string(),
+ serde_json::json!({
+ "name": name,
+ "arguments": arguments,
+ "content": content,
+ })
+ .to_string(),
+ ),
}
}
@@ -112,6 +125,14 @@ pub(crate) fn deserialize_event(event_type: &str, event_data: &str) -> Result<Co
"system_context" => Ok(ConversationEvent::SystemContext {
content: json_string(&data, "content")?,
}),
+ "skill_invocation" => Ok(ConversationEvent::SkillInvocation {
+ name: json_string(&data, "name")?,
+ arguments: data
+ .get("arguments")
+ .and_then(|v| if v.is_null() { None } else { v.as_str() })
+ .map(String::from),
+ content: json_string(&data, "content")?,
+ }),
other => Err(eyre!("unknown event type: {other}")),
}
}