[codex] Render streaming assistant deltas#753
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Co-authored-by: openhands <openhands@all-hands.dev>
|
Pushed f018116 to stabilize the home page visual snapshot setup: mocked the workspaces API and increased the home-screen visibility wait. Local verification: |
|
LGTM! Only notable "bug", flagged by AI, worth fixing |
Branch Update & CI StatusWhat was done:
CI status:
The This comment was posted by an AI agent (OpenHands) on behalf of the user. |
The MCP install modal calls testMcpServer() before saving, which hits
POST /api/mcp/test. MSW has no handler for this endpoint, so the request
falls through the Vite proxy to port 8000 — which is not running in CI —
causing ECONNREFUSED. The modal then stays open indefinitely, crashing the
'install Slack from marketplace' and 'add custom SSE server' snapshot tests
at step 4 with expect(locator).not.toBeVisible() timeout.
Add a page.route() intercept in setupMocks() that returns {ok:true,tools:[]}
so the install flow can proceed to addMcpServer (handled by MSW's PATCH
/api/settings handler) and the modal closes normally.
Co-authored-by: openhands <openhands@all-hands.dev>
📸 Snapshot Test ReportWarning Snapshot comparison step crashed (timeout, OOM, or runner error) — diff results below may be incomplete or absent. Warning One or more snapshot tests crashed during generation — some snapshots below may be incomplete. ✅ 3 snapshots changed — acknowledged via the
🔴 Changed snapshots (3)
|
| Expected (main) | Actual (PR) | Diff |
|---|---|---|
![]() |
![]() |
![]() |
mcp-page — 2 snapshots
mcp-custom-server-1-editor-open
| Expected (main) | Actual (PR) | Diff |
|---|---|---|
![]() |
![]() |
![]() |
mcp-custom-server-editor
| Expected (main) | Actual (PR) | Diff |
|---|---|---|
![]() |
![]() |
![]() |
✅ Unchanged snapshots (70)
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-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-2-url-filled
- mcp-custom-server-3-all-filled
- mcp-custom-server-4-installed
- 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.
…t tests
page.route() was not intercepting the MCP test request because MSW's
service worker passthrough issues a new fetch from the SW context, which
Playwright's CDP network interception doesn't see from the page context.
The correct fix is an MSW handler: POST */api/mcp/test returns {ok:true}
so the install modal proceeds to addMcpServer (already mocked via MSW's
PATCH /api/settings handler) and closes normally.
Also reverts the ineffective page.route() approach added in the previous
commit.
Co-authored-by: openhands <openhands@all-hands.dev>









Summary
StreamingDeltaEventfrontend type and guardRoot 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

After

Validation
npm test -- --run __tests__/utils/handle-event-for-ui.test.ts __tests__/components/conversation-events/chat/event-content-helpers/should-render-event.test.tsnpm run typechecknpm run buildCompanion 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
ghcr.io/openhands/agent-canvasghcr.io/openhands/agent-server:1.23.1-pythonopenhands-automation==1.0.0a50359f1f0a17103b4659b6424e046956517527766Pull (multi-arch manifest)
# Multi-arch manifest — Docker automatically pulls the correct architecture docker pull ghcr.io/openhands/agent-canvas:sha-0359f1fRun
All tags pushed for this build
About Multi-Architecture Support
sha-0359f1f) is a multi-arch manifest supporting both amd64 and arm64sha-0359f1f-amd64) are also available if needed