Releases: stephenleo/OpenMicro
Releases · stephenleo/OpenMicro
Release list
v1.4.0
Added
- Embeddable GUI logging API.
openmicro/loggingexports the CLI's side-effect-free controller lifecycle, routed-action, and deduplicated agent-state status formatters. Messages redact prompt text and unknown raw key bytes; consumers retain control of output, styling, and repeat/release suppression.
Changed
- The OpenMicro GUI CLI now consumes the same public logging formatters, keeping embedded and standalone status messages identical.
Fixed
- Codex app: touchpad cycling now starts from the most recently active chat. A cold cursor previously assumed the newest-created chat was frontmost, which could trap repeated presses on one session in projects with multiple open chats.
v1.3.0
Added
- Embeddable controller API.
openmicro/controllerexports the CLI's existingHidManagerand normalized controller types without CLI side effects. Its idempotentstart()/stop()lifecycle preserves discovery, verification, profile selection, parsing, deduplication, reconnect polling, and device cleanup.
v1.2.0
Added
- Human-readable action logs for GUI harnesses. Every routed press logs the physical control and its action —
△ → push-to-talk,right stick flick right → thinking depth up,R3 → send ctrl+shift+m— replacing the raw osascript payload dump. Face buttons show PlayStation glyphs (✕ ○ □ △) on DualSense/DS4 and A/B/X/Y on Xbox/GameSir; the session-cycle button shows▭(DualSense touchpad) or⌂(Guide/home).
Changed
- Codex app: dictation is now true hold-to-talk. Hold
△to dictate, release to insert the transcript — replacing the press-once-to-start / press-again-to-stop toggle, whose internal state could desync and leave the chord held.
Fixed
- Codex app: synthetic keystrokes could leave modifiers stuck machine-wide (Ctrl stuck → left click acts as right click, keyboard unusable until reboot). osascript chords now run strictly serialized with a timeout, a failed key-down chord immediately releases every key the harness can hold, and quitting OpenMicro (Ctrl+C/SIGTERM) releases all held keys instead of doing nothing.
v1.1.0
Added
- Codex app: thinking-depth dial. Right-stick flick right/left steps the composer's reasoning effort via the app's user-assignable "Increase/Decrease reasoning effort" shortcuts (one-time setup: assign
⌃⌥=/⌃⌥-in the app's Keyboard shortcuts — assignments are account-synced, so OpenMicro cannot set them at install). Emitted as discrete modifier key-downs; the app's shortcut listener ignores inlineusing {...}chords. Note the app's own Decrease shortcut stops one step short of the lowest effort level. - Codex app: right-stick click (R3) opens the model picker (assign "Open model picker" to
⌃⇧M), so the effort slider is visible while the dial steps it. Newr3default binding emits the CSI-u encoding of Ctrl+Shift+M; terminal harnesses ignore it. Existing config files predate the binding — add"r3": { "type": "keys", "bytes": "\u001b[109;6u" }to Layer 1 to pick it up.
Changed
- Thinking dial defaults to right-stick flicks instead of cw/ccw rotation — rotation proved finicky in live use.
rstick_cw/rstick_ccwgestures remain available for remapping.
Fixed
- DualSense: y-axis was inverted vs the project convention (
dualsense-tsreports up as positive). Rotation gestures ran backward and up/down stick flicks were swapped on DualSense; both now match the documented directions on all controllers.
v1.0.2
Fixed
- Codex app: touchpad now cycles chats within the current project, with wrap-around.
focus_sessionandherdr_spacepreviously never reached GUI harnesses (they were core-only pane/workspace actions), so touchpad and LT did nothing in the app. Touchpad now jumps between the current project's visible chats viacodex://threads/<id>deep links, in stable creation order, wrapping past the end — the app's own Next/Previous Chat shortcuts stop at the list edges. - Codex app: LT now cycles projects. The app has no project-switch shortcut at all; LT jumps to the next project's most recent chat, projects ordered most-recently-used first. Chats and projects are read from the app's own thread catalog (
~/.codex/state_5.sqlite, non-archived, non-subagent — matches the sidebar exactly). Ordering caveats tracked in #59. Requires Node ≥ 23.4 (node:sqlite); older runtimes degrade to a no-op. - Codex app: square now starts a new chat. The app's deep-link parser silently drops a bare
codex://new(it requires aprompt/path/originUrlquery param);new_chatnow usescodex://threads/new, the only form that falls back to a plain new thread.
v1.0.1
Fixed
- Codex app: push-to-talk now actually starts dictation. The app's
Ctrl+Shift+Dbinding is hold-to-dictate, so the previous synthetic press+release started and stopped it in the same instant. Triangle now holds the chord down on the first press and releases it on the second — mic engages while held, transcript inserts on release. - Codex app: dictation no longer cuts off seconds after starting. The pane-oriented voice auto-stop paths (terminal focus loss, session focus follow, prompt-submit tracking drop) fired for GUI harnesses too — and the app keystroke itself steals OS focus from the host terminal on every press. All three are now disabled in GUI mode; the controller toggle alone owns voice state.
v1.0.0
Added
openmicro codex-app: drive the Codex macOS desktop app — the Codex Micro's own companion app — straight from a game controller. Deep links (codex://new?prompt=…) for prompt/new-chat, System Events keystrokes for accept (Enter) and dictation (Ctrl+Shift+D), and LED agent-state via the shared~/.codexlifecycle hooks.- GUI mode launches the app at startup and prints live colored terminal status: controller connect/disconnect, dispatched actions, and agent-state changes.
Harnessinterface: optionalusesPty/executemembers let third-party harnesses target GUI apps instead of pty-wrapped CLIs.
v0.2.2
Fixed
- Wired Xbox One controllers (
045e:02ea, Xbox One S) now work over USB. These pads speak the GIP protocol on the wire, so they fell through to the generic HID driver whose byte layout doesn't match and every button failed. A newparseXboxGipReportparses the GIP input frame (buttons at bytes 4-5, 10-bit triggers at 6-9, int16 sticks at 10-17), verified against a live capture. The Xbox/guide button — its own GIP message type (0x07) — maps totouchpad, matching the other pads' home buttons
Added
- Xbox Wireless Controller over Bluetooth (
045e:0b20) support via a dedicated parser for the standard Xbox BT HID report (report ID 0x01: uint16 sticks centred at 0x8000, 10-bit triggers, rotary hat, buttons at bytes 14-15). Previously the PID was unknown, so the pad fell to the generic driver, which misread the report ID as a held south button - Both Xbox certifications ship as doctor fixtures: wired Xbox One S (
045e-02ea-usb) and Bluetooth Xbox Wireless Controller (045e-0b20-bluetooth), 17/17 controls each, replayed by CI - Doctor now asks for the pad's real make/model (firmware product strings are often generic or spoofed — DS4-mode pads claim to be a DUALSHOCK 4) and records it in the report; CONTROLLERS.md shows it alongside a new "Reports as" column
- CONTROLLERS.md gained a community guide for adding new controllers with an AI coding agent: the capture → decode → implement → certify loop
v0.2.1
Fixed
- DS4-mode home/touchpad button now registers.
parseDs4Reportnever read byte 7, where the PS/home button (bit 0) and touchpad click (bit 1) live, so neither produced events. Third-party pads in DS4 mode (e.g. GameSir Cyclone 2) have no touchpad, so their home button — byte 7 bit 0 — had nowhere to land and failed the doctor'stouchpadcheck. Byte 7's low two bits now map totouchpad, masking the high six bits (a report counter on genuine DS4s, so it can't fake presses). A real DualShock 4's touchpad click works too
Added
- GameSir Cyclone 2 certified over Bluetooth in DS4 mode (all 17 controls pass). It reports as a DualShock 4 (
054c:05c4), so the committed fixture also covers genuine DS4s and CI replays its touchpad capture
v0.2.0
Added
- GameSir-G7 Pro Bluetooth support: a dedicated
gamesirdriver, detected by VID/PID ahead of the generic fallback that misread the pad's reports (byte 0 is the report ID0x07, which decoded as phantom face-button presses). All 17 controls and full axis ranges pass the doctor; the certified fixture ships intest/fixtures/controllers/and CI replays every captured press - The G7 Pro's home button maps to
touchpad(session cycling by default) — the pad's M button is firmware-consumed and never reaches the host openmicro doctor --captureforces raw capture-only mode, recording idle/pressed HID report pairs per control without any parser — the data needed to add a driver for a pad the parsers misread
Fixed
- Doctor's capture-only device search now targets gamepad/joystick HID usages, so it can't grab a mouse or keyboard