export interface DevHandle { /** The `--editor-port` value: where the tabbed Game/Editor shell is served — the URL to open. */ editorPort: number; /** The `--port` value: where vite serves the game itself. */ gamePort: number; /** The `bitmagic dev` process, for a human reading the file. Never used as a liveness check. */ pid: number; /** * The phone URL `--mobile` is serving, when it was asked for. * * Optional, and absent on every run without the flag — an older reader is unaffected either way. * It is recorded because the agent that started `dev` as a background task cannot see the banner * the URL was printed in, and "open the game on your phone" is a thing a creator asks that agent. */ mobileUrl?: string; } export { isProcessAlive } from '../process-alive.js'; /** A `bitmagic dev` currently serving this project, or null. */ export declare function readLiveDevHandle(root: string): DevHandle | null; /** * The editor port, owned here rather than by any one command. * * `dev` names it in its help text and it is what slot 0 of the port registry resolves to * (project/dev-ports.ts). Nothing falls back to it any more: a project that has never run `dev` * has no port to probe, and probing the lane default reached whichever OTHER project happened to * hold slot 0 — `reload` from project B reloading project A's tab. * * A function rather than a constant since the number depends on which release line is running * (port-lane.ts). */ export declare function defaultEditorPort(): number; export declare function devHandlePath(root: string): string; export declare function writeDevHandle(root: string, handle: DevHandle): void; /** Best-effort: a handle we cannot remove is a stale file, never a failed shutdown. */ export declare function removeDevHandle(root: string): void; /** The recorded handle, or null when there is no readable one. */ export declare function readDevHandle(root: string): DevHandle | null;