import type { DagNode, DagNodeRouting } from "./dag.js";
import type { ProviderAuthorityLevel } from "../contracts/provider-health.js";
export interface NodeCapabilityScopes {
    readonly skills: readonly string[];
    readonly mcpServers: readonly string[];
    readonly tools: readonly string[];
    readonly hooks: readonly string[];
    /**
     * Provider authority for write/mutation work on this node. Defaults to the
     * authority-provider value ("full") so the primary coder/authority lane is
     * never over-blocked. Advisory/opportunistic providers carry lower levels.
     */
    readonly writeAuthority: ProviderAuthorityLevel;
    /** Provider authority for shell/CLI work on this node. Defaults to "full". */
    readonly shellAuthority: ProviderAuthorityLevel;
    /** Provider authority for MCP tool work on this node. Defaults to "full". */
    readonly mcpAuthority: ProviderAuthorityLevel;
}
export interface CapabilityRoutingEntry extends NodeCapabilityScopes {
    readonly nodeId: string;
    readonly name: string;
    readonly role: string;
    readonly provider: string;
    readonly fallbackProvider?: string;
    readonly candidateProviders: readonly string[];
    readonly assignedModel?: string;
    readonly authority?: string;
    readonly routeSource?: string;
    readonly rationale?: string;
    readonly actionAtom?: DagNodeRouting["actionAtom"];
}
export interface CapabilityRoutingIdentity {
    readonly owner: "omk";
    readonly identity: "OMK root orchestrator";
    readonly doctrine: "Models execute. OMK routes, verifies, measures, and controls.";
    readonly goal?: string;
    readonly capabilityAssignment: "goal-scoped";
}
export interface CapabilityRoutingArtifact {
    readonly schemaVersion: 1;
    readonly generatedAt: string;
    readonly nodes: readonly CapabilityRoutingEntry[];
    readonly orchestrator: CapabilityRoutingIdentity;
}
/**
 * Authority levels are derived from the authority-provider doctrine: when a
 * node does not pin an explicit provider authority it inherits the
 * authority-provider level ("full") so the primary coder lane stays unblocked.
 */
export declare const DEFAULT_NODE_AUTHORITY: ProviderAuthorityLevel;
/**
 * Resolve the write/shell/MCP authority levels for a routing entry. Used both
 * by {@link capabilityScopesFromRouting} and by the live tool-authority gate so
 * the gate consumes the same authority that routing assigned.
 */
export declare function resolveNodeToolAuthorities(routing: DagNodeRouting | undefined, fallback?: Partial<NodeCapabilityScopes>): Pick<NodeCapabilityScopes, "writeAuthority" | "shellAuthority" | "mcpAuthority">;
export declare function uniqueCapabilityNames(values: readonly (string | undefined)[]): string[];
export declare function capabilityScopesFromRouting(routing: DagNodeRouting | undefined, fallback?: Partial<NodeCapabilityScopes>): NodeCapabilityScopes;
export declare function mergeCapabilityScopes(...scopes: readonly (Partial<NodeCapabilityScopes> | undefined)[]): NodeCapabilityScopes;
export declare function attachAssignedCapabilities(routing: DagNodeRouting): DagNodeRouting;
export declare function capabilityRoutingEntry(node: DagNode): CapabilityRoutingEntry;
export declare function renderCapabilityRoutingArtifact(nodes: readonly DagNode[], options?: string | {
    readonly generatedAt?: string;
    readonly goal?: string;
}): CapabilityRoutingArtifact;
