import type { FacadeSpec } from '../facades/types.js'; import type { ToolSpec } from '../tools/types.js'; export interface DecibelExtensionManifest { /** Facade-style identifier, e.g. "senken". Must not collide with a core facade. */ name: string; /** The extension's own version, independent of the runtime's. */ version: string; /** Runtime wire contract this extension was built against. See protocol.ts. */ protocolVersion: string; /** Extensions are never core — core is what ships in the package. */ tier: 'pro' | 'apps'; } export interface DecibelExtension { manifest: DecibelExtensionManifest; facades: FacadeSpec[]; tools: ToolSpec[]; } export interface RejectedExtension { /** The allowlist entry as written, so the owner can find it in their config. */ entry: string; reason: string; } export interface ExtensionLoadResult { extensions: DecibelExtension[]; facades: FacadeSpec[]; tools: ToolSpec[]; rejected: RejectedExtension[]; } /** * Read the extension allowlist from ~/.decibel/config.yaml. * * Deliberately config-only. Reading a path from the environment would let * anything that can set an env var — a plist, a shell profile, a parent * process — choose code that runs in-process with full access, which is * exactly the property the allowlist exists to provide. */ export declare function readAllowlist(): string[]; /** Path rules, split out so the test suite can exercise them without a filesystem. */ export declare function checkAllowlistEntry(entry: string): { ok: true; path: string; } | { ok: false; reason: string; }; /** * Load every allowlisted extension. * * Never throws. A broken extension is reported in `rejected` and the runtime * boots without it — one bad private module must not take down core. Callers * that care (the daemon's startup log, /health) surface the rejections. * * @param reservedNames Facade names already registered. An extension may not * shadow one; that would let a private module silently replace `sentinel`. */ export declare function loadExtensions(reservedNames?: ReadonlySet): Promise; //# sourceMappingURL=extensions.d.ts.map