import { type VoiceSetupService } from './voice-setup.js'; import { startWakeBootProvisioning, type VoiceProviderRegistry } from '../voice/index.js'; import type { ConfigManager } from '../config/index.js'; import type { ShellPathService } from './shell-paths.js'; export type { VoiceSetupService }; /** * The recovery act this surface names when a boot provision degrades. * * Phrased as something the PLATFORM does. It used to be the literal string * `/voice wake setup`, a command handed to the user for work the daemon * already retries on its own at every start. Naming a chore that the product * performs unprompted is how a self-healing system reads as a broken one. */ export declare const WAKE_RECOVERY_COMMAND = "this surface fetches it automatically when it next starts"; export interface VoiceSetupServicesDeps { readonly configManager: ConfigManager; readonly shellPaths: Pick; readonly voiceProviders: VoiceProviderRegistry; /** Critical-tier admission gate, a provision run allocates archive + model buffers. */ readonly admitExpensiveWork: (label: string) => { allowed: boolean; reason?: string | undefined; }; /** * Opt into boot-time wake-model provisioning and the recovery sweeper. * * Off unless a real entrypoint asks for it, matching how this graph treats the * host power seam: `daemon/cli.ts` and `runtime/bootstrap-core.ts` opt in, the * one-shot CLI commands do not, and a test composing the graph gets neither a * network fetch nor a repeating timer it did not ask for. */ readonly provisionWakeModelsAtBoot?: boolean | undefined; /** Injected in tests: the boot starter, so no sweeper and no fetch are real. */ readonly startBootProvisioning?: typeof startWakeBootProvisioning | undefined; } export interface VoiceSetupServices { readonly voiceSetup: VoiceSetupService; /** * Stop the wake-word recovery sweeper and cancel a pending boot provision. * A no-op when boot provisioning was not opted into. Registered on the * disposal scope (disposal-wiring.ts), an hourly timer nothing stops is a * poller this surface leaked, which is exactly what that scope exists for. */ readonly stopWakeHousekeeping: () => void; } /** Compose the managed-voice single-flight install + no-network status read. */ export declare function wireVoiceSetup(deps: VoiceSetupServicesDeps): VoiceSetupServices; //# sourceMappingURL=voice-setup-services.d.ts.map