Peter Steinberger
4b32275970
fix(macos): keep elevation computer control active ( #126674 )
2026-08-20 06:39:06 -07:00
Peter Steinberger
ae55a4090c
refactor(canvas): make the panel a widget presenter ( #126030 )
...
* refactor(canvas): retire legacy host and commands
* refactor(apple): narrow shared Canvas contracts
* refactor(macos): keep Canvas as widget presenter
* refactor(ios): remove Canvas client
* refactor(android): remove Canvas client
* refactor(linux): remove Canvas client
* fix(ci): isolate native locale artifacts
* fix(linux): regenerate companion lockfile
* fix(canvas): refresh native tool display metadata
* test(canvas): align coverage with presenter surface
* test(canvas): remove obsolete asset root seam
* test(canvas): stabilize retirement CI coverage
* refactor(swift): remove orphaned resource wrapper
* test(ios): remove retired canvas layout assertion
* fix(macos): reserve retired canvas command namespace
* refactor(macos): isolate canvas command policy
* fix(canvas): select only eligible macOS panels
* fix(canvas): keep panel selection plugin-owned
2026-08-19 08:21:07 -07:00
Peter Steinberger
c82dfdb43a
fix(macos): stop idle node setup CPU loop ( #124599 )
...
Make validated CLI cache writes idempotent and reuse the startup-scoped node worker launch across route retries, keeping the signed menu-bar app near-zero CPU while idle.\n\nCloses #124592
2026-08-16 06:40:56 -07:00
Peter Steinberger
243f51d314
refactor(macos): name computer-use executors for their scope ( #124586 )
...
The computer.act v1 wire contract is gone, but the naming that survived it
still described a version split instead of the real one: screen-coordinate
execution versus window/element-scoped execution. Both are live rungs of the
same ladder.
- Extract the screen-coordinate half of the 1334-line ComputerActionService
into ComputerScreenActionExecutor (dispatch, typing, scroll, coordinate
mapping, button-hold watchdog, raw CoreGraphics primitives). Moved code is
unchanged apart from threading the queue authority check as a parameter
instead of reaching back into the queue.
- ComputerActionService keeps its name and becomes the coordinator that owns
the execution queue, the permission probe, and the shared error vocabulary.
- Rename ComputerActionServiceV2 to ComputerWindowActionExecutor, isV2Request
to isWindowScopedRequest, isComputerActV2Only to isWindowScopedOnly, and
ComputerActionError.invalidV2Request to .invalidRequest. The emitted
COMPUTER_INVALID_REQUEST: prefix is unchanged.
- cua-computer: v2-actions.ts becomes window-actions.ts, handleV2Act becomes
handleWindowAct, and the stale v1Params local in handleDesktopAct becomes
desktopParams.
- Note at the computer.act idempotency key that its v1 prefix versions the key
composition, not the wire contract.
Behavior-neutral: no logic edits, no new branches, no changed error strings.
2026-08-16 06:17:31 -07:00
Peter Steinberger
70ceb70cdf
fix(macos): settle canceled node worker invokes ( #124151 )
2026-08-15 03:49:32 -07:00
Peter Steinberger
05c64cb39c
fix(macos): keep replacement node worker active after stale exit ( #123969 )
...
* fix(macos): fence stale node worker exit events
* test(macos): synchronize stale worker exit regression
* refactor(macos): unify node worker generation identity
2026-08-14 21:06:57 -07:00
Peter Steinberger
98a8e0d63f
fix(macos): prevent mismatched CUA driver endpoints ( #123845 )
...
* fix(macos): make CUA driver endpoint handoff atomic
* ci: record approved CUA env budget increase
* test: satisfy changed-gate hygiene
* style(macos): use failable endpoint string conversion
* fix(macos): strip retired CUA worker environment
* ci: constrain CUA env budget approval
* test(macos): isolate inherited CUA environment
2026-08-14 16:04:43 -07:00
Peter Steinberger
4a6edc0d27
feat(macos): fulfill computer.act v2 via Peekaboo ( #123801 )
2026-08-14 14:12:25 -07:00
Peter Steinberger
19ace6830b
feat(macos): add embedded CUA computer provider ( #123635 )
...
* feat(macos): embed CUA computer provider
* fix(macos): clarify embedded CUA trust posture
* fix(macos): contain embedded CUA daemon lifecycle
* fix(macos): reap orphaned CUA daemons
* fix(macos): record the spawned CUA daemon pid so reaping can terminate orphans
* chore(macos): refresh native i18n baseline for the computer control provider picker
* style(macos): satisfy swiftlint on the embedded CUA host and connect params
* refactor(gateway): move optional connect params to GatewayConnectOptions
2026-08-14 10:24:08 -07:00
Peter Steinberger
641821f25e
fix(macos): prevent node worker restart after stop ( #123651 )
2026-08-14 05:56:40 -07:00
Peter Steinberger
8e398d9591
fix(macos): prevent app-owned child processes surviving shutdown ( #123538 )
...
* fix(macos): reap app-owned child process groups
macOS-owned SSH, Codex, and node-host descendants no longer survive terminal shutdown. Codex retains EOF-first graceful exit before bounded process-group termination and reaping.
* fix(macos): correct managed cleanup wake binding
* fix(macos): preserve Codex shutdown escalation
Keep the app-owned EOF grace window while allowing abortive requests to interrupt it before process-group TERM and KILL.
2026-08-14 01:09:32 -07:00
Peter Steinberger
8391ac59ae
fix(macos): order parallel lifecycle cleanup ( #123529 )
...
Quick Chat model changes now settle in target order, the remote probe uses one deadline, and node-owned Codex child shutdown is acknowledged and bounded.
Related: #123420
2026-08-14 00:12:50 -07:00
Peter Steinberger
526ae6d944
fix(macos): honor While Using location permission ( #122435 )
2026-08-11 22:12:56 -07:00
Peter Steinberger
0dbdf994b3
feat(macos): isolate named app profiles ( #121136 )
...
* feat(macos): isolate named app profiles
* refactor(macos): isolate profile launch ownership
* fix(macos): avoid overlapping approvals socket access
* fix(macos): declare profile defaults concurrency ownership
* fix(macos): return profiled node launch arguments
* chore(i18n): refresh macOS profile source inventory
* fix(macos): gate profile startup before services
* test(macos): evaluate profile state before assertions
* fix(daemon): skip absent launchd deactivation
* fix(macos): fail closed on profile port conflicts
* chore(i18n): refresh profile conflict inventory
* fix(macos): ignore non-gateway launch agent claims
* test(macos): stabilize profile lifecycle timing
* fix(macos): remove stale dashboard URL
* chore(macos): refresh native source baseline
2026-08-09 14:50:15 -07:00
Peter Steinberger
642b486986
fix(macos): prevent parallel Swift test hangs after coordinator timeouts ( #120869 )
...
Make timeout paths cancel or release every pending test continuation before cleanup, so failures cannot poison the remaining Swift suite. Inject the retry sleeper to preserve invalidation-before-backoff ordering without real-time polling.
2026-08-08 21:17:39 -07:00
Peter Steinberger
d9ff862823
fix(macos): recover node startup after legacy identity recreation ( #120610 )
2026-08-08 08:54:16 -07:00
Peter Steinberger
6176c0a79d
feat(macos): control motorized camera pan, tilt, and zoom ( #120511 )
...
* feat(macos): add native camera PTZ controls
Add physical UVC pan, tilt, and zoom through the signed Mac app, with camera.ptz.control kept behind dangerous-command approval. Verified against real Insta360 Link 2 Pro hardware.
* refactor(agents): split message tool display config
* fix(mac): harden camera PTZ contracts
2026-08-08 08:04:29 -07:00
joshavant
026f4045b7
Revert "fix(protocol): preserve gateway session attribution across node runs"
...
This reverts commit 735f176b01 .
2026-08-07 18:40:17 -05:00
Vincent Koc
735f176b01
fix(protocol): preserve gateway session attribution across node runs
2026-08-07 08:06:01 +08:00
Peter Steinberger
7ae6a950f6
fix(macos): preserve native command ownership and consent ( #118914 )
2026-08-03 12:50:11 -07:00
Peter Steinberger
aae474ab97
fix(macos): stop dashboard windows flashing during reconnects ( #117112 )
...
* fix(macos): stop dashboard windows flashing during reconnects
* fix(macos): refresh native localization inventory
2026-07-31 16:56:35 -07:00
Vincent Koc
b2cba4073c
improve(macos): reuse the Codex App Server client ( #116325 )
...
* perf(macos): reuse Codex app server client
* refactor(macos): split Codex app server client
* fix(macos): enforce Codex frame limits per message
* refactor(macos): remove obsolete Codex wrappers
* test(macos): lock Codex wall-clock deadlines
2026-07-31 10:40:54 +08:00
Vincent Koc
776f564081
improve(macos): reuse Claude session discovery across pages ( #116324 )
...
* perf(macos): reuse Claude session discovery
* fix(macos): scope Claude discovery reuse to pagination
* fix(macos): keep Claude cursors restart-safe
2026-07-31 10:40:10 +08:00
Peter Steinberger
5c6bccff4a
feat(macos): enable Computer Control by default and diagnose stale Accessibility grants ( #115280 )
...
* feat(macos): enable and diagnose computer control
* docs(macos): explain computer control permissions
* chore: refresh macOS i18n and docs indexes
* test: update macOS computer control i18n fixture
2026-07-28 13:00:32 -04:00
Peter Steinberger
4b59f06d27
fix(mac): bound node worker crash retries ( #114974 )
2026-07-28 02:22:27 -04:00
Peter Steinberger
62a6dfb082
fix(macos): direct Gateway TLS pins protect operator traffic ( #112353 )
...
* fix(macos): enforce direct Gateway TLS pins
* fix(macos): preserve existing TLS pin owner keys
* fix(macos): reuse localized TLS error labels
* test(macos): avoid nested Swift Testing require
* test(macos): isolate TLS Keychain tests
* test(macos): isolate TLS integration Keychain
* chore(i18n): update native source inventory
2026-07-22 03:38:10 -07:00
Peter Steinberger
c84921634d
fix(macos): require explicit consent for privacy-sensitive access ( #112321 )
...
* fix(macos): avoid passive Automation prompts
* fix(macos): keep Voice Wake recognition on device
* fix(macos): require consent for activity presence
* chore(apps): refresh native i18n inventory
* fix(macos): preserve presence clears across gateway versions
* fix(macos): prioritize activity privacy opt-out
* chore(apps): refresh native i18n inventory
* fix(macos): scrub legacy presence activity
* fix(macos): migrate permission status caller
* fix(macos): preserve unknown permission state
* fix(macos): refresh privacy change artifacts
* refactor(macos): remove stale presence helper
* fix(deps): patch URI and Jaeger advisories
* test(gateway): adopt pairing-bound node sessions
2026-07-21 15:28:13 -07:00
Papilionidae
3dfb4c9cd7
fix(anthropic): accept "cli" entrypoint in Claude session catalog discovery ( #105162 )
...
* fix(anthropic): accept "cli" entrypoint in Claude session catalog discovery
Claude Code v2.x writes entrypoint: "cli" in its JSONL session files.
Previously only "sdk-cli" was recognized, causing all v2.x sessions to
be silently skipped.
Extract CLI_ENTRYPOINTS set and isCliEntrypoint() helper, then apply
the same fix to both TypeScript catalog and macOS paired-node native
catalog. Add matching regression coverage on both platforms.
Closes #105164
* fix(anthropic): refresh Claude CLI session discovery
Apply the reviewed cli/sdk-cli allowlist, mirrored negative coverage, and fallback-scope documentation to current main.
Co-authored-by: 黄攀0668000858 <huang.pan@xydigit.com >
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-21 07:14:42 -07:00
Peter Steinberger
ed2284c31a
fix(macos): keep Canvas hidden for agent content operations ( #110107 )
...
* fix(macos): keep Canvas hidden for agent content operations
Agent canvas.evalJS, canvas.snapshot, and canvas.a2ui.* commands routed
through CanvasManager.show, which re-presented the panel and called
NSApp.activate(ignoringOtherApps:) on every content update. After a
gateway restart the hosted A2UI page is dead, so the next agent push
always re-opened a panel the user had closed and stole focus.
Content operations now use a non-presenting ensureController/prepare
path; only canvas.present, canvas.navigate, and user actions reveal the
panel. Snapshot is read-only: it requires a visible matching panel and
returns CANVAS_HIDDEN instead of mutating panel state (WebKit cannot
render ordered-out windows).
* chore(i18n): refresh native inventory line offsets
2026-07-17 23:40:35 +01:00
Peter Steinberger
2c1c5b3a97
improve: speed up native session loading from paired Macs ( #110030 )
...
* perf(macos): accelerate native session catalogs
* fix(macos): preserve Codex catalog completeness
* fix(macos): bound Claude catalog work
* fix(macos): type catalog continuation result
* refactor(macos): satisfy session catalog lint
2026-07-17 15:39:40 +01:00
Peter Steinberger
28a3540f32
feat: add native inline widget support ( #109212 )
...
* feat: add native inline widget support
* refactor: simplify plugin surface refresh
* fix: preserve plugin surface refresh API
* fix: reload widgets after WebKit termination
* fix: harden native widget refresh
* fix: bound native widget recovery
* docs: defer native widget release note
* chore: refresh native i18n inventory
* fix: harden native widget delivery
* refactor: simplify native widget API surface
* fix: serialize native widget capability refresh
* fix: harden native widget recovery
* fix: recover native widget capabilities
* style: format widget refresh role selection
* fix: correct widget refresh formatting
* fix: harden cross-platform widget recovery
* fix: bind widget trust and recovery to routes
* chore: refresh native i18n inventory
* chore: regenerate Android gateway protocol
* test: remove unused release workflow read
2026-07-16 19:24:41 -07:00
Peter Steinberger
20f145f9c1
fix(mac): enable terminal actions for paired-node sessions ( #107361 )
...
* fix(mac): enable paired-node terminal sessions
* fix(ci): align node worker bridge checks
2026-07-14 03:22:28 -07:00
Peter Steinberger
7d23570591
fix(mac): keep node admission tunnel-local ( #106481 )
2026-07-13 08:19:53 -07:00
Peter Steinberger
265f79e607
fix(mac): allow five-minute node worker cold starts ( #106380 )
...
* fix(mac): extend node worker startup timeout
* chore: keep release notes in PR
2026-07-13 05:35:09 -07:00
Peter Steinberger
bfdfd35e5d
fix(mac): allow slow node worker startup ( #106281 )
...
* fix(mac): allow slow node worker startup
* chore: leave release notes to release flow
2026-07-13 05:00:48 -07:00
Peter Steinberger
f1076c23d4
fix(ci): isolate macOS node restart notifications
2026-07-13 02:54:10 -04:00
Peter Steinberger
2264816f1d
ci(macos): add enforced periphery dead-code lane and delete the 12 current findings ( #105743 )
...
* refactor(macos): delete dead code flagged by periphery
* ci(macos): add enforced periphery dead-code lane
* fix(ci): scope-label the periphery skip message
* chore(i18n): sync native inventory line coordinates
2026-07-12 16:39:15 -07:00
Peter Steinberger
d287c9b414
refactor(mac): make app node a CLI capability superset ( #105642 )
...
* refactor(mac): reuse CLI node-host runtime
* fix(mac): prefer checkout CLI in debug builds
* chore: leave release notes to release automation
* chore(mac): sync native string inventory
* chore(mac): refresh native locale artifacts
* fix(node): satisfy native and deadcode gates
2026-07-12 13:16:07 -07:00
Peter Steinberger
5b293af917
fix(mac): remove unused presence reporter capture ( #105361 )
2026-07-12 13:25:39 +01:00
Peter Steinberger
c6dc5bc764
fix(canvas): hosted pages fail on macOS with scoped Gateway auth ( #105336 )
...
* fix(canvas): harden hosted Canvas on macOS
Resolve Gateway-hosted Canvas and A2UI targets through refreshed node capabilities, keep bridge and live-reload behavior correct, and restrict native action dispatch to the exact trusted main-frame document.
Preserve scalar evaluation results, secure action IDs, and hidden state-directory watching.
Co-authored-by: GuoJiaming <804436395@qq.com >
Co-authored-by: Lucenx9 <185146821+Lucenx9@users.noreply.github.com >
Co-authored-by: zeng-weihan <ceng.weihan@xydigit.com >
* chore(canvas): defer release note
* chore(canvas): refresh native i18n inventory
* refactor(canvas): isolate hosted surface resolution
---------
Co-authored-by: GuoJiaming <804436395@qq.com >
Co-authored-by: Lucenx9 <185146821+Lucenx9@users.noreply.github.com >
Co-authored-by: zeng-weihan <ceng.weihan@xydigit.com >
2026-07-12 13:02:27 +01:00
Peter Steinberger
251f54baec
fix(apps): remove dead native code
2026-07-12 02:41:17 -07:00
Peter Steinberger
55254c3a0b
feat(nodes): route alerts to the active computer ( #105083 )
...
* feat(nodes): route alerts by active computer
* fix(ci): allowlist node presence mobile coverage
* test(prompts): refresh node presence snapshots
* fix(macos): await presence reporter actor hop
* fix(macos): type presence test delivery state
* docs(nodes): add active presence guide
* docs(nodes): format presence troubleshooting
2026-07-12 10:05:50 +01:00
Peter Steinberger
6038480915
feat(ui): browse Gateway and node folders from one root ( #105114 )
...
* feat(ui): browse Gateway and node folders
* chore: keep changelog release-owned
* chore: refresh native i18n inventory
* refactor(macos): isolate node filesystem commands
2026-07-12 09:07:07 +01:00
Peter Steinberger
96f0983a85
fix(onboarding): skip setup for configured gateways and require inference first ( #102883 )
...
* fix(crestodian): keep onboarding RPCs restart-safe
* fix(profiles): isolate approval state migrations
* fix(crestodian): bypass configured gateway setup
* test(crestodian): type onboarding mocks
* fix(onboarding): require inference before Crestodian
* fix(onboarding): enforce verified inference handoff
* fix(macos): reset setup on gateway endpoint edits
* chore(i18n): refresh native source inventory
* fix(gateway): keep socket on request cancellation
* test(packaging): require workspace templates
* fix(onboarding): bind setup to verified inference
* fix(onboarding): align inference gate contracts
* fix(crestodian): classify concurrent policy rejection
* test(crestodian): expect registry restoration
* fix(onboarding): bind setup to configured gateways
* fix(codex): preserve startup phase deadlines
* test(crestodian): match fail-closed policy ordering
* test(onboarding): assert bound gateway handoff
* fix(codex): bind runtime resolution to spawn cwd
* test(crestodian): assert policy rejection order
* fix(cli): preserve gateway routing across restarts
* fix(macos): fail closed during gateway edits
* test(macos): cover gateway route generation races
* chore: keep release notes out of onboarding PR
* fix(ci): refresh onboarding generated checks
* style(swift): align gateway channel formatting
* fix(ci): refresh plugin SDK surface budgets
* fix(ci): resync native string inventory
* refactor(swift): split gateway channel support
* test(doctor): isolate plugin compatibility registry
* test(macos): isolate gateway onboarding fixtures
* test(macos): assert gateway lease health ordering
* fix(codex): reconcile computer-use startup changes
2026-07-11 10:25:14 -07:00
Peter Steinberger
c3b426f280
feat: add Claude session fleet ( #104528 )
...
* feat: add Claude session fleet
* chore: leave release notes to release automation
* chore: refresh generated catalogs
* fix: satisfy session catalog lint gates
2026-07-11 08:22:59 -07:00
Peter Steinberger
05aecc1d6f
feat: show Codex transcripts in the sidebar ( #104437 )
...
* feat: show Codex transcripts in sidebar
* fix: clear Codex sidebar on Gateway switch
* chore: leave release notes to release workflow
* chore: refresh native i18n inventory
* fix: satisfy macOS Codex node lint
* fix: refresh native localization inventory
* docs: refresh documentation map
* chore: refresh UI locale metadata
2026-07-11 05:39:29 -07:00
Peter Steinberger
0ef9a62eaf
fix(codex): allow slower Mac session catalogs ( #104332 )
2026-07-11 02:05:55 -07:00
Peter Steinberger
e0e67abfa9
fix: cancel expired macOS node approvals ( #104302 )
...
* fix: cancel expired macOS node approvals
* chore: keep node approval fix out of release notes
2026-07-11 01:25:36 -07:00
Peter Steinberger
20fe3f46db
fix: paired Mac Codex sessions finish loading ( #104299 )
...
* fix(codex): allow cold Mac session catalogs
* chore: keep release notes in PR body
2026-07-11 01:14:36 -07:00
Peter Steinberger
f94a7dc183
feat(codex): supervise native Codex sessions ( #104045 )
...
* feat(codex): add native session supervision
* fix(codex): harden supervision integration
* fix(codex): preserve locked harness ownership
* fix(codex): fence native session archive
* fix(codex): revalidate archive binding ownership
* feat(codex): integrate supervision runtime
* feat(sessions): preserve harness-owned execution
* feat(sessions): persist harness ownership invariants
* feat(gateway): enforce harness-owned sessions
* feat(setup): enable detected Codex supervision
* feat(mac): expose supervised Codex sessions
* feat(ui): make Codex sessions actionable
* docs(codex): document session supervision
* test(codex): cover integration ownership
* chore(i18n): refresh supervision inventories
* fix(setup): finalize Codex activation atomically
* test(codex): narrow binding store update
* fix(sessions): preserve legacy model locks
* test(macos): serialize Codex catalog fixtures
* fix(sessions): preserve legacy lock admission
* chore(i18n): reconcile supervision metadata
* test(sessions): mark legacy lock fixture
* fix(macos): drain final Codex catalog frame
* docs: leave supervision note to release
* style(macos): satisfy Codex catalog type length
* chore: record session accessor seam owners
* fix(macos): honor configured Codex supervision
* fix(codex): preserve harness-owned model locks
* fix(codex): satisfy supervision lint gates
* chore(i18n): refresh native supervision inventory
* fix(codex): align supervision validation contracts
* fix(codex): close supervision boundary gaps
* fix(codex): preserve supervision activation contracts
* fix(codex): dispose standalone supervision runtime
* fix(codex): pin supervised source connection
* fix(plugins): bind delegated runs to exact session target
* fix(codex): scope supervised sessions to configured agents
* fix(codex): fingerprint effective supervision home
* fix(codex): normalize supervision plugin policy
* fix(codex): keep supervised bindings stable across upgrades
* fix(codex): guard all supervised binding connections
* fix(codex): preserve catalog filters and pending CAS identity
* fix(codex): preserve supervision identity for diagnostics
* fix(codex): bind uncertain commits to supervision connection
* fix(codex): satisfy supervision type boundaries
* fix(macos): reconcile current main validation
* fix(codex): handle absent runtime config in supervision
* fix(doctor): own local audio acceleration check
* fix(codex): satisfy integration lint gates
* fix(codex): satisfy lifecycle safety guards
2026-07-11 00:12:08 -07:00