import { type MachineEntry } from '../tasks/dispatch-utils.js'; interface DeviceResult { device: string; updated: boolean; restarted: boolean; oldVersion?: string; newVersion?: string; error?: string; } interface ClientUpdateResult { mode: 'dev' | 'release'; oldVersion: string | null; newVersion: string; devices: DeviceResult[]; duration: number; } /** * Remote counterpart of resolveNpmGlobalPrefix: same derivation, done in the * remote shell (the prefix is a property of the remote host, not of this one). * Windows hosts keep the plain command — npm there installs into the roaming * prefix owned by the user, so EACCES is not a failure mode. */ declare function buildRemoteNpmUpdateCommand(reg: MachineEntry): string; interface LocalUpdateDeps { getInstalledVersion: () => string | null; kill: () => Promise; npmUpdate: () => Promise; restart: () => Promise; } declare function updateClientReleaseLocal(device: string, latestVersion: string, deps: LocalUpdateDeps): Promise; declare function checkAndUpdateClients(): Promise; declare function formatUpdateSlackMessage(result: ClientUpdateResult): string; export { checkAndUpdateClients, formatUpdateSlackMessage, updateClientReleaseLocal, buildRemoteNpmUpdateCommand, }; export type { ClientUpdateResult, DeviceResult, LocalUpdateDeps };