Conversation
|
Resolved a macOS recovery issue found during live testing on Codex 26.810.52044.
Verification: 435 tests passed, 1 expected skip, TypeScript check, build, Stream Deck validation, release audit (3 roots), and diff check. The patched artifacts were also installed on macOS 26.5.1 with Codex 26.810.52044; live logs show |
|
Fixed Model Presets showing UNAVAILABLE on current Codex builds in 8c62d73. A live read-only probe traced the rejection to a non-enumerable, own-data Symbol.dispose cleanup function on the models/list response envelope. The validator now permits only that exact well-known cleanup symbol on the envelope, never invokes it, and continues rejecting accessors, proxies, unrelated/lookalike symbols, enumerable hooks, and symbols on model records. Original input cloning retains proxy rejection after descriptor validation. Regression reproduced the failure before the change; 75 bridge tests and the full suite (436 passed, 1 expected skip), TypeScript, build, plugin validation, and release audit pass. The patched serialized metadata reader was verified read-only against live Codex: gpt-5.6-sol / medium, nine catalog records. Saved presets and model selection were not modified. This commit is limited to the bridge and its regression test. |
|
Fixed current Codex model-preset detection in b2b6fff. The composer now displays GPT-prefixed names such as GPT-6 Astra, while catalog display names are normalized to 6 Astra. Normalize the optional GPT prefix on visible labels too, retaining exact catalog matching and ambiguity rejection. Regression reproduced before the fix; 436 tests pass (one expected skip), TypeScript, build, plugin validation, and release audit pass. A read-only probe against the running Codex app now resolves gpt-6-astra / low and all nine catalog models. No Codex restart was needed for verification. |
|
Added normal-launch macOS task-status recovery in bfa27e8. After Codex opens normally or an update relaunches it without debug flags, the plugin can connect to the existing desktop IPC socket. It reads the six recent non-archived local tasks from the read-only catalog, subscribes to live status, and opens exact task IDs through Codex deep links. It does not modify or restart Codex, install another launcher, or create a router. The adapter verifies socket ownership, bounds frames, projects only status metadata, and clears stale state on disconnect, owner loss, unsupported versions, missed revisions and read-state changes. Reconnection resubscribes. The renderer bridge remains preferred when available. Scope limitation: this is task-status/navigation recovery, not full normal-launch control parity. Model presets, native actions and usage still need the renderer bridge. IPC snapshots omit composer authority, expose an unavailable action layout, and leave tasks without live snapshots marked unknown. Recent ordering is used in fallback mode. Details are in docs/DESKTOP_IPC.md. Validation: full suite passed (440 passed, one expected skip), followed by seven additional independent IPC safety/relay tests, all passing. TypeScript, build, Stream Deck validation and release audit passed. A live read-only test forced only the renderer connection attempt to fail and recovered four live task statuses through IPC; two tasks without snapshots remained explicitly unknown. No CDP call or Codex restart was used for that test. The plugin build was installed locally with only a Stream Deck reload. |
|
Added normal-launch account Usage recovery in commit 10efad9.
Validation: 459 tests passed, one expected skip; TypeScript, build, Stream Deck package validation, release audit, and diff checks passed. Independent code review is clear. A live production-bridge probe returned account usage through desktop IPC on Codex 26.903.61454 without CDP. Installed the built plugin locally and reloaded only Stream Deck; its log reports local=ready and live task updates. Codex's process/start time remained unchanged. Remaining limitation: this does not resolve normal-launch Model Preset or native Action controls. The inspected desktop IPC provides task owner/follower operations, not focused-composer state or a general desktop-command dispatcher. Task next-turn settings are not equivalent to the current composer's selection. Full support needs a desktop interface for focused composer state, validated model/effort updates, and native action dispatch. The renderer path remains preferred when available. Details are in docs/DESKTOP_IPC.md. |
|
Follow-up fc0b134 adds deduplicated, redacted Usage availability diagnostics and corrects stale macOS troubleshooting text that implied automatic recovery restarts. Actual installed Stream Deck process now logs account usage available (weekly); the standalone probe was not sufficient display verification. Missing five-hour windows still show unavailable. Model Preset/native Actions remain unsupported by the normal-launch fallback. 460 tests passed, one expected skip; check/build/package validation/release audit passed, with independent review clear. Reloaded Stream Deck only; Codex remained running. |
|
Fixed a fallback disconnect loop in c86701e. Codex 26.908.40834 emitted a 37,577,454-byte task snapshot, exceeding the plugin's previous 32 MiB receive limit. The plugin disconnected, cooled down for 30 seconds, retried the same snapshot, and degraded all controls repeatedly. Incoming frames now permit up to 64 MiB; outgoing messages retain the 32 MiB limit. Invalid/oversized frames still disconnect with cooldown, and diagnostics report only numeric frame sizes rather than task content. The new regression delivers a fragmented 36 MiB payload followed by another valid message. This raises the bounded compatibility limit; it is not an unlimited streaming parser. Validation: 461 tests passed, one expected skip; TypeScript, build, Stream Deck validation, release audit, and independent QA passed. Live checks against the running updated Codex processed the formerly rejected snapshot and continued receiving activity and weekly usage. Installed the verified plugin and reloaded Stream Deck only. Separate unresolved issue: the Codex update also relaunched without renderer debug flags. This patch restores the task/usage fallback; Model Preset and native Action controls still require the renderer connection and a separately authorized bridge-enabled restart. |
|
Replaced buffered desktop-status decoding with incremental metadata projection in 3a943f4. The prior limit increase was insufficient: live task snapshots grew from ~36 MiB to ~72 MiB, again disconnecting the entire task/Usage fallback. The live IPC path now streams JSON with socket backpressure and retains only bounded task-status metadata. Task history, tool output, and request bodies are skipped without assembling whole snapshots. Frame length no longer determines a buffer allocation. UTF-8 and split/coalesced frames, revision-checked patches, useful status/request updates, cancellation, and reconnect behavior are preserved. Unsupported patch values invalidate the affected task instead of inventing status. Frame deadlines and metadata/depth limits remain enforced; errors never include task content. Validation: 472 tests passed, one expected skip; TypeScript, build, Stream Deck package validation, release audit, and independent agent QA passed. Streaming 70/80 MiB fixtures pass bounded-memory tests, including on Stream Deck's Node 20.20.0 runtime. Independent real-socket QA also passed an 80 MiB snapshot followed by reset/reconnect. Live probes against the previously failing running Codex continued receiving task status and weekly usage, with sampled heap around 9–14 MiB. Installed the matching bundle and reloaded Stream Deck only. Dependency note: pinned stream-json 1.9.1 for Node 20 compatibility. The bundle source map confirms only Parser.js and Utf8Stream.js are included. npm reports a moderate advisory for its filter modules, which this integration neither imports nor bundles; the tokenizer also has an independent depth cap. Three existing high findings belong to the Elgato development CLI dependency tree. These audit findings are disclosed rather than described as a clean npm audit. This resolves the snapshot-size disconnect mechanism. It does not restore the renderer connection removed by a Codex update: Model Preset and native Actions still need the previously documented bridge-enabled launch. |
|
Resolved another normal-launch degradation path in The Stream Deck logs showed recurring The IPC fallback now retains the last validated six-task catalog only for that exact SQLite open-error condition, continues applying live task-status updates, and replaces the cache immediately after the next successful read. Other execution failures, malformed JSON, and invalid/unsupported catalog data still fail closed. No task messages are persisted or logged, and this does not invent model/composer/action authority. Verification: TypeScript check; 475 tests passed with 1 expected skip; build; Stream Deck validation; release audit; independent code review; installed bundle checksum match; live Stream Deck-only reload connected to desktop IPC with |
|
Resolved the macOS integrated-terminal restart failure in Root cause: The explicit restart path now:
Regression coverage includes a real detached subprocess surviving its parent terminal, stale-generation/install rejection, concurrency serialization, and persisted outcomes. Fresh verification: 480 tests passed, 1 skipped; TypeScript check, build, Stream Deck validation, and release audit all passed. Independent review found no remaining P1/P2 issues. The updated launcher runtime is installed locally without restarting the current Codex process. One explicit bridge-enabled restart is still required to verify the live Stream Deck recovery on Codex 26.915.31945 (9922). |
|
Resolved the recurring post-reboot/post-update degraded state in 3057ce1. Root causes:
Fixes:
Verification:
|
Summary
This expands Codex Deck into a first-class Stream Deck Plus integration. A new Encoder-only Codex Dial action lets each knob independently configure rotation, press, touch-strip tap, and LCD feedback while preserving all existing keypad behavior.
The default four-knob layout covers:
What changed
Codex Dialmanifest action, encoder layout, icons, and per-action property inspector.ULTRA OFFfail-closed behavior, and compact day/hour/minute usage-reset labels.SWITCHING,UNLISTED,UNAVAILABLE, degraded, and offline states.User impact
Stream Deck Plus owners can use the touch screen and four knobs as live Codex controls instead of mapping the device as keypad-only. The most common workflow—jumping between a few model/reasoning combinations—now takes one detent and updates the LCD from confirmed Codex state.
Existing Stream Deck keypad actions and single-host behavior remain unchanged. Stream Deck Plus support is optional and configured per knob.
Compatibility and safety
Validation
npm cinpm run checknpm test— 435 passed, 1 expected skip, 0 failednpm run validatenpm run audit:release— 3 artifact roots passedgit diff --check origin/main...HEADManual/live verification:
The cross-platform Stream Deck SDK, Windows launcher, and authenticated relay paths have automated coverage. This PR does not claim new physical Stream Deck Plus hardware verification on Windows.