Cupertino 1.14.0
Version 1.14.0 ·
Changed
Screen and Sound arrive switched off. Every surface that brokers an Apple app is on when Cupertino is installed; those two now are not. Their grants are the ones that do not stop at the surface being brokered —
kTCCServiceScreenCaptureis per-process and sees every window on the display, and the microphone hears the room, neither scoped by macOS to the thing Cupertino is asked for. A capability that reaches that far past what it brokers should be switched on by the person who wants it rather than found already on.The default is per surface now,
defaultEnabledinsurfaces.jsonand generated intoSurface.all, rather than the constanttruethatSurfaceSettings.isEnabledand three@AppStorageinitialisers each spelled out on their own. A surface added later declares what it should be in the same manifest entry that declares everything else about it, and the app and the relay cannot drift into disagreeing about which surfaces exist.On a Mac where they are on today, they go off. Neither ever wrote a
surfaceEnabledkey — 1.8.0 and 1.11.0 shipped them on by absence — so an untouched switch now reads the new default. The entries already in a client's configuration stay there, flagged in that client's pane as naming a switched-off surface, until the next Configure takes them out. Switching either surface back on in the surface list restores it and rewrites the entry.
Fixed
Visual Studio Code is actually wired now. 1.13.0's notes announced it and the build did not carry it: the
vscodeentry never reachedClientWiring.swiftbefore that release commit, so the client that had just been taken off the paste-a-command list was on no list at all. It is there now, merged into~/Library/Application Support/Code/User/mcp.json— strict JSON underservers, written by VS Code itself, and not the JSONCsettings.jsonthe two files were conflated as.The website's buttons no longer flash blue before the page finishes loading. The design tokens sat in the last 13% of a 33 KB stylesheet, and Safari paints from a partially parsed sheet at around 250 ms, so on a cold load every colour var resolved invalid and the buttons rendered in the browser's link blue. Tokens are their own file now, imported first.