Repository navigation
Agent-side fixes: wait replies read as acknowledged, 110 s default wait, footer without the shell route, thread listing - #23
Merged
Conversation
…drops the shell route for sessions with tools
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Four changes that make murmur cheaper and less misleading for the agents that use it. Each one comes from something that cost a turn or tokens in today's sessions. Two commits.
What changed
murmur_waitresult now endsacknowledgedinstead ofdelivered(takeRepliescallsstore.markAckedaftermarkDeliveredHop). Before,deliveredstayed in the unread states forever: my session on the real bus showsunread 4, and all four (messages 5, 7, 9 and 10) are replies it already received in wait results. The No queued_delivered note for a reply handed over in the wait #14 behaviour (noqueued_deliverednotice for those) is unchanged, and the inbox cap still counts only queued and sent.WAIT_DEFAULT_MSwas 120000, the same as Claude Code's default auto-background threshold for MCP calls (CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS). A full default wait got moved to the background and its result came back as a separate notification, an extra turn (about 38k tokens a call in the consult benchmark). The max stays 300 s. MCP description, both adapters, docs and README updated;docs/consult.mdexplains the 120 s threshold.from a shell: murmur reply <id> <text>. In 3 of 4 Codex runs before 0.2.5, the model took that route and hit Codex's sandbox (Ran murmur reply 1 'INFO received', then "broker is down"). Now the clause is left out when the recipient has a livemcporadapterconnection (the broker'spresencemap, which holds only live connections); a session without tools keeps it. All three render paths pass the flag (corepushesFor, core pending push, brokerpushQueued).murmur_threadwithoutthreadIdlists the newest threads. Today an agent can't find the active thread with murmur's tools: every tool needs a thread id, and I had to query the SQLite file directly to find thread 17. A newthreadsrequest returns, newest activity first,threadId,latestSeq,lastAt,participants,messagesand the opening message's first line;limitdefaults to 10, max 50. No ninth tool (every tool schema sits in every session's context). CLImurmur threadwith no id and both adapters match.Issue
No issue filed. From a review of my own use of murmur today.
How it was verified
expected [ [ 'alice', 'delivered' ] ] to deeply equal [ [ 'alice', 'acknowledged' ] ],expected 120000 to be 110000, the footer test receiving the old text withfrom a shell: murmur reply 7 <text>;, andMurmurError: unknown message type: threads/TypeError: core.threadList is not a function.npm run build, thennpm run coverageon the combined branch:Tests 518 passed (518), 100 percent on statements (2357/2357), branches (1327/1327), functions (438/438) and lines (2277/2277).tsc --noEmitexit 0, markdownlint 0 issues, typos exit 0, no em or en dashes in the diff.murmur_sendandwait: all_replied, then calledmurmur_threadwith no id.PASS Y replied through murmur_reply: {"sender":"claude-murmur-2","body":"INFO 5"}PASS the reply X got inside its wait is acknowledged, not delivered (no longer unread): [{"recipient":"claude-murmur","state":"acknowledged"}]PASS Y (a session with the MCP tools) saw the footer without the shell route: (answer with murmur_reply messageId 1, plain text never reaches the sender; its replies: murmur_thread 1 messageId 1)RESULT: PASSstore.threadList(10)over 100k messages in 2000 threads: median 10.2 ms, max 12.2 ms (7 runs).onStateChangeeventcore.ackemits, which nothing consumes today (the only implementation is a no-op insrc/cli.ts); and the thread listing scans the messages table on every call, which the timing above puts at about 10 ms for 100k messages.Behavior changes
acknowledged, notdelivered. The existing fourdeliveredrows on a bus stay as they are.murmur_waitdefaults to 110 s.murmur_threadtakes an optionalthreadIdand a newlimit;murmur threadwith no id lists threads instead of failing.