Skip to content

[codex] Render streaming assistant deltas#753

Open
neubig wants to merge 7 commits into
mainfrom
codex/acp-streaming-deltas-ui
Open

[codex] Render streaming assistant deltas#753
neubig wants to merge 7 commits into
mainfrom
codex/acp-streaming-deltas-ui

Conversation

@neubig
Copy link
Copy Markdown
Member

@neubig neubig commented May 24, 2026

Summary

  • add a StreamingDeltaEvent frontend type and guard
  • render streaming text deltas as a provisional assistant bubble during a run
  • merge consecutive deltas and reconcile them against the final persisted assistant message without moving streamed text to the end of the conversation
  • keep the normal optimistic user-message behavior unchanged; the experimental optimistic-message anchoring/queued-state changes were reverted

Root Cause

The agent-server can publish transient StreamingDeltaEvents, but agent-canvas treated unknown base-shaped events as non-renderable. After the first UI fix, final-message reconciliation could remove the provisional streaming deltas from their original location and leave the completed text at the end. The current branch keeps streamed content anchored where it originally appeared.

Human Validation

HUMAN: I tested this and confirmed that it is working.

Before
Screenshot 2026-05-24 at 8 18 02 AM

After
Screenshot 2026-05-24 at 8 18 10 AM

Validation

  • npm test -- --run __tests__/utils/handle-event-for-ui.test.ts __tests__/components/conversation-events/chat/event-content-helpers/should-render-event.test.ts
  • npm run typecheck
  • npm run build

Companion SDK/server PR: OpenHands/software-agent-sdk#3376


🐳 Docker images for this PR

GHCR package: https://github.com/OpenHands/agent-canvas/pkgs/container/agent-canvas

Component Value
Image ghcr.io/openhands/agent-canvas
Architectures amd64, arm64
Agent Server ghcr.io/openhands/agent-server:1.23.0-python
Automation openhands-automation==1.0.0a3
Commit f01811659173f3f1e68760c2834542c1cdaf5c51

Pull (multi-arch manifest)

# Multi-arch manifest — Docker automatically pulls the correct architecture
docker pull ghcr.io/openhands/agent-canvas:sha-f018116

Run

docker run -it --rm \
  -p 8000:8000 \
  ghcr.io/openhands/agent-canvas:sha-f018116

All tags pushed for this build

ghcr.io/openhands/agent-canvas:sha-f018116-amd64
ghcr.io/openhands/agent-canvas:codex-acp-streaming-deltas-ui-amd64
ghcr.io/openhands/agent-canvas:pr-753-amd64
ghcr.io/openhands/agent-canvas:sha-f018116-arm64
ghcr.io/openhands/agent-canvas:codex-acp-streaming-deltas-ui-arm64
ghcr.io/openhands/agent-canvas:pr-753-arm64
ghcr.io/openhands/agent-canvas:sha-f018116
ghcr.io/openhands/agent-canvas:codex-acp-streaming-deltas-ui
ghcr.io/openhands/agent-canvas:pr-753

About Multi-Architecture Support

  • Each tag (e.g., sha-f018116) is a multi-arch manifest supporting both amd64 and arm64
  • Docker automatically pulls the correct architecture for your platform
  • Individual architecture tags (e.g., sha-f018116-amd64) are also available if needed

@vercel
Copy link
Copy Markdown

vercel Bot commented May 24, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
agent-canvas Ready Ready Preview, Comment May 24, 2026 5:53pm

Request Review

@neubig neubig marked this pull request as ready for review May 24, 2026 13:07
Co-authored-by: openhands <openhands@all-hands.dev>
Copy link
Copy Markdown
Member Author

neubig commented May 24, 2026

Pushed f018116 to stabilize the home page visual snapshot setup: mocked the workspaces API and increased the home-screen visibility wait. Local verification: npm run typecheck, focused Vitest suites (30 passed), and the home-page snapshot test now reaches the screenshot assertion locally instead of timing out on home-screen.\n\n_This comment was generated by an AI agent (OpenHands) on behalf of neubig._

@github-actions
Copy link
Copy Markdown
Contributor

📸 Snapshot Test Report

✅ All snapshots match the main branch baselines.

Category Count
🔴 Changed 0
🆕 New 0
✅ Unchanged 73
Total 73
✅ Unchanged snapshots (73)

archived-conversation

  • conversation-panel-with-archived-badges
  • conversation-view-archived
  • conversation-view-sandbox-error

automations

  • automations-delete-modal
  • automations-list-active-inactive
  • automations-no-automations
  • automations-search-no-results

backends-extended

  • backend-add-blank-disabled
  • backend-add-cloud-advanced-open
  • backend-add-cloud-no-key-disabled
  • backend-add-cloud-with-key-enabled
  • backend-add-form-partially-filled
  • backend-add-invalid-url-disabled
  • backend-add-local-ready
  • backend-add-name-only-disabled
  • backend-add-two-column-layout
  • backend-add-whitespace-host-disabled
  • backend-after-switch
  • backend-cancel-nothing-saved
  • backend-dropdown-two-backends
  • backend-edit-prefilled
  • backend-manage-after-removal
  • backend-manage-two-listed
  • backend-remove-cancelled
  • backend-remove-confirmation
  • backend-switch-overlay

backends

  • backend-add-modal
  • backend-manage-modal
  • backend-selector-open

changes-tab

  • changes-deleted-file
  • changes-diff-viewer
  • changes-empty

collapsible-thinking

  • reasoning-content-collapsed
  • reasoning-content-expanded
  • think-action-collapsed
  • think-action-expanded

mcp-page

  • mcp-custom-server-1-editor-open
  • mcp-custom-server-2-url-filled
  • mcp-custom-server-3-all-filled
  • mcp-custom-server-4-installed
  • mcp-custom-server-editor
  • mcp-empty-installed
  • mcp-search-filtered
  • mcp-slack-install-1-marketplace
  • mcp-slack-install-2-modal
  • mcp-slack-install-3-filled
  • mcp-slack-install-4-installed

onboarding

  • onboarding-step-0-choose-agent
  • onboarding-step-1-check-backend
  • onboarding-step-2-setup-llm
  • onboarding-step-3-say-hello

projects-workspace-browser

  • projects-workspace-browser

settings-page

  • add-backend-modal
  • analytics-consent-modal
  • home-screen
  • settings-app-page
  • settings-page

settings-secrets

  • secrets-add-form-filled
  • secrets-add-form
  • secrets-after-save
  • secrets-delete-confirm
  • secrets-list

settings-verification

  • condenser-settings
  • verification-settings-off
  • verification-settings-on

sidebar

  • sidebar-collapsed
  • sidebar-conversation-panel
  • sidebar-filter-menu

skills-page

  • skills-empty
  • skills-loaded
  • skills-no-match
  • skills-search-filtered
  • skills-type-filter

Generated by the Snapshot Tests workflow. This comment was created by an AI agent (OpenHands) on behalf of the repo maintainers.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants