feat(features,host,desktop): the desktop asks the service for the account's automations through the host

Merged
DA
4d ago
+1151-2

What

The desktop's plumbing for automations, with no page drawing it yet:

  • @luke/features: HostedAutomationClient (list, create, change, delete, run now, runs) and automation-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: six automations.* 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/acts gains the six act kinds.
  • Desktop main: automation-acts.ts routes 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 including unreached, 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


Open workspace in Conductor


Devin Review


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.