cap get_loose_ends todo output + add ack_todos_until bulk-clear (#2944)
This commit is contained in:
parent
58a9f218f2
commit
eb570c003d
7 changed files with 167 additions and 9 deletions
|
|
@ -24,18 +24,18 @@ mod args;
|
|||
mod render;
|
||||
|
||||
pub use args::{
|
||||
AckUntilArgs, AgentGetLooseEndsArgs, AnswerArgs, AskArgs, CancelLooseEndArgs,
|
||||
CancelScheduleArgs, CreateRepoArgs, EditScheduleArgs, FireScheduleNowArgs, GetAgentMetaArgs,
|
||||
GetHostJournalArgs, GetLogsArgs, KillArgs, RecvArgs, RemindArgs, RequestInitConfigArgs,
|
||||
RequestSchedulePromptArgs, RestartArgs, SendArgs, SetStatusArgs, StartArgs, UpdateArgs,
|
||||
UpdateMetaInputsArgs,
|
||||
AckTodosUntilArgs, AckUntilArgs, AgentGetLooseEndsArgs, AnswerArgs, AskArgs,
|
||||
CancelLooseEndArgs, CancelScheduleArgs, CreateRepoArgs, EditScheduleArgs,
|
||||
FireScheduleNowArgs, GetAgentMetaArgs, GetHostJournalArgs, GetLogsArgs, KillArgs, RecvArgs,
|
||||
RemindArgs, RequestInitConfigArgs, RequestSchedulePromptArgs, RestartArgs, SendArgs,
|
||||
SetStatusArgs, StartArgs, UpdateArgs, UpdateMetaInputsArgs,
|
||||
};
|
||||
pub use render::{annotate_retries, format_ack, format_agent_meta, format_recv};
|
||||
|
||||
use render::{
|
||||
dial_agent_socket, format_matrix_summary, local_questions, local_reminders, local_todos,
|
||||
loose_end_kind_label, mark_local_todo_done, matrix_unread_summary, parse_loose_end_kind,
|
||||
render_loose_ends, reply_err,
|
||||
loose_end_kind_label, mark_local_todo_done, mark_local_todos_done_until,
|
||||
matrix_unread_summary, parse_loose_end_kind, render_loose_ends, reply_err,
|
||||
};
|
||||
|
||||
/// Write (or remove) the status file in the agent's own `state/` directory.
|
||||
|
|
@ -347,7 +347,11 @@ impl AgentServer {
|
|||
at turn start to remember what you owe / what's owed to you without scrolling \
|
||||
inbox history. Output is a short bulleted list with ids, ages in seconds, and \
|
||||
the relevant context. Each `question` or `reminder` row can be cancelled by \
|
||||
passing its id + kind to `cancel_loose_end`. Empty result is reported clearly.\n\
|
||||
passing its id + kind to `cancel_loose_end`. Empty result is reported clearly. \
|
||||
Todos are capped at 40 rendered rows (newest first) so a large backlog never makes \
|
||||
this call fail — a trailer line reports how many more are pending and suggests an \
|
||||
`ack_todos_until` value to bulk-clear the rest in one call instead of triaging \
|
||||
hundreds of ids individually.\n\
|
||||
Pass `agent: \"<name>\"` to inspect a specific peer agent's threads. Direct \
|
||||
child agents are always accessible. For non-children, the `query_agent_state` \
|
||||
capability is required — without it the request is rejected with an error."
|
||||
|
|
@ -547,6 +551,35 @@ impl AgentServer {
|
|||
.await
|
||||
}
|
||||
|
||||
#[tool(
|
||||
description = "Bulk-clear local todos (loose-ends v2 — bash-task completions, matrix \
|
||||
unread, forge activity): every pending todo with `id <= up_to` is acked in one call, \
|
||||
same shape as `ack_until` for the message inbox. Use this when `get_loose_ends` \
|
||||
reports more todos than it renders individually (its truncation summary suggests a \
|
||||
value) or whenever a backlog has piled up past the point of clearing ids one at a \
|
||||
time — note the highest id you've actually triaged, or take the suggested value \
|
||||
verbatim to clear the whole shown-as-hidden tail. Only affects YOUR todos; ids above \
|
||||
`up_to` stay pending. Returns how many were newly acked."
|
||||
)]
|
||||
async fn ack_todos_until(&self, Parameters(args): Parameters<AckTodosUntilArgs>) -> String {
|
||||
let log = format!("{args:?}");
|
||||
run_tool_envelope("ack_todos_until", log, async move {
|
||||
match mark_local_todos_done_until(args.up_to).await {
|
||||
Some(hive_agent_sock::Response::Acked { count }) => {
|
||||
format!("acked {count} todo(s) up to id {}", args.up_to)
|
||||
}
|
||||
Some(hive_agent_sock::Response::Err { message }) => {
|
||||
format!("ack_todos_until failed: {message}")
|
||||
}
|
||||
Some(other) => format!("ack_todos_until unexpected response: {other:?}"),
|
||||
None => "ack_todos_until: local todo socket unavailable \
|
||||
(HIVE_AGENT_SOCKET unset or harness unreachable)"
|
||||
.to_owned(),
|
||||
}
|
||||
})
|
||||
.await
|
||||
}
|
||||
|
||||
#[tool(
|
||||
description = "Create a git repo through hive-c0re. You CANNOT create repos with your \
|
||||
own forge token (creation is disabled) — this is the only path. The repo is created in \
|
||||
|
|
|
|||
Loading…
Reference in a new issue