Skip to content

Release Codex Deck 0.7.0 - #6

Merged
dazer1234 merged 14 commits into
mainfrom
codex/ios-app
Jul 21, 2026
Merged

Release Codex Deck 0.7.0#6
dazer1234 merged 14 commits into
mainfrom
codex/ios-app

Conversation

@dazer1234

Copy link
Copy Markdown
Owner

What changed

  • adds the native SwiftUI Codex Deck Mobile companion for iPhone
  • adds authenticated Nearby Wi-Fi and Tailscale-compatible relay paths without exposing CDP
  • adds usage limit, overview, reset, context, widget, Live Activity, and notification experiences
  • polishes adaptive light/dark/tinted branding and the physical-iPhone landscape dashboard
  • improves Mac/Windows task ownership, status recovery, launcher compatibility, and release packaging
  • documents beginner installation, local Wi-Fi testing, signing boundaries, and release limitations

User impact

Existing Stream Deck and desktop-only installations remain supported. The iPhone app is distributed as source and currently requires a Mac with Xcode to build and sign. No official OpenAI keycap artwork, relay tokens, or personal signing identifiers are included.

Validation

  • TypeScript check
  • 126/126 Node tests on Windows; 125 passed plus one expected Windows-only skip on macOS
  • Stream Deck validation, pack, and release privacy audit
  • 36/36 Swift tests on a physical iPhone 15 Pro running iOS 27
  • macOS launcher dry-run, watcher self-test, shell syntax, and LaunchAgent plist validation
  • direct private-LAN iPhone connection and loopback-only CDP verification
  • SHA-256 verification of all three v0.7.0 release artifacts on Windows and macOS

No Codex restart was performed during final validation.

@dazer1234
dazer1234 merged commit 0ff3ebb into main Jul 21, 2026
1 check passed
@dazer1234
dazer1234 deleted the codex/ios-app branch July 21, 2026 22:06

@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: c58b008f43

ℹ️ 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 on lines +436 to +442
if (mobileLocalConfig?.enabled) {
mobileLocalRelayServer = new CodexRelayServer(
mobileLocalConfig,
{ ...identity, platform: "darwin", codexVersion: installation.version }, relayControl,
(message) => safeLog(`Nearby mobile relay: ${message}`)
);
await mobileLocalRelayServer.start();

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Keep the Nearby listener owned by one macOS process

On macOS, both this watcher and the Stream Deck plugin now read the same mobile-local-relay-server.json and instantiate CodexRelayServer on its port (src/controller.ts lines 143-148). After a reboot or simultaneous reload, whichever process binds first makes the other fail with EADDRINUSE; if the plugin wins, every watcher iteration reaches this start, throws before the bridge health/recovery block, and retries indefinitely, leaving a cold Codex bridge unable to recover. Assign the Nearby listener exclusively to the watcher on macOS, or coordinate ownership instead of starting it from both processes.

Useful? React with 👍 / 👎.

Comment thread src/controller.ts
Comment on lines +151 to +153
} catch (error) {
this.mobileRelayServer = undefined;
this.localMobileRelayServer = undefined;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Close partially started mobile relays on startup failure

When both mobile configurations are enabled and the first server starts successfully but the second fails—for example because its port is occupied—this catch discards both references without closing the already listening first server. stop() can then no longer close that listener, and the log incorrectly reports that no optional relay started. Retain or explicitly close any server that was started before clearing these fields.

Useful? React with 👍 / 👎.

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