Skip to content

[codex] Add notch island floating bar UI#8347

Open
Git-on-my-level wants to merge 43 commits into
mainfrom
codex/notch-island-ui
Open

[codex] Add notch island floating bar UI#8347
Git-on-my-level wants to merge 43 commits into
mainfrom
codex/notch-island-ui

Conversation

@Git-on-my-level

@Git-on-my-level Git-on-my-level commented Jun 25, 2026

Copy link
Copy Markdown
Collaborator

Summary

Adds the notch-island floating bar experience for MacBook displays with a camera housing while preserving the legacy compact pill on notchless monitors.

Highlights:

  • Adds a black notch-integrated island with reserved camera dead-zone space, right-side inverted Omi logo/settings hover animation, compact PTT mic/wave state, and left-side subagent placement.
  • Expands Ask Omi/chat downward from the notch center using a fixed-window reveal animation to avoid lateral jitter.
  • Adds display-aware fallback so external/notchless monitors keep the old pill UI, including restored purple response glow.
  • Adds line-only Siri-style response indication for notch mode without haze/boxed glow.
  • Adds settings focus behavior from the notch control and target-screen-aware geometry for cross-monitor movement.
  • Adds the generated inverted Omi logo SVG, the logo-fitting helper script, and focused notch transition tests.
  • Includes related desktop runtime fixes found during dogfooding: preserve explicit audio input overrides across route changes, keep voice response state alive through playback, make adapter binding replacement atomic, and loosen pi-mono top-level schemas for provider compatibility.

Review

An independent subagent review was run before publication. It found one blocking issue: adapter binding replacement closed the previous native binding before inserting the replacement. This PR fixes that by wrapping close+insert in a transaction and adds a rollback regression test. It also flagged generated logo fit artifacts; those were excluded from the PR.

Validation

  • git diff --check
  • xcrun swift build -c debug --package-path Desktop
  • xcrun swift test -c debug --package-path Desktop --filter FloatingBarNotchTransitionTests
  • npm run build in desktop/macos/agent
  • npm test in desktop/macos/agent
  • Built, signed, installed, and launched /Applications/omi-notch-mode.app via OMI_APP_NAME="omi-notch-mode" ./run.sh --yolo, then relaunched it directly.

Known local validation gap:

  • npm test in desktop/macos/pi-mono-extension currently fails before running tests because the package has no declared/installable dependency for @mariozechner/pi-coding-agent in this checkout.

Review in cubic

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f67a0b91dd

ℹ️ 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".

Comment thread desktop/macos/Desktop/Sources/FloatingControlBar/FloatingControlBarWindow.swift Outdated

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

10 issues found across 17 files

Confidence score: 2/5

  • desktop/macos/pi-mono-extension/index.test.ts currently enforces stripping top-level schema combinators, which weakens validation for agent-control tool inputs and can allow invalid requests to pass as valid. This should be reverted or narrowed so required preconditions remain enforced before merging.
  • In desktop/macos/Desktop/Sources/FloatingControlBar/FloatingControlBarView.swift, Ask Omi is gated behind !isHovering even though clicking requires hover, so normal user clicks can fail to trigger the action. Fix the hover/click condition and add a UI regression test for notch button interaction before merge.
  • desktop/macos/Desktop/Sources/AudioCaptureService.swift accepts override input device IDs during reconfiguration without validating availability, so stale/disconnected IDs can break capture instead of falling back to a usable device. Add validation plus fallback-to-default behavior (with a reconfiguration test) before merging.
  • Floating-bar state transitions look inconsistent across desktop/macos/Desktop/Sources/FloatingControlBar/FloatingControlBarWindow.swift, desktop/macos/Desktop/Sources/MainWindow/Pages/SettingsPage.swift, and desktop/macos/Desktop/Sources/FloatingControlBar/RealtimeHubController.swift, which can force collapsed/incorrect UI states or leave stale indicators after mode changes and barge-in paths. Align resize/show/clear logic with active state and update tests to exercise production transition paths before merge.

Tip: instead of fixing issues one by one fix them all with cubic

Re-trigger cubic

Comment thread desktop/macos/pi-mono-extension/index.test.ts Outdated
Comment thread desktop/macos/Desktop/Sources/FloatingControlBar/FloatingControlBarView.swift Outdated
Comment thread desktop/macos/Desktop/Sources/AudioCaptureService.swift Outdated
Comment thread desktop/macos/scripts/generate-omi-notch-logo.py Outdated
Comment thread desktop/macos/Desktop/Sources/MainWindow/Pages/SettingsPage.swift Outdated
Comment thread desktop/macos/Desktop/Sources/FloatingControlBar/RealtimeHubController.swift Outdated
Comment thread desktop/macos/Desktop/Tests/FloatingBarNotchTransitionTests.swift Outdated
Comment thread desktop/macos/Desktop/Sources/FloatingControlBar/FloatingControlBarWindow.swift Outdated
Comment thread desktop/macos/scripts/generate-omi-notch-logo.py Outdated
Comment thread desktop/macos/Desktop/Sources/FloatingControlBar/FloatingControlBarWindow.swift Outdated
@Git-on-my-level Git-on-my-level force-pushed the codex/notch-island-ui branch from 180fec2 to 103f02b Compare June 25, 2026 07:44

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 103f02bc6d

ℹ️ 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".

Comment thread desktop/macos/Desktop/Sources/FloatingControlBar/FloatingControlBarView.swift Outdated
Comment thread desktop/macos/Desktop/Sources/FloatingControlBar/RealtimeHubController.swift Outdated

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

2 issues found across 3 files (changes from recent commits).

Tip: Review your code locally with the cubic CLI to iterate faster.

Fix all with cubic | Re-trigger cubic

Comment thread desktop/macos/Desktop/Sources/FloatingControlBar/FloatingControlBarView.swift Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b6f4a22901

ℹ️ 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".

Comment thread desktop/macos/Desktop/Sources/FloatingControlBar/FloatingControlBarView.swift Outdated

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

3 issues found across 2 files (changes from recent commits).

You’re at about 93% of the monthly reviewed-line limit. You may want to disable incremental reviews to conserve quota. Reviews will continue until that limit is exceeded. If you need help avoiding interruptions, please contact contact@cubic.dev.

Tip: Review your code locally with the cubic CLI to iterate faster.

Fix all with cubic | Re-trigger cubic

Comment thread desktop/macos/Desktop/Sources/FloatingControlBar/FloatingControlBarView.swift Outdated
Comment thread desktop/macos/Desktop/Sources/FloatingControlBar/FloatingControlBarWindow.swift Outdated
Comment thread desktop/macos/Desktop/Sources/FloatingControlBar/FloatingControlBarView.swift Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 22a960db3d

ℹ️ 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".

Comment thread desktop/macos/Desktop/Sources/FloatingControlBar/FloatingControlBarWindow.swift Outdated
…us colors, show recent agents, shrink panel after glow, add notch pill tap, fix glow height calc
@Git-on-my-level

Copy link
Copy Markdown
Collaborator Author

Follow-up on the notch-island review comments:

  • Preserved the active notch width after PTT ends: current resizeForPTTState(expanded: false) now uses notchCollapsedSize, which accounts for visible agent pills instead of forcing the compact side width.
  • Re-anchor-on-screen-change is covered by the current centerOnMainScreen() notch branch: when notch mode is active on a camera-housing screen it calls frameForCurrentState(... usesNotchIsland: true), which uses screen.frame/notch top anchoring rather than the legacy visible-frame inset.
  • Restored agent pill controls in notch mode in c0e3a8201: AgentPillsWindow now remains visible whenever pills exist, including for a notch-island anchor, so hover popovers/dismiss/open-in-chat/follow-up controls remain reachable while the compact notch icons are also shown.

Local verification:

  • git diff --check
  • xcrun swiftc -parse desktop/macos/Desktop/Sources/FloatingControlBar/AgentPillsWindow.swift desktop/macos/Desktop/Sources/FloatingControlBar/FloatingControlBarWindow.swift desktop/macos/Desktop/Sources/FloatingControlBar/FloatingControlBarView.swift

@Git-on-my-level

Copy link
Copy Markdown
Collaborator Author

Addressed the remaining notch agent-pill reachability review comment.

Fix:

  • Removed the suffix(3) cap in notch mode.
  • The notch-side pill row now renders every active pill in newest-first order inside a horizontal scroll view, so the newest pills remain immediately visible and older pills remain reachable even while the legacy overlay is hidden for notch anchors.
  • Added an accessibility hint describing the horizontal scroll affordance.

Verification:

  • git diff --check
  • xcrun swiftc -parse desktop/macos/Desktop/Sources/FloatingControlBar/FloatingControlBarView.swift

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 9cf6a55a7f

ℹ️ 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".

Comment thread desktop/macos/Desktop/Sources/MainWindow/Pages/SettingsPage.swift
@Git-on-my-level

Copy link
Copy Markdown
Collaborator Author

Addressed the remaining Codex thread for PR #8347.

Verification:

  • Confirmed desktop/macos/CHANGELOG.json now has an unreleased Notch Mode entry on the PR head (6b7280f00).
  • Ran python3 -m json.tool desktop/macos/CHANGELOG.json successfully.
  • Ran git diff --check successfully.

No additional code changes were needed in this cron run because the PR branch already contained commit 6b7280f00 adding the changelog entry.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6b7280f00e

ℹ️ 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".

Comment thread desktop/macos/Desktop/Sources/AudioCaptureService.swift
@Git-on-my-level

Copy link
Copy Markdown
Collaborator Author

Addressed the Codex P2 default-device listener feedback.

Fix:

  • AudioCaptureService now tracks whether the resolved capture device is an available explicit override.
  • If an override device was requested but is unavailable and capture falls back to the system default, the default-input-device listener is installed so later default microphone changes still trigger reconfiguration.
  • The resolved override-tracking state is reset on stop.

Verification:

git diff --check
xcrun swiftc -parse desktop/macos/Desktop/Sources/AudioCaptureService.swift

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 4e57816583

ℹ️ 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".

Comment thread desktop/macos/Desktop/Sources/AudioCaptureService.swift
@Git-on-my-level

Copy link
Copy Markdown
Collaborator Author

Addressed and verified the remaining default-device listener review thread.

Current PR head 9856797b7 has the fallback path covered:

  • installPropertyListeners() now delegates to updateDefaultDeviceListener() plus installDeviceFormatListener().
  • updateDefaultDeviceListener() removes the default-device listener while an explicit override is still being tracked, but reinstalls it whenever resolveInputDeviceID() falls back to the system default (isTrackingOverrideDevice = false).
  • reconfigureAfterChange(...) now calls updateDefaultDeviceListener() before reinstalling the per-device format listener, so the override-unavailable → default fallback path observes future default-input changes.

Verification run locally in /Users/dazheng/repos/omi-worktrees/pr-8347-notch-island-ui:

git diff --check
xcrun swiftc -parse desktop/macos/Desktop/Sources/AudioCaptureService.swift

Both commands passed.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 9856797b75

ℹ️ 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".

Comment thread desktop/macos/Desktop/Sources/FloatingControlBar/FloatingControlBarWindow.swift Outdated
@Git-on-my-level

Copy link
Copy Markdown
Collaborator Author

Resolved the stale notch input panel height thread after re-verifying the current head.

Current head 7439fdd79 addresses the original concern by centralizing the notch input panel budget:

  • notchInputPanelHeight = notchChromeHeight + notchInputPanelMinimumContentHeight + notchInputPanelVerticalPadding (34 + 40 + 37 = 111 pt), so the initial notch input panel includes chrome and vertical padding instead of opening at 96 pt.
  • inputPanelHeight is used for the initial Ask Omi resize, reset/clear paths, and state.inputViewHeight, so the observer no longer immediately shrinks the panel back to the old undercounted height.
  • Dynamic input-height observer now passes through the measured inputViewHeight directly via resizeToFixedHeight(_:); the previous notchChromeHeight + height + 22 mirror noted by the review is gone.

Verification:

git diff --check
xcrun swiftc -parse desktop/macos/Desktop/Sources/FloatingControlBar/FloatingControlBarWindow.swift

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 issue found across 4 files (changes from recent commits).

Tip: Review your code locally with the cubic CLI to iterate faster.

Re-trigger cubic

Comment thread desktop/macos/Desktop/Sources/Providers/ChatToolExecutor.swift Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d53cf91bdc

ℹ️ 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".

Comment thread desktop/macos/Desktop/Sources/FloatingControlBar/FloatingControlBarView.swift Outdated
@Git-on-my-level

Copy link
Copy Markdown
Collaborator Author

Addressed the current trusted-bot review feedback in this PR.

What changed:

  • Replaced floating-pill client-scope string comparisons/call sites with a shared AgentLegacyClientScope.floatingPill constant so the spawn-agent gating contract cannot drift silently across files.
  • Changed notch agent pills to group before the fourth orb (directAgentLimit = 3) because the notched lobe has 64 pt of usable width and four direct orbs plus gaps require 74 pt.

Verification passed:

  • git diff --check — passed.
  • xcrun swiftc -parse Desktop/Sources/Chat/AgentRuntimeStatusStore.swift Desktop/Sources/Providers/ChatToolExecutor.swift Desktop/Sources/FloatingControlBar/AgentPill.swift Desktop/Sources/FloatingControlBar/FloatingControlBarView.swift — passed.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 issue found across 4 files (changes from recent commits).

Tip: Review your code locally with the cubic CLI to iterate faster.

Re-trigger cubic

@Git-on-my-level

Copy link
Copy Markdown
Collaborator Author

Follow-up fix for the new Cubic P1 comment.

What changed:

  • Kept directAgentLimit = 3 for direct individual orbs so four pills do not overflow the notch lobe.
  • Added a separate groupedStatusLimit = 4 for grouped status buckets so all four non-empty status groups remain reachable in grouped mode.

Verification passed:

  • git diff --check — passed.
  • xcrun swiftc -parse Desktop/Sources/FloatingControlBar/FloatingControlBarView.swift — passed.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 issue found across 1 file (changes from recent commits).

Tip: Review your code locally with the cubic CLI to iterate faster.

Re-trigger cubic

Comment thread desktop/macos/Desktop/Sources/FloatingControlBar/FloatingControlBarView.swift Outdated
@Git-on-my-level

Copy link
Copy Markdown
Collaborator Author

Follow-up fix for the new Cubic P2 comment.

What changed:

  • Kept grouped mode to three visible orbs so it still fits the notched lobe width.
  • Added a More grouped orb when all four status buckets are non-empty; the overflow popover aggregates the hidden status groups so every pill remains reachable without clipping.

Verification passed:

  • git diff --check — passed.
  • xcrun swiftc -parse Desktop/Sources/FloatingControlBar/FloatingControlBarView.swift — passed.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d1f1b8cbd2

ℹ️ 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".

@Git-on-my-level

Copy link
Copy Markdown
Collaborator Author

Follow-up fix for the new Codex P2 comment.

What changed:

  • Reordered the notch background layers so the black dock fill draws first and NotchResponseGlowView draws above it. This keeps the lower-edge response glow visible when Ask Omi or a notification expands the notch surface.

Verification passed:

  • git diff --check — passed.
  • xcrun swiftc -parse Desktop/Sources/FloatingControlBar/FloatingControlBarView.swift — passed.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review


P2 Badge Use the notch fallback inset for PTT placement

When Notch Mode is enabled on a notchless/external display, notchModeEnabled is false but topInsetForPillFallback is 4 pt, and other fallback-placement paths use that helper. This PTT path still passes the legacy 40 pt inset, so pressing or releasing PTT on those displays moves the voice bar/pill down to the old position instead of keeping the notch-mode fallback placement; route this through the fallback inset as well.

ℹ️ 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".

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant