You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The current repo uses the private boot path, private display bridge, and private accessibility translation bridge directly. The browser streams frames from that bridge, injects touch and keyboard events through the same native session layer, inspects accessibility through `AccessibilityPlatformTranslation`, and renders device chrome from `cli/XCWChromeRenderer.*`.
80
+
The current repo uses the private boot path, private display bridge, and private accessibility translation bridge directly. The browser streams frames from that bridge, injects touch and keyboard events through the same native session layer, inspects accessibility through `AccessibilityPlatformTranslation`, and renders device chrome from `packages/server/native/XCWChromeRenderer.*`.
81
81
CoreSimulator service contexts resolve the active developer directory from `DEVELOPER_DIR`, then `xcode-select -p`, then `/Applications/Xcode.app/Contents/Developer`. The display bridge prefers direct CoreSimulator screen IOSurface callbacks and activates the SimulatorKit offscreen renderable view only if direct callbacks are unavailable.
82
82
Accessibility recovery may use simulator launchctl UIKit application state plus hit-tested translations to recover candidate foreground pids; the returned tree must still be rooted at tokenized `AXPTranslator` application objects, because `translationApplicationObjectForPid:` can omit the bridge delegate token after private display lifecycle changes. Full-tree snapshots merge those recovered roots with the private frontmost application translation. Shallow snapshots with `maxDepth <= 2` use the tokenized frontmost application translation directly when it is available, and only run the expensive recovery sweep if frontmost lookup fails, so agent-oriented describe loops avoid launchctl and hit-test recovery overhead. Interactive-only snapshots also prune non-actionable native AX leaves during Objective-C serialization before the Rust-side compacting pass; keep this native pruning conservative so selector taps still retain actionable rows plus their ancestors. When multiple candidate application roots are discovered, serialize all of them in preferred order: non-extension app roots first, then largest translated roots, with `.appex`/PlugIns processes de-prioritized so SpringBoard and Safari app roots stay primary while widgets and WebContent roots remain debuggable. Widget renderer extension roots may report local frames; normalize those roots and children against matching SpringBoard widget placeholder frames before returning the snapshot.
83
83
Physical chrome button support uses DeviceKit `chrome.json` input geometry for browser hit targets. Volume, action, mute, Apple Watch digital crown, Watch side button, and Watch left-side button dispatch through `IndigoHIDMessageForHIDArbitrary` with consumer/telephony/vendor HID usage pairs from the device chrome metadata; home, lock, and app-switcher remain on the existing SimulatorKit button paths. Apple Watch Digital Crown rotation dispatches through `IndigoHIDMessageForDigitalCrownEvent` when SimulatorKit exposes it, with `IndigoHIDMessageForScrollEvent(..., target=0x34)` as the fallback. tvOS simulators do not support direct screen touch; browser/API tap maps to Enter, swipe maps to arrow keys, and the native bridge rejects tvOS touch packets before they reach guest `SimulatorHID`. watchOS/tvOS skip dynamic pointer/mouse service warm-up because those guest runtimes abort on unsupported virtual services. Apple TV and Apple Watch simulators are fixed-orientation devices, so client and server rotation paths must not expose or dispatch device rotation for those families.
@@ -101,16 +101,17 @@ npm run build:all
101
101
npm run package:vscode
102
102
```
103
103
104
-
This now builds the Rust server in `server/` and copies the resulting binary to `build/simdeck`.
104
+
This now builds the Rust server in `packages/server/` and copies the resulting binary to `build/simdeck`.
105
105
106
106
Codex worktrees can use the checked-in local environment config at
107
107
`.codex/local-environment.toml`. Its setup runs `npm run codex:setup`, which
108
-
hydrates root/client `node_modules` and `server/target` from the shared cache
109
-
under `~/.cache/simdeck/codex-worktree-cache` or from another SimDeck checkout
110
-
before falling back to `npm ci` for missing package installs and ensuring
111
-
Homebrew `pkgconf`/`x264` are available for native builds. Its Run action
112
-
executes `npm run codex:run`, which builds the CLI and client, saves fresh
113
-
caches, and restarts the workspace-local daemon.
108
+
hydrates root and `packages/client``node_modules` plus
109
+
`packages/server/target` from the shared cache under
110
+
`~/.cache/simdeck/codex-worktree-cache` or from another SimDeck checkout before
111
+
falling back to `npm ci` for missing package installs and ensuring Homebrew
112
+
`pkgconf`/`x264` are available for native builds. Its Run action executes
113
+
`npm run codex:run`, which builds the CLI and client, saves fresh caches, and
114
+
restarts the workspace-local daemon.
114
115
115
116
Run the local daemon:
116
117
@@ -182,9 +183,3 @@ only booted simulator, in that order. For agent navigation, prefer
182
183
- If you expand the private framework bridge, document the Xcode/runtime assumptions here.
183
184
- If a feature depends on a booted simulator, fail with a clear JSON error instead of silently returning an empty asset.
184
185
- Do not reintroduce legacy `/stream.h264` handling. The supported live path is the Rust-managed WebRTC H.264 offer endpoint.
185
-
186
-
## Near-Term Roadmap
187
-
188
-
- Compose the private frame stream and CoreSimulator chrome into a single server-side render path.
0 commit comments