/** * `totem seat add | suspend | remove | list` — the declared seat-lifecycle * verbs (mmnto-ai/totem#2511 slice 2). * * Seat EXISTENCE stays dir-derived (the mmnto-ai/totem#2141 dirs-union * invariant): these verbs do not mint a second registration surface. What they * add is the DECLARED half — an `active | suspended | retired` marker written * by an operator word, which downstream consumers (broadcast denominators, * annotations, the totem-status#127 session projection) read. Session state * (`LIVE/IDLE/FAULTED`) is a different axis and never appears here. * * Two disciplines run through every verb: * - **Emit, never apply.** A seat's birth and retirement touch surfaces this * binary cannot reach honestly — vendor hook files (mmnto-ai/totem#2612 is * the live tracked-file-mutation bug class), `totem-status`'s * `agentHomeMap`, the mmnto-ai/totem-strategy#611-frozen `eclCohortRepos`, * four prose copies of the signoff seat table, the strategy-owned parity * manifest. Every one of them is printed as a checklist line and NONE of * them is written. * - **Nothing is deleted.** `seat remove` writes a `retired` tombstone and * leaves the outbox, processed marks, and journals exactly where they are; * retention policy is mmnto-ai/totem#2518's lane. Lifecycle transitions * also never discharge an obligation — that is an explicit disposition * with provenance (mmnto-ai/totem-status#127). * * All human output goes to STDOUT as one stream. The product of these verbs is * a report an operator acts on and pipes (`totem seat add x > wiring.txt`), so * splitting it across stdout/stderr would hand over a checklist with holes in * it. Failures still travel as `TotemError` to the index.ts error boundary, * which prints them on stderr and sets a non-zero exit. * * The marker schema lives in core (`seat-lifecycle.ts`) and is never redefined * here: this layer composes markers and hands them to `writeSeatLifecycle`. */ interface SeatCommandSeams { /** Test seam — production callers use `process.cwd()`. */ cwdForTest?: string; /** Test seam — production callers use `process.env`. */ envForTest?: NodeJS.ProcessEnv; /** Test seam — pins the marker's `since`. */ nowForTest?: string; } export interface SeatAddOptions extends SeatCommandSeams { /** Transition an existing SUSPENDED seat back to `active`. Nothing else. */ reactivate?: boolean; } export interface SeatSuspendOptions extends SeatCommandSeams { /** The operator's recorded ruling — the §6.6 audit trail when present. */ reason?: string; } export interface SeatRemoveOptions extends SeatCommandSeams { reason?: string; } export interface SeatListOptions extends SeatCommandSeams { json?: boolean; } /** * Register a seat: three coordination subdirs, an `active` marker, and — only * where a `config.json` already exists — the `host_agents` append. Then emit * the birth checklist for everything this binary cannot reach. * * An existing seat is a hard error, not an overwrite: `--reactivate` is the * only way back in, and it moves ONLY `suspended → active`. A `retired` seat * is never resurrected here — retirement was an operator word, so resurrection * must be one too (the Phase-4 gate ruling, OQ1). */ export declare function seatAddCommand(seatId: string, options?: SeatAddOptions): Promise; /** * Declare a seat suspended: it leaves broadcast required-sets and round * denominators, while its directed mail keeps surfacing (the gate ruling, OQ4 * — suspension excludes a seat from the count, it never hides its mail). * * Already-suspended is a no-op success with no rewrite: re-running the verb * must not overwrite the ORIGINAL `since`, which is the audit trail's anchor. */ export declare function seatSuspendCommand(seatId: string, options?: SeatSuspendOptions): Promise; /** * Declare a seat retired. Nothing is deleted — the marker is a durable * tombstone and retention policy is mmnto-ai/totem#2518's lane — and no * obligation is discharged. The residual foreign surfaces are emitted as a * deregistration checklist, never applied. */ export declare function seatRemoveCommand(seatId: string, options?: SeatRemoveOptions): Promise; /** * Read-only accounting: every registered seat (the dirs ARE the roster) with * its declared lifecycle, derived at read time and never cached. Degraded * marker reads appear as warnings BELOW the table — a seat with an unusable * marker still renders as `active`, because fail-open is the read contract. */ export declare function seatListCommand(options?: SeatListOptions): Promise; export {}; //# sourceMappingURL=seat.d.ts.map