import type { AgentId } from '../types.js';
import { type ResourceKind } from './writers/kinds.js';
import type { ResourceWriter } from './writers/types.js';
import type { ResourceDetector } from './detectors/types.js';
import type { RulesSelection } from './writers/rules.js';
export type { ResourceKind } from './writers/kinds.js';
export { kindToCapability, ALL_RESOURCE_KINDS } from './writers/kinds.js';
export type { ResourceWriter, WriteArgs, WriteResult, RemoveArgs, RemoveResult } from './writers/types.js';
export type { ResourceDetector, DetectArgs } from './detectors/types.js';
export type { RulesSelection } from './writers/rules.js';
/** Per-kind selection payload. Most kinds are string[]; rules is special. */
export type SelectionFor<K extends ResourceKind> = K extends 'rules' ? RulesSelection : string[];
export declare const WRITERS: Record<ResourceKind, Partial<Record<AgentId, ResourceWriter<any>>>>;
export declare const DETECTORS: Record<ResourceKind, Partial<Record<AgentId, ResourceDetector>>>;
/**
 * Verify every supported (agent, kind) pair has both a writer and a
 * detector. Deferred from module-import time to the first `getWriter` /
 * `getDetector` call to dodge the agents.ts ↔ versions.ts ↔ registry.ts
 * import cycle (the same one the lazy writer/detector maps work around).
 * Idempotent — runs at most once per process.
 */
export declare function assertRegistryComplete(): void;
/** Return the writer for (kind, agent), or undefined if unsupported. */
export declare function getWriter<K extends ResourceKind>(kind: K, agent: AgentId): ResourceWriter<SelectionFor<K>> | undefined;
/** Return the detector for (kind, agent), or undefined if unsupported. */
export declare function getDetector(kind: ResourceKind, agent: AgentId): ResourceDetector | undefined;
