feat(features,host,desktop): the desktop asks the service for the account's automations through the host
What
The desktop's plumbing for automations, with no page drawing it yet:
@luke/features:HostedAutomationClient(list, create, change, delete, run now, runs) andautomation-view.ts, the window's params and answers. A write's answer is read for its summary alone, so a secret a service answers never reaches the window. A write the service would refuse by shape is refused without traveling. A repository out of reach comes back with why, in the same shape as a coding agent's Start.@luke/gateway: sixautomations.*methods.@luke/host:composeAutomations, gated on the account and on a run that sends network, so behind a closed gate nothing is asked. The host operator gains the six asks, and@luke/host/actsgains the six act kinds.- Desktop main:
automation-acts.tsroutes the six acts from a panel only. The voice and call windows are refused in each kind's own words.
The list takes a plan, a workspace (#2746), or neither. This is step 11a of the automations plan. 11b and 11c, the Automations list and editor pages, build on it.
Compatibility
Additive. No server change. Every answer is read dropping keys a newer service adds.
Tests
packages/features/src/automation-client.test.ts: paths, bearer, the workspace query, a service-answered secret kept from the window, refusals includingunreached, and unsendable writes not traveling.packages/host/src/compose-automations.test.ts: the gate, params passed through, answers whole, and bad params refused before travel.apps/desktop/src/main/ipc/automation-acts.test.ts: panel-only, with refusals in the act's own words.
pnpm check:affected passes.
Mac
CI could not verify the Mac UI: no macOS job runs on a pull request. ./scripts/verify.sh was not run (LUKE-159). This PR draws nothing new.
š¤ Generated with Claude Code
Summary by cubic
Wires the desktop's plumbing for automations through the host and service, with no page drawing them yet. It's additive: no server change, and every answer drops keys a newer service adds.
Adds automation views and params to @luke/features, a HostedAutomationClient for list, create, change, delete, run-now, and runs calls, and six automations.* gateway methods. The host inspects them behind an account gate and a network-enabling run mode, and the desktop routes them to the panel window only; voice and call windows get refusals.
Writes are validated locally before they travel, and the window writes schedules alone so no write mints a webhook secret it could not be told. Write answers are read for their summary alone so a service-answered secret never reaches the window, and a successful delete cancels its empty body rather than read it so nothing waits on a stalled stream. An unreachable repository comes back with its reason in the same shape as a coding agent's Start. The list takes a plan, a workspace, or neither. This is step 11a of the automations plan; 11b and 11c, the Automations list and editor pages, build on it.