import type { ActionDecision, ActionType, DecisionMode, HookEvent, LlmDecision } from './types.js'; /** * Renders a machine signal type as plain-language attribution (notifications * 2.10, Jason 2026-08-13): `EXTERNAL_STARLING_SCANNER` must never reach a * user's card — but the user should still learn WHICH of their scanners acted. * * The EXTERNAL_* token space is unbounded — it is minted from the user's own * scanner id (`EXTERNAL_${id.toUpperCase()}`, external-scanner.ts) — so this * must be a derivation, not a lookup: strip the prefix, de-snake, lowercase, * drop trailing "scanner"/"signals" noise words, and phrase it as * "Signal from your scanner". Internal types come from the closed map * above; an unlisted internal type de-snakes to " signal" so a new * scanner added without a map entry still renders as words, never as a token. */ export declare function friendlySignalAttribution(signalType: string): string; export interface DecisionRequest { prompt?: string; context: Record; model?: string; actionType: ActionType; event: HookEvent; } export interface DecisionStrategy { readonly mode: DecisionMode; decide(request: DecisionRequest): Promise; } export declare class DecisionEngine { private strategies; register(strategy: DecisionStrategy): void; decide(mode: DecisionMode, request: DecisionRequest): Promise; } export declare class LlmDecisionStrategy implements DecisionStrategy { private llmDecision; readonly mode: DecisionMode; constructor(llmDecision: LlmDecision); decide(request: DecisionRequest): Promise; } export declare class RuleDecisionStrategy implements DecisionStrategy { readonly mode: DecisionMode; private warnedMissingReason; private resolveReason; decide(request: DecisionRequest): Promise; } export declare class NoDecisionStrategy implements DecisionStrategy { readonly mode: DecisionMode; decide(request: DecisionRequest): Promise; } //# sourceMappingURL=decision-engine.d.ts.map