Skip to content

Prepare Codex Deck v0.6.1 - #3

Merged
dazer1234 merged 7 commits into
mainfrom
codex/fix-macos-main-renderer
Jul 18, 2026
Merged

Prepare Codex Deck v0.6.1#3
dazer1234 merged 7 commits into
mainfrom
codex/fix-macos-main-renderer

Conversation

@dazer1234

Copy link
Copy Markdown
Owner

What changed

  • support Pinned, Recently updated, Priority, and Individual Codex Micro agent sources across combined Windows and Mac slots
  • preserve task ownership across cloud and remote-SSH mirrors with a bounded, content-free local session catalog
  • fix renderer selection, nested task identities, native status normalization, and intermittent collected CDP promises
  • prevent macOS watcher restart loops and contain relay snapshots while Codex is closed or still loading
  • update release documentation and package metadata for v0.6.1

Why

Multi-host slots could become stale, route mirrored tasks to the wrong computer, or lose custom/pinned behavior after Codex updates. A real Mac power-loss incident also exposed an unhandled authenticated relay snapshot: Node terminated the watcher before native Micro signals were ready, LaunchAgent restarted it, and generation-scoped recovery could repeat across new PIDs.

The macOS watcher now never launches a closed Codex app, waits for an unbridged process to stabilize, and applies a generation-independent recovery cooldown. Relay snapshot failures are caught and rate-limited, with LaunchAgent stderr retained separately.

User impact

  • combined agent keys follow Codex's selected source mode more faithfully
  • mirrored tasks remain attached to their real owning computer
  • completed/working states and remote agent presses are more reliable
  • unexpected shutdowns or incomplete Mac app startup cannot create an unlimited restart loop

Validation

  • npm run check
  • npm test — 73/73 passed
  • npm run validate
  • npm run pack
  • npm run audit:release
  • exact Windows launcher ZIP self-test passed
  • exact macOS launcher ZIP self-test passed
  • all three extracted release artifacts passed the private/protected-content audit
  • macOS ZIP executable permissions verified as 0755
  • live Windows-to-Mac SSH relay and one guarded post-power-loss recovery verified with stable watcher and Codex PIDs

@dazer1234
dazer1234 merged commit 21371c4 into main Jul 18, 2026
1 check passed
@dazer1234
dazer1234 deleted the codex/fix-macos-main-renderer branch July 18, 2026 17: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: e3bf3b3eb2

ℹ️ 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 src/session-ownership.ts
Comment on lines +91 to +95
this.recentSessions = await Promise.all(recent.map(async ({ threadId, path, activityAt }) => ({
threadId,
activityAt,
status: now - activityAt <= 15 * 60_000 ? await readRecentSessionStatus(path) : "idle"
})));

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 Gate rollout-tail reads to multi-host mode

In a single-host installation, CodexMicroRendererBridge.refresh() still calls annotate() unconditionally, so this now reads up to 512 KiB from every recently modified rollout despite the README security guarantee that single-host mode reads no rollout data and rollout contents are never read. Even though only derived tags are relayed, the local file-content access happens without a relay being configured; enable this catalog only when multi-host ownership is needed or update the security disclosure.

Useful? React with 👍 / 👎.

Comment thread src/session-ownership.ts
Comment on lines +75 to +83
for (let index = 0; index < sessionFiles.length; index += 32) {
const batch = sessionFiles.slice(index, index + 32);
const resolved = await Promise.all(batch.map(async ({ threadId, path }) => {
try {
const info = await stat(path);
return { threadId, path, activityAt: info.mtimeMs };
} catch { return null; }
}));
files.push(...resolved.filter((value): value is NonNullable<typeof value> => value != null));

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 Avoid statting the entire rollout history every refresh

For users with a long-lived Codex history, this loop issues a stat for every file under both active and archived session roots before limiting the catalog to 128 entries. Because the ownership index refreshes every five seconds, thousands of historical rollouts cause continuous filesystem churn and can delay the 1.2-second bridge polling path; cache unchanged metadata or restrict traversal to recent directories/files before statting.

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