Repository navigation
Conversation
|
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:
|
|
Resolved the post-upgrade Root causes and fixes:
Verification on the patched tree:
The model catalog remains live/dynamic; newly released models were not the cause of this failure. |
|
Patched two further compatibility issues observed with Codex 26.928.31416 on macOS 27.0.1 in commit ec3d075.
Verification: 492 tests passed, 1 Windows-only test skipped, 0 failed. Build, TypeScript check, Stream Deck validation, release audit, and macOS launcher self-test passed. Independent agent review found no blocking issues. The live installed plugin now selects the intended user chats, receives working/unread states, and reports weekly usage available. Current thread-stream protocol remains version 11; no arbitrary protocol-version fallback was added. Remaining live-validation boundary: the current normal Codex launch has no renderer/debug connection. Model presets and native actions remain unavailable until a bridge-enabled reopen. At login Codex started about a minute before its watcher, outside the existing recovery window; the watcher deliberately preserved that established session. Troubleshooting now documents this login ordering and the explicit restart path. The runtime-discovery fix is tested but full model/action recovery has not yet been verified against a reopened live app. This update does not widen the automatic restart window or claim the reboot-ordering limitation is fixed. |
|
Fixed the Model Presets property-inspector dropdown dismissal in commit 519e917. Cause: fresh snapshots change snapshotGeneration and trigger catalog deliveries. The inspector rebuilt all preset rows for every delivery and unchanged settings echo, removing the native model/reasoning select controls while the menu was open. The editor now retains existing controls when the rendered inputs (saved pairs, model catalog, and Ultra preference) are unchanged. Real catalog changes, offline transitions, and user edits still refresh the editor. Rejected duplicate selections explicitly restore the saved values, and reasoning edits refresh labels/Add availability before saving so their echo does not cause another rebuild. Verification: regression reproduced the old detachment and passes with the patch; 38 inspector/dial tests passed; full suite 493 passed, 1 skipped, 0 failed; TypeScript check, build, Stream Deck validation, and release audit passed. Independent agent QA found no unresolved issues. Installed the verified inspector on macOS without restarting Codex or changing profiles/presets. Live native-menu confirmation remains pending because the current Codex model catalog is unavailable; automated coverage verifies select identity across repeated snapshots/settings echoes and real catalog/offline changes. |
|
Fixed the inactive Add Preset button in a53d115. Live diagnosis: the editor was receiving no catalog because full-root React traversal hit its 30,000-node/context safety gate in a large conversation. The visible selector had a valid catalog provider on a 314-ancestor path with about 2,060 contexts. The button correctly refused to invent unsupported model/effort pairs, but the catalog reader unnecessarily depended on unrelated conversation size. Catalog discovery now follows the unique visible selector fiber through its provider ancestors, bounded to 512 fibers and 8,192 contexts, without traversing unrelated child/sibling branches. Legacy root discovery remains for surfaces without a selector fiber. Audited data descriptors, unique-selector checks, strict catalog validation, cycle detection, and fail-closed exhaustion remain enforced. The paired-selector ancestry budget is also bounded at 512 to accommodate the same current UI depth. Regression tests cover oversized conversations, 314-ancestor application, exact-boundary termination versus cycles, exhausted node/context budgets, malformed tails, accessor avoidance, and ambiguous selector fibers. Independent review found a boundary-cycle issue during development; it was reproduced and repaired before shipping. Verification: 496 passed, 1 skipped, 0 failed; TypeScript check, build, Stream Deck validation, release audit, and independent agent QA passed. Installed the compiled plugin and restarted only its process. Codex kept the same PID and running sessions. Native Stream Deck settings now show a connected catalog; clicking Add Preset created an editable row. Removed that temporary QA row to preserve the existing preset list. Live active-model switching was not exercised. |
|
Patched macOS startup recovery in
Verification: 507 tests passed, 1 skipped, 0 failed; 46 focused launcher/watcher tests passed. TypeScript, build, Stream Deck validation, release audit, and built-launcher self-test passed. Independent QA found two important gaps; both were repaired with regression coverage before shipping. Installed the verified watcher locally without restarting Codex. Installed/built runtime hashes match; the first live observation completed 344 ms after watcher startup and correctly preserved the established Codex process. Read-only observation samples took 318–342 ms. Live verification boundary: the current normal-launch Codex process still lacks the renderer bridge, so its Model Presets and Actions require an explicit user-run |
|
Follow-up in 1e72dd4: fix plugin shutdown so SIGTERM/SIGINT stop the controller and exit instead of leaving the Stream Deck SDK socket alive. A subprocess regression reproduced the old behavior (STOP logged, process remained alive) and passes with the fix. Signal-delivery integration tests are explicitly POSIX-only because Windows child.kill force-terminates rather than delivering Node signals. Verification: 510 tests total, 509 passed, one existing skip, zero failures; TypeScript check, package validation, and release audit passed. Focused tests also passed using the installed Stream Deck Node 20.20.0 runtime. Independent agent QA passed. Removed a machine-specific path from earlier startup documentation so the release audit remains clean. Installed the verified plugin build locally. A normal SIGTERM now ends the patched process; its replacement reconnects to the native renderer and reports local=ready. The running Codex process was preserved. The Stream Deck CLI restart command still reported success without replacing an already-running plugin; that separate CLI behavior is not claimed fixed. Model/action data are available in a direct bridge read, but physical LCD recovery still requires confirmation, so this update does not claim the full unavailable-label report resolved. |
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.