{"repo":"NousResearch/hermes-agent","public_id":"110037","display_label":"Bot Screen display.status staleness and streaming","summary":"These items address a specific bug where stale display.status replies lacking a request token can corrupt runtime fields, plus a related feature adding per-bot Xfce desktop streaming with take-over and hand-back support.","subsystem":null,"counts":{"members":4,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":1,"attempt_prs":2},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":108914,"merged_at":"2026-09-23T11:03:15+00:00"},"resolution":{"state":"unresolved","by":null},"freshness":{"state":"verified","last_verified_at":"2026-09-23T11:03:15+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.5},"fix_edges":[{"issue_number":110037,"pr_number":108914,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-09-23T11:03:15+00:00"}],"members":[{"kind":"issue","number":110037,"title":"Bot Screen: the portal's `display.status` fetch carries no request token, so a stale snapshot can move the runtime fields backwards","url":null,"state":"closed"},{"kind":"pr","number":108914,"title":"feat: Bot Screen — per-bot Xfce desktop streamed into Hermes Desktop, take over and hand back (related #92524)","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["Dockerfile","apps/desktop/e2e/bot-screen-stale-status-reply.spec.ts","apps/desktop/package.json","apps/desktop/src/app/chat/close-tab.test.ts","apps/desktop/src/app/chat/close-tab.ts","apps/desktop/src/app/chat/sidebar/gateway-groups.tsx","apps/desktop/src/app/routes.ts","apps/desktop/src/app/session/hooks/use-message-stream/gateway-event/input-requests.test.ts","apps/desktop/src/app/session/hooks/use-message-stream/gateway-event/input-requests.ts","apps/desktop/src/app/session/hooks/use-message-stream/gateway-event/server-requests.ts","apps/desktop/src/components/prompt-overlays.tsx","apps/desktop/src/i18n/ar.ts","apps/desktop/src/i18n/en.ts","apps/desktop/src/i18n/ja.ts","apps/desktop/src/i18n/ru.ts","apps/desktop/src/i18n/types.ts","apps/desktop/src/i18n/zh-hant.ts","apps/desktop/src/i18n/zh.ts","apps/desktop/src/lib/sibling-ws-url.test.ts","apps/desktop/src/lib/sibling-ws-url.ts","apps/desktop/src/plugins/hermes-bots/bot-row.tsx","apps/desktop/src/plugins/hermes-bots/cron.tsx","apps/desktop/src/plugins/hermes-bots/i18n.ts","apps/desktop/src/plugins/hermes-bots/plugin.tsx","apps/desktop/src/plugins/hermes-bots/screen-autoraise.test.ts","apps/desktop/src/plugins/hermes-bots/screen-autoraise.ts","apps/desktop/src/plugins/hermes-bots/screen-connection.test.ts","apps/desktop/src/plugins/hermes-bots/screen-connection.ts","apps/desktop/src/plugins/hermes-bots/screen-hero.tsx","apps/desktop/src/plugins/hermes-bots/screen-install-retention.test.tsx","apps/desktop/src/plugins/hermes-bots/screen-install.tsx","apps/desktop/src/plugins/hermes-bots/screen-isolation.test.tsx","apps/desktop/src/plugins/hermes-bots/screen-open.tsx","apps/desktop/src/plugins/hermes-bots/screen-pane-lifecycle.test.tsx","apps/desktop/src/plugins/hermes-bots/screen-pane-status-events.test.tsx","apps/desktop/src/plugins/hermes-bots/screen-pane.tsx","apps/desktop/src/plugins/hermes-bots/screen-portal-status-request.test.tsx","apps/desktop/src/plugins/hermes-bots/screen-portal.tsx","apps/desktop/src/plugins/hermes-bots/screen-state.test.ts","apps/desktop/src/plugins/hermes-bots/screen-state.ts","apps/desktop/src/plugins/hermes-bots/screen-viewer-identity.test.tsx","apps/desktop/src/plugins/hermes-bots/types.ts","apps/desktop/src/sdk/index.ts","apps/desktop/src/store/prompts.ts","apps/desktop/src/vite-env.d.ts","apps/shared/src/gateway-contract.generated.ts","apps/shared/src/gateway-contract.openrpc.json","hermes_cli/config_defaults.py","hermes_cli/dashboard_auth/ws_tickets.py","hermes_cli/profiles.py","hermes_cli/pty_bridge.py","hermes_cli/subcommands/computer_use.py","hermes_cli/subcommands/computer_use_screen.py","hermes_cli/web_routers/display.py","hermes_cli/web_server.py","hermes_cli/web_server_chat.py","pyproject.toml","scripts/check-windows-footguns.py","scripts/profile-tui.py","tests/fixtures/resolution_allowlist.json","tests/hermes_cli/test_bot_desktop_screen_status.py","tests/hermes_cli/test_bot_desktop_screen_stop.py","tests/hermes_cli/test_computer_use_screen_install.py","tests/hermes_cli/test_display_ws_drop_keeps_lease.py","tests/hermes_cli/test_display_ws_ticket.py","tests/hermes_cli/test_profiles.py","tests/hermes_cli/test_ws_auth_display_ticket.py","tests/tools/conftest.py","tests/tools/test_bot_desktop_browser.py","tests/tools/test_bot_desktop_browser_fence.py","tests/tools/test_bot_desktop_idle.py","tests/tools/test_bot_desktop_install.py","tests/tools/test_bot_desktop_launcher_seed.py","tests/tools/test_bot_desktop_launcher_xvnc.py","tests/tools/test_bot_desktop_lease.py","tests/tools/test_bot_desktop_resources.py","tests/tools/test_bot_desktop_rfb_filter_limits.py","tests/tools/test_bot_desktop_runtime.py","tests/tools/test_bot_desktop_thumbnail.py","tests/tools/test_computer_use.py","tests/tools/test_computer_use_backend_lifecycle.py","tests/tools/test_computer_use_backend_rebind.py","tests/tools/test_computer_use_capture_fence.py","tests/tools/test_computer_use_native_platform.py","tests/tui_gateway/test_display_methods.py","tests/tui_gateway/test_display_watch.py","tools/bot_desktop/__init__.py","tools/bot_desktop/browser.py","tools/bot_desktop/install.py","tools/bot_desktop/launcher.sh","tools/bot_desktop/lease.py","tools/bot_desktop/resources.py","tools/bot_desktop/rfb_filter.py","tools/bot_desktop/runtime.py","tools/bot_desktop/thumbnail.py","tools/bot_desktop/wallpaper.png","tools/browser_tool.py","tools/browser_tool_lifecycle.py","tools/browser_tool_lightpanda_fallback.py","tools/browser_tool_real_profile.py","tools/browser_tool_session.py","tools/browser_use_cli.py","tools/browser_vault_tool.py","tools/computer_use/cua_backend.py","tools/computer_use/schema.py","tools/computer_use/tool.py","tui_gateway/contracts/__init__.py","tui_gateway/contracts/display.py","tui_gateway/methods_display.py","tui_gateway/methods_display_watch.py","tui_gateway/server.py","tui_gateway/ws.py","website/docs/user-guide/features/bot-screen.md","website/docs/user-guide/features/computer-use.md","website/sidebars.ts"]},{"kind":"pr","number":110281,"title":"fix(bot-screen): ignore stale display.status replies","url":null,"state":"closed","close_reason":{"category":"silent_close","implication":"active"},"merged":false},{"kind":"pr","number":112282,"title":"fix(bot-screen): ignore stale display.status replies","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"c80d12b9b98e","number":0},{"kind":"pr","value":"#108914","number":108914},{"kind":"pr","value":"#110037","number":110037}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false}],"trust":{"default_tier":"verified","includes_suggested":false}}