core/src/context/user_shell_command.rs
48 lines
use std::time::Duration;use super::ContextualUserFragment;#[derive(Debug, Clone, PartialEq)]pub(crate) struct UserShellCommand { pub(crate) command: String, pub(crate) exit_code: i32, pub(crate) duration_seconds: f64, pub(crate) output: String,}impl UserShellCommand { pub(crate) fn new( command: impl Into<String>, exit_code: i32, duration: Duration, output: impl Into<String>, ) -> Self { Self { command: command.into(), exit_code, duration_seconds: duration.as_secs_f64(), output: output.into(), } }}impl ContextualUserFragment for UserShellCommand { fn role(&self) -> &'static str { "user" } fn markers(&self) -> (&'static str, &'static str) { Self::type_markers() } fn type_markers() -> (&'static str, &'static str) { ("<user_shell_command>", "</user_shell_command>") } fn body(&self) -> String { format!( "\n<command>\n{}\n</command>\n<result>\nExit code: {}\nDuration: {:.4} seconds\nOutput:\n{}\n</result>\n", self.command, self.exit_code, self.duration_seconds, self.output, ) }}