Repository navigation
feat(channels): copy a channel link from the channel menu - #811
Conversation
Adds Copy link to the shared channel actions, so it appears in both the sidebar row menu and the header menu. The link is buzz://channel/<id>, which the existing deep-link and in-message link routing already open in the recipient's selected community. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Honey <44b804aa12cc643328829fa31c020063ef3636c3a73c38ca49641c7626c11bb1@buzz.block.builderlab.xyz>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e76c122564
ℹ️ 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".
| @@ -0,0 +1,25 @@ | |||
| import { LinkIcon } from "../../shared/design-system/icons"; | |||
There was a problem hiding this comment.
This commit has no Signed-off-by trailer, so the exact reviewed SHA violates the repository’s per-commit DCO requirement and will fail the hosted DCO check. Replace it with a commit created using git commit --signoff under the verified actual author identity before submitting it.
AGENTS.md reference: AGENTS.md:L159-L166
Useful? React with 👍 / 👎.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Honey <44b804aa12cc643328829fa31c020063ef3636c3a73c38ca49641c7626c11bb1@buzz.block.builderlab.xyz>
kalvinnchau
left a comment
There was a problem hiding this comment.
🤖 Code-only review of abb489a7 against main: no actionable findings. The new menu item uses the existing channel-link grammar and shared header/sidebar action path; copy rejection reports an error toast. Minimalness 10/10; elegance 9/10 (clipboard error handling is local to this item); correctness 9/10 (the test covers success and rejected writes, but not a missing clipboard API). No tests run for this review. A missing navigator.clipboard would throw before the rejection handler; that is a limited non-secure/unsupported-context follow-up, not a blocker for the supported app context.
* origin/main: (22 commits) feat(teams): edit shared team instructions in their own record (#775) Use Sonner for bottom-right app toasts (#813) Allow bounded stdin data for fixed plugin host commands (#769) Add native Codex agents with CLI defaults (#751) Register placeholder Builderlab agent type in Agents2 (#788) feat(claude-code): bundle the Claude Code agent type by default (#818) perf(datetime): share compact clock formatting (#609) fix(agents): restore Rust test compilation on main (AgentEdit effort) (#821) polish inbox controls and resizable previews (#770) fix(reactions): open the reactor preview on a short hover (#730) perf(messages): batch timestamp locale and timezone lookups (#592) feat(agents): carry effort level in agent and team exports (#779) fix(agents): strip baked team instructions from imported prompts (#774) fix(agents): show renamed Buzz 1.0 agents in browser and publish rename profiles (#702) feat(channels): drag channels into and out of Starred (#745) test(mentions): wait for picker search focus before sending keys (#816) feat(conversation): show unjoined channel links by name, with a preview (#796) Polish Canvas-backed Todos panel and recovery (#804) docs: define shared composition rules for Buzz UI (#802) feat(channels): copy a channel link from the channel menu (#811) ... Signed-off-by: Duncan <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@buzz.block.builderlab.xyz> # Conflicts: # crates/agent-controller/src/import.rs # crates/agent-controller/src/import/tests.rs # crates/agent-controller/src/store.rs # src-tauri/build.rs # src-tauri/capabilities/default.json # src-tauri/src/agents.rs # src-tauri/src/browser_permissions_tests.rs # src-tauri/src/lib.rs # src-tauri/src/relay/kit.rs # src/bundled/agents/AgentImport.test.tsx # src/bundled/agents/AgentImport.tsx # src/features/agents/control-native.ts # src/features/agents/control.ts # src/features/agents/team-instructions.ts
What
Adds Copy link to the channel menu. It shows up in both the sidebar row menu (right-click / ⋯ on a channel) and the channel header ⋯ menu, because both render the same shared channel actions from
ChannelSidebar.The copied link is
buzz://channel/<id>. It carries no community or identity, so it opens in the recipient's selected community, the same way message links (buzz://message?…) already do.Routing
No routing changes were needed.
buzz://channel/<id>is already handled:tauri-plugin-deep-link,buzzscheme) →deepLinkStepinsrc/features/navigation/deep-links.tsparseBuzzLink/buzzLinkTargetinsrc/features/navigation/buzz-links.ts, shown as#channel-nameOpening still goes through the usual viewer, membership, and channel checks. The link grants no access.
Changes
src/bundled/channels/ChannelCopyLinkMenuItem.tsx: new menu item that writes the link to the clipboard and shows a host toast. It follows theChannelReadMenuItempattern (only mounted while the menu is open) and theCommunityRailItemcopy-URL toast pattern.ChannelSidebar.tsx: adds the item torowActions.ChannelSidebar.test.tsx: the fixture now mounts aToastProvider(the real app always has one, inApp.tsx). New test: the link is copied, it resolves back to the same channel, and both the success and failure toasts appear.Validation
vitest run: 641 files / 9318 tests passed at e76c122tsc --noEmit,biome lint+ icon check: cleanchannel-lifecycleandnavigation-mute-readnow expect "Copy link" in their item lists (abb489a). They pass locally in chromium and webkit (28/28).navigator.clipboardis missing (non-secure contexts only), and add a header-menu browser assertion.Try it
#channel, and clicking it should open the channel.open 'buzz://channel/<id>'. The packaged or dev app should come to the front on that channel.buzz-review-completed
🤖 Generated with Claude Code