hive-agent: guarantee a wake after a self-requested /compact
This commit is contained in:
parent
fa658567db
commit
2c7872841a
8 changed files with 227 additions and 48 deletions
|
|
@ -80,6 +80,19 @@ pub struct RemindArgs {
|
|||
pub file_path: Option<String>,
|
||||
}
|
||||
|
||||
/// MCP tool args for `compact`.
|
||||
#[derive(Debug, serde::Deserialize, schemars::JsonSchema)]
|
||||
pub struct CompactArgs {
|
||||
/// Optional wake-up prompt. When set and the compact actually runs
|
||||
/// (gated on context usage — see the tool description), the harness
|
||||
/// drives one synthetic follow-up turn with this string as its body
|
||||
/// as soon as compaction finishes, so you don't have to wait for the
|
||||
/// next external event to continue. Omit for a fire-and-forget compact
|
||||
/// with no follow-up.
|
||||
#[serde(default)]
|
||||
pub wake_prompt: Option<String>,
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// Privileged tool arg types (lifecycle, approvals, scheduling, diagnostics)
|
||||
// -----------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -25,10 +25,10 @@ mod render;
|
|||
|
||||
pub use args::{
|
||||
AckUntilArgs, AgentGetLooseEndsArgs, AnswerArgs, AskArgs, CancelLooseEndArgs,
|
||||
CancelScheduleArgs, CreateRepoArgs, EditScheduleArgs, FireScheduleNowArgs, GetAgentMetaArgs,
|
||||
GetHostJournalArgs, GetLogsArgs, KillArgs, MarkTodosDoneArgs, RecvArgs, RemindArgs,
|
||||
RequestInitConfigArgs, RequestSchedulePromptArgs, RestartArgs, SendArgs, SetStatusArgs,
|
||||
StartArgs, UpdateArgs, UpdateMetaInputsArgs,
|
||||
CancelScheduleArgs, CompactArgs, CreateRepoArgs, EditScheduleArgs, FireScheduleNowArgs,
|
||||
GetAgentMetaArgs, GetHostJournalArgs, GetLogsArgs, KillArgs, MarkTodosDoneArgs, RecvArgs,
|
||||
RemindArgs, RequestInitConfigArgs, RequestSchedulePromptArgs, RestartArgs, SendArgs,
|
||||
SetStatusArgs, StartArgs, UpdateArgs, UpdateMetaInputsArgs,
|
||||
};
|
||||
pub use render::{annotate_retries, format_ack, format_agent_meta, format_recv};
|
||||
|
||||
|
|
@ -657,11 +657,19 @@ impl AgentServer {
|
|||
that the call is refused with an explanation and has no effect. On a pass, \
|
||||
queues compaction for the end of the current turn (same deferred mechanism \
|
||||
the dashboard button uses, so it never races a live claude process); the \
|
||||
usual pre-compaction notes-checkpoint turn still fires first. No args."
|
||||
usual pre-compaction notes-checkpoint turn still fires first. Pass \
|
||||
`wake_prompt` to have the harness drive one synthetic follow-up turn with \
|
||||
that body as soon as compaction finishes — without it you just go idle \
|
||||
waiting for the next external event, same as ending a turn normally."
|
||||
)]
|
||||
async fn compact(&self) -> String {
|
||||
run_tool_envelope("compact", String::new(), async move {
|
||||
match dial_agent_socket(&hive_agent_sock::Request::Compact).await {
|
||||
async fn compact(&self, Parameters(args): Parameters<CompactArgs>) -> String {
|
||||
let log = format!("{args:?}");
|
||||
run_tool_envelope("compact", log, async move {
|
||||
match dial_agent_socket(&hive_agent_sock::Request::Compact {
|
||||
wake_prompt: args.wake_prompt,
|
||||
})
|
||||
.await
|
||||
{
|
||||
Some(hive_agent_sock::Response::Ok) => {
|
||||
"compact queued — will run at the end of the current turn".to_owned()
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue