diff options
| author | Can Celik <ogulcancelik@gmail.com> | 2026-09-27 20:57:00 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-09-27 20:57:00 +0300 |
| commit | 2552d101afe46b8622a7695f38f6cd1766dd1afc (patch) | |
| tree | e560c2cc8ef02689711af0865a5b541ee3050bf1 /src/cli | |
| parent | 0d1a39dcee6a0f244a036c55935970f40cfa76b8 (diff) | |
feat: let agents report their own resume command (#4687)
* feat: let agents report their own resume command
* fix: keep reported resume commands tied to accepted sessions and current owners
Diffstat (limited to 'src/cli')
| -rw-r--r-- | src/cli/pane.rs | 15 | ||||
| -rw-r--r-- | src/cli/spec.rs | 10 |
2 files changed, 23 insertions, 2 deletions
diff --git a/src/cli/pane.rs b/src/cli/pane.rs index 3b900e17..33583ee4 100644 --- a/src/cli/pane.rs +++ b/src/cli/pane.rs @@ -1156,8 +1156,9 @@ fn parse_pane_wait_output_args(args: &[String]) -> Result<PaneWaitForOutputParam } fn pane_report_agent(args: &[String]) -> std::io::Result<i32> { - const USAGE: &str = "usage: herdr pane report-agent <pane_id> --source ID --agent LABEL --state idle|working|blocked|unknown [--message TEXT] [--seq N] [--agent-session-id ID] [--agent-session-path PATH]"; + const USAGE: &str = "usage: herdr pane report-agent <pane_id> --source ID --agent LABEL --state idle|working|blocked|unknown [--message TEXT] [--seq N] [--agent-session-id ID] [--agent-session-path PATH] [-- <resume-command...>]"; + let (args, resume_argv) = split_resume_argv(args); let args = super::expand_equals_args( args, &[ @@ -1282,12 +1283,21 @@ fn pane_report_agent(args: &[String]) -> std::io::Result<i32> { seq, agent_session_id, agent_session_path, + resume_argv, })) } +fn split_resume_argv(args: &[String]) -> (&[String], Option<Vec<String>>) { + match args.iter().position(|arg| arg == "--") { + Some(separator) => (&args[..separator], Some(args[separator + 1..].to_vec())), + None => (args, None), + } +} + fn pane_report_agent_session(args: &[String]) -> std::io::Result<i32> { - const USAGE: &str = "usage: herdr pane report-agent-session <pane_id> --source ID --agent LABEL [--seq N] [--agent-session-id ID] [--agent-session-path PATH] [--session-start-source SOURCE]"; + const USAGE: &str = "usage: herdr pane report-agent-session <pane_id> --source ID --agent LABEL [--seq N] [--agent-session-id ID] [--agent-session-path PATH] [--session-start-source SOURCE] [-- <resume-command...>]"; + let (args, resume_argv) = split_resume_argv(args); let args = super::expand_equals_args( args, &[ @@ -1398,6 +1408,7 @@ fn pane_report_agent_session(args: &[String]) -> std::io::Result<i32> { agent_session_id, agent_session_path, session_start_source, + resume_argv, }, )) } diff --git a/src/cli/spec.rs b/src/cli/spec.rs index 9465dcc3..1cfc2e7f 100644 --- a/src/cli/spec.rs +++ b/src/cli/spec.rs @@ -646,6 +646,7 @@ fn report_agent_command() -> Command { .arg(option("seq", "N")) .arg(option("agent-session-id", "ID")) .arg(path_option("agent-session-path", "PATH")) + .arg(resume_argv_arg()) } fn report_agent_session_command() -> Command { @@ -658,6 +659,15 @@ fn report_agent_session_command() -> Command { .arg(option("agent-session-id", "ID")) .arg(path_option("agent-session-path", "PATH")) .arg(option("session-start-source", "SOURCE")) + .arg(resume_argv_arg()) +} + +fn resume_argv_arg() -> Arg { + Arg::new("resume_argv") + .value_name("RESUME_ARG") + .num_args(0..) + .last(true) + .help("Command that resumes this session after a Herdr restart; starts with a plain command name") } fn release_agent_command() -> Command { |
