/** * `peaks web open|text|snap|click|shot|metrics` โ€” the S1 command surface. * * Layer rule (tech-doc ยง1.1): this file owns commander wiring, option parsing, * `--json`, `printResult` and `process.exitCode`. It owns ZERO path * construction and ZERO Playwright calls โ€” those live in `src/services/web/*`. * * The envelope is built once, in `runWebOp`, and that is also the single place * `WRAPPED_OPS` is applied โ€” one place, not six. Every page- or daemon-derived * string that leaves this process (payload, diagnostic, warning) is capped and * wrapped there, because this is the boundary the model actually reads. * * The pieces live beside this file: the verb table in `web-verb-specs.ts`, the * op's envelope in `web-op-runner.ts`, its payload shaping in * `web-op-payload.ts`, its refusal texts in `web-op-refusals.ts`, and the * daemon-lifecycle verbs in `web-lifecycle-commands.ts`. */ import type { Command } from 'commander'; import { type ProgramIO } from '../cli-helpers.js'; export declare function registerWebCommands(program: Command, io: ProgramIO): void; export { runWebOp } from './web-op-runner.js';