refactor: extract command surface and separate CLI presentation
Summary
Extract declarations, request projection, grammar, schemas, and the invoked client port into private @agent-device/command-surface. CLI presentation stays with its root consumers. Command behavior and public option/result types remain unchanged.
Scope: 222 files, predominantly moves and import updates. One package entry names exports explicitly. Facets remain synchronous; formatter tables decorate them by command name. A compiled type test pins structured batch names to daemon-writer keys. Related: #3276.
Published fold descriptions/help are corrected to distinguish lit-panel pose ambiguity, simctl versus runner density normalization, and Android sensor readings versus AVD profile angles. These wording corrections were checked against implementation and unit tests; none was newly verified on a device.
import { prepareDaemonCommandRequest } from '@agent-device/command-surface';
const request = await prepareDaemonCommandRequest('snapshot', {}, host);
Validation
Tested head: 88d30486742deabd148280751bb2ec3370e0751c.
pnpm check:affected --run --head HEADpassed at this exact, unchanged head (run-ZHi5Jj); focused entry tests and typecheck also passed.- Rebased conflicts preserve Apple runner and command-surface entry guards. Merge-tree is clean against current main.
- No suppressions, export ignores, or raised ceilings. Guidance remains within its budget.
- No device run for these declaration/projection and wording changes. CI owns remote integration, coverage, and device lanes.