grok-build-upstream-mirror/crates/codegen/xai-grok-pager/src/slash/commands/compact.rs
grokkybara[bot] c68e39f604 Publish harness and TUI open-source
initial sync from the monorepo
2026-07-16 06:46:02 +01:00

51 lines
1.3 KiB
Rust

//! `/compact` -- compact conversation history.
//!
//! Takes an optional context argument. Stays on the existing queue pipeline:
//! returns `CommandResult::QueueCommand` so the dispatch layer enqueues it
//! as `QueueEntryKind::Command`.
use crate::slash::command::{CommandExecCtx, CommandResult, SlashCommand};
/// Compact the conversation history, optionally with a focus context.
pub struct CompactCommand;
impl SlashCommand for CompactCommand {
fn name(&self) -> &str {
"compact"
}
fn description(&self) -> &str {
"Compact conversation history"
}
fn session_scoped(&self) -> bool {
true
}
fn usage(&self) -> &str {
"/compact compaction instructions"
}
fn takes_args(&self) -> bool {
true
}
/// Args are optional -- `/compact` with no args is valid.
fn args_required(&self) -> bool {
false
}
fn arg_placeholder(&self) -> Option<&str> {
Some("compaction instructions")
}
fn run(&self, _ctx: &mut CommandExecCtx, args: &str) -> CommandResult {
// Re-emit as queue command, preserving the full text.
let text = if args.trim().is_empty() {
"/compact".to_string()
} else {
format!("/compact {}", args)
};
CommandResult::QueueCommand(text)
}
}