mirror of
https://github.com/instructkr/claw-code.git
synced 2026-11-07 09:37:54 +01:00
Revert "Merge pull request #3333 from ultraworkers/implement-slash-commands"
This reverts commitcf18dac3ee, reversing changes made toa2eb74c00e.
This commit is contained in:
1 parent
cf18dac3ee
commit
c13e71851b
1 file changed
+7
-142
@@ -5297,60 +5297,6 @@ fn mcp_server_json(name: &str, server: &ScopedMcpServerConfig) -> Value {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render_session_status(session: &Session) -> String {
|
|
||||||
let message_count = session.messages.len();
|
|
||||||
let mut total_input = 0u32;
|
|
||||||
let mut total_output = 0u32;
|
|
||||||
for msg in &session.messages {
|
|
||||||
if let Some(usage) = msg.usage {
|
|
||||||
total_input = total_input.saturating_add(usage.input_tokens);
|
|
||||||
total_output = total_output.saturating_add(usage.output_tokens);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
format!(
|
|
||||||
"Session {}: {} messages, {} input tokens, {} output tokens",
|
|
||||||
&session.session_id[0..8],
|
|
||||||
message_count,
|
|
||||||
total_input,
|
|
||||||
total_output
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn render_token_cost(session: &Session) -> String {
|
|
||||||
let mut total_input = 0u32;
|
|
||||||
let mut total_output = 0u32;
|
|
||||||
let mut cache_creation = 0u32;
|
|
||||||
let mut cache_read = 0u32;
|
|
||||||
for msg in &session.messages {
|
|
||||||
if let Some(usage) = msg.usage {
|
|
||||||
total_input = total_input.saturating_add(usage.input_tokens);
|
|
||||||
total_output = total_output.saturating_add(usage.output_tokens);
|
|
||||||
cache_creation = cache_creation.saturating_add(usage.cache_creation_input_tokens);
|
|
||||||
cache_read = cache_read.saturating_add(usage.cache_read_input_tokens);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
format!(
|
|
||||||
"Cumulative token usage for this session:
|
|
||||||
Input tokens: {}
|
|
||||||
Output tokens: {}
|
|
||||||
Cache creation tokens: {}
|
|
||||||
Cache read tokens: {}
|
|
||||||
Total input: {}",
|
|
||||||
total_input,
|
|
||||||
total_output,
|
|
||||||
cache_creation,
|
|
||||||
cache_read,
|
|
||||||
total_input
|
|
||||||
.saturating_add(cache_creation)
|
|
||||||
.saturating_add(cache_read)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn render_version_info() -> String {
|
|
||||||
let version = env!("CARGO_PKG_VERSION");
|
|
||||||
format!("claw-code version {}", version)
|
|
||||||
}
|
|
||||||
|
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub fn handle_slash_command(
|
pub fn handle_slash_command(
|
||||||
input: &str,
|
input: &str,
|
||||||
@@ -5388,19 +5334,8 @@ pub fn handle_slash_command(
|
|||||||
message: render_slash_command_help(),
|
message: render_slash_command_help(),
|
||||||
session: session.clone(),
|
session: session.clone(),
|
||||||
}),
|
}),
|
||||||
SlashCommand::Status => Some(SlashCommandResult {
|
SlashCommand::Status
|
||||||
message: render_session_status(session),
|
| SlashCommand::Bughunter { .. }
|
||||||
session: session.clone(),
|
|
||||||
}),
|
|
||||||
SlashCommand::Cost => Some(SlashCommandResult {
|
|
||||||
message: render_token_cost(session),
|
|
||||||
session: session.clone(),
|
|
||||||
}),
|
|
||||||
SlashCommand::Version => Some(SlashCommandResult {
|
|
||||||
message: render_version_info(),
|
|
||||||
session: session.clone(),
|
|
||||||
}),
|
|
||||||
SlashCommand::Bughunter { .. }
|
|
||||||
| SlashCommand::Commit
|
| SlashCommand::Commit
|
||||||
| SlashCommand::Pr { .. }
|
| SlashCommand::Pr { .. }
|
||||||
| SlashCommand::Issue { .. }
|
| SlashCommand::Issue { .. }
|
||||||
@@ -5411,6 +5346,7 @@ pub fn handle_slash_command(
|
|||||||
| SlashCommand::Model { .. }
|
| SlashCommand::Model { .. }
|
||||||
| SlashCommand::Permissions { .. }
|
| SlashCommand::Permissions { .. }
|
||||||
| SlashCommand::Clear { .. }
|
| SlashCommand::Clear { .. }
|
||||||
|
| SlashCommand::Cost
|
||||||
| SlashCommand::Resume { .. }
|
| SlashCommand::Resume { .. }
|
||||||
| SlashCommand::Config { .. }
|
| SlashCommand::Config { .. }
|
||||||
| SlashCommand::Workspace { .. }
|
| SlashCommand::Workspace { .. }
|
||||||
@@ -5418,6 +5354,7 @@ pub fn handle_slash_command(
|
|||||||
| SlashCommand::Memory
|
| SlashCommand::Memory
|
||||||
| SlashCommand::Init
|
| SlashCommand::Init
|
||||||
| SlashCommand::Diff
|
| SlashCommand::Diff
|
||||||
|
| SlashCommand::Version
|
||||||
| SlashCommand::Export { .. }
|
| SlashCommand::Export { .. }
|
||||||
| SlashCommand::Session { .. }
|
| SlashCommand::Session { .. }
|
||||||
| SlashCommand::Plugins { .. }
|
| SlashCommand::Plugins { .. }
|
||||||
@@ -6256,6 +6193,7 @@ mod tests {
|
|||||||
fn ignores_unknown_or_runtime_bound_slash_commands() {
|
fn ignores_unknown_or_runtime_bound_slash_commands() {
|
||||||
let session = Session::new();
|
let session = Session::new();
|
||||||
assert!(handle_slash_command("/unknown", &session, CompactionConfig::default()).is_none());
|
assert!(handle_slash_command("/unknown", &session, CompactionConfig::default()).is_none());
|
||||||
|
assert!(handle_slash_command("/status", &session, CompactionConfig::default()).is_none());
|
||||||
assert!(handle_slash_command("/sandbox", &session, CompactionConfig::default()).is_none());
|
assert!(handle_slash_command("/sandbox", &session, CompactionConfig::default()).is_none());
|
||||||
assert!(
|
assert!(
|
||||||
handle_slash_command("/bughunter", &session, CompactionConfig::default()).is_none()
|
handle_slash_command("/bughunter", &session, CompactionConfig::default()).is_none()
|
||||||
@@ -6287,6 +6225,7 @@ mod tests {
|
|||||||
handle_slash_command("/clear --confirm", &session, CompactionConfig::default())
|
handle_slash_command("/clear --confirm", &session, CompactionConfig::default())
|
||||||
.is_none()
|
.is_none()
|
||||||
);
|
);
|
||||||
|
assert!(handle_slash_command("/cost", &session, CompactionConfig::default()).is_none());
|
||||||
assert!(handle_slash_command(
|
assert!(handle_slash_command(
|
||||||
"/resume session.json",
|
"/resume session.json",
|
||||||
&session,
|
&session,
|
||||||
@@ -6305,6 +6244,7 @@ mod tests {
|
|||||||
);
|
);
|
||||||
assert!(handle_slash_command("/mcp list", &session, CompactionConfig::default()).is_none());
|
assert!(handle_slash_command("/mcp list", &session, CompactionConfig::default()).is_none());
|
||||||
assert!(handle_slash_command("/diff", &session, CompactionConfig::default()).is_none());
|
assert!(handle_slash_command("/diff", &session, CompactionConfig::default()).is_none());
|
||||||
|
assert!(handle_slash_command("/version", &session, CompactionConfig::default()).is_none());
|
||||||
assert!(
|
assert!(
|
||||||
handle_slash_command("/export note.txt", &session, CompactionConfig::default())
|
handle_slash_command("/export note.txt", &session, CompactionConfig::default())
|
||||||
.is_none()
|
.is_none()
|
||||||
@@ -7266,79 +7206,4 @@ mod tests {
|
|||||||
let _ = fs::remove_dir_all(config_home);
|
let _ = fs::remove_dir_all(config_home);
|
||||||
let _ = fs::remove_dir_all(bundled_root);
|
let _ = fs::remove_dir_all(bundled_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn status_command_shows_session_info() {
|
|
||||||
use runtime::TokenUsage;
|
|
||||||
|
|
||||||
let mut session = Session::new();
|
|
||||||
session.messages.push(ConversationMessage {
|
|
||||||
role: MessageRole::User,
|
|
||||||
blocks: vec![ContentBlock::Text {
|
|
||||||
text: "hello".to_string(),
|
|
||||||
}],
|
|
||||||
usage: Some(TokenUsage {
|
|
||||||
input_tokens: 10,
|
|
||||||
output_tokens: 20,
|
|
||||||
cache_creation_input_tokens: 0,
|
|
||||||
cache_read_input_tokens: 0,
|
|
||||||
}),
|
|
||||||
});
|
|
||||||
session.messages.push(ConversationMessage {
|
|
||||||
role: MessageRole::Assistant,
|
|
||||||
blocks: vec![ContentBlock::Text {
|
|
||||||
text: "response".to_string(),
|
|
||||||
}],
|
|
||||||
usage: Some(TokenUsage {
|
|
||||||
input_tokens: 5,
|
|
||||||
output_tokens: 15,
|
|
||||||
cache_creation_input_tokens: 0,
|
|
||||||
cache_read_input_tokens: 0,
|
|
||||||
}),
|
|
||||||
});
|
|
||||||
|
|
||||||
let result = handle_slash_command("/status", &session, CompactionConfig::default())
|
|
||||||
.expect("/status should be handled");
|
|
||||||
assert!(result.message.contains("2 messages"));
|
|
||||||
assert!(result.message.contains("15 input tokens"));
|
|
||||||
assert!(result.message.contains("35 output tokens"));
|
|
||||||
assert_eq!(result.session, session);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn cost_command_shows_token_usage() {
|
|
||||||
use runtime::TokenUsage;
|
|
||||||
|
|
||||||
let mut session = Session::new();
|
|
||||||
session.messages.push(ConversationMessage {
|
|
||||||
role: MessageRole::User,
|
|
||||||
blocks: vec![ContentBlock::Text {
|
|
||||||
text: "hello".to_string(),
|
|
||||||
}],
|
|
||||||
usage: Some(TokenUsage {
|
|
||||||
input_tokens: 100,
|
|
||||||
output_tokens: 200,
|
|
||||||
cache_creation_input_tokens: 50,
|
|
||||||
cache_read_input_tokens: 25,
|
|
||||||
}),
|
|
||||||
});
|
|
||||||
|
|
||||||
let result = handle_slash_command("/cost", &session, CompactionConfig::default())
|
|
||||||
.expect("/cost should be handled");
|
|
||||||
assert!(result.message.contains("100"));
|
|
||||||
assert!(result.message.contains("200"));
|
|
||||||
assert!(result.message.contains("50"));
|
|
||||||
assert!(result.message.contains("25"));
|
|
||||||
assert!(result.message.contains("Cumulative token usage"));
|
|
||||||
assert_eq!(result.session, session);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn version_command_shows_version() {
|
|
||||||
let session = Session::new();
|
|
||||||
let result = handle_slash_command("/version", &session, CompactionConfig::default())
|
|
||||||
.expect("/version should be handled");
|
|
||||||
assert!(result.message.contains("claw-code version"));
|
|
||||||
assert_eq!(result.session, session);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user