feat: add ecc2 delegated assignment routing

This commit is contained in:
Affaan Mustafa
2026-04-07 12:31:02 -07:00
parent 3469773b32
commit 5bff920bf8
2 changed files with 402 additions and 1 deletions

View File

@@ -50,6 +50,20 @@ enum Commands {
#[arg(short, long, default_value_t = true)]
worktree: bool,
},
/// Route work to an existing delegate when possible, otherwise spawn a new one
Assign {
/// Lead session ID or alias
from_session: String,
/// Task description for the assignment
#[arg(short, long)]
task: String,
/// Agent type (claude, codex, custom)
#[arg(short, long, default_value = "claude")]
agent: String,
/// Create a dedicated worktree if a new delegate must be spawned
#[arg(short, long, default_value_t = true)]
worktree: bool,
},
/// List active sessions
Sessions,
/// Show session details
@@ -185,6 +199,33 @@ async fn main() -> Result<()> {
short_session(&source.id)
);
}
Some(Commands::Assign {
from_session,
task,
agent,
worktree: use_worktree,
}) => {
let lead_id = resolve_session_id(&db, &from_session)?;
let outcome = session::manager::assign_session(
&db,
&cfg,
&lead_id,
&task,
&agent,
use_worktree,
)
.await?;
println!(
"Assignment routed: {} -> {} ({})",
short_session(&lead_id),
short_session(&outcome.session_id),
match outcome.action {
session::manager::AssignmentAction::Spawned => "spawned",
session::manager::AssignmentAction::ReusedIdle => "reused-idle",
session::manager::AssignmentAction::ReusedActive => "reused-active",
}
);
}
Some(Commands::Sessions) => {
let sessions = session::manager::list_sessions(&db)?;
for s in sessions {
@@ -473,4 +514,32 @@ mod tests {
_ => panic!("expected team subcommand"),
}
}
#[test]
fn cli_parses_assign_command() {
let cli = Cli::try_parse_from([
"ecc",
"assign",
"lead",
"--task",
"Review auth changes",
"--agent",
"claude",
])
.expect("assign should parse");
match cli.command {
Some(Commands::Assign {
from_session,
task,
agent,
..
}) => {
assert_eq!(from_session, "lead");
assert_eq!(task, "Review auth changes");
assert_eq!(agent, "claude");
}
_ => panic!("expected assign subcommand"),
}
}
}