fix(site): fix action bar hidden after null-returning assistant messages#24566
Conversation
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 7605eefc70
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
11d2f84 to
7d76d52
Compare
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 7d76d52dfd
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
7d76d52 to
da45e95
Compare
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: da45e956a5
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
First-pass mechanical review (Netero). 1 P2, 1 Note.
The fix correctly identifies the root cause: invisible assistant messages (provider-executed tool-result-only) between a visible assistant and a user turn broke chain detection. The forward-scan approach and regression story are well-structured.
The main concern is that the new isTimelineMessageVisible helper duplicates the hiding conditions from deriveMessageDisplayState().shouldHide in messageHelpers.ts. The doc comment acknowledges this ("The conditions here mirror..."), but the coupling means a new invisible-message category added to deriveMessageDisplayState but not here silently re-introduces the exact bug this PR fixes.
This is a first-pass review only: these are mechanical findings from Netero. The full review panel has not yet reviewed this PR and will review after these findings are addressed.
Netero: "The three hiding conditions are copied verbatim from messageHelpers.ts lines 29-39 and 66-70. The doc comment acknowledges the coupling but does not prevent drift."
🤖 This review was automatically generated with Coder Agents.
da45e95 to
6c62234
Compare
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 6c622340e9
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
0c1a346 to
9d7ecdc
Compare
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 9d7ecdc489
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
The isLastInChain check in ConversationTimeline looked at the immediate next entry in parsedMessages, but some entries are invisible (they return null from ChatMessageItem via deriveMessageDisplayState). When the only messages between a visible assistant and the next user turn were invisible ones, the visible assistant's action bar was hidden. Add isTimelineMessageVisible() that mirrors the shouldHide conditions in deriveMessageDisplayState, and update the chain logic to loop past invisible entries when determining isLastInChain. The action bar now correctly appears on the last visible assistant message. Add a regression story (AssistantActionBarAfterHiddenMessages) that asserts 3 action bars are present when a provider-executed tool-result message sits between the visible assistant and the next user turn.
9d7ecdc to
3f516ce
Compare
|
@codex review |
|
Codex Review: Didn't find any major issues. Can't wait for the next one! ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
closes CODAGT-121
When an invisible assistant message (e.g. a
provider_executedtool-result with no text content) appeared between a visible assistant message and the next user message, the visible assistant's action bar was incorrectly hidden. The chain logic computedisLastInChainfrom the rawparsedMessagesarray, which includes entries thatChatMessageItemreturnsnullfor.Extract a shared
isTimelineMessageVisiblehelper that encodes the three null-return conditions (provider_executedtool-result-only, all-provider-executed parts, metadata-only) in one place. Use it both to guard the early return inChatMessageItemand to skip invisible entries when computingisLastInChain, so chain boundaries are based on the next rendered message.