recv: fold batch drain into recv(max) — one tool, uniform list response
This commit is contained in:
parent
77b89bf2c6
commit
5d27ae3048
8 changed files with 271 additions and 417 deletions
49
CLAUDE.md
49
CLAUDE.md
|
|
@ -183,29 +183,32 @@ read them à la carte.
|
|||
In-flight or recent context that hasn't earned a section yet.
|
||||
Prune freely.
|
||||
|
||||
- **Just landed:** inbox batching via `recv_batch(max)`. New
|
||||
MCP tool on both agent + manager surfaces pops up to `max`
|
||||
pending messages in a single round-trip (server-side cap
|
||||
32, `max = 0` short-circuits). Same delivery + ack
|
||||
bookkeeping as `recv`: every popped row is marked
|
||||
`delivered_at = NOW`, tracked on the per-recipient
|
||||
`unacked_ids` list (so the next `AckTurn` closes them out),
|
||||
and tagged `redelivered: true` if it was resurfaced by
|
||||
`RequeueInflight`. Wake prompt's pending-inbox hint
|
||||
rewritten to recommend `recv_batch(max: N)` instead of N
|
||||
consecutive `recv`s. Wire: new
|
||||
`AgentRequest::RecvBatch { max }` /
|
||||
`AgentResponse::Batch { messages: Vec<DeliveredMessage> }`
|
||||
(+ manager mirror) and a new `DeliveredMessage` struct in
|
||||
`hive-sh4re` shared by both. `format_recv_batch` on the
|
||||
mcp side renders the popped list with per-message
|
||||
redelivery banners + `---` separators; empty batch
|
||||
collapses to "(empty)" like single `recv`. 4 new broker
|
||||
tests cover FIFO + cap, empty-when-idle, zero-max
|
||||
short-circuit, and redelivered-flag propagation. Closes
|
||||
the "inbox batching hint" item from the ergonomics
|
||||
wishlist — the hint that was already in `format_wake_prompt`
|
||||
is now actionable in one tool call instead of N.
|
||||
- **Just landed:** inbox batching unified into `recv(max?)`.
|
||||
No separate `recv_batch` tool — the existing `recv` tool
|
||||
grew an optional `max: u32` arg (default 1, server-side
|
||||
cap 32) so a single round-trip drains up to N popped rows
|
||||
with the same delivery + ack bookkeeping per row
|
||||
(`delivered_at = NOW`, `unacked_ids` list, redelivered
|
||||
tag from `requeue_inflight`). `wait_seconds` still applies
|
||||
to the FIRST message; once one lands the call drains up
|
||||
to `max` in total — long-poll + drain compose. Wake
|
||||
prompt's pending-inbox hint points at `recv(max: N)`.
|
||||
Wire shape: `AgentRequest::Recv { wait_seconds, max }`
|
||||
(added `max`), `AgentResponse::Messages { messages:
|
||||
Vec<DeliveredMessage> }` (collapsed the old
|
||||
`Message` + `Empty` + `Batch` trio into one always-list
|
||||
variant — empty vec = idle). `DeliveredMessage` is a flat
|
||||
shared struct in `hive-sh4re`. `format_recv` renders
|
||||
single = the historical `from: X\n\nbody` block, multi =
|
||||
`popped N message(s)` header with `---` separators +
|
||||
per-message redelivery banners; empty = "(empty)". Broker
|
||||
primitive: dropped the singular `recv`, kept just
|
||||
`recv_batch(recipient, max)` and `recv_blocking_batch`
|
||||
(which long-polls then drains via `recv_batch`). 4 new
|
||||
broker tests on top of the existing 7 (recv_batch_*
|
||||
family). Closes the "inbox batching hint" item from the
|
||||
ergonomics wishlist with one tool instead of two; lower
|
||||
context bloat in claude's prompt.
|
||||
- **Just landed:** lease-style message delivery / no-drop
|
||||
on turn fail. The `messages` table gained an `acked_at`
|
||||
column (idempotent ALTER + backfill = `delivered_at` so
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue