Repository navigation
Conversation
… record onboarding events Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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: 5c9eca4a82
ℹ️ 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".
| recordTelemetryEvent( | ||
| args: SystemRecordTelemetryEventArgs, | ||
| ): Promise<SystemRecordTelemetryEventResult>; |
There was a problem hiding this comment.
Prefix and audit the new plugin SDK method
SystemArea is inherited by both PluginBbSdk and PluginBrowserBbSdk, so this adds an unprefixed public plugin API at bb.sdk.system.recordTelemetryEvent and useSdk().system.recordTelemetryEvent. Rename it with an experimental_ prefix and add the required audit and Plugin Guide surface entries before exposing it to plugins.
AGENTS.md reference: AGENTS.md:L28-L30
Useful? React with 👍 / 👎.
| /** | ||
| * Forward one anonymous product event from a bb client to the server's | ||
| * usage telemetry. Only the onboarding, setup checklist, and notification | ||
| * prompt events in the request schema are accepted, and the server drops | ||
| * them when usage data sharing is off. |
There was a problem hiding this comment.
Remove the forbidden route comment
Remove this explanatory JSDoc block: it is a server-contract route comment, not a semantic tool directive or Plugin SDK declaration comment, so it violates the repository's prohibition on code comments.
AGENTS.md reference: AGENTS.md:L11-L11
Useful? React with 👍 / 👎.
| const showNotifications = | ||
| pushNotificationsEnabled && | ||
| (notifications.permission === "default" || | ||
| notifications.permission === "granted"); |
There was a problem hiding this comment.
Respect the notification channel setting in the checklist
When the push-notifications plugin is enabled but the current client's webEnabled or desktopEnabled setting is false, this still offers permission and later reports “On for this device.” The plugin sender omits disabled channels and its in-thread prompt explicitly checks the per-channel setting, so granting browser permission here cannot make notifications arrive; derive visibility/completion from the active channel setting as well as plugin enablement.
Useful? React with 👍 / 👎.
| ...(showNotifications | ||
| ? [ | ||
| { | ||
| id: "notifications" as const, | ||
| title: "Turn on notifications", |
There was a problem hiding this comment.
Record checklist notification prompt impressions
Whenever this branch renders the checklist's “Turn on notifications” item, no notification_prompt_shown event is emitted even though subsequent clicks emit accepted, denied, or dismissed events with surface: "checklist". Consequently checklist opt-in analytics have outcomes without an impression denominator; record the shown event once when this item first becomes visible.
Useful? React with 👍 / 👎.
| useEffect(() => { | ||
| recordTelemetryEvent({ | ||
| name: "onboarding_step_reached", | ||
| properties: { step, entry }, | ||
| }); | ||
| }, [entry, step]); |
There was a problem hiding this comment.
Emit onboarding start before the first reached event
On a normal uncached first run, agentStates is initially undefined, so the preceding effect skips onboarding_started while this effect immediately emits onboarding_step_reached; the start event is only sent after the provider query resolves. This reverses the intended funnel order—and omits the start entirely if that query never resolves—so gate or combine the first reached emission until the start payload is available.
Useful? React with 👍 / 👎.
…rmission is decided Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…r follows Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…the composer Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…separately Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Stacks Tips on #5222. Keeps both sides of the useBbNavigate API (experimental_openAppRoute, experimental_runAppCommand, and experimental_openTerminal), their docs and audit entries, and takes the base's plugin SDK version. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…-notification-opt-in-onboardin-thr_7xet9fqq42 # Conflicts: # apps/app/src/components/onboarding/Onboarding.stories.tsx # apps/app/src/components/onboarding/SetupChecklistHost.tsx # apps/app/src/components/onboarding/SetupChecklistViews.tsx # packages/domain/src/plugin-sdk-version.ts # packages/plugin-sdk/package.json
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Brings in #5222 after #5228 removed the welcome page and checklist card and #5229 removed the navigation plugin. experimental_setupComplete still comes from useSetupChecklist, which drives the remaining setup banner. Plugin SDK moves to 0.6.35, one above the base's 0.6.34. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…te badge Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…can't re-show it Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…extra, and expose setupComplete Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…-notification-opt-in-onboardin-thr_7xet9fqq42 # Conflicts: # apps/app/src/components/onboarding/Onboarding.stories.tsx # apps/app/src/components/onboarding/OnboardingGate.tsx # apps/app/src/components/onboarding/SetupChecklistHost.test.tsx # apps/app/src/components/onboarding/SetupChecklistHost.tsx # apps/app/src/components/plugin/PluginNewThreadComposer.test.tsx # apps/app/src/views/RootComposeView.tsx # packages/domain/src/plugin-sdk-version.ts # packages/plugin-sdk/package.json
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#5222 removed the setup checklist and banner after #5291 and added useSetupComplete: the setup guide is finished or skipped and at least one thread exists. Home sections now get experimental_setupComplete from that hook. Plugin SDK moves to 0.6.39, one above the base's 0.6.38. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…es hierarchy, one done treatment, new plugin list - Agent step names the checked machine when it isn't this computer; new ACP footer line - Projects: new repos first with a quiet selection header, already-added repos as a checked group, subtitle matches the 7-day preselection - Devices: mobile app as the primary card with one Get the app action, browser access and another machine as secondary rows, footer button Start your first thread - Plugins: Workflows, Browser Automation, Agent Annotations, GitHub, Ask User Question, File Editor with first-session descriptions - Shared done mark (diff-added green) for header steps, ready agents, connect On and added repos; Agent step label is Agents - Notification card copy; step_reached counts once per step and leaving the Devices route counts as skipped Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e room Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Plugin SDK moves to 0.6.41, one above the base's 0.6.40. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…r nudge Both the notifications card and plugin sidebar footer sections render above the footer. Plugin SDK moves to 0.6.42, above #5222 (0.6.40) and Tips (0.6.41). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…udge to the plugin registry Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The plugin component registry now comes only from #5222. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Human comments
What was wrong
Nothing asks new users for browser or desktop notification permission, even though the push-notifications plugin is on by default. Agents finish or stall while the user is away, and nothing brings them back. We also can't see where people drop off in the setup guide, because server telemetry has no setup-guide or notification-prompt events. And Tips (#4991) needs one shared answer to "has this user finished setting up?"
What changed
Scope follows #5291: there is no "Finish setting up bb" banner or checklist. This PR adds no setting and no reopen state.
Notification card in the sidebar (
SidebarNotificationsPrompt, rendered byAppSidebarabove the sidebar footer)SidebarNudge(@bb/shared-ui/sidebar-nudge): a bell icon tile, body text only, one action and a dismiss, with more room inside the card and from the sidebar edges. It is styled like the What's new card in Make What's new a built-in plugin with a sidebar card and an easy off switch #4981: no border, a subtle raised fill, and × to dismiss.useSidebarNotificationsPrompt().visibleholds the decision inAppSidebar; when Make What's new a built-in plugin with a sidebar card and an easy off switch #4981 lands,PluginSidebarFooterSectionsrenders only while it is false.useNotificationPermission.Setup guide copy and hierarchy
agent). The description names the checked machine when it isn't this computer. The footer reads "Don't see your agent? Install any ACP agent, like OpenCode, and bb should pick it up."--diff-added).--success-foregroundrenders brown because Chrome mixes in the achromatic ink's 0 hue, so it isn't used.onboarding_step_reachedfires once per step instead of again on Back. Leaving the Devices route counts as skipped, not completed.setupCompletefor TipsuseSetupComplete()returns true once the setup guide is finished or skipped (onboardingCompletedAtis set) and the user has created at least one thread.Setup-guide and notification events (existing server-side PostHog telemetry: anonymous install id, respects
telemetryEnabled/BB_TELEMETRY)POST /api/v1/system/telemetry/eventsandsdk.system.experimental_recordTelemetryEvent, with an entry indocs/api_to_audit.md. The schema is a strict allow-list: unknown events or extra properties return 400.onboarding_started: whether an agent was installed or ready at first launch.onboarding_step_reached,onboarding_step_completed,onboarding_step_skipped: per step, withentryset tofirst_runorreplay(Settings → Show setup guide).onboarding_finished:outcomeiscompletedorskipped, pluslast_step.notification_prompt_shown,notification_prompt_accepted,notification_prompt_dismissed,notification_prompt_denied:surfaceissidebar.OnboardingFlow. The Projects and Plugins steps pass a separateonSkipso their Skip can be told apart; behavior is the same.docs/configuration.md, and/privacynow list what is sent.Contracts
0.6.40for the new SDK member.HOST_DAEMON_PROTOCOL_VERSIONis unchanged.Screenshots
Before:
59a1fcc29f(merge base with main) · After:b75017c645(PR head) · Captured at 2×Branch web dev app (
pnpm dev) in Chrome for Testing through BB Browser Automation, same data dir for both. The notification nudge is shown through its stored "shown" state, so the sidebar has no running thread. The setup guide was opened from Settings → Show setup guide and walked with Continue and Skip, so nothing was imported.How you verified
apps/server/test/system/telemetry-events.test.ts: forwards an allowed event; rejects unknown events and extra properties.SidebarNotificationsPrompt.test.tsx: the card shows only once a thread runs and stays until answered; permission is requested only on a click;shown,acceptedanddismissedevents; hidden when permission is decided or push is off; no re-ask after Not now.useSetupComplete.test.tsx: false before the guide is finished or skipped; false until a thread exists; true after both.POST /system/telemetry/eventsreturns 200 for a valid event and 400 for an extra property.Review: I ran one Slop Cop review and a scoped follow-up on moving the prompt into the sidebar. All P1s were fixed: the SDK method is
experimental_with an audit entry, and the prompt no longer re-asks after permission is decided.P2 follow-ups, not done here:
BB-Thread: Notification card, setup-guide events, setupComplete
🤖 Generated with Claude Code