feat: unify floating conversations and persistent voice history - #3085
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Move regular and MiniApp conversations between the main view and the floating dock while retaining drafts, attachments, execution state, and reading position. The dock now opens a persistent OpenBitFun control conversation, and voice and text share its saved history.
Type and Areas
Feature, bug fix, refactor, UI/UX. Areas: shared Rust runtime, Desktop/CLI peer adapters, Web UI, design-system UI, localization, and capability documentation.
Motivation / Impact
Conversations can change presentation without losing their identity or current work. Voice exchanges become durable model-visible conversation records; retries do not duplicate them, and a running Agent turn is not overwritten. Older peer hosts receive explicit capability gating, and unsupported server, ACP, and dispatch voice paths remain unavailable.
Verification
Validation:
pnpm run fmt:rspnpm run check:web(TypeScript, Appearance, typography, theme color, and visual-contract audits)Focused Vitest run: 22 files / 186 tests, covering dock transfer and state, MiniApp lifecycle, voice history and transcript, conversation scope, scene/session synchronization, and Appearance registration.
pnpm --dir design-system --filter @openbitfun/ui run buildnode --test design-system/packages/ui/tests/voice-call.test.mjs(6 tests)pnpm run i18n:audit(0 warnings),pnpm run capabilities:check, andpnpm run motion:audit(intent inventory)cargo test --locked -p openbitfun-agent-content --test prompt_catalog_contractscargo test --locked -p openbitfun-product-domains --no-default-features remote_surfacegit diff --check origin/main...HEADandnode scripts/check-git-object-sizes.mjs --base origin/main --head HEADcargo test --locked -p openbitfun-core --no-default-features --features agent-runtime,git --lib -- control_conversation voice_exchange agentic::agents::registry::tests(52 tests)cargo test --locked -p openbitfun-services-integrations --no-default-features --features speech-realtime --lib speech::realtime::tests(5 tests)pnpm run lint:web(0 errors; 2 pre-existing warnings)pnpm run type-check:webafter the integration fixescargo check --locked -p openbitfun-cliafter completing the control-conversation facadepnpm --dir src/web-ui run test:runin CI on the latest head: 804 files / 8,588 tests passed. Coverage includes draft preservation, claim-token routing, lifecycle, and device isolation.cargo test --locked -p openbitfun-agent-runtime --no-default-features --features agent-runtime --test agent_definition_contracts(98 tests, including hidden control-agent category and model selection)CI passed on final head
f72a28eb816fbc007c20b050acda8c7a3212b17a: 11 checks passed, including the frontend build, all three Rust/CLI platforms, and the Rust / CLI Validation gate. Two impact-selected packaging jobs were intentionally skipped. CI run.Reviewer Notes
Rebased onto current
main;git range-diffconfirmed the submitted patch was preserved. Automated local contracts were exercised on Windows. Native visual fidelity, live calls, SSH workspaces, Remote Control, Peer Device Mode, and Detached Dispatch were not exercised end to end. Peer capability and unsupported-surface behavior have focused contract coverage; this is not evidence of a live remote session.Checklist