/** * Claudexor v2's file-only 0600 secret store. Vendor-native subscriptions stay * in the vendor's own login and are never copied here. The v2 control plane * intentionally has no System Keychain code path: a data-root override must be * sufficient to prove that every managed-secret read/write/delete is scoped. */ export declare class SecretStore { resolvedBackend(): "file"; /** Why the last `set` landed in the file store despite a keychain backend. */ lastFallbackReason: string | null; set(name: string, value: string): "file"; get(name: string): string | null; delete(name: string): void; list(): { name: string; backend: "file"; present: true; }[]; private fileStore; private writeFileStore; private fileSet; private fileGet; private fileDelete; } export { MANAGED_SECRET_NAMES, isManagedSecretName, namespacedSecretRefBase, } from "@claudexor/util"; export interface ResolveOptions { /** Test seam: inject a scoped store. Production callers use the default. */ store?: SecretStore; } /** * Resolve a stored secret by name. (The env-var and helper-command indirection * options were retired: no production caller ever passed them — adapters read * their own provider env vars directly, and a vault helper belongs to a * future typed config surface, not a dead parameter.) * * CLAUDEXOR_DISABLE_STORED_SECRETS=1 is the hermetic kill switch, honored HERE * (the single owner) so every adapter's key resolution obeys it uniformly — * tests and isolation envelopes must never read the operator's real store. * Explicit `opts.store` (the test seam) bypasses the switch: an injected * scoped store IS the hermetic fixture. */ export declare function resolveSecret(name: string, opts?: ResolveOptions): string | null; //# sourceMappingURL=index.d.ts.map