Skip to content

Commit c92702d

Browse files
authored
feat(cli,memory): type agents fleet --status flag and add tracing span (#4365)
Closes #4357, #4358 - Add FleetStatus wrapper enum with clap::ValueEnum in src/cli.rs to keep clap out of zeph-memory; convert to SessionStatus via From impl - Replace Option<String> with Option<FleetStatus> in AgentsCommand::Fleet; remove manual .parse::<SessionStatus>() from handle_fleet - Add #[tracing::instrument(name = "memory.fleet.update_status", ...)] to SqliteStore::update_agent_session_status, matching sibling methods
1 parent 9d76476 commit c92702d

2 files changed

Lines changed: 30 additions & 11 deletions

File tree

src/cli.rs

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33

44
use std::path::PathBuf;
55

6-
use clap::{Parser, Subcommand};
6+
use clap::{Parser, Subcommand, ValueEnum};
7+
use zeph_memory::store::agent_sessions::SessionStatus;
78

89
#[derive(Parser)]
910
#[command(
@@ -488,6 +489,28 @@ pub(crate) enum DbCommand {
488489
Migrate,
489490
}
490491

492+
/// Typed session status filter for the `agents fleet` sub-command.
493+
#[derive(Clone, Copy, Debug, ValueEnum)]
494+
pub(crate) enum FleetStatus {
495+
Active,
496+
Completed,
497+
Failed,
498+
Cancelled,
499+
Unknown,
500+
}
501+
502+
impl From<FleetStatus> for SessionStatus {
503+
fn from(s: FleetStatus) -> Self {
504+
match s {
505+
FleetStatus::Active => SessionStatus::Active,
506+
FleetStatus::Completed => SessionStatus::Completed,
507+
FleetStatus::Failed => SessionStatus::Failed,
508+
FleetStatus::Cancelled => SessionStatus::Cancelled,
509+
FleetStatus::Unknown => SessionStatus::Unknown,
510+
}
511+
}
512+
}
513+
491514
#[derive(Subcommand)]
492515
pub(crate) enum AgentsCommand {
493516
/// List all available sub-agent definitions
@@ -526,9 +549,9 @@ pub(crate) enum AgentsCommand {
526549
},
527550
/// List agent sessions recorded in the fleet database
528551
Fleet {
529-
/// Filter by session status (active, completed, failed, cancelled, unknown)
552+
/// Filter by session status
530553
#[arg(long, short)]
531-
status: Option<String>,
554+
status: Option<FleetStatus>,
532555
/// Maximum number of sessions to show
533556
#[arg(long, default_value = "20")]
534557
limit: u32,

src/commands/agents.rs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use zeph_memory::store::agent_sessions::{AgentSessionRow, SessionStatus};
1212
use zeph_subagent::error::SubAgentError;
1313
use zeph_subagent::{SubAgentDef, ToolPolicy, is_valid_agent_name, resolve_agent_paths};
1414

15-
use crate::cli::AgentsCommand;
15+
use crate::cli::{AgentsCommand, FleetStatus};
1616

1717
pub(crate) async fn handle_agents_command(
1818
cmd: AgentsCommand,
@@ -29,9 +29,7 @@ pub(crate) async fn handle_agents_command(
2929
} => handle_create(&name, &description, dir.as_path(), model.as_deref()),
3030
AgentsCommand::Edit { name } => handle_edit(&name, config_path),
3131
AgentsCommand::Delete { name, yes } => handle_delete(&name, yes, config_path),
32-
AgentsCommand::Fleet { status, limit } => {
33-
handle_fleet(status.as_deref(), limit, config_path).await
34-
}
32+
AgentsCommand::Fleet { status, limit } => handle_fleet(status, limit, config_path).await,
3533
}
3634
}
3735

@@ -230,7 +228,7 @@ fn handle_delete(name: &str, yes: bool, config_path: Option<&Path>) -> anyhow::R
230228
}
231229

232230
async fn handle_fleet(
233-
status_filter: Option<&str>,
231+
status_filter: Option<FleetStatus>,
234232
limit: u32,
235233
config_path: Option<&Path>,
236234
) -> anyhow::Result<()> {
@@ -241,9 +239,7 @@ async fn handle_fleet(
241239
.await
242240
.context("failed to open database")?;
243241

244-
let sf: Option<SessionStatus> = status_filter
245-
.map(|s| s.parse().map_err(|e: String| anyhow::anyhow!("{e}")))
246-
.transpose()?;
242+
let sf: Option<SessionStatus> = status_filter.map(SessionStatus::from);
247243

248244
let sessions = store
249245
.list_agent_sessions(limit, sf)

0 commit comments

Comments
 (0)