/** * The watch registry's routes (DES-TRIGGER-REGISTRY-001 §4.5, TR-W5a). * * Reads, plus one command: * GET /watch?project=&kind=&run=&since=&limit= the feed fold, newest first (+ coverage with run=) * GET /watch/health armed? sources, queue, emit failures, entries * GET /watch/entries the effective entries, thresholds in plain words * POST /watch/:watch_id/dismiss "Seen, not a problem" (a human only) * Settings (`watch.*`) go through the existing `PUT /settings` (routes.ts), behind the same human * predicate as dismiss. * * A daemon whose registry did not arm still answers: health says `armed:false` and why, the feed is * empty and every run's coverage says watching is off. Nothing here can allow, approve or block. */ import type { FastifyInstance } from 'fastify'; import type { Actor } from '../core/types.js'; import type { WatchRegistry, WatchRunFacts } from '../watch/registry.js'; import type { AuditLog } from './audit.js'; /** * The "human" predicate (DES-DECISION-CAPTURE §4.5 step 1, reused by DES-TRIGGER-REGISTRY §4.2): a * human actor at operator trust or above. A worker's MCP bearer resolves to a non-human actor and is * refused. Under `auth=off` every request is the full-trust local human, so this holds only as far * as the bearer refusal does (the residual §7 records). */ export declare function isHumanOperator(actor: Actor): boolean; export declare function registerWatchRoutes(app: FastifyInstance, deps: { registry: () => WatchRegistry | null; audit: AuditLog; /** crew#828: whether a run has ended and how many events it recorded; `null` = unknown run. */ runFacts?: (runId: string) => Promise; }): void; //# sourceMappingURL=watch-routes.d.ts.map