* Fix red main: typecheck, lint, i18n and stale unit tests
Direct pushes to main left typecheck, lint and 16 unit tests red.
- Typecheck: AskCard test uses the current ask block shape, the sandbox
fault test calls the two-argument desktop writeFile, removing a queued
message notifies with the thread's latest event seq, and the replay
fixture only reads ref from steps that carry one.
- Lint: format and import order.
- i18n: transcript status labels were German source strings; they are
English now with German translations, catalogs re-extracted, and the
mobile "Failed to remove message" string is translated.
- Tests follow intended behavior changes: the time instruction now
closes the system prompt, short chat turns start at low reasoning,
owner-owned read-only files (git objects) pass the home check, and the
desktop computer may read and write host files outside its home. The
old desktop write-containment suite is replaced by a host file test.
- The composer task pill test mocks the Lingui macros like other tests.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TnT7eVHuaCzZKY5CnYzpr1
* Bump Expo patch releases so expo install --check passes
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TnT7eVHuaCzZKY5CnYzpr1
* Bring web E2E back in line with the new side panel
The side panel lost its computer tab, which left the full computer window
(take control, teach, release) unreachable from the web app. The browser
view now offers an "Open in full window" button, and opening the panel no
longer boots a stopped computer.
Also: the slash picker scrolls instead of growing under the header, user
skills come first in it, the agent overview hides an empty routines block,
the hover time hides again with collapsed details, and the light destructive
token meets contrast on the sidebar. E2E specs follow the new panel layout,
and the cursor and hover tests no longer race the UI.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TnT7eVHuaCzZKY5CnYzpr1
---------
Co-authored-by: Claude <noreply@anthropic.com>
* media: check ffmpeg filter support before subtitle operations
* sandbox: handle synchronous spawn errors safely in desktop sandbox
* Voice-first streaming, non-blocking follow-ups, quiet routines and chat UX
Why: questions blocked the chat, follow-up messages had no acknowledgement, message actions sat beside the bubble, and voice turn-taking added latency.
What: waiting runs accept steering messages and the bot marks each claimed follow-up as seen; unclaimed follow-ups show as queued. Reaction, copy and reply controls sit under each message. Streaming voice (VAD endpointing, barge-in that stops the run, clause-based TTS), an optimistic input queue, procedural earcons and delta-based quiet routines were added. Onboarding can be skipped straight to the main conversation. Dual-surface layout and project pickers are included. Status colors use semantic tokens.
Tested: unit suites for core, adapters, api and web pass, typecheck and Biome are clean. Browser end-to-end tests were not run locally.
* Update translation catalogs
Re-extracted catalogs for the new and moved strings; the catalog sync test passes.
* Add project plan and test readiness notes
Notes from the milestone work: feature inventory, test infrastructure and test readiness. No code changes.
* fix(ci): align scale guards, space deletion, computer toggle, and mobile expo deps
* fix(ci): restore space deletion guard, browser toggle, and run-steps contracts
* fix(ci): restore model resolution errors, group stage, and onboarding flow
* fix(ci): restore in-app-browser close button, disable stop button while sending, and sync lingui catalogs
* fix(ci): address web e2e failures for bot-crud, choice cards, message quote, and voice onboarding
* test(web): wait for avatar and rig visibility in oo-avatar motion spec
* test(web): wait for persisted message IDs in message-hover-actions pagination spec
* Onboarding: always drop the local voice when the voice step is skipped
Skipping waited only for the latest voice load and disconnected only
when the client saw the connect succeed. An earlier or client-failed
connect could still persist the local credential, so a user who
skipped voice was left with one. Wait for every load and always
disconnect.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wy1md9QE1ayJbDCwJ4vAQs
* Shell: hide the optimistic copy once the transcript shows the send
A message sent while the bot works streamed into the transcript before
its send request resolved, so the same text showed twice until the
optimistic bubble was removed. Drop an optimistic message as soon as a
persisted user message with the same text appears.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wy1md9QE1ayJbDCwJ4vAQs
---------
Co-authored-by: Claude <noreply@anthropic.com>
* feat(web): Oo computer browser panel with cowork and local preview
Wire the in-app browser panel to the active Oo's live Chromium via the
computer screen stream, page-browser navigation, and interactive cowork
input with AgentCursor. User browser actions become system meta lines in
thread context; localhost preview remains as Lokale Vorschau.
Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>
* fix(i18n): sync Lingui catalogs for Oo browser panel
Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>
* Fix the Oo browser's lint and E2E failures
The shared-browser overlay is a focusable input surface, so it gets the
application role and a translated label. The local preview focuses the
address field again when no page is open, which the split out of
InAppBrowser had dropped. The Oo browser spec opens the panel by its exact
name, because the signed-up user's name also contains "Browser", and reads
the user action from the RPC body's json envelope.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wy1md9QE1ayJbDCwJ4vAQs
---------
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
Bots now announce every click and typing step before it runs, and the
web app draws a cursor in the bot's colour that glides to that point
over the live computer screen, ripples on clicks and shows typing.
- contracts: ComputerPointerPayload on the existing thread.computer event
- executor: computer_act and browser_act announce pointer steps
(best effort); the page-browser helper reports element screen boxes,
which are stripped before results reach the model
- web: agentPointerFeed + AgentCursor over the side-panel preview and
the full-window screen, mapped through the noVNC letterbox
- in-app browser: native WebContentsView on desktop (own session, http(s)
only, clamped bounds, back/forward, reload, DevTools, load errors) and
a sandboxed iframe on the web; replaces the dead panel, the fake
50%/40% cursors and the unimplemented devServer bridge
Claude-Session: https://claude.ai/code/session_01WiGooXtsKrZQmdszepRrNi
Co-authored-by: Claude <noreply@anthropic.com>