Repository navigation
feat(acpbridge): add display_message to trigger for improved transcri… - #707
Conversation
There was a problem hiding this comment.
Important
The transcript fix skips the trigger that needs it most: task assignments with no note still render the full internal prompt. Details inline.
Reviewed changes
display_messagethreaded end to end —agent-runnersendstrigger.Messagealongside the prompt-wrappedmessage, and the bridge now emits it as theuser_messageevent, falling back tomessagewhen blank.Asking the userprompt section —BuildACPMessagetells the agent to passmention = owner (id: <member id>)whenask_user_questionposts to a task/doc, since the user's own MCP server has noPACA_CONVERSATION_IDto derive the conversation owner.- Ask-card layout hardening —
min-w-0, full width, word-breaking andoverflow-hiddenon the card and its children so long tokens wrap instead of overflowing.
deepseek-v4.1-flash-1017 (free via Pullfrog for OSS) | 𝕏
…ms and improve transcript clarity
There was a problem hiding this comment.
✅ No new issues found. Both prior findings are addressed by the new commit.
Reviewed changes
- Distinguished an absent
display_messagefrom a present-but-blank one — only a missing key falls back to the prompt-wrappedmessage; a blank value records nouser_message, matching the llm path, with regression tests covering all three cases. - Threaded
trigger.ContextItemsthroughstart_turninto the persisteduser_messagepayload, so ACP transcripts render attached-context badges like the llm path, with test coverage. - Verified the persisted
context_itemsshape is identical to the llm path's and is accepted byparseContextItems; both Go modules build and the targeted tests pass.
Minor note: the PR description still says a blank display_message falls back to message; the code now intentionally skips the event in that case, so that bullet is worth updating.
deepseek-v4.1-flash-1017 (free via Pullfrog for OSS) | 𝕏
…n when user message is blank
There was a problem hiding this comment.
ℹ️ No critical issues — one minor suggestion inline. It concerns the new context-only
user_message, which is currently emitted but never rendered.
Reviewed changes
Reviewed the single commit since the prior pullfrog review (7d5968bf → 2289f4e8): the bridge's user_message emission rule and the ask-card class change.
- Recorded a
user_messagefor context-only turns —emitUserMessagenow only skips when both the trimmed text andcontextItemsare empty, so a blankdisplay_messagewith attached context still records an event, covered byTestBlankDisplayMessageStillRecordsContextItems. - Removed
overflow-hiddenfrom the ask-card root — wrapping now relies onmin-w-0plusbreak-wordson the card's children; thedispatch.gocomment now warns thatdisplay_messagemust never gainomitempty. - Made the mention hint's member id explicit —
trigger.ActorMemberID.String()instead of%son the pointer (same output,*uuid.UUIDalready satisfiedStringer), with new tests for the section being present and absent.
deepseek-v4.1-flash-1017 (free via Pullfrog for OSS) | 𝕏
…tems even when text is blank
There was a problem hiding this comment.
ℹ️ No critical issues — one small visual follow-up inline.
Reviewed changes
Reviewed the single commit since the prior pullfrog review (2289f4e8 → 77dde99): how the transcript converter treats a user_message that carries context items but no text.
- Kept context-only turns in the transcript —
eventsToThreadMessagesnow parsescontext_itemsbefore its drop guard and skips auser_messageonly when it has neither text nor context, so the bridge's context-only event renders instead of being persisted and discarded. - Covered both branches with tests — a blank-text message with context items is kept with
metadata.custom.contextItems, a blank-text message without them is dropped, and a normal message still gets nometadata.custom.
deepseek-v4.1-flash-1017 (free via Pullfrog for OSS) | 𝕏
…t parts for context-only turns
There was a problem hiding this comment.
✅ No new issues found. The context-only transcript bubble fix from the last review is in place.
Reviewed changes
Reviewed the single commit since the prior pullfrog review (77dde99 → f3d9f1c): the transcript converter's handling of a user_message that carries context items but no text.
- Hid the empty bubble for context-only turns —
eventsToThreadMessagesnow pushescontent: []instead of an empty text part when there is no text, so the bubble and its action bar stay hidden while the context badges render, and the regression test asserts the empty content array.
deepseek-v4.1-flash-1017 (free via Pullfrog for OSS) | 𝕏

Summary
Three fixes for ACP-bridged agents and the
ask_user_questioncard:user_messageevent from the prompt-wrapped message (skill trigger, project context, trigger context). agent-runner now sends the raw text asdisplay_messageinstart_turn, and the bridge uses it for theuser_messageevent while still sending the fullmessageto the agent. Falls back tomessagewhendisplay_messageis missing or blank (older server, auto-assigned task with no text).PACA_CONVERSATION_IDis never set andask_user_questioncould not resolve who to@-mention on task/doc comments.BuildACPMessagenow adds an "Asking the user" section withmention = owner (id: <member id>)whenever the trigger has an actor member.min-w-0, full width and word-breaking to the card, question, option label/description and answered line, so long tokens wrap instead of overflowing and getting clipped.Changes
apps/acp-bridge/internal/runner/runner.go: readdisplay_messageandcontext_items, thread them throughrunTurn, emit theuser_messageevent from them (context badges are kept even when the text is blank).services/agent-runner/internal/acpbridge/dispatch.go: senddisplay_message(trigger.Message) andcontext_items.services/agent-runner/internal/acpbridge/message.go: add the mention hint to the ACP prompt.apps/web/src/components/shared/ask-question-card.tsx,apps/web/src/components/assistant-ui/tool-fallback.tsx: layout fixes.Testing
go test ./internal/acpbridge/(agent-runner) andgo test ./internal/runner/(acp-bridge) pass; webtsc -band biome pass.display_message(present, absent, blank),context_items, and the mention hint inBuildACPMessage.Notes