feat(desktop): redesign the Huddle experience - #4281
Conversation
Signed-off-by: kenny lopez <klopez4212@gmail.com>
Signed-off-by: kenny lopez <klopez4212@gmail.com>
Signed-off-by: kenny lopez <klopez4212@gmail.com>
Signed-off-by: kenny lopez <klopez4212@gmail.com>
Signed-off-by: kenny lopez <klopez4212@gmail.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: cc60af9dc4
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Signed-off-by: kenny lopez <klopez4212@gmail.com>
…erface Signed-off-by: kenny lopez <klopez4212@gmail.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ebbf493758
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Signed-off-by: kenny lopez <klopez4212@gmail.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 2756ea99c5
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Signed-off-by: kenny lopez <klopez4212@gmail.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4328675c4a
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Signed-off-by: kenny lopez <klopez4212@gmail.com>
Signed-off-by: kenny lopez <klopez4212@gmail.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 40e6ff0b23
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Signed-off-by: kenny lopez <klopez4212@gmail.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 277c3ba484
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
Posting this review comment on Wes's behalf. I found two P2 correctness issues on
These overlap the two latest automated inline findings, but I independently verified both against the current source. The earlier automated findings appear addressed in subsequent commits. |
Signed-off-by: kenny lopez <klopez4212@gmail.com>
…erface Signed-off-by: kenny lopez <klopez4212@gmail.com>
|
🤖 Thanks, Wes — both P2s are fixed in 010fd08 and pushed in the current head. Companion returns now preserve the user’s drawer choice through the startup race and clear the cached opener; Huddle-room windows no longer register main-app navigation or Settings shortcuts. Regression coverage was added for both paths. After merging current main, all 15 Huddle E2E scenarios, 4,004 desktop tests, 1,088 mobile tests (one expected skip), native clippy, and 2,147 native tests passed. |
Invalidate the cached companion opener when the window returns so startup completion can open a real replacement. Keep companion windows locked to their Huddle by disabling global navigation shortcuts and message deep links. Add E2E coverage for startup reopening and companion route isolation. Co-authored-by: Carl <c7ebe626f000404285d3686e1dc74cc07cc60a9754a150041ba132e14bd3e2ec@buzz.block.builderlab.xyz> Signed-off-by: Wes <wesbillman@users.noreply.github.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 724acd3ca7
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| return Ok(()); | ||
| } | ||
|
|
||
| WebviewWindowBuilder::new(&app, label, WebviewUrl::App("index.html".into())) |
There was a problem hiding this comment.
Prevent companions from consuming community deep links
Loading the full index.html in every companion also mounts App.tsx's unconditional listenForDeepLinks effect. While a Huddle window is open, a buzz://connect, buzz://join, or add-community link is therefore drained by both webviews from the shared pending-link queue; depending on timing, onboarding opens in both windows or the companion acknowledges the item before the main window reads it, replacing the dedicated Huddle surface while the focused main window misses the request. Gate this app-global listener to the main window or bootstrap companions through a shell that omits it.
Useful? React with 👍 / 👎.
| const [huddleBackingChannelIds, setHuddleBackingChannelIds] = React.useState< | ||
| ReadonlySet<string> | ||
| >(() => new Set()); |
There was a problem hiding this comment.
Persist Huddle backing-channel classification
These IDs exist only in React state and are repopulated solely from the currently active native Huddle. If the app is force-quit or crashes during a Huddle, the relay membership and one-hour backing channel survive, but the restarted process has idle native state and this set starts empty; shouldShowSidebarChannel then treats the backing channel as ordinary and exposes it in the sidebar until expiry. Persist the tracked IDs or reconstruct them from authoritative lifecycle data so abnormal restarts do not leak implementation channels.
Useful? React with 👍 / 👎.
Resolve the current-main integration conflicts while preserving Huddle transcript behavior. Keep community deep-link consumption in the main window, and persist backing-channel classification across abnormal restarts. Co-authored-by: Carl <c7ebe626f000404285d3686e1dc74cc07cc60a9754a150041ba132e14bd3e2ec@buzz.block.builderlab.xyz> Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Keep companion windows from restoring or mutating the main window's persisted community onboarding transaction. Co-authored-by: Carl <c7ebe626f000404285d3686e1dc74cc07cc60a9754a150041ba132e14bd3e2ec@buzz.block.builderlab.xyz> Signed-off-by: Wes <wesbillman@users.noreply.github.com>
* origin/main: (323 commits) feat(desktop): redesign the Huddle experience (block#4281) feat(mobile): bring channel menus to desktop parity (block#3940) feat(agents): model-tuning parity in global Agent Defaults editor (block#4578) Polish Share Compute settings (block#3735) fix(reactions): wrap long popover names (block#3834) fix(desktop): clarify inherited agent parallelism (block#4010) feat(desktop): make onboarding model defaults skippable (block#3968) ci: add guarded desktop release cache prewarm (block#4575) fix(mobile): recover stale relay sessions (block#4372) chore(release): release Buzz Desktop version 0.5.4 (block#4562) test(mobile): assert follow boundary semantics (block#4559) docs(release): align desktop handoff instructions (block#3988) fix: report agent usage per provider round, not once per turn (block#4545) fix(desktop): harden Windows installs against Defender block and orphaned Node (block#4382) feat(desktop): improve channel template discovery (block#4549) fix(desktop): save key backups to authorized path (block#4022) Add channel activity hover menu (block#3935) feat(desktop): show saved Run on settings when editing an agent (block#4539) fix(desktop): disambiguate provider API key labels and annotate mint key (block#4406) fix(desktop): make OpenAI key re-enterable after first save in card mint dialog (block#4140) ... Co-authored-by: npub1h39jmnd4xkwvmcx5najarhdxjkysvd9x5w7vsg6xuwpr9y62whvsmt2ghj <bc4b2dcdb5359ccde0d49f65d1dda695890634a6a3bcc82346e38232934a75d9@buzz.block.builderlab.xyz> Co-authored-by: Smarty <bc4b2dcdb5359ccde0d49f65d1dda695890634a6a3bcc82346e38232934a75d9@buzz.block.builderlab.xyz> Signed-off-by: npub1h39jmnd4xkwvmcx5najarhdxjkysvd9x5w7vsg6xuwpr9y62whvsmt2ghj <bc4b2dcdb5359ccde0d49f65d1dda695890634a6a3bcc82346e38232934a75d9@buzz.block.builderlab.xyz> # Conflicts: # crates/buzz-cli/src/commands/repos.rs
…gent-instructions * origin/main: (42 commits) feat(desktop): redesign the Huddle experience (block#4281) feat(mobile): bring channel menus to desktop parity (block#3940) feat(agents): model-tuning parity in global Agent Defaults editor (block#4578) Polish Share Compute settings (block#3735) fix(reactions): wrap long popover names (block#3834) fix(desktop): clarify inherited agent parallelism (block#4010) feat(desktop): make onboarding model defaults skippable (block#3968) ci: add guarded desktop release cache prewarm (block#4575) fix(mobile): recover stale relay sessions (block#4372) chore(release): release Buzz Desktop version 0.5.4 (block#4562) test(mobile): assert follow boundary semantics (block#4559) docs(release): align desktop handoff instructions (block#3988) fix: report agent usage per provider round, not once per turn (block#4545) fix(desktop): harden Windows installs against Defender block and orphaned Node (block#4382) feat(desktop): improve channel template discovery (block#4549) fix(desktop): save key backups to authorized path (block#4022) Add channel activity hover menu (block#3935) feat(desktop): show saved Run on settings when editing an agent (block#4539) fix(desktop): disambiguate provider API key labels and annotate mint key (block#4406) fix(desktop): make OpenAI key re-enterable after first save in card mint dialog (block#4140) ... Signed-off-by: Alex Rosenzweig <arosenzweig@squareup.com>
Requested by Tyler (buzz-tui df272ea1, round 2): pull main into PR #4347 as a new commit on top, no rebase, no force. Main freight is one commit, the Huddle redesign (#4281), which restructured AppShell.tsx (extracted AppHuddleShell / AppShellChannelSurface / LazySettingsScreen) and moved the initial-window helpers from lib.rs into initial_window.rs. Two conflicts, both resolved in favor of main's new structure with the terminal lane re-applied on top: - desktop/src-tauri/src/lib.rs: took main's side (helpers now live in initial_window.rs; the lane's copies were byte-equivalent modulo blank lines and one comment). - desktop/src/app/AppShell.tsx: took main's restructured file, then re-applied the lane's two changes: useTerminalContext replaces the bare activeChannel memo, and TerminalBootstrap mounts behind the app surface via a new optional `terminal` slot on AppHuddleShell (not mounted in the dedicated Huddle room window). Co-authored-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@buzz.block.builderlab.xyz> Signed-off-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@buzz.block.builderlab.xyz>
…er-snapshots * origin/main: feat(mobile): sync per-group channel sorting (#4231) feat(mobile): add channel scroll navigation (#4239) feat(desktop): redesign the Huddle experience (#4281) feat(mobile): bring channel menus to desktop parity (#3940) Signed-off-by: npub1223z34hd7vtwc6qj4s7flsxkj644nlre2nthu7lrrmkumhu3xddsrx9r6w <52a228d6edf316ec6812ac3c9fc0d696ab59fc7954d77e7be31eedcddf91335b@buzz.block.builderlab.xyz> # Conflicts: # desktop/src-tauri/src/lib.rs
…onfig * origin/main: feat(mobile): sync per-group channel sorting (#4231) feat(mobile): add channel scroll navigation (#4239) feat(desktop): redesign the Huddle experience (#4281) feat(mobile): bring channel menus to desktop parity (#3940) feat(agents): model-tuning parity in global Agent Defaults editor (#4578) Signed-off-by: npub1223z34hd7vtwc6qj4s7flsxkj644nlre2nthu7lrrmkumhu3xddsrx9r6w <52a228d6edf316ec6812ac3c9fc0d696ab59fc7954d77e7be31eedcddf91335b@buzz.block.builderlab.xyz> Co-authored-by: Taylor Ho <taylorkmho@gmail.com> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
…theme-config * origin/main: (81 commits) feat(mobile): sync per-group channel sorting (#4231) feat(mobile): add channel scroll navigation (#4239) feat(desktop): redesign the Huddle experience (#4281) feat(mobile): bring channel menus to desktop parity (#3940) feat(agents): model-tuning parity in global Agent Defaults editor (#4578) Polish Share Compute settings (#3735) fix(reactions): wrap long popover names (#3834) fix(desktop): clarify inherited agent parallelism (#4010) feat(desktop): make onboarding model defaults skippable (#3968) ci: add guarded desktop release cache prewarm (#4575) fix(mobile): recover stale relay sessions (#4372) chore(release): release Buzz Desktop version 0.5.4 (#4562) test(mobile): assert follow boundary semantics (#4559) docs(release): align desktop handoff instructions (#3988) fix: report agent usage per provider round, not once per turn (#4545) fix(desktop): harden Windows installs against Defender block and orphaned Node (#4382) feat(desktop): improve channel template discovery (#4549) fix(desktop): save key backups to authorized path (#4022) Add channel activity hover menu (#3935) feat(desktop): show saved Run on settings when editing an agent (#4539) ... Signed-off-by: npub1223z34hd7vtwc6qj4s7flsxkj644nlre2nthu7lrrmkumhu3xddsrx9r6w <52a228d6edf316ec6812ac3c9fc0d696ab59fc7954d77e7be31eedcddf91335b@buzz.block.builderlab.xyz> Co-authored-by: Taylor Ho <taylorkmho@gmail.com> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Resolves two conflicts against main:
AppShell.tsx: HEAD had const { activeCommunity, reinitKey } = communitiesHook
for the composite workspace key; origin/main added useHuddlePresentation()
destructuring from the Huddle redesign (#4281). Resolution keeps both: the
composite key is required for useManagedAgentRuntimeReconciliation, and the
Huddle hooks are needed for the new Huddle UI.
MeshComputeSettingsCard.tsx: HEAD had the Stop using shared compute affordance
plus the legacy inline model section; origin/main (#3735) replaced the inline
model section with the MeshModelPicker component. Resolution keeps the Stop
button block and adopts the MeshModelPicker layout, discarding the replaced
inline model controls.
Also corrects the false comment at runtime_commands_tests.rs:342-345 that
claimed compensate_drain is covered by the desktop integration test suite.
The compensation round-trip requires an AppHandle; the codebase has no
tauri::test harness and no AppHandle mock. The honest coverage statement is:
drain-prefix contract proven by unit test, restart path integration-only.
Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Summary
Why
The previous flow exposed the temporary channel as product UI, obscured who was present or speaking, and split transcript and audio state between the main and companion windows. This keeps backing channels as implementation details unless a user explicitly brings a Huddle into the app, while sharing the live conversation and audio lifecycle across both surfaces. Agent participants now join only after an explicit invitation, distinct voices make multi-agent Huddles easier to follow, and short microphone noise no longer becomes stray transcript messages.
Validation
pnpm checkpnpm build:e2epnpm exec playwright test tests/e2e/huddle-transcription.spec.ts --project=smoke(13 passed)pnpm test(3,910 passed)cargo clippy --manifest-path desktop/src-tauri/Cargo.toml --all-targets -- -D warningscargo test --manifest-path desktop/src-tauri/Cargo.toml(2,093 passed, 14 ignored; 3 diagnostics passed)