import { printBridgeFailureDiagnostics } from '../bridge-diagnostics' import { type BridgeTransportOption, createBridgeFromParsed, parseBridgeCliArgs, } from '../ws-bridge' import { formatSemanticTree, isSimSemanticTree } from './inspect/core' import type { SimStateResult } from '../../src/bridge-contract' function isSimStateResult(value: unknown): value is SimStateResult { return ( !!value && typeof value === 'object' && typeof Reflect.get(value, 'capturedAt') === 'number' && (Reflect.get(value, 'tree') === undefined || isSimSemanticTree(Reflect.get(value, 'tree'))) ) } function printHelp(): void { console.log(` rnx state - capture the current app state in one call usage: rnx state [--json] [--sim ] options: --json print the complete structured result, including the screenshot --sim target a specific sim --port

WS bridge port `) } export async function runState( args: string[], opts: { port?: number } & BridgeTransportOption = {}, ): Promise { if (args.includes('--help') || args.includes('-h')) { printHelp() return 0 } const parsed = parseBridgeCliArgs(args, { port: opts.port, stripBooleanFlags: ['--json'], }) if (parsed.positional.length > 0) { console.error(` unexpected state argument: ${parsed.positional[0]}`) return 1 } const bridge = (opts.createBridge ?? createBridgeFromParsed)(parsed) try { const value: unknown = await bridge.send({ type: 'state' }) if (!isSimStateResult(value)) { throw new Error('state bridge returned an invalid result') } if (args.includes('--json')) { console.log(JSON.stringify(value)) return 0 } const route = value.route console.log(` route: ${route?.screen ?? route?.url ?? '(unknown)'}`) if (route?.stack?.length) console.log(` stack: ${route.stack.join(' > ')}`) console.log(` keyboard: ${value.keyboard?.visible ? 'visible' : 'hidden'}`) console.log('') console.log(value.tree ? formatSemanticTree(value.tree) : '') console.log('') if (value.recentErrors?.length) { console.log(` recent errors (${value.recentErrors.length}):`) for (const error of value.recentErrors) { console.log(` [${error.level}] ${error.text}`) } } else { console.log(' recent errors: none') } const screenshotLength = typeof value.screenshot === 'string' ? value.screenshot.length : 0 console.log( screenshotLength > 0 ? ` screenshot: captured (${screenshotLength} characters; use --json to read it)` : ' screenshot: unavailable', ) return 0 } catch (error) { console.error(` state failed: ${error instanceof Error ? error.message : error}`) await printBridgeFailureDiagnostics(bridge) return 1 } finally { bridge.close() } }