adb-ready 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js.map CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/cli.ts", "../src/cli/main.ts", "../src/app/commands.ts", "../src/adb/client.ts", "../src/core/redaction.ts", "../src/platform/process-runner.ts", "../src/adb/parsers.ts", "../src/domain/contracts.ts", "../src/core/event-bus.ts", "../src/core/event-journal.ts", "../src/core/text-lines.ts", "../src/dev/hooks.ts", "../src/dev/project.ts", "../src/platform/executable.ts", "../src/domain/problems.ts", "../src/logs/classifier.ts", "../src/platform/runtime.ts", "../src/ports/model.ts", "../src/session/state-machine.ts", "../src/session/target-acquisition.ts", "../src/session/recovery-policy.ts", "../src/session/watcher.ts", "../src/state/session-store.ts", "../src/target/model.ts", "../src/target/selection.ts", "../src/app/config-commands.ts", "../src/app/session-commands.ts", "../src/ai/context-compiler.ts", "../src/config/loader.ts", "../src/state/target-state.ts", "../src/ui/ascii-scene.ts", "../src/ui/style.ts", "../src/ui/select.ts", "../src/ui/home.ts", "../src/ui/pairing-code.ts", "../src/ui/spinner.ts", "../src/ui/progress-renderer.ts", "../src/ui/result-renderer.ts", "../src/ui/terminal.ts", "../src/cli/arguments.ts"],
3
+ "sources": ["../src/cli.ts", "../src/cli/main.ts", "../src/app/commands.ts", "../src/adb/client.ts", "../src/core/redaction.ts", "../src/platform/process-runner.ts", "../src/adb/parsers.ts", "../src/domain/contracts.ts", "../src/core/event-bus.ts", "../src/core/event-journal.ts", "../src/core/text-lines.ts", "../src/dev/hooks.ts", "../src/dev/project.ts", "../src/platform/executable.ts", "../src/domain/problems.ts", "../src/logs/classifier.ts", "../src/platform/runtime.ts", "../src/ports/model.ts", "../src/session/state-machine.ts", "../src/session/target-acquisition.ts", "../src/session/recovery-policy.ts", "../src/session/watcher.ts", "../src/state/session-store.ts", "../src/target/model.ts", "../src/target/selection.ts", "../src/app/config-commands.ts", "../src/app/session-commands.ts", "../src/ai/context-compiler.ts", "../src/config/loader.ts", "../src/state/target-state.ts", "../src/ui/ascii-scene.ts", "../src/ui/style.ts", "../src/ui/select.ts", "../src/ui/home.ts", "../src/ui/pairing-code.ts", "../src/ui/spinner.ts", "../src/ui/progress-renderer.ts", "../src/ui/result-renderer.ts", "../src/ui/stream-renderer.ts", "../src/ui/terminal.ts", "../src/cli/arguments.ts"],
4
4
  "sourcesContent": [
5
5
  "#!/usr/bin/env node\n\nimport process from \"node:process\";\nimport { processIo, runCli } from \"./cli/main.js\";\n\nconst controller = new AbortController();\nconst abort = () => controller.abort();\nprocess.once(\"SIGINT\", abort);\nprocess.once(\"SIGTERM\", abort);\n\ntry {\n process.exitCode = await runCli(process.argv.slice(2), processIo(), {}, controller.signal);\n} finally {\n process.removeListener(\"SIGINT\", abort);\n process.removeListener(\"SIGTERM\", abort);\n}\n",
6
- "import { randomUUID } from \"node:crypto\";\nimport process from \"node:process\";\nimport manifest from \"../../package.json\" with { type: \"json\" };\nimport type { AdbMdnsService } from \"../adb/parsers.js\";\nimport {\n type CommandDependencies,\n type CommandExecution,\n type DevData,\n type DevicesData,\n type LogsData,\n type PortsData,\n runConnect,\n runDev,\n runDevices,\n runDoctor,\n runLogs,\n runPair,\n runPorts,\n runWirelessDiscovery,\n} from \"../app/commands.js\";\nimport { runConfigReport, runInit } from \"../app/config-commands.js\";\nimport {\n runContextCommand,\n runProblemsCommand,\n runSessionCommand,\n} from \"../app/session-commands.js\";\nimport { loadConfig } from \"../config/loader.js\";\nimport type { ConfigError, ConfigValues } from \"../config/types.js\";\nimport { EventBus } from \"../core/event-bus.js\";\nimport { redactText } from \"../core/redaction.js\";\nimport {\n ExitCode,\n type Problem,\n type ResultEnvelope,\n SCHEMA_VERSION,\n} from \"../domain/contracts.js\";\nimport { ProblemCode } from \"../domain/problems.js\";\nimport { planTargetAcquisition } from \"../session/target-acquisition.js\";\nimport type { SessionStoreOptions } from \"../state/session-store.js\";\nimport {\n type RememberedTarget,\n readTargetState,\n rememberedTarget,\n writeRememberedTarget,\n} from \"../state/target-state.js\";\nimport type { AndroidTarget } from \"../target/model.js\";\nimport { clearInteractiveScreen, showHomeScreen } from \"../ui/home.js\";\nimport { readPairingCode } from \"../ui/pairing-code.js\";\nimport { ProgressRenderer } from \"../ui/progress-renderer.js\";\nimport { NdjsonEventRenderer, renderResult } from \"../ui/result-renderer.js\";\nimport { type SelectInput, selectOne } from \"../ui/select.js\";\nimport type { TextSink } from \"../ui/spinner.js\";\nimport { resolveTerminalCapabilities, type TerminalCapabilities } from \"../ui/terminal.js\";\nimport { type CliOptions, type OutputFormat, parseArguments } from \"./arguments.js\";\n\nexport const VERSION = manifest.version;\n\nexport const HELP = `ADB Ready\n\nMake an Android target ready, then keep the development session working.\n\nUsage:\n adb-ready [command] [options]\n adbr [command] [options]\n\nCommands:\n config ACTION Validate or explain resolved configuration\n connect [HOST:PORT] Connect and verify a wireless Android target\n context [SESSION] Export bounded AI-ready diagnostic context\n dev [OPTIONS] [-- CMD] Prepare one target and run a development session\n doctor Inspect the local ADB environment\n init Create a detected project configuration\n devices List visible Android targets\n logs [OPTIONS] Stream focused logs from one Android target\n pair [HOST:PORT] Pair using Android's six-digit pairing code\n ports DIRECTION ACTION Manage verified TCP forward/reverse mappings\n sessions [ACTION] Inspect saved development sessions\n problems [SESSION] Show problems from a saved session\n help [COMMAND] Show help\n version Show version\n\nOutput:\n --format FORMAT human, plain, json, or ndjson\n --json Alias for --format json\n --quiet Hide successful human output\n --verbose Include diagnostic evidence\n --[no-]color Override color detection\n --[no-]unicode Override Unicode detection\n --[no-]animation Override motion detection\n\nExecution:\n --non-interactive Never prompt or control the terminal\n --timeout DURATION Positive duration such as 500ms, 5s, or 1m\n --adb PATH Use an explicit ADB executable\n --adb-host HOST Use an explicit ADB server host\n --adb-port PORT Use an explicit ADB server port\n --config PATH Use an explicit project configuration file\n --profile NAME Use a named configuration profile\n --select Interactively select a target\n -s, --device SELECTOR Select an exact serial or configured alias\n --transport-id ID Select an exact ADB transport ID\n --last Select the last successfully verified target\n --pairing-code-stdin Read the pairing code from stdin without echoing it\n --dry-run Show mutating operations without changing state\n\nOther:\n -h, --help Show help\n -V, --version Show version\n`;\n\nconst COMMAND_HELP = {\n config: `Usage:\n adb-ready config validate [options]\n adb-ready config explain [options]\n\nValidates all configuration layers or explains every resolved value and its\nwinning source. Use --config PATH and --profile NAME for explicit inspection.\n`,\n connect: `Usage: adb-ready connect [HOST:PORT] [options]\n\nConnects a TLS/legacy wireless endpoint and verifies its stable ADB serial.\nWhen the endpoint is omitted, exactly one mDNS connect service must be visible.\n`,\n context: `Usage: adb-ready context [SESSION] [options]\n\nExports a bounded, redacted Markdown brief for AI-assisted debugging. The\nlatest session is used when no ID is provided.\n\nContext options:\n --budget CHARACTERS Maximum Markdown size (default: 12000, minimum: 1000)\n --since DURATION Keep only the final window, such as 30s or 5m\n --only FILTERS Keep comma-separated problems,recovery,logs,child,state,target,ports\n --format FORMAT markdown (default), json, plain, or ndjson\n`,\n dev: `Usage: adb-ready dev [options] [-- EXECUTABLE ARG...]\n\nSelects one Android target, verifies reverse ports, starts an Expo, React\nNative, native Gradle, or custom command with ANDROID_SERIAL, and correlates\nchild output with targeted logcat. Ctrl-C stops owned processes and removes\nonly mappings created by this session.\n\nDevelopment options:\n --preset NAME expo, react-native, gradle, or custom\n --package-manager PM npm, pnpm, yarn, or bun\n --port PORT Add a reverse TCP port; repeat for more ports\n --[no-]logs Enable or disable targeted logcat\n --[no-]cleanup-ports Keep or remove session-created mappings on exit\n -- EXECUTABLE ARG... Run a direct custom command without a shell\n`,\n doctor: `Usage: adb-ready doctor [options]\n\nRuns read-only host, ADB capability, server, and target diagnostics.\n`,\n init: `Usage: adb-ready init [options]\n\nCreates adb-ready.config.json from detected project signals. Existing files are\nnever replaced unless --force is explicit. Use --dry-run to preview the file.\n`,\n devices: `Usage: adb-ready devices [options]\n\nLists every target visible to ADB. Add --select to open the keyboard picker.\n`,\n logs: `Usage: adb-ready logs [options]\n\nStreams parsed, redacted logcat records from one deterministic target.\n\nLog options:\n --package NAME Resolve and filter the currently running app process\n --pid PID Filter one explicit process ID\n --tag TAG Include a log tag; repeat for more tags\n --exclude-tag TAG Suppress a log tag; repeat for more tags\n --level PRIORITY V, D, I, W, E, F, A, or S (default: I)\n --buffer NAME Read main, system, or crash; repeat for more\n --tail COUNT Start with the most recent record count\n --since TIMESTAMP Start at an Android logcat timestamp\n --dump Read the current buffer and exit instead of following\n --max-records COUNT Bound records retained in the final result\n`,\n pair: `Usage: adb-ready pair [HOST:PORT] [options]\n\nPairs with Android Wireless debugging using a hidden six-digit code prompt.\nFor automation, pipe the code and add --pairing-code-stdin.\n`,\n ports: `Usage:\n adb-ready ports reverse list [options]\n adb-ready ports reverse add DEVICE_PORT [HOST_PORT] [options]\n adb-ready ports reverse remove DEVICE_PORT [options]\n adb-ready ports forward list [options]\n adb-ready ports forward add HOST_PORT [DEVICE_PORT] [options]\n adb-ready ports forward remove HOST_PORT [options]\n\nManages TCP mappings for one deterministic Android target. A missing second\nport means the same port on both sides. Add is idempotent and never overwrites\nan existing mapping. Use --dry-run to inspect the exact ADB plan.\n`,\n problems: `Usage: adb-ready problems [SESSION] [options]\n\nShows structured problems from a saved session. The latest session is used\nwhen no ID is provided.\n`,\n sessions: `Usage:\n adb-ready sessions list [options]\n adb-ready sessions show [SESSION] [options]\n adb-ready sessions events [SESSION] [options]\n\nInspects private, redacted development history. Show and events use the latest\nsession when no ID is provided.\n`,\n} as const;\n\nexport interface CliInput extends SelectInput {\n isTTY?: boolean;\n}\n\nexport interface CliOutput extends TextSink {\n isTTY?: boolean;\n columns?: number;\n}\n\nexport interface CliIo {\n input: CliInput;\n output: CliOutput;\n error: CliOutput;\n cwd: string;\n env: NodeJS.ProcessEnv;\n}\n\nexport interface CliDependencies extends CommandDependencies {\n loadConfig?: typeof loadConfig;\n readTargetState?: typeof readTargetState;\n writeRememberedTarget?: typeof writeRememberedTarget;\n sessionStore?: false | SessionStoreOptions;\n}\n\nfunction inferredFormat(argv: readonly string[]): OutputFormat {\n let format: OutputFormat = \"human\";\n for (let index = 0; index < argv.length; index += 1) {\n const argument = argv[index];\n if (argument === \"--json\") {\n format = \"json\";\n } else if (argument?.startsWith(\"--format=\")) {\n const value = argument.slice(\"--format=\".length);\n if (\n value === \"human\" ||\n value === \"plain\" ||\n value === \"markdown\" ||\n value === \"json\" ||\n value === \"ndjson\"\n ) {\n format = value;\n }\n } else if (argument === \"--format\") {\n const value = argv[index + 1];\n if (\n value === \"human\" ||\n value === \"plain\" ||\n value === \"markdown\" ||\n value === \"json\" ||\n value === \"ndjson\"\n ) {\n format = value;\n }\n index += 1;\n }\n }\n return format;\n}\n\nfunction capabilities(\n options: CliOptions | undefined,\n values: ConfigValues,\n io: CliIo,\n target: \"error\" | \"output\",\n fallbackFormat: OutputFormat,\n): TerminalCapabilities {\n const stream = target === \"error\" ? io.error : io.output;\n return resolveTerminalCapabilities({\n format: options?.format ?? fallbackFormat,\n nonInteractive: options?.nonInteractive === true || values.interactive === false,\n ...(values.color === undefined ? {} : { color: values.color }),\n ...(values.unicode === undefined ? {} : { unicode: values.unicode }),\n ...(values.animation === undefined ? {} : { animation: values.animation }),\n ...(values.interactive === undefined ? {} : { interactive: values.interactive }),\n env: io.env,\n inputIsTTY: io.input.isTTY === true,\n outputIsTTY: stream.isTTY === true,\n ...(stream.columns === undefined ? {} : { columns: stream.columns }),\n });\n}\n\nfunction failureResult(\n command: string,\n problems: Problem[],\n dependencies: CliDependencies,\n): ResultEnvelope<null> {\n const clock = dependencies.clock ?? (() => new Date());\n const now = clock();\n const commandId = (dependencies.idFactory ?? randomUUID)();\n return {\n schemaVersion: SCHEMA_VERSION,\n command,\n commandId,\n ok: false,\n startedAt: now.toISOString(),\n finishedAt: now.toISOString(),\n durationMs: 0,\n data: null,\n problems: problems.map((problem) => ({\n ...problem,\n correlation: { ...problem.correlation, commandId },\n })),\n };\n}\n\nfunction inputProblem(code: string, summary: string, detail: string, commandId = \"cli\"): Problem {\n return {\n code,\n category: \"input.cli\",\n severity: \"error\",\n summary,\n detail,\n retryable: true,\n evidence: [],\n actions: [],\n correlation: { commandId },\n };\n}\n\nfunction configProblems(errors: readonly ConfigError[]): Problem[] {\n return errors.map((error) => ({\n code: error.code,\n category: \"input.configuration\",\n severity: \"error\",\n summary: error.message,\n detail: `Invalid ${error.source} configuration at ${error.path}.`,\n retryable: true,\n evidence: [\n { source: \"configuration\", field: \"path\", value: error.path },\n ...(error.location === undefined\n ? []\n : [\n {\n source: \"configuration\",\n field: \"location\",\n value: redactText(error.location).value,\n } as const,\n ]),\n ],\n actions: [],\n correlation: { commandId: \"configuration\" },\n }));\n}\n\nfunction renderFailure(result: ResultEnvelope<null>, format: OutputFormat, io: CliIo): void {\n renderResult(result, {\n format,\n capabilities: capabilities(undefined, {}, io, \"output\", format),\n sink: format === \"human\" ? io.error : io.output,\n verbose: false,\n });\n}\n\nfunction cliConfig(options: CliOptions): ConfigValues {\n return {\n ...(options.adbPath === undefined ? {} : { adbPath: options.adbPath }),\n ...(options.adbHost === undefined ? {} : { adbHost: options.adbHost }),\n ...(options.adbPort === undefined ? {} : { adbPort: options.adbPort }),\n ...(options.timeoutMs === undefined ? {} : { timeoutMs: options.timeoutMs }),\n ...(options.color === undefined ? {} : { color: options.color }),\n ...(options.unicode === undefined ? {} : { unicode: options.unicode }),\n ...(options.animation === undefined ? {} : { animation: options.animation }),\n ...(options.nonInteractive ? { interactive: false } : {}),\n ...(options.preset === undefined ? {} : { devPreset: options.preset }),\n ...(options.packageManager === undefined ? {} : { packageManager: options.packageManager }),\n ...(options.reversePorts === undefined\n ? {}\n : { devReversePorts: options.reversePorts.map((device) => ({ device: Number(device) })) }),\n ...(options.logs === undefined ? {} : { devLogs: options.logs }),\n ...(options.cleanupPorts === undefined ? {} : { devCleanupPorts: options.cleanupPorts }),\n ...(options.customCommand === undefined ? {} : { devCommand: options.customCommand }),\n };\n}\n\nfunction selectionProblem(\n result: SelectResultKind,\n commandId: string,\n): { problem: Problem; exitCode: ExitCode } {\n if (result === \"interrupt\" || result === \"signal\") {\n return {\n problem: inputProblem(\n ProblemCode.OperationInterrupted,\n \"Target selection was interrupted.\",\n \"Run the command again when you are ready to select a target.\",\n commandId,\n ),\n exitCode: ExitCode.Interrupted,\n };\n }\n if (result === \"unavailable\") {\n return {\n problem: inputProblem(\n ProblemCode.InteractiveSelectionUnavailable,\n \"Interactive target selection is unavailable.\",\n \"Run this command in a capable terminal or omit --select.\",\n commandId,\n ),\n exitCode: ExitCode.InvalidInput,\n };\n }\n return {\n problem: inputProblem(\n ProblemCode.TargetSelectionCancelled,\n \"Target selection was cancelled.\",\n \"No target was selected.\",\n commandId,\n ),\n exitCode: ExitCode.InvalidInput,\n };\n}\n\ntype SelectResultKind = \"escape\" | \"interrupt\" | \"signal\" | \"unavailable\";\n\nasync function runInteractiveSession(\n io: CliIo,\n dependencies: CliDependencies,\n terminal: TerminalCapabilities,\n signal?: AbortSignal,\n): Promise<number> {\n let presentation: \"full\" | \"menu\" = \"full\";\n\n while (true) {\n const home = await showHomeScreen({\n version: VERSION,\n input: io.input,\n sink: io.error,\n capabilities: terminal,\n presentation,\n ...(signal === undefined ? {} : { signal }),\n });\n if (home.kind === \"cancelled\") {\n return ExitCode.Interrupted;\n }\n if (home.kind !== \"action\") {\n return ExitCode.InvalidInput;\n }\n if (home.action === \"exit\") {\n return ExitCode.Success;\n }\n\n clearInteractiveScreen(io.error, terminal);\n await runCliInternal([home.action], io, dependencies, signal);\n if (signal?.aborted === true) {\n return ExitCode.Interrupted;\n }\n presentation = \"menu\";\n }\n}\n\nfunction targetDescription(target: AndroidTarget): string {\n const transports = target.transports.map(({ kind }) => kind).join(\", \");\n return `${target.serial} · ${target.state} · ${transports}`;\n}\n\nfunction discoveredCandidates(service: AdbMdnsService): string[] {\n return [\n ...new Set([\n service.endpoint.serial,\n ...(service.alternateEndpoints ?? []).map(({ serial }) => serial),\n ]),\n ].slice(0, 3);\n}\n\nasync function selectDevice(\n execution: CommandExecution<DevicesData>,\n io: CliIo,\n terminal: TerminalCapabilities,\n remembered?: RememberedTarget,\n signal?: AbortSignal,\n): Promise<CommandExecution<DevicesData>> {\n const data = execution.result.data;\n if (data === null) {\n return execution;\n }\n const selectable = data.targets.filter((target) =>\n target.transports.some(({ stable, state }) => stable && state === \"device\"),\n );\n if (selectable.length === 0) {\n const problem = inputProblem(\n ProblemCode.NoSelectableTarget,\n \"No ready Android target can be selected.\",\n \"Connect or recover a target until ADB reports the device state.\",\n execution.result.commandId,\n );\n return {\n exitCode: ExitCode.Target,\n result: { ...execution.result, ok: false, problems: [...execution.result.problems, problem] },\n };\n }\n\n const selection = await selectOne({\n title: \"Select an Android target\",\n options: data.targets.map((target) => ({\n value: target,\n label: target.name,\n description: targetDescription(target),\n disabled: !target.transports.some(({ stable, state }) => stable && state === \"device\"),\n recommended:\n target.transports.some(({ serial }) => serial === remembered?.serial) ||\n (remembered?.hardwareSerial !== undefined &&\n target.hardwareSerial === remembered.hardwareSerial) ||\n (selectable.length === 1 && target.id === selectable[0]?.id),\n })),\n input: io.input,\n sink: io.error,\n capabilities: terminal,\n ...(signal === undefined ? {} : { signal }),\n });\n\n if (selection.kind === \"selected\") {\n const transport = selection.value.transports.find(\n ({ stable, state }) => stable && state === \"device\",\n );\n if (transport === undefined) {\n return execution;\n }\n return {\n ...execution,\n result: {\n ...execution.result,\n data: {\n ...data,\n selected: { target: selection.value, transport, reason: \"explicit\" },\n },\n },\n };\n }\n\n const failure = selectionProblem(\n selection.kind === \"unavailable\" ? \"unavailable\" : selection.reason,\n execution.result.commandId,\n );\n return {\n exitCode: failure.exitCode,\n result: {\n ...execution.result,\n ok: false,\n problems: [...execution.result.problems, failure.problem],\n },\n };\n}\n\nasync function runCliInternal(\n argv: readonly string[],\n io: CliIo,\n dependencies: CliDependencies = {},\n signal?: AbortSignal,\n): Promise<number> {\n const fallbackFormat = inferredFormat(argv);\n let effectiveArgv = argv;\n if (argv.length === 0) {\n const homeCapabilities = capabilities(undefined, {}, io, \"error\", \"human\");\n if (homeCapabilities.interactive) {\n return await runInteractiveSession(io, dependencies, homeCapabilities, signal);\n } else {\n effectiveArgv = [\"help\"];\n }\n }\n\n const parsed = parseArguments(effectiveArgv);\n if (!parsed.ok) {\n const failure = failureResult(\n \"cli\",\n [inputProblem(parsed.code, parsed.message, \"Run adb-ready --help for usage.\")],\n dependencies,\n );\n renderFailure(failure, fallbackFormat, io);\n return ExitCode.InvalidInput;\n }\n\n const options = parsed.options;\n if (options.command === \"help\") {\n io.output.write(options.helpTarget === undefined ? HELP : COMMAND_HELP[options.helpTarget]);\n return ExitCode.Success;\n }\n if (options.command === \"version\") {\n io.output.write(`${VERSION}\\n`);\n return ExitCode.Success;\n }\n if (options.command === \"init\") {\n const execution = await runInit(\n {\n cwd: io.cwd,\n ...(options.preset === undefined ? {} : { preset: options.preset }),\n ...(options.packageManager === undefined ? {} : { packageManager: options.packageManager }),\n ...(options.reversePorts === undefined\n ? {}\n : { reversePorts: options.reversePorts.map(Number) }),\n ...(options.logs === undefined ? {} : { logs: options.logs }),\n ...(options.cleanupPorts === undefined ? {} : { cleanupPorts: options.cleanupPorts }),\n ...(options.force === undefined ? {} : { force: options.force }),\n ...(options.dryRun ? { dryRun: true } : {}),\n },\n dependencies,\n );\n renderResult(execution.result, {\n format: options.format,\n capabilities: capabilities(options, cliConfig(options), io, \"output\", options.format),\n sink: options.format === \"human\" ? io.error : io.output,\n verbose: options.verbose,\n });\n return execution.exitCode;\n }\n if (\n options.command === \"context\" ||\n options.command === \"sessions\" ||\n options.command === \"problems\"\n ) {\n const storeOptions =\n dependencies.sessionStore === false\n ? { env: io.env }\n : (dependencies.sessionStore ?? { env: io.env });\n const execution =\n options.command === \"context\"\n ? await runContextCommand(\n options.sessionId,\n options.contextBudget,\n storeOptions,\n dependencies,\n {\n ...(options.contextSinceMs === undefined ? {} : { sinceMs: options.contextSinceMs }),\n ...(options.contextOnly === undefined ? {} : { only: options.contextOnly }),\n },\n )\n : options.command === \"sessions\"\n ? await runSessionCommand(\n options.sessionAction ?? \"list\",\n options.sessionId,\n storeOptions,\n dependencies,\n )\n : await runProblemsCommand(options.sessionId, storeOptions, dependencies);\n renderResult(execution.result, {\n format: options.format,\n capabilities: capabilities(options, cliConfig(options), io, \"output\", options.format),\n sink: options.format === \"human\" ? io.error : io.output,\n verbose: options.verbose,\n });\n return execution.exitCode;\n }\n\n const loaded = await (dependencies.loadConfig ?? loadConfig)({\n cwd: io.cwd,\n env: io.env,\n ...(options.configPath === undefined ? {} : { projectConfigPath: options.configPath }),\n explicitProjectConfig: options.configPath !== undefined,\n ...(options.profileName === undefined ? {} : { profileName: options.profileName }),\n cli: cliConfig(options),\n });\n if (!loaded.ok) {\n const failure = failureResult(options.command, configProblems(loaded.errors), dependencies);\n renderFailure(failure, options.format, io);\n return ExitCode.InvalidInput;\n }\n\n if (options.command === \"config\") {\n const execution = runConfigReport(\n options.configAction ?? \"validate\",\n loaded.config,\n dependencies,\n );\n renderResult(execution.result, {\n format: options.format,\n capabilities: capabilities(options, loaded.config.values, io, \"output\", options.format),\n sink: options.format === \"human\" ? io.error : io.output,\n verbose: options.verbose,\n });\n return execution.exitCode;\n }\n\n const values = loaded.config.values;\n const errorCapabilities = capabilities(options, values, io, \"error\", options.format);\n const outputCapabilities = capabilities(options, values, io, \"output\", options.format);\n let lastTarget: RememberedTarget | undefined;\n let stateWarning: Problem | undefined;\n if (\n (options.command === \"dev\" ||\n options.command === \"devices\" ||\n options.command === \"logs\" ||\n options.command === \"ports\") &&\n (options.command === \"dev\" ||\n options.command === \"logs\" ||\n options.select ||\n options.remembered)\n ) {\n const state = await (dependencies.readTargetState ?? readTargetState)({\n env: io.env,\n ...(values.adbHost === undefined ? {} : { adbHost: values.adbHost }),\n ...(values.adbPort === undefined ? {} : { adbPort: values.adbPort }),\n });\n if (!state.ok) {\n const problem: Problem = {\n code: state.code,\n category: options.remembered ? \"environment.state\" : \"state.persistence\",\n severity: options.remembered ? \"error\" : \"warning\",\n summary: state.message,\n detail: options.remembered\n ? \"Fix or remove the per-user state file, then retry.\"\n : \"Selection can continue, but no remembered recommendation is available.\",\n retryable: true,\n evidence: [{ source: \"state\", field: \"path\", value: redactText(state.path).value }],\n actions: [],\n correlation: { commandId: \"state\" },\n };\n if (options.remembered) {\n const failure = failureResult(options.command, [problem], dependencies);\n renderFailure(failure, options.format, io);\n return ExitCode.Environment;\n }\n stateWarning = problem;\n }\n if (state.ok) {\n lastTarget = rememberedTarget(state.document, {\n ...(values.adbHost === undefined ? {} : { adbHost: values.adbHost }),\n ...(values.adbPort === undefined ? {} : { adbPort: values.adbPort }),\n });\n }\n }\n const bus = dependencies.bus ?? new EventBus(dependencies.clock);\n const commandDependencies = { ...dependencies, bus };\n const config: import(\"../app/commands.js\").CommandConfig = {\n ...(values.adbPath === undefined ? {} : { adbPath: values.adbPath }),\n ...(values.adbHost === undefined ? {} : { adbHost: values.adbHost }),\n ...(values.adbPort === undefined ? {} : { adbPort: values.adbPort }),\n timeoutMs: values.timeoutMs,\n ...(options.device === undefined ? {} : { targetSelector: options.device }),\n ...(options.transportId === undefined ? {} : { targetTransportId: options.transportId }),\n ...(values.targetAliases === undefined ? {} : { targetAliases: values.targetAliases }),\n ...(lastTarget === undefined ? {} : { rememberedSerial: lastTarget.serial }),\n ...(lastTarget?.hardwareSerial === undefined\n ? {}\n : { rememberedHardwareSerial: lastTarget.hardwareSerial }),\n ...(options.remembered ? { rememberedOnly: true } : {}),\n ...(options.dryRun ? { dryRun: true } : {}),\n };\n if (\n (options.command === \"ports\" && options.select) ||\n options.command === \"dev\" ||\n options.command === \"logs\"\n ) {\n let inventory = await runDevices(config, commandDependencies, signal);\n let selectable =\n inventory.result.data?.targets.filter((target) =>\n target.transports.some(({ stable, state }) => stable && state === \"device\"),\n ) ?? [];\n if (options.command === \"dev\" && selectable.length === 0 && !options.dryRun) {\n const acquisition = planTargetAcquisition({\n ...(config.targetSelector === undefined ? {} : { selector: config.targetSelector }),\n ...(values.targetAliases === undefined ? {} : { aliases: values.targetAliases }),\n ...(lastTarget === undefined ? {} : { remembered: lastTarget }),\n services: inventory.result.data?.discovery.mdns.services ?? [],\n });\n if (acquisition.kind === \"connect\") {\n const connected = await runConnect(\n acquisition.endpoint,\n acquisition.discovered\n ? {\n ...config,\n endpointWasDiscovered: true,\n discoveredEndpointCandidates: acquisition.candidates,\n }\n : config,\n commandDependencies,\n signal,\n );\n const connectedData = connected.result.data;\n if (!connected.result.ok || connectedData === null || !(\"serial\" in connectedData)) {\n renderResult(\n { ...connected.result, command: \"dev\" },\n {\n format: options.format,\n capabilities: errorCapabilities,\n sink: options.format === \"human\" ? io.error : io.output,\n verbose: options.verbose,\n },\n );\n return connected.exitCode;\n }\n config.targetSelector = connectedData.serial;\n delete config.targetTransportId;\n inventory = await runDevices(config, commandDependencies, signal);\n selectable =\n inventory.result.data?.targets.filter((target) =>\n target.transports.some(({ stable, state }) => stable && state === \"device\"),\n ) ?? [];\n }\n }\n const shouldPrompt =\n options.select ||\n ((options.command === \"dev\" || options.command === \"logs\") &&\n errorCapabilities.interactive &&\n inventory.result.data?.selected === undefined &&\n selectable.length !== 1);\n const selected = shouldPrompt\n ? await selectDevice(inventory, io, errorCapabilities, lastTarget, signal)\n : inventory;\n if (!selected.result.ok || selected.result.data?.selected === undefined) {\n if (shouldPrompt) {\n renderResult(\n { ...selected.result, command: options.command },\n {\n format: \"human\",\n capabilities: errorCapabilities,\n sink: io.error,\n verbose: options.verbose,\n },\n );\n return selected.exitCode;\n }\n } else {\n const transport = selected.result.data.selected.transport;\n if (transport.transportId === undefined) {\n config.targetSelector = transport.serial;\n } else {\n config.targetTransportId = transport.transportId;\n }\n }\n }\n let endpoint = options.endpoint;\n let endpointWasDiscovered = false;\n let discoveredEndpointCandidates: string[] | undefined;\n if (\n endpoint === undefined &&\n errorCapabilities.interactive &&\n (options.command === \"connect\" || options.command === \"pair\")\n ) {\n const discoveryProgress = options.quiet\n ? undefined\n : new ProgressRenderer({\n bus,\n sink: io.error,\n capabilities: errorCapabilities,\n verbose: options.verbose,\n });\n let discovery: Awaited<ReturnType<typeof runWirelessDiscovery>>;\n try {\n discovery = await runWirelessDiscovery(\n options.command === \"pair\" ? \"pairing\" : \"connect\",\n config,\n commandDependencies,\n signal,\n );\n } finally {\n discoveryProgress?.dispose();\n }\n if (!discovery.result.ok || discovery.result.data === null) {\n renderResult(\n { ...discovery.result, command: options.command },\n {\n format: \"human\",\n capabilities: errorCapabilities,\n sink: io.error,\n verbose: options.verbose,\n },\n );\n return discovery.exitCode;\n }\n const services = discovery.result.data.services;\n if (services.length === 1) {\n const service = services[0];\n endpoint = service?.endpoint.serial;\n endpointWasDiscovered = service !== undefined;\n discoveredEndpointCandidates =\n service === undefined ? undefined : discoveredCandidates(service);\n } else {\n const chosen = await selectOne({\n title:\n options.command === \"pair\" ? \"Choose a pairing endpoint\" : \"Choose a wireless target\",\n options: services.map((service) => {\n const identity = service.givenName ?? service.deviceModel;\n return {\n value: service,\n label: identity ?? service.endpoint.serial,\n description:\n identity === undefined\n ? `${service.instance} · ${service.rawServiceType}`\n : `${service.endpoint.serial} · ${service.rawServiceType}`,\n };\n }),\n input: io.input,\n sink: io.error,\n capabilities: errorCapabilities,\n ...(signal === undefined ? {} : { signal }),\n });\n if (chosen.kind !== \"selected\") {\n const failed = selectionProblem(\n chosen.kind === \"unavailable\" ? \"unavailable\" : chosen.reason,\n discovery.result.commandId,\n );\n renderResult(\n {\n ...discovery.result,\n command: options.command,\n ok: false,\n problems: [...discovery.result.problems, failed.problem],\n },\n {\n format: \"human\",\n capabilities: errorCapabilities,\n sink: io.error,\n verbose: options.verbose,\n },\n );\n return failed.exitCode;\n }\n endpoint = chosen.value.endpoint.serial;\n endpointWasDiscovered = true;\n discoveredEndpointCandidates = discoveredCandidates(chosen.value);\n }\n }\n let pairingCode: string | undefined;\n if (options.command === \"pair\" && !options.dryRun) {\n if (!errorCapabilities.interactive && !options.pairingCodeStdin) {\n const failure = failureResult(\n \"pair\",\n [\n inputProblem(\n ProblemCode.InvalidPairingCode,\n \"A pairing code source is required in non-interactive mode.\",\n \"Pipe the six-digit code to stdin and add --pairing-code-stdin.\",\n ),\n ],\n dependencies,\n );\n renderFailure(failure, options.format, io);\n return ExitCode.InvalidInput;\n }\n const input = await readPairingCode({\n input: io.input,\n sink: io.error,\n capabilities: errorCapabilities,\n fromStdin: options.pairingCodeStdin,\n ...(signal === undefined ? {} : { signal }),\n });\n if (input.kind !== \"submitted\") {\n const interrupted = input.kind === \"cancelled\" && input.reason !== \"eof\";\n const failure = failureResult(\n \"pair\",\n [\n inputProblem(\n interrupted ? ProblemCode.OperationInterrupted : ProblemCode.InvalidPairingCode,\n interrupted ? \"Pairing code entry was cancelled.\" : \"No pairing code was received.\",\n \"Open Android's pairing-code screen and try again.\",\n ),\n ],\n dependencies,\n );\n renderFailure(failure, options.format, io);\n return interrupted ? ExitCode.Interrupted : ExitCode.InvalidInput;\n }\n pairingCode = input.value;\n }\n const progress =\n options.format === \"human\" && !options.quiet && options.command !== \"logs\"\n ? new ProgressRenderer({\n bus,\n sink: io.error,\n capabilities: errorCapabilities,\n verbose: options.verbose,\n })\n : undefined;\n const events = options.format === \"ndjson\" ? new NdjsonEventRenderer(bus, io.output) : undefined;\n\n let execution:\n | CommandExecution<DevicesData>\n | Awaited<ReturnType<typeof runConnect>>\n | Awaited<ReturnType<typeof runDev>>\n | Awaited<ReturnType<typeof runDoctor>>\n | CommandExecution<LogsData>\n | Awaited<ReturnType<typeof runPair>>\n | Awaited<ReturnType<typeof runPorts>>;\n try {\n if (options.command === \"doctor\") {\n execution = await runDoctor(config, commandDependencies, signal);\n } else if (options.command === \"logs\") {\n execution = await runLogs(\n {\n ...(options.logPackage === undefined ? {} : { packageName: options.logPackage }),\n ...(options.logPid === undefined ? {} : { pid: options.logPid }),\n ...(options.logTags === undefined ? {} : { tags: options.logTags }),\n ...(options.logExcludeTags === undefined ? {} : { excludeTags: options.logExcludeTags }),\n ...(options.logPriority === undefined ? {} : { minimumPriority: options.logPriority }),\n ...(options.logBuffers === undefined ? {} : { buffers: options.logBuffers }),\n ...(options.logSince === undefined ? {} : { since: options.logSince }),\n ...(options.logTail === undefined ? {} : { tail: options.logTail }),\n ...(options.logDump === undefined ? {} : { dump: options.logDump }),\n ...(options.logMaxRecords === undefined ? {} : { maxRecords: options.logMaxRecords }),\n ...(options.format === \"human\" && !options.quiet\n ? { onLine: (line: string) => io.error.write(`${line}\\n`) }\n : {}),\n },\n config,\n commandDependencies,\n signal,\n );\n } else if (options.command === \"dev\") {\n execution = await runDev(\n {\n cwd: io.cwd,\n ...(values.devPreset === undefined ? {} : { preset: values.devPreset }),\n ...(values.packageManager === undefined ? {} : { packageManager: values.packageManager }),\n ...(values.devCommand === undefined ? {} : { command: values.devCommand }),\n ...(values.devReversePorts === undefined ? {} : { reversePorts: values.devReversePorts }),\n ...(values.devLogs === undefined ? {} : { logs: values.devLogs }),\n ...(values.devCleanupPorts === undefined ? {} : { cleanupPorts: values.devCleanupPorts }),\n ...(values.devWatch === undefined ? {} : { watch: values.devWatch }),\n recovery: {\n ...(values.recoveryMaxAttempts === undefined\n ? {}\n : { maxAttempts: values.recoveryMaxAttempts }),\n ...(values.recoveryInitialDelayMs === undefined\n ? {}\n : { initialDelayMs: values.recoveryInitialDelayMs }),\n ...(values.recoveryMaxDelayMs === undefined\n ? {}\n : { maxDelayMs: values.recoveryMaxDelayMs }),\n ...(values.recoveryTotalTimeoutMs === undefined\n ? {}\n : { totalTimeoutMs: values.recoveryTotalTimeoutMs }),\n },\n ...(values.devHooks === undefined ? {} : { hooks: values.devHooks }),\n journal: {\n ...(values.journalMaxEntries === undefined\n ? {}\n : { maxEntries: values.journalMaxEntries }),\n ...(values.journalMaxBytes === undefined ? {} : { maxBytes: values.journalMaxBytes }),\n ...(values.journalSources === undefined ? {} : { sources: values.journalSources }),\n ...(values.journalMinimumSeverity === undefined\n ? {}\n : { minimumSeverity: values.journalMinimumSeverity }),\n ...(values.journalRedactEnvironment === undefined\n ? {}\n : {\n redaction: {\n additionalLiterals: values.journalRedactEnvironment.flatMap((name) => {\n const value = io.env[name];\n return value === undefined || value === \"\" ? [] : [value];\n }),\n },\n }),\n },\n childStdin: errorCapabilities.interactive ? \"inherit\" : \"ignore\",\n sessionStore:\n values.sessionPersist === false || dependencies.sessionStore === false\n ? false\n : (dependencies.sessionStore ?? {\n env: io.env,\n ...(values.sessionMaxSessions === undefined\n ? {}\n : { maxSessions: values.sessionMaxSessions }),\n ...(values.sessionMaxAgeDays === undefined\n ? {}\n : { maxAgeDays: values.sessionMaxAgeDays }),\n ...(values.sessionMaxBytes === undefined\n ? {}\n : { maxBytes: values.sessionMaxBytes }),\n }),\n ...(options.format === \"human\" && !options.quiet\n ? {\n onChildLine: (stream: \"stderr\" | \"stdout\", line: string) => {\n io.error.write(`${stream === \"stderr\" ? \"│\" : \" \"} ${line}\\n`);\n },\n }\n : {}),\n },\n config,\n commandDependencies,\n signal,\n );\n } else if (options.command === \"devices\") {\n execution = await runDevices(config, commandDependencies, signal);\n } else if (options.command === \"connect\") {\n execution = await runConnect(\n endpoint,\n endpointWasDiscovered\n ? {\n ...config,\n endpointWasDiscovered: true,\n ...(discoveredEndpointCandidates === undefined\n ? {}\n : { discoveredEndpointCandidates }),\n }\n : config,\n commandDependencies,\n signal,\n );\n } else if (options.command === \"pair\") {\n execution = await runPair(\n endpoint,\n pairingCode ?? \"\",\n endpointWasDiscovered\n ? {\n ...config,\n endpointWasDiscovered: true,\n ...(discoveredEndpointCandidates === undefined\n ? {}\n : { discoveredEndpointCandidates }),\n }\n : config,\n commandDependencies,\n signal,\n );\n } else {\n const direction = options.portDirection;\n const action = options.portAction;\n if (direction === undefined || action === undefined) {\n throw new Error(\"Validated ports command is missing its direction or action.\");\n }\n execution = await runPorts(\n {\n direction,\n action,\n ...(direction === \"reverse\"\n ? {\n ...(options.primaryPort === undefined ? {} : { devicePort: options.primaryPort }),\n ...(options.secondaryPort === undefined ? {} : { hostPort: options.secondaryPort }),\n }\n : {\n ...(options.primaryPort === undefined ? {} : { hostPort: options.primaryPort }),\n ...(options.secondaryPort === undefined\n ? {}\n : { devicePort: options.secondaryPort }),\n }),\n },\n config,\n commandDependencies,\n signal,\n );\n }\n } finally {\n progress?.dispose();\n events?.dispose();\n }\n\n if (options.command === \"devices\" && options.select) {\n execution = await selectDevice(\n execution as CommandExecution<DevicesData>,\n io,\n errorCapabilities,\n lastTarget,\n signal,\n );\n }\n if (stateWarning !== undefined) {\n execution.result.problems.push({\n ...stateWarning,\n correlation: { commandId: execution.result.commandId },\n });\n }\n\n let selectedTarget:\n | {\n serial: string;\n hardwareSerial?: string;\n }\n | undefined;\n if (execution.result.ok && execution.result.data !== null) {\n if (options.command === \"connect\") {\n const data = execution.result.data as Awaited<\n ReturnType<typeof runConnect>\n >[\"result\"][\"data\"];\n if (data !== null && \"serial\" in data) {\n selectedTarget = {\n serial: data.serial,\n ...(data.hardwareSerial === undefined ? {} : { hardwareSerial: data.hardwareSerial }),\n };\n }\n } else if (options.command === \"dev\") {\n const data = execution.result.data as DevData | null;\n if (data !== null) {\n selectedTarget = {\n serial: data.selected.transport.serial,\n ...(data.selected.target.hardwareSerial === undefined\n ? {}\n : { hardwareSerial: data.selected.target.hardwareSerial }),\n };\n }\n } else if (options.command === \"logs\") {\n const data = execution.result.data as LogsData | null;\n if (data !== null) {\n selectedTarget = {\n serial: data.selected.transport.serial,\n ...(data.selected.target.hardwareSerial === undefined\n ? {}\n : { hardwareSerial: data.selected.target.hardwareSerial }),\n };\n }\n } else if (options.command === \"devices\") {\n const data = execution.result.data as DevicesData;\n if (data.selected !== undefined) {\n selectedTarget = {\n serial: data.selected.transport.serial,\n ...(data.selected.target.hardwareSerial === undefined\n ? {}\n : { hardwareSerial: data.selected.target.hardwareSerial }),\n };\n }\n } else if (options.command === \"ports\") {\n const data = execution.result.data as PortsData | null;\n if (data !== null) {\n selectedTarget = {\n serial: data.selected.transport.serial,\n ...(data.selected.target.hardwareSerial === undefined\n ? {}\n : { hardwareSerial: data.selected.target.hardwareSerial }),\n };\n }\n }\n }\n if (selectedTarget !== undefined) {\n const stored = await (dependencies.writeRememberedTarget ?? writeRememberedTarget)(\n {\n ...selectedTarget,\n updatedAt: (dependencies.clock ?? (() => new Date()))().toISOString(),\n },\n {\n env: io.env,\n ...(values.adbHost === undefined ? {} : { adbHost: values.adbHost }),\n ...(values.adbPort === undefined ? {} : { adbPort: values.adbPort }),\n },\n );\n if (!stored.ok) {\n execution.result.problems.push({\n code: stored.code,\n category: \"state.persistence\",\n severity: \"warning\",\n summary: stored.message,\n detail: \"The connection is ready, but ADB Ready could not remember it for --last.\",\n retryable: true,\n evidence: [{ source: \"state\", field: \"path\", value: redactText(stored.path).value }],\n actions: [],\n correlation: { commandId: execution.result.commandId },\n });\n }\n }\n\n if (options.format !== \"human\" || !options.quiet || !execution.result.ok) {\n const human = options.format === \"human\";\n renderResult(execution.result, {\n format: options.format,\n capabilities: human ? errorCapabilities : outputCapabilities,\n sink: human ? io.error : io.output,\n verbose: options.verbose,\n });\n }\n return execution.exitCode;\n}\n\nexport async function runCli(\n argv: readonly string[],\n io: CliIo,\n dependencies: CliDependencies = {},\n signal?: AbortSignal,\n): Promise<number> {\n try {\n return await runCliInternal(argv, io, dependencies, signal);\n } catch (caught) {\n const message = redactText(caught instanceof Error ? caught.message : String(caught)).value;\n const problem: Problem = {\n code: \"INTERNAL_ERROR\",\n category: \"internal.unexpected\",\n severity: \"error\",\n summary: \"ADB Ready encountered an unexpected internal error.\",\n detail: \"The operation stopped safely. Re-run with --verbose when reporting this issue.\",\n retryable: false,\n evidence: message === \"\" ? [] : [{ source: \"internal\", field: \"message\", value: message }],\n actions: [],\n correlation: { commandId: \"cli\" },\n };\n renderFailure(failureResult(\"cli\", [problem], dependencies), inferredFormat(argv), io);\n return ExitCode.Internal;\n }\n}\n\nexport function processIo(): CliIo {\n return {\n input: process.stdin,\n output: process.stdout,\n error: process.stderr,\n cwd: process.cwd(),\n env: process.env,\n };\n}\n",
7
- "import { randomUUID } from \"node:crypto\";\nimport { stat } from \"node:fs/promises\";\nimport { constants as osConstants } from \"node:os\";\nimport path from \"node:path\";\nimport { AdbClient } from \"../adb/client.js\";\nimport {\n type AdbDevice,\n type AdbMdnsService,\n type AdbVersion,\n parseAdbNetworkEndpoint,\n parseLogcatThreadtimeLine,\n} from \"../adb/parsers.js\";\nimport { EventBus } from \"../core/event-bus.js\";\nimport { EventJournal, type EventJournalSnapshot } from \"../core/event-journal.js\";\nimport { redactText } from \"../core/redaction.js\";\nimport { TextLineBuffer } from \"../core/text-lines.js\";\nimport { type DevHook, type DevHookEvent, type HookRun, runHooks } from \"../dev/hooks.js\";\nimport {\n type DevPreset,\n detectProject,\n type PackageManagerName,\n type ProjectDetection,\n packageScriptCommand,\n} from \"../dev/project.js\";\nimport {\n ExitCode,\n type OperationPlan,\n type Problem,\n type ResultEnvelope,\n SCHEMA_VERSION,\n} from \"../domain/contracts.js\";\nimport {\n adbNotFoundProblem,\n adbOptionalProbeProblem,\n adbProcessProblem,\n noTargetsProblem,\n ProblemCode,\n problemsForDevices,\n problemsForServerStatus,\n targetInventoryProblems,\n targetSelectionProblem,\n} from \"../domain/problems.js\";\nimport { classifyLogRecord, type LogFinding } from \"../logs/classifier.js\";\nimport { locateAdb, locateExecutable } from \"../platform/executable.js\";\nimport { type ProcessResult, type ProcessRunner, runProcess } from \"../platform/process-runner.js\";\nimport { detectRuntime, type RuntimeInfo } from \"../platform/runtime.js\";\nimport {\n mappingArguments,\n normalizePortMapping,\n type PortDirection,\n type TcpPortMapping,\n tcpEndpoint,\n} from \"../ports/model.js\";\nimport type { RecoveryPolicyInput } from \"../session/recovery-policy.js\";\nimport { type SessionState, SessionStateMachine } from \"../session/state-machine.js\";\nimport { planTargetAcquisition } from \"../session/target-acquisition.js\";\nimport { type SessionHealth, type SessionWatchSummary, watchSession } from \"../session/watcher.js\";\nimport { SessionRecorder, type SessionStoreOptions } from \"../state/session-store.js\";\nimport { type AndroidTarget, buildTargetInventory, isStableAdbSerial } from \"../target/model.js\";\nimport { type SelectedTarget, selectTarget } from \"../target/selection.js\";\n\nexport interface CommandConfig {\n adbPath?: string;\n adbHost?: string;\n adbPort?: number;\n timeoutMs?: number;\n targetSelector?: string;\n targetTransportId?: string;\n targetAliases?: Readonly<Record<string, string>>;\n rememberedSerial?: string;\n rememberedHardwareSerial?: string;\n rememberedOnly?: boolean;\n dryRun?: boolean;\n endpointWasDiscovered?: boolean;\n discoveredEndpointCandidates?: readonly string[];\n}\n\nexport interface CommandDependencies {\n bus?: EventBus;\n clock?: () => Date;\n idFactory?: () => string;\n locateAdb?: typeof locateAdb;\n runner?: ProcessRunner;\n runtime?: () => RuntimeInfo;\n detectProject?: typeof detectProject;\n locateExecutable?: typeof locateExecutable;\n sleep?: (milliseconds: number, signal: AbortSignal) => Promise<boolean>;\n}\n\nexport interface CommandExecution<T> {\n result: ResultEnvelope<T>;\n exitCode: number;\n}\n\nexport interface DoctorData {\n runtime: RuntimeInfo;\n adb: {\n path: string;\n version: Omit<AdbVersion, \"raw\">;\n hostFeatures: string[];\n serverStatus: Record<string, string> | null;\n };\n devices: AdbDevice[];\n targets: AndroidTarget[];\n discovery: TargetDiscoveryData;\n}\n\nexport interface DevicesData {\n adbPath: string;\n devices: AdbDevice[];\n targets: AndroidTarget[];\n discovery: TargetDiscoveryData;\n selected?: SelectedTarget;\n}\n\nexport interface TargetDiscoveryData {\n mdns: {\n available: boolean;\n method: \"legacy\" | \"legacy-fallback\" | \"track\";\n services: AdbMdnsService[];\n };\n identity: {\n probed: number;\n resolved: number;\n };\n}\n\nexport interface ConnectedData {\n adbPath: string;\n endpoint: string;\n status: \"already-connected\" | \"connected\";\n serial: string;\n state: \"device\";\n hardwareSerial?: string;\n discovered: boolean;\n attemptedEndpoints?: string[];\n}\n\nexport interface PairedData {\n adbPath: string;\n endpoint: string;\n paired: true;\n discovered: boolean;\n}\n\nexport interface WirelessPlanData {\n endpoint: string;\n discovered: boolean;\n plan: OperationPlan;\n}\n\nexport type ConnectData = ConnectedData | WirelessPlanData;\nexport type PairData = PairedData | WirelessPlanData;\n\nexport interface WirelessDiscoveryData {\n adbPath: string;\n kind: \"connect\" | \"pairing\";\n services: AdbMdnsService[];\n}\n\nexport type PortAction = \"add\" | \"list\" | \"remove\";\n\nexport interface PortCommandRequest {\n direction: PortDirection;\n action: PortAction;\n hostPort?: string | number;\n devicePort?: string | number;\n}\n\nexport interface PortsData {\n adbPath: string;\n action: PortAction;\n direction: PortDirection;\n selected: SelectedTarget;\n mappings: TcpPortMapping[];\n status: \"added\" | \"already-exists\" | \"listed\" | \"not-found\" | \"removed\" | \"planned\";\n requested?: {\n host: string;\n device: string;\n };\n plan?: OperationPlan;\n}\n\ninterface CommandContext {\n bus: EventBus;\n clock: () => Date;\n command: string;\n commandId: string;\n started: Date;\n}\n\nfunction processSucceeded(result: ProcessResult): boolean {\n return (\n result.spawnError === undefined &&\n result.streamError === undefined &&\n (result.exitCode === 0 || result.stoppedAfterIdle) &&\n !result.timedOut &&\n !result.aborted\n );\n}\n\nfunction preservedChildExitCode(result: ProcessResult): number | undefined {\n if (result.exitCode !== null && result.exitCode !== 0) return result.exitCode;\n if (result.signal === null) return undefined;\n const signalNumber = osConstants.signals[result.signal];\n return signalNumber === undefined ? undefined : 128 + signalNumber;\n}\n\nfunction exitCodeForProblems(problems: readonly Problem[]): ExitCode {\n const errors = problems.filter(({ severity }) => severity === \"error\");\n if (errors.length === 0) {\n return ExitCode.Success;\n }\n if (errors.some(({ code }) => code === ProblemCode.OperationInterrupted)) {\n return ExitCode.Interrupted;\n }\n if (errors.some(({ category }) => category.startsWith(\"input.\"))) {\n return ExitCode.InvalidInput;\n }\n if (errors.some(({ category }) => category.startsWith(\"environment.\"))) {\n return ExitCode.Environment;\n }\n if (errors.some(({ category }) => category.startsWith(\"target.\"))) {\n return ExitCode.Target;\n }\n if (errors.some(({ category }) => category.startsWith(\"child.\"))) {\n return ExitCode.ChildProcess;\n }\n return ExitCode.AdbOperation;\n}\n\nfunction commandProblem(\n code: string,\n category: string,\n summary: string,\n detail: string,\n commandId: string,\n evidence: Problem[\"evidence\"] = [],\n): Problem {\n return {\n code,\n category,\n severity: \"error\",\n summary,\n detail,\n retryable: true,\n evidence,\n actions: [],\n correlation: { commandId },\n };\n}\n\nfunction createContext(command: string, dependencies: CommandDependencies): CommandContext {\n const clock = dependencies.clock ?? (() => new Date());\n const commandId = (dependencies.idFactory ?? randomUUID)();\n const bus = dependencies.bus ?? new EventBus(clock);\n const started = clock();\n\n bus.emit({\n type: \"command.started\",\n source: `command.${command}`,\n severity: \"info\",\n message: `Running ${command}`,\n correlation: { commandId },\n });\n\n return { bus, clock, command, commandId, started };\n}\n\nfunction finish<T>(\n context: CommandContext,\n data: T | null,\n problems: Problem[],\n): CommandExecution<T> {\n const finished = context.clock();\n const exitCode = exitCodeForProblems(problems);\n const ok = exitCode === ExitCode.Success;\n const result: ResultEnvelope<T> = {\n schemaVersion: SCHEMA_VERSION,\n command: context.command,\n commandId: context.commandId,\n ok,\n startedAt: context.started.toISOString(),\n finishedAt: finished.toISOString(),\n durationMs: Math.max(0, finished.getTime() - context.started.getTime()),\n data,\n problems,\n };\n\n context.bus.emit({\n type: ok ? \"command.completed\" : \"command.failed\",\n source: `command.${context.command}`,\n severity: ok ? \"info\" : \"error\",\n message: ok ? `${context.command} completed` : `${context.command} failed`,\n correlation: { commandId: context.commandId },\n data: { exitCode, problemCount: problems.length },\n });\n\n return { result, exitCode };\n}\n\nfunction redactedPath(value: string): string {\n return redactText(value).value;\n}\n\nfunction redactedRecord(values: Record<string, string>): Record<string, string> {\n return Object.fromEntries(\n Object.entries(values).map(([key, value]) => [key, redactText(value).value]),\n );\n}\n\nasync function resolveAdb(\n context: CommandContext,\n config: CommandConfig,\n dependencies: CommandDependencies,\n): Promise<string | undefined> {\n const operationId = (dependencies.idFactory ?? randomUUID)();\n const correlation = { commandId: context.commandId, operationId };\n context.bus.emit({\n type: \"operation.started\",\n source: \"host.adb-path\",\n severity: \"info\",\n message: \"Locating ADB\",\n correlation,\n });\n\n const executable = await (dependencies.locateAdb ?? locateAdb)({\n ...(config.adbPath === undefined ? {} : { explicitPath: config.adbPath }),\n });\n\n context.bus.emit({\n type: executable === undefined ? \"operation.failed\" : \"operation.completed\",\n source: \"host.adb-path\",\n severity: executable === undefined ? \"error\" : \"info\",\n message: executable === undefined ? \"ADB was not found\" : \"ADB was found\",\n correlation,\n ...(executable === undefined ? {} : { data: { path: redactedPath(executable) } }),\n });\n\n return executable;\n}\n\nfunction createClient(\n executable: string,\n context: CommandContext,\n config: CommandConfig,\n dependencies: CommandDependencies,\n): AdbClient {\n return new AdbClient({\n executable,\n bus: context.bus,\n correlation: { commandId: context.commandId },\n ...(config.adbHost === undefined ? {} : { host: config.adbHost }),\n ...(config.adbPort === undefined ? {} : { port: config.adbPort }),\n ...(config.timeoutMs === undefined ? {} : { timeoutMs: config.timeoutMs }),\n ...(dependencies.runner === undefined ? {} : { runner: dependencies.runner }),\n ...(dependencies.idFactory === undefined ? {} : { idFactory: dependencies.idFactory }),\n });\n}\n\nfunction operationProblem(\n operation: string,\n observation: { operationId: string; process: ProcessResult },\n commandId: string,\n): Problem {\n return adbProcessProblem(operation, observation.process, {\n commandId,\n operationId: observation.operationId,\n });\n}\n\ninterface TargetInspection {\n targets: AndroidTarget[];\n discovery: TargetDiscoveryData;\n optionalProblems: Problem[];\n interruption?: Problem;\n}\n\ninterface MdnsDiscovery {\n observation: Awaited<ReturnType<AdbClient[\"mdnsServices\"]>>;\n method: TargetDiscoveryData[\"mdns\"][\"method\"];\n}\n\ninterface WirelessEndpointResolution {\n endpoint?: string;\n candidates: string[];\n discovered: boolean;\n problem?: Problem;\n}\n\nfunction isConnectableDiscoveryService(service: AdbMdnsService): boolean {\n return (\n service.serviceType === \"legacy\" ||\n (service.serviceType === \"connect\" && service.knownDevice !== false)\n );\n}\n\nfunction pairingRequiredProblem(\n connectServices: readonly AdbMdnsService[],\n allServices: readonly AdbMdnsService[],\n commandId: string,\n): Problem {\n const pairingEndpoints = [\n ...new Set(\n allServices\n .filter(({ serviceType }) => serviceType === \"pairing\")\n .map(({ endpoint }) => endpoint.serial),\n ),\n ].sort();\n const pairingEndpoint = pairingEndpoints.length === 1 ? pairingEndpoints[0] : undefined;\n return {\n code: ProblemCode.WirelessPairingRequired,\n category: \"target.authorization\",\n severity: \"error\",\n summary: \"The discovered wireless target must be paired first.\",\n detail:\n pairingEndpoint === undefined\n ? \"ADB reports that this computer does not know the target. Open Pair device with pairing code on Android, then run adb-ready pair.\"\n : `ADB reports that this computer does not know the target. Run adb-ready pair ${pairingEndpoint}, then connect it.`,\n retryable: true,\n evidence: [\n {\n source: \"adb.mdns\",\n field: \"unpairedEndpoints\",\n value: connectServices.map(({ endpoint }) => endpoint.serial),\n },\n ],\n actions:\n pairingEndpoint === undefined\n ? [\n {\n id: \"open_pairing_screen\",\n title: \"Open Pair device with pairing code on the Android target\",\n kind: \"user\",\n risk: \"none\",\n automatic: false,\n },\n ]\n : [\n {\n id: \"pair_discovered_target\",\n title: `Pair ${pairingEndpoint}`,\n kind: \"command\",\n risk: \"device-reversible\",\n automatic: false,\n idempotent: false,\n command: { executable: \"adb-ready\", args: [\"pair\", pairingEndpoint] },\n },\n ],\n correlation: { commandId },\n };\n}\n\nfunction serviceEndpointCandidates(service: AdbMdnsService): string[] {\n return [\n ...new Set([\n service.endpoint.serial,\n ...(service.alternateEndpoints ?? []).map(({ serial }) => serial),\n ]),\n ].slice(0, 3);\n}\n\nfunction normalizeEndpointCandidates(primary: string, candidates: readonly string[]): string[] {\n return [\n ...new Set(\n [primary, ...candidates]\n .map((candidate) => parseAdbNetworkEndpoint(candidate)?.serial)\n .filter((candidate): candidate is string => candidate !== undefined),\n ),\n ].slice(0, 3);\n}\n\nasync function discoverMdns(\n client: AdbClient,\n hostFeatures: readonly string[] | undefined,\n signal: AbortSignal | undefined,\n): Promise<MdnsDiscovery> {\n let features = hostFeatures;\n if (features === undefined) {\n const observation = await client.hostFeatures(signal);\n if (observation.process.aborted) {\n return {\n observation: {\n operationId: observation.operationId,\n process: observation.process,\n value: [],\n },\n method: \"legacy\",\n };\n }\n features = processSucceeded(observation.process) ? observation.value : [];\n }\n if (features.includes(\"track_mdns\")) {\n const tracked = await client.mdnsTrackServices(signal);\n if (processSucceeded(tracked.process) || tracked.process.aborted) {\n return { observation: tracked, method: \"track\" };\n }\n return { observation: await client.mdnsServices(signal), method: \"legacy-fallback\" };\n }\n return { observation: await client.mdnsServices(signal), method: \"legacy\" };\n}\n\nfunction normalizedHardwareSerial(value: string | undefined): string | undefined {\n const normalized = value?.trim();\n return normalized === undefined || normalized === \"\" || normalized.toLowerCase() === \"unknown\"\n ? undefined\n : normalized;\n}\n\nasync function inspectTargets(\n client: AdbClient,\n devices: readonly AdbDevice[],\n commandId: string,\n signal: AbortSignal | undefined,\n hostFeatures?: readonly string[],\n): Promise<TargetInspection> {\n const identityCandidates = devices.filter(\n ({ serial, state }) => state === \"device\" && isStableAdbSerial(serial),\n );\n const [mdnsDiscovery, identities] = await Promise.all([\n discoverMdns(client, hostFeatures, signal),\n Promise.all(identityCandidates.map(({ serial }) => client.getHardwareSerial(serial, signal))),\n ]);\n const mdns = mdnsDiscovery.observation;\n const optionalProblems: Problem[] = [];\n const allObservations = [mdns, ...identities];\n const interrupted = allObservations.find(({ process }) => process.aborted);\n if (interrupted !== undefined) {\n return {\n targets: [],\n discovery: {\n mdns: { available: false, method: mdnsDiscovery.method, services: [] },\n identity: { probed: identityCandidates.length, resolved: 0 },\n },\n optionalProblems,\n interruption: operationProblem(\"target-discovery\", interrupted, commandId),\n };\n }\n\n const mdnsAvailable = processSucceeded(mdns.process);\n if (!mdnsAvailable) {\n optionalProblems.push(\n adbOptionalProbeProblem(\"mdns-services\", mdns.process, {\n commandId,\n operationId: mdns.operationId,\n }),\n );\n }\n\n const identityBySerial = new Map<string, string>();\n identities.forEach((identity, index) => {\n if (!processSucceeded(identity.process)) {\n return;\n }\n const hardwareSerial = normalizedHardwareSerial(identity.value);\n const candidate = identityCandidates[index];\n if (hardwareSerial !== undefined && candidate !== undefined) {\n identityBySerial.set(candidate.serial, hardwareSerial);\n }\n });\n const services = mdnsAvailable ? mdns.value : [];\n const inventory = buildTargetInventory(\n devices.map((device) => {\n const hardwareSerial = identityBySerial.get(device.serial);\n return {\n device,\n ...(hardwareSerial === undefined ? {} : { hardwareSerial }),\n };\n }),\n services,\n );\n\n return {\n targets: inventory.targets,\n discovery: {\n mdns: {\n available: mdnsAvailable,\n method: mdnsDiscovery.method,\n services: inventory.services,\n },\n identity: { probed: identityCandidates.length, resolved: identityBySerial.size },\n },\n optionalProblems,\n };\n}\n\nexport async function runDoctor(\n config: CommandConfig = {},\n dependencies: CommandDependencies = {},\n signal?: AbortSignal,\n): Promise<CommandExecution<DoctorData>> {\n const context = createContext(\"doctor\", dependencies);\n const problems: Problem[] = [];\n const executable = await resolveAdb(context, config, dependencies);\n if (executable === undefined) {\n problems.push(adbNotFoundProblem({ commandId: context.commandId }, config.adbPath));\n return finish<DoctorData>(context, null, problems);\n }\n\n const client = createClient(executable, context, config, dependencies);\n const version = await client.version(signal);\n if (!processSucceeded(version.process)) {\n problems.push(operationProblem(\"version\", version, context.commandId));\n return finish<DoctorData>(context, null, problems);\n }\n\n const hostFeatures = await client.hostFeatures(signal);\n if (!processSucceeded(hostFeatures.process)) {\n const problem = operationProblem(\"host-features\", hostFeatures, context.commandId);\n if (problem.code === ProblemCode.OperationInterrupted) {\n problems.push(problem);\n return finish<DoctorData>(context, null, problems);\n }\n problems.push(\n adbOptionalProbeProblem(\"host-features\", hostFeatures.process, problem.correlation),\n );\n }\n\n let serverStatus: Record<string, string> | null = null;\n if (processSucceeded(hostFeatures.process) && hostFeatures.value.includes(\"server_status\")) {\n const status = await client.serverStatus(signal);\n if (processSucceeded(status.process)) {\n serverStatus = redactedRecord(status.value);\n problems.push(\n ...problemsForServerStatus(status.value, version.value.platformToolsVersion, {\n commandId: context.commandId,\n operationId: status.operationId,\n }),\n );\n } else {\n const problem = operationProblem(\"server-status\", status, context.commandId);\n if (problem.code === ProblemCode.OperationInterrupted) {\n problems.push(problem);\n return finish<DoctorData>(context, null, problems);\n }\n problems.push(adbOptionalProbeProblem(\"server-status\", status.process, problem.correlation));\n }\n }\n\n const devices = await client.devices(signal);\n if (!processSucceeded(devices.process)) {\n problems.push(operationProblem(\"devices\", devices, context.commandId));\n return finish<DoctorData>(context, null, problems);\n }\n\n problems.push(...problemsForDevices(devices.value, { commandId: context.commandId }, \"warning\"));\n const inspection = await inspectTargets(\n client,\n devices.value,\n context.commandId,\n signal,\n processSucceeded(hostFeatures.process) ? hostFeatures.value : [],\n );\n if (inspection.interruption !== undefined) {\n problems.push(inspection.interruption);\n return finish<DoctorData>(context, null, problems);\n }\n problems.push(...targetInventoryProblems(inspection.targets, { commandId: context.commandId }));\n problems.push(...inspection.optionalProblems);\n if (devices.value.length === 0) {\n problems.push(\n noTargetsProblem({ commandId: context.commandId }, inspection.discovery.mdns.services),\n );\n }\n\n const versionData: Omit<AdbVersion, \"raw\"> = {\n ...(version.value.protocolVersion === undefined\n ? {}\n : { protocolVersion: version.value.protocolVersion }),\n ...(version.value.platformToolsVersion === undefined\n ? {}\n : { platformToolsVersion: version.value.platformToolsVersion }),\n ...(version.value.installedAs === undefined\n ? {}\n : { installedAs: redactedPath(version.value.installedAs) }),\n };\n\n return finish(\n context,\n {\n runtime: (dependencies.runtime ?? detectRuntime)(),\n adb: {\n path: redactedPath(executable),\n version: versionData,\n hostFeatures: processSucceeded(hostFeatures.process) ? hostFeatures.value : [],\n serverStatus,\n },\n devices: devices.value,\n targets: inspection.targets,\n discovery: inspection.discovery,\n },\n problems,\n );\n}\n\nexport async function runDevices(\n config: CommandConfig = {},\n dependencies: CommandDependencies = {},\n signal?: AbortSignal,\n): Promise<CommandExecution<DevicesData>> {\n const context = createContext(\"devices\", dependencies);\n const problems: Problem[] = [];\n const executable = await resolveAdb(context, config, dependencies);\n if (executable === undefined) {\n problems.push(adbNotFoundProblem({ commandId: context.commandId }, config.adbPath));\n return finish<DevicesData>(context, null, problems);\n }\n\n const client = createClient(executable, context, config, dependencies);\n const devices = await client.devices(signal);\n if (!processSucceeded(devices.process)) {\n problems.push(operationProblem(\"devices\", devices, context.commandId));\n return finish<DevicesData>(context, null, problems);\n }\n\n problems.push(...problemsForDevices(devices.value, { commandId: context.commandId }, \"warning\"));\n\n const inspection = await inspectTargets(client, devices.value, context.commandId, signal);\n if (inspection.interruption !== undefined) {\n problems.push(inspection.interruption);\n return finish<DevicesData>(context, null, problems);\n }\n problems.push(...targetInventoryProblems(inspection.targets, { commandId: context.commandId }));\n problems.push(...inspection.optionalProblems);\n if (devices.value.length === 0) {\n problems.push(\n noTargetsProblem({ commandId: context.commandId }, inspection.discovery.mdns.services),\n );\n }\n\n let selected: SelectedTarget | undefined;\n if (\n config.targetSelector !== undefined ||\n config.targetTransportId !== undefined ||\n config.rememberedOnly === true\n ) {\n const selection = selectTarget(inspection.targets, {\n ...(config.targetSelector === undefined ? {} : { selector: config.targetSelector }),\n ...(config.targetTransportId === undefined ? {} : { transportId: config.targetTransportId }),\n ...(config.targetAliases === undefined ? {} : { aliases: config.targetAliases }),\n ...(config.rememberedSerial === undefined\n ? {}\n : { rememberedSerial: config.rememberedSerial }),\n ...(config.rememberedHardwareSerial === undefined\n ? {}\n : { rememberedHardwareSerial: config.rememberedHardwareSerial }),\n ...(config.rememberedOnly === undefined ? {} : { rememberedOnly: config.rememberedOnly }),\n });\n if (selection.kind !== \"selected\") {\n problems.push(targetSelectionProblem(selection, { commandId: context.commandId }));\n } else {\n selected = selection.selection;\n }\n }\n\n return finish(\n context,\n {\n adbPath: redactedPath(executable),\n devices: devices.value,\n targets: inspection.targets,\n discovery: inspection.discovery,\n ...(selected === undefined ? {} : { selected }),\n },\n problems,\n );\n}\n\nfunction portInputProblem(\n field: \"device\" | \"host\",\n value: string | number | undefined,\n commandId: string,\n): Problem {\n return commandProblem(\n ProblemCode.InvalidPort,\n \"input.port\",\n `The ${field} port is invalid.`,\n \"Use a TCP port from 1 to 65535, for example 8081 or tcp:8081.\",\n commandId,\n [{ source: \"input\", field: `${field}Port`, value: value === undefined ? null : String(value) }],\n );\n}\n\nfunction requestedPortMapping(\n request: PortCommandRequest,\n commandId: string,\n): { host: string; device: string } | Problem {\n const primary = request.direction === \"reverse\" ? request.devicePort : request.hostPort;\n if (primary === undefined) {\n return portInputProblem(\n request.direction === \"reverse\" ? \"device\" : \"host\",\n primary,\n commandId,\n );\n }\n const primaryEndpoint = tcpEndpoint(primary);\n if (primaryEndpoint === undefined) {\n return portInputProblem(\n request.direction === \"reverse\" ? \"device\" : \"host\",\n primary,\n commandId,\n );\n }\n const secondary =\n request.direction === \"reverse\"\n ? (request.hostPort ?? request.devicePort)\n : (request.devicePort ?? request.hostPort);\n if (secondary === undefined) {\n return portInputProblem(\n request.direction === \"reverse\" ? \"host\" : \"device\",\n secondary,\n commandId,\n );\n }\n const secondaryEndpoint = tcpEndpoint(secondary);\n if (secondaryEndpoint === undefined) {\n return portInputProblem(\n request.direction === \"reverse\" ? \"host\" : \"device\",\n secondary,\n commandId,\n );\n }\n return request.direction === \"reverse\"\n ? { host: secondaryEndpoint, device: primaryEndpoint }\n : { host: primaryEndpoint, device: secondaryEndpoint };\n}\n\nfunction listenEndpoint(\n direction: PortDirection,\n mapping: { host: string; device: string },\n): string {\n return direction === \"forward\" ? mapping.host : mapping.device;\n}\n\nfunction targetForAdb(selection: SelectedTarget): { serial: string; transportId?: string } {\n return {\n serial: selection.transport.serial,\n ...(selection.transport.transportId === undefined\n ? {}\n : { transportId: selection.transport.transportId }),\n };\n}\n\nexport async function runPorts(\n request: PortCommandRequest,\n config: CommandConfig = {},\n dependencies: CommandDependencies = {},\n signal?: AbortSignal,\n): Promise<CommandExecution<PortsData>> {\n const context = createContext(`ports ${request.direction} ${request.action}`, dependencies);\n const problems: Problem[] = [];\n const requested =\n request.action === \"list\" ? undefined : requestedPortMapping(request, context.commandId);\n if (requested !== undefined && \"code\" in requested) {\n problems.push(requested);\n return finish<PortsData>(context, null, problems);\n }\n\n const executable = await resolveAdb(context, config, dependencies);\n if (executable === undefined) {\n problems.push(adbNotFoundProblem({ commandId: context.commandId }, config.adbPath));\n return finish<PortsData>(context, null, problems);\n }\n const client = createClient(executable, context, config, dependencies);\n const devices = await client.devices(signal);\n if (!processSucceeded(devices.process)) {\n problems.push(operationProblem(\"devices\", devices, context.commandId));\n return finish<PortsData>(context, null, problems);\n }\n const inspection = await inspectTargets(client, devices.value, context.commandId, signal);\n if (inspection.interruption !== undefined) {\n problems.push(inspection.interruption);\n return finish<PortsData>(context, null, problems);\n }\n problems.push(...inspection.optionalProblems);\n problems.push(...targetInventoryProblems(inspection.targets, { commandId: context.commandId }));\n const selection = selectTarget(inspection.targets, {\n ...(config.targetSelector === undefined ? {} : { selector: config.targetSelector }),\n ...(config.targetTransportId === undefined ? {} : { transportId: config.targetTransportId }),\n ...(config.targetAliases === undefined ? {} : { aliases: config.targetAliases }),\n ...(config.rememberedSerial === undefined ? {} : { rememberedSerial: config.rememberedSerial }),\n ...(config.rememberedHardwareSerial === undefined\n ? {}\n : { rememberedHardwareSerial: config.rememberedHardwareSerial }),\n ...(config.rememberedOnly === undefined ? {} : { rememberedOnly: config.rememberedOnly }),\n });\n if (selection.kind !== \"selected\") {\n problems.push(targetSelectionProblem(selection, { commandId: context.commandId }));\n return finish<PortsData>(context, null, problems);\n }\n\n const target = targetForAdb(selection.selection);\n const listed = await client.listPortMappings(target, request.direction, signal);\n if (!processSucceeded(listed.process)) {\n problems.push(operationProblem(`${request.direction}-list`, listed, context.commandId));\n return finish<PortsData>(context, null, problems);\n }\n const mappings = listed.value.map((mapping) => normalizePortMapping(request.direction, mapping));\n if (request.action === \"list\") {\n return finish(\n context,\n {\n adbPath: redactedPath(executable),\n action: request.action,\n direction: request.direction,\n selected: selection.selection,\n mappings,\n status: \"listed\",\n },\n problems,\n );\n }\n\n if (requested === undefined) {\n throw new Error(\"Port request validation did not produce a mapping.\");\n }\n const requestedListen = listenEndpoint(request.direction, requested);\n const existingAtEndpoint = mappings.find(\n (mapping) => listenEndpoint(request.direction, mapping) === requestedListen,\n );\n const base = {\n adbPath: redactedPath(executable),\n action: request.action,\n direction: request.direction,\n selected: selection.selection,\n requested,\n };\n\n if (request.action === \"add\" && existingAtEndpoint !== undefined) {\n if (\n existingAtEndpoint.host === requested.host &&\n existingAtEndpoint.device === requested.device\n ) {\n return finish(context, { ...base, mappings, status: \"already-exists\" as const }, problems);\n }\n problems.push(\n commandProblem(\n ProblemCode.PortMappingConflict,\n \"adb.port.conflict\",\n `The ${request.direction} listen port is already mapped.`,\n \"Remove the existing mapping explicitly or choose another port; ADB Ready will not overwrite it.\",\n context.commandId,\n [\n { source: \"adb.port\", field: \"listen\", value: requestedListen },\n { source: \"adb.port\", field: \"host\", value: existingAtEndpoint.host },\n { source: \"adb.port\", field: \"device\", value: existingAtEndpoint.device },\n ],\n ),\n );\n return finish<PortsData>(context, { ...base, mappings, status: \"already-exists\" }, problems);\n }\n\n const [firstEndpoint, secondEndpoint] = mappingArguments(\n request.direction,\n requested.host,\n requested.device,\n );\n if (config.dryRun) {\n const args =\n request.action === \"add\"\n ? [\n ...(target.transportId === undefined\n ? [\"-s\", target.serial]\n : [\"-t\", target.transportId]),\n request.direction,\n \"--no-rebind\",\n firstEndpoint,\n secondEndpoint,\n ]\n : [\n ...(target.transportId === undefined\n ? [\"-s\", target.serial]\n : [\"-t\", target.transportId]),\n request.direction,\n \"--remove\",\n requestedListen,\n ];\n return finish(\n context,\n {\n ...base,\n mappings,\n status: \"planned\",\n plan: {\n schemaVersion: SCHEMA_VERSION,\n dryRun: true,\n steps: [\n {\n id: `${request.direction}-${request.action}`,\n title: `${request.action === \"add\" ? \"Add\" : \"Remove\"} ${request.direction} mapping ${requested.device} ↔ ${requested.host}`,\n risk: \"device-reversible\",\n executable: redactedPath(executable),\n args,\n },\n {\n id: \"verify-port-mapping\",\n title: `Verify ${request.direction} mappings`,\n risk: \"read-only\",\n executable: redactedPath(executable),\n args: [\n ...(target.transportId === undefined\n ? [\"-s\", target.serial]\n : [\"-t\", target.transportId]),\n request.direction,\n \"--list\",\n ],\n },\n ],\n },\n },\n problems,\n );\n }\n\n if (request.action === \"remove\" && existingAtEndpoint === undefined) {\n return finish(context, { ...base, mappings, status: \"not-found\" }, problems);\n }\n\n const mutation =\n request.action === \"add\"\n ? await client.addPortMapping(\n target,\n request.direction,\n firstEndpoint,\n secondEndpoint,\n signal,\n )\n : await client.removePortMapping(target, request.direction, requestedListen, signal);\n if (!processSucceeded(mutation.process)) {\n problems.push(\n operationProblem(`${request.direction}-${request.action}`, mutation, context.commandId),\n );\n return finish<PortsData>(context, { ...base, mappings, status: \"not-found\" }, problems);\n }\n const verified = await client.listPortMappings(target, request.direction, signal);\n if (!processSucceeded(verified.process)) {\n problems.push(operationProblem(`${request.direction}-verify`, verified, context.commandId));\n return finish<PortsData>(context, { ...base, mappings, status: \"not-found\" }, problems);\n }\n const verifiedMappings = verified.value.map((mapping) =>\n normalizePortMapping(request.direction, mapping),\n );\n const isPresent = verifiedMappings.some(\n (mapping) => mapping.host === requested.host && mapping.device === requested.device,\n );\n if ((request.action === \"add\" && !isPresent) || (request.action === \"remove\" && isPresent)) {\n problems.push(\n commandProblem(\n ProblemCode.PortMappingVerificationFailed,\n \"adb.port.verification\",\n `ADB did not verify the ${request.direction} mapping change.`,\n \"The requested mutation returned success, but the follow-up mapping list disagreed.\",\n context.commandId,\n ),\n );\n }\n return finish(\n context,\n {\n ...base,\n mappings: verifiedMappings,\n status: request.action === \"add\" ? \"added\" : \"removed\",\n },\n problems,\n );\n}\n\nasync function resolveWirelessEndpoint(\n client: AdbClient,\n requested: string | undefined,\n serviceType: \"connect\" | \"pairing\",\n commandId: string,\n signal: AbortSignal | undefined,\n requestedWasDiscovered = false,\n requestedCandidates: readonly string[] = [],\n): Promise<WirelessEndpointResolution> {\n if (requested !== undefined) {\n const endpoint = parseAdbNetworkEndpoint(requested);\n return endpoint === undefined\n ? {\n candidates: [],\n discovered: requestedWasDiscovered,\n problem: commandProblem(\n ProblemCode.InvalidEndpoint,\n \"input.endpoint\",\n \"The wireless endpoint is invalid.\",\n \"Use HOST:PORT, IPv4:PORT, or [IPv6]:PORT with a port from 1 to 65535.\",\n commandId,\n [{ source: \"input\", field: \"endpoint\", value: requested }],\n ),\n }\n : {\n endpoint: endpoint.serial,\n candidates: requestedWasDiscovered\n ? normalizeEndpointCandidates(endpoint.serial, requestedCandidates)\n : [endpoint.serial],\n discovered: requestedWasDiscovered,\n };\n }\n\n const mdnsDiscovery = await discoverMdns(client, undefined, signal);\n const mdns = mdnsDiscovery.observation;\n if (!processSucceeded(mdns.process)) {\n return {\n candidates: [],\n discovered: true,\n problem: operationProblem(\"mdns-services\", mdns, commandId),\n };\n }\n const serviceKinds =\n serviceType === \"connect\" ? new Set([\"connect\", \"legacy\"]) : new Set([\"pairing\"]);\n const discoveredServices = mdns.value.filter((service) => serviceKinds.has(service.serviceType));\n const services =\n serviceType === \"connect\"\n ? discoveredServices.filter(isConnectableDiscoveryService)\n : discoveredServices;\n if (\n serviceType === \"connect\" &&\n services.length === 0 &&\n discoveredServices.some(({ knownDevice }) => knownDevice === false)\n ) {\n return {\n candidates: [],\n discovered: true,\n problem: pairingRequiredProblem(discoveredServices, mdns.value, commandId),\n };\n }\n const serviceGroups = new Map<string, AdbMdnsService[]>();\n for (const service of services) {\n const key = `${service.rawServiceType}\\0${service.instance}`;\n const group = serviceGroups.get(key) ?? [];\n group.push(service);\n serviceGroups.set(key, group);\n }\n if (serviceGroups.size === 0) {\n return {\n candidates: [],\n discovered: true,\n problem: commandProblem(\n ProblemCode.WirelessEndpointNotFound,\n \"target.discovery\",\n `No wireless ${serviceType} endpoint was discovered.`,\n serviceType === \"pairing\"\n ? \"Open Wireless debugging and choose Pair device with pairing code, or provide its displayed HOST:PORT explicitly.\"\n : \"Enable Wireless debugging, keep the target on a reachable network, or provide HOST:PORT explicitly.\",\n commandId,\n ),\n };\n }\n if (serviceGroups.size > 1) {\n const endpoints = [\n ...new Set(services.flatMap((service) => serviceEndpointCandidates(service))),\n ].sort();\n return {\n candidates: [],\n discovered: true,\n problem: commandProblem(\n ProblemCode.MultipleWirelessEndpoints,\n \"target.selection\",\n `Multiple wireless ${serviceType} endpoints require an explicit selection.`,\n `Run the command again with one of these endpoints: ${endpoints.join(\", \")}`,\n commandId,\n [{ source: \"adb.mdns\", field: \"endpoints\", value: endpoints }],\n ),\n };\n }\n const serviceGroup = [...serviceGroups.values()][0] ?? [];\n const candidates = [\n ...new Set(serviceGroup.flatMap((service) => serviceEndpointCandidates(service))),\n ].slice(0, 3);\n const endpoint = candidates[0];\n return endpoint === undefined\n ? { candidates: [], discovered: true }\n : { endpoint, candidates, discovered: true };\n}\n\nexport async function runWirelessDiscovery(\n kind: \"connect\" | \"pairing\",\n config: CommandConfig = {},\n dependencies: CommandDependencies = {},\n signal?: AbortSignal,\n): Promise<CommandExecution<WirelessDiscoveryData>> {\n const context = createContext(\"wireless-discovery\", dependencies);\n const problems: Problem[] = [];\n const executable = await resolveAdb(context, config, dependencies);\n if (executable === undefined) {\n problems.push(adbNotFoundProblem({ commandId: context.commandId }, config.adbPath));\n return finish<WirelessDiscoveryData>(context, null, problems);\n }\n const client = createClient(executable, context, config, dependencies);\n const mdnsDiscovery = await discoverMdns(client, undefined, signal);\n const mdns = mdnsDiscovery.observation;\n if (!processSucceeded(mdns.process)) {\n problems.push(operationProblem(\"mdns-services\", mdns, context.commandId));\n return finish<WirelessDiscoveryData>(context, null, problems);\n }\n const accepted = kind === \"connect\" ? new Set([\"connect\", \"legacy\"]) : new Set([\"pairing\"]);\n const discoveredServices = mdns.value.filter((service) => accepted.has(service.serviceType));\n if (\n kind === \"connect\" &&\n discoveredServices.length > 0 &&\n discoveredServices.every(\n ({ knownDevice, serviceType }) => serviceType === \"connect\" && knownDevice === false,\n )\n ) {\n problems.push(pairingRequiredProblem(discoveredServices, mdns.value, context.commandId));\n return finish(context, { adbPath: redactedPath(executable), kind, services: [] }, problems);\n }\n const seen = new Set<string>();\n const services = discoveredServices.filter((service) => {\n if (\n (kind === \"connect\" && !isConnectableDiscoveryService(service)) ||\n seen.has(service.endpoint.serial)\n ) {\n return false;\n }\n seen.add(service.endpoint.serial);\n return true;\n });\n if (services.length === 0) {\n problems.push(\n commandProblem(\n ProblemCode.WirelessEndpointNotFound,\n \"target.discovery\",\n `No wireless ${kind} endpoint was discovered.`,\n kind === \"pairing\"\n ? \"Open Wireless debugging and choose Pair device with pairing code, or provide its displayed HOST:PORT explicitly.\"\n : \"Enable Wireless debugging, keep the target on a reachable network, or provide HOST:PORT explicitly.\",\n context.commandId,\n ),\n );\n }\n return finish(context, { adbPath: redactedPath(executable), kind, services }, problems);\n}\n\nexport async function runConnect(\n requestedEndpoint: string | undefined,\n config: CommandConfig = {},\n dependencies: CommandDependencies = {},\n signal?: AbortSignal,\n): Promise<CommandExecution<ConnectData>> {\n const context = createContext(\"connect\", dependencies);\n const problems: Problem[] = [];\n if (requestedEndpoint !== undefined && parseAdbNetworkEndpoint(requestedEndpoint) === undefined) {\n problems.push(\n commandProblem(\n ProblemCode.InvalidEndpoint,\n \"input.endpoint\",\n \"The wireless endpoint is invalid.\",\n \"Use HOST:PORT, IPv4:PORT, or [IPv6]:PORT with a port from 1 to 65535.\",\n context.commandId,\n [{ source: \"input\", field: \"endpoint\", value: requestedEndpoint }],\n ),\n );\n return finish<ConnectData>(context, null, problems);\n }\n const executable = await resolveAdb(context, config, dependencies);\n if (executable === undefined) {\n problems.push(adbNotFoundProblem({ commandId: context.commandId }, config.adbPath));\n return finish<ConnectData>(context, null, problems);\n }\n const client = createClient(executable, context, config, dependencies);\n const resolution = await resolveWirelessEndpoint(\n client,\n requestedEndpoint,\n \"connect\",\n context.commandId,\n signal,\n config.endpointWasDiscovered,\n config.discoveredEndpointCandidates,\n );\n if (resolution.problem !== undefined || resolution.endpoint === undefined) {\n if (resolution.problem !== undefined) {\n problems.push(resolution.problem);\n }\n return finish<ConnectData>(context, null, problems);\n }\n const candidates =\n resolution.candidates.length > 0 ? resolution.candidates : [resolution.endpoint];\n if (config.dryRun) {\n const steps = candidates.flatMap((candidate, index) => {\n const connectId = index === 0 ? \"connect\" : `connect-alternate-${String(index)}`;\n const verifyId = index === 0 ? \"verify\" : `verify-alternate-${String(index)}`;\n const previousConnectId = index <= 1 ? \"connect\" : `connect-alternate-${String(index - 1)}`;\n return [\n {\n id: connectId,\n title:\n index === 0\n ? `Connect wireless target ${candidate}`\n : `Try alternate address ${candidate}`,\n risk: \"local-additive\" as const,\n ...(index === 0\n ? {}\n : { when: { stepId: previousConnectId, outcome: \"failure\" as const } }),\n executable: redactedPath(executable),\n args: [\"connect\", candidate],\n },\n {\n id: verifyId,\n title: `Verify ${candidate} reports device state`,\n risk: \"read-only\" as const,\n when: { stepId: connectId, outcome: \"success\" as const },\n executable: redactedPath(executable),\n args: [\"-s\", candidate, \"get-state\"],\n },\n ];\n });\n return finish(\n context,\n {\n endpoint: resolution.endpoint,\n discovered: resolution.discovered,\n plan: {\n schemaVersion: SCHEMA_VERSION,\n dryRun: true,\n steps,\n },\n },\n problems,\n );\n }\n\n const attemptedEndpoints: string[] = [];\n let connected:\n | {\n endpoint: string;\n status: ConnectedData[\"status\"];\n }\n | undefined;\n let lastConnectionProblem: Problem | undefined;\n for (const candidate of candidates) {\n attemptedEndpoints.push(candidate);\n const observation = await client.connect(candidate, signal);\n if (!processSucceeded(observation.process)) {\n lastConnectionProblem = operationProblem(\"connect\", observation, context.commandId);\n if (\n lastConnectionProblem.code === ProblemCode.OperationInterrupted ||\n lastConnectionProblem.code === ProblemCode.AdbServerUnavailable ||\n lastConnectionProblem.code === ProblemCode.AdbFeatureUnavailable\n ) {\n break;\n }\n continue;\n }\n if (\n observation.value.status === \"connected\" ||\n observation.value.status === \"already-connected\"\n ) {\n const confirmedEndpoint =\n observation.value.endpoint === undefined\n ? undefined\n : parseAdbNetworkEndpoint(observation.value.endpoint)?.serial;\n connected = {\n endpoint: confirmedEndpoint ?? candidate,\n status: observation.value.status,\n };\n break;\n }\n lastConnectionProblem = commandProblem(\n ProblemCode.WirelessConnectionFailed,\n \"adb.connect\",\n \"ADB did not confirm the wireless connection.\",\n \"The operation returned without a verified connected state.\",\n context.commandId,\n [{ source: \"adb.connect\", field: \"status\", value: observation.value.status }],\n );\n }\n if (connected === undefined) {\n const problem =\n lastConnectionProblem ??\n commandProblem(\n ProblemCode.WirelessConnectionFailed,\n \"adb.connect\",\n \"ADB could not connect to the discovered wireless target.\",\n \"None of the bounded address candidates produced a connected state.\",\n context.commandId,\n );\n problem.evidence.push({\n source: \"adb.discovery\",\n field: \"attemptedEndpoints\",\n value: attemptedEndpoints,\n });\n problems.push(problem);\n return finish<ConnectData>(context, null, problems);\n }\n if (attemptedEndpoints.length > 1) {\n context.bus.emit({\n type: \"recovery.completed\",\n source: \"command.connect\",\n severity: \"info\",\n message: `Connected through alternate address ${connected.endpoint}`,\n correlation: { commandId: context.commandId },\n data: { attemptedEndpoints, selectedEndpoint: connected.endpoint },\n });\n }\n\n const state = await client.getState(connected.endpoint, signal);\n if (!processSucceeded(state.process)) {\n problems.push(operationProblem(\"get-state\", state, context.commandId));\n return finish<ConnectData>(context, null, problems);\n }\n if (state.value !== \"device\") {\n problems.push(\n commandProblem(\n ProblemCode.WirelessConnectionFailed,\n \"target.verification\",\n \"The wireless target could not be verified as ready.\",\n `ADB reported ${state.value ?? \"no state\"} after connecting.`,\n context.commandId,\n [{ source: \"adb.get-state\", field: \"state\", value: state.value ?? null }],\n ),\n );\n return finish<ConnectData>(context, null, problems);\n }\n\n const identity = await client.getHardwareSerial(connected.endpoint, signal);\n if (identity.process.aborted) {\n problems.push(operationProblem(\"hardware-serial\", identity, context.commandId));\n return finish<ConnectData>(context, null, problems);\n }\n const hardwareSerial = processSucceeded(identity.process)\n ? normalizedHardwareSerial(identity.value)\n : undefined;\n return finish(\n context,\n {\n adbPath: redactedPath(executable),\n endpoint: connected.endpoint,\n status: connected.status,\n serial: connected.endpoint,\n state: \"device\",\n ...(hardwareSerial === undefined ? {} : { hardwareSerial }),\n discovered: resolution.discovered,\n ...(attemptedEndpoints.length > 1 ? { attemptedEndpoints } : {}),\n },\n problems,\n );\n}\n\nexport async function runPair(\n requestedEndpoint: string | undefined,\n pairingCode: string,\n config: CommandConfig = {},\n dependencies: CommandDependencies = {},\n signal?: AbortSignal,\n): Promise<CommandExecution<PairData>> {\n const context = createContext(\"pair\", dependencies);\n const problems: Problem[] = [];\n if (!config.dryRun && !/^\\d{6}$/u.test(pairingCode)) {\n problems.push(\n commandProblem(\n ProblemCode.InvalidPairingCode,\n \"input.pairing-code\",\n \"The pairing code must contain exactly six digits.\",\n \"Open Pair device with pairing code on Android and enter the current six-digit code.\",\n context.commandId,\n ),\n );\n return finish<PairData>(context, null, problems);\n }\n if (requestedEndpoint !== undefined && parseAdbNetworkEndpoint(requestedEndpoint) === undefined) {\n problems.push(\n commandProblem(\n ProblemCode.InvalidEndpoint,\n \"input.endpoint\",\n \"The wireless pairing endpoint is invalid.\",\n \"Use the HOST:PORT shown on Android's pairing-code screen.\",\n context.commandId,\n [{ source: \"input\", field: \"endpoint\", value: requestedEndpoint }],\n ),\n );\n return finish<PairData>(context, null, problems);\n }\n const executable = await resolveAdb(context, config, dependencies);\n if (executable === undefined) {\n problems.push(adbNotFoundProblem({ commandId: context.commandId }, config.adbPath));\n return finish<PairData>(context, null, problems);\n }\n const client = createClient(executable, context, config, dependencies);\n const resolution = await resolveWirelessEndpoint(\n client,\n requestedEndpoint,\n \"pairing\",\n context.commandId,\n signal,\n config.endpointWasDiscovered,\n config.discoveredEndpointCandidates,\n );\n if (resolution.problem !== undefined || resolution.endpoint === undefined) {\n if (resolution.problem !== undefined) {\n problems.push(resolution.problem);\n }\n return finish<PairData>(context, null, problems);\n }\n if (config.dryRun) {\n return finish(\n context,\n {\n endpoint: resolution.endpoint,\n discovered: resolution.discovered,\n plan: {\n schemaVersion: SCHEMA_VERSION,\n dryRun: true,\n steps: [\n {\n id: \"pair\",\n title: `Pair wireless target ${resolution.endpoint}`,\n risk: \"device-reversible\",\n executable: redactedPath(executable),\n args: [\"pair\", resolution.endpoint],\n },\n ],\n },\n },\n problems,\n );\n }\n\n const pairing = await client.pair(resolution.endpoint, pairingCode, signal);\n if (!processSucceeded(pairing.process)) {\n problems.push(operationProblem(\"pair\", pairing, context.commandId));\n return finish<PairData>(context, null, problems);\n }\n if (!pairing.value.paired) {\n problems.push(\n commandProblem(\n ProblemCode.WirelessPairingFailed,\n \"adb.pair\",\n \"ADB did not confirm wireless pairing.\",\n \"Check that the pairing screen is still open and the six-digit code has not expired.\",\n context.commandId,\n ),\n );\n return finish<PairData>(context, null, problems);\n }\n\n return finish(\n context,\n {\n adbPath: redactedPath(executable),\n endpoint: resolution.endpoint,\n paired: true,\n discovered: resolution.discovered,\n },\n problems,\n );\n}\n\nexport interface DevPort {\n device: string | number;\n host?: string | number;\n}\n\nexport interface LogsOptions {\n packageName?: string;\n pid?: number;\n tags?: readonly string[];\n excludeTags?: readonly string[];\n minimumPriority?: \"A\" | \"D\" | \"E\" | \"F\" | \"I\" | \"S\" | \"V\" | \"W\";\n buffers?: readonly (\"crash\" | \"main\" | \"system\")[];\n since?: string;\n tail?: number;\n dump?: boolean;\n maxRecords?: number;\n onLine?: (line: string) => void;\n}\n\nexport interface LogRecord {\n raw: string;\n parsed: boolean;\n message: string;\n priority?: string;\n tag?: string;\n pid?: number;\n tid?: number;\n}\n\nexport interface LogsData {\n adbPath: string;\n selected: SelectedTarget;\n packageName?: string;\n pid?: number;\n uid?: number;\n buffers: string[];\n filters: string[];\n records: LogRecord[];\n findings: Array<LogFinding & { message: string; priority?: string; tag?: string }>;\n dropped: number;\n process: {\n exitCode: number | null;\n signal: NodeJS.Signals | null;\n durationMs: number;\n stdoutTruncated: boolean;\n stderrTruncated: boolean;\n };\n}\n\nexport async function runLogs(\n options: LogsOptions,\n config: CommandConfig = {},\n dependencies: CommandDependencies = {},\n signal?: AbortSignal,\n): Promise<CommandExecution<LogsData>> {\n const context = createContext(\"logs\", dependencies);\n const problems: Problem[] = [];\n const executable = await resolveAdb(context, config, dependencies);\n if (executable === undefined) {\n problems.push(adbNotFoundProblem({ commandId: context.commandId }, config.adbPath));\n return finish<LogsData>(context, null, problems);\n }\n const discoveryClient = createClient(executable, context, config, dependencies);\n const devices = await discoveryClient.devices(signal);\n if (!processSucceeded(devices.process)) {\n problems.push(operationProblem(\"devices\", devices, context.commandId));\n return finish<LogsData>(context, null, problems);\n }\n const inspection = await inspectTargets(\n discoveryClient,\n devices.value,\n context.commandId,\n signal,\n );\n if (inspection.interruption !== undefined) {\n problems.push(inspection.interruption);\n return finish<LogsData>(context, null, problems);\n }\n problems.push(...inspection.optionalProblems);\n const selection = selectTarget(inspection.targets, {\n ...(config.targetSelector === undefined ? {} : { selector: config.targetSelector }),\n ...(config.targetTransportId === undefined ? {} : { transportId: config.targetTransportId }),\n ...(config.targetAliases === undefined ? {} : { aliases: config.targetAliases }),\n ...(config.rememberedSerial === undefined ? {} : { rememberedSerial: config.rememberedSerial }),\n ...(config.rememberedHardwareSerial === undefined\n ? {}\n : { rememberedHardwareSerial: config.rememberedHardwareSerial }),\n ...(config.rememberedOnly === undefined ? {} : { rememberedOnly: config.rememberedOnly }),\n });\n if (selection.kind !== \"selected\") {\n problems.push(targetSelectionProblem(selection, { commandId: context.commandId }));\n return finish<LogsData>(context, null, problems);\n }\n const selected = selection.selection;\n const target = targetForAdb(selected);\n const correlation = { commandId: context.commandId, targetId: selected.target.id };\n const client = new AdbClient({\n executable,\n bus: context.bus,\n correlation,\n ...(config.adbHost === undefined ? {} : { host: config.adbHost }),\n ...(config.adbPort === undefined ? {} : { port: config.adbPort }),\n ...(config.timeoutMs === undefined ? {} : { timeoutMs: config.timeoutMs }),\n ...(dependencies.runner === undefined ? {} : { runner: dependencies.runner }),\n ...(dependencies.idFactory === undefined ? {} : { idFactory: dependencies.idFactory }),\n });\n let resolvedPid = options.pid;\n let resolvedUid: number | undefined;\n if (resolvedPid === undefined && options.packageName !== undefined) {\n const packages = await client.shell(\n target,\n [\"cmd\", \"package\", \"list\", \"packages\", \"-U\", options.packageName],\n signal,\n );\n const uidMatch =\n processSucceeded(packages.process) && packages.value !== undefined\n ? packages.value.match(/(?:^|\\s)uid:(\\d+)(?:\\s|$)/u)\n : null;\n const uid = Number(uidMatch?.[1]);\n if (Number.isSafeInteger(uid) && uid >= 0) resolvedUid = uid;\n }\n if (resolvedPid === undefined && resolvedUid === undefined && options.packageName !== undefined) {\n const pid = await client.shell(target, [\"pidof\", \"-s\", options.packageName], signal);\n const parsedPid = processSucceeded(pid.process) ? Number(pid.value) : Number.NaN;\n if (!Number.isSafeInteger(parsedPid) || parsedPid < 1) {\n problems.push(\n commandProblem(\n ProblemCode.LogPackageNotRunning,\n \"logcat.package\",\n `Android package ${options.packageName} is not running on the selected target.`,\n \"Start the app and retry, or omit --package to inspect target-wide logs.\",\n context.commandId,\n ),\n );\n return finish<LogsData>(context, null, problems);\n }\n resolvedPid = parsedPid;\n }\n const priority = options.minimumPriority ?? \"I\";\n const filters =\n options.tags === undefined || options.tags.length === 0\n ? [`*:${priority}`]\n : [...options.tags.map((tag) => `${tag}:${priority}`), \"*:S\"];\n for (const tag of options.excludeTags ?? []) {\n filters.unshift(`${tag}:S`);\n }\n const buffers = [...new Set(options.buffers ?? [])];\n if (options.tail !== undefined && (!Number.isSafeInteger(options.tail) || options.tail < 1)) {\n problems.push(\n commandProblem(\n ProblemCode.LogcatFailed,\n \"input.logs.tail\",\n \"The log tail count must be a positive integer.\",\n \"Use --tail with a value of at least 1.\",\n context.commandId,\n ),\n );\n return finish<LogsData>(context, null, problems);\n }\n if (options.tail !== undefined && options.since !== undefined) {\n problems.push(\n commandProblem(\n ProblemCode.LogcatFailed,\n \"input.logs.window\",\n \"Only one log start window can be selected.\",\n \"Use either --tail or --since, not both.\",\n context.commandId,\n ),\n );\n return finish<LogsData>(context, null, problems);\n }\n const maxRecords = options.maxRecords ?? 2_000;\n if (!Number.isSafeInteger(maxRecords) || maxRecords < 1) {\n problems.push(\n commandProblem(\n ProblemCode.LogcatFailed,\n \"input.logs.max-records\",\n \"The log record limit must be a positive integer.\",\n \"Use --max-records with a value of at least 1.\",\n context.commandId,\n ),\n );\n return finish<LogsData>(context, null, problems);\n }\n const records: LogRecord[] = [];\n const findings: LogsData[\"findings\"] = [];\n const findingCodes = new Set<string>();\n let dropped = 0;\n const lines = new TextLineBuffer((raw) => {\n const safeRaw = redactText(raw).value;\n const parsed = parseLogcatThreadtimeLine(safeRaw);\n const record: LogRecord = {\n raw: safeRaw,\n parsed: parsed !== undefined,\n message: parsed?.message ?? safeRaw,\n ...(parsed === undefined\n ? {}\n : { priority: parsed.priority, tag: parsed.tag, pid: parsed.pid, tid: parsed.tid }),\n };\n records.push(record);\n while (records.length > maxRecords) {\n records.shift();\n dropped += 1;\n }\n const finding = classifyLogRecord(parsed, safeRaw);\n if (finding !== undefined && !findingCodes.has(finding.code)) {\n findingCodes.add(finding.code);\n findings.push({\n ...finding,\n message: record.message,\n ...(record.priority === undefined ? {} : { priority: record.priority }),\n ...(record.tag === undefined ? {} : { tag: record.tag }),\n });\n context.bus.emit({\n type: \"log.problem\",\n source: \"logcat\",\n severity: \"error\",\n message: finding.summary,\n correlation,\n data: {\n code: finding.code,\n detail: finding.detail,\n evidence: record.message,\n ...(record.priority === undefined ? {} : { priority: record.priority }),\n ...(record.tag === undefined ? {} : { tag: record.tag }),\n },\n });\n }\n context.bus.emit({\n type: \"log.record\",\n source: \"logcat\",\n severity: streamSeverity(parsed),\n message: record.message,\n correlation,\n data: {\n raw: record.raw,\n parsed: record.parsed,\n ...(record.priority === undefined ? {} : { priority: record.priority }),\n ...(record.tag === undefined ? {} : { tag: record.tag }),\n ...(record.pid === undefined ? {} : { pid: record.pid }),\n ...(record.tid === undefined ? {} : { tid: record.tid }),\n },\n });\n options.onLine?.(safeRaw);\n });\n const runner = dependencies.runner ?? runProcess;\n const selectorArgs =\n target.transportId === undefined ? [\"-s\", target.serial] : [\"-t\", target.transportId];\n const processResult = await runner({\n executable,\n args: [\n ...(config.adbHost === undefined ? [] : [\"-H\", config.adbHost]),\n ...(config.adbPort === undefined ? [] : [\"-P\", String(config.adbPort)]),\n ...selectorArgs,\n \"logcat\",\n \"-v\",\n \"threadtime\",\n ...buffers.flatMap((buffer) => [\"-b\", buffer]),\n ...(options.tail === undefined && options.since === undefined\n ? options.dump\n ? [\"-d\"]\n : []\n : [options.dump ? \"-t\" : \"-T\", String(options.tail ?? options.since)]),\n ...(resolvedUid === undefined ? [] : [`--uid=${String(resolvedUid)}`]),\n ...(resolvedPid === undefined ? [] : [`--pid=${String(resolvedPid)}`]),\n ...filters,\n ],\n ...(signal === undefined ? {} : { signal }),\n maxBufferBytes: 4 * 1024 * 1024,\n onStdoutChunk: (chunk) => lines.push(chunk),\n onStderrChunk: (chunk) => lines.push(chunk),\n });\n lines.flush();\n if (processResult.aborted && signal?.aborted === true) {\n problems.push(\n commandProblem(\n ProblemCode.OperationInterrupted,\n \"logcat.interrupted\",\n \"Log streaming was interrupted.\",\n \"ADB Ready stopped its owned logcat process safely.\",\n context.commandId,\n ),\n );\n } else if (!processSucceeded(processResult)) {\n problems.push(\n commandProblem(\n ProblemCode.LogcatFailed,\n \"logcat.exit\",\n \"Logcat failed for the selected target.\",\n `The process exited with ${processResult.exitCode === null ? String(processResult.signal) : String(processResult.exitCode)}.`,\n context.commandId,\n ),\n );\n }\n return finish(\n context,\n {\n adbPath: redactedPath(executable),\n selected,\n ...(options.packageName === undefined ? {} : { packageName: options.packageName }),\n ...(resolvedPid === undefined ? {} : { pid: resolvedPid }),\n ...(resolvedUid === undefined ? {} : { uid: resolvedUid }),\n buffers,\n filters,\n records,\n findings,\n dropped,\n process: {\n exitCode: processResult.exitCode,\n signal: processResult.signal,\n durationMs: processResult.durationMs,\n stdoutTruncated: processResult.stdoutTruncated,\n stderrTruncated: processResult.stderrTruncated,\n },\n },\n problems,\n );\n}\n\nexport interface DevCommand {\n executable: string;\n args: string[];\n cwd?: string;\n env?: Record<string, string>;\n}\n\nexport interface DevOptions {\n cwd: string;\n preset?: DevPreset;\n packageManager?: PackageManagerName;\n command?: DevCommand;\n reversePorts?: readonly DevPort[];\n cleanupPorts?: boolean;\n logs?: boolean;\n journal?: {\n maxEntries?: number;\n maxBytes?: number;\n sources?: readonly string[];\n minimumSeverity?: \"debug\" | \"error\" | \"info\" | \"warning\";\n redaction?: {\n additionalLiterals?: readonly string[];\n };\n };\n childStdin?: \"ignore\" | \"inherit\";\n onChildLine?: (stream: \"stderr\" | \"stdout\", line: string) => void;\n hooks?: Partial<Record<DevHookEvent, readonly DevHook[]>>;\n watch?: boolean;\n watchIntervalMs?: number;\n recovery?: RecoveryPolicyInput;\n sessionStore?: false | SessionStoreOptions;\n}\n\nexport interface DevData {\n sessionId: string;\n status: \"completed\" | \"failed\" | \"planned\";\n adbPath: string;\n selected: SelectedTarget;\n project: {\n root: string;\n name?: string;\n };\n preset: DevPreset;\n packageManager?: {\n name: PackageManagerName;\n source: NonNullable<ProjectDetection[\"packageManager\"][\"source\"]>;\n };\n ports: {\n requested: Array<{ device: string; host: string }>;\n created: Array<{ device: string; host: string }>;\n reused: Array<{ device: string; host: string }>;\n cleaned: boolean;\n };\n command: {\n executable: string;\n args: string[];\n cwd: string;\n envKeys: string[];\n };\n child?: {\n exitCode: number | null;\n signal: NodeJS.Signals | null;\n durationMs: number;\n stdoutTruncated: boolean;\n stderrTruncated: boolean;\n };\n plan?: OperationPlan;\n journal: EventJournalSnapshot;\n hooks: {\n completed: number;\n failed: number;\n };\n recovery: SessionWatchSummary;\n}\n\nasync function regularFile(file: string): Promise<boolean> {\n try {\n return (await stat(file)).isFile();\n } catch {\n return false;\n }\n}\n\nfunction directPackageCommand(\n manager: PackageManagerName,\n executable: string,\n binary: string,\n args: readonly string[],\n): DevCommand {\n if (manager === \"npm\") {\n return { executable, args: [\"exec\", \"--\", binary, ...args] };\n }\n if (manager === \"pnpm\") {\n return { executable, args: [\"exec\", binary, ...args] };\n }\n if (manager === \"bun\") {\n return { executable, args: [\"x\", binary, ...args] };\n }\n return { executable, args: [binary, ...args] };\n}\n\nasync function resolveDevCommand(\n preset: DevPreset,\n project: ProjectDetection,\n options: DevOptions,\n dependencies: CommandDependencies,\n): Promise<DevCommand | undefined> {\n if (options.command !== undefined) return options.command;\n if (preset === \"custom\") return undefined;\n if (preset === \"gradle\") {\n const wrapperJar = path.join(project.root, \"gradle\", \"wrapper\", \"gradle-wrapper.jar\");\n const locate = dependencies.locateExecutable ?? locateExecutable;\n const java = await locate(\"java\");\n if (java !== undefined && (await regularFile(wrapperJar))) {\n return {\n executable: java,\n args: [\"-classpath\", wrapperJar, \"org.gradle.wrapper.GradleWrapperMain\", \"installDebug\"],\n };\n }\n const wrapper = path.join(\n project.root,\n process.platform === \"win32\" ? \"gradlew.bat\" : \"gradlew\",\n );\n return (await regularFile(wrapper))\n ? { executable: wrapper, args: [\"installDebug\"] }\n : undefined;\n }\n const manager = project.packageManager;\n if (manager.name === undefined || manager.executable === undefined) return undefined;\n const script = preset === \"expo\" ? \"start\" : \"android\";\n const frameworkArgs = preset === \"expo\" ? [\"--android\"] : [];\n if (project.packageJson?.scripts[script] !== undefined) {\n return {\n ...packageScriptCommand(manager.name, manager.executable, script, frameworkArgs),\n };\n }\n return directPackageCommand(\n manager.name,\n manager.executable,\n preset === \"expo\" ? \"expo\" : \"react-native\",\n preset === \"expo\" ? [\"start\", \"--android\"] : [\"run-android\"],\n );\n}\n\nfunction normalizeDevPorts(\n ports: readonly DevPort[],\n commandId: string,\n): { mappings: Array<{ device: string; host: string }>; problems: Problem[] } {\n const mappings: Array<{ device: string; host: string }> = [];\n const problems: Problem[] = [];\n const seen = new Set<string>();\n for (const port of ports) {\n const device = tcpEndpoint(port.device);\n const host = tcpEndpoint(port.host ?? port.device);\n if (device === undefined) {\n problems.push(portInputProblem(\"device\", port.device, commandId));\n continue;\n }\n if (host === undefined) {\n problems.push(portInputProblem(\"host\", port.host, commandId));\n continue;\n }\n const key = `${device}\\0${host}`;\n if (!seen.has(key)) {\n seen.add(key);\n mappings.push({ device, host });\n }\n }\n return { mappings, problems };\n}\n\nfunction streamSeverity(\n priority: ReturnType<typeof parseLogcatThreadtimeLine>,\n): \"debug\" | \"error\" | \"info\" | \"warning\" {\n if (priority?.priority === \"E\" || priority?.priority === \"F\" || priority?.priority === \"A\") {\n return \"error\";\n }\n if (priority?.priority === \"W\") return \"warning\";\n if (priority?.priority === \"D\" || priority?.priority === \"V\") return \"debug\";\n return \"info\";\n}\n\nexport async function runDev(\n options: DevOptions,\n config: CommandConfig = {},\n dependencies: CommandDependencies = {},\n signal?: AbortSignal,\n): Promise<CommandExecution<DevData>> {\n const bus = dependencies.bus ?? new EventBus(dependencies.clock);\n const idFactory = dependencies.idFactory ?? randomUUID;\n const sessionId = idFactory();\n const journal = new EventJournal(bus, options.journal);\n const context = createContext(\"dev\", { ...dependencies, bus, idFactory });\n const problems: Problem[] = [];\n const stateMachine = new SessionStateMachine(dependencies.clock);\n const transition = (to: SessionState, reason: string): void => {\n if (!stateMachine.canTransition(to)) return;\n const state = stateMachine.transition(to, reason);\n bus.emit({\n type: \"session.state.changed\",\n source: \"session\",\n severity: to === \"failed\" ? \"error\" : to === \"degraded\" ? \"warning\" : \"info\",\n message: `Development session is ${to}`,\n correlation: { commandId: context.commandId, sessionId },\n data: { from: state.from, to: state.to, reason: state.reason },\n });\n };\n let recorder: SessionRecorder | undefined;\n if (options.sessionStore !== undefined && options.sessionStore !== false && !config.dryRun) {\n try {\n recorder = await SessionRecorder.create(\n bus,\n {\n sessionId,\n command: \"dev\",\n startedAt: (dependencies.clock ?? (() => new Date()))().toISOString(),\n },\n options.sessionStore,\n );\n } catch {\n problems.push(\n commandProblem(\n ProblemCode.SessionPersistenceFailed,\n \"session.persistence\",\n \"Session history could not be started.\",\n \"The development session can continue, but this run will not be available afterward.\",\n context.commandId,\n ),\n );\n }\n }\n const complete = async (\n data: Omit<DevData, \"journal\"> | null,\n ): Promise<CommandExecution<DevData>> => {\n if (problems.some(({ severity }) => severity === \"error\")) {\n transition(\n \"failed\",\n problems.find(({ severity }) => severity === \"error\")?.summary ?? \"failed\",\n );\n }\n transition(\"stopping\", \"finalizing owned session resources\");\n transition(\"ended\", \"session command finalized\");\n bus.emit({\n type: \"session.ended\",\n source: \"session\",\n severity: problems.some(({ severity }) => severity === \"error\") ? \"error\" : \"info\",\n message: \"Development session ended\",\n correlation: { commandId: context.commandId, sessionId },\n });\n const execution = finish<DevData>(context, data as DevData | null, problems);\n const snapshot = journal.close();\n if (execution.result.data !== null) execution.result.data.journal = snapshot;\n if (recorder !== undefined) {\n const targetIdentity =\n data?.selected.target.hardwareSerial ?? data?.selected.transport.serial;\n const persisted = await recorder.finish({\n status: execution.result.problems.some(\n ({ code }) => code === ProblemCode.OperationInterrupted,\n )\n ? \"interrupted\"\n : execution.result.ok\n ? \"completed\"\n : \"failed\",\n finishedAt: (dependencies.clock ?? (() => new Date()))().toISOString(),\n problems: execution.result.problems,\n ...(targetIdentity === undefined ? {} : { targetIdentity }),\n ...(data?.project.name === undefined ? {} : { projectName: data.project.name }),\n ...(data?.preset === undefined ? {} : { preset: data.preset }),\n });\n if (!persisted.ok) {\n execution.result.problems.push(\n commandProblem(\n ProblemCode.SessionPersistenceFailed,\n \"session.persistence\",\n persisted.message,\n \"The development session completed, but its local history is incomplete.\",\n context.commandId,\n ),\n );\n }\n }\n return execution;\n };\n const correlation = { commandId: context.commandId, sessionId };\n bus.emit({\n type: \"session.started\",\n source: \"session\",\n severity: \"info\",\n message: \"Development session started\",\n correlation,\n });\n transition(\"acquiring-target\", \"discovering and selecting one Android target\");\n\n const executable = await resolveAdb(context, config, dependencies);\n if (executable === undefined) {\n problems.push(adbNotFoundProblem(correlation, config.adbPath));\n return await complete(null);\n }\n const discoveryClient = new AdbClient({\n executable,\n bus,\n correlation,\n ...(config.adbHost === undefined ? {} : { host: config.adbHost }),\n ...(config.adbPort === undefined ? {} : { port: config.adbPort }),\n ...(config.timeoutMs === undefined ? {} : { timeoutMs: config.timeoutMs }),\n ...(dependencies.runner === undefined ? {} : { runner: dependencies.runner }),\n idFactory,\n });\n const devices = await discoveryClient.devices(signal);\n if (!processSucceeded(devices.process)) {\n problems.push(operationProblem(\"devices\", devices, context.commandId));\n return await complete(null);\n }\n const inspection = await inspectTargets(\n discoveryClient,\n devices.value,\n context.commandId,\n signal,\n );\n if (inspection.interruption !== undefined) {\n problems.push(inspection.interruption);\n return await complete(null);\n }\n problems.push(...inspection.optionalProblems);\n const selection = selectTarget(inspection.targets, {\n ...(config.targetSelector === undefined ? {} : { selector: config.targetSelector }),\n ...(config.targetTransportId === undefined ? {} : { transportId: config.targetTransportId }),\n ...(config.targetAliases === undefined ? {} : { aliases: config.targetAliases }),\n ...(config.rememberedSerial === undefined ? {} : { rememberedSerial: config.rememberedSerial }),\n ...(config.rememberedHardwareSerial === undefined\n ? {}\n : { rememberedHardwareSerial: config.rememberedHardwareSerial }),\n ...(config.rememberedOnly === undefined ? {} : { rememberedOnly: config.rememberedOnly }),\n });\n if (selection.kind !== \"selected\") {\n problems.push(targetSelectionProblem(selection, correlation));\n return await complete(null);\n }\n let selected = selection.selection;\n let target = targetForAdb(selected);\n recorder?.addPrivateLiteral(selected.transport.serial);\n recorder?.addPrivateLiteral(selected.target.hardwareSerial);\n recorder?.addPrivateLiteral(selected.target.id);\n bus.emit({\n type: \"target.selected\",\n source: \"target\",\n severity: \"info\",\n message: `Selected ${selected.transport.serial}`,\n correlation: { ...correlation, targetId: selected.target.id },\n data: { serial: selected.transport.serial, reason: selected.reason },\n });\n transition(\"preparing-ports\", \"target selected and project configuration resolved\");\n\n const project = await (dependencies.detectProject ?? detectProject)({\n cwd: options.cwd,\n ...(options.packageManager === undefined\n ? {}\n : { explicitPackageManager: options.packageManager }),\n });\n recorder?.addPrivateLiteral(project.root);\n const preset = options.preset ?? (options.command === undefined ? project.preset : \"custom\");\n if (preset === undefined) {\n problems.push(\n commandProblem(\n ProblemCode.DevPresetNotFound,\n \"input.dev.preset\",\n \"ADB Ready could not determine a development preset.\",\n \"Choose --preset expo, react-native, gradle, or pass a custom command after --.\",\n context.commandId,\n ),\n );\n return await complete(null);\n }\n if (\n project.packageManager.conflicts.length > 0 &&\n (preset === \"expo\" || preset === \"react-native\")\n ) {\n problems.push(\n commandProblem(\n ProblemCode.PackageManagerConflict,\n \"input.dev.package-manager\",\n \"Multiple package-manager signals conflict.\",\n \"Declare packageManager in package.json, use --package-manager, or remove stale metadata or lockfiles.\",\n context.commandId,\n [{ source: \"project\", field: \"candidates\", value: project.packageManager.conflicts }],\n ),\n );\n return await complete(null);\n }\n if (\n (preset === \"expo\" || preset === \"react-native\") &&\n (project.packageManager.name === undefined || project.packageManager.executable === undefined)\n ) {\n problems.push(\n commandProblem(\n ProblemCode.PackageManagerNotFound,\n \"environment.package-manager\",\n \"The project's package manager is unavailable.\",\n \"Install the declared package manager or select an available one with --package-manager.\",\n context.commandId,\n ),\n );\n return await complete(null);\n }\n const childCommand = await resolveDevCommand(preset, project, options, dependencies);\n if (childCommand === undefined || childCommand.executable.trim() === \"\") {\n problems.push(\n commandProblem(\n ProblemCode.DevCommandNotFound,\n \"input.dev.command\",\n \"No runnable development command was found.\",\n \"Configure an executable and argument array or pass a custom command after --.\",\n context.commandId,\n ),\n );\n return await complete(null);\n }\n const defaultPorts = preset === \"expo\" || preset === \"react-native\" ? [{ device: 8081 }] : [];\n const normalizedPorts = normalizeDevPorts(\n options.reversePorts ?? defaultPorts,\n context.commandId,\n );\n problems.push(...normalizedPorts.problems);\n if (normalizedPorts.problems.length > 0) return await complete(null);\n\n const targetCorrelation = { ...correlation, targetId: selected.target.id };\n const client = new AdbClient({\n executable,\n bus,\n correlation: targetCorrelation,\n ...(config.adbHost === undefined ? {} : { host: config.adbHost }),\n ...(config.adbPort === undefined ? {} : { port: config.adbPort }),\n ...(config.timeoutMs === undefined ? {} : { timeoutMs: config.timeoutMs }),\n ...(dependencies.runner === undefined ? {} : { runner: dependencies.runner }),\n idFactory,\n });\n const listed = await client.listPortMappings(target, \"reverse\", signal);\n if (!processSucceeded(listed.process)) {\n problems.push(operationProblem(\"reverse-list\", listed, context.commandId));\n return await complete(null);\n }\n const existing = listed.value.map((mapping) => normalizePortMapping(\"reverse\", mapping));\n const created: Array<{ device: string; host: string }> = [];\n const reused: Array<{ device: string; host: string }> = [];\n for (const requested of normalizedPorts.mappings) {\n const atDevicePort = existing.find((mapping) => mapping.device === requested.device);\n if (atDevicePort === undefined) continue;\n if (atDevicePort.host === requested.host) {\n reused.push(requested);\n } else {\n problems.push(\n commandProblem(\n ProblemCode.PortMappingConflict,\n \"adb.port.conflict\",\n `Device port ${requested.device} is already mapped to ${atDevicePort.host}.`,\n \"ADB Ready will not replace a mapping owned by another tool or session.\",\n context.commandId,\n ),\n );\n }\n }\n if (problems.some(({ severity }) => severity === \"error\")) return await complete(null);\n const pending = normalizedPorts.mappings.filter(\n (mapping) =>\n !reused.some((item) => item.device === mapping.device && item.host === mapping.host),\n );\n const commandCwd = path.resolve(project.root, childCommand.cwd ?? \".\");\n const commandData = {\n executable: redactedPath(childCommand.executable),\n args: childCommand.args.map((argument) => redactText(argument).value),\n cwd: redactedPath(commandCwd),\n envKeys: [...new Set([\"ANDROID_SERIAL\", ...Object.keys(childCommand.env ?? {})])].sort(),\n };\n const baseData = () => ({\n sessionId,\n adbPath: redactedPath(executable),\n selected,\n project: {\n root: redactedPath(project.root),\n ...(project.packageJson?.name === undefined ? {} : { name: project.packageJson.name }),\n },\n preset,\n ...(project.packageManager.name === undefined || project.packageManager.source === undefined\n ? {}\n : {\n packageManager: {\n name: project.packageManager.name,\n source: project.packageManager.source,\n },\n }),\n command: commandData,\n });\n let recoverySummary: SessionWatchSummary = {\n checks: 0,\n degradations: 0,\n recoveryAttempts: 0,\n recoveries: 0,\n targetChanges: 0,\n failed: false,\n };\n const hookRuns: HookRun[] = [];\n const hookSummary = (): DevData[\"hooks\"] => ({\n completed: hookRuns.filter(({ ok }) => ok).length,\n failed: hookRuns.filter(({ ok }) => !ok).length,\n });\n const hookEnvironment = () => ({\n ANDROID_SERIAL: selected.transport.serial,\n ADB_READY_SESSION_ID: sessionId,\n ADB_READY_PRESET: preset,\n ADB_READY_TARGET_ID: selected.target.id,\n });\n const runHookPhase = async (\n event: DevHookEvent,\n extraEnvironment: Record<string, string> = {},\n useSessionSignal = true,\n ): Promise<boolean> => {\n const runs = await runHooks({\n hooks: options.hooks ?? {},\n event,\n projectRoot: project.root,\n environment: { ...hookEnvironment(), ...extraEnvironment },\n bus,\n correlation: targetCorrelation,\n ...(dependencies.runner === undefined ? {} : { runner: dependencies.runner }),\n ...(useSessionSignal && signal !== undefined ? { signal } : {}),\n });\n hookRuns.push(...runs);\n for (const run of runs) {\n if (run.ok || run.failure === \"ignore\") continue;\n if (run.result.aborted && signal?.aborted === true) {\n if (!problems.some(({ code }) => code === ProblemCode.OperationInterrupted)) {\n problems.push(\n commandProblem(\n ProblemCode.OperationInterrupted,\n \"child.interrupted\",\n \"The development session was interrupted.\",\n `The ${run.event} hook and owned session resources were stopped safely.`,\n context.commandId,\n ),\n );\n }\n continue;\n }\n problems.push({\n code: ProblemCode.HookFailed,\n category: \"child.hook\",\n severity: run.failure === \"warn\" ? \"warning\" : \"error\",\n summary: `${run.event} hook ${String(run.index + 1)} failed.`,\n detail: run.result.timedOut\n ? \"The hook exceeded its configured timeout.\"\n : run.result.spawnError === undefined\n ? `The hook exited with ${run.result.exitCode === null ? String(run.result.signal) : String(run.result.exitCode)}.`\n : \"The hook executable could not be started.\",\n retryable: true,\n evidence: [\n { source: `hook.${run.event}`, field: \"exitCode\", value: run.result.exitCode },\n { source: `hook.${run.event}`, field: \"signal\", value: run.result.signal },\n { source: `hook.${run.event}`, field: \"timedOut\", value: run.result.timedOut },\n ],\n actions: [],\n correlation: {\n ...targetCorrelation,\n operationId: `hook:${run.event}:${String(run.index)}`,\n },\n });\n }\n return !runs.some(({ failure, ok }) => !ok && failure === \"fail\");\n };\n const hookPlanSteps = (event: DevHookEvent) =>\n (options.hooks?.[event] ?? []).map((hook, index) => ({\n id: `hook-${event}-${String(index + 1)}`,\n title: `Run ${event} hook ${String(index + 1)}`,\n risk: \"open-world\" as const,\n executable: redactText(hook.run[0]).value,\n args: hook.run.slice(1).map((argument) => redactText(argument).value),\n }));\n if (config.dryRun) {\n const selectorArgs =\n target.transportId === undefined ? [\"-s\", target.serial] : [\"-t\", target.transportId];\n const steps = [\n ...hookPlanSteps(\"beforeDev\"),\n ...hookPlanSteps(\"onTargetReady\"),\n ...pending.map((mapping, index) => ({\n id: `reverse-${String(index + 1)}`,\n title: `Map device ${mapping.device} to host ${mapping.host}`,\n risk: \"device-reversible\" as const,\n executable: redactedPath(executable),\n args: [...selectorArgs, \"reverse\", \"--no-rebind\", mapping.device, mapping.host],\n })),\n ...hookPlanSteps(\"onPortsReady\"),\n {\n id: \"start-child\",\n title: `Start ${preset} development command`,\n risk: \"open-world\" as const,\n executable: commandData.executable,\n args: commandData.args,\n },\n ...hookPlanSteps(\"onReady\"),\n ...hookPlanSteps(\"onChildExit\"),\n ...hookPlanSteps(\"finally\"),\n ];\n bus.emit({\n type: \"session.planned\",\n source: \"session\",\n severity: \"info\",\n message: \"Development session plan is ready\",\n correlation: targetCorrelation,\n });\n return await complete({\n ...baseData(),\n status: \"planned\",\n ports: {\n requested: normalizedPorts.mappings,\n created,\n reused,\n cleaned: false,\n },\n hooks: hookSummary(),\n recovery: recoverySummary,\n plan: { schemaVersion: SCHEMA_VERSION, dryRun: true, steps },\n });\n }\n\n let cleaned = false;\n const failedData = (): Omit<DevData, \"journal\"> => ({\n ...baseData(),\n status: \"failed\",\n ports: {\n requested: normalizedPorts.mappings,\n created,\n reused,\n cleaned,\n },\n hooks: hookSummary(),\n recovery: recoverySummary,\n });\n\n if (!(await runHookPhase(\"beforeDev\")) || !(await runHookPhase(\"onTargetReady\"))) {\n await runHookPhase(\"finally\", {}, false);\n return await complete(failedData());\n }\n\n for (const mapping of pending) {\n const added = await client.addPortMapping(\n target,\n \"reverse\",\n mapping.device,\n mapping.host,\n signal,\n );\n if (!processSucceeded(added.process)) {\n problems.push(operationProblem(\"reverse-add\", added, context.commandId));\n break;\n }\n created.push(mapping);\n }\n if (!problems.some(({ severity }) => severity === \"error\")) {\n const verified = await client.listPortMappings(target, \"reverse\", signal);\n if (!processSucceeded(verified.process)) {\n problems.push(operationProblem(\"reverse-verify\", verified, context.commandId));\n } else {\n const after = verified.value.map((mapping) => normalizePortMapping(\"reverse\", mapping));\n for (const mapping of normalizedPorts.mappings) {\n if (!after.some((item) => item.device === mapping.device && item.host === mapping.host)) {\n problems.push(\n commandProblem(\n ProblemCode.PortMappingVerificationFailed,\n \"adb.port.verification\",\n `Reverse mapping ${mapping.device} to ${mapping.host} was not verified.`,\n \"ADB reported success but the mapping is absent from the follow-up list.\",\n context.commandId,\n ),\n );\n }\n }\n }\n }\n\n const cleanup = async (): Promise<void> => {\n if (options.cleanupPorts === false || created.length === 0) return;\n bus.emit({\n type: \"session.stopping\",\n source: \"session\",\n severity: \"info\",\n message: \"Cleaning session-owned port mappings\",\n correlation: targetCorrelation,\n });\n let removalSucceeded = true;\n for (const mapping of created) {\n const removed = await client.removePortMapping(target, \"reverse\", mapping.device);\n removalSucceeded = processSucceeded(removed.process) && removalSucceeded;\n }\n const remaining = await client.listPortMappings(target, \"reverse\");\n cleaned =\n removalSucceeded &&\n processSucceeded(remaining.process) &&\n !remaining.value\n .map((mapping) => normalizePortMapping(\"reverse\", mapping))\n .some((mapping) => created.some((item) => item.device === mapping.device));\n if (!cleaned) {\n problems.push({\n code: ProblemCode.PortMappingCleanupFailed,\n category: \"adb.port.cleanup\",\n severity: \"error\",\n summary: \"Session-owned reverse mappings could not be fully removed.\",\n detail:\n \"ADB Ready attempted removal and verified the mapping list, but owned mappings remain or ADB failed.\",\n retryable: true,\n evidence: [\n {\n source: \"adb.reverse\",\n field: \"ownedMappings\",\n value: created.map(({ device, host }) => ({ device, host })),\n },\n ],\n actions: [],\n correlation: targetCorrelation,\n });\n }\n };\n if (problems.some(({ severity }) => severity === \"error\")) {\n await cleanup();\n await runHookPhase(\"finally\", {}, false);\n return await complete(failedData());\n }\n\n bus.emit({\n type: \"port.verified\",\n source: \"port\",\n severity: \"info\",\n message: `${String(normalizedPorts.mappings.length)} reverse mapping(s) ready`,\n correlation: targetCorrelation,\n data: { created: created.length, reused: reused.length },\n });\n transition(\"starting-child\", \"ports verified and development command prepared\");\n if (!(await runHookPhase(\"onPortsReady\"))) {\n await cleanup();\n await runHookPhase(\"finally\", {}, false);\n return await complete(failedData());\n }\n const runner = dependencies.runner ?? runProcess;\n let activeLogController: AbortController | undefined;\n let activeLogPromise: Promise<ProcessResult> | undefined;\n let logStreamFailed = false;\n const logFindings = new Map<string, LogFinding & { evidence: string }>();\n const abortLogs = () => activeLogController?.abort();\n signal?.addEventListener(\"abort\", abortLogs, { once: true });\n const startLogStream = (): void => {\n if (options.logs === false || signal?.aborted === true) return;\n const controller = new AbortController();\n activeLogController = controller;\n logStreamFailed = false;\n const logLines = new TextLineBuffer((raw) => {\n const parsed = parseLogcatThreadtimeLine(raw);\n const safeRaw = redactText(raw).value;\n const safeMessage = parsed === undefined ? safeRaw : redactText(parsed.message).value;\n bus.emit({\n type: \"log.record\",\n source: \"logcat\",\n severity: streamSeverity(parsed),\n message: safeMessage,\n correlation: { ...correlation, targetId: selected.target.id },\n data: {\n raw: safeRaw,\n parsed: parsed !== undefined,\n ...(parsed === undefined\n ? {}\n : { tag: parsed.tag, pid: parsed.pid, tid: parsed.tid, priority: parsed.priority }),\n },\n });\n const finding = classifyLogRecord(parsed, safeRaw);\n if (finding !== undefined && !logFindings.has(finding.code)) {\n logFindings.set(finding.code, { ...finding, evidence: safeMessage });\n bus.emit({\n type: \"log.problem\",\n source: \"logcat\",\n severity: \"error\",\n message: finding.summary,\n correlation: { ...correlation, targetId: selected.target.id },\n data: { code: finding.code, detail: finding.detail, evidence: safeMessage },\n });\n }\n });\n const selectorArgs =\n target.transportId === undefined ? [\"-s\", target.serial] : [\"-t\", target.transportId];\n const promise = runner({\n executable,\n args: [\n ...(config.adbHost === undefined ? [] : [\"-H\", config.adbHost]),\n ...(config.adbPort === undefined ? [] : [\"-P\", String(config.adbPort)]),\n ...selectorArgs,\n \"logcat\",\n \"-v\",\n \"threadtime\",\n \"ReactNativeJS:V\",\n \"ReactNative:V\",\n \"AndroidRuntime:E\",\n \"*:S\",\n ],\n signal: controller.signal,\n maxBufferBytes: 256 * 1024,\n onStdoutChunk: (chunk) => logLines.push(chunk),\n onStderrChunk: (chunk) => logLines.push(chunk),\n })\n .then((result) => {\n if (!controller.signal.aborted && activeLogController === controller) {\n logStreamFailed = true;\n bus.emit({\n type: \"log.stream.failed\",\n source: \"logcat\",\n severity: \"warning\",\n message: \"The target log stream ended unexpectedly.\",\n correlation: { ...correlation, targetId: selected.target.id },\n data: { exitCode: result.exitCode, signal: result.signal },\n });\n }\n return result;\n })\n .finally(() => logLines.flush());\n activeLogPromise = promise;\n };\n const stopLogStream = async (): Promise<void> => {\n const controller = activeLogController;\n const promise = activeLogPromise;\n activeLogController = undefined;\n activeLogPromise = undefined;\n controller?.abort();\n if (promise !== undefined) await promise;\n };\n startLogStream();\n const childStdout = new TextLineBuffer((line) => {\n const safe = redactText(line).value;\n bus.emit({\n type: \"child.stdout\",\n source: \"child.stdout\",\n severity: \"info\",\n message: safe,\n correlation: targetCorrelation,\n data: { raw: safe },\n });\n options.onChildLine?.(\"stdout\", safe);\n });\n const childStderr = new TextLineBuffer((line) => {\n const safe = redactText(line).value;\n bus.emit({\n type: \"child.stderr\",\n source: \"child.stderr\",\n severity: \"info\",\n message: safe,\n correlation: targetCorrelation,\n data: { raw: safe },\n });\n options.onChildLine?.(\"stderr\", safe);\n });\n bus.emit({\n type: \"child.started\",\n source: \"child\",\n severity: \"info\",\n message: `Starting ${preset} development command`,\n correlation: targetCorrelation,\n data: commandData,\n });\n const childController = new AbortController();\n if (signal?.aborted === true) childController.abort();\n const abortChild = () => childController.abort();\n signal?.addEventListener(\"abort\", abortChild, { once: true });\n const childPromise = runner({\n executable: childCommand.executable,\n args: childCommand.args,\n cwd: commandCwd,\n env: { ...childCommand.env, ANDROID_SERIAL: selected.transport.serial },\n signal: childController.signal,\n stdin: options.childStdin ?? \"ignore\",\n maxBufferBytes: 4 * 1024 * 1024,\n onStdoutChunk: (chunk) => childStdout.push(chunk),\n onStderrChunk: (chunk) => childStderr.push(chunk),\n });\n const readyHooksSucceeded = await runHookPhase(\"onReady\");\n if (!readyHooksSucceeded) childController.abort();\n if (readyHooksSucceeded) transition(\"ready\", \"target, ports, logs, and child are ready\");\n\n const watchController = new AbortController();\n if (signal?.aborted === true || !readyHooksSucceeded) watchController.abort();\n const abortWatcher = () => watchController.abort();\n signal?.addEventListener(\"abort\", abortWatcher, { once: true });\n const observeSession = async (watchSignal: AbortSignal): Promise<SessionHealth> => {\n const state = await client.getState(target.serial, watchSignal);\n if (!processSucceeded(state.process) || state.value !== \"device\") {\n return {\n targetReady: false,\n logReady: options.logs === false || !logStreamFailed,\n targetSerial: target.serial,\n missingPorts: [...normalizedPorts.mappings],\n conflictingPorts: [],\n detail: `Target ${target.serial} is not ready.`,\n };\n }\n const mappings = await client.listPortMappings(target, \"reverse\", watchSignal);\n if (!processSucceeded(mappings.process)) {\n return {\n targetReady: true,\n logReady: options.logs === false || !logStreamFailed,\n targetSerial: target.serial,\n missingPorts: [...normalizedPorts.mappings],\n conflictingPorts: [],\n detail: \"Reverse mappings could not be inspected.\",\n };\n }\n const current = mappings.value.map((mapping) => normalizePortMapping(\"reverse\", mapping));\n const conflictingPorts = normalizedPorts.mappings.filter((requested) =>\n current.some(\n (mapping) => mapping.device === requested.device && mapping.host !== requested.host,\n ),\n );\n const missingPorts = normalizedPorts.mappings.filter(\n (requested) =>\n !current.some(\n (mapping) => mapping.device === requested.device && mapping.host === requested.host,\n ),\n );\n return {\n targetReady: true,\n logReady: options.logs === false || !logStreamFailed,\n targetSerial: target.serial,\n missingPorts,\n conflictingPorts,\n ...(conflictingPorts.length > 0\n ? { detail: \"A required device port is owned by another mapping.\" }\n : logStreamFailed\n ? { detail: \"The target log stream stopped unexpectedly.\" }\n : {}),\n };\n };\n const recoverSession = async (\n health: SessionHealth,\n _attempt: number,\n watchSignal: AbortSignal,\n ): Promise<{ changedTarget: boolean; detail?: string }> => {\n const previousSerial = target.serial;\n if (!health.targetReady) {\n const visible = await discoveryClient.devices(watchSignal);\n if (!processSucceeded(visible.process)) {\n return { changedTarget: false, detail: \"ADB target inventory is unavailable.\" };\n }\n const refreshed = await inspectTargets(\n discoveryClient,\n visible.value,\n context.commandId,\n watchSignal,\n );\n const remembered = selectTarget(refreshed.targets, {\n rememberedSerial: previousSerial,\n ...(selected.target.hardwareSerial === undefined\n ? {}\n : { rememberedHardwareSerial: selected.target.hardwareSerial }),\n rememberedOnly: true,\n });\n if (remembered.kind === \"selected\") {\n selected = remembered.selection;\n target = targetForAdb(selected);\n recorder?.addPrivateLiteral(selected.transport.serial);\n recorder?.addPrivateLiteral(selected.target.hardwareSerial);\n recorder?.addPrivateLiteral(selected.target.id);\n } else {\n const acquisition = planTargetAcquisition({\n remembered: {\n serial: previousSerial,\n ...(selected.target.hardwareSerial === undefined\n ? {}\n : { hardwareSerial: selected.target.hardwareSerial }),\n },\n services: refreshed.discovery.mdns.services,\n });\n if (acquisition.kind !== \"connect\") {\n return {\n changedTarget: false,\n detail:\n acquisition.kind === \"ambiguous\"\n ? \"More than one wireless endpoint matches the recovery request.\"\n : \"No safe endpoint is available for recovery.\",\n };\n }\n const safeCandidates = acquisition.candidates.filter(\n (candidate) =>\n candidate === previousSerial || selected.target.hardwareSerial !== undefined,\n );\n let recoveredSelection: SelectedTarget | undefined;\n for (const endpoint of safeCandidates) {\n recorder?.addPrivateLiteral(endpoint);\n const connected = await discoveryClient.connect(endpoint, watchSignal);\n if (\n !processSucceeded(connected.process) ||\n (connected.value.status !== \"connected\" &&\n connected.value.status !== \"already-connected\")\n ) {\n continue;\n }\n const verified = await discoveryClient.getState(endpoint, watchSignal);\n if (!processSucceeded(verified.process) || verified.value !== \"device\") continue;\n const hardware = await discoveryClient.getHardwareSerial(endpoint, watchSignal);\n const hardwareSerial = processSucceeded(hardware.process)\n ? normalizedHardwareSerial(hardware.value)\n : undefined;\n if (\n selected.target.hardwareSerial !== undefined &&\n hardwareSerial !== selected.target.hardwareSerial\n ) {\n continue;\n }\n const afterConnect = await discoveryClient.devices(watchSignal);\n if (!processSucceeded(afterConnect.process)) continue;\n const afterInspection = await inspectTargets(\n discoveryClient,\n afterConnect.value,\n context.commandId,\n watchSignal,\n );\n const result = selectTarget(afterInspection.targets, {\n rememberedSerial: endpoint,\n ...(selected.target.hardwareSerial === undefined\n ? {}\n : { rememberedHardwareSerial: selected.target.hardwareSerial }),\n rememberedOnly: true,\n });\n if (result.kind === \"selected\") {\n recoveredSelection = result.selection;\n break;\n }\n }\n if (recoveredSelection === undefined) {\n return { changedTarget: false, detail: \"The selected target could not be reconnected.\" };\n }\n selected = recoveredSelection;\n target = targetForAdb(selected);\n recorder?.addPrivateLiteral(selected.transport.serial);\n recorder?.addPrivateLiteral(selected.target.hardwareSerial);\n recorder?.addPrivateLiteral(selected.target.id);\n }\n }\n\n const listedAfterRecovery = await client.listPortMappings(target, \"reverse\", watchSignal);\n if (!processSucceeded(listedAfterRecovery.process)) {\n return { changedTarget: target.serial !== previousSerial, detail: \"Ports are unavailable.\" };\n }\n const currentMappings = listedAfterRecovery.value.map((mapping) =>\n normalizePortMapping(\"reverse\", mapping),\n );\n for (const mapping of normalizedPorts.mappings) {\n const occupying = currentMappings.find((item) => item.device === mapping.device);\n if (occupying !== undefined && occupying.host !== mapping.host) {\n return {\n changedTarget: target.serial !== previousSerial,\n detail: `Recovery refused to replace ${mapping.device}.`,\n };\n }\n if (occupying !== undefined) continue;\n const added = await client.addPortMapping(\n target,\n \"reverse\",\n mapping.device,\n mapping.host,\n watchSignal,\n );\n if (!processSucceeded(added.process)) {\n return {\n changedTarget: target.serial !== previousSerial,\n detail: `Recovery could not restore ${mapping.device}.`,\n };\n }\n if (!created.some((item) => item.device === mapping.device && item.host === mapping.host)) {\n created.push(mapping);\n }\n }\n if (target.serial !== previousSerial || health.logReady === false) {\n await stopLogStream();\n startLogStream();\n }\n return {\n changedTarget: target.serial !== previousSerial,\n detail:\n target.serial === previousSerial\n ? \"Session resources restored.\"\n : `Target transport changed to ${target.serial}.`,\n };\n };\n const watchPromise =\n options.watch === false || !readyHooksSucceeded\n ? Promise.resolve(recoverySummary)\n : watchSession({\n signal: watchController.signal,\n observe: observeSession,\n recover: recoverSession,\n ...(options.watchIntervalMs === undefined ? {} : { intervalMs: options.watchIntervalMs }),\n ...(options.recovery === undefined ? {} : { policy: options.recovery }),\n ...(dependencies.sleep === undefined ? {} : { sleep: dependencies.sleep }),\n onEvent: (event) => {\n if (event.type === \"session.degraded\") {\n transition(\"degraded\", event.detail ?? \"session health degraded\");\n } else if (event.type === \"recovery.started\") {\n transition(\"recovering\", `bounded recovery attempt ${String(event.attempt ?? 1)}`);\n } else if (event.type === \"recovery.completed\") {\n transition(\"ready\", event.detail ?? \"recovery independently verified\");\n } else if (event.type === \"recovery.failed\") {\n transition(\"degraded\", event.detail ?? \"recovery verification failed\");\n } else if (event.type === \"watch.failed\") {\n transition(\"failed\", event.detail ?? \"session watcher failed\");\n }\n bus.emit({\n type: event.type,\n source: \"recovery\",\n severity:\n event.type === \"watch.failed\" || event.type === \"recovery.failed\"\n ? \"error\"\n : event.type === \"session.degraded\"\n ? \"warning\"\n : \"info\",\n message: event.detail ?? event.type,\n correlation: { ...correlation, targetId: selected.target.id },\n data: {\n ...(event.attempt === undefined ? {} : { attempt: event.attempt }),\n ...(event.health === undefined\n ? {}\n : {\n health: {\n targetReady: event.health.targetReady,\n ...(event.health.logReady === undefined\n ? {}\n : { logReady: event.health.logReady }),\n targetSerial: event.health.targetSerial,\n missingPorts: event.health.missingPorts.map(({ device, host }) => ({\n device,\n host,\n })),\n conflictingPorts: event.health.conflictingPorts.map(({ device, host }) => ({\n device,\n host,\n })),\n ...(event.health.detail === undefined\n ? {}\n : { detail: event.health.detail }),\n },\n }),\n },\n });\n },\n });\n const firstCompletion = await Promise.race([\n childPromise.then(() => \"child\" as const),\n watchPromise.then((summary) =>\n summary.failed ? (\"watch-failed\" as const) : (\"watch-stopped\" as const),\n ),\n ]);\n if (firstCompletion === \"watch-failed\") childController.abort();\n const child = await childPromise;\n watchController.abort();\n recoverySummary = await watchPromise;\n signal?.removeEventListener(\"abort\", abortWatcher);\n signal?.removeEventListener(\"abort\", abortChild);\n childStdout.flush();\n childStderr.flush();\n await stopLogStream();\n signal?.removeEventListener(\"abort\", abortLogs);\n bus.emit({\n type: \"child.exited\",\n source: \"child\",\n severity: child.exitCode === 0 ? \"info\" : \"error\",\n message: `Development command exited ${child.exitCode === null ? `by ${String(child.signal)}` : `with ${String(child.exitCode)}`}`,\n correlation: targetCorrelation,\n data: { exitCode: child.exitCode, signal: child.signal, durationMs: child.durationMs },\n });\n await runHookPhase(\n \"onChildExit\",\n {\n ADB_READY_CHILD_EXIT_CODE: child.exitCode === null ? \"\" : String(child.exitCode),\n ADB_READY_CHILD_SIGNAL: child.signal ?? \"\",\n },\n false,\n );\n await cleanup();\n if (recoverySummary.failed) {\n problems.push(\n commandProblem(\n ProblemCode.SessionRecoveryFailed,\n \"session.recovery\",\n \"The development session could not be recovered safely.\",\n \"ADB Ready exhausted the bounded recovery budget and stopped its child process.\",\n context.commandId,\n [\n {\n source: \"session.watcher\",\n field: \"recoveryAttempts\",\n value: recoverySummary.recoveryAttempts,\n },\n {\n source: \"session.watcher\",\n field: \"lastHealth\",\n value:\n recoverySummary.lastHealth === undefined\n ? null\n : {\n targetReady: recoverySummary.lastHealth.targetReady,\n targetSerial: recoverySummary.lastHealth.targetSerial,\n missingPorts: recoverySummary.lastHealth.missingPorts.map(\n ({ device, host }) => ({\n device,\n host,\n }),\n ),\n conflictingPorts: recoverySummary.lastHealth.conflictingPorts.map(\n ({ device, host }) => ({ device, host }),\n ),\n ...(recoverySummary.lastHealth.detail === undefined\n ? {}\n : { detail: recoverySummary.lastHealth.detail }),\n },\n },\n ],\n ),\n );\n }\n for (const finding of logFindings.values()) {\n problems.push({\n code: finding.code,\n category: \"app.runtime\",\n severity: \"warning\",\n summary: finding.summary,\n detail: finding.detail,\n retryable: true,\n evidence: [{ source: \"logcat\", field: \"message\", value: finding.evidence }],\n actions: [\n {\n id: \"export_session_context\",\n title: `Export this session with adb-ready context ${sessionId}`,\n kind: \"command\",\n risk: \"read-only\",\n automatic: false,\n idempotent: true,\n command: { executable: \"adb-ready\", args: [\"context\", sessionId] },\n },\n ],\n correlation: { ...correlation, targetId: selected.target.id },\n });\n }\n if (child.aborted && signal?.aborted === true) {\n problems.push(\n commandProblem(\n ProblemCode.OperationInterrupted,\n \"child.interrupted\",\n \"The development session was interrupted.\",\n \"The owned child process and session-owned port mappings were stopped safely.\",\n context.commandId,\n ),\n );\n } else if (!processSucceeded(child) && readyHooksSucceeded && !recoverySummary.failed) {\n problems.push(\n commandProblem(\n ProblemCode.ChildProcessFailed,\n \"child.exit\",\n \"The development command failed.\",\n `The child exited with ${child.exitCode === null ? String(child.signal) : String(child.exitCode)}.`,\n context.commandId,\n [\n { source: \"child\", field: \"exitCode\", value: child.exitCode },\n { source: \"child\", field: \"signal\", value: child.signal },\n ],\n ),\n );\n }\n await runHookPhase(\"finally\", {}, false);\n const execution = await complete({\n ...baseData(),\n status: problems.some(({ severity }) => severity === \"error\") ? \"failed\" : \"completed\",\n ports: {\n requested: normalizedPorts.mappings,\n created,\n reused,\n cleaned,\n },\n child: {\n exitCode: child.exitCode,\n signal: child.signal,\n durationMs: child.durationMs,\n stdoutTruncated: child.stdoutTruncated,\n stderrTruncated: child.stderrTruncated,\n },\n hooks: hookSummary(),\n recovery: recoverySummary,\n });\n if (problems.some(({ code }) => code === ProblemCode.ChildProcessFailed)) {\n execution.exitCode = preservedChildExitCode(child) ?? execution.exitCode;\n }\n return execution;\n}\n",
8
- "import { randomUUID } from \"node:crypto\";\nimport type { EventBus } from \"../core/event-bus.js\";\nimport { redactText } from \"../core/redaction.js\";\nimport type { Correlation, JsonValue } from \"../domain/contracts.js\";\nimport {\n type ProcessRequest,\n type ProcessResult,\n type ProcessRunner,\n runProcess,\n} from \"../platform/process-runner.js\";\nimport {\n type AdbConnectResult,\n type AdbDevice,\n type AdbMdnsService,\n type AdbPairResult,\n type AdbPortMapping,\n type AdbVersion,\n parseAdbConnectResult,\n parseAdbDevices,\n parseAdbMdnsServices,\n parseAdbMdnsTrackServices,\n parseAdbPairResult,\n parseAdbPortMappings,\n parseAdbVersion,\n parseFeatureList,\n parseKeyValueLines,\n parseSingleLine,\n} from \"./parsers.js\";\n\nexport interface AdbClientOptions {\n executable: string;\n bus: EventBus;\n correlation: Pick<Correlation, \"commandId\"> &\n Partial<Pick<Correlation, \"sessionId\" | \"targetId\">>;\n host?: string;\n port?: number;\n timeoutMs?: number;\n runner?: ProcessRunner;\n idFactory?: () => string;\n}\n\nexport interface AdbObservation<T> {\n operationId: string;\n process: ProcessResult;\n value: T;\n}\n\nexport interface AdbTargetSelector {\n serial: string;\n transportId?: string;\n}\n\nfunction targetArguments(target: string | AdbTargetSelector): string[] {\n if (typeof target === \"string\") {\n return [\"-s\", target];\n }\n return target.transportId === undefined ? [\"-s\", target.serial] : [\"-t\", target.transportId];\n}\n\nfunction processMetadata(result: ProcessResult): Record<string, JsonValue> {\n return {\n durationMs: result.durationMs,\n exitCode: result.exitCode,\n signal: result.signal,\n timedOut: result.timedOut,\n aborted: result.aborted,\n stoppedAfterIdle: result.stoppedAfterIdle,\n killEscalated: result.killEscalated,\n ...(result.streamError === undefined ? {} : { streamError: result.streamError }),\n stdoutTruncated: result.stdoutTruncated,\n stderrTruncated: result.stderrTruncated,\n ...(result.spawnError === undefined\n ? {}\n : {\n spawnError: {\n ...(result.spawnError.code === undefined ? {} : { code: result.spawnError.code }),\n message: result.spawnError.message,\n },\n }),\n };\n}\n\nexport class AdbClient {\n readonly #options: AdbClientOptions;\n readonly #runner: ProcessRunner;\n readonly #idFactory: () => string;\n\n constructor(options: AdbClientOptions) {\n this.#options = options;\n this.#runner = options.runner ?? runProcess;\n this.#idFactory = options.idFactory ?? randomUUID;\n }\n\n async version(signal?: AbortSignal): Promise<AdbObservation<AdbVersion>> {\n return await this.#observe(\n \"version\",\n \"Checking ADB version\",\n [\"version\"],\n parseAdbVersion,\n signal,\n { useServerArguments: false },\n );\n }\n\n async hostFeatures(signal?: AbortSignal): Promise<AdbObservation<string[]>> {\n return await this.#observe(\n \"host-features\",\n \"Checking ADB host features\",\n [\"host-features\"],\n parseFeatureList,\n signal,\n );\n }\n\n async serverStatus(signal?: AbortSignal): Promise<AdbObservation<Record<string, string>>> {\n return await this.#observe(\n \"server-status\",\n \"Checking ADB server status\",\n [\"server-status\"],\n parseKeyValueLines,\n signal,\n );\n }\n\n async devices(signal?: AbortSignal): Promise<AdbObservation<AdbDevice[]>> {\n return await this.#observe(\n \"devices\",\n \"Discovering Android targets\",\n [\"devices\", \"-l\"],\n parseAdbDevices,\n signal,\n );\n }\n\n async mdnsServices(signal?: AbortSignal): Promise<AdbObservation<AdbMdnsService[]>> {\n return await this.#observe(\n \"mdns-services\",\n \"Discovering wireless Android services\",\n [\"mdns\", \"services\"],\n parseAdbMdnsServices,\n signal,\n );\n }\n\n async mdnsTrackServices(signal?: AbortSignal): Promise<AdbObservation<AdbMdnsService[]>> {\n return await this.#observe(\n \"mdns-track-services\",\n \"Discovering wireless Android services\",\n [\"mdns\", \"track-services\", \"--proto-text\"],\n parseAdbMdnsTrackServices,\n signal,\n {\n stopAfterIdleMs: 150,\n timeoutMs: Math.min(this.#options.timeoutMs ?? 1_000, 1_000),\n acceptIdleStop: true,\n },\n );\n }\n\n async getState(\n serial: string,\n signal?: AbortSignal,\n ): Promise<AdbObservation<string | undefined>> {\n return await this.#observe(\n \"get-state\",\n `Verifying Android target ${serial}`,\n [\"-s\", serial, \"get-state\"],\n parseSingleLine,\n signal,\n );\n }\n\n async getHardwareSerial(\n serial: string,\n signal?: AbortSignal,\n ): Promise<AdbObservation<string | undefined>> {\n return await this.#observe(\n \"hardware-serial\",\n `Reading stable identity for ${serial}`,\n [\"-s\", serial, \"shell\", \"getprop\", \"ro.serialno\"],\n parseSingleLine,\n signal,\n );\n }\n\n async shell(\n target: string | AdbTargetSelector,\n args: readonly string[],\n signal?: AbortSignal,\n ): Promise<AdbObservation<string | undefined>> {\n return await this.#observe(\n \"shell\",\n `Running a read-only shell query for ${typeof target === \"string\" ? target : target.serial}`,\n [...targetArguments(target), \"shell\", ...args],\n parseSingleLine,\n signal,\n );\n }\n\n async connect(endpoint: string, signal?: AbortSignal): Promise<AdbObservation<AdbConnectResult>> {\n return await this.#observe(\n \"connect\",\n `Connecting Android target ${endpoint}`,\n [\"connect\", endpoint],\n parseAdbConnectResult,\n signal,\n );\n }\n\n async pair(\n endpoint: string,\n pairingCode: string,\n signal?: AbortSignal,\n ): Promise<AdbObservation<AdbPairResult>> {\n return await this.#observe(\n \"pair\",\n `Pairing Android target ${endpoint}`,\n [\"pair\", endpoint],\n parseAdbPairResult,\n signal,\n { input: `${pairingCode}\\n` },\n );\n }\n\n async listPortMappings(\n target: string | AdbTargetSelector,\n direction: \"forward\" | \"reverse\",\n signal?: AbortSignal,\n ): Promise<AdbObservation<AdbPortMapping[]>> {\n return await this.#observe(\n `${direction}-list`,\n `Listing ${direction} mappings for ${typeof target === \"string\" ? target : target.serial}`,\n [...targetArguments(target), direction, \"--list\"],\n parseAdbPortMappings,\n signal,\n );\n }\n\n async addPortMapping(\n target: string | AdbTargetSelector,\n direction: \"forward\" | \"reverse\",\n firstEndpoint: string,\n secondEndpoint: string,\n signal?: AbortSignal,\n ): Promise<AdbObservation<string | undefined>> {\n return await this.#observe(\n `${direction}-add`,\n `Adding ${direction} mapping for ${typeof target === \"string\" ? target : target.serial}`,\n [...targetArguments(target), direction, \"--no-rebind\", firstEndpoint, secondEndpoint],\n parseSingleLine,\n signal,\n );\n }\n\n async removePortMapping(\n target: string | AdbTargetSelector,\n direction: \"forward\" | \"reverse\",\n listenEndpoint: string,\n signal?: AbortSignal,\n ): Promise<AdbObservation<undefined>> {\n return await this.#observe(\n `${direction}-remove`,\n `Removing ${direction} mapping for ${typeof target === \"string\" ? target : target.serial}`,\n [...targetArguments(target), direction, \"--remove\", listenEndpoint],\n () => undefined,\n signal,\n );\n }\n\n #serverArguments(): string[] {\n return [\n ...(this.#options.host === undefined ? [] : [\"-H\", this.#options.host]),\n ...(this.#options.port === undefined ? [] : [\"-P\", String(this.#options.port)]),\n ];\n }\n\n async #observe<T>(\n operation: string,\n message: string,\n args: string[],\n parse: (output: string) => T,\n signal: AbortSignal | undefined,\n options: {\n input?: string | Uint8Array;\n useServerArguments?: boolean;\n stopAfterIdleMs?: number;\n timeoutMs?: number;\n acceptIdleStop?: boolean;\n } = {},\n ): Promise<AdbObservation<T>> {\n const operationId = this.#idFactory();\n const correlation = { ...this.#options.correlation, operationId };\n const finalArgs = [\n ...(options.useServerArguments === false ? [] : this.#serverArguments()),\n ...args,\n ];\n\n this.#options.bus.emit({\n type: \"operation.started\",\n source: `adb.${operation}`,\n severity: \"info\",\n message,\n correlation,\n data: {\n executable: redactText(this.#options.executable).value,\n args: finalArgs.map((argument) => redactText(argument).value),\n },\n });\n\n const request: ProcessRequest = {\n executable: this.#options.executable,\n args: finalArgs,\n ...(options.timeoutMs === undefined\n ? this.#options.timeoutMs === undefined\n ? {}\n : { timeoutMs: this.#options.timeoutMs }\n : { timeoutMs: options.timeoutMs }),\n ...(signal === undefined ? {} : { signal }),\n ...(options.input === undefined ? {} : { input: options.input }),\n ...(options.stopAfterIdleMs === undefined\n ? {}\n : { stopAfterIdleMs: options.stopAfterIdleMs }),\n };\n const result = await this.#runner(request);\n const succeeded =\n result.spawnError === undefined &&\n result.streamError === undefined &&\n !result.timedOut &&\n !result.aborted &&\n (result.exitCode === 0 || (options.acceptIdleStop === true && result.stoppedAfterIdle));\n\n this.#options.bus.emit({\n type: succeeded ? \"operation.completed\" : \"operation.failed\",\n source: `adb.${operation}`,\n severity: succeeded ? \"info\" : \"error\",\n message: succeeded ? `${message} completed` : `${message} failed`,\n correlation,\n data: processMetadata(result),\n });\n\n return {\n operationId,\n process: result,\n value: parse(result.stdout),\n };\n }\n}\n",
6
+ "import { randomUUID } from \"node:crypto\";\nimport process from \"node:process\";\nimport manifest from \"../../package.json\" with { type: \"json\" };\nimport type { AdbMdnsService } from \"../adb/parsers.js\";\nimport {\n type CommandDependencies,\n type CommandExecution,\n type DevData,\n type DevicesData,\n type LogsData,\n type PortsData,\n runConnect,\n runDev,\n runDevices,\n runDoctor,\n runLogs,\n runPair,\n runPorts,\n runWirelessDiscovery,\n} from \"../app/commands.js\";\nimport { runConfigReport, runInit } from \"../app/config-commands.js\";\nimport {\n runContextCommand,\n runProblemsCommand,\n runSessionCommand,\n} from \"../app/session-commands.js\";\nimport { loadConfig } from \"../config/loader.js\";\nimport type { ConfigError, ConfigValues } from \"../config/types.js\";\nimport { EventBus } from \"../core/event-bus.js\";\nimport { redactText } from \"../core/redaction.js\";\nimport {\n ExitCode,\n type Problem,\n type ResultEnvelope,\n SCHEMA_VERSION,\n} from \"../domain/contracts.js\";\nimport { ProblemCode } from \"../domain/problems.js\";\nimport { planTargetAcquisition } from \"../session/target-acquisition.js\";\nimport type { SessionStoreOptions } from \"../state/session-store.js\";\nimport {\n type RememberedTarget,\n readTargetState,\n rememberedTarget,\n writeRememberedTarget,\n} from \"../state/target-state.js\";\nimport type { AndroidTarget } from \"../target/model.js\";\nimport { clearInteractiveScreen, showHomeScreen } from \"../ui/home.js\";\nimport { readPairingCode } from \"../ui/pairing-code.js\";\nimport { ProgressRenderer } from \"../ui/progress-renderer.js\";\nimport { NdjsonEventRenderer, renderResult } from \"../ui/result-renderer.js\";\nimport { type SelectInput, selectOne } from \"../ui/select.js\";\nimport type { TextSink } from \"../ui/spinner.js\";\nimport { renderChildStreamLine, renderLogStreamLine } from \"../ui/stream-renderer.js\";\nimport { resolveTerminalCapabilities, type TerminalCapabilities } from \"../ui/terminal.js\";\nimport { type CliOptions, type OutputFormat, parseArguments } from \"./arguments.js\";\n\nexport const VERSION = manifest.version;\n\nexport const HELP = `ADB Ready\n\nMake an Android target ready, then keep the development session working.\n\nUsage:\n adb-ready [command] [options]\n adbr [command] [options]\n\nCommands:\n config ACTION Validate or explain resolved configuration\n connect [HOST:PORT] Connect and verify a wireless Android target\n context [SESSION] Export bounded AI-ready diagnostic context\n dev [OPTIONS] [-- CMD] Prepare one target and run a development session\n doctor Inspect the local ADB environment\n init Create a detected project configuration\n devices List visible Android targets\n logs [OPTIONS] Stream focused logs from one Android target\n pair [HOST:PORT] Pair using Android's six-digit pairing code\n ports DIRECTION ACTION Manage verified TCP forward/reverse mappings\n sessions [ACTION] Inspect saved development sessions\n problems [SESSION] Show problems from a saved session\n help [COMMAND] Show help\n version Show version\n\nOutput:\n --format FORMAT human, plain, json, or ndjson\n --json Alias for --format json\n --quiet Hide successful human output\n --verbose Include diagnostic evidence\n --[no-]color Override color detection\n --[no-]unicode Override Unicode detection\n --[no-]animation Override motion detection\n\nExecution:\n --non-interactive Never prompt or control the terminal\n --timeout DURATION Positive duration such as 500ms, 5s, or 1m\n --adb PATH Use an explicit ADB executable\n --adb-host HOST Use an explicit ADB server host\n --adb-port PORT Use an explicit ADB server port\n --config PATH Use an explicit project configuration file\n --profile NAME Use a named configuration profile\n --select Interactively select a target\n -s, --device SELECTOR Select an exact serial or configured alias\n --transport-id ID Select an exact ADB transport ID\n --last Select the last successfully verified target\n --pairing-code-stdin Read the pairing code from stdin without echoing it\n --dry-run Show mutating operations without changing state\n\nOther:\n -h, --help Show help\n -V, --version Show version\n`;\n\nconst COMMAND_HELP = {\n config: `Usage:\n adb-ready config validate [options]\n adb-ready config explain [options]\n\nValidates all configuration layers or explains every resolved value and its\nwinning source. Use --config PATH and --profile NAME for explicit inspection.\n`,\n connect: `Usage: adb-ready connect [HOST:PORT] [options]\n\nConnects a TLS/legacy wireless endpoint and verifies its stable ADB serial.\nWhen the endpoint is omitted, exactly one mDNS connect service must be visible.\n`,\n context: `Usage: adb-ready context [SESSION] [options]\n\nExports a bounded, redacted Markdown brief for AI-assisted debugging. The\nlatest session is used when no ID is provided.\n\nContext options:\n --budget CHARACTERS Maximum Markdown size (default: 12000, minimum: 1000)\n --since DURATION Keep only the final window, such as 30s or 5m\n --only FILTERS Keep comma-separated problems,recovery,logs,child,state,target,ports\n --format FORMAT markdown (default), json, plain, or ndjson\n`,\n dev: `Usage: adb-ready dev [options] [-- EXECUTABLE ARG...]\n\nSelects one Android target, verifies reverse ports, starts an Expo, React\nNative, native Gradle, or custom command with ANDROID_SERIAL, and correlates\nchild output with targeted logcat. Ctrl-C stops owned processes and removes\nonly mappings created by this session.\n\nDevelopment options:\n --preset NAME expo, react-native, gradle, or custom\n --package-manager PM npm, pnpm, yarn, or bun\n --port PORT Add a reverse TCP port; repeat for more ports\n --[no-]logs Enable or disable targeted logcat\n --[no-]cleanup-ports Keep or remove session-created mappings on exit\n -- EXECUTABLE ARG... Run a direct custom command without a shell\n`,\n doctor: `Usage: adb-ready doctor [options]\n\nRuns read-only host, ADB capability, server, and target diagnostics.\n`,\n init: `Usage: adb-ready init [options]\n\nCreates adb-ready.config.json from detected project signals. Existing files are\nnever replaced unless --force is explicit. Use --dry-run to preview the file.\n`,\n devices: `Usage: adb-ready devices [options]\n\nLists every target visible to ADB. Add --select to open the keyboard picker.\n`,\n logs: `Usage: adb-ready logs [options]\n\nStreams parsed, redacted logcat records from one deterministic target. Live\nstreams follow from now by default instead of replaying the device buffer.\n\nLog options:\n --package NAME Resolve and filter the currently running app process\n --pid PID Filter one explicit process ID\n --tag TAG Include a log tag; repeat for more tags\n --exclude-tag TAG Suppress a log tag; repeat for more tags\n --level PRIORITY V, D, I, W, E, F, A, or S (default: I)\n --buffer NAME Read main, system, or crash; repeat for more\n --tail COUNT Start with the most recent record count\n --since TIMESTAMP Start at an Android logcat timestamp\n --dump Read the current buffer and exit instead of following\n --max-records COUNT Bound records retained in the final result\n`,\n pair: `Usage: adb-ready pair [HOST:PORT] [options]\n\nPairs with Android Wireless debugging using a hidden six-digit code prompt.\nFor automation, pipe the code and add --pairing-code-stdin.\n`,\n ports: `Usage:\n adb-ready ports reverse list [options]\n adb-ready ports reverse add DEVICE_PORT [HOST_PORT] [options]\n adb-ready ports reverse remove DEVICE_PORT [options]\n adb-ready ports forward list [options]\n adb-ready ports forward add HOST_PORT [DEVICE_PORT] [options]\n adb-ready ports forward remove HOST_PORT [options]\n\nManages TCP mappings for one deterministic Android target. A missing second\nport means the same port on both sides. Add is idempotent and never overwrites\nan existing mapping. Use --dry-run to inspect the exact ADB plan.\n`,\n problems: `Usage: adb-ready problems [SESSION] [options]\n\nShows structured problems from a saved session. The latest session is used\nwhen no ID is provided.\n`,\n sessions: `Usage:\n adb-ready sessions list [options]\n adb-ready sessions show [SESSION] [options]\n adb-ready sessions events [SESSION] [options]\n\nInspects private, redacted development history. Show and events use the latest\nsession when no ID is provided.\n`,\n} as const;\n\nexport interface CliInput extends SelectInput {\n isTTY?: boolean;\n}\n\nexport interface CliOutput extends TextSink {\n isTTY?: boolean;\n columns?: number;\n}\n\nexport interface CliIo {\n input: CliInput;\n output: CliOutput;\n error: CliOutput;\n cwd: string;\n env: NodeJS.ProcessEnv;\n}\n\nexport interface CliDependencies extends CommandDependencies {\n loadConfig?: typeof loadConfig;\n readTargetState?: typeof readTargetState;\n writeRememberedTarget?: typeof writeRememberedTarget;\n sessionStore?: false | SessionStoreOptions;\n}\n\nfunction inferredFormat(argv: readonly string[]): OutputFormat {\n let format: OutputFormat = \"human\";\n for (let index = 0; index < argv.length; index += 1) {\n const argument = argv[index];\n if (argument === \"--json\") {\n format = \"json\";\n } else if (argument?.startsWith(\"--format=\")) {\n const value = argument.slice(\"--format=\".length);\n if (\n value === \"human\" ||\n value === \"plain\" ||\n value === \"markdown\" ||\n value === \"json\" ||\n value === \"ndjson\"\n ) {\n format = value;\n }\n } else if (argument === \"--format\") {\n const value = argv[index + 1];\n if (\n value === \"human\" ||\n value === \"plain\" ||\n value === \"markdown\" ||\n value === \"json\" ||\n value === \"ndjson\"\n ) {\n format = value;\n }\n index += 1;\n }\n }\n return format;\n}\n\nfunction capabilities(\n options: CliOptions | undefined,\n values: ConfigValues,\n io: CliIo,\n target: \"error\" | \"output\",\n fallbackFormat: OutputFormat,\n): TerminalCapabilities {\n const stream = target === \"error\" ? io.error : io.output;\n return resolveTerminalCapabilities({\n format: options?.format ?? fallbackFormat,\n nonInteractive: options?.nonInteractive === true || values.interactive === false,\n ...(values.color === undefined ? {} : { color: values.color }),\n ...(values.unicode === undefined ? {} : { unicode: values.unicode }),\n ...(values.animation === undefined ? {} : { animation: values.animation }),\n ...(values.interactive === undefined ? {} : { interactive: values.interactive }),\n env: io.env,\n inputIsTTY: io.input.isTTY === true,\n outputIsTTY: stream.isTTY === true,\n ...(stream.columns === undefined ? {} : { columns: stream.columns }),\n });\n}\n\nfunction failureResult(\n command: string,\n problems: Problem[],\n dependencies: CliDependencies,\n): ResultEnvelope<null> {\n const clock = dependencies.clock ?? (() => new Date());\n const now = clock();\n const commandId = (dependencies.idFactory ?? randomUUID)();\n return {\n schemaVersion: SCHEMA_VERSION,\n command,\n commandId,\n ok: false,\n startedAt: now.toISOString(),\n finishedAt: now.toISOString(),\n durationMs: 0,\n data: null,\n problems: problems.map((problem) => ({\n ...problem,\n correlation: { ...problem.correlation, commandId },\n })),\n };\n}\n\nfunction inputProblem(code: string, summary: string, detail: string, commandId = \"cli\"): Problem {\n return {\n code,\n category: \"input.cli\",\n severity: \"error\",\n summary,\n detail,\n retryable: true,\n evidence: [],\n actions: [],\n correlation: { commandId },\n };\n}\n\nfunction configProblems(errors: readonly ConfigError[]): Problem[] {\n return errors.map((error) => ({\n code: error.code,\n category: \"input.configuration\",\n severity: \"error\",\n summary: error.message,\n detail: `Invalid ${error.source} configuration at ${error.path}.`,\n retryable: true,\n evidence: [\n { source: \"configuration\", field: \"path\", value: error.path },\n ...(error.location === undefined\n ? []\n : [\n {\n source: \"configuration\",\n field: \"location\",\n value: redactText(error.location).value,\n } as const,\n ]),\n ],\n actions: [],\n correlation: { commandId: \"configuration\" },\n }));\n}\n\nfunction renderFailure(result: ResultEnvelope<null>, format: OutputFormat, io: CliIo): void {\n renderResult(result, {\n format,\n capabilities: capabilities(undefined, {}, io, \"output\", format),\n sink: format === \"human\" ? io.error : io.output,\n verbose: false,\n });\n}\n\nfunction cliConfig(options: CliOptions): ConfigValues {\n return {\n ...(options.adbPath === undefined ? {} : { adbPath: options.adbPath }),\n ...(options.adbHost === undefined ? {} : { adbHost: options.adbHost }),\n ...(options.adbPort === undefined ? {} : { adbPort: options.adbPort }),\n ...(options.timeoutMs === undefined ? {} : { timeoutMs: options.timeoutMs }),\n ...(options.color === undefined ? {} : { color: options.color }),\n ...(options.unicode === undefined ? {} : { unicode: options.unicode }),\n ...(options.animation === undefined ? {} : { animation: options.animation }),\n ...(options.nonInteractive ? { interactive: false } : {}),\n ...(options.preset === undefined ? {} : { devPreset: options.preset }),\n ...(options.packageManager === undefined ? {} : { packageManager: options.packageManager }),\n ...(options.reversePorts === undefined\n ? {}\n : { devReversePorts: options.reversePorts.map((device) => ({ device: Number(device) })) }),\n ...(options.logs === undefined ? {} : { devLogs: options.logs }),\n ...(options.cleanupPorts === undefined ? {} : { devCleanupPorts: options.cleanupPorts }),\n ...(options.customCommand === undefined ? {} : { devCommand: options.customCommand }),\n };\n}\n\nfunction selectionProblem(\n result: SelectResultKind,\n commandId: string,\n): { problem: Problem; exitCode: ExitCode } {\n if (result === \"interrupt\" || result === \"signal\") {\n return {\n problem: inputProblem(\n ProblemCode.OperationInterrupted,\n \"Target selection was interrupted.\",\n \"Run the command again when you are ready to select a target.\",\n commandId,\n ),\n exitCode: ExitCode.Interrupted,\n };\n }\n if (result === \"unavailable\") {\n return {\n problem: inputProblem(\n ProblemCode.InteractiveSelectionUnavailable,\n \"Interactive target selection is unavailable.\",\n \"Run this command in a capable terminal or omit --select.\",\n commandId,\n ),\n exitCode: ExitCode.InvalidInput,\n };\n }\n return {\n problem: inputProblem(\n ProblemCode.TargetSelectionCancelled,\n \"Target selection was cancelled.\",\n \"No target was selected.\",\n commandId,\n ),\n exitCode: ExitCode.InvalidInput,\n };\n}\n\ntype SelectResultKind = \"escape\" | \"interrupt\" | \"signal\" | \"unavailable\";\n\nasync function runInteractiveSession(\n io: CliIo,\n dependencies: CliDependencies,\n terminal: TerminalCapabilities,\n signal?: AbortSignal,\n): Promise<number> {\n let presentation: \"full\" | \"menu\" = \"full\";\n\n while (true) {\n const home = await showHomeScreen({\n version: VERSION,\n input: io.input,\n sink: io.error,\n capabilities: terminal,\n presentation,\n ...(signal === undefined ? {} : { signal }),\n });\n if (home.kind === \"cancelled\") {\n return ExitCode.Interrupted;\n }\n if (home.kind !== \"action\") {\n return ExitCode.InvalidInput;\n }\n if (home.action === \"exit\") {\n return ExitCode.Success;\n }\n\n clearInteractiveScreen(io.error, terminal);\n await runCliInternal([home.action], io, dependencies, signal);\n if (signal?.aborted === true) {\n return ExitCode.Interrupted;\n }\n presentation = \"menu\";\n }\n}\n\nfunction targetDescription(target: AndroidTarget): string {\n const transports = target.transports.map(({ kind }) => kind).join(\", \");\n return `${target.serial} · ${target.state} · ${transports}`;\n}\n\nfunction discoveredCandidates(service: AdbMdnsService): string[] {\n return [\n ...new Set([\n service.endpoint.serial,\n ...(service.alternateEndpoints ?? []).map(({ serial }) => serial),\n ]),\n ].slice(0, 3);\n}\n\nasync function selectDevice(\n execution: CommandExecution<DevicesData>,\n io: CliIo,\n terminal: TerminalCapabilities,\n remembered?: RememberedTarget,\n signal?: AbortSignal,\n): Promise<CommandExecution<DevicesData>> {\n const data = execution.result.data;\n if (data === null) {\n return execution;\n }\n const selectable = data.targets.filter((target) =>\n target.transports.some(({ stable, state }) => stable && state === \"device\"),\n );\n if (selectable.length === 0) {\n const problem = inputProblem(\n ProblemCode.NoSelectableTarget,\n \"No ready Android target can be selected.\",\n \"Connect or recover a target until ADB reports the device state.\",\n execution.result.commandId,\n );\n return {\n exitCode: ExitCode.Target,\n result: { ...execution.result, ok: false, problems: [...execution.result.problems, problem] },\n };\n }\n\n const selection = await selectOne({\n title: \"Select an Android target\",\n options: data.targets.map((target) => ({\n value: target,\n label: target.name,\n description: targetDescription(target),\n disabled: !target.transports.some(({ stable, state }) => stable && state === \"device\"),\n recommended:\n target.transports.some(({ serial }) => serial === remembered?.serial) ||\n (remembered?.hardwareSerial !== undefined &&\n target.hardwareSerial === remembered.hardwareSerial) ||\n (selectable.length === 1 && target.id === selectable[0]?.id),\n })),\n input: io.input,\n sink: io.error,\n capabilities: terminal,\n ...(signal === undefined ? {} : { signal }),\n });\n\n if (selection.kind === \"selected\") {\n const transport = selection.value.transports.find(\n ({ stable, state }) => stable && state === \"device\",\n );\n if (transport === undefined) {\n return execution;\n }\n return {\n ...execution,\n result: {\n ...execution.result,\n data: {\n ...data,\n selected: { target: selection.value, transport, reason: \"explicit\" },\n },\n },\n };\n }\n\n const failure = selectionProblem(\n selection.kind === \"unavailable\" ? \"unavailable\" : selection.reason,\n execution.result.commandId,\n );\n return {\n exitCode: failure.exitCode,\n result: {\n ...execution.result,\n ok: false,\n problems: [...execution.result.problems, failure.problem],\n },\n };\n}\n\nasync function runCliInternal(\n argv: readonly string[],\n io: CliIo,\n dependencies: CliDependencies = {},\n signal?: AbortSignal,\n): Promise<number> {\n const fallbackFormat = inferredFormat(argv);\n let effectiveArgv = argv;\n if (argv.length === 0) {\n const homeCapabilities = capabilities(undefined, {}, io, \"error\", \"human\");\n if (homeCapabilities.interactive) {\n return await runInteractiveSession(io, dependencies, homeCapabilities, signal);\n } else {\n effectiveArgv = [\"help\"];\n }\n }\n\n const parsed = parseArguments(effectiveArgv);\n if (!parsed.ok) {\n const failure = failureResult(\n \"cli\",\n [inputProblem(parsed.code, parsed.message, \"Run adb-ready --help for usage.\")],\n dependencies,\n );\n renderFailure(failure, fallbackFormat, io);\n return ExitCode.InvalidInput;\n }\n\n const options = parsed.options;\n if (options.command === \"help\") {\n io.output.write(options.helpTarget === undefined ? HELP : COMMAND_HELP[options.helpTarget]);\n return ExitCode.Success;\n }\n if (options.command === \"version\") {\n io.output.write(`${VERSION}\\n`);\n return ExitCode.Success;\n }\n if (options.command === \"init\") {\n const execution = await runInit(\n {\n cwd: io.cwd,\n ...(options.preset === undefined ? {} : { preset: options.preset }),\n ...(options.packageManager === undefined ? {} : { packageManager: options.packageManager }),\n ...(options.reversePorts === undefined\n ? {}\n : { reversePorts: options.reversePorts.map(Number) }),\n ...(options.logs === undefined ? {} : { logs: options.logs }),\n ...(options.cleanupPorts === undefined ? {} : { cleanupPorts: options.cleanupPorts }),\n ...(options.force === undefined ? {} : { force: options.force }),\n ...(options.dryRun ? { dryRun: true } : {}),\n },\n dependencies,\n );\n renderResult(execution.result, {\n format: options.format,\n capabilities: capabilities(options, cliConfig(options), io, \"output\", options.format),\n sink: options.format === \"human\" ? io.error : io.output,\n verbose: options.verbose,\n });\n return execution.exitCode;\n }\n if (\n options.command === \"context\" ||\n options.command === \"sessions\" ||\n options.command === \"problems\"\n ) {\n const storeOptions =\n dependencies.sessionStore === false\n ? { env: io.env }\n : (dependencies.sessionStore ?? { env: io.env });\n const execution =\n options.command === \"context\"\n ? await runContextCommand(\n options.sessionId,\n options.contextBudget,\n storeOptions,\n dependencies,\n {\n ...(options.contextSinceMs === undefined ? {} : { sinceMs: options.contextSinceMs }),\n ...(options.contextOnly === undefined ? {} : { only: options.contextOnly }),\n },\n )\n : options.command === \"sessions\"\n ? await runSessionCommand(\n options.sessionAction ?? \"list\",\n options.sessionId,\n storeOptions,\n dependencies,\n )\n : await runProblemsCommand(options.sessionId, storeOptions, dependencies);\n renderResult(execution.result, {\n format: options.format,\n capabilities: capabilities(options, cliConfig(options), io, \"output\", options.format),\n sink: options.format === \"human\" ? io.error : io.output,\n verbose: options.verbose,\n });\n return execution.exitCode;\n }\n\n const loaded = await (dependencies.loadConfig ?? loadConfig)({\n cwd: io.cwd,\n env: io.env,\n ...(options.configPath === undefined ? {} : { projectConfigPath: options.configPath }),\n explicitProjectConfig: options.configPath !== undefined,\n ...(options.profileName === undefined ? {} : { profileName: options.profileName }),\n cli: cliConfig(options),\n });\n if (!loaded.ok) {\n const failure = failureResult(options.command, configProblems(loaded.errors), dependencies);\n renderFailure(failure, options.format, io);\n return ExitCode.InvalidInput;\n }\n\n if (options.command === \"config\") {\n const execution = runConfigReport(\n options.configAction ?? \"validate\",\n loaded.config,\n dependencies,\n );\n renderResult(execution.result, {\n format: options.format,\n capabilities: capabilities(options, loaded.config.values, io, \"output\", options.format),\n sink: options.format === \"human\" ? io.error : io.output,\n verbose: options.verbose,\n });\n return execution.exitCode;\n }\n\n const values = loaded.config.values;\n const errorCapabilities = capabilities(options, values, io, \"error\", options.format);\n const outputCapabilities = capabilities(options, values, io, \"output\", options.format);\n let lastTarget: RememberedTarget | undefined;\n let stateWarning: Problem | undefined;\n if (\n (options.command === \"dev\" ||\n options.command === \"devices\" ||\n options.command === \"logs\" ||\n options.command === \"ports\") &&\n (options.command === \"dev\" ||\n options.command === \"logs\" ||\n options.select ||\n options.remembered)\n ) {\n const state = await (dependencies.readTargetState ?? readTargetState)({\n env: io.env,\n ...(values.adbHost === undefined ? {} : { adbHost: values.adbHost }),\n ...(values.adbPort === undefined ? {} : { adbPort: values.adbPort }),\n });\n if (!state.ok) {\n const problem: Problem = {\n code: state.code,\n category: options.remembered ? \"environment.state\" : \"state.persistence\",\n severity: options.remembered ? \"error\" : \"warning\",\n summary: state.message,\n detail: options.remembered\n ? \"Fix or remove the per-user state file, then retry.\"\n : \"Selection can continue, but no remembered recommendation is available.\",\n retryable: true,\n evidence: [{ source: \"state\", field: \"path\", value: redactText(state.path).value }],\n actions: [],\n correlation: { commandId: \"state\" },\n };\n if (options.remembered) {\n const failure = failureResult(options.command, [problem], dependencies);\n renderFailure(failure, options.format, io);\n return ExitCode.Environment;\n }\n stateWarning = problem;\n }\n if (state.ok) {\n lastTarget = rememberedTarget(state.document, {\n ...(values.adbHost === undefined ? {} : { adbHost: values.adbHost }),\n ...(values.adbPort === undefined ? {} : { adbPort: values.adbPort }),\n });\n }\n }\n const bus = dependencies.bus ?? new EventBus(dependencies.clock);\n const commandDependencies = { ...dependencies, bus };\n const config: import(\"../app/commands.js\").CommandConfig = {\n ...(values.adbPath === undefined ? {} : { adbPath: values.adbPath }),\n ...(values.adbHost === undefined ? {} : { adbHost: values.adbHost }),\n ...(values.adbPort === undefined ? {} : { adbPort: values.adbPort }),\n timeoutMs: values.timeoutMs,\n ...(options.device === undefined ? {} : { targetSelector: options.device }),\n ...(options.transportId === undefined ? {} : { targetTransportId: options.transportId }),\n ...(values.targetAliases === undefined ? {} : { targetAliases: values.targetAliases }),\n ...(lastTarget === undefined ? {} : { rememberedSerial: lastTarget.serial }),\n ...(lastTarget?.hardwareSerial === undefined\n ? {}\n : { rememberedHardwareSerial: lastTarget.hardwareSerial }),\n ...(options.remembered ? { rememberedOnly: true } : {}),\n ...(options.dryRun ? { dryRun: true } : {}),\n };\n if (\n (options.command === \"ports\" && options.select) ||\n options.command === \"dev\" ||\n options.command === \"logs\"\n ) {\n let inventory = await runDevices(config, commandDependencies, signal);\n let selectable =\n inventory.result.data?.targets.filter((target) =>\n target.transports.some(({ stable, state }) => stable && state === \"device\"),\n ) ?? [];\n if (options.command === \"dev\" && selectable.length === 0 && !options.dryRun) {\n const acquisition = planTargetAcquisition({\n ...(config.targetSelector === undefined ? {} : { selector: config.targetSelector }),\n ...(values.targetAliases === undefined ? {} : { aliases: values.targetAliases }),\n ...(lastTarget === undefined ? {} : { remembered: lastTarget }),\n services: inventory.result.data?.discovery.mdns.services ?? [],\n });\n if (acquisition.kind === \"connect\") {\n const connected = await runConnect(\n acquisition.endpoint,\n acquisition.discovered\n ? {\n ...config,\n endpointWasDiscovered: true,\n discoveredEndpointCandidates: acquisition.candidates,\n }\n : config,\n commandDependencies,\n signal,\n );\n const connectedData = connected.result.data;\n if (!connected.result.ok || connectedData === null || !(\"serial\" in connectedData)) {\n renderResult(\n { ...connected.result, command: \"dev\" },\n {\n format: options.format,\n capabilities: errorCapabilities,\n sink: options.format === \"human\" ? io.error : io.output,\n verbose: options.verbose,\n },\n );\n return connected.exitCode;\n }\n config.targetSelector = connectedData.serial;\n delete config.targetTransportId;\n inventory = await runDevices(config, commandDependencies, signal);\n selectable =\n inventory.result.data?.targets.filter((target) =>\n target.transports.some(({ stable, state }) => stable && state === \"device\"),\n ) ?? [];\n }\n }\n const shouldPrompt =\n options.select ||\n ((options.command === \"dev\" || options.command === \"logs\") &&\n errorCapabilities.interactive &&\n inventory.result.data?.selected === undefined &&\n selectable.length !== 1);\n const selected = shouldPrompt\n ? await selectDevice(inventory, io, errorCapabilities, lastTarget, signal)\n : inventory;\n if (!selected.result.ok || selected.result.data?.selected === undefined) {\n if (shouldPrompt) {\n renderResult(\n { ...selected.result, command: options.command },\n {\n format: \"human\",\n capabilities: errorCapabilities,\n sink: io.error,\n verbose: options.verbose,\n },\n );\n return selected.exitCode;\n }\n } else {\n const transport = selected.result.data.selected.transport;\n if (transport.transportId === undefined) {\n config.targetSelector = transport.serial;\n } else {\n config.targetTransportId = transport.transportId;\n }\n }\n }\n let endpoint = options.endpoint;\n let endpointWasDiscovered = false;\n let discoveredEndpointCandidates: string[] | undefined;\n if (\n endpoint === undefined &&\n errorCapabilities.interactive &&\n (options.command === \"connect\" || options.command === \"pair\")\n ) {\n const discoveryProgress = options.quiet\n ? undefined\n : new ProgressRenderer({\n bus,\n sink: io.error,\n capabilities: errorCapabilities,\n verbose: options.verbose,\n });\n let discovery: Awaited<ReturnType<typeof runWirelessDiscovery>>;\n try {\n discovery = await runWirelessDiscovery(\n options.command === \"pair\" ? \"pairing\" : \"connect\",\n config,\n commandDependencies,\n signal,\n );\n } finally {\n discoveryProgress?.dispose();\n }\n if (!discovery.result.ok || discovery.result.data === null) {\n renderResult(\n { ...discovery.result, command: options.command },\n {\n format: \"human\",\n capabilities: errorCapabilities,\n sink: io.error,\n verbose: options.verbose,\n },\n );\n return discovery.exitCode;\n }\n const services = discovery.result.data.services;\n if (services.length === 1) {\n const service = services[0];\n endpoint = service?.endpoint.serial;\n endpointWasDiscovered = service !== undefined;\n discoveredEndpointCandidates =\n service === undefined ? undefined : discoveredCandidates(service);\n } else {\n const chosen = await selectOne({\n title:\n options.command === \"pair\" ? \"Choose a pairing endpoint\" : \"Choose a wireless target\",\n options: services.map((service) => {\n const identity = service.givenName ?? service.deviceModel;\n return {\n value: service,\n label: identity ?? service.endpoint.serial,\n description:\n identity === undefined\n ? `${service.instance} · ${service.rawServiceType}`\n : `${service.endpoint.serial} · ${service.rawServiceType}`,\n };\n }),\n input: io.input,\n sink: io.error,\n capabilities: errorCapabilities,\n ...(signal === undefined ? {} : { signal }),\n });\n if (chosen.kind !== \"selected\") {\n const failed = selectionProblem(\n chosen.kind === \"unavailable\" ? \"unavailable\" : chosen.reason,\n discovery.result.commandId,\n );\n renderResult(\n {\n ...discovery.result,\n command: options.command,\n ok: false,\n problems: [...discovery.result.problems, failed.problem],\n },\n {\n format: \"human\",\n capabilities: errorCapabilities,\n sink: io.error,\n verbose: options.verbose,\n },\n );\n return failed.exitCode;\n }\n endpoint = chosen.value.endpoint.serial;\n endpointWasDiscovered = true;\n discoveredEndpointCandidates = discoveredCandidates(chosen.value);\n }\n }\n let pairingCode: string | undefined;\n if (options.command === \"pair\" && !options.dryRun) {\n if (!errorCapabilities.interactive && !options.pairingCodeStdin) {\n const failure = failureResult(\n \"pair\",\n [\n inputProblem(\n ProblemCode.InvalidPairingCode,\n \"A pairing code source is required in non-interactive mode.\",\n \"Pipe the six-digit code to stdin and add --pairing-code-stdin.\",\n ),\n ],\n dependencies,\n );\n renderFailure(failure, options.format, io);\n return ExitCode.InvalidInput;\n }\n const input = await readPairingCode({\n input: io.input,\n sink: io.error,\n capabilities: errorCapabilities,\n fromStdin: options.pairingCodeStdin,\n ...(signal === undefined ? {} : { signal }),\n });\n if (input.kind !== \"submitted\") {\n const interrupted = input.kind === \"cancelled\" && input.reason !== \"eof\";\n const failure = failureResult(\n \"pair\",\n [\n inputProblem(\n interrupted ? ProblemCode.OperationInterrupted : ProblemCode.InvalidPairingCode,\n interrupted ? \"Pairing code entry was cancelled.\" : \"No pairing code was received.\",\n \"Open Android's pairing-code screen and try again.\",\n ),\n ],\n dependencies,\n );\n renderFailure(failure, options.format, io);\n return interrupted ? ExitCode.Interrupted : ExitCode.InvalidInput;\n }\n pairingCode = input.value;\n }\n const progress =\n options.format === \"human\" && !options.quiet && options.command !== \"logs\"\n ? new ProgressRenderer({\n bus,\n sink: io.error,\n capabilities: errorCapabilities,\n verbose: options.verbose,\n })\n : undefined;\n const events = options.format === \"ndjson\" ? new NdjsonEventRenderer(bus, io.output) : undefined;\n\n let execution:\n | CommandExecution<DevicesData>\n | Awaited<ReturnType<typeof runConnect>>\n | Awaited<ReturnType<typeof runDev>>\n | Awaited<ReturnType<typeof runDoctor>>\n | CommandExecution<LogsData>\n | Awaited<ReturnType<typeof runPair>>\n | Awaited<ReturnType<typeof runPorts>>;\n try {\n if (options.command === \"doctor\") {\n execution = await runDoctor(config, commandDependencies, signal);\n } else if (options.command === \"logs\") {\n execution = await runLogs(\n {\n ...(options.logPackage === undefined ? {} : { packageName: options.logPackage }),\n ...(options.logPid === undefined ? {} : { pid: options.logPid }),\n ...(options.logTags === undefined ? {} : { tags: options.logTags }),\n ...(options.logExcludeTags === undefined ? {} : { excludeTags: options.logExcludeTags }),\n ...(options.logPriority === undefined ? {} : { minimumPriority: options.logPriority }),\n ...(options.logBuffers === undefined ? {} : { buffers: options.logBuffers }),\n ...(options.logSince === undefined ? {} : { since: options.logSince }),\n ...(options.logTail === undefined ? {} : { tail: options.logTail }),\n ...(options.logDump === undefined ? {} : { dump: options.logDump }),\n ...(options.logMaxRecords === undefined ? {} : { maxRecords: options.logMaxRecords }),\n ...(options.format === \"human\" && !options.quiet\n ? {\n onLine: (line: string) =>\n io.error.write(`${renderLogStreamLine(line, errorCapabilities)}\\n`),\n }\n : {}),\n },\n config,\n commandDependencies,\n signal,\n );\n } else if (options.command === \"dev\") {\n execution = await runDev(\n {\n cwd: io.cwd,\n ...(values.devPreset === undefined ? {} : { preset: values.devPreset }),\n ...(values.packageManager === undefined ? {} : { packageManager: values.packageManager }),\n ...(values.devCommand === undefined ? {} : { command: values.devCommand }),\n ...(values.devReversePorts === undefined ? {} : { reversePorts: values.devReversePorts }),\n ...(values.devLogs === undefined ? {} : { logs: values.devLogs }),\n ...(values.devCleanupPorts === undefined ? {} : { cleanupPorts: values.devCleanupPorts }),\n ...(values.devWatch === undefined ? {} : { watch: values.devWatch }),\n recovery: {\n ...(values.recoveryMaxAttempts === undefined\n ? {}\n : { maxAttempts: values.recoveryMaxAttempts }),\n ...(values.recoveryInitialDelayMs === undefined\n ? {}\n : { initialDelayMs: values.recoveryInitialDelayMs }),\n ...(values.recoveryMaxDelayMs === undefined\n ? {}\n : { maxDelayMs: values.recoveryMaxDelayMs }),\n ...(values.recoveryTotalTimeoutMs === undefined\n ? {}\n : { totalTimeoutMs: values.recoveryTotalTimeoutMs }),\n },\n ...(values.devHooks === undefined ? {} : { hooks: values.devHooks }),\n journal: {\n ...(values.journalMaxEntries === undefined\n ? {}\n : { maxEntries: values.journalMaxEntries }),\n ...(values.journalMaxBytes === undefined ? {} : { maxBytes: values.journalMaxBytes }),\n ...(values.journalSources === undefined ? {} : { sources: values.journalSources }),\n ...(values.journalMinimumSeverity === undefined\n ? {}\n : { minimumSeverity: values.journalMinimumSeverity }),\n ...(values.journalRedactEnvironment === undefined\n ? {}\n : {\n redaction: {\n additionalLiterals: values.journalRedactEnvironment.flatMap((name) => {\n const value = io.env[name];\n return value === undefined || value === \"\" ? [] : [value];\n }),\n },\n }),\n },\n childStdin: errorCapabilities.interactive ? \"inherit\" : \"ignore\",\n sessionStore:\n values.sessionPersist === false || dependencies.sessionStore === false\n ? false\n : (dependencies.sessionStore ?? {\n env: io.env,\n ...(values.sessionMaxSessions === undefined\n ? {}\n : { maxSessions: values.sessionMaxSessions }),\n ...(values.sessionMaxAgeDays === undefined\n ? {}\n : { maxAgeDays: values.sessionMaxAgeDays }),\n ...(values.sessionMaxBytes === undefined\n ? {}\n : { maxBytes: values.sessionMaxBytes }),\n }),\n ...(options.format === \"human\" && !options.quiet\n ? {\n onChildLine: (stream: \"stderr\" | \"stdout\", line: string) => {\n io.error.write(`${renderChildStreamLine(stream, line, errorCapabilities)}\\n`);\n },\n }\n : {}),\n },\n config,\n commandDependencies,\n signal,\n );\n } else if (options.command === \"devices\") {\n execution = await runDevices(config, commandDependencies, signal);\n } else if (options.command === \"connect\") {\n execution = await runConnect(\n endpoint,\n endpointWasDiscovered\n ? {\n ...config,\n endpointWasDiscovered: true,\n ...(discoveredEndpointCandidates === undefined\n ? {}\n : { discoveredEndpointCandidates }),\n }\n : config,\n commandDependencies,\n signal,\n );\n } else if (options.command === \"pair\") {\n execution = await runPair(\n endpoint,\n pairingCode ?? \"\",\n endpointWasDiscovered\n ? {\n ...config,\n endpointWasDiscovered: true,\n ...(discoveredEndpointCandidates === undefined\n ? {}\n : { discoveredEndpointCandidates }),\n }\n : config,\n commandDependencies,\n signal,\n );\n } else {\n const direction = options.portDirection;\n const action = options.portAction;\n if (direction === undefined || action === undefined) {\n throw new Error(\"Validated ports command is missing its direction or action.\");\n }\n execution = await runPorts(\n {\n direction,\n action,\n ...(direction === \"reverse\"\n ? {\n ...(options.primaryPort === undefined ? {} : { devicePort: options.primaryPort }),\n ...(options.secondaryPort === undefined ? {} : { hostPort: options.secondaryPort }),\n }\n : {\n ...(options.primaryPort === undefined ? {} : { hostPort: options.primaryPort }),\n ...(options.secondaryPort === undefined\n ? {}\n : { devicePort: options.secondaryPort }),\n }),\n },\n config,\n commandDependencies,\n signal,\n );\n }\n } finally {\n progress?.dispose();\n events?.dispose();\n }\n\n if (options.command === \"devices\" && options.select) {\n execution = await selectDevice(\n execution as CommandExecution<DevicesData>,\n io,\n errorCapabilities,\n lastTarget,\n signal,\n );\n }\n if (stateWarning !== undefined) {\n execution.result.problems.push({\n ...stateWarning,\n correlation: { commandId: execution.result.commandId },\n });\n }\n\n let selectedTarget:\n | {\n serial: string;\n hardwareSerial?: string;\n }\n | undefined;\n if (execution.result.ok && execution.result.data !== null) {\n if (options.command === \"connect\") {\n const data = execution.result.data as Awaited<\n ReturnType<typeof runConnect>\n >[\"result\"][\"data\"];\n if (data !== null && \"serial\" in data) {\n selectedTarget = {\n serial: data.serial,\n ...(data.hardwareSerial === undefined ? {} : { hardwareSerial: data.hardwareSerial }),\n };\n }\n } else if (options.command === \"dev\") {\n const data = execution.result.data as DevData | null;\n if (data !== null) {\n selectedTarget = {\n serial: data.selected.transport.serial,\n ...(data.selected.target.hardwareSerial === undefined\n ? {}\n : { hardwareSerial: data.selected.target.hardwareSerial }),\n };\n }\n } else if (options.command === \"logs\") {\n const data = execution.result.data as LogsData | null;\n if (data !== null) {\n selectedTarget = {\n serial: data.selected.transport.serial,\n ...(data.selected.target.hardwareSerial === undefined\n ? {}\n : { hardwareSerial: data.selected.target.hardwareSerial }),\n };\n }\n } else if (options.command === \"devices\") {\n const data = execution.result.data as DevicesData;\n if (data.selected !== undefined) {\n selectedTarget = {\n serial: data.selected.transport.serial,\n ...(data.selected.target.hardwareSerial === undefined\n ? {}\n : { hardwareSerial: data.selected.target.hardwareSerial }),\n };\n }\n } else if (options.command === \"ports\") {\n const data = execution.result.data as PortsData | null;\n if (data !== null) {\n selectedTarget = {\n serial: data.selected.transport.serial,\n ...(data.selected.target.hardwareSerial === undefined\n ? {}\n : { hardwareSerial: data.selected.target.hardwareSerial }),\n };\n }\n }\n }\n if (selectedTarget !== undefined) {\n const stored = await (dependencies.writeRememberedTarget ?? writeRememberedTarget)(\n {\n ...selectedTarget,\n updatedAt: (dependencies.clock ?? (() => new Date()))().toISOString(),\n },\n {\n env: io.env,\n ...(values.adbHost === undefined ? {} : { adbHost: values.adbHost }),\n ...(values.adbPort === undefined ? {} : { adbPort: values.adbPort }),\n },\n );\n if (!stored.ok) {\n execution.result.problems.push({\n code: stored.code,\n category: \"state.persistence\",\n severity: \"warning\",\n summary: stored.message,\n detail: \"The connection is ready, but ADB Ready could not remember it for --last.\",\n retryable: true,\n evidence: [{ source: \"state\", field: \"path\", value: redactText(stored.path).value }],\n actions: [],\n correlation: { commandId: execution.result.commandId },\n });\n }\n }\n\n if (options.format !== \"human\" || !options.quiet || !execution.result.ok) {\n const human = options.format === \"human\";\n renderResult(execution.result, {\n format: options.format,\n capabilities: human ? errorCapabilities : outputCapabilities,\n sink: human ? io.error : io.output,\n verbose: options.verbose,\n });\n }\n return execution.exitCode;\n}\n\nexport async function runCli(\n argv: readonly string[],\n io: CliIo,\n dependencies: CliDependencies = {},\n signal?: AbortSignal,\n): Promise<number> {\n try {\n return await runCliInternal(argv, io, dependencies, signal);\n } catch (caught) {\n const message = redactText(caught instanceof Error ? caught.message : String(caught)).value;\n const problem: Problem = {\n code: \"INTERNAL_ERROR\",\n category: \"internal.unexpected\",\n severity: \"error\",\n summary: \"ADB Ready encountered an unexpected internal error.\",\n detail: \"The operation stopped safely. Re-run with --verbose when reporting this issue.\",\n retryable: false,\n evidence: message === \"\" ? [] : [{ source: \"internal\", field: \"message\", value: message }],\n actions: [],\n correlation: { commandId: \"cli\" },\n };\n renderFailure(failureResult(\"cli\", [problem], dependencies), inferredFormat(argv), io);\n return ExitCode.Internal;\n }\n}\n\nexport function processIo(): CliIo {\n return {\n input: process.stdin,\n output: process.stdout,\n error: process.stderr,\n cwd: process.cwd(),\n env: process.env,\n };\n}\n",
7
+ "import { randomUUID } from \"node:crypto\";\nimport { stat } from \"node:fs/promises\";\nimport { constants as osConstants } from \"node:os\";\nimport path from \"node:path\";\nimport { AdbClient } from \"../adb/client.js\";\nimport {\n type AdbDevice,\n type AdbMdnsService,\n type AdbVersion,\n parseAdbNetworkEndpoint,\n parseLogcatThreadtimeLine,\n} from \"../adb/parsers.js\";\nimport { EventBus } from \"../core/event-bus.js\";\nimport { EventJournal, type EventJournalSnapshot } from \"../core/event-journal.js\";\nimport { redactText } from \"../core/redaction.js\";\nimport { TextLineBuffer } from \"../core/text-lines.js\";\nimport { type DevHook, type DevHookEvent, type HookRun, runHooks } from \"../dev/hooks.js\";\nimport {\n type DevPreset,\n detectProject,\n type PackageManagerName,\n type ProjectDetection,\n packageScriptCommand,\n} from \"../dev/project.js\";\nimport {\n ExitCode,\n type OperationPlan,\n type Problem,\n type ResultEnvelope,\n SCHEMA_VERSION,\n} from \"../domain/contracts.js\";\nimport {\n adbNotFoundProblem,\n adbOptionalProbeProblem,\n adbProcessProblem,\n noTargetsProblem,\n ProblemCode,\n problemsForDevices,\n problemsForServerStatus,\n targetInventoryProblems,\n targetSelectionProblem,\n} from \"../domain/problems.js\";\nimport { classifyLogRecord, type LogFinding } from \"../logs/classifier.js\";\nimport { locateAdb, locateExecutable } from \"../platform/executable.js\";\nimport { type ProcessResult, type ProcessRunner, runProcess } from \"../platform/process-runner.js\";\nimport { detectRuntime, type RuntimeInfo } from \"../platform/runtime.js\";\nimport {\n mappingArguments,\n normalizePortMapping,\n type PortDirection,\n type TcpPortMapping,\n tcpEndpoint,\n} from \"../ports/model.js\";\nimport type { RecoveryPolicyInput } from \"../session/recovery-policy.js\";\nimport { type SessionState, SessionStateMachine } from \"../session/state-machine.js\";\nimport { planTargetAcquisition } from \"../session/target-acquisition.js\";\nimport { type SessionHealth, type SessionWatchSummary, watchSession } from \"../session/watcher.js\";\nimport { SessionRecorder, type SessionStoreOptions } from \"../state/session-store.js\";\nimport {\n type AndroidTarget,\n buildTargetInventory,\n correlateMdnsTransportIdentities,\n isStableAdbSerial,\n} from \"../target/model.js\";\nimport { type SelectedTarget, selectTarget } from \"../target/selection.js\";\n\nexport interface CommandConfig {\n adbPath?: string;\n adbHost?: string;\n adbPort?: number;\n timeoutMs?: number;\n targetSelector?: string;\n targetTransportId?: string;\n targetAliases?: Readonly<Record<string, string>>;\n rememberedSerial?: string;\n rememberedHardwareSerial?: string;\n rememberedOnly?: boolean;\n dryRun?: boolean;\n endpointWasDiscovered?: boolean;\n discoveredEndpointCandidates?: readonly string[];\n}\n\nexport interface CommandDependencies {\n bus?: EventBus;\n clock?: () => Date;\n idFactory?: () => string;\n locateAdb?: typeof locateAdb;\n runner?: ProcessRunner;\n runtime?: () => RuntimeInfo;\n detectProject?: typeof detectProject;\n locateExecutable?: typeof locateExecutable;\n sleep?: (milliseconds: number, signal: AbortSignal) => Promise<boolean>;\n}\n\nexport interface CommandExecution<T> {\n result: ResultEnvelope<T>;\n exitCode: number;\n}\n\nexport interface DoctorData {\n runtime: RuntimeInfo;\n adb: {\n path: string;\n version: Omit<AdbVersion, \"raw\">;\n hostFeatures: string[];\n serverStatus: Record<string, string> | null;\n };\n devices: AdbDevice[];\n targets: AndroidTarget[];\n discovery: TargetDiscoveryData;\n}\n\nexport interface DevicesData {\n adbPath: string;\n devices: AdbDevice[];\n targets: AndroidTarget[];\n discovery: TargetDiscoveryData;\n selected?: SelectedTarget;\n}\n\nexport interface TargetDiscoveryData {\n mdns: {\n available: boolean;\n method: \"legacy\" | \"legacy-fallback\" | \"track\";\n services: AdbMdnsService[];\n };\n identity: {\n probed: number;\n resolved: number;\n };\n}\n\nexport interface ConnectedData {\n adbPath: string;\n endpoint: string;\n status: \"already-connected\" | \"connected\";\n serial: string;\n state: \"device\";\n hardwareSerial?: string;\n discovered: boolean;\n attemptedEndpoints?: string[];\n}\n\nexport interface PairedData {\n adbPath: string;\n endpoint: string;\n paired: true;\n discovered: boolean;\n}\n\nexport interface WirelessPlanData {\n endpoint: string;\n discovered: boolean;\n plan: OperationPlan;\n}\n\nexport type ConnectData = ConnectedData | WirelessPlanData;\nexport type PairData = PairedData | WirelessPlanData;\n\nexport interface WirelessDiscoveryData {\n adbPath: string;\n kind: \"connect\" | \"pairing\";\n services: AdbMdnsService[];\n}\n\nexport type PortAction = \"add\" | \"list\" | \"remove\";\n\nexport interface PortCommandRequest {\n direction: PortDirection;\n action: PortAction;\n hostPort?: string | number;\n devicePort?: string | number;\n}\n\nexport interface PortsData {\n adbPath: string;\n action: PortAction;\n direction: PortDirection;\n selected: SelectedTarget;\n mappings: TcpPortMapping[];\n status: \"added\" | \"already-exists\" | \"listed\" | \"not-found\" | \"removed\" | \"planned\";\n requested?: {\n host: string;\n device: string;\n };\n plan?: OperationPlan;\n}\n\ninterface CommandContext {\n bus: EventBus;\n clock: () => Date;\n command: string;\n commandId: string;\n started: Date;\n}\n\nfunction processSucceeded(result: ProcessResult): boolean {\n return (\n result.spawnError === undefined &&\n result.streamError === undefined &&\n (result.exitCode === 0 || result.stoppedAfterIdle) &&\n !result.timedOut &&\n !result.aborted\n );\n}\n\nfunction preservedChildExitCode(result: ProcessResult): number | undefined {\n if (result.exitCode !== null && result.exitCode !== 0) return result.exitCode;\n if (result.signal === null) return undefined;\n const signalNumber = osConstants.signals[result.signal];\n return signalNumber === undefined ? undefined : 128 + signalNumber;\n}\n\nfunction exitCodeForProblems(problems: readonly Problem[]): ExitCode {\n const errors = problems.filter(({ severity }) => severity === \"error\");\n if (errors.length === 0) {\n return ExitCode.Success;\n }\n if (errors.some(({ code }) => code === ProblemCode.OperationInterrupted)) {\n return ExitCode.Interrupted;\n }\n if (errors.some(({ category }) => category.startsWith(\"input.\"))) {\n return ExitCode.InvalidInput;\n }\n if (errors.some(({ category }) => category.startsWith(\"environment.\"))) {\n return ExitCode.Environment;\n }\n if (errors.some(({ category }) => category.startsWith(\"target.\"))) {\n return ExitCode.Target;\n }\n if (errors.some(({ category }) => category.startsWith(\"child.\"))) {\n return ExitCode.ChildProcess;\n }\n return ExitCode.AdbOperation;\n}\n\nfunction commandProblem(\n code: string,\n category: string,\n summary: string,\n detail: string,\n commandId: string,\n evidence: Problem[\"evidence\"] = [],\n): Problem {\n return {\n code,\n category,\n severity: \"error\",\n summary,\n detail,\n retryable: true,\n evidence,\n actions: [],\n correlation: { commandId },\n };\n}\n\nfunction createContext(command: string, dependencies: CommandDependencies): CommandContext {\n const clock = dependencies.clock ?? (() => new Date());\n const commandId = (dependencies.idFactory ?? randomUUID)();\n const bus = dependencies.bus ?? new EventBus(clock);\n const started = clock();\n\n bus.emit({\n type: \"command.started\",\n source: `command.${command}`,\n severity: \"info\",\n message: `Running ${command}`,\n correlation: { commandId },\n });\n\n return { bus, clock, command, commandId, started };\n}\n\nfunction finish<T>(\n context: CommandContext,\n data: T | null,\n problems: Problem[],\n): CommandExecution<T> {\n const finished = context.clock();\n const exitCode = exitCodeForProblems(problems);\n const ok = exitCode === ExitCode.Success;\n const interrupted = exitCode === ExitCode.Interrupted;\n const result: ResultEnvelope<T> = {\n schemaVersion: SCHEMA_VERSION,\n command: context.command,\n commandId: context.commandId,\n ok,\n startedAt: context.started.toISOString(),\n finishedAt: finished.toISOString(),\n durationMs: Math.max(0, finished.getTime() - context.started.getTime()),\n data,\n problems,\n };\n\n context.bus.emit({\n type: ok ? \"command.completed\" : interrupted ? \"command.interrupted\" : \"command.failed\",\n source: `command.${context.command}`,\n severity: ok ? \"info\" : interrupted ? \"warning\" : \"error\",\n message: ok\n ? `${context.command} completed`\n : interrupted\n ? `${context.command} interrupted`\n : `${context.command} failed`,\n correlation: { commandId: context.commandId },\n data: { exitCode, problemCount: problems.length },\n });\n\n return { result, exitCode };\n}\n\nfunction redactedPath(value: string): string {\n return redactText(value).value;\n}\n\nfunction redactedRecord(values: Record<string, string>): Record<string, string> {\n return Object.fromEntries(\n Object.entries(values).map(([key, value]) => [key, redactText(value).value]),\n );\n}\n\nasync function resolveAdb(\n context: CommandContext,\n config: CommandConfig,\n dependencies: CommandDependencies,\n): Promise<string | undefined> {\n const operationId = (dependencies.idFactory ?? randomUUID)();\n const correlation = { commandId: context.commandId, operationId };\n context.bus.emit({\n type: \"operation.started\",\n source: \"host.adb-path\",\n severity: \"info\",\n message: \"Locating ADB\",\n correlation,\n });\n\n const executable = await (dependencies.locateAdb ?? locateAdb)({\n ...(config.adbPath === undefined ? {} : { explicitPath: config.adbPath }),\n });\n\n context.bus.emit({\n type: executable === undefined ? \"operation.failed\" : \"operation.completed\",\n source: \"host.adb-path\",\n severity: executable === undefined ? \"error\" : \"info\",\n message: executable === undefined ? \"ADB was not found\" : \"ADB was found\",\n correlation,\n ...(executable === undefined ? {} : { data: { path: redactedPath(executable) } }),\n });\n\n return executable;\n}\n\nfunction createClient(\n executable: string,\n context: CommandContext,\n config: CommandConfig,\n dependencies: CommandDependencies,\n): AdbClient {\n return new AdbClient({\n executable,\n bus: context.bus,\n correlation: { commandId: context.commandId },\n ...(config.adbHost === undefined ? {} : { host: config.adbHost }),\n ...(config.adbPort === undefined ? {} : { port: config.adbPort }),\n ...(config.timeoutMs === undefined ? {} : { timeoutMs: config.timeoutMs }),\n ...(dependencies.runner === undefined ? {} : { runner: dependencies.runner }),\n ...(dependencies.idFactory === undefined ? {} : { idFactory: dependencies.idFactory }),\n });\n}\n\nfunction operationProblem(\n operation: string,\n observation: { operationId: string; process: ProcessResult },\n commandId: string,\n): Problem {\n return adbProcessProblem(operation, observation.process, {\n commandId,\n operationId: observation.operationId,\n });\n}\n\ninterface TargetInspection {\n targets: AndroidTarget[];\n discovery: TargetDiscoveryData;\n optionalProblems: Problem[];\n interruption?: Problem;\n}\n\ninterface MdnsDiscovery {\n observation: Awaited<ReturnType<AdbClient[\"mdnsServices\"]>>;\n method: TargetDiscoveryData[\"mdns\"][\"method\"];\n}\n\ninterface WirelessEndpointResolution {\n endpoint?: string;\n candidates: string[];\n discovered: boolean;\n problem?: Problem;\n}\n\nfunction isConnectableDiscoveryService(service: AdbMdnsService): boolean {\n return (\n service.serviceType === \"legacy\" ||\n (service.serviceType === \"connect\" && service.knownDevice !== false)\n );\n}\n\nfunction pairingRequiredProblem(\n connectServices: readonly AdbMdnsService[],\n allServices: readonly AdbMdnsService[],\n commandId: string,\n): Problem {\n const pairingEndpoints = [\n ...new Set(\n allServices\n .filter(({ serviceType }) => serviceType === \"pairing\")\n .map(({ endpoint }) => endpoint.serial),\n ),\n ].sort();\n const pairingEndpoint = pairingEndpoints.length === 1 ? pairingEndpoints[0] : undefined;\n return {\n code: ProblemCode.WirelessPairingRequired,\n category: \"target.authorization\",\n severity: \"error\",\n summary: \"The discovered wireless target must be paired first.\",\n detail:\n pairingEndpoint === undefined\n ? \"ADB reports that this computer does not know the target. Open Pair device with pairing code on Android, then run adb-ready pair.\"\n : `ADB reports that this computer does not know the target. Run adb-ready pair ${pairingEndpoint}, then connect it.`,\n retryable: true,\n evidence: [\n {\n source: \"adb.mdns\",\n field: \"unpairedEndpoints\",\n value: connectServices.map(({ endpoint }) => endpoint.serial),\n },\n ],\n actions:\n pairingEndpoint === undefined\n ? [\n {\n id: \"open_pairing_screen\",\n title: \"Open Pair device with pairing code on the Android target\",\n kind: \"user\",\n risk: \"none\",\n automatic: false,\n },\n ]\n : [\n {\n id: \"pair_discovered_target\",\n title: `Pair ${pairingEndpoint}`,\n kind: \"command\",\n risk: \"device-reversible\",\n automatic: false,\n idempotent: false,\n command: { executable: \"adb-ready\", args: [\"pair\", pairingEndpoint] },\n },\n ],\n correlation: { commandId },\n };\n}\n\nfunction serviceEndpointCandidates(service: AdbMdnsService): string[] {\n return [\n ...new Set([\n service.endpoint.serial,\n ...(service.alternateEndpoints ?? []).map(({ serial }) => serial),\n ]),\n ].slice(0, 3);\n}\n\nfunction normalizeEndpointCandidates(primary: string, candidates: readonly string[]): string[] {\n return [\n ...new Set(\n [primary, ...candidates]\n .map((candidate) => parseAdbNetworkEndpoint(candidate)?.serial)\n .filter((candidate): candidate is string => candidate !== undefined),\n ),\n ].slice(0, 3);\n}\n\nasync function discoverMdns(\n client: AdbClient,\n hostFeatures: readonly string[] | undefined,\n signal: AbortSignal | undefined,\n): Promise<MdnsDiscovery> {\n let features = hostFeatures;\n if (features === undefined) {\n const observation = await client.hostFeatures(signal);\n if (observation.process.aborted) {\n return {\n observation: {\n operationId: observation.operationId,\n process: observation.process,\n value: [],\n },\n method: \"legacy\",\n };\n }\n features = processSucceeded(observation.process) ? observation.value : [];\n }\n if (features.includes(\"track_mdns\")) {\n const tracked = await client.mdnsTrackServices(signal);\n if (processSucceeded(tracked.process) || tracked.process.aborted) {\n return { observation: tracked, method: \"track\" };\n }\n return { observation: await client.mdnsServices(signal), method: \"legacy-fallback\" };\n }\n return { observation: await client.mdnsServices(signal), method: \"legacy\" };\n}\n\nfunction normalizedHardwareSerial(value: string | undefined): string | undefined {\n const normalized = value?.trim();\n return normalized === undefined || normalized === \"\" || normalized.toLowerCase() === \"unknown\"\n ? undefined\n : normalized;\n}\n\nasync function inspectTargets(\n client: AdbClient,\n devices: readonly AdbDevice[],\n commandId: string,\n signal: AbortSignal | undefined,\n hostFeatures?: readonly string[],\n): Promise<TargetInspection> {\n const identityCandidates = devices.filter(\n ({ serial, state }) => state === \"device\" && isStableAdbSerial(serial),\n );\n const [mdnsDiscovery, identities] = await Promise.all([\n discoverMdns(client, hostFeatures, signal),\n Promise.all(identityCandidates.map(({ serial }) => client.getHardwareSerial(serial, signal))),\n ]);\n const mdns = mdnsDiscovery.observation;\n const optionalProblems: Problem[] = [];\n const allObservations = [mdns, ...identities];\n const interrupted = allObservations.find(({ process }) => process.aborted);\n if (interrupted !== undefined) {\n return {\n targets: [],\n discovery: {\n mdns: { available: false, method: mdnsDiscovery.method, services: [] },\n identity: { probed: identityCandidates.length, resolved: 0 },\n },\n optionalProblems,\n interruption: operationProblem(\"target-discovery\", interrupted, commandId),\n };\n }\n\n const mdnsAvailable = processSucceeded(mdns.process);\n if (!mdnsAvailable) {\n optionalProblems.push(\n adbOptionalProbeProblem(\"mdns-services\", mdns.process, {\n commandId,\n operationId: mdns.operationId,\n }),\n );\n }\n\n const identityBySerial = new Map<string, string>();\n identities.forEach((identity, index) => {\n if (!processSucceeded(identity.process)) {\n return;\n }\n const hardwareSerial = normalizedHardwareSerial(identity.value);\n const candidate = identityCandidates[index];\n if (hardwareSerial !== undefined && candidate !== undefined) {\n identityBySerial.set(candidate.serial, hardwareSerial);\n }\n });\n const services = mdnsAvailable ? mdns.value : [];\n const observations = devices.map((device) => {\n const hardwareSerial = identityBySerial.get(device.serial);\n return {\n device,\n ...(hardwareSerial === undefined ? {} : { hardwareSerial }),\n };\n });\n const inventory = buildTargetInventory(\n correlateMdnsTransportIdentities(observations, services),\n services,\n );\n\n return {\n targets: inventory.targets,\n discovery: {\n mdns: {\n available: mdnsAvailable,\n method: mdnsDiscovery.method,\n services: inventory.services,\n },\n identity: { probed: identityCandidates.length, resolved: identityBySerial.size },\n },\n optionalProblems,\n };\n}\n\nexport async function runDoctor(\n config: CommandConfig = {},\n dependencies: CommandDependencies = {},\n signal?: AbortSignal,\n): Promise<CommandExecution<DoctorData>> {\n const context = createContext(\"doctor\", dependencies);\n const problems: Problem[] = [];\n const executable = await resolveAdb(context, config, dependencies);\n if (executable === undefined) {\n problems.push(adbNotFoundProblem({ commandId: context.commandId }, config.adbPath));\n return finish<DoctorData>(context, null, problems);\n }\n\n const client = createClient(executable, context, config, dependencies);\n const version = await client.version(signal);\n if (!processSucceeded(version.process)) {\n problems.push(operationProblem(\"version\", version, context.commandId));\n return finish<DoctorData>(context, null, problems);\n }\n\n const hostFeatures = await client.hostFeatures(signal);\n if (!processSucceeded(hostFeatures.process)) {\n const problem = operationProblem(\"host-features\", hostFeatures, context.commandId);\n if (problem.code === ProblemCode.OperationInterrupted) {\n problems.push(problem);\n return finish<DoctorData>(context, null, problems);\n }\n problems.push(\n adbOptionalProbeProblem(\"host-features\", hostFeatures.process, problem.correlation),\n );\n }\n\n let serverStatus: Record<string, string> | null = null;\n if (processSucceeded(hostFeatures.process) && hostFeatures.value.includes(\"server_status\")) {\n const status = await client.serverStatus(signal);\n if (processSucceeded(status.process)) {\n serverStatus = redactedRecord(status.value);\n problems.push(\n ...problemsForServerStatus(status.value, version.value.platformToolsVersion, {\n commandId: context.commandId,\n operationId: status.operationId,\n }),\n );\n } else {\n const problem = operationProblem(\"server-status\", status, context.commandId);\n if (problem.code === ProblemCode.OperationInterrupted) {\n problems.push(problem);\n return finish<DoctorData>(context, null, problems);\n }\n problems.push(adbOptionalProbeProblem(\"server-status\", status.process, problem.correlation));\n }\n }\n\n const devices = await client.devices(signal);\n if (!processSucceeded(devices.process)) {\n problems.push(operationProblem(\"devices\", devices, context.commandId));\n return finish<DoctorData>(context, null, problems);\n }\n\n problems.push(...problemsForDevices(devices.value, { commandId: context.commandId }, \"warning\"));\n const inspection = await inspectTargets(\n client,\n devices.value,\n context.commandId,\n signal,\n processSucceeded(hostFeatures.process) ? hostFeatures.value : [],\n );\n if (inspection.interruption !== undefined) {\n problems.push(inspection.interruption);\n return finish<DoctorData>(context, null, problems);\n }\n problems.push(...targetInventoryProblems(inspection.targets, { commandId: context.commandId }));\n problems.push(...inspection.optionalProblems);\n if (devices.value.length === 0) {\n problems.push(\n noTargetsProblem({ commandId: context.commandId }, inspection.discovery.mdns.services),\n );\n }\n\n const versionData: Omit<AdbVersion, \"raw\"> = {\n ...(version.value.protocolVersion === undefined\n ? {}\n : { protocolVersion: version.value.protocolVersion }),\n ...(version.value.platformToolsVersion === undefined\n ? {}\n : { platformToolsVersion: version.value.platformToolsVersion }),\n ...(version.value.installedAs === undefined\n ? {}\n : { installedAs: redactedPath(version.value.installedAs) }),\n };\n\n return finish(\n context,\n {\n runtime: (dependencies.runtime ?? detectRuntime)(),\n adb: {\n path: redactedPath(executable),\n version: versionData,\n hostFeatures: processSucceeded(hostFeatures.process) ? hostFeatures.value : [],\n serverStatus,\n },\n devices: devices.value,\n targets: inspection.targets,\n discovery: inspection.discovery,\n },\n problems,\n );\n}\n\nexport async function runDevices(\n config: CommandConfig = {},\n dependencies: CommandDependencies = {},\n signal?: AbortSignal,\n): Promise<CommandExecution<DevicesData>> {\n const context = createContext(\"devices\", dependencies);\n const problems: Problem[] = [];\n const executable = await resolveAdb(context, config, dependencies);\n if (executable === undefined) {\n problems.push(adbNotFoundProblem({ commandId: context.commandId }, config.adbPath));\n return finish<DevicesData>(context, null, problems);\n }\n\n const client = createClient(executable, context, config, dependencies);\n const devices = await client.devices(signal);\n if (!processSucceeded(devices.process)) {\n problems.push(operationProblem(\"devices\", devices, context.commandId));\n return finish<DevicesData>(context, null, problems);\n }\n\n problems.push(...problemsForDevices(devices.value, { commandId: context.commandId }, \"warning\"));\n\n const inspection = await inspectTargets(client, devices.value, context.commandId, signal);\n if (inspection.interruption !== undefined) {\n problems.push(inspection.interruption);\n return finish<DevicesData>(context, null, problems);\n }\n problems.push(...targetInventoryProblems(inspection.targets, { commandId: context.commandId }));\n problems.push(...inspection.optionalProblems);\n if (devices.value.length === 0) {\n problems.push(\n noTargetsProblem({ commandId: context.commandId }, inspection.discovery.mdns.services),\n );\n }\n\n let selected: SelectedTarget | undefined;\n if (\n config.targetSelector !== undefined ||\n config.targetTransportId !== undefined ||\n config.rememberedOnly === true\n ) {\n const selection = selectTarget(inspection.targets, {\n ...(config.targetSelector === undefined ? {} : { selector: config.targetSelector }),\n ...(config.targetTransportId === undefined ? {} : { transportId: config.targetTransportId }),\n ...(config.targetAliases === undefined ? {} : { aliases: config.targetAliases }),\n ...(config.rememberedSerial === undefined\n ? {}\n : { rememberedSerial: config.rememberedSerial }),\n ...(config.rememberedHardwareSerial === undefined\n ? {}\n : { rememberedHardwareSerial: config.rememberedHardwareSerial }),\n ...(config.rememberedOnly === undefined ? {} : { rememberedOnly: config.rememberedOnly }),\n });\n if (selection.kind !== \"selected\") {\n problems.push(targetSelectionProblem(selection, { commandId: context.commandId }));\n } else {\n selected = selection.selection;\n }\n }\n\n return finish(\n context,\n {\n adbPath: redactedPath(executable),\n devices: devices.value,\n targets: inspection.targets,\n discovery: inspection.discovery,\n ...(selected === undefined ? {} : { selected }),\n },\n problems,\n );\n}\n\nfunction portInputProblem(\n field: \"device\" | \"host\",\n value: string | number | undefined,\n commandId: string,\n): Problem {\n return commandProblem(\n ProblemCode.InvalidPort,\n \"input.port\",\n `The ${field} port is invalid.`,\n \"Use a TCP port from 1 to 65535, for example 8081 or tcp:8081.\",\n commandId,\n [{ source: \"input\", field: `${field}Port`, value: value === undefined ? null : String(value) }],\n );\n}\n\nfunction requestedPortMapping(\n request: PortCommandRequest,\n commandId: string,\n): { host: string; device: string } | Problem {\n const primary = request.direction === \"reverse\" ? request.devicePort : request.hostPort;\n if (primary === undefined) {\n return portInputProblem(\n request.direction === \"reverse\" ? \"device\" : \"host\",\n primary,\n commandId,\n );\n }\n const primaryEndpoint = tcpEndpoint(primary);\n if (primaryEndpoint === undefined) {\n return portInputProblem(\n request.direction === \"reverse\" ? \"device\" : \"host\",\n primary,\n commandId,\n );\n }\n const secondary =\n request.direction === \"reverse\"\n ? (request.hostPort ?? request.devicePort)\n : (request.devicePort ?? request.hostPort);\n if (secondary === undefined) {\n return portInputProblem(\n request.direction === \"reverse\" ? \"host\" : \"device\",\n secondary,\n commandId,\n );\n }\n const secondaryEndpoint = tcpEndpoint(secondary);\n if (secondaryEndpoint === undefined) {\n return portInputProblem(\n request.direction === \"reverse\" ? \"host\" : \"device\",\n secondary,\n commandId,\n );\n }\n return request.direction === \"reverse\"\n ? { host: secondaryEndpoint, device: primaryEndpoint }\n : { host: primaryEndpoint, device: secondaryEndpoint };\n}\n\nfunction listenEndpoint(\n direction: PortDirection,\n mapping: { host: string; device: string },\n): string {\n return direction === \"forward\" ? mapping.host : mapping.device;\n}\n\nfunction targetForAdb(selection: SelectedTarget): { serial: string; transportId?: string } {\n return {\n serial: selection.transport.serial,\n ...(selection.transport.transportId === undefined\n ? {}\n : { transportId: selection.transport.transportId }),\n };\n}\n\nexport async function runPorts(\n request: PortCommandRequest,\n config: CommandConfig = {},\n dependencies: CommandDependencies = {},\n signal?: AbortSignal,\n): Promise<CommandExecution<PortsData>> {\n const context = createContext(`ports ${request.direction} ${request.action}`, dependencies);\n const problems: Problem[] = [];\n const requested =\n request.action === \"list\" ? undefined : requestedPortMapping(request, context.commandId);\n if (requested !== undefined && \"code\" in requested) {\n problems.push(requested);\n return finish<PortsData>(context, null, problems);\n }\n\n const executable = await resolveAdb(context, config, dependencies);\n if (executable === undefined) {\n problems.push(adbNotFoundProblem({ commandId: context.commandId }, config.adbPath));\n return finish<PortsData>(context, null, problems);\n }\n const client = createClient(executable, context, config, dependencies);\n const devices = await client.devices(signal);\n if (!processSucceeded(devices.process)) {\n problems.push(operationProblem(\"devices\", devices, context.commandId));\n return finish<PortsData>(context, null, problems);\n }\n const inspection = await inspectTargets(client, devices.value, context.commandId, signal);\n if (inspection.interruption !== undefined) {\n problems.push(inspection.interruption);\n return finish<PortsData>(context, null, problems);\n }\n problems.push(...inspection.optionalProblems);\n problems.push(...targetInventoryProblems(inspection.targets, { commandId: context.commandId }));\n const selection = selectTarget(inspection.targets, {\n ...(config.targetSelector === undefined ? {} : { selector: config.targetSelector }),\n ...(config.targetTransportId === undefined ? {} : { transportId: config.targetTransportId }),\n ...(config.targetAliases === undefined ? {} : { aliases: config.targetAliases }),\n ...(config.rememberedSerial === undefined ? {} : { rememberedSerial: config.rememberedSerial }),\n ...(config.rememberedHardwareSerial === undefined\n ? {}\n : { rememberedHardwareSerial: config.rememberedHardwareSerial }),\n ...(config.rememberedOnly === undefined ? {} : { rememberedOnly: config.rememberedOnly }),\n });\n if (selection.kind !== \"selected\") {\n problems.push(targetSelectionProblem(selection, { commandId: context.commandId }));\n return finish<PortsData>(context, null, problems);\n }\n\n const target = targetForAdb(selection.selection);\n const listed = await client.listPortMappings(target, request.direction, signal);\n if (!processSucceeded(listed.process)) {\n problems.push(operationProblem(`${request.direction}-list`, listed, context.commandId));\n return finish<PortsData>(context, null, problems);\n }\n const mappings = listed.value.map((mapping) => normalizePortMapping(request.direction, mapping));\n if (request.action === \"list\") {\n return finish(\n context,\n {\n adbPath: redactedPath(executable),\n action: request.action,\n direction: request.direction,\n selected: selection.selection,\n mappings,\n status: \"listed\",\n },\n problems,\n );\n }\n\n if (requested === undefined) {\n throw new Error(\"Port request validation did not produce a mapping.\");\n }\n const requestedListen = listenEndpoint(request.direction, requested);\n const existingAtEndpoint = mappings.find(\n (mapping) => listenEndpoint(request.direction, mapping) === requestedListen,\n );\n const base = {\n adbPath: redactedPath(executable),\n action: request.action,\n direction: request.direction,\n selected: selection.selection,\n requested,\n };\n\n if (request.action === \"add\" && existingAtEndpoint !== undefined) {\n if (\n existingAtEndpoint.host === requested.host &&\n existingAtEndpoint.device === requested.device\n ) {\n return finish(context, { ...base, mappings, status: \"already-exists\" as const }, problems);\n }\n problems.push(\n commandProblem(\n ProblemCode.PortMappingConflict,\n \"adb.port.conflict\",\n `The ${request.direction} listen port is already mapped.`,\n \"Remove the existing mapping explicitly or choose another port; ADB Ready will not overwrite it.\",\n context.commandId,\n [\n { source: \"adb.port\", field: \"listen\", value: requestedListen },\n { source: \"adb.port\", field: \"host\", value: existingAtEndpoint.host },\n { source: \"adb.port\", field: \"device\", value: existingAtEndpoint.device },\n ],\n ),\n );\n return finish<PortsData>(context, { ...base, mappings, status: \"already-exists\" }, problems);\n }\n\n const [firstEndpoint, secondEndpoint] = mappingArguments(\n request.direction,\n requested.host,\n requested.device,\n );\n if (config.dryRun) {\n const args =\n request.action === \"add\"\n ? [\n ...(target.transportId === undefined\n ? [\"-s\", target.serial]\n : [\"-t\", target.transportId]),\n request.direction,\n \"--no-rebind\",\n firstEndpoint,\n secondEndpoint,\n ]\n : [\n ...(target.transportId === undefined\n ? [\"-s\", target.serial]\n : [\"-t\", target.transportId]),\n request.direction,\n \"--remove\",\n requestedListen,\n ];\n return finish(\n context,\n {\n ...base,\n mappings,\n status: \"planned\",\n plan: {\n schemaVersion: SCHEMA_VERSION,\n dryRun: true,\n steps: [\n {\n id: `${request.direction}-${request.action}`,\n title: `${request.action === \"add\" ? \"Add\" : \"Remove\"} ${request.direction} mapping ${requested.device} ↔ ${requested.host}`,\n risk: \"device-reversible\",\n executable: redactedPath(executable),\n args,\n },\n {\n id: \"verify-port-mapping\",\n title: `Verify ${request.direction} mappings`,\n risk: \"read-only\",\n executable: redactedPath(executable),\n args: [\n ...(target.transportId === undefined\n ? [\"-s\", target.serial]\n : [\"-t\", target.transportId]),\n request.direction,\n \"--list\",\n ],\n },\n ],\n },\n },\n problems,\n );\n }\n\n if (request.action === \"remove\" && existingAtEndpoint === undefined) {\n return finish(context, { ...base, mappings, status: \"not-found\" }, problems);\n }\n\n const mutation =\n request.action === \"add\"\n ? await client.addPortMapping(\n target,\n request.direction,\n firstEndpoint,\n secondEndpoint,\n signal,\n )\n : await client.removePortMapping(target, request.direction, requestedListen, signal);\n if (!processSucceeded(mutation.process)) {\n problems.push(\n operationProblem(`${request.direction}-${request.action}`, mutation, context.commandId),\n );\n return finish<PortsData>(context, { ...base, mappings, status: \"not-found\" }, problems);\n }\n const verified = await client.listPortMappings(target, request.direction, signal);\n if (!processSucceeded(verified.process)) {\n problems.push(operationProblem(`${request.direction}-verify`, verified, context.commandId));\n return finish<PortsData>(context, { ...base, mappings, status: \"not-found\" }, problems);\n }\n const verifiedMappings = verified.value.map((mapping) =>\n normalizePortMapping(request.direction, mapping),\n );\n const isPresent = verifiedMappings.some(\n (mapping) => mapping.host === requested.host && mapping.device === requested.device,\n );\n if ((request.action === \"add\" && !isPresent) || (request.action === \"remove\" && isPresent)) {\n problems.push(\n commandProblem(\n ProblemCode.PortMappingVerificationFailed,\n \"adb.port.verification\",\n `ADB did not verify the ${request.direction} mapping change.`,\n \"The requested mutation returned success, but the follow-up mapping list disagreed.\",\n context.commandId,\n ),\n );\n }\n return finish(\n context,\n {\n ...base,\n mappings: verifiedMappings,\n status: request.action === \"add\" ? \"added\" : \"removed\",\n },\n problems,\n );\n}\n\nasync function resolveWirelessEndpoint(\n client: AdbClient,\n requested: string | undefined,\n serviceType: \"connect\" | \"pairing\",\n commandId: string,\n signal: AbortSignal | undefined,\n requestedWasDiscovered = false,\n requestedCandidates: readonly string[] = [],\n): Promise<WirelessEndpointResolution> {\n if (requested !== undefined) {\n const endpoint = parseAdbNetworkEndpoint(requested);\n return endpoint === undefined\n ? {\n candidates: [],\n discovered: requestedWasDiscovered,\n problem: commandProblem(\n ProblemCode.InvalidEndpoint,\n \"input.endpoint\",\n \"The wireless endpoint is invalid.\",\n \"Use HOST:PORT, IPv4:PORT, or [IPv6]:PORT with a port from 1 to 65535.\",\n commandId,\n [{ source: \"input\", field: \"endpoint\", value: requested }],\n ),\n }\n : {\n endpoint: endpoint.serial,\n candidates: requestedWasDiscovered\n ? normalizeEndpointCandidates(endpoint.serial, requestedCandidates)\n : [endpoint.serial],\n discovered: requestedWasDiscovered,\n };\n }\n\n const mdnsDiscovery = await discoverMdns(client, undefined, signal);\n const mdns = mdnsDiscovery.observation;\n if (!processSucceeded(mdns.process)) {\n return {\n candidates: [],\n discovered: true,\n problem: operationProblem(\"mdns-services\", mdns, commandId),\n };\n }\n const serviceKinds =\n serviceType === \"connect\" ? new Set([\"connect\", \"legacy\"]) : new Set([\"pairing\"]);\n const discoveredServices = mdns.value.filter((service) => serviceKinds.has(service.serviceType));\n const services =\n serviceType === \"connect\"\n ? discoveredServices.filter(isConnectableDiscoveryService)\n : discoveredServices;\n if (\n serviceType === \"connect\" &&\n services.length === 0 &&\n discoveredServices.some(({ knownDevice }) => knownDevice === false)\n ) {\n return {\n candidates: [],\n discovered: true,\n problem: pairingRequiredProblem(discoveredServices, mdns.value, commandId),\n };\n }\n const serviceGroups = new Map<string, AdbMdnsService[]>();\n for (const service of services) {\n const key = `${service.rawServiceType}\\0${service.instance}`;\n const group = serviceGroups.get(key) ?? [];\n group.push(service);\n serviceGroups.set(key, group);\n }\n if (serviceGroups.size === 0) {\n return {\n candidates: [],\n discovered: true,\n problem: commandProblem(\n ProblemCode.WirelessEndpointNotFound,\n \"target.discovery\",\n `No wireless ${serviceType} endpoint was discovered.`,\n serviceType === \"pairing\"\n ? \"Open Wireless debugging and choose Pair device with pairing code, or provide its displayed HOST:PORT explicitly.\"\n : \"Enable Wireless debugging, keep the target on a reachable network, or provide HOST:PORT explicitly.\",\n commandId,\n ),\n };\n }\n if (serviceGroups.size > 1) {\n const endpoints = [\n ...new Set(services.flatMap((service) => serviceEndpointCandidates(service))),\n ].sort();\n return {\n candidates: [],\n discovered: true,\n problem: commandProblem(\n ProblemCode.MultipleWirelessEndpoints,\n \"target.selection\",\n `Multiple wireless ${serviceType} endpoints require an explicit selection.`,\n `Run the command again with one of these endpoints: ${endpoints.join(\", \")}`,\n commandId,\n [{ source: \"adb.mdns\", field: \"endpoints\", value: endpoints }],\n ),\n };\n }\n const serviceGroup = [...serviceGroups.values()][0] ?? [];\n const candidates = [\n ...new Set(serviceGroup.flatMap((service) => serviceEndpointCandidates(service))),\n ].slice(0, 3);\n const endpoint = candidates[0];\n return endpoint === undefined\n ? { candidates: [], discovered: true }\n : { endpoint, candidates, discovered: true };\n}\n\nexport async function runWirelessDiscovery(\n kind: \"connect\" | \"pairing\",\n config: CommandConfig = {},\n dependencies: CommandDependencies = {},\n signal?: AbortSignal,\n): Promise<CommandExecution<WirelessDiscoveryData>> {\n const context = createContext(\"wireless-discovery\", dependencies);\n const problems: Problem[] = [];\n const executable = await resolveAdb(context, config, dependencies);\n if (executable === undefined) {\n problems.push(adbNotFoundProblem({ commandId: context.commandId }, config.adbPath));\n return finish<WirelessDiscoveryData>(context, null, problems);\n }\n const client = createClient(executable, context, config, dependencies);\n const mdnsDiscovery = await discoverMdns(client, undefined, signal);\n const mdns = mdnsDiscovery.observation;\n if (!processSucceeded(mdns.process)) {\n problems.push(operationProblem(\"mdns-services\", mdns, context.commandId));\n return finish<WirelessDiscoveryData>(context, null, problems);\n }\n const accepted = kind === \"connect\" ? new Set([\"connect\", \"legacy\"]) : new Set([\"pairing\"]);\n const discoveredServices = mdns.value.filter((service) => accepted.has(service.serviceType));\n if (\n kind === \"connect\" &&\n discoveredServices.length > 0 &&\n discoveredServices.every(\n ({ knownDevice, serviceType }) => serviceType === \"connect\" && knownDevice === false,\n )\n ) {\n problems.push(pairingRequiredProblem(discoveredServices, mdns.value, context.commandId));\n return finish(context, { adbPath: redactedPath(executable), kind, services: [] }, problems);\n }\n const seen = new Set<string>();\n const services = discoveredServices.filter((service) => {\n if (\n (kind === \"connect\" && !isConnectableDiscoveryService(service)) ||\n seen.has(service.endpoint.serial)\n ) {\n return false;\n }\n seen.add(service.endpoint.serial);\n return true;\n });\n if (services.length === 0) {\n problems.push(\n commandProblem(\n ProblemCode.WirelessEndpointNotFound,\n \"target.discovery\",\n `No wireless ${kind} endpoint was discovered.`,\n kind === \"pairing\"\n ? \"Open Wireless debugging and choose Pair device with pairing code, or provide its displayed HOST:PORT explicitly.\"\n : \"Enable Wireless debugging, keep the target on a reachable network, or provide HOST:PORT explicitly.\",\n context.commandId,\n ),\n );\n }\n return finish(context, { adbPath: redactedPath(executable), kind, services }, problems);\n}\n\nexport async function runConnect(\n requestedEndpoint: string | undefined,\n config: CommandConfig = {},\n dependencies: CommandDependencies = {},\n signal?: AbortSignal,\n): Promise<CommandExecution<ConnectData>> {\n const context = createContext(\"connect\", dependencies);\n const problems: Problem[] = [];\n if (requestedEndpoint !== undefined && parseAdbNetworkEndpoint(requestedEndpoint) === undefined) {\n problems.push(\n commandProblem(\n ProblemCode.InvalidEndpoint,\n \"input.endpoint\",\n \"The wireless endpoint is invalid.\",\n \"Use HOST:PORT, IPv4:PORT, or [IPv6]:PORT with a port from 1 to 65535.\",\n context.commandId,\n [{ source: \"input\", field: \"endpoint\", value: requestedEndpoint }],\n ),\n );\n return finish<ConnectData>(context, null, problems);\n }\n const executable = await resolveAdb(context, config, dependencies);\n if (executable === undefined) {\n problems.push(adbNotFoundProblem({ commandId: context.commandId }, config.adbPath));\n return finish<ConnectData>(context, null, problems);\n }\n const client = createClient(executable, context, config, dependencies);\n const resolution = await resolveWirelessEndpoint(\n client,\n requestedEndpoint,\n \"connect\",\n context.commandId,\n signal,\n config.endpointWasDiscovered,\n config.discoveredEndpointCandidates,\n );\n if (resolution.problem !== undefined || resolution.endpoint === undefined) {\n if (resolution.problem !== undefined) {\n problems.push(resolution.problem);\n }\n return finish<ConnectData>(context, null, problems);\n }\n const candidates =\n resolution.candidates.length > 0 ? resolution.candidates : [resolution.endpoint];\n if (config.dryRun) {\n const steps = candidates.flatMap((candidate, index) => {\n const connectId = index === 0 ? \"connect\" : `connect-alternate-${String(index)}`;\n const verifyId = index === 0 ? \"verify\" : `verify-alternate-${String(index)}`;\n const previousConnectId = index <= 1 ? \"connect\" : `connect-alternate-${String(index - 1)}`;\n return [\n {\n id: connectId,\n title:\n index === 0\n ? `Connect wireless target ${candidate}`\n : `Try alternate address ${candidate}`,\n risk: \"local-additive\" as const,\n ...(index === 0\n ? {}\n : { when: { stepId: previousConnectId, outcome: \"failure\" as const } }),\n executable: redactedPath(executable),\n args: [\"connect\", candidate],\n },\n {\n id: verifyId,\n title: `Verify ${candidate} reports device state`,\n risk: \"read-only\" as const,\n when: { stepId: connectId, outcome: \"success\" as const },\n executable: redactedPath(executable),\n args: [\"-s\", candidate, \"get-state\"],\n },\n ];\n });\n return finish(\n context,\n {\n endpoint: resolution.endpoint,\n discovered: resolution.discovered,\n plan: {\n schemaVersion: SCHEMA_VERSION,\n dryRun: true,\n steps,\n },\n },\n problems,\n );\n }\n\n const attemptedEndpoints: string[] = [];\n let connected:\n | {\n endpoint: string;\n status: ConnectedData[\"status\"];\n }\n | undefined;\n let lastConnectionProblem: Problem | undefined;\n for (const candidate of candidates) {\n attemptedEndpoints.push(candidate);\n const observation = await client.connect(candidate, signal);\n if (!processSucceeded(observation.process)) {\n lastConnectionProblem = operationProblem(\"connect\", observation, context.commandId);\n if (\n lastConnectionProblem.code === ProblemCode.OperationInterrupted ||\n lastConnectionProblem.code === ProblemCode.AdbServerUnavailable ||\n lastConnectionProblem.code === ProblemCode.AdbFeatureUnavailable\n ) {\n break;\n }\n continue;\n }\n if (\n observation.value.status === \"connected\" ||\n observation.value.status === \"already-connected\"\n ) {\n const confirmedEndpoint =\n observation.value.endpoint === undefined\n ? undefined\n : parseAdbNetworkEndpoint(observation.value.endpoint)?.serial;\n connected = {\n endpoint: confirmedEndpoint ?? candidate,\n status: observation.value.status,\n };\n break;\n }\n lastConnectionProblem = commandProblem(\n ProblemCode.WirelessConnectionFailed,\n \"adb.connect\",\n \"ADB did not confirm the wireless connection.\",\n \"The operation returned without a verified connected state.\",\n context.commandId,\n [{ source: \"adb.connect\", field: \"status\", value: observation.value.status }],\n );\n }\n if (connected === undefined) {\n const problem =\n lastConnectionProblem ??\n commandProblem(\n ProblemCode.WirelessConnectionFailed,\n \"adb.connect\",\n \"ADB could not connect to the discovered wireless target.\",\n \"None of the bounded address candidates produced a connected state.\",\n context.commandId,\n );\n problem.evidence.push({\n source: \"adb.discovery\",\n field: \"attemptedEndpoints\",\n value: attemptedEndpoints,\n });\n problems.push(problem);\n return finish<ConnectData>(context, null, problems);\n }\n if (attemptedEndpoints.length > 1) {\n context.bus.emit({\n type: \"recovery.completed\",\n source: \"command.connect\",\n severity: \"info\",\n message: `Connected through alternate address ${connected.endpoint}`,\n correlation: { commandId: context.commandId },\n data: { attemptedEndpoints, selectedEndpoint: connected.endpoint },\n });\n }\n\n const state = await client.getState(connected.endpoint, signal);\n if (!processSucceeded(state.process)) {\n problems.push(operationProblem(\"get-state\", state, context.commandId));\n return finish<ConnectData>(context, null, problems);\n }\n if (state.value !== \"device\") {\n problems.push(\n commandProblem(\n ProblemCode.WirelessConnectionFailed,\n \"target.verification\",\n \"The wireless target could not be verified as ready.\",\n `ADB reported ${state.value ?? \"no state\"} after connecting.`,\n context.commandId,\n [{ source: \"adb.get-state\", field: \"state\", value: state.value ?? null }],\n ),\n );\n return finish<ConnectData>(context, null, problems);\n }\n\n const identity = await client.getHardwareSerial(connected.endpoint, signal);\n if (identity.process.aborted) {\n problems.push(operationProblem(\"hardware-serial\", identity, context.commandId));\n return finish<ConnectData>(context, null, problems);\n }\n const hardwareSerial = processSucceeded(identity.process)\n ? normalizedHardwareSerial(identity.value)\n : undefined;\n return finish(\n context,\n {\n adbPath: redactedPath(executable),\n endpoint: connected.endpoint,\n status: connected.status,\n serial: connected.endpoint,\n state: \"device\",\n ...(hardwareSerial === undefined ? {} : { hardwareSerial }),\n discovered: resolution.discovered,\n ...(attemptedEndpoints.length > 1 ? { attemptedEndpoints } : {}),\n },\n problems,\n );\n}\n\nexport async function runPair(\n requestedEndpoint: string | undefined,\n pairingCode: string,\n config: CommandConfig = {},\n dependencies: CommandDependencies = {},\n signal?: AbortSignal,\n): Promise<CommandExecution<PairData>> {\n const context = createContext(\"pair\", dependencies);\n const problems: Problem[] = [];\n if (!config.dryRun && !/^\\d{6}$/u.test(pairingCode)) {\n problems.push(\n commandProblem(\n ProblemCode.InvalidPairingCode,\n \"input.pairing-code\",\n \"The pairing code must contain exactly six digits.\",\n \"Open Pair device with pairing code on Android and enter the current six-digit code.\",\n context.commandId,\n ),\n );\n return finish<PairData>(context, null, problems);\n }\n if (requestedEndpoint !== undefined && parseAdbNetworkEndpoint(requestedEndpoint) === undefined) {\n problems.push(\n commandProblem(\n ProblemCode.InvalidEndpoint,\n \"input.endpoint\",\n \"The wireless pairing endpoint is invalid.\",\n \"Use the HOST:PORT shown on Android's pairing-code screen.\",\n context.commandId,\n [{ source: \"input\", field: \"endpoint\", value: requestedEndpoint }],\n ),\n );\n return finish<PairData>(context, null, problems);\n }\n const executable = await resolveAdb(context, config, dependencies);\n if (executable === undefined) {\n problems.push(adbNotFoundProblem({ commandId: context.commandId }, config.adbPath));\n return finish<PairData>(context, null, problems);\n }\n const client = createClient(executable, context, config, dependencies);\n const resolution = await resolveWirelessEndpoint(\n client,\n requestedEndpoint,\n \"pairing\",\n context.commandId,\n signal,\n config.endpointWasDiscovered,\n config.discoveredEndpointCandidates,\n );\n if (resolution.problem !== undefined || resolution.endpoint === undefined) {\n if (resolution.problem !== undefined) {\n problems.push(resolution.problem);\n }\n return finish<PairData>(context, null, problems);\n }\n if (config.dryRun) {\n return finish(\n context,\n {\n endpoint: resolution.endpoint,\n discovered: resolution.discovered,\n plan: {\n schemaVersion: SCHEMA_VERSION,\n dryRun: true,\n steps: [\n {\n id: \"pair\",\n title: `Pair wireless target ${resolution.endpoint}`,\n risk: \"device-reversible\",\n executable: redactedPath(executable),\n args: [\"pair\", resolution.endpoint],\n },\n ],\n },\n },\n problems,\n );\n }\n\n const pairing = await client.pair(resolution.endpoint, pairingCode, signal);\n if (!processSucceeded(pairing.process)) {\n problems.push(operationProblem(\"pair\", pairing, context.commandId));\n return finish<PairData>(context, null, problems);\n }\n if (!pairing.value.paired) {\n problems.push(\n commandProblem(\n ProblemCode.WirelessPairingFailed,\n \"adb.pair\",\n \"ADB did not confirm wireless pairing.\",\n \"Check that the pairing screen is still open and the six-digit code has not expired.\",\n context.commandId,\n ),\n );\n return finish<PairData>(context, null, problems);\n }\n\n return finish(\n context,\n {\n adbPath: redactedPath(executable),\n endpoint: resolution.endpoint,\n paired: true,\n discovered: resolution.discovered,\n },\n problems,\n );\n}\n\nexport interface DevPort {\n device: string | number;\n host?: string | number;\n}\n\nexport interface LogsOptions {\n packageName?: string;\n pid?: number;\n tags?: readonly string[];\n excludeTags?: readonly string[];\n minimumPriority?: \"A\" | \"D\" | \"E\" | \"F\" | \"I\" | \"S\" | \"V\" | \"W\";\n buffers?: readonly (\"crash\" | \"main\" | \"system\")[];\n since?: string;\n tail?: number;\n dump?: boolean;\n maxRecords?: number;\n onLine?: (line: string) => void;\n}\n\nexport interface LogRecord {\n raw: string;\n parsed: boolean;\n message: string;\n priority?: string;\n tag?: string;\n pid?: number;\n tid?: number;\n}\n\nexport interface LogsData {\n adbPath: string;\n selected: SelectedTarget;\n packageName?: string;\n pid?: number;\n uid?: number;\n buffers: string[];\n filters: string[];\n records: LogRecord[];\n findings: Array<LogFinding & { message: string; priority?: string; tag?: string }>;\n dropped: number;\n process: {\n exitCode: number | null;\n signal: NodeJS.Signals | null;\n durationMs: number;\n stdoutTruncated: boolean;\n stderrTruncated: boolean;\n };\n}\n\nexport async function runLogs(\n options: LogsOptions,\n config: CommandConfig = {},\n dependencies: CommandDependencies = {},\n signal?: AbortSignal,\n): Promise<CommandExecution<LogsData>> {\n const context = createContext(\"logs\", dependencies);\n const problems: Problem[] = [];\n const executable = await resolveAdb(context, config, dependencies);\n if (executable === undefined) {\n problems.push(adbNotFoundProblem({ commandId: context.commandId }, config.adbPath));\n return finish<LogsData>(context, null, problems);\n }\n const discoveryClient = createClient(executable, context, config, dependencies);\n const devices = await discoveryClient.devices(signal);\n if (!processSucceeded(devices.process)) {\n problems.push(operationProblem(\"devices\", devices, context.commandId));\n return finish<LogsData>(context, null, problems);\n }\n const inspection = await inspectTargets(\n discoveryClient,\n devices.value,\n context.commandId,\n signal,\n );\n if (inspection.interruption !== undefined) {\n problems.push(inspection.interruption);\n return finish<LogsData>(context, null, problems);\n }\n problems.push(...inspection.optionalProblems);\n const selection = selectTarget(inspection.targets, {\n ...(config.targetSelector === undefined ? {} : { selector: config.targetSelector }),\n ...(config.targetTransportId === undefined ? {} : { transportId: config.targetTransportId }),\n ...(config.targetAliases === undefined ? {} : { aliases: config.targetAliases }),\n ...(config.rememberedSerial === undefined ? {} : { rememberedSerial: config.rememberedSerial }),\n ...(config.rememberedHardwareSerial === undefined\n ? {}\n : { rememberedHardwareSerial: config.rememberedHardwareSerial }),\n ...(config.rememberedOnly === undefined ? {} : { rememberedOnly: config.rememberedOnly }),\n });\n if (selection.kind !== \"selected\") {\n problems.push(targetSelectionProblem(selection, { commandId: context.commandId }));\n return finish<LogsData>(context, null, problems);\n }\n const selected = selection.selection;\n const target = targetForAdb(selected);\n const correlation = { commandId: context.commandId, targetId: selected.target.id };\n const client = new AdbClient({\n executable,\n bus: context.bus,\n correlation,\n ...(config.adbHost === undefined ? {} : { host: config.adbHost }),\n ...(config.adbPort === undefined ? {} : { port: config.adbPort }),\n ...(config.timeoutMs === undefined ? {} : { timeoutMs: config.timeoutMs }),\n ...(dependencies.runner === undefined ? {} : { runner: dependencies.runner }),\n ...(dependencies.idFactory === undefined ? {} : { idFactory: dependencies.idFactory }),\n });\n let resolvedPid = options.pid;\n let resolvedUid: number | undefined;\n if (resolvedPid === undefined && options.packageName !== undefined) {\n const packages = await client.shell(\n target,\n [\"cmd\", \"package\", \"list\", \"packages\", \"-U\", options.packageName],\n signal,\n );\n const uidMatch =\n processSucceeded(packages.process) && packages.value !== undefined\n ? packages.value.match(/(?:^|\\s)uid:(\\d+)(?:\\s|$)/u)\n : null;\n const uid = Number(uidMatch?.[1]);\n if (Number.isSafeInteger(uid) && uid >= 0) resolvedUid = uid;\n }\n if (resolvedPid === undefined && resolvedUid === undefined && options.packageName !== undefined) {\n const pid = await client.shell(target, [\"pidof\", \"-s\", options.packageName], signal);\n const parsedPid = processSucceeded(pid.process) ? Number(pid.value) : Number.NaN;\n if (!Number.isSafeInteger(parsedPid) || parsedPid < 1) {\n problems.push(\n commandProblem(\n ProblemCode.LogPackageNotRunning,\n \"logcat.package\",\n `Android package ${options.packageName} is not running on the selected target.`,\n \"Start the app and retry, or omit --package to inspect target-wide logs.\",\n context.commandId,\n ),\n );\n return finish<LogsData>(context, null, problems);\n }\n resolvedPid = parsedPid;\n }\n const priority = options.minimumPriority ?? \"I\";\n const filters =\n options.tags === undefined || options.tags.length === 0\n ? [`*:${priority}`]\n : [...options.tags.map((tag) => `${tag}:${priority}`), \"*:S\"];\n for (const tag of options.excludeTags ?? []) {\n filters.unshift(`${tag}:S`);\n }\n const buffers = [...new Set(options.buffers ?? [])];\n if (options.tail !== undefined && (!Number.isSafeInteger(options.tail) || options.tail < 1)) {\n problems.push(\n commandProblem(\n ProblemCode.LogcatFailed,\n \"input.logs.tail\",\n \"The log tail count must be a positive integer.\",\n \"Use --tail with a value of at least 1.\",\n context.commandId,\n ),\n );\n return finish<LogsData>(context, null, problems);\n }\n if (options.tail !== undefined && options.since !== undefined) {\n problems.push(\n commandProblem(\n ProblemCode.LogcatFailed,\n \"input.logs.window\",\n \"Only one log start window can be selected.\",\n \"Use either --tail or --since, not both.\",\n context.commandId,\n ),\n );\n return finish<LogsData>(context, null, problems);\n }\n const maxRecords = options.maxRecords ?? 2_000;\n if (!Number.isSafeInteger(maxRecords) || maxRecords < 1) {\n problems.push(\n commandProblem(\n ProblemCode.LogcatFailed,\n \"input.logs.max-records\",\n \"The log record limit must be a positive integer.\",\n \"Use --max-records with a value of at least 1.\",\n context.commandId,\n ),\n );\n return finish<LogsData>(context, null, problems);\n }\n const records: LogRecord[] = [];\n const findings: LogsData[\"findings\"] = [];\n const findingCodes = new Set<string>();\n let dropped = 0;\n const lines = new TextLineBuffer((raw) => {\n const safeRaw = redactText(raw).value;\n const parsed = parseLogcatThreadtimeLine(safeRaw);\n const record: LogRecord = {\n raw: safeRaw,\n parsed: parsed !== undefined,\n message: parsed?.message ?? safeRaw,\n ...(parsed === undefined\n ? {}\n : { priority: parsed.priority, tag: parsed.tag, pid: parsed.pid, tid: parsed.tid }),\n };\n records.push(record);\n while (records.length > maxRecords) {\n records.shift();\n dropped += 1;\n }\n const finding = classifyLogRecord(parsed, safeRaw);\n if (finding !== undefined && !findingCodes.has(finding.code)) {\n findingCodes.add(finding.code);\n findings.push({\n ...finding,\n message: record.message,\n ...(record.priority === undefined ? {} : { priority: record.priority }),\n ...(record.tag === undefined ? {} : { tag: record.tag }),\n });\n context.bus.emit({\n type: \"log.problem\",\n source: \"logcat\",\n severity: \"error\",\n message: finding.summary,\n correlation,\n data: {\n code: finding.code,\n detail: finding.detail,\n evidence: record.message,\n ...(record.priority === undefined ? {} : { priority: record.priority }),\n ...(record.tag === undefined ? {} : { tag: record.tag }),\n },\n });\n }\n context.bus.emit({\n type: \"log.record\",\n source: \"logcat\",\n severity: streamSeverity(parsed),\n message: record.message,\n correlation,\n data: {\n raw: record.raw,\n parsed: record.parsed,\n ...(record.priority === undefined ? {} : { priority: record.priority }),\n ...(record.tag === undefined ? {} : { tag: record.tag }),\n ...(record.pid === undefined ? {} : { pid: record.pid }),\n ...(record.tid === undefined ? {} : { tid: record.tid }),\n },\n });\n options.onLine?.(safeRaw);\n });\n const runner = dependencies.runner ?? runProcess;\n const selectorArgs =\n target.transportId === undefined ? [\"-s\", target.serial] : [\"-t\", target.transportId];\n const processResult = await runner({\n executable,\n args: [\n ...(config.adbHost === undefined ? [] : [\"-H\", config.adbHost]),\n ...(config.adbPort === undefined ? [] : [\"-P\", String(config.adbPort)]),\n ...selectorArgs,\n \"logcat\",\n \"-v\",\n \"threadtime\",\n ...buffers.flatMap((buffer) => [\"-b\", buffer]),\n ...(options.tail === undefined && options.since === undefined\n ? options.dump\n ? [\"-d\"]\n : [\"-T\", \"1\"]\n : [options.dump ? \"-t\" : \"-T\", String(options.tail ?? options.since)]),\n ...(resolvedUid === undefined ? [] : [`--uid=${String(resolvedUid)}`]),\n ...(resolvedPid === undefined ? [] : [`--pid=${String(resolvedPid)}`]),\n ...filters,\n ],\n ...(signal === undefined ? {} : { signal }),\n maxBufferBytes: 4 * 1024 * 1024,\n onStdoutChunk: (chunk) => lines.push(chunk),\n onStderrChunk: (chunk) => lines.push(chunk),\n });\n lines.flush();\n if (processResult.aborted && signal?.aborted === true) {\n problems.push(\n commandProblem(\n ProblemCode.OperationInterrupted,\n \"logcat.interrupted\",\n \"Log streaming was interrupted.\",\n \"ADB Ready stopped its owned logcat process safely.\",\n context.commandId,\n ),\n );\n } else if (!processSucceeded(processResult)) {\n problems.push(\n commandProblem(\n ProblemCode.LogcatFailed,\n \"logcat.exit\",\n \"Logcat failed for the selected target.\",\n `The process exited with ${processResult.exitCode === null ? String(processResult.signal) : String(processResult.exitCode)}.`,\n context.commandId,\n ),\n );\n }\n return finish(\n context,\n {\n adbPath: redactedPath(executable),\n selected,\n ...(options.packageName === undefined ? {} : { packageName: options.packageName }),\n ...(resolvedPid === undefined ? {} : { pid: resolvedPid }),\n ...(resolvedUid === undefined ? {} : { uid: resolvedUid }),\n buffers,\n filters,\n records,\n findings,\n dropped,\n process: {\n exitCode: processResult.exitCode,\n signal: processResult.signal,\n durationMs: processResult.durationMs,\n stdoutTruncated: processResult.stdoutTruncated,\n stderrTruncated: processResult.stderrTruncated,\n },\n },\n problems,\n );\n}\n\nexport interface DevCommand {\n executable: string;\n args: string[];\n cwd?: string;\n env?: Record<string, string>;\n}\n\nexport interface DevOptions {\n cwd: string;\n preset?: DevPreset;\n packageManager?: PackageManagerName;\n command?: DevCommand;\n reversePorts?: readonly DevPort[];\n cleanupPorts?: boolean;\n logs?: boolean;\n journal?: {\n maxEntries?: number;\n maxBytes?: number;\n sources?: readonly string[];\n minimumSeverity?: \"debug\" | \"error\" | \"info\" | \"warning\";\n redaction?: {\n additionalLiterals?: readonly string[];\n };\n };\n childStdin?: \"ignore\" | \"inherit\";\n onChildLine?: (stream: \"stderr\" | \"stdout\", line: string) => void;\n hooks?: Partial<Record<DevHookEvent, readonly DevHook[]>>;\n watch?: boolean;\n watchIntervalMs?: number;\n recovery?: RecoveryPolicyInput;\n sessionStore?: false | SessionStoreOptions;\n}\n\nexport interface DevData {\n sessionId: string;\n status: \"completed\" | \"failed\" | \"interrupted\" | \"planned\";\n adbPath: string;\n selected: SelectedTarget;\n project: {\n root: string;\n name?: string;\n };\n preset: DevPreset;\n packageManager?: {\n name: PackageManagerName;\n source: NonNullable<ProjectDetection[\"packageManager\"][\"source\"]>;\n };\n ports: {\n requested: Array<{ device: string; host: string }>;\n created: Array<{ device: string; host: string }>;\n reused: Array<{ device: string; host: string }>;\n cleaned: boolean;\n };\n command: {\n executable: string;\n args: string[];\n cwd: string;\n envKeys: string[];\n };\n child?: {\n exitCode: number | null;\n signal: NodeJS.Signals | null;\n durationMs: number;\n stdoutTruncated: boolean;\n stderrTruncated: boolean;\n };\n plan?: OperationPlan;\n journal: EventJournalSnapshot;\n hooks: {\n completed: number;\n failed: number;\n };\n recovery: SessionWatchSummary;\n}\n\nasync function regularFile(file: string): Promise<boolean> {\n try {\n return (await stat(file)).isFile();\n } catch {\n return false;\n }\n}\n\nfunction directPackageCommand(\n manager: PackageManagerName,\n executable: string,\n binary: string,\n args: readonly string[],\n): DevCommand {\n if (manager === \"npm\") {\n return { executable, args: [\"exec\", \"--\", binary, ...args] };\n }\n if (manager === \"pnpm\") {\n return { executable, args: [\"exec\", binary, ...args] };\n }\n if (manager === \"bun\") {\n return { executable, args: [\"x\", binary, ...args] };\n }\n return { executable, args: [binary, ...args] };\n}\n\nasync function resolveDevCommand(\n preset: DevPreset,\n project: ProjectDetection,\n options: DevOptions,\n dependencies: CommandDependencies,\n): Promise<DevCommand | undefined> {\n if (options.command !== undefined) return options.command;\n if (preset === \"custom\") return undefined;\n if (preset === \"gradle\") {\n const wrapperJar = path.join(project.root, \"gradle\", \"wrapper\", \"gradle-wrapper.jar\");\n const locate = dependencies.locateExecutable ?? locateExecutable;\n const java = await locate(\"java\");\n if (java !== undefined && (await regularFile(wrapperJar))) {\n return {\n executable: java,\n args: [\"-classpath\", wrapperJar, \"org.gradle.wrapper.GradleWrapperMain\", \"installDebug\"],\n };\n }\n const wrapper = path.join(\n project.root,\n process.platform === \"win32\" ? \"gradlew.bat\" : \"gradlew\",\n );\n return (await regularFile(wrapper))\n ? { executable: wrapper, args: [\"installDebug\"] }\n : undefined;\n }\n const manager = project.packageManager;\n if (manager.name === undefined || manager.executable === undefined) return undefined;\n const script = preset === \"expo\" ? \"start\" : \"android\";\n const frameworkArgs = preset === \"expo\" ? [\"--android\"] : [];\n if (project.packageJson?.scripts[script] !== undefined) {\n return {\n ...packageScriptCommand(manager.name, manager.executable, script, frameworkArgs),\n };\n }\n return directPackageCommand(\n manager.name,\n manager.executable,\n preset === \"expo\" ? \"expo\" : \"react-native\",\n preset === \"expo\" ? [\"start\", \"--android\"] : [\"run-android\"],\n );\n}\n\nfunction normalizeDevPorts(\n ports: readonly DevPort[],\n commandId: string,\n): { mappings: Array<{ device: string; host: string }>; problems: Problem[] } {\n const mappings: Array<{ device: string; host: string }> = [];\n const problems: Problem[] = [];\n const seen = new Set<string>();\n for (const port of ports) {\n const device = tcpEndpoint(port.device);\n const host = tcpEndpoint(port.host ?? port.device);\n if (device === undefined) {\n problems.push(portInputProblem(\"device\", port.device, commandId));\n continue;\n }\n if (host === undefined) {\n problems.push(portInputProblem(\"host\", port.host, commandId));\n continue;\n }\n const key = `${device}\\0${host}`;\n if (!seen.has(key)) {\n seen.add(key);\n mappings.push({ device, host });\n }\n }\n return { mappings, problems };\n}\n\nfunction streamSeverity(\n priority: ReturnType<typeof parseLogcatThreadtimeLine>,\n): \"debug\" | \"error\" | \"info\" | \"warning\" {\n if (priority?.priority === \"E\" || priority?.priority === \"F\" || priority?.priority === \"A\") {\n return \"error\";\n }\n if (priority?.priority === \"W\") return \"warning\";\n if (priority?.priority === \"D\" || priority?.priority === \"V\") return \"debug\";\n return \"info\";\n}\n\nexport async function runDev(\n options: DevOptions,\n config: CommandConfig = {},\n dependencies: CommandDependencies = {},\n signal?: AbortSignal,\n): Promise<CommandExecution<DevData>> {\n const bus = dependencies.bus ?? new EventBus(dependencies.clock);\n const idFactory = dependencies.idFactory ?? randomUUID;\n const sessionId = idFactory();\n const journal = new EventJournal(bus, options.journal);\n const context = createContext(\"dev\", { ...dependencies, bus, idFactory });\n const problems: Problem[] = [];\n const stateMachine = new SessionStateMachine(dependencies.clock);\n const transition = (to: SessionState, reason: string): void => {\n if (!stateMachine.canTransition(to)) return;\n const state = stateMachine.transition(to, reason);\n bus.emit({\n type: \"session.state.changed\",\n source: \"session\",\n severity: to === \"failed\" ? \"error\" : to === \"degraded\" ? \"warning\" : \"info\",\n message: `Development session is ${to}`,\n correlation: { commandId: context.commandId, sessionId },\n data: { from: state.from, to: state.to, reason: state.reason },\n });\n };\n let recorder: SessionRecorder | undefined;\n if (options.sessionStore !== undefined && options.sessionStore !== false && !config.dryRun) {\n try {\n recorder = await SessionRecorder.create(\n bus,\n {\n sessionId,\n command: \"dev\",\n startedAt: (dependencies.clock ?? (() => new Date()))().toISOString(),\n },\n options.sessionStore,\n );\n } catch {\n problems.push(\n commandProblem(\n ProblemCode.SessionPersistenceFailed,\n \"session.persistence\",\n \"Session history could not be started.\",\n \"The development session can continue, but this run will not be available afterward.\",\n context.commandId,\n ),\n );\n }\n }\n const complete = async (\n data: Omit<DevData, \"journal\"> | null,\n ): Promise<CommandExecution<DevData>> => {\n const interrupted = problems.some(({ code }) => code === ProblemCode.OperationInterrupted);\n const failed = problems.some(\n ({ code, severity }) => severity === \"error\" && code !== ProblemCode.OperationInterrupted,\n );\n if (failed) {\n transition(\n \"failed\",\n problems.find(\n ({ code, severity }) => severity === \"error\" && code !== ProblemCode.OperationInterrupted,\n )?.summary ?? \"failed\",\n );\n }\n transition(\"stopping\", \"finalizing owned session resources\");\n transition(\"ended\", \"session command finalized\");\n bus.emit({\n type: \"session.ended\",\n source: \"session\",\n severity: failed ? \"error\" : interrupted ? \"warning\" : \"info\",\n message: interrupted\n ? \"Development session ended safely after interruption\"\n : \"Development session ended\",\n correlation: { commandId: context.commandId, sessionId },\n });\n const execution = finish<DevData>(context, data as DevData | null, problems);\n const snapshot = journal.close();\n if (execution.result.data !== null) execution.result.data.journal = snapshot;\n if (recorder !== undefined) {\n const targetIdentity =\n data?.selected.target.hardwareSerial ?? data?.selected.transport.serial;\n const persisted = await recorder.finish({\n status: execution.result.problems.some(\n ({ code }) => code === ProblemCode.OperationInterrupted,\n )\n ? \"interrupted\"\n : execution.result.ok\n ? \"completed\"\n : \"failed\",\n finishedAt: (dependencies.clock ?? (() => new Date()))().toISOString(),\n problems: execution.result.problems,\n ...(targetIdentity === undefined ? {} : { targetIdentity }),\n ...(data?.project.name === undefined ? {} : { projectName: data.project.name }),\n ...(data?.preset === undefined ? {} : { preset: data.preset }),\n });\n if (!persisted.ok) {\n execution.result.problems.push(\n commandProblem(\n ProblemCode.SessionPersistenceFailed,\n \"session.persistence\",\n persisted.message,\n \"The development session completed, but its local history is incomplete.\",\n context.commandId,\n ),\n );\n }\n }\n return execution;\n };\n const correlation = { commandId: context.commandId, sessionId };\n bus.emit({\n type: \"session.started\",\n source: \"session\",\n severity: \"info\",\n message: \"Development session started\",\n correlation,\n });\n transition(\"acquiring-target\", \"discovering and selecting one Android target\");\n\n const executable = await resolveAdb(context, config, dependencies);\n if (executable === undefined) {\n problems.push(adbNotFoundProblem(correlation, config.adbPath));\n return await complete(null);\n }\n const discoveryClient = new AdbClient({\n executable,\n bus,\n correlation,\n ...(config.adbHost === undefined ? {} : { host: config.adbHost }),\n ...(config.adbPort === undefined ? {} : { port: config.adbPort }),\n ...(config.timeoutMs === undefined ? {} : { timeoutMs: config.timeoutMs }),\n ...(dependencies.runner === undefined ? {} : { runner: dependencies.runner }),\n idFactory,\n });\n const devices = await discoveryClient.devices(signal);\n if (!processSucceeded(devices.process)) {\n problems.push(operationProblem(\"devices\", devices, context.commandId));\n return await complete(null);\n }\n const inspection = await inspectTargets(\n discoveryClient,\n devices.value,\n context.commandId,\n signal,\n );\n if (inspection.interruption !== undefined) {\n problems.push(inspection.interruption);\n return await complete(null);\n }\n problems.push(...inspection.optionalProblems);\n const selection = selectTarget(inspection.targets, {\n ...(config.targetSelector === undefined ? {} : { selector: config.targetSelector }),\n ...(config.targetTransportId === undefined ? {} : { transportId: config.targetTransportId }),\n ...(config.targetAliases === undefined ? {} : { aliases: config.targetAliases }),\n ...(config.rememberedSerial === undefined ? {} : { rememberedSerial: config.rememberedSerial }),\n ...(config.rememberedHardwareSerial === undefined\n ? {}\n : { rememberedHardwareSerial: config.rememberedHardwareSerial }),\n ...(config.rememberedOnly === undefined ? {} : { rememberedOnly: config.rememberedOnly }),\n });\n if (selection.kind !== \"selected\") {\n problems.push(targetSelectionProblem(selection, correlation));\n return await complete(null);\n }\n let selected = selection.selection;\n let target = targetForAdb(selected);\n recorder?.addPrivateLiteral(selected.transport.serial);\n recorder?.addPrivateLiteral(selected.target.hardwareSerial);\n recorder?.addPrivateLiteral(selected.target.id);\n bus.emit({\n type: \"target.selected\",\n source: \"target\",\n severity: \"info\",\n message: `Selected ${selected.transport.serial}`,\n correlation: { ...correlation, targetId: selected.target.id },\n data: { serial: selected.transport.serial, reason: selected.reason },\n });\n transition(\"preparing-ports\", \"target selected and project configuration resolved\");\n\n const project = await (dependencies.detectProject ?? detectProject)({\n cwd: options.cwd,\n ...(options.packageManager === undefined\n ? {}\n : { explicitPackageManager: options.packageManager }),\n });\n recorder?.addPrivateLiteral(project.root);\n const preset = options.preset ?? (options.command === undefined ? project.preset : \"custom\");\n if (preset === undefined) {\n problems.push(\n commandProblem(\n ProblemCode.DevPresetNotFound,\n \"input.dev.preset\",\n \"ADB Ready could not determine a development preset.\",\n \"Choose --preset expo, react-native, gradle, or pass a custom command after --.\",\n context.commandId,\n ),\n );\n return await complete(null);\n }\n if (\n project.packageManager.conflicts.length > 0 &&\n (preset === \"expo\" || preset === \"react-native\")\n ) {\n problems.push(\n commandProblem(\n ProblemCode.PackageManagerConflict,\n \"input.dev.package-manager\",\n \"Multiple package-manager signals conflict.\",\n \"Declare packageManager in package.json, use --package-manager, or remove stale metadata or lockfiles.\",\n context.commandId,\n [{ source: \"project\", field: \"candidates\", value: project.packageManager.conflicts }],\n ),\n );\n return await complete(null);\n }\n if (\n (preset === \"expo\" || preset === \"react-native\") &&\n (project.packageManager.name === undefined || project.packageManager.executable === undefined)\n ) {\n problems.push(\n commandProblem(\n ProblemCode.PackageManagerNotFound,\n \"environment.package-manager\",\n \"The project's package manager is unavailable.\",\n \"Install the declared package manager or select an available one with --package-manager.\",\n context.commandId,\n ),\n );\n return await complete(null);\n }\n const childCommand = await resolveDevCommand(preset, project, options, dependencies);\n if (childCommand === undefined || childCommand.executable.trim() === \"\") {\n problems.push(\n commandProblem(\n ProblemCode.DevCommandNotFound,\n \"input.dev.command\",\n \"No runnable development command was found.\",\n \"Configure an executable and argument array or pass a custom command after --.\",\n context.commandId,\n ),\n );\n return await complete(null);\n }\n const defaultPorts = preset === \"expo\" || preset === \"react-native\" ? [{ device: 8081 }] : [];\n const normalizedPorts = normalizeDevPorts(\n options.reversePorts ?? defaultPorts,\n context.commandId,\n );\n problems.push(...normalizedPorts.problems);\n if (normalizedPorts.problems.length > 0) return await complete(null);\n\n const targetCorrelation = { ...correlation, targetId: selected.target.id };\n const clientOptions = {\n executable,\n bus,\n correlation: targetCorrelation,\n ...(config.adbHost === undefined ? {} : { host: config.adbHost }),\n ...(config.adbPort === undefined ? {} : { port: config.adbPort }),\n ...(config.timeoutMs === undefined ? {} : { timeoutMs: config.timeoutMs }),\n ...(dependencies.runner === undefined ? {} : { runner: dependencies.runner }),\n idFactory,\n };\n const client = new AdbClient(clientOptions);\n const healthClient = new AdbClient({ ...clientOptions, presentation: \"background\" });\n const listed = await client.listPortMappings(target, \"reverse\", signal);\n if (!processSucceeded(listed.process)) {\n problems.push(operationProblem(\"reverse-list\", listed, context.commandId));\n return await complete(null);\n }\n const existing = listed.value.map((mapping) => normalizePortMapping(\"reverse\", mapping));\n const created: Array<{ device: string; host: string }> = [];\n const reused: Array<{ device: string; host: string }> = [];\n for (const requested of normalizedPorts.mappings) {\n const atDevicePort = existing.find((mapping) => mapping.device === requested.device);\n if (atDevicePort === undefined) continue;\n if (atDevicePort.host === requested.host) {\n reused.push(requested);\n } else {\n problems.push(\n commandProblem(\n ProblemCode.PortMappingConflict,\n \"adb.port.conflict\",\n `Device port ${requested.device} is already mapped to ${atDevicePort.host}.`,\n \"ADB Ready will not replace a mapping owned by another tool or session.\",\n context.commandId,\n ),\n );\n }\n }\n if (problems.some(({ severity }) => severity === \"error\")) return await complete(null);\n const pending = normalizedPorts.mappings.filter(\n (mapping) =>\n !reused.some((item) => item.device === mapping.device && item.host === mapping.host),\n );\n const commandCwd = path.resolve(project.root, childCommand.cwd ?? \".\");\n const commandData = {\n executable: redactedPath(childCommand.executable),\n args: childCommand.args.map((argument) => redactText(argument).value),\n cwd: redactedPath(commandCwd),\n envKeys: [...new Set([\"ANDROID_SERIAL\", ...Object.keys(childCommand.env ?? {})])].sort(),\n };\n const baseData = () => ({\n sessionId,\n adbPath: redactedPath(executable),\n selected,\n project: {\n root: redactedPath(project.root),\n ...(project.packageJson?.name === undefined ? {} : { name: project.packageJson.name }),\n },\n preset,\n ...(project.packageManager.name === undefined || project.packageManager.source === undefined\n ? {}\n : {\n packageManager: {\n name: project.packageManager.name,\n source: project.packageManager.source,\n },\n }),\n command: commandData,\n });\n let recoverySummary: SessionWatchSummary = {\n checks: 0,\n degradations: 0,\n recoveryAttempts: 0,\n recoveries: 0,\n targetChanges: 0,\n failed: false,\n };\n const hookRuns: HookRun[] = [];\n const hookSummary = (): DevData[\"hooks\"] => ({\n completed: hookRuns.filter(({ ok }) => ok).length,\n failed: hookRuns.filter(({ ok }) => !ok).length,\n });\n const hookEnvironment = () => ({\n ANDROID_SERIAL: selected.transport.serial,\n ADB_READY_SESSION_ID: sessionId,\n ADB_READY_PRESET: preset,\n ADB_READY_TARGET_ID: selected.target.id,\n });\n const runHookPhase = async (\n event: DevHookEvent,\n extraEnvironment: Record<string, string> = {},\n useSessionSignal = true,\n ): Promise<boolean> => {\n const runs = await runHooks({\n hooks: options.hooks ?? {},\n event,\n projectRoot: project.root,\n environment: { ...hookEnvironment(), ...extraEnvironment },\n bus,\n correlation: targetCorrelation,\n ...(dependencies.runner === undefined ? {} : { runner: dependencies.runner }),\n ...(useSessionSignal && signal !== undefined ? { signal } : {}),\n });\n hookRuns.push(...runs);\n for (const run of runs) {\n if (run.ok || run.failure === \"ignore\") continue;\n if (run.result.aborted && signal?.aborted === true) {\n if (!problems.some(({ code }) => code === ProblemCode.OperationInterrupted)) {\n problems.push(\n commandProblem(\n ProblemCode.OperationInterrupted,\n \"child.interrupted\",\n \"The development session was interrupted.\",\n `The ${run.event} hook and owned session resources were stopped safely.`,\n context.commandId,\n ),\n );\n }\n continue;\n }\n problems.push({\n code: ProblemCode.HookFailed,\n category: \"child.hook\",\n severity: run.failure === \"warn\" ? \"warning\" : \"error\",\n summary: `${run.event} hook ${String(run.index + 1)} failed.`,\n detail: run.result.timedOut\n ? \"The hook exceeded its configured timeout.\"\n : run.result.spawnError === undefined\n ? `The hook exited with ${run.result.exitCode === null ? String(run.result.signal) : String(run.result.exitCode)}.`\n : \"The hook executable could not be started.\",\n retryable: true,\n evidence: [\n { source: `hook.${run.event}`, field: \"exitCode\", value: run.result.exitCode },\n { source: `hook.${run.event}`, field: \"signal\", value: run.result.signal },\n { source: `hook.${run.event}`, field: \"timedOut\", value: run.result.timedOut },\n ],\n actions: [],\n correlation: {\n ...targetCorrelation,\n operationId: `hook:${run.event}:${String(run.index)}`,\n },\n });\n }\n return !runs.some(({ failure, ok }) => !ok && failure === \"fail\");\n };\n const hookPlanSteps = (event: DevHookEvent) =>\n (options.hooks?.[event] ?? []).map((hook, index) => ({\n id: `hook-${event}-${String(index + 1)}`,\n title: `Run ${event} hook ${String(index + 1)}`,\n risk: \"open-world\" as const,\n executable: redactText(hook.run[0]).value,\n args: hook.run.slice(1).map((argument) => redactText(argument).value),\n }));\n if (config.dryRun) {\n const selectorArgs =\n target.transportId === undefined ? [\"-s\", target.serial] : [\"-t\", target.transportId];\n const steps = [\n ...hookPlanSteps(\"beforeDev\"),\n ...hookPlanSteps(\"onTargetReady\"),\n ...pending.map((mapping, index) => ({\n id: `reverse-${String(index + 1)}`,\n title: `Map device ${mapping.device} to host ${mapping.host}`,\n risk: \"device-reversible\" as const,\n executable: redactedPath(executable),\n args: [...selectorArgs, \"reverse\", \"--no-rebind\", mapping.device, mapping.host],\n })),\n ...hookPlanSteps(\"onPortsReady\"),\n {\n id: \"start-child\",\n title: `Start ${preset} development command`,\n risk: \"open-world\" as const,\n executable: commandData.executable,\n args: commandData.args,\n },\n ...hookPlanSteps(\"onReady\"),\n ...hookPlanSteps(\"onChildExit\"),\n ...hookPlanSteps(\"finally\"),\n ];\n bus.emit({\n type: \"session.planned\",\n source: \"session\",\n severity: \"info\",\n message: \"Development session plan is ready\",\n correlation: targetCorrelation,\n });\n return await complete({\n ...baseData(),\n status: \"planned\",\n ports: {\n requested: normalizedPorts.mappings,\n created,\n reused,\n cleaned: false,\n },\n hooks: hookSummary(),\n recovery: recoverySummary,\n plan: { schemaVersion: SCHEMA_VERSION, dryRun: true, steps },\n });\n }\n\n let cleaned = false;\n const failedData = (): Omit<DevData, \"journal\"> => ({\n ...baseData(),\n status: \"failed\",\n ports: {\n requested: normalizedPorts.mappings,\n created,\n reused,\n cleaned,\n },\n hooks: hookSummary(),\n recovery: recoverySummary,\n });\n\n if (!(await runHookPhase(\"beforeDev\")) || !(await runHookPhase(\"onTargetReady\"))) {\n await runHookPhase(\"finally\", {}, false);\n return await complete(failedData());\n }\n\n for (const mapping of pending) {\n const added = await client.addPortMapping(\n target,\n \"reverse\",\n mapping.device,\n mapping.host,\n signal,\n );\n if (!processSucceeded(added.process)) {\n problems.push(operationProblem(\"reverse-add\", added, context.commandId));\n break;\n }\n created.push(mapping);\n }\n if (!problems.some(({ severity }) => severity === \"error\")) {\n const verified = await client.listPortMappings(target, \"reverse\", signal);\n if (!processSucceeded(verified.process)) {\n problems.push(operationProblem(\"reverse-verify\", verified, context.commandId));\n } else {\n const after = verified.value.map((mapping) => normalizePortMapping(\"reverse\", mapping));\n for (const mapping of normalizedPorts.mappings) {\n if (!after.some((item) => item.device === mapping.device && item.host === mapping.host)) {\n problems.push(\n commandProblem(\n ProblemCode.PortMappingVerificationFailed,\n \"adb.port.verification\",\n `Reverse mapping ${mapping.device} to ${mapping.host} was not verified.`,\n \"ADB reported success but the mapping is absent from the follow-up list.\",\n context.commandId,\n ),\n );\n }\n }\n }\n }\n\n const cleanup = async (): Promise<void> => {\n if (options.cleanupPorts === false || created.length === 0) return;\n bus.emit({\n type: \"session.stopping\",\n source: \"session\",\n severity: \"info\",\n message: \"Cleaning session-owned port mappings\",\n correlation: targetCorrelation,\n });\n let removalSucceeded = true;\n for (const mapping of created) {\n const removed = await client.removePortMapping(target, \"reverse\", mapping.device);\n removalSucceeded = processSucceeded(removed.process) && removalSucceeded;\n }\n const remaining = await client.listPortMappings(target, \"reverse\");\n cleaned =\n removalSucceeded &&\n processSucceeded(remaining.process) &&\n !remaining.value\n .map((mapping) => normalizePortMapping(\"reverse\", mapping))\n .some((mapping) => created.some((item) => item.device === mapping.device));\n if (!cleaned) {\n problems.push({\n code: ProblemCode.PortMappingCleanupFailed,\n category: \"adb.port.cleanup\",\n severity: \"error\",\n summary: \"Session-owned reverse mappings could not be fully removed.\",\n detail:\n \"ADB Ready attempted removal and verified the mapping list, but owned mappings remain or ADB failed.\",\n retryable: true,\n evidence: [\n {\n source: \"adb.reverse\",\n field: \"ownedMappings\",\n value: created.map(({ device, host }) => ({ device, host })),\n },\n ],\n actions: [],\n correlation: targetCorrelation,\n });\n }\n };\n if (problems.some(({ severity }) => severity === \"error\")) {\n await cleanup();\n await runHookPhase(\"finally\", {}, false);\n return await complete(failedData());\n }\n\n bus.emit({\n type: \"port.verified\",\n source: \"port\",\n severity: \"info\",\n message: `${String(normalizedPorts.mappings.length)} reverse mapping(s) ready`,\n correlation: targetCorrelation,\n data: { created: created.length, reused: reused.length },\n });\n transition(\"starting-child\", \"ports verified and development command prepared\");\n if (!(await runHookPhase(\"onPortsReady\"))) {\n await cleanup();\n await runHookPhase(\"finally\", {}, false);\n return await complete(failedData());\n }\n const runner = dependencies.runner ?? runProcess;\n let activeLogController: AbortController | undefined;\n let activeLogPromise: Promise<ProcessResult> | undefined;\n let logStreamFailed = false;\n const logFindings = new Map<string, LogFinding & { evidence: string }>();\n const abortLogs = () => activeLogController?.abort();\n signal?.addEventListener(\"abort\", abortLogs, { once: true });\n const startLogStream = (): void => {\n if (options.logs === false || signal?.aborted === true) return;\n const controller = new AbortController();\n activeLogController = controller;\n logStreamFailed = false;\n const logLines = new TextLineBuffer((raw) => {\n const parsed = parseLogcatThreadtimeLine(raw);\n const safeRaw = redactText(raw).value;\n const safeMessage = parsed === undefined ? safeRaw : redactText(parsed.message).value;\n bus.emit({\n type: \"log.record\",\n source: \"logcat\",\n severity: streamSeverity(parsed),\n message: safeMessage,\n correlation: { ...correlation, targetId: selected.target.id },\n data: {\n raw: safeRaw,\n parsed: parsed !== undefined,\n ...(parsed === undefined\n ? {}\n : { tag: parsed.tag, pid: parsed.pid, tid: parsed.tid, priority: parsed.priority }),\n },\n });\n const finding = classifyLogRecord(parsed, safeRaw);\n if (finding !== undefined && !logFindings.has(finding.code)) {\n logFindings.set(finding.code, { ...finding, evidence: safeMessage });\n bus.emit({\n type: \"log.problem\",\n source: \"logcat\",\n severity: \"error\",\n message: finding.summary,\n correlation: { ...correlation, targetId: selected.target.id },\n data: { code: finding.code, detail: finding.detail, evidence: safeMessage },\n });\n }\n });\n const selectorArgs =\n target.transportId === undefined ? [\"-s\", target.serial] : [\"-t\", target.transportId];\n const promise = runner({\n executable,\n args: [\n ...(config.adbHost === undefined ? [] : [\"-H\", config.adbHost]),\n ...(config.adbPort === undefined ? [] : [\"-P\", String(config.adbPort)]),\n ...selectorArgs,\n \"logcat\",\n \"-v\",\n \"threadtime\",\n \"-T\",\n \"1\",\n \"ReactNativeJS:V\",\n \"ReactNative:V\",\n \"AndroidRuntime:E\",\n \"*:S\",\n ],\n signal: controller.signal,\n maxBufferBytes: 256 * 1024,\n onStdoutChunk: (chunk) => logLines.push(chunk),\n onStderrChunk: (chunk) => logLines.push(chunk),\n })\n .then((result) => {\n if (!controller.signal.aborted && activeLogController === controller) {\n logStreamFailed = true;\n bus.emit({\n type: \"log.stream.failed\",\n source: \"logcat\",\n severity: \"warning\",\n message: \"The target log stream ended unexpectedly.\",\n correlation: { ...correlation, targetId: selected.target.id },\n data: { exitCode: result.exitCode, signal: result.signal },\n });\n }\n return result;\n })\n .finally(() => logLines.flush());\n activeLogPromise = promise;\n };\n const stopLogStream = async (): Promise<void> => {\n const controller = activeLogController;\n const promise = activeLogPromise;\n activeLogController = undefined;\n activeLogPromise = undefined;\n controller?.abort();\n if (promise !== undefined) await promise;\n };\n startLogStream();\n const childStdout = new TextLineBuffer((line) => {\n const safe = redactText(line).value;\n bus.emit({\n type: \"child.stdout\",\n source: \"child.stdout\",\n severity: \"info\",\n message: safe,\n correlation: targetCorrelation,\n data: { raw: safe },\n });\n options.onChildLine?.(\"stdout\", safe);\n });\n const childStderr = new TextLineBuffer((line) => {\n const safe = redactText(line).value;\n bus.emit({\n type: \"child.stderr\",\n source: \"child.stderr\",\n severity: \"info\",\n message: safe,\n correlation: targetCorrelation,\n data: { raw: safe },\n });\n options.onChildLine?.(\"stderr\", safe);\n });\n bus.emit({\n type: \"child.started\",\n source: \"child\",\n severity: \"info\",\n message: `Starting ${preset} development command`,\n correlation: targetCorrelation,\n data: commandData,\n });\n const childController = new AbortController();\n if (signal?.aborted === true) childController.abort();\n const abortChild = () => childController.abort();\n signal?.addEventListener(\"abort\", abortChild, { once: true });\n const childPromise = runner({\n executable: childCommand.executable,\n args: childCommand.args,\n cwd: commandCwd,\n env: { ...childCommand.env, ANDROID_SERIAL: selected.transport.serial },\n signal: childController.signal,\n stdin: options.childStdin ?? \"ignore\",\n maxBufferBytes: 4 * 1024 * 1024,\n onStdoutChunk: (chunk) => childStdout.push(chunk),\n onStderrChunk: (chunk) => childStderr.push(chunk),\n });\n const readyHooksSucceeded = await runHookPhase(\"onReady\");\n if (!readyHooksSucceeded) childController.abort();\n if (readyHooksSucceeded) transition(\"ready\", \"target, ports, logs, and child are ready\");\n\n const watchController = new AbortController();\n if (signal?.aborted === true || !readyHooksSucceeded) watchController.abort();\n const abortWatcher = () => watchController.abort();\n signal?.addEventListener(\"abort\", abortWatcher, { once: true });\n const observeSession = async (watchSignal: AbortSignal): Promise<SessionHealth> => {\n const state = await healthClient.getState(target.serial, watchSignal);\n if (!processSucceeded(state.process) || state.value !== \"device\") {\n return {\n targetReady: false,\n logReady: options.logs === false || !logStreamFailed,\n targetSerial: target.serial,\n missingPorts: [...normalizedPorts.mappings],\n conflictingPorts: [],\n detail: `Target ${target.serial} is not ready.`,\n };\n }\n const mappings = await healthClient.listPortMappings(target, \"reverse\", watchSignal);\n if (!processSucceeded(mappings.process)) {\n return {\n targetReady: true,\n logReady: options.logs === false || !logStreamFailed,\n targetSerial: target.serial,\n missingPorts: [...normalizedPorts.mappings],\n conflictingPorts: [],\n detail: \"Reverse mappings could not be inspected.\",\n };\n }\n const current = mappings.value.map((mapping) => normalizePortMapping(\"reverse\", mapping));\n const conflictingPorts = normalizedPorts.mappings.filter((requested) =>\n current.some(\n (mapping) => mapping.device === requested.device && mapping.host !== requested.host,\n ),\n );\n const missingPorts = normalizedPorts.mappings.filter(\n (requested) =>\n !current.some(\n (mapping) => mapping.device === requested.device && mapping.host === requested.host,\n ),\n );\n return {\n targetReady: true,\n logReady: options.logs === false || !logStreamFailed,\n targetSerial: target.serial,\n missingPorts,\n conflictingPorts,\n ...(conflictingPorts.length > 0\n ? { detail: \"A required device port is owned by another mapping.\" }\n : logStreamFailed\n ? { detail: \"The target log stream stopped unexpectedly.\" }\n : {}),\n };\n };\n const recoverSession = async (\n health: SessionHealth,\n _attempt: number,\n watchSignal: AbortSignal,\n ): Promise<{ changedTarget: boolean; detail?: string }> => {\n const previousSerial = target.serial;\n if (!health.targetReady) {\n const visible = await discoveryClient.devices(watchSignal);\n if (!processSucceeded(visible.process)) {\n return { changedTarget: false, detail: \"ADB target inventory is unavailable.\" };\n }\n const refreshed = await inspectTargets(\n discoveryClient,\n visible.value,\n context.commandId,\n watchSignal,\n );\n const remembered = selectTarget(refreshed.targets, {\n rememberedSerial: previousSerial,\n ...(selected.target.hardwareSerial === undefined\n ? {}\n : { rememberedHardwareSerial: selected.target.hardwareSerial }),\n rememberedOnly: true,\n });\n if (remembered.kind === \"selected\") {\n selected = remembered.selection;\n target = targetForAdb(selected);\n recorder?.addPrivateLiteral(selected.transport.serial);\n recorder?.addPrivateLiteral(selected.target.hardwareSerial);\n recorder?.addPrivateLiteral(selected.target.id);\n } else {\n const acquisition = planTargetAcquisition({\n remembered: {\n serial: previousSerial,\n ...(selected.target.hardwareSerial === undefined\n ? {}\n : { hardwareSerial: selected.target.hardwareSerial }),\n },\n services: refreshed.discovery.mdns.services,\n });\n if (acquisition.kind !== \"connect\") {\n return {\n changedTarget: false,\n detail:\n acquisition.kind === \"ambiguous\"\n ? \"More than one wireless endpoint matches the recovery request.\"\n : \"No safe endpoint is available for recovery.\",\n };\n }\n const safeCandidates = acquisition.candidates.filter(\n (candidate) =>\n candidate === previousSerial || selected.target.hardwareSerial !== undefined,\n );\n let recoveredSelection: SelectedTarget | undefined;\n for (const endpoint of safeCandidates) {\n recorder?.addPrivateLiteral(endpoint);\n const connected = await discoveryClient.connect(endpoint, watchSignal);\n if (\n !processSucceeded(connected.process) ||\n (connected.value.status !== \"connected\" &&\n connected.value.status !== \"already-connected\")\n ) {\n continue;\n }\n const verified = await discoveryClient.getState(endpoint, watchSignal);\n if (!processSucceeded(verified.process) || verified.value !== \"device\") continue;\n const hardware = await discoveryClient.getHardwareSerial(endpoint, watchSignal);\n const hardwareSerial = processSucceeded(hardware.process)\n ? normalizedHardwareSerial(hardware.value)\n : undefined;\n if (\n selected.target.hardwareSerial !== undefined &&\n hardwareSerial !== selected.target.hardwareSerial\n ) {\n continue;\n }\n const afterConnect = await discoveryClient.devices(watchSignal);\n if (!processSucceeded(afterConnect.process)) continue;\n const afterInspection = await inspectTargets(\n discoveryClient,\n afterConnect.value,\n context.commandId,\n watchSignal,\n );\n const result = selectTarget(afterInspection.targets, {\n rememberedSerial: endpoint,\n ...(selected.target.hardwareSerial === undefined\n ? {}\n : { rememberedHardwareSerial: selected.target.hardwareSerial }),\n rememberedOnly: true,\n });\n if (result.kind === \"selected\") {\n recoveredSelection = result.selection;\n break;\n }\n }\n if (recoveredSelection === undefined) {\n return { changedTarget: false, detail: \"The selected target could not be reconnected.\" };\n }\n selected = recoveredSelection;\n target = targetForAdb(selected);\n recorder?.addPrivateLiteral(selected.transport.serial);\n recorder?.addPrivateLiteral(selected.target.hardwareSerial);\n recorder?.addPrivateLiteral(selected.target.id);\n }\n }\n\n const listedAfterRecovery = await client.listPortMappings(target, \"reverse\", watchSignal);\n if (!processSucceeded(listedAfterRecovery.process)) {\n return { changedTarget: target.serial !== previousSerial, detail: \"Ports are unavailable.\" };\n }\n const currentMappings = listedAfterRecovery.value.map((mapping) =>\n normalizePortMapping(\"reverse\", mapping),\n );\n for (const mapping of normalizedPorts.mappings) {\n const occupying = currentMappings.find((item) => item.device === mapping.device);\n if (occupying !== undefined && occupying.host !== mapping.host) {\n return {\n changedTarget: target.serial !== previousSerial,\n detail: `Recovery refused to replace ${mapping.device}.`,\n };\n }\n if (occupying !== undefined) continue;\n const added = await client.addPortMapping(\n target,\n \"reverse\",\n mapping.device,\n mapping.host,\n watchSignal,\n );\n if (!processSucceeded(added.process)) {\n return {\n changedTarget: target.serial !== previousSerial,\n detail: `Recovery could not restore ${mapping.device}.`,\n };\n }\n if (!created.some((item) => item.device === mapping.device && item.host === mapping.host)) {\n created.push(mapping);\n }\n }\n if (target.serial !== previousSerial || health.logReady === false) {\n await stopLogStream();\n startLogStream();\n }\n return {\n changedTarget: target.serial !== previousSerial,\n detail:\n target.serial === previousSerial\n ? \"Session resources restored.\"\n : `Target transport changed to ${target.serial}.`,\n };\n };\n const watchPromise =\n options.watch === false || !readyHooksSucceeded\n ? Promise.resolve(recoverySummary)\n : watchSession({\n signal: watchController.signal,\n observe: observeSession,\n recover: recoverSession,\n ...(options.watchIntervalMs === undefined ? {} : { intervalMs: options.watchIntervalMs }),\n ...(options.recovery === undefined ? {} : { policy: options.recovery }),\n ...(dependencies.sleep === undefined ? {} : { sleep: dependencies.sleep }),\n onEvent: (event) => {\n if (event.type === \"session.degraded\") {\n transition(\"degraded\", event.detail ?? \"session health degraded\");\n } else if (event.type === \"recovery.started\") {\n transition(\"recovering\", `bounded recovery attempt ${String(event.attempt ?? 1)}`);\n } else if (event.type === \"recovery.completed\") {\n transition(\"ready\", event.detail ?? \"recovery independently verified\");\n } else if (event.type === \"recovery.failed\") {\n transition(\"degraded\", event.detail ?? \"recovery verification failed\");\n } else if (event.type === \"watch.failed\") {\n transition(\"failed\", event.detail ?? \"session watcher failed\");\n }\n bus.emit({\n type: event.type,\n source: \"recovery\",\n severity:\n event.type === \"watch.failed\" || event.type === \"recovery.failed\"\n ? \"error\"\n : event.type === \"session.degraded\"\n ? \"warning\"\n : \"info\",\n message: event.detail ?? event.type,\n correlation: { ...correlation, targetId: selected.target.id },\n data: {\n ...(event.attempt === undefined ? {} : { attempt: event.attempt }),\n ...(event.health === undefined\n ? {}\n : {\n health: {\n targetReady: event.health.targetReady,\n ...(event.health.logReady === undefined\n ? {}\n : { logReady: event.health.logReady }),\n targetSerial: event.health.targetSerial,\n missingPorts: event.health.missingPorts.map(({ device, host }) => ({\n device,\n host,\n })),\n conflictingPorts: event.health.conflictingPorts.map(({ device, host }) => ({\n device,\n host,\n })),\n ...(event.health.detail === undefined\n ? {}\n : { detail: event.health.detail }),\n },\n }),\n },\n });\n },\n });\n const firstCompletion = await Promise.race([\n childPromise.then(() => \"child\" as const),\n watchPromise.then((summary) =>\n summary.failed ? (\"watch-failed\" as const) : (\"watch-stopped\" as const),\n ),\n ]);\n if (firstCompletion === \"watch-failed\") childController.abort();\n const child = await childPromise;\n watchController.abort();\n recoverySummary = await watchPromise;\n signal?.removeEventListener(\"abort\", abortWatcher);\n signal?.removeEventListener(\"abort\", abortChild);\n childStdout.flush();\n childStderr.flush();\n await stopLogStream();\n signal?.removeEventListener(\"abort\", abortLogs);\n bus.emit({\n type: \"child.exited\",\n source: \"child\",\n severity: child.exitCode === 0 ? \"info\" : \"error\",\n message: `Development command exited ${child.exitCode === null ? `by ${String(child.signal)}` : `with ${String(child.exitCode)}`}`,\n correlation: targetCorrelation,\n data: { exitCode: child.exitCode, signal: child.signal, durationMs: child.durationMs },\n });\n await runHookPhase(\n \"onChildExit\",\n {\n ADB_READY_CHILD_EXIT_CODE: child.exitCode === null ? \"\" : String(child.exitCode),\n ADB_READY_CHILD_SIGNAL: child.signal ?? \"\",\n },\n false,\n );\n await cleanup();\n if (recoverySummary.failed) {\n problems.push(\n commandProblem(\n ProblemCode.SessionRecoveryFailed,\n \"session.recovery\",\n \"The development session could not be recovered safely.\",\n \"ADB Ready exhausted the bounded recovery budget and stopped its child process.\",\n context.commandId,\n [\n {\n source: \"session.watcher\",\n field: \"recoveryAttempts\",\n value: recoverySummary.recoveryAttempts,\n },\n {\n source: \"session.watcher\",\n field: \"lastHealth\",\n value:\n recoverySummary.lastHealth === undefined\n ? null\n : {\n targetReady: recoverySummary.lastHealth.targetReady,\n targetSerial: recoverySummary.lastHealth.targetSerial,\n missingPorts: recoverySummary.lastHealth.missingPorts.map(\n ({ device, host }) => ({\n device,\n host,\n }),\n ),\n conflictingPorts: recoverySummary.lastHealth.conflictingPorts.map(\n ({ device, host }) => ({ device, host }),\n ),\n ...(recoverySummary.lastHealth.detail === undefined\n ? {}\n : { detail: recoverySummary.lastHealth.detail }),\n },\n },\n ],\n ),\n );\n }\n for (const finding of logFindings.values()) {\n problems.push({\n code: finding.code,\n category: \"app.runtime\",\n severity: \"warning\",\n summary: finding.summary,\n detail: finding.detail,\n retryable: true,\n evidence: [{ source: \"logcat\", field: \"message\", value: finding.evidence }],\n actions: [\n {\n id: \"export_session_context\",\n title: `Export this session with adb-ready context ${sessionId}`,\n kind: \"command\",\n risk: \"read-only\",\n automatic: false,\n idempotent: true,\n command: { executable: \"adb-ready\", args: [\"context\", sessionId] },\n },\n ],\n correlation: { ...correlation, targetId: selected.target.id },\n });\n }\n if (child.aborted && signal?.aborted === true) {\n problems.push(\n commandProblem(\n ProblemCode.OperationInterrupted,\n \"child.interrupted\",\n \"The development session was interrupted.\",\n \"The owned child process and session-owned port mappings were stopped safely.\",\n context.commandId,\n ),\n );\n } else if (!processSucceeded(child) && readyHooksSucceeded && !recoverySummary.failed) {\n problems.push(\n commandProblem(\n ProblemCode.ChildProcessFailed,\n \"child.exit\",\n \"The development command failed.\",\n `The child exited with ${child.exitCode === null ? String(child.signal) : String(child.exitCode)}.`,\n context.commandId,\n [\n { source: \"child\", field: \"exitCode\", value: child.exitCode },\n { source: \"child\", field: \"signal\", value: child.signal },\n ],\n ),\n );\n }\n await runHookPhase(\"finally\", {}, false);\n const execution = await complete({\n ...baseData(),\n status: problems.some(\n ({ code, severity }) => severity === \"error\" && code !== ProblemCode.OperationInterrupted,\n )\n ? \"failed\"\n : problems.some(({ code }) => code === ProblemCode.OperationInterrupted)\n ? \"interrupted\"\n : \"completed\",\n ports: {\n requested: normalizedPorts.mappings,\n created,\n reused,\n cleaned,\n },\n child: {\n exitCode: child.exitCode,\n signal: child.signal,\n durationMs: child.durationMs,\n stdoutTruncated: child.stdoutTruncated,\n stderrTruncated: child.stderrTruncated,\n },\n hooks: hookSummary(),\n recovery: recoverySummary,\n });\n if (problems.some(({ code }) => code === ProblemCode.ChildProcessFailed)) {\n execution.exitCode = preservedChildExitCode(child) ?? execution.exitCode;\n }\n return execution;\n}\n",
8
+ "import { randomUUID } from \"node:crypto\";\nimport type { EventBus } from \"../core/event-bus.js\";\nimport { redactText } from \"../core/redaction.js\";\nimport type { Correlation, JsonValue } from \"../domain/contracts.js\";\nimport {\n type ProcessRequest,\n type ProcessResult,\n type ProcessRunner,\n runProcess,\n} from \"../platform/process-runner.js\";\nimport {\n type AdbConnectResult,\n type AdbDevice,\n type AdbMdnsService,\n type AdbPairResult,\n type AdbPortMapping,\n type AdbVersion,\n parseAdbConnectResult,\n parseAdbDevices,\n parseAdbMdnsServices,\n parseAdbMdnsTrackServices,\n parseAdbPairResult,\n parseAdbPortMappings,\n parseAdbVersion,\n parseFeatureList,\n parseKeyValueLines,\n parseSingleLine,\n} from \"./parsers.js\";\n\nexport interface AdbClientOptions {\n executable: string;\n bus: EventBus;\n correlation: Pick<Correlation, \"commandId\"> &\n Partial<Pick<Correlation, \"sessionId\" | \"targetId\">>;\n host?: string;\n port?: number;\n timeoutMs?: number;\n runner?: ProcessRunner;\n idFactory?: () => string;\n presentation?: \"foreground\" | \"background\";\n}\n\nexport interface AdbObservation<T> {\n operationId: string;\n process: ProcessResult;\n value: T;\n}\n\nexport interface AdbTargetSelector {\n serial: string;\n transportId?: string;\n}\n\nfunction targetArguments(target: string | AdbTargetSelector): string[] {\n if (typeof target === \"string\") {\n return [\"-s\", target];\n }\n return target.transportId === undefined ? [\"-s\", target.serial] : [\"-t\", target.transportId];\n}\n\nfunction processMetadata(result: ProcessResult): Record<string, JsonValue> {\n return {\n durationMs: result.durationMs,\n exitCode: result.exitCode,\n signal: result.signal,\n timedOut: result.timedOut,\n aborted: result.aborted,\n stoppedAfterIdle: result.stoppedAfterIdle,\n killEscalated: result.killEscalated,\n ...(result.streamError === undefined ? {} : { streamError: result.streamError }),\n stdoutTruncated: result.stdoutTruncated,\n stderrTruncated: result.stderrTruncated,\n ...(result.spawnError === undefined\n ? {}\n : {\n spawnError: {\n ...(result.spawnError.code === undefined ? {} : { code: result.spawnError.code }),\n message: result.spawnError.message,\n },\n }),\n };\n}\n\nexport class AdbClient {\n readonly #options: AdbClientOptions;\n readonly #runner: ProcessRunner;\n readonly #idFactory: () => string;\n\n constructor(options: AdbClientOptions) {\n this.#options = options;\n this.#runner = options.runner ?? runProcess;\n this.#idFactory = options.idFactory ?? randomUUID;\n }\n\n async version(signal?: AbortSignal): Promise<AdbObservation<AdbVersion>> {\n return await this.#observe(\n \"version\",\n \"Checking ADB version\",\n [\"version\"],\n parseAdbVersion,\n signal,\n { useServerArguments: false },\n );\n }\n\n async hostFeatures(signal?: AbortSignal): Promise<AdbObservation<string[]>> {\n return await this.#observe(\n \"host-features\",\n \"Checking ADB host features\",\n [\"host-features\"],\n parseFeatureList,\n signal,\n );\n }\n\n async serverStatus(signal?: AbortSignal): Promise<AdbObservation<Record<string, string>>> {\n return await this.#observe(\n \"server-status\",\n \"Checking ADB server status\",\n [\"server-status\"],\n parseKeyValueLines,\n signal,\n );\n }\n\n async devices(signal?: AbortSignal): Promise<AdbObservation<AdbDevice[]>> {\n return await this.#observe(\n \"devices\",\n \"Discovering Android targets\",\n [\"devices\", \"-l\"],\n parseAdbDevices,\n signal,\n );\n }\n\n async mdnsServices(signal?: AbortSignal): Promise<AdbObservation<AdbMdnsService[]>> {\n return await this.#observe(\n \"mdns-services\",\n \"Discovering wireless Android services\",\n [\"mdns\", \"services\"],\n parseAdbMdnsServices,\n signal,\n );\n }\n\n async mdnsTrackServices(signal?: AbortSignal): Promise<AdbObservation<AdbMdnsService[]>> {\n return await this.#observe(\n \"mdns-track-services\",\n \"Discovering wireless Android services\",\n [\"mdns\", \"track-services\", \"--proto-text\"],\n parseAdbMdnsTrackServices,\n signal,\n {\n stopAfterIdleMs: 150,\n timeoutMs: Math.min(this.#options.timeoutMs ?? 1_000, 1_000),\n acceptIdleStop: true,\n },\n );\n }\n\n async getState(\n serial: string,\n signal?: AbortSignal,\n ): Promise<AdbObservation<string | undefined>> {\n return await this.#observe(\n \"get-state\",\n `Verifying Android target ${serial}`,\n [\"-s\", serial, \"get-state\"],\n parseSingleLine,\n signal,\n );\n }\n\n async getHardwareSerial(\n serial: string,\n signal?: AbortSignal,\n ): Promise<AdbObservation<string | undefined>> {\n return await this.#observe(\n \"hardware-serial\",\n `Reading stable identity for ${serial}`,\n [\"-s\", serial, \"shell\", \"getprop\", \"ro.serialno\"],\n parseSingleLine,\n signal,\n );\n }\n\n async shell(\n target: string | AdbTargetSelector,\n args: readonly string[],\n signal?: AbortSignal,\n ): Promise<AdbObservation<string | undefined>> {\n return await this.#observe(\n \"shell\",\n `Running a read-only shell query for ${typeof target === \"string\" ? target : target.serial}`,\n [...targetArguments(target), \"shell\", ...args],\n parseSingleLine,\n signal,\n );\n }\n\n async connect(endpoint: string, signal?: AbortSignal): Promise<AdbObservation<AdbConnectResult>> {\n return await this.#observe(\n \"connect\",\n `Connecting Android target ${endpoint}`,\n [\"connect\", endpoint],\n parseAdbConnectResult,\n signal,\n );\n }\n\n async pair(\n endpoint: string,\n pairingCode: string,\n signal?: AbortSignal,\n ): Promise<AdbObservation<AdbPairResult>> {\n return await this.#observe(\n \"pair\",\n `Pairing Android target ${endpoint}`,\n [\"pair\", endpoint],\n parseAdbPairResult,\n signal,\n { input: `${pairingCode}\\n` },\n );\n }\n\n async listPortMappings(\n target: string | AdbTargetSelector,\n direction: \"forward\" | \"reverse\",\n signal?: AbortSignal,\n ): Promise<AdbObservation<AdbPortMapping[]>> {\n return await this.#observe(\n `${direction}-list`,\n `Listing ${direction} mappings for ${typeof target === \"string\" ? target : target.serial}`,\n [...targetArguments(target), direction, \"--list\"],\n parseAdbPortMappings,\n signal,\n );\n }\n\n async addPortMapping(\n target: string | AdbTargetSelector,\n direction: \"forward\" | \"reverse\",\n firstEndpoint: string,\n secondEndpoint: string,\n signal?: AbortSignal,\n ): Promise<AdbObservation<string | undefined>> {\n return await this.#observe(\n `${direction}-add`,\n `Adding ${direction} mapping for ${typeof target === \"string\" ? target : target.serial}`,\n [...targetArguments(target), direction, \"--no-rebind\", firstEndpoint, secondEndpoint],\n parseSingleLine,\n signal,\n );\n }\n\n async removePortMapping(\n target: string | AdbTargetSelector,\n direction: \"forward\" | \"reverse\",\n listenEndpoint: string,\n signal?: AbortSignal,\n ): Promise<AdbObservation<undefined>> {\n return await this.#observe(\n `${direction}-remove`,\n `Removing ${direction} mapping for ${typeof target === \"string\" ? target : target.serial}`,\n [...targetArguments(target), direction, \"--remove\", listenEndpoint],\n () => undefined,\n signal,\n );\n }\n\n #serverArguments(): string[] {\n return [\n ...(this.#options.host === undefined ? [] : [\"-H\", this.#options.host]),\n ...(this.#options.port === undefined ? [] : [\"-P\", String(this.#options.port)]),\n ];\n }\n\n async #observe<T>(\n operation: string,\n message: string,\n args: string[],\n parse: (output: string) => T,\n signal: AbortSignal | undefined,\n options: {\n input?: string | Uint8Array;\n useServerArguments?: boolean;\n stopAfterIdleMs?: number;\n timeoutMs?: number;\n acceptIdleStop?: boolean;\n } = {},\n ): Promise<AdbObservation<T>> {\n const operationId = this.#idFactory();\n const correlation = { ...this.#options.correlation, operationId };\n const background = this.#options.presentation === \"background\";\n const finalArgs = [\n ...(options.useServerArguments === false ? [] : this.#serverArguments()),\n ...args,\n ];\n\n this.#options.bus.emit({\n type: \"operation.started\",\n source: `adb.${operation}`,\n severity: background ? \"debug\" : \"info\",\n message,\n correlation,\n data: {\n executable: redactText(this.#options.executable).value,\n args: finalArgs.map((argument) => redactText(argument).value),\n ...(background ? { presentation: \"background\" } : {}),\n },\n });\n\n const request: ProcessRequest = {\n executable: this.#options.executable,\n args: finalArgs,\n ...(options.timeoutMs === undefined\n ? this.#options.timeoutMs === undefined\n ? {}\n : { timeoutMs: this.#options.timeoutMs }\n : { timeoutMs: options.timeoutMs }),\n ...(signal === undefined ? {} : { signal }),\n ...(options.input === undefined ? {} : { input: options.input }),\n ...(options.stopAfterIdleMs === undefined\n ? {}\n : { stopAfterIdleMs: options.stopAfterIdleMs }),\n };\n const result = await this.#runner(request);\n const succeeded =\n result.spawnError === undefined &&\n result.streamError === undefined &&\n !result.timedOut &&\n !result.aborted &&\n (result.exitCode === 0 || (options.acceptIdleStop === true && result.stoppedAfterIdle));\n\n this.#options.bus.emit({\n type: succeeded ? \"operation.completed\" : \"operation.failed\",\n source: `adb.${operation}`,\n severity: succeeded ? (background ? \"debug\" : \"info\") : \"error\",\n message: succeeded ? `${message} completed` : `${message} failed`,\n correlation,\n data: {\n ...processMetadata(result),\n ...(background ? { presentation: \"background\" } : {}),\n },\n });\n\n return {\n operationId,\n process: result,\n value: parse(result.stdout),\n };\n }\n}\n",
9
9
  "import { homedir } from \"node:os\";\n\nexport interface RedactionResult {\n value: string;\n replacements: number;\n}\n\nexport interface RedactionOptions {\n homeDirectory?: string;\n additionalLiterals?: readonly string[];\n}\n\nconst REDACTED = \"[REDACTED]\";\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/gu, \"\\\\$&\");\n}\n\nfunction replaceAndCount(\n input: string,\n expression: RegExp,\n replacement: string | ((substring: string, ...args: string[]) => string),\n): RedactionResult {\n let replacements = 0;\n const value = input.replace(expression, (...args: [string, ...string[]]) => {\n replacements += 1;\n return typeof replacement === \"string\" ? replacement : replacement(...args);\n });\n return { value, replacements };\n}\n\nexport function redactText(input: string, options: RedactionOptions = {}): RedactionResult {\n let value = input;\n let replacements = 0;\n\n const patterns: Array<{\n expression: RegExp;\n replacement: string | ((substring: string, ...args: string[]) => string);\n }> = [\n {\n expression: /\\b((?:authorization\\s*[:=]\\s*)?Bearer)\\s+[^\\s,;]+/giu,\n replacement: (_match, prefix) => `${prefix} ${REDACTED}`,\n },\n {\n expression:\n /\\b(api[_-]?key|access[_-]?token|auth|password|passwd|secret)\\b(\\s*[:=]\\s*)([\"']?)[^\\s,\"';]+\\3/giu,\n replacement: (_match, name, separator) => `${name}${separator}${REDACTED}`,\n },\n {\n expression: /(^|\\s)(token)(\\s*[:=]\\s*)([\"']?)[^\\s,\"';]+\\4/giu,\n replacement: (_match, prefix, name, separator) => `${prefix}${name}${separator}${REDACTED}`,\n },\n {\n expression: /\\b(authorization)(\\s*[:=]\\s*)(?!Bearer\\b)([\"']?)[^\\s,\"';]+\\3/giu,\n replacement: (_match, name, separator) => `${name}${separator}${REDACTED}`,\n },\n {\n expression: /\\b(pair(?:ing)?(?:\\s+code)?)(\\s*[:=]\\s*)\\d{6}\\b/giu,\n replacement: (_match, name, separator) => `${name}${separator}${REDACTED}`,\n },\n {\n expression: /([?&](?:access_token|api_key|apikey|auth|password|secret|token)=)[^&#\\s]*/giu,\n replacement: (_match, prefix) => `${prefix}${REDACTED}`,\n },\n ];\n\n for (const pattern of patterns) {\n const result = replaceAndCount(value, pattern.expression, pattern.replacement);\n value = result.value;\n replacements += result.replacements;\n }\n\n const homeDirectory = options.homeDirectory ?? homedir();\n if (homeDirectory.length > 1) {\n const result = replaceAndCount(value, new RegExp(escapeRegExp(homeDirectory), \"gu\"), \"~\");\n value = result.value;\n replacements += result.replacements;\n }\n\n for (const literal of options.additionalLiterals ?? []) {\n if (literal === \"\") {\n continue;\n }\n const result = replaceAndCount(value, new RegExp(escapeRegExp(literal), \"gu\"), REDACTED);\n value = result.value;\n replacements += result.replacements;\n }\n\n return { value, replacements };\n}\n",
10
10
  "import { spawn } from \"node:child_process\";\nimport process from \"node:process\";\n\nexport type ProcessStdio = \"capture\" | \"inherit\";\n\nexport interface ProcessRequest {\n executable: string;\n args?: readonly string[];\n cwd?: string;\n env?: NodeJS.ProcessEnv;\n inheritEnv?: boolean;\n signal?: AbortSignal;\n timeoutMs?: number;\n killSignal?: NodeJS.Signals;\n killGraceMs?: number;\n stdio?: ProcessStdio;\n stdin?: \"ignore\" | \"inherit\";\n maxBufferBytes?: number;\n stopAfterIdleMs?: number;\n onStdoutChunk?: (chunk: Uint8Array) => void;\n onStderrChunk?: (chunk: Uint8Array) => void;\n input?: string | Uint8Array;\n}\n\nexport interface ProcessResult {\n executable: string;\n args: string[];\n startedAt: string;\n finishedAt: string;\n durationMs: number;\n exitCode: number | null;\n signal: NodeJS.Signals | null;\n stdout: string;\n stderr: string;\n stdoutTruncated: boolean;\n stderrTruncated: boolean;\n timedOut: boolean;\n aborted: boolean;\n stoppedAfterIdle: boolean;\n killEscalated: boolean;\n spawnError?: {\n code?: string;\n message: string;\n };\n streamError?: {\n stream: \"stderr\" | \"stdout\";\n message: string;\n };\n}\n\nexport type ProcessRunner = (request: ProcessRequest) => Promise<ProcessResult>;\n\nconst DEFAULT_MAX_BUFFER_BYTES = 4 * 1024 * 1024;\nconst DEFAULT_KILL_GRACE_MS = 1_000;\n\ninterface BoundedCapture {\n append(chunk: Uint8Array): void;\n text(): string;\n readonly truncated: boolean;\n}\n\nfunction createBoundedCapture(maxBytes: number): BoundedCapture {\n const chunks: Uint8Array[] = [];\n let size = 0;\n let truncated = false;\n\n return {\n append(chunk) {\n if (size >= maxBytes) {\n truncated = true;\n return;\n }\n\n const remaining = maxBytes - size;\n const accepted = chunk.byteLength <= remaining ? chunk : chunk.subarray(0, remaining);\n chunks.push(accepted);\n size += accepted.byteLength;\n if (accepted.byteLength !== chunk.byteLength) {\n truncated = true;\n }\n },\n text() {\n const merged = new Uint8Array(size);\n let offset = 0;\n for (const chunk of chunks) {\n merged.set(chunk, offset);\n offset += chunk.byteLength;\n }\n return new TextDecoder(\"utf-8\", { fatal: false }).decode(merged);\n },\n get truncated() {\n return truncated;\n },\n };\n}\n\nexport async function runProcess(request: ProcessRequest): Promise<ProcessResult> {\n const args = [...(request.args ?? [])];\n const started = new Date();\n const startedAt = started.toISOString();\n const maxBufferBytes = request.maxBufferBytes ?? DEFAULT_MAX_BUFFER_BYTES;\n const killGraceMs = request.killGraceMs ?? DEFAULT_KILL_GRACE_MS;\n\n if (!Number.isSafeInteger(maxBufferBytes) || maxBufferBytes < 0) {\n throw new RangeError(\"maxBufferBytes must be a non-negative safe integer\");\n }\n if (\n request.timeoutMs !== undefined &&\n (!Number.isSafeInteger(request.timeoutMs) || request.timeoutMs < 0)\n ) {\n throw new RangeError(\"timeoutMs must be a non-negative safe integer\");\n }\n if (!Number.isSafeInteger(killGraceMs) || killGraceMs < 0) {\n throw new RangeError(\"killGraceMs must be a non-negative safe integer\");\n }\n if (\n request.stopAfterIdleMs !== undefined &&\n (!Number.isSafeInteger(request.stopAfterIdleMs) || request.stopAfterIdleMs < 1)\n ) {\n throw new RangeError(\"stopAfterIdleMs must be a positive safe integer\");\n }\n if (request.stdio === \"inherit\" && request.input !== undefined) {\n throw new RangeError(\"input cannot be combined with inherited stdio\");\n }\n if (request.stdin === \"inherit\" && request.input !== undefined) {\n throw new RangeError(\"input cannot be combined with inherited stdin\");\n }\n if (request.stdio === \"inherit\" && request.stopAfterIdleMs !== undefined) {\n throw new RangeError(\"stopAfterIdleMs cannot be combined with inherited stdio\");\n }\n if (\n request.stdio === \"inherit\" &&\n (request.onStdoutChunk !== undefined || request.onStderrChunk !== undefined)\n ) {\n throw new RangeError(\"stream callbacks cannot be combined with inherited stdio\");\n }\n\n const stdout = createBoundedCapture(maxBufferBytes);\n const stderr = createBoundedCapture(maxBufferBytes);\n const stdio = request.stdio ?? \"capture\";\n let timedOut = false;\n let aborted = request.signal?.aborted ?? false;\n let stoppedAfterIdle = false;\n let killEscalated = false;\n let spawnError: ProcessResult[\"spawnError\"];\n let streamError: ProcessResult[\"streamError\"];\n\n return await new Promise<ProcessResult>((resolve) => {\n const child = spawn(request.executable, args, {\n cwd: request.cwd,\n env: request.inheritEnv === false ? request.env : { ...process.env, ...request.env },\n shell: false,\n stdio:\n stdio === \"inherit\"\n ? \"inherit\"\n : [\n request.stdin === \"inherit\"\n ? \"inherit\"\n : request.input === undefined\n ? \"ignore\"\n : \"pipe\",\n \"pipe\",\n \"pipe\",\n ],\n windowsHide: true,\n });\n\n const killSignal = request.killSignal ?? \"SIGTERM\";\n let idleTimer: ReturnType<typeof setTimeout> | undefined;\n let escalationTimer: ReturnType<typeof setTimeout> | undefined;\n const terminate = () => {\n if (child.exitCode !== null || child.signalCode !== null) {\n return;\n }\n child.kill(killSignal);\n if (killSignal !== \"SIGKILL\" && escalationTimer === undefined) {\n escalationTimer = setTimeout(() => {\n if (child.exitCode === null && child.signalCode === null) {\n killEscalated = true;\n child.kill(\"SIGKILL\");\n }\n }, killGraceMs);\n }\n };\n const touchIdleTimer = () => {\n if (request.stopAfterIdleMs === undefined || stoppedAfterIdle) {\n return;\n }\n if (idleTimer !== undefined) {\n clearTimeout(idleTimer);\n }\n idleTimer = setTimeout(() => {\n stoppedAfterIdle = true;\n terminate();\n }, request.stopAfterIdleMs);\n };\n\n if (stdio === \"capture\") {\n child.stdout?.on(\"data\", (chunk: Uint8Array) => {\n stdout.append(chunk);\n try {\n request.onStdoutChunk?.(new Uint8Array(chunk));\n } catch (caught) {\n streamError ??= {\n stream: \"stdout\",\n message: caught instanceof Error ? caught.message : String(caught),\n };\n terminate();\n }\n if (streamError === undefined) {\n touchIdleTimer();\n }\n });\n child.stderr?.on(\"data\", (chunk: Uint8Array) => {\n stderr.append(chunk);\n try {\n request.onStderrChunk?.(new Uint8Array(chunk));\n } catch (caught) {\n streamError ??= {\n stream: \"stderr\",\n message: caught instanceof Error ? caught.message : String(caught),\n };\n terminate();\n }\n if (streamError === undefined) {\n touchIdleTimer();\n }\n });\n if (request.input !== undefined) {\n child.stdin?.on(\"error\", () => {\n // A child may close stdin before consuming all input. Its exit state\n // remains the authoritative operation result.\n });\n child.stdin?.end(request.input);\n }\n }\n\n const abort = () => {\n aborted = true;\n terminate();\n };\n\n request.signal?.addEventListener(\"abort\", abort, { once: true });\n if (request.signal?.aborted) {\n abort();\n }\n\n const timeout =\n request.timeoutMs === undefined\n ? undefined\n : setTimeout(() => {\n timedOut = true;\n if (idleTimer !== undefined) {\n clearTimeout(idleTimer);\n }\n terminate();\n }, request.timeoutMs);\n\n child.once(\"error\", (error: NodeJS.ErrnoException) => {\n spawnError = {\n ...(error.code === undefined ? {} : { code: error.code }),\n message: error.message,\n };\n });\n\n child.once(\"close\", (exitCode, signal) => {\n if (timeout !== undefined) {\n clearTimeout(timeout);\n }\n if (idleTimer !== undefined) {\n clearTimeout(idleTimer);\n }\n if (escalationTimer !== undefined) {\n clearTimeout(escalationTimer);\n }\n request.signal?.removeEventListener(\"abort\", abort);\n\n const finished = new Date();\n resolve({\n executable: request.executable,\n args,\n startedAt,\n finishedAt: finished.toISOString(),\n durationMs: Math.max(0, finished.getTime() - started.getTime()),\n exitCode: spawnError === undefined ? exitCode : null,\n signal: spawnError === undefined ? signal : null,\n stdout: stdout.text(),\n stderr: stderr.text(),\n stdoutTruncated: stdout.truncated,\n stderrTruncated: stderr.truncated,\n timedOut,\n aborted,\n stoppedAfterIdle,\n killEscalated,\n ...(spawnError === undefined ? {} : { spawnError }),\n ...(streamError === undefined ? {} : { streamError }),\n });\n });\n });\n}\n",
11
11
  "import { isIP } from \"node:net\";\n\nexport type AdbDeviceState =\n | \"bootloader\"\n | \"device\"\n | \"no-permissions\"\n | \"offline\"\n | \"recovery\"\n | \"sideload\"\n | \"unauthorized\"\n | \"unknown\";\n\nexport interface AdbDevice {\n serial: string;\n state: AdbDeviceState;\n product?: string;\n model?: string;\n device?: string;\n transportId?: string;\n usb?: string;\n properties: Record<string, string>;\n unparsed: string[];\n}\n\nexport interface AdbVersion {\n protocolVersion?: string;\n platformToolsVersion?: string;\n installedAs?: string;\n raw: string;\n}\n\nexport type AdbMdnsServiceType = \"connect\" | \"legacy\" | \"pairing\" | \"unknown\";\n\nexport interface AdbNetworkEndpoint {\n host: string;\n port: number;\n serial: string;\n version: 4 | 6 | \"hostname\";\n}\n\nexport interface AdbMdnsService {\n instance: string;\n rawServiceType: string;\n serviceType: AdbMdnsServiceType;\n endpoint: AdbNetworkEndpoint;\n alternateEndpoints?: AdbNetworkEndpoint[];\n deviceModel?: string;\n buildVersionSdkFull?: string;\n givenName?: string;\n hardwareSerial?: string;\n mdnsServiceVersion?: string;\n hostname?: string;\n knownDevice?: boolean;\n}\n\nexport interface AdbConnectResult {\n status: \"already-connected\" | \"connected\" | \"failed\" | \"unknown\";\n endpoint?: string;\n message: string;\n}\n\nexport interface AdbPairResult {\n paired: boolean;\n endpoint?: string;\n message: string;\n}\n\nexport interface AdbPortMapping {\n serial: string;\n local: string;\n remote: string;\n}\n\nexport interface AndroidPackage {\n name: string;\n sourcePath?: string;\n}\n\nexport type AndroidLogPriority = \"A\" | \"D\" | \"E\" | \"F\" | \"I\" | \"V\" | \"W\";\n\nexport interface LogcatThreadtimeLine {\n timestamp: string;\n pid: number;\n tid: number;\n priority: AndroidLogPriority;\n tag: string;\n message: string;\n raw: string;\n}\n\nconst KNOWN_STATES = new Set<AdbDeviceState>([\n \"bootloader\",\n \"device\",\n \"offline\",\n \"recovery\",\n \"sideload\",\n \"unauthorized\",\n]);\n\nfunction normalizeState(tokens: string[]): { state: AdbDeviceState; consumed: number } {\n if (tokens[0] === \"no\" && tokens[1] === \"permissions\") {\n return { state: \"no-permissions\", consumed: 2 };\n }\n const candidate = tokens[0] as AdbDeviceState | undefined;\n if (candidate !== undefined && KNOWN_STATES.has(candidate)) {\n return { state: candidate, consumed: 1 };\n }\n return { state: \"unknown\", consumed: candidate === undefined ? 0 : 1 };\n}\n\nexport function parseAdbDevices(output: string): AdbDevice[] {\n const devices: AdbDevice[] = [];\n let sawHeader = false;\n\n for (const rawLine of output.replaceAll(\"\\r\\n\", \"\\n\").split(\"\\n\")) {\n const line = rawLine.trim();\n if (line === \"\") {\n continue;\n }\n if (line.startsWith(\"List of devices attached\")) {\n sawHeader = true;\n continue;\n }\n if (!sawHeader || line.startsWith(\"* daemon\") || line.startsWith(\"adb server\")) {\n continue;\n }\n\n const tokens = line.split(/\\s+/u);\n const serial = tokens.shift();\n if (serial === undefined || serial === \"\") {\n continue;\n }\n\n const { state, consumed } = normalizeState(tokens);\n const details = tokens.slice(consumed);\n const properties: Record<string, string> = {};\n const unparsed: string[] = [];\n\n for (const token of details) {\n const separator = token.indexOf(\":\");\n if (separator <= 0) {\n unparsed.push(token);\n continue;\n }\n properties[token.slice(0, separator)] = token.slice(separator + 1);\n }\n\n devices.push({\n serial,\n state,\n ...(properties.product === undefined ? {} : { product: properties.product }),\n ...(properties.model === undefined ? {} : { model: properties.model.replaceAll(\"_\", \" \") }),\n ...(properties.device === undefined ? {} : { device: properties.device }),\n ...(properties.transport_id === undefined ? {} : { transportId: properties.transport_id }),\n ...(properties.usb === undefined ? {} : { usb: properties.usb }),\n properties,\n unparsed,\n });\n }\n\n return devices;\n}\n\nexport function parseAdbVersion(output: string): AdbVersion {\n const normalized = output.replaceAll(\"\\r\\n\", \"\\n\").trim();\n const protocolVersion = normalized.match(/Android Debug Bridge version\\s+([^\\s]+)/iu)?.[1];\n const platformToolsVersion = normalized.match(/^Version\\s+([^\\s]+)/imu)?.[1];\n const installedAs = normalized.match(/^Installed as\\s+(.+)$/imu)?.[1]?.trim();\n\n return {\n ...(protocolVersion === undefined ? {} : { protocolVersion }),\n ...(platformToolsVersion === undefined ? {} : { platformToolsVersion }),\n ...(installedAs === undefined ? {} : { installedAs }),\n raw: normalized,\n };\n}\n\nexport function parseFeatureList(output: string): string[] {\n return [\n ...new Set(\n output\n .trim()\n .split(/[\\s,]+/u)\n .map((feature) => feature.trim())\n .filter(Boolean),\n ),\n ].sort();\n}\n\nexport function parseKeyValueLines(output: string): Record<string, string> {\n const values: Record<string, string> = {};\n for (const rawLine of output.replaceAll(\"\\r\\n\", \"\\n\").split(\"\\n\")) {\n const separator = rawLine.indexOf(\":\");\n if (separator <= 0) {\n continue;\n }\n const key = rawLine.slice(0, separator).trim();\n const value = rawLine.slice(separator + 1).trim();\n if (key !== \"\") {\n values[key] = value;\n }\n }\n return values;\n}\n\nexport function parseAdbNetworkEndpoint(value: string): AdbNetworkEndpoint | undefined {\n const normalized = value.trim();\n const bracketed = normalized.startsWith(\"[\");\n const separator = bracketed ? normalized.lastIndexOf(\"]:\") : normalized.lastIndexOf(\":\");\n const host = bracketed ? normalized.slice(1, separator) : normalized.slice(0, separator);\n const portText = normalized.slice(separator + (bracketed ? 2 : 1));\n const port = Number(portText);\n if (\n separator < 1 ||\n host === \"\" ||\n (!bracketed &&\n (host.includes(\":\") || host.includes(\"[\") || host.includes(\"]\") || /\\s/u.test(host))) ||\n (bracketed && (host.includes(\"[\") || host.includes(\"]\") || /\\s/u.test(host))) ||\n !/^\\d+$/u.test(portText) ||\n host === \"0.0.0.0\" ||\n host === \"::\" ||\n !Number.isSafeInteger(port) ||\n port < 1 ||\n port > 65_535\n ) {\n return undefined;\n }\n\n const version = bracketed ? 6 : /^\\d{1,3}(?:\\.\\d{1,3}){3}$/u.test(host) ? 4 : \"hostname\";\n if ((version === 6 && isIP(host) !== 6) || (version === 4 && isIP(host) !== 4)) {\n return undefined;\n }\n\n return {\n host,\n port,\n serial: version === 6 ? `[${host}]:${String(port)}` : `${host}:${String(port)}`,\n version,\n };\n}\n\nfunction mdnsServiceType(value: string): AdbMdnsServiceType {\n if (value === \"_adb-tls-connect._tcp\") {\n return \"connect\";\n }\n if (value === \"_adb-tls-pairing._tcp\") {\n return \"pairing\";\n }\n if (value === \"_adb._tcp\") {\n return \"legacy\";\n }\n return \"unknown\";\n}\n\nexport function parseAdbMdnsServices(output: string): AdbMdnsService[] {\n const services: AdbMdnsService[] = [];\n const seen = new Set<string>();\n\n for (const rawLine of output.replaceAll(\"\\r\\n\", \"\\n\").split(\"\\n\")) {\n const line = rawLine.trim();\n if (line === \"\" || line === \"List of discovered mdns services\") {\n continue;\n }\n\n const match = line.match(/^(.*?)\\s+(_adb(?:-tls-(?:pairing|connect))?\\._tcp)\\s+(\\S+)$/u);\n if (match === null) {\n continue;\n }\n const instance = match[1]?.trim();\n const rawServiceType = match[2];\n const endpoint = parseAdbNetworkEndpoint(match[3] ?? \"\");\n if (\n instance === undefined ||\n instance === \"\" ||\n rawServiceType === undefined ||\n endpoint === undefined\n ) {\n continue;\n }\n\n const key = `${rawServiceType}\\0${instance}\\0${endpoint.serial}`;\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n services.push({\n instance,\n rawServiceType,\n serviceType: mdnsServiceType(rawServiceType),\n endpoint,\n });\n }\n\n return services.sort((left, right) =>\n `${left.serviceType}\\0${left.instance}\\0${left.endpoint.serial}`.localeCompare(\n `${right.serviceType}\\0${right.instance}\\0${right.endpoint.serial}`,\n ),\n );\n}\n\nfunction decodeTextProtoString(value: string): string | undefined {\n if (!value.startsWith('\"') || !value.endsWith('\"')) {\n return undefined;\n }\n try {\n const parsed: unknown = JSON.parse(value);\n return typeof parsed === \"string\" ? parsed : undefined;\n } catch {\n return undefined;\n }\n}\n\nexport function parseAdbMdnsTrackServices(output: string): AdbMdnsService[] {\n const services: AdbMdnsService[] = [];\n const seen = new Set<string>();\n const stack: string[] = [];\n let current:\n | {\n kind: \"pair\" | \"tcp\" | \"tls\";\n fields: Map<string, string[]>;\n knownDevice?: boolean;\n }\n | undefined;\n\n const finish = () => {\n if (current === undefined) {\n return;\n }\n const first = (key: string) => current?.fields.get(key)?.[0];\n const instance = first(\"instance\");\n const rawServiceType =\n first(\"service\") ??\n (current.kind === \"pair\"\n ? \"_adb-tls-pairing._tcp\"\n : current.kind === \"tls\"\n ? \"_adb-tls-connect._tcp\"\n : \"_adb._tcp\");\n const portText = first(\"port\");\n const port = portText === undefined ? undefined : Number(portText);\n const hosts = [\n ...(current.fields.get(\"ipv4\") ?? []),\n ...(current.fields.get(\"ipv6\") ?? []),\n ...(current.fields.get(\"hostname\") ?? []),\n ];\n const endpoints =\n port === undefined || !Number.isSafeInteger(port)\n ? []\n : [\n ...new Map(\n hosts\n .map((host) =>\n parseAdbNetworkEndpoint(\n host.includes(\":\") ? `[${host}]:${String(port)}` : `${host}:${String(port)}`,\n ),\n )\n .filter((endpoint): endpoint is AdbNetworkEndpoint => endpoint !== undefined)\n .map((endpoint) => [endpoint.serial, endpoint]),\n ).values(),\n ];\n const endpoint = endpoints[0];\n if (instance !== undefined && endpoint !== undefined) {\n const key = `${rawServiceType}\\0${instance}\\0${endpoint.serial}`;\n if (!seen.has(key)) {\n seen.add(key);\n const deviceModel = first(\"product_model\") ?? first(\"device_model\");\n const buildVersionSdkFull = first(\"build_version_sdk_full\");\n const givenName = first(\"given_name\");\n const hardwareSerial = first(\"serial\");\n const mdnsServiceVersion = first(\"mdns_service_version\");\n const hostname = first(\"hostname\");\n services.push({\n instance,\n rawServiceType,\n serviceType: mdnsServiceType(rawServiceType),\n endpoint,\n ...(endpoints.length < 2 ? {} : { alternateEndpoints: endpoints.slice(1) }),\n ...(deviceModel === undefined ? {} : { deviceModel }),\n ...(buildVersionSdkFull === undefined ? {} : { buildVersionSdkFull }),\n ...(givenName === undefined ? {} : { givenName }),\n ...(hardwareSerial === undefined ? {} : { hardwareSerial }),\n ...(mdnsServiceVersion === undefined ? {} : { mdnsServiceVersion }),\n ...(hostname === undefined ? {} : { hostname }),\n ...(current.knownDevice === undefined ? {} : { knownDevice: current.knownDevice }),\n });\n }\n }\n current = undefined;\n };\n\n for (const rawLine of output.replaceAll(\"\\r\\n\", \"\\n\").split(\"\\n\")) {\n const line = rawLine.trim();\n const opening = line.match(/^(\\w+)\\s*\\{$/u)?.[1];\n if (opening !== undefined) {\n stack.push(opening);\n if (opening === \"pair\" || opening === \"tcp\" || opening === \"tls\") {\n current = { kind: opening, fields: new Map() };\n }\n continue;\n }\n if (line === \"}\") {\n const closing = stack.pop();\n if (closing === \"pair\" || closing === \"tcp\" || closing === \"tls\") {\n finish();\n }\n continue;\n }\n if (current === undefined) {\n continue;\n }\n const scalar = line.match(/^(\\w+):\\s*(.+)$/u);\n const key = scalar?.[1];\n const rawValue = scalar?.[2];\n if (key === undefined || rawValue === undefined) {\n continue;\n }\n if (key === \"known_device\" && stack.at(-1) !== \"service\") {\n if (rawValue === \"true\" || rawValue === \"false\") {\n current.knownDevice = rawValue === \"true\";\n }\n continue;\n }\n if (stack.at(-1) !== \"service\") {\n continue;\n }\n const value = /^\\d+$/u.test(rawValue) ? rawValue : decodeTextProtoString(rawValue);\n if (value !== undefined) {\n const values = current.fields.get(key) ?? [];\n values.push(value);\n current.fields.set(key, values);\n }\n }\n finish();\n\n return services.sort((left, right) =>\n `${left.serviceType}\\0${left.instance}\\0${left.endpoint.serial}`.localeCompare(\n `${right.serviceType}\\0${right.instance}\\0${right.endpoint.serial}`,\n ),\n );\n}\n\nexport function parseAdbConnectResult(output: string): AdbConnectResult {\n const message = output.replaceAll(\"\\r\\n\", \"\\n\").trim();\n const already = message.match(/already connected to\\s+(\\S+)/iu);\n if (already !== null) {\n return {\n status: \"already-connected\",\n ...(already[1] === undefined ? {} : { endpoint: already[1] }),\n message,\n };\n }\n const connected = message.match(/(?:^|\\n)connected to\\s+(\\S+)/iu);\n if (connected !== null) {\n return {\n status: \"connected\",\n ...(connected[1] === undefined ? {} : { endpoint: connected[1] }),\n message,\n };\n }\n return {\n status: /failed|cannot|unable|error/iu.test(message) ? \"failed\" : \"unknown\",\n message,\n };\n}\n\nexport function parseAdbPairResult(output: string): AdbPairResult {\n const message = output.replaceAll(\"\\r\\n\", \"\\n\").trim();\n const success = message.match(/successfully paired to\\s+(\\S+)/iu);\n return {\n paired: success !== null,\n ...(success?.[1] === undefined ? {} : { endpoint: success[1] }),\n message,\n };\n}\n\nexport function parseSingleLine(output: string): string | undefined {\n return output\n .replaceAll(\"\\r\\n\", \"\\n\")\n .split(\"\\n\")\n .map((line) => line.trim())\n .find(Boolean);\n}\n\nexport function parseAdbPortMappings(output: string): AdbPortMapping[] {\n const mappings: AdbPortMapping[] = [];\n for (const rawLine of output.replaceAll(\"\\r\\n\", \"\\n\").split(\"\\n\")) {\n const fields = rawLine.trim().split(/\\s+/u);\n if (fields.length !== 3) {\n continue;\n }\n const [serial, local, remote] = fields;\n if (serial !== undefined && local !== undefined && remote !== undefined) {\n mappings.push({ serial, local, remote });\n }\n }\n return mappings;\n}\n\nexport function parseAndroidPackages(output: string): AndroidPackage[] {\n const packages: AndroidPackage[] = [];\n const seen = new Set<string>();\n for (const rawLine of output.replaceAll(\"\\r\\n\", \"\\n\").split(\"\\n\")) {\n const match = rawLine\n .trim()\n .match(/^package:(?:(\\S+)=)?([a-zA-Z0-9_][a-zA-Z0-9_.]*)(?:\\s+.*)?$/u);\n const name = match?.[2];\n if (name === undefined || seen.has(name)) {\n continue;\n }\n seen.add(name);\n packages.push({ name, ...(match?.[1] === undefined ? {} : { sourcePath: match[1] }) });\n }\n return packages.sort((left, right) => left.name.localeCompare(right.name));\n}\n\nexport function parseLogcatThreadtimeLine(raw: string): LogcatThreadtimeLine | undefined {\n const line = raw.replace(/\\r?\\n$/u, \"\");\n const match = line.match(\n /^((?:\\d{4}-)?\\d{2}-\\d{2}\\s+\\d{2}:\\d{2}:\\d{2}\\.\\d+)\\s+(\\d+)\\s+(\\d+)\\s+([VDIWEFA])\\s+(.+?)\\s*:\\s(.*)$/u,\n );\n if (match === null) {\n return undefined;\n }\n const pid = Number(match[2]);\n const tid = Number(match[3]);\n const timestamp = match[1];\n const priority = match[4] as AndroidLogPriority | undefined;\n const tag = match[5]?.trim();\n const message = match[6];\n if (\n timestamp === undefined ||\n priority === undefined ||\n tag === undefined ||\n tag === \"\" ||\n message === undefined ||\n !Number.isSafeInteger(pid) ||\n !Number.isSafeInteger(tid)\n ) {\n return undefined;\n }\n return { timestamp, pid, tid, priority, tag, message, raw: line };\n}\n",
@@ -16,7 +16,7 @@
16
16
  "import path from \"node:path\";\nimport process from \"node:process\";\nimport type { EventBus } from \"../core/event-bus.js\";\nimport { redactText } from \"../core/redaction.js\";\nimport { TextLineBuffer } from \"../core/text-lines.js\";\nimport type { Correlation } from \"../domain/contracts.js\";\nimport { type ProcessResult, type ProcessRunner, runProcess } from \"../platform/process-runner.js\";\n\nexport type DevHookEvent =\n | \"beforeDev\"\n | \"finally\"\n | \"onChildExit\"\n | \"onPortsReady\"\n | \"onReady\"\n | \"onTargetReady\";\n\nexport type HookFailurePolicy = \"fail\" | \"ignore\" | \"warn\";\n\nexport interface DevHook {\n run: [string, ...string[]];\n timeoutMs?: number;\n failure?: HookFailurePolicy;\n cwd?: string;\n envAllowlist?: string[];\n}\n\nexport interface HookRun {\n event: DevHookEvent;\n index: number;\n failure: HookFailurePolicy;\n executable: string;\n args: string[];\n result: ProcessResult;\n ok: boolean;\n}\n\nexport interface RunHooksOptions {\n hooks: Partial<Record<DevHookEvent, readonly DevHook[]>>;\n event: DevHookEvent;\n projectRoot: string;\n environment: Record<string, string>;\n bus: EventBus;\n correlation: Correlation;\n runner?: ProcessRunner;\n signal?: AbortSignal;\n hostEnv?: NodeJS.ProcessEnv;\n}\n\nconst REQUIRED_ENVIRONMENT = [\"PATH\", \"Path\", \"PATHEXT\", \"SystemRoot\", \"ComSpec\", \"TEMP\", \"TMP\"];\n\nfunction hookEnvironment(\n host: NodeJS.ProcessEnv,\n allowlist: readonly string[],\n provided: Readonly<Record<string, string>>,\n): NodeJS.ProcessEnv {\n const names = new Set([...REQUIRED_ENVIRONMENT, ...allowlist]);\n const environment: NodeJS.ProcessEnv = {};\n for (const name of names) {\n if (host[name] !== undefined) environment[name] = host[name];\n }\n return { ...environment, ...provided };\n}\n\nfunction succeeded(result: ProcessResult): boolean {\n return (\n result.exitCode === 0 &&\n result.spawnError === undefined &&\n result.streamError === undefined &&\n !result.timedOut &&\n !result.aborted\n );\n}\n\nexport async function runHooks(options: RunHooksOptions): Promise<HookRun[]> {\n const hooks = options.hooks[options.event] ?? [];\n const runs: HookRun[] = [];\n const runner = options.runner ?? runProcess;\n for (const [index, hook] of hooks.entries()) {\n const [executable, ...args] = hook.run;\n const failure = hook.failure ?? \"fail\";\n const hookCorrelation = {\n ...options.correlation,\n operationId: `hook:${options.event}:${String(index)}`,\n };\n options.bus.emit({\n type: \"hook.started\",\n source: `hook.${options.event}`,\n severity: \"info\",\n message: `Running ${options.event} hook ${String(index + 1)}`,\n correlation: hookCorrelation,\n data: {\n executable: redactText(executable).value,\n args: args.map((argument) => redactText(argument).value),\n failure,\n },\n });\n const emitLine = (stream: \"stderr\" | \"stdout\", raw: string): void => {\n const safe = redactText(raw).value;\n options.bus.emit({\n type: `hook.${stream}`,\n source: `hook.${options.event}`,\n severity: \"info\",\n message: safe,\n correlation: hookCorrelation,\n data: { raw: safe, stream },\n });\n };\n const stdout = new TextLineBuffer((line) => emitLine(\"stdout\", line));\n const stderr = new TextLineBuffer((line) => emitLine(\"stderr\", line));\n const result = await runner({\n executable,\n args,\n cwd: path.resolve(options.projectRoot, hook.cwd ?? \".\"),\n env: hookEnvironment(\n options.hostEnv ?? process.env,\n hook.envAllowlist ?? [],\n options.environment,\n ),\n inheritEnv: false,\n timeoutMs: hook.timeoutMs ?? 10_000,\n ...(options.signal === undefined ? {} : { signal: options.signal }),\n maxBufferBytes: 256 * 1024,\n onStdoutChunk: (chunk) => stdout.push(chunk),\n onStderrChunk: (chunk) => stderr.push(chunk),\n });\n stdout.flush();\n stderr.flush();\n const ok = succeeded(result);\n const run: HookRun = {\n event: options.event,\n index,\n failure,\n executable: redactText(executable).value,\n args: args.map((argument) => redactText(argument).value),\n result,\n ok,\n };\n runs.push(run);\n options.bus.emit({\n type: ok ? \"hook.finished\" : \"hook.failed\",\n source: `hook.${options.event}`,\n severity: ok || failure === \"ignore\" ? \"info\" : failure === \"warn\" ? \"warning\" : \"error\",\n message: ok\n ? `${options.event} hook ${String(index + 1)} completed`\n : `${options.event} hook ${String(index + 1)} failed`,\n correlation: hookCorrelation,\n data: {\n exitCode: result.exitCode,\n signal: result.signal,\n timedOut: result.timedOut,\n aborted: result.aborted,\n failure,\n },\n });\n if (!ok && failure === \"fail\") break;\n }\n return runs;\n}\n",
17
17
  "import { readFile, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { locateExecutable } from \"../platform/executable.js\";\n\nexport type PackageManagerName = \"bun\" | \"npm\" | \"pnpm\" | \"yarn\";\nexport type DevPreset = \"custom\" | \"expo\" | \"gradle\" | \"react-native\";\n\nexport interface PackageManagerResolution {\n name?: PackageManagerName;\n executable?: string;\n source?: \"config\" | \"dev-engines\" | \"executable\" | \"lockfile\" | \"package-json\";\n conflicts: PackageManagerName[];\n}\n\nexport interface ProjectDetection {\n root: string;\n packageJson?: {\n path: string;\n name?: string;\n packageManager?: string;\n scripts: Record<string, string>;\n };\n preset?: DevPreset;\n presetEvidence: string[];\n packageManager: PackageManagerResolution;\n}\n\nexport interface DetectProjectOptions {\n cwd: string;\n explicitPackageManager?: PackageManagerName;\n env?: NodeJS.ProcessEnv;\n platform?: NodeJS.Platform;\n fileExists?: (file: string) => Promise<boolean>;\n readText?: (file: string) => Promise<string>;\n locate?: (name: string) => Promise<string | undefined>;\n}\n\nconst MANAGER_FIELD = /^(npm|pnpm|yarn|bun)@[^\\s]+$/u;\nconst LOCKFILES: ReadonlyArray<readonly [string, PackageManagerName]> = [\n [\"bun.lock\", \"bun\"],\n [\"bun.lockb\", \"bun\"],\n [\"pnpm-lock.yaml\", \"pnpm\"],\n [\"yarn.lock\", \"yarn\"],\n [\"package-lock.json\", \"npm\"],\n [\"npm-shrinkwrap.json\", \"npm\"],\n];\nconst FALLBACK_ORDER: readonly PackageManagerName[] = [\"npm\", \"pnpm\", \"yarn\", \"bun\"];\n\nasync function defaultFileExists(file: string): Promise<boolean> {\n try {\n return (await stat(file)).isFile();\n } catch {\n return false;\n }\n}\n\nfunction record(value: unknown): Record<string, unknown> | undefined {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : undefined;\n}\n\nfunction stringRecord(value: unknown): Record<string, string> {\n const source = record(value);\n return source === undefined\n ? {}\n : Object.fromEntries(\n Object.entries(source).filter(\n (entry): entry is [string, string] => typeof entry[1] === \"string\",\n ),\n );\n}\n\nasync function nearestProjectRoot(\n start: string,\n exists: (file: string) => Promise<boolean>,\n): Promise<string> {\n let current = path.resolve(start);\n while (true) {\n const markers = [\n \"package.json\",\n \"gradlew\",\n \"gradlew.bat\",\n \"build.gradle\",\n \"build.gradle.kts\",\n \"settings.gradle\",\n \"settings.gradle.kts\",\n ];\n if (\n (await Promise.all(markers.map((marker) => exists(path.join(current, marker))))).some(Boolean)\n ) {\n return current;\n }\n const parent = path.dirname(current);\n if (parent === current) return path.resolve(start);\n current = parent;\n }\n}\n\nfunction managerFromField(value: string | undefined): PackageManagerName | undefined {\n return value?.match(MANAGER_FIELD)?.[1] as PackageManagerName | undefined;\n}\n\nfunction managersFromDevEngines(value: unknown): PackageManagerName[] {\n const candidates = Array.isArray(value) ? value : [value];\n const managers: PackageManagerName[] = [];\n for (const candidate of candidates) {\n const document = record(candidate);\n const name = document?.name;\n if (name === \"bun\" || name === \"npm\" || name === \"pnpm\" || name === \"yarn\") {\n managers.push(name);\n }\n }\n return [...new Set(managers)];\n}\n\nexport async function detectProject(options: DetectProjectOptions): Promise<ProjectDetection> {\n const exists = options.fileExists ?? defaultFileExists;\n const readText = options.readText ?? (async (file: string) => await readFile(file, \"utf8\"));\n const root = await nearestProjectRoot(options.cwd, exists);\n const packagePath = path.join(root, \"package.json\");\n let packageDocument: Record<string, unknown> | undefined;\n if (await exists(packagePath)) {\n try {\n packageDocument = record(JSON.parse(await readText(packagePath)));\n } catch {\n packageDocument = undefined;\n }\n }\n const dependencies = {\n ...stringRecord(packageDocument?.dependencies),\n ...stringRecord(packageDocument?.devDependencies),\n };\n const scripts = stringRecord(packageDocument?.scripts);\n const packageManagerField =\n typeof packageDocument?.packageManager === \"string\"\n ? packageDocument.packageManager\n : undefined;\n const devEngineManagers = managersFromDevEngines(\n record(packageDocument?.devEngines)?.packageManager,\n );\n\n const presetEvidence: string[] = [];\n let preset: DevPreset | undefined;\n if (dependencies.expo !== undefined) {\n preset = \"expo\";\n presetEvidence.push(\"package.json dependency: expo\");\n } else if (dependencies[\"react-native\"] !== undefined) {\n preset = \"react-native\";\n presetEvidence.push(\"package.json dependency: react-native\");\n } else if (\n (await exists(path.join(root, \"gradlew\"))) ||\n (await exists(path.join(root, \"gradlew.bat\"))) ||\n (await exists(path.join(root, \"build.gradle\"))) ||\n (await exists(path.join(root, \"build.gradle.kts\")))\n ) {\n preset = \"gradle\";\n presetEvidence.push(\"Gradle wrapper or build file\");\n }\n\n const locate =\n options.locate ??\n (async (name: string) =>\n await locateExecutable(name, {\n ...(options.env === undefined ? {} : { env: options.env }),\n ...(options.platform === undefined ? {} : { platform: options.platform }),\n }));\n let packageManager: PackageManagerResolution = { conflicts: [] };\n const selectedFromField = managerFromField(packageManagerField);\n if (options.explicitPackageManager !== undefined) {\n packageManager = {\n name: options.explicitPackageManager,\n source: \"config\",\n conflicts: [],\n ...(await locate(options.explicitPackageManager).then((executable) =>\n executable === undefined ? {} : { executable },\n )),\n };\n } else if (selectedFromField !== undefined) {\n packageManager = {\n name: selectedFromField,\n source: \"package-json\",\n conflicts: [],\n ...(await locate(selectedFromField).then((executable) =>\n executable === undefined ? {} : { executable },\n )),\n };\n } else if (devEngineManagers.length === 1) {\n const name = devEngineManagers[0];\n if (name !== undefined) {\n packageManager = {\n name,\n source: \"dev-engines\",\n conflicts: [],\n ...(await locate(name).then((executable) =>\n executable === undefined ? {} : { executable },\n )),\n };\n }\n } else if (devEngineManagers.length > 1) {\n packageManager = { conflicts: [...devEngineManagers].sort() };\n } else {\n const foundLockfiles = new Set<PackageManagerName>();\n for (const [filename, manager] of LOCKFILES) {\n if (await exists(path.join(root, filename))) foundLockfiles.add(manager);\n }\n if (foundLockfiles.size === 1) {\n const name = [...foundLockfiles][0];\n if (name !== undefined) {\n const executable = await locate(name);\n packageManager = {\n name,\n source: \"lockfile\",\n conflicts: [],\n ...(executable === undefined ? {} : { executable }),\n };\n }\n } else if (foundLockfiles.size > 1) {\n packageManager = { conflicts: [...foundLockfiles].sort() };\n } else {\n for (const name of FALLBACK_ORDER) {\n const executable = await locate(name);\n if (executable !== undefined) {\n packageManager = { name, executable, source: \"executable\", conflicts: [] };\n break;\n }\n }\n }\n }\n\n return {\n root,\n ...(packageDocument === undefined\n ? {}\n : {\n packageJson: {\n path: packagePath,\n ...(typeof packageDocument.name === \"string\" ? { name: packageDocument.name } : {}),\n ...(packageManagerField === undefined ? {} : { packageManager: packageManagerField }),\n scripts,\n },\n }),\n ...(preset === undefined ? {} : { preset }),\n presetEvidence,\n packageManager,\n };\n}\n\nexport function packageScriptCommand(\n manager: PackageManagerName,\n executable: string,\n script: string,\n extraArgs: readonly string[] = [],\n): { executable: string; args: string[] } {\n const separator = manager === \"npm\" && extraArgs.length > 0 ? [\"--\"] : [];\n return {\n executable,\n args: [\"run\", script, ...separator, ...extraArgs],\n };\n}\n",
18
18
  "import { constants } from \"node:fs\";\nimport { access, stat } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport path from \"node:path\";\nimport process from \"node:process\";\n\nexport interface ExecutableSearchOptions {\n explicitPath?: string;\n env?: NodeJS.ProcessEnv;\n homeDirectory?: string;\n platform?: NodeJS.Platform;\n}\n\nasync function isExecutable(candidate: string, platform: NodeJS.Platform): Promise<boolean> {\n try {\n await access(candidate, platform === \"win32\" ? constants.F_OK : constants.X_OK);\n return (await stat(candidate)).isFile();\n } catch {\n return false;\n }\n}\n\nfunction windowsExtensions(env: NodeJS.ProcessEnv): string[] {\n const value = env.PATHEXT ?? \".COM;.EXE;.BAT;.CMD\";\n return value\n .split(\";\")\n .map((extension) => extension.trim().toLowerCase())\n .filter((extension) => extension === \".com\" || extension === \".exe\");\n}\n\nexport function canSpawnWithoutShell(name: string, platform: NodeJS.Platform): boolean {\n if (platform !== \"win32\") {\n return true;\n }\n const extension = path.win32.extname(name).toLowerCase();\n return extension === \"\" || extension === \".com\" || extension === \".exe\";\n}\n\nfunction candidateNames(name: string, platform: NodeJS.Platform, env: NodeJS.ProcessEnv): string[] {\n const pathApi = platform === \"win32\" ? path.win32 : path.posix;\n if (platform !== \"win32\" || pathApi.extname(name) !== \"\") {\n return [name];\n }\n return [name, ...windowsExtensions(env).map((extension) => `${name}${extension}`)];\n}\n\nexport async function locateExecutable(\n name: string,\n options: Pick<ExecutableSearchOptions, \"env\" | \"platform\"> = {},\n): Promise<string | undefined> {\n const env = options.env ?? process.env;\n const platform = options.platform ?? process.platform;\n const pathValue = env.PATH ?? env.Path ?? env.path;\n if (pathValue === undefined) {\n return undefined;\n }\n\n const delimiter = platform === \"win32\" ? \";\" : \":\";\n const pathApi = platform === \"win32\" ? path.win32 : path.posix;\n for (const directory of pathValue.split(delimiter)) {\n if (directory.trim() === \"\") {\n continue;\n }\n for (const candidateName of candidateNames(name, platform, env)) {\n if (!canSpawnWithoutShell(candidateName, platform)) {\n continue;\n }\n const candidate = pathApi.resolve(directory.replace(/^\"|\"$/g, \"\"), candidateName);\n if (await isExecutable(candidate, platform)) {\n return candidate;\n }\n }\n }\n\n return undefined;\n}\n\nfunction sdkCandidates(\n env: NodeJS.ProcessEnv,\n platform: NodeJS.Platform,\n homeDirectory: string,\n): string[] {\n const pathApi = platform === \"win32\" ? path.win32 : path.posix;\n const executable = platform === \"win32\" ? \"adb.exe\" : \"adb\";\n const roots = [env.ANDROID_SDK_ROOT, env.ANDROID_HOME].filter(\n (value): value is string => value !== undefined && value.trim() !== \"\",\n );\n\n if (platform === \"darwin\") {\n roots.push(pathApi.join(homeDirectory, \"Library\", \"Android\", \"sdk\"));\n } else if (platform === \"win32\") {\n if (env.LOCALAPPDATA !== undefined) {\n roots.push(pathApi.join(env.LOCALAPPDATA, \"Android\", \"Sdk\"));\n }\n } else {\n roots.push(pathApi.join(homeDirectory, \"Android\", \"Sdk\"));\n }\n\n return [...new Set(roots.map((root) => pathApi.join(root, \"platform-tools\", executable)))];\n}\n\nexport async function locateAdb(\n options: ExecutableSearchOptions = {},\n): Promise<string | undefined> {\n const env = options.env ?? process.env;\n const platform = options.platform ?? process.platform;\n const pathApi = platform === \"win32\" ? path.win32 : path.posix;\n\n if (options.explicitPath !== undefined) {\n const explicit = options.explicitPath.trim();\n if (explicit === \"\") {\n return undefined;\n }\n if (pathApi.isAbsolute(explicit) || explicit.includes(\"/\") || explicit.includes(\"\\\\\")) {\n if (!canSpawnWithoutShell(explicit, platform)) {\n return undefined;\n }\n const candidate = pathApi.resolve(explicit);\n return (await isExecutable(candidate, platform)) ? candidate : undefined;\n }\n return await locateExecutable(explicit, { env, platform });\n }\n\n const fromPath = await locateExecutable(\"adb\", { env, platform });\n if (fromPath !== undefined) {\n return fromPath;\n }\n\n for (const candidate of sdkCandidates(env, platform, options.homeDirectory ?? homedir())) {\n if (await isExecutable(candidate, platform)) {\n return candidate;\n }\n }\n\n return undefined;\n}\n",
19
- "import type { AdbDevice, AdbMdnsService } from \"../adb/parsers.js\";\nimport { redactText } from \"../core/redaction.js\";\nimport type { ProcessResult } from \"../platform/process-runner.js\";\nimport type { AndroidTarget } from \"../target/model.js\";\nimport type { TargetSelectionResult } from \"../target/selection.js\";\nimport type { Correlation, Evidence, Problem, SuggestedAction } from \"./contracts.js\";\n\nexport const ProblemCode = {\n AdbCommandFailed: \"ADB_COMMAND_FAILED\",\n AdbFeatureUnavailable: \"ADB_FEATURE_UNAVAILABLE\",\n AdbMdnsDisabled: \"ADB_MDNS_DISABLED\",\n AdbNotFound: \"ADB_NOT_FOUND\",\n AdbOptionalProbeFailed: \"ADB_OPTIONAL_PROBE_FAILED\",\n AdbServerUnavailable: \"ADB_SERVER_UNAVAILABLE\",\n AdbVersionMismatch: \"ADB_VERSION_MISMATCH\",\n AdbTimeout: \"ADB_TIMEOUT\",\n InteractiveSelectionUnavailable: \"INTERACTIVE_SELECTION_UNAVAILABLE\",\n MultipleTargets: \"MULTIPLE_TARGETS\",\n NoSelectableTarget: \"NO_SELECTABLE_TARGET\",\n NoTargets: \"NO_TARGETS\",\n OperationInterrupted: \"OPERATION_INTERRUPTED\",\n TargetSelectionCancelled: \"TARGET_SELECTION_CANCELLED\",\n TargetNoPermissions: \"TARGET_NO_PERMISSIONS\",\n TargetOffline: \"TARGET_OFFLINE\",\n TargetUnauthorized: \"TARGET_UNAUTHORIZED\",\n TargetUnknownState: \"TARGET_UNKNOWN_STATE\",\n TargetNotFound: \"TARGET_NOT_FOUND\",\n InvalidEndpoint: \"INVALID_ENDPOINT\",\n InvalidPairingCode: \"INVALID_PAIRING_CODE\",\n WirelessEndpointNotFound: \"WIRELESS_ENDPOINT_NOT_FOUND\",\n WirelessPairingRequired: \"WIRELESS_PAIRING_REQUIRED\",\n MultipleWirelessEndpoints: \"MULTIPLE_WIRELESS_ENDPOINTS\",\n WirelessConnectionFailed: \"WIRELESS_CONNECTION_FAILED\",\n WirelessPairingFailed: \"WIRELESS_PAIRING_FAILED\",\n DuplicateTargetTransport: \"DUPLICATE_TARGET_TRANSPORT\",\n UnstableTargetSerial: \"UNSTABLE_TARGET_SERIAL\",\n InvalidPort: \"INVALID_PORT\",\n PortMappingConflict: \"PORT_MAPPING_CONFLICT\",\n PortMappingCleanupFailed: \"PORT_MAPPING_CLEANUP_FAILED\",\n PortMappingVerificationFailed: \"PORT_MAPPING_VERIFICATION_FAILED\",\n DevPresetNotFound: \"DEV_PRESET_NOT_FOUND\",\n DevCommandNotFound: \"DEV_COMMAND_NOT_FOUND\",\n PackageManagerConflict: \"PACKAGE_MANAGER_CONFLICT\",\n PackageManagerNotFound: \"PACKAGE_MANAGER_NOT_FOUND\",\n ChildProcessFailed: \"CHILD_PROCESS_FAILED\",\n HookFailed: \"HOOK_FAILED\",\n SessionRecoveryFailed: \"SESSION_RECOVERY_FAILED\",\n SessionPersistenceFailed: \"SESSION_PERSISTENCE_FAILED\",\n LogPackageNotRunning: \"LOG_PACKAGE_NOT_RUNNING\",\n LogcatFailed: \"LOGCAT_FAILED\",\n} as const;\n\nfunction retryDevicesAction(): SuggestedAction {\n return {\n id: \"retry_device_probe\",\n title: \"Check visible devices again\",\n kind: \"command\",\n risk: \"read-only\",\n automatic: true,\n idempotent: true,\n command: { executable: \"adb\", args: [\"devices\", \"-l\"] },\n };\n}\n\nexport function targetSelectionProblem(\n result: Exclude<TargetSelectionResult, { kind: \"selected\" }>,\n correlation: Correlation,\n): Problem {\n if (result.kind === \"ambiguous\") {\n return {\n code: ProblemCode.MultipleTargets,\n category: \"target.selection\",\n severity: \"error\",\n summary: \"Multiple ready Android targets require an explicit selection.\",\n detail: \"Choose one with --device, --transport-id, or the interactive --select picker.\",\n retryable: true,\n evidence: [\n {\n source: \"target.inventory\",\n field: \"serials\",\n value: result.candidates.map(({ serial }) => serial),\n },\n ],\n actions: [],\n correlation,\n };\n }\n if (result.kind === \"duplicate\") {\n return {\n code: ProblemCode.DuplicateTargetTransport,\n category: \"target.selection\",\n severity: \"error\",\n summary: \"The target serial identifies multiple ADB transports.\",\n detail: \"Select the intended transport explicitly with --transport-id.\",\n retryable: true,\n evidence: [\n { source: \"target.inventory\", field: \"serial\", value: result.target.serial },\n {\n source: \"target.inventory\",\n field: \"transportIds\",\n value: result.transports.map(({ transportId }) => transportId ?? null),\n },\n ],\n actions: [],\n correlation,\n };\n }\n if (result.kind === \"not-found\") {\n return {\n code: ProblemCode.TargetNotFound,\n category: \"target.selection\",\n severity: \"error\",\n summary: \"The requested Android target was not found.\",\n detail:\n \"Check the selector with adb-ready devices, then retry with an exact serial or alias.\",\n retryable: true,\n evidence: [{ source: \"target.selector\", field: \"value\", value: result.selector }],\n actions: [],\n correlation,\n };\n }\n if (result.kind === \"unavailable\") {\n return {\n code: ProblemCode.NoSelectableTarget,\n category: \"target.selection\",\n severity: \"error\",\n summary: \"The requested Android target is not ready.\",\n detail: `ADB reports ${result.target.state}; recover or authorize the target before retrying.`,\n retryable: true,\n evidence: [\n { source: \"target.inventory\", field: \"serial\", value: result.target.serial },\n { source: \"target.inventory\", field: \"state\", value: result.target.state },\n ],\n actions: [retryDevicesAction()],\n correlation,\n };\n }\n return {\n code: ProblemCode.NoSelectableTarget,\n category: \"target.selection\",\n severity: \"error\",\n summary: \"No ready Android target is available.\",\n detail: \"Connect a target, start an emulator, or enable Wireless debugging, then retry.\",\n retryable: true,\n evidence: [],\n actions: [retryDevicesAction()],\n correlation,\n };\n}\n\nexport function targetInventoryProblems(\n targets: readonly AndroidTarget[],\n correlation: Correlation,\n): Problem[] {\n const problems: Problem[] = [];\n for (const target of targets) {\n const serialCounts = new Map<string, number>();\n for (const transport of target.transports) {\n serialCounts.set(transport.serial, (serialCounts.get(transport.serial) ?? 0) + 1);\n if (!transport.stable) {\n problems.push({\n code: ProblemCode.UnstableTargetSerial,\n category: \"target.identity\",\n severity: \"warning\",\n summary: \"ADB reported an unstable target identifier.\",\n detail: \"A transient mDNS service name cannot be used as a reliable final device serial.\",\n retryable: true,\n evidence: [{ source: \"adb.devices\", field: \"serial\", value: transport.serial }],\n actions: [retryDevicesAction()],\n correlation,\n });\n }\n }\n for (const [serial, count] of serialCounts) {\n if (count > 1) {\n problems.push({\n code: ProblemCode.DuplicateTargetTransport,\n category: \"target.identity\",\n severity: \"warning\",\n summary: \"ADB reported duplicate transports for one serial.\",\n detail: \"Use an explicit transport ID for operations until the duplicate disappears.\",\n retryable: true,\n evidence: [\n { source: \"adb.devices\", field: \"serial\", value: serial },\n { source: \"adb.devices\", field: \"count\", value: count },\n ],\n actions: [retryDevicesAction()],\n correlation,\n });\n }\n }\n }\n return problems;\n}\n\nexport function adbNotFoundProblem(correlation: Correlation, requestedPath?: string): Problem {\n return {\n code: ProblemCode.AdbNotFound,\n category: \"environment.executable\",\n severity: \"error\",\n summary: \"ADB was not found.\",\n detail:\n requestedPath === undefined\n ? \"Install Android SDK Platform-Tools or provide an explicit ADB path.\"\n : `The configured ADB executable could not be used: ${requestedPath}`,\n retryable: true,\n evidence:\n requestedPath === undefined\n ? []\n : [{ source: \"configuration\", field: \"adb.path\", value: requestedPath }],\n actions: [\n {\n id: \"configure_adb_path\",\n title: \"Provide the ADB executable with --adb PATH\",\n kind: \"user\",\n risk: \"none\",\n automatic: false,\n },\n ],\n correlation,\n };\n}\n\nfunction processEvidence(result: ProcessResult): Evidence[] {\n const redactedStderr = redactText(result.stderr.trim());\n const redactedStdout = redactText(result.stdout.trim());\n return [\n { source: \"process\", field: \"exitCode\", value: result.exitCode },\n { source: \"process\", field: \"signal\", value: result.signal },\n { source: \"process\", field: \"timedOut\", value: result.timedOut },\n ...(redactedStderr.value === \"\"\n ? []\n : [\n {\n source: \"process\",\n field: \"stderr\",\n value: redactedStderr.value.slice(0, 2_000),\n redacted: redactedStderr.replacements > 0,\n } satisfies Evidence,\n ]),\n ...(redactedStdout.value === \"\"\n ? []\n : [\n {\n source: \"process\",\n field: \"stdout\",\n value: redactedStdout.value.slice(0, 2_000),\n redacted: redactedStdout.replacements > 0,\n } satisfies Evidence,\n ]),\n ];\n}\n\nfunction manualServerRestartAction(title: string): SuggestedAction {\n return {\n id: \"review_adb_server_restart\",\n title,\n kind: \"user\",\n risk: \"shared-global\",\n automatic: false,\n };\n}\n\nfunction unquoted(value: string | undefined): string | undefined {\n if (value === undefined) {\n return undefined;\n }\n const trimmed = value.trim();\n return trimmed.startsWith('\"') && trimmed.endsWith('\"') ? trimmed.slice(1, -1) : trimmed;\n}\n\nfunction versionCore(value: string | undefined): string | undefined {\n return unquoted(value)?.match(/^\\d+\\.\\d+\\.\\d+/u)?.[0];\n}\n\nexport function problemsForServerStatus(\n status: Readonly<Record<string, string>>,\n clientVersion: string | undefined,\n correlation: Correlation,\n): Problem[] {\n const problems: Problem[] = [];\n const mdnsEnabled = unquoted(status.mdns_enabled)?.toLowerCase();\n if (mdnsEnabled === \"false\") {\n problems.push({\n code: ProblemCode.AdbMdnsDisabled,\n category: \"adb.discovery\",\n severity: \"warning\",\n summary: \"ADB network discovery is disabled.\",\n detail:\n \"Explicit wireless endpoints can still work, but automatic mDNS discovery is unavailable.\",\n retryable: true,\n evidence: [{ source: \"adb.server-status\", field: \"mdns_enabled\", value: false }],\n actions: [\n manualServerRestartAction(\n \"Enable ADB mDNS and restart the shared ADB server when it is safe\",\n ),\n ],\n correlation,\n });\n }\n\n const clientCore = versionCore(clientVersion);\n const serverCore = versionCore(status.version);\n if (clientCore !== undefined && serverCore !== undefined && clientCore !== serverCore) {\n problems.push({\n code: ProblemCode.AdbVersionMismatch,\n category: \"adb.server\",\n severity: \"warning\",\n summary: \"The ADB client and running server use different versions.\",\n detail:\n \"Mixed Platform-Tools versions can expose different capabilities and make diagnostics inconsistent.\",\n retryable: true,\n evidence: [\n { source: \"adb.client\", field: \"version\", value: clientCore },\n { source: \"adb.server-status\", field: \"version\", value: serverCore },\n ],\n actions: [\n manualServerRestartAction(\n \"Align Platform-Tools versions and restart the shared ADB server when it is safe\",\n ),\n ],\n correlation,\n });\n }\n return problems;\n}\n\nexport function adbProcessProblem(\n operation: string,\n result: ProcessResult,\n correlation: Correlation,\n): Problem {\n if (result.spawnError?.code === \"ENOENT\") {\n return adbNotFoundProblem(correlation, result.executable);\n }\n\n if (result.aborted) {\n return {\n code: ProblemCode.OperationInterrupted,\n category: \"process.interrupted\",\n severity: \"error\",\n summary: `ADB ${operation} was interrupted.`,\n detail: \"The operation stopped after receiving an interruption request.\",\n retryable: true,\n evidence: processEvidence(result),\n actions: [],\n correlation,\n };\n }\n\n if (result.timedOut) {\n return {\n code: ProblemCode.AdbTimeout,\n category: \"adb.timeout\",\n severity: \"error\",\n summary: `ADB ${operation} timed out.`,\n detail: \"The operation did not finish within the configured timeout.\",\n retryable: true,\n evidence: processEvidence(result),\n actions: [retryDevicesAction()],\n correlation,\n };\n }\n\n const combinedOutput = `${result.stderr}\\n${result.stdout}`;\n if (\n /(?:unknown|unrecognized)\\s+(?:command|option)\\b|(?:command|option)\\s+.+\\s+is not supported\\b/iu.test(\n combinedOutput,\n )\n ) {\n return {\n code: ProblemCode.AdbFeatureUnavailable,\n category: \"environment.compatibility\",\n severity: \"error\",\n summary: `The installed ADB does not support ${operation}.`,\n detail: \"Update Android SDK Platform-Tools, then retry the requested operation.\",\n retryable: true,\n evidence: processEvidence(result),\n actions: [\n {\n id: \"update_platform_tools\",\n title: \"Update Android SDK Platform-Tools\",\n kind: \"user\",\n risk: \"local-additive\",\n automatic: false,\n },\n ],\n correlation,\n };\n }\n\n const daemonUnavailable = /cannot connect to daemon|failed to start daemon|server.*failed/iu.test(\n result.stderr,\n );\n return {\n code: daemonUnavailable ? ProblemCode.AdbServerUnavailable : ProblemCode.AdbCommandFailed,\n category: daemonUnavailable ? \"adb.server\" : \"adb.operation\",\n severity: \"error\",\n summary: daemonUnavailable ? \"The ADB server is unavailable.\" : `ADB ${operation} failed.`,\n detail: daemonUnavailable\n ? \"ADB Ready could not communicate with the configured ADB server.\"\n : \"ADB returned an unsuccessful result for this operation.\",\n retryable: true,\n evidence: processEvidence(result),\n actions: [retryDevicesAction()],\n correlation,\n };\n}\n\nexport function adbOptionalProbeProblem(\n operation: string,\n result: ProcessResult,\n correlation: Correlation,\n): Problem {\n const failure = adbProcessProblem(operation, result, correlation);\n\n return {\n ...failure,\n code: ProblemCode.AdbOptionalProbeFailed,\n category: \"adb.capability\",\n severity: \"warning\",\n summary: `Optional ADB ${operation} probe failed.`,\n detail:\n \"Core diagnostics can continue, but this ADB capability could not be inspected reliably.\",\n };\n}\n\nfunction targetEvidence(device: AdbDevice): Evidence[] {\n return [\n { source: \"adb.devices\", field: \"serial\", value: device.serial },\n { source: \"adb.devices\", field: \"state\", value: device.state },\n ];\n}\n\nexport function problemsForDevices(\n devices: readonly AdbDevice[],\n correlation: Correlation,\n severity: Problem[\"severity\"] = \"error\",\n): Problem[] {\n const problems: Problem[] = [];\n\n for (const device of devices) {\n if (device.state === \"unauthorized\") {\n problems.push({\n code: ProblemCode.TargetUnauthorized,\n category: \"target.authorization\",\n severity,\n summary: \"An Android target has not authorized this computer.\",\n detail: \"Accept the RSA authorization prompt on the target, then retry the probe.\",\n retryable: true,\n evidence: targetEvidence(device),\n actions: [\n {\n id: \"accept_device_prompt\",\n title: \"Accept the RSA prompt on the Android target\",\n kind: \"user\",\n risk: \"none\",\n automatic: false,\n },\n retryDevicesAction(),\n ],\n correlation,\n });\n } else if (device.state === \"offline\") {\n problems.push({\n code: ProblemCode.TargetOffline,\n category: \"target.transport\",\n severity,\n summary: \"An Android target is offline.\",\n detail: \"ADB knows this transport, but it cannot currently communicate with the target.\",\n retryable: true,\n evidence: targetEvidence(device),\n actions: [retryDevicesAction()],\n correlation,\n });\n } else if (device.state === \"no-permissions\") {\n problems.push({\n code: ProblemCode.TargetNoPermissions,\n category: \"target.permissions\",\n severity,\n summary: \"The host does not have permission to use an Android target.\",\n detail: \"Check the host USB permissions and Android developer authorization setup.\",\n retryable: true,\n evidence: targetEvidence(device),\n actions: [\n {\n id: \"review_usb_permissions\",\n title: \"Review host USB permission setup\",\n kind: \"documentation\",\n risk: \"none\",\n automatic: false,\n },\n ],\n correlation,\n });\n } else if (device.state === \"unknown\") {\n problems.push({\n code: ProblemCode.TargetUnknownState,\n category: \"target.state\",\n severity: \"warning\",\n summary: \"ADB reported an unknown target state.\",\n detail: \"The target remains visible, but ADB Ready will not assume it is usable.\",\n retryable: true,\n evidence: targetEvidence(device),\n actions: [retryDevicesAction()],\n correlation,\n });\n }\n }\n\n return problems;\n}\n\nexport function noTargetsProblem(\n correlation: Correlation,\n discoveredServices: readonly AdbMdnsService[] = [],\n): Problem {\n const connectEndpoints = [\n ...new Set(\n discoveredServices\n .filter(\n ({ knownDevice, serviceType }) =>\n serviceType === \"legacy\" || (serviceType === \"connect\" && knownDevice !== false),\n )\n .map(({ endpoint }) => endpoint.serial),\n ),\n ].sort();\n const oneEndpoint = connectEndpoints.length === 1 ? connectEndpoints[0] : undefined;\n const pairingEndpoints = [\n ...new Set(\n discoveredServices\n .filter(({ serviceType }) => serviceType === \"pairing\")\n .map(({ endpoint }) => endpoint.serial),\n ),\n ].sort();\n const onePairingEndpoint =\n connectEndpoints.length === 0 && pairingEndpoints.length === 1\n ? pairingEndpoints[0]\n : undefined;\n return {\n code: ProblemCode.NoTargets,\n category: \"target.selection\",\n severity: \"warning\",\n summary:\n discoveredServices.length === 0\n ? \"No Android targets are visible.\"\n : \"Wireless Android services are visible, but no target is connected.\",\n detail:\n discoveredServices.length === 0\n ? \"Connect a target over USB, start an emulator, or enable Wireless debugging.\"\n : oneEndpoint !== undefined\n ? `Run adb-ready connect ${oneEndpoint} to establish and verify the target.`\n : onePairingEndpoint !== undefined\n ? `Run adb-ready pair ${onePairingEndpoint}, then connect the verified target.`\n : \"Choose the matching wireless service, or connect a target over USB.\",\n retryable: true,\n evidence: [\n { source: \"adb.devices\", field: \"count\", value: 0 },\n ...(discoveredServices.length === 0\n ? []\n : [\n {\n source: \"adb.mdns\",\n field: \"services\",\n value: discoveredServices.map(({ endpoint, serviceType }) => ({\n endpoint: endpoint.serial,\n serviceType,\n })),\n } satisfies Evidence,\n ]),\n ],\n actions:\n oneEndpoint !== undefined\n ? [\n {\n id: \"connect_discovered_target\",\n title: `Connect ${oneEndpoint}`,\n kind: \"command\",\n risk: \"local-additive\",\n automatic: false,\n idempotent: true,\n command: { executable: \"adb-ready\", args: [\"connect\", oneEndpoint] },\n },\n ]\n : onePairingEndpoint !== undefined\n ? [\n {\n id: \"pair_discovered_target\",\n title: `Pair ${onePairingEndpoint}`,\n kind: \"command\",\n risk: \"device-reversible\",\n automatic: false,\n idempotent: false,\n command: { executable: \"adb-ready\", args: [\"pair\", onePairingEndpoint] },\n },\n ]\n : [retryDevicesAction()],\n correlation,\n };\n}\n\nexport function multipleTargetsProblem(\n devices: readonly AdbDevice[],\n correlation: Correlation,\n): Problem {\n return {\n code: ProblemCode.MultipleTargets,\n category: \"target.selection\",\n severity: \"error\",\n summary: \"Multiple Android targets require an explicit selection.\",\n detail: \"Choose one interactively or provide an explicit target selector.\",\n retryable: true,\n evidence: [\n { source: \"adb.devices\", field: \"serials\", value: devices.map(({ serial }) => serial) },\n ],\n actions: [\n {\n id: \"select_target\",\n title: \"Select one Android target\",\n kind: \"user\",\n risk: \"none\",\n automatic: false,\n },\n ],\n correlation,\n };\n}\n",
19
+ "import type { AdbDevice, AdbMdnsService } from \"../adb/parsers.js\";\nimport { redactText } from \"../core/redaction.js\";\nimport type { ProcessResult } from \"../platform/process-runner.js\";\nimport type { AndroidTarget } from \"../target/model.js\";\nimport type { TargetSelectionResult } from \"../target/selection.js\";\nimport type { Correlation, Evidence, Problem, SuggestedAction } from \"./contracts.js\";\n\nexport const ProblemCode = {\n AdbCommandFailed: \"ADB_COMMAND_FAILED\",\n AdbFeatureUnavailable: \"ADB_FEATURE_UNAVAILABLE\",\n AdbMdnsDisabled: \"ADB_MDNS_DISABLED\",\n AdbNotFound: \"ADB_NOT_FOUND\",\n AdbOptionalProbeFailed: \"ADB_OPTIONAL_PROBE_FAILED\",\n AdbServerUnavailable: \"ADB_SERVER_UNAVAILABLE\",\n AdbVersionMismatch: \"ADB_VERSION_MISMATCH\",\n AdbTimeout: \"ADB_TIMEOUT\",\n InteractiveSelectionUnavailable: \"INTERACTIVE_SELECTION_UNAVAILABLE\",\n MultipleTargets: \"MULTIPLE_TARGETS\",\n NoSelectableTarget: \"NO_SELECTABLE_TARGET\",\n NoTargets: \"NO_TARGETS\",\n OperationInterrupted: \"OPERATION_INTERRUPTED\",\n TargetSelectionCancelled: \"TARGET_SELECTION_CANCELLED\",\n TargetNoPermissions: \"TARGET_NO_PERMISSIONS\",\n TargetOffline: \"TARGET_OFFLINE\",\n TargetUnauthorized: \"TARGET_UNAUTHORIZED\",\n TargetUnknownState: \"TARGET_UNKNOWN_STATE\",\n TargetNotFound: \"TARGET_NOT_FOUND\",\n InvalidEndpoint: \"INVALID_ENDPOINT\",\n InvalidPairingCode: \"INVALID_PAIRING_CODE\",\n WirelessEndpointNotFound: \"WIRELESS_ENDPOINT_NOT_FOUND\",\n WirelessPairingRequired: \"WIRELESS_PAIRING_REQUIRED\",\n MultipleWirelessEndpoints: \"MULTIPLE_WIRELESS_ENDPOINTS\",\n WirelessConnectionFailed: \"WIRELESS_CONNECTION_FAILED\",\n WirelessPairingFailed: \"WIRELESS_PAIRING_FAILED\",\n DuplicateTargetTransport: \"DUPLICATE_TARGET_TRANSPORT\",\n UnstableTargetSerial: \"UNSTABLE_TARGET_SERIAL\",\n InvalidPort: \"INVALID_PORT\",\n PortMappingConflict: \"PORT_MAPPING_CONFLICT\",\n PortMappingCleanupFailed: \"PORT_MAPPING_CLEANUP_FAILED\",\n PortMappingVerificationFailed: \"PORT_MAPPING_VERIFICATION_FAILED\",\n DevPresetNotFound: \"DEV_PRESET_NOT_FOUND\",\n DevCommandNotFound: \"DEV_COMMAND_NOT_FOUND\",\n PackageManagerConflict: \"PACKAGE_MANAGER_CONFLICT\",\n PackageManagerNotFound: \"PACKAGE_MANAGER_NOT_FOUND\",\n ChildProcessFailed: \"CHILD_PROCESS_FAILED\",\n HookFailed: \"HOOK_FAILED\",\n SessionRecoveryFailed: \"SESSION_RECOVERY_FAILED\",\n SessionPersistenceFailed: \"SESSION_PERSISTENCE_FAILED\",\n LogPackageNotRunning: \"LOG_PACKAGE_NOT_RUNNING\",\n LogcatFailed: \"LOGCAT_FAILED\",\n} as const;\n\nfunction retryDevicesAction(): SuggestedAction {\n return {\n id: \"retry_device_probe\",\n title: \"Check visible devices again\",\n kind: \"command\",\n risk: \"read-only\",\n automatic: true,\n idempotent: true,\n command: { executable: \"adb\", args: [\"devices\", \"-l\"] },\n };\n}\n\nexport function targetSelectionProblem(\n result: Exclude<TargetSelectionResult, { kind: \"selected\" }>,\n correlation: Correlation,\n): Problem {\n if (result.kind === \"ambiguous\") {\n return {\n code: ProblemCode.MultipleTargets,\n category: \"target.selection\",\n severity: \"error\",\n summary: \"Multiple ready Android targets require an explicit selection.\",\n detail: \"Choose one with --device, --transport-id, or the interactive --select picker.\",\n retryable: true,\n evidence: [\n {\n source: \"target.inventory\",\n field: \"serials\",\n value: result.candidates.map(({ serial }) => serial),\n },\n ],\n actions: [],\n correlation,\n };\n }\n if (result.kind === \"duplicate\") {\n return {\n code: ProblemCode.DuplicateTargetTransport,\n category: \"target.selection\",\n severity: \"error\",\n summary: \"The target serial identifies multiple ADB transports.\",\n detail: \"Select the intended transport explicitly with --transport-id.\",\n retryable: true,\n evidence: [\n { source: \"target.inventory\", field: \"serial\", value: result.target.serial },\n {\n source: \"target.inventory\",\n field: \"transportIds\",\n value: result.transports.map(({ transportId }) => transportId ?? null),\n },\n ],\n actions: [],\n correlation,\n };\n }\n if (result.kind === \"not-found\") {\n return {\n code: ProblemCode.TargetNotFound,\n category: \"target.selection\",\n severity: \"error\",\n summary: \"The requested Android target was not found.\",\n detail:\n \"Check the selector with adb-ready devices, then retry with an exact serial or alias.\",\n retryable: true,\n evidence: [{ source: \"target.selector\", field: \"value\", value: result.selector }],\n actions: [],\n correlation,\n };\n }\n if (result.kind === \"unavailable\") {\n return {\n code: ProblemCode.NoSelectableTarget,\n category: \"target.selection\",\n severity: \"error\",\n summary: \"The requested Android target is not ready.\",\n detail: `ADB reports ${result.target.state}; recover or authorize the target before retrying.`,\n retryable: true,\n evidence: [\n { source: \"target.inventory\", field: \"serial\", value: result.target.serial },\n { source: \"target.inventory\", field: \"state\", value: result.target.state },\n ],\n actions: [retryDevicesAction()],\n correlation,\n };\n }\n return {\n code: ProblemCode.NoSelectableTarget,\n category: \"target.selection\",\n severity: \"error\",\n summary: \"No ready Android target is available.\",\n detail: \"Connect a target, start an emulator, or enable Wireless debugging, then retry.\",\n retryable: true,\n evidence: [],\n actions: [retryDevicesAction()],\n correlation,\n };\n}\n\nexport function targetInventoryProblems(\n targets: readonly AndroidTarget[],\n correlation: Correlation,\n): Problem[] {\n const problems: Problem[] = [];\n for (const target of targets) {\n const serialCounts = new Map<string, number>();\n const hasStableTransport = target.transports.some(({ stable }) => stable);\n for (const transport of target.transports) {\n serialCounts.set(transport.serial, (serialCounts.get(transport.serial) ?? 0) + 1);\n if (!transport.stable && !hasStableTransport) {\n problems.push({\n code: ProblemCode.UnstableTargetSerial,\n category: \"target.identity\",\n severity: \"warning\",\n summary: \"ADB reported an unstable target identifier.\",\n detail: \"A transient mDNS service name cannot be used as a reliable final device serial.\",\n retryable: true,\n evidence: [{ source: \"adb.devices\", field: \"serial\", value: transport.serial }],\n actions: [retryDevicesAction()],\n correlation,\n });\n }\n }\n for (const [serial, count] of serialCounts) {\n if (count > 1) {\n problems.push({\n code: ProblemCode.DuplicateTargetTransport,\n category: \"target.identity\",\n severity: \"warning\",\n summary: \"ADB reported duplicate transports for one serial.\",\n detail: \"Use an explicit transport ID for operations until the duplicate disappears.\",\n retryable: true,\n evidence: [\n { source: \"adb.devices\", field: \"serial\", value: serial },\n { source: \"adb.devices\", field: \"count\", value: count },\n ],\n actions: [retryDevicesAction()],\n correlation,\n });\n }\n }\n }\n return problems;\n}\n\nexport function adbNotFoundProblem(correlation: Correlation, requestedPath?: string): Problem {\n return {\n code: ProblemCode.AdbNotFound,\n category: \"environment.executable\",\n severity: \"error\",\n summary: \"ADB was not found.\",\n detail:\n requestedPath === undefined\n ? \"Install Android SDK Platform-Tools or provide an explicit ADB path.\"\n : `The configured ADB executable could not be used: ${requestedPath}`,\n retryable: true,\n evidence:\n requestedPath === undefined\n ? []\n : [{ source: \"configuration\", field: \"adb.path\", value: requestedPath }],\n actions: [\n {\n id: \"configure_adb_path\",\n title: \"Provide the ADB executable with --adb PATH\",\n kind: \"user\",\n risk: \"none\",\n automatic: false,\n },\n ],\n correlation,\n };\n}\n\nfunction processEvidence(result: ProcessResult): Evidence[] {\n const redactedStderr = redactText(result.stderr.trim());\n const redactedStdout = redactText(result.stdout.trim());\n return [\n { source: \"process\", field: \"exitCode\", value: result.exitCode },\n { source: \"process\", field: \"signal\", value: result.signal },\n { source: \"process\", field: \"timedOut\", value: result.timedOut },\n ...(redactedStderr.value === \"\"\n ? []\n : [\n {\n source: \"process\",\n field: \"stderr\",\n value: redactedStderr.value.slice(0, 2_000),\n redacted: redactedStderr.replacements > 0,\n } satisfies Evidence,\n ]),\n ...(redactedStdout.value === \"\"\n ? []\n : [\n {\n source: \"process\",\n field: \"stdout\",\n value: redactedStdout.value.slice(0, 2_000),\n redacted: redactedStdout.replacements > 0,\n } satisfies Evidence,\n ]),\n ];\n}\n\nfunction manualServerRestartAction(title: string): SuggestedAction {\n return {\n id: \"review_adb_server_restart\",\n title,\n kind: \"user\",\n risk: \"shared-global\",\n automatic: false,\n };\n}\n\nfunction unquoted(value: string | undefined): string | undefined {\n if (value === undefined) {\n return undefined;\n }\n const trimmed = value.trim();\n return trimmed.startsWith('\"') && trimmed.endsWith('\"') ? trimmed.slice(1, -1) : trimmed;\n}\n\nfunction versionCore(value: string | undefined): string | undefined {\n return unquoted(value)?.match(/^\\d+\\.\\d+\\.\\d+/u)?.[0];\n}\n\nexport function problemsForServerStatus(\n status: Readonly<Record<string, string>>,\n clientVersion: string | undefined,\n correlation: Correlation,\n): Problem[] {\n const problems: Problem[] = [];\n const mdnsEnabled = unquoted(status.mdns_enabled)?.toLowerCase();\n if (mdnsEnabled === \"false\") {\n problems.push({\n code: ProblemCode.AdbMdnsDisabled,\n category: \"adb.discovery\",\n severity: \"warning\",\n summary: \"ADB network discovery is disabled.\",\n detail:\n \"Explicit wireless endpoints can still work, but automatic mDNS discovery is unavailable.\",\n retryable: true,\n evidence: [{ source: \"adb.server-status\", field: \"mdns_enabled\", value: false }],\n actions: [\n manualServerRestartAction(\n \"Enable ADB mDNS and restart the shared ADB server when it is safe\",\n ),\n ],\n correlation,\n });\n }\n\n const clientCore = versionCore(clientVersion);\n const serverCore = versionCore(status.version);\n if (clientCore !== undefined && serverCore !== undefined && clientCore !== serverCore) {\n problems.push({\n code: ProblemCode.AdbVersionMismatch,\n category: \"adb.server\",\n severity: \"warning\",\n summary: \"The ADB client and running server use different versions.\",\n detail:\n \"Mixed Platform-Tools versions can expose different capabilities and make diagnostics inconsistent.\",\n retryable: true,\n evidence: [\n { source: \"adb.client\", field: \"version\", value: clientCore },\n { source: \"adb.server-status\", field: \"version\", value: serverCore },\n ],\n actions: [\n manualServerRestartAction(\n \"Align Platform-Tools versions and restart the shared ADB server when it is safe\",\n ),\n ],\n correlation,\n });\n }\n return problems;\n}\n\nexport function adbProcessProblem(\n operation: string,\n result: ProcessResult,\n correlation: Correlation,\n): Problem {\n if (result.spawnError?.code === \"ENOENT\") {\n return adbNotFoundProblem(correlation, result.executable);\n }\n\n if (result.aborted) {\n return {\n code: ProblemCode.OperationInterrupted,\n category: \"process.interrupted\",\n severity: \"error\",\n summary: `ADB ${operation} was interrupted.`,\n detail: \"The operation stopped after receiving an interruption request.\",\n retryable: true,\n evidence: processEvidence(result),\n actions: [],\n correlation,\n };\n }\n\n if (result.timedOut) {\n return {\n code: ProblemCode.AdbTimeout,\n category: \"adb.timeout\",\n severity: \"error\",\n summary: `ADB ${operation} timed out.`,\n detail: \"The operation did not finish within the configured timeout.\",\n retryable: true,\n evidence: processEvidence(result),\n actions: [retryDevicesAction()],\n correlation,\n };\n }\n\n const combinedOutput = `${result.stderr}\\n${result.stdout}`;\n if (\n /(?:unknown|unrecognized)\\s+(?:command|option)\\b|(?:command|option)\\s+.+\\s+is not supported\\b/iu.test(\n combinedOutput,\n )\n ) {\n return {\n code: ProblemCode.AdbFeatureUnavailable,\n category: \"environment.compatibility\",\n severity: \"error\",\n summary: `The installed ADB does not support ${operation}.`,\n detail: \"Update Android SDK Platform-Tools, then retry the requested operation.\",\n retryable: true,\n evidence: processEvidence(result),\n actions: [\n {\n id: \"update_platform_tools\",\n title: \"Update Android SDK Platform-Tools\",\n kind: \"user\",\n risk: \"local-additive\",\n automatic: false,\n },\n ],\n correlation,\n };\n }\n\n const daemonUnavailable = /cannot connect to daemon|failed to start daemon|server.*failed/iu.test(\n result.stderr,\n );\n return {\n code: daemonUnavailable ? ProblemCode.AdbServerUnavailable : ProblemCode.AdbCommandFailed,\n category: daemonUnavailable ? \"adb.server\" : \"adb.operation\",\n severity: \"error\",\n summary: daemonUnavailable ? \"The ADB server is unavailable.\" : `ADB ${operation} failed.`,\n detail: daemonUnavailable\n ? \"ADB Ready could not communicate with the configured ADB server.\"\n : \"ADB returned an unsuccessful result for this operation.\",\n retryable: true,\n evidence: processEvidence(result),\n actions: [retryDevicesAction()],\n correlation,\n };\n}\n\nexport function adbOptionalProbeProblem(\n operation: string,\n result: ProcessResult,\n correlation: Correlation,\n): Problem {\n const failure = adbProcessProblem(operation, result, correlation);\n\n return {\n ...failure,\n code: ProblemCode.AdbOptionalProbeFailed,\n category: \"adb.capability\",\n severity: \"warning\",\n summary: `Optional ADB ${operation} probe failed.`,\n detail:\n \"Core diagnostics can continue, but this ADB capability could not be inspected reliably.\",\n };\n}\n\nfunction targetEvidence(device: AdbDevice): Evidence[] {\n return [\n { source: \"adb.devices\", field: \"serial\", value: device.serial },\n { source: \"adb.devices\", field: \"state\", value: device.state },\n ];\n}\n\nexport function problemsForDevices(\n devices: readonly AdbDevice[],\n correlation: Correlation,\n severity: Problem[\"severity\"] = \"error\",\n): Problem[] {\n const problems: Problem[] = [];\n\n for (const device of devices) {\n if (device.state === \"unauthorized\") {\n problems.push({\n code: ProblemCode.TargetUnauthorized,\n category: \"target.authorization\",\n severity,\n summary: \"An Android target has not authorized this computer.\",\n detail: \"Accept the RSA authorization prompt on the target, then retry the probe.\",\n retryable: true,\n evidence: targetEvidence(device),\n actions: [\n {\n id: \"accept_device_prompt\",\n title: \"Accept the RSA prompt on the Android target\",\n kind: \"user\",\n risk: \"none\",\n automatic: false,\n },\n retryDevicesAction(),\n ],\n correlation,\n });\n } else if (device.state === \"offline\") {\n problems.push({\n code: ProblemCode.TargetOffline,\n category: \"target.transport\",\n severity,\n summary: \"An Android target is offline.\",\n detail: \"ADB knows this transport, but it cannot currently communicate with the target.\",\n retryable: true,\n evidence: targetEvidence(device),\n actions: [retryDevicesAction()],\n correlation,\n });\n } else if (device.state === \"no-permissions\") {\n problems.push({\n code: ProblemCode.TargetNoPermissions,\n category: \"target.permissions\",\n severity,\n summary: \"The host does not have permission to use an Android target.\",\n detail: \"Check the host USB permissions and Android developer authorization setup.\",\n retryable: true,\n evidence: targetEvidence(device),\n actions: [\n {\n id: \"review_usb_permissions\",\n title: \"Review host USB permission setup\",\n kind: \"documentation\",\n risk: \"none\",\n automatic: false,\n },\n ],\n correlation,\n });\n } else if (device.state === \"unknown\") {\n problems.push({\n code: ProblemCode.TargetUnknownState,\n category: \"target.state\",\n severity: \"warning\",\n summary: \"ADB reported an unknown target state.\",\n detail: \"The target remains visible, but ADB Ready will not assume it is usable.\",\n retryable: true,\n evidence: targetEvidence(device),\n actions: [retryDevicesAction()],\n correlation,\n });\n }\n }\n\n return problems;\n}\n\nexport function noTargetsProblem(\n correlation: Correlation,\n discoveredServices: readonly AdbMdnsService[] = [],\n): Problem {\n const connectEndpoints = [\n ...new Set(\n discoveredServices\n .filter(\n ({ knownDevice, serviceType }) =>\n serviceType === \"legacy\" || (serviceType === \"connect\" && knownDevice !== false),\n )\n .map(({ endpoint }) => endpoint.serial),\n ),\n ].sort();\n const oneEndpoint = connectEndpoints.length === 1 ? connectEndpoints[0] : undefined;\n const pairingEndpoints = [\n ...new Set(\n discoveredServices\n .filter(({ serviceType }) => serviceType === \"pairing\")\n .map(({ endpoint }) => endpoint.serial),\n ),\n ].sort();\n const onePairingEndpoint =\n connectEndpoints.length === 0 && pairingEndpoints.length === 1\n ? pairingEndpoints[0]\n : undefined;\n return {\n code: ProblemCode.NoTargets,\n category: \"target.selection\",\n severity: \"warning\",\n summary:\n discoveredServices.length === 0\n ? \"No Android targets are visible.\"\n : \"Wireless Android services are visible, but no target is connected.\",\n detail:\n discoveredServices.length === 0\n ? \"Connect a target over USB, start an emulator, or enable Wireless debugging.\"\n : oneEndpoint !== undefined\n ? `Run adb-ready connect ${oneEndpoint} to establish and verify the target.`\n : onePairingEndpoint !== undefined\n ? `Run adb-ready pair ${onePairingEndpoint}, then connect the verified target.`\n : \"Choose the matching wireless service, or connect a target over USB.\",\n retryable: true,\n evidence: [\n { source: \"adb.devices\", field: \"count\", value: 0 },\n ...(discoveredServices.length === 0\n ? []\n : [\n {\n source: \"adb.mdns\",\n field: \"services\",\n value: discoveredServices.map(({ endpoint, serviceType }) => ({\n endpoint: endpoint.serial,\n serviceType,\n })),\n } satisfies Evidence,\n ]),\n ],\n actions:\n oneEndpoint !== undefined\n ? [\n {\n id: \"connect_discovered_target\",\n title: `Connect ${oneEndpoint}`,\n kind: \"command\",\n risk: \"local-additive\",\n automatic: false,\n idempotent: true,\n command: { executable: \"adb-ready\", args: [\"connect\", oneEndpoint] },\n },\n ]\n : onePairingEndpoint !== undefined\n ? [\n {\n id: \"pair_discovered_target\",\n title: `Pair ${onePairingEndpoint}`,\n kind: \"command\",\n risk: \"device-reversible\",\n automatic: false,\n idempotent: false,\n command: { executable: \"adb-ready\", args: [\"pair\", onePairingEndpoint] },\n },\n ]\n : [retryDevicesAction()],\n correlation,\n };\n}\n\nexport function multipleTargetsProblem(\n devices: readonly AdbDevice[],\n correlation: Correlation,\n): Problem {\n return {\n code: ProblemCode.MultipleTargets,\n category: \"target.selection\",\n severity: \"error\",\n summary: \"Multiple Android targets require an explicit selection.\",\n detail: \"Choose one interactively or provide an explicit target selector.\",\n retryable: true,\n evidence: [\n { source: \"adb.devices\", field: \"serials\", value: devices.map(({ serial }) => serial) },\n ],\n actions: [\n {\n id: \"select_target\",\n title: \"Select one Android target\",\n kind: \"user\",\n risk: \"none\",\n automatic: false,\n },\n ],\n correlation,\n };\n}\n",
20
20
  "import type { LogcatThreadtimeLine } from \"../adb/parsers.js\";\n\nexport type LogFindingCode =\n | \"ANDROID_ANR\"\n | \"ANDROID_FATAL_EXCEPTION\"\n | \"ANDROID_NATIVE_CRASH\"\n | \"REACT_NATIVE_FATAL\";\n\nexport interface LogFinding {\n code: LogFindingCode;\n summary: string;\n detail: string;\n}\n\nconst FATAL_EXCEPTION = /\\bFATAL EXCEPTION\\b/iu;\nconst ANR = /(?:\\bANR in\\b|\\bApplication Not Responding\\b)/iu;\nconst NATIVE_CRASH = /(?:\\bFatal signal \\d+\\b|\\bbacktrace:\\s*$|\\btombstone\\b)/iu;\nconst REACT_NATIVE_FATAL =\n /(?:\\bUnhandled (?:JS )?Exception\\b|\\bUnhandled Promise Rejection\\b|\\bInvariant Violation\\b)/iu;\n\nexport function classifyLogRecord(\n record: LogcatThreadtimeLine | undefined,\n raw: string,\n): LogFinding | undefined {\n const message = record?.message ?? raw;\n if (ANR.test(message)) {\n return {\n code: \"ANDROID_ANR\",\n summary: \"Android reported an application-not-responding event.\",\n detail:\n \"Inspect the surrounding main/system log timeline for the blocked component and process.\",\n };\n }\n if (\n FATAL_EXCEPTION.test(message) ||\n (record?.tag === \"AndroidRuntime\" && record.priority === \"F\")\n ) {\n return {\n code: \"ANDROID_FATAL_EXCEPTION\",\n summary: \"Android reported a fatal application exception.\",\n detail: \"Inspect the following stack frames in the saved session or exported AI context.\",\n };\n }\n if (NATIVE_CRASH.test(message) || (record?.tag === \"DEBUG\" && record.priority === \"F\")) {\n return {\n code: \"ANDROID_NATIVE_CRASH\",\n summary: \"Android reported a native application crash.\",\n detail: \"Inspect the crash buffer and adjacent tombstone or backtrace records.\",\n };\n }\n if (\n (record?.tag === \"ReactNativeJS\" || record?.tag === \"ReactNative\") &&\n (record.priority === \"E\" || record.priority === \"F\" || REACT_NATIVE_FATAL.test(message))\n ) {\n return {\n code: \"REACT_NATIVE_FATAL\",\n summary: \"React Native reported an application error.\",\n detail: \"Inspect the surrounding JavaScript error and component stack in the saved session.\",\n };\n }\n return undefined;\n}\n",
21
21
  "import process from \"node:process\";\n\nexport type RuntimeName = \"bun\" | \"deno\" | \"node\" | \"unknown\";\n\nexport interface RuntimeInfo {\n name: RuntimeName;\n version: string;\n nodeCompatibilityVersion?: string;\n platform: NodeJS.Platform;\n architecture: string;\n}\n\nexport function detectRuntime(): RuntimeInfo {\n const versions = process.versions as Record<string, string | undefined>;\n\n if (versions.bun !== undefined) {\n return {\n name: \"bun\",\n version: versions.bun,\n ...(versions.node === undefined ? {} : { nodeCompatibilityVersion: versions.node }),\n platform: process.platform,\n architecture: process.arch,\n };\n }\n\n if (versions.deno !== undefined) {\n return {\n name: \"deno\",\n version: versions.deno,\n ...(versions.node === undefined ? {} : { nodeCompatibilityVersion: versions.node }),\n platform: process.platform,\n architecture: process.arch,\n };\n }\n\n if (versions.node !== undefined) {\n return {\n name: \"node\",\n version: versions.node,\n platform: process.platform,\n architecture: process.arch,\n };\n }\n\n return {\n name: \"unknown\",\n version: \"unknown\",\n platform: process.platform,\n architecture: process.arch,\n };\n}\n",
22
22
  "import type { AdbPortMapping } from \"../adb/parsers.js\";\n\nexport type PortDirection = \"forward\" | \"reverse\";\n\nexport interface TcpPortMapping {\n direction: PortDirection;\n serial: string;\n host: string;\n device: string;\n}\n\nexport type TcpPortInput = string | number;\n\nexport function parseTcpPort(value: TcpPortInput): number | undefined {\n const normalized = typeof value === \"number\" ? String(value) : value.trim();\n const portText = normalized.startsWith(\"tcp:\") ? normalized.slice(4) : normalized;\n if (!/^\\d+$/u.test(portText)) {\n return undefined;\n }\n const port = Number(portText);\n return Number.isSafeInteger(port) && port >= 1 && port <= 65_535 ? port : undefined;\n}\n\nexport function tcpEndpoint(value: TcpPortInput): string | undefined {\n const port = parseTcpPort(value);\n return port === undefined ? undefined : `tcp:${String(port)}`;\n}\n\nexport function normalizePortMapping(\n direction: PortDirection,\n mapping: AdbPortMapping,\n): TcpPortMapping {\n return direction === \"forward\"\n ? {\n direction,\n serial: mapping.serial,\n host: mapping.local,\n device: mapping.remote,\n }\n : {\n direction,\n serial: mapping.serial,\n host: mapping.remote,\n device: mapping.local,\n };\n}\n\nexport function mappingArguments(\n direction: PortDirection,\n host: string,\n device: string,\n): [string, string] {\n return direction === \"forward\" ? [host, device] : [device, host];\n}\n\nexport function mappingKey(direction: PortDirection, host: string, device: string): string {\n return `${direction}\\0${host}\\0${device}`;\n}\n",
@@ -25,7 +25,7 @@
25
25
  "export interface RecoveryPolicy {\n enabled: boolean;\n maxAttempts: number;\n initialDelayMs: number;\n maxDelayMs: number;\n totalTimeoutMs: number;\n}\n\nexport type RecoveryPolicyInput = Partial<RecoveryPolicy>;\n\nexport const DEFAULT_RECOVERY_POLICY: Readonly<RecoveryPolicy> = Object.freeze({\n enabled: true,\n maxAttempts: 3,\n initialDelayMs: 500,\n maxDelayMs: 4_000,\n totalTimeoutMs: 30_000,\n});\n\nfunction positiveInteger(value: number, field: string): void {\n if (!Number.isSafeInteger(value) || value < 1) {\n throw new RangeError(`${field} must be a positive safe integer`);\n }\n}\n\nexport function resolveRecoveryPolicy(input: RecoveryPolicyInput = {}): RecoveryPolicy {\n const policy = { ...DEFAULT_RECOVERY_POLICY, ...input };\n positiveInteger(policy.maxAttempts, \"maxAttempts\");\n positiveInteger(policy.initialDelayMs, \"initialDelayMs\");\n positiveInteger(policy.maxDelayMs, \"maxDelayMs\");\n positiveInteger(policy.totalTimeoutMs, \"totalTimeoutMs\");\n if (policy.maxDelayMs < policy.initialDelayMs) {\n throw new RangeError(\"maxDelayMs must be greater than or equal to initialDelayMs\");\n }\n return policy;\n}\n\nexport function recoveryDelayMs(policy: RecoveryPolicy, attempt: number): number {\n positiveInteger(attempt, \"attempt\");\n const exponent = Math.min(attempt - 1, 30);\n return Math.min(policy.maxDelayMs, policy.initialDelayMs * 2 ** exponent);\n}\n\nexport function recoveryAttemptAllowed(\n policy: RecoveryPolicy,\n attempt: number,\n elapsedMs: number,\n): boolean {\n if (!Number.isFinite(elapsedMs) || elapsedMs < 0) {\n throw new RangeError(\"elapsedMs must be a non-negative finite number\");\n }\n return (\n policy.enabled &&\n attempt >= 1 &&\n attempt <= policy.maxAttempts &&\n elapsedMs < policy.totalTimeoutMs\n );\n}\n",
26
26
  "import {\n type RecoveryPolicyInput,\n recoveryAttemptAllowed,\n recoveryDelayMs,\n resolveRecoveryPolicy,\n} from \"./recovery-policy.js\";\nimport { SessionStateMachine } from \"./state-machine.js\";\n\nexport interface WatchedPort {\n device: string;\n host: string;\n}\n\nexport interface SessionHealth {\n targetReady: boolean;\n logReady?: boolean;\n targetSerial: string;\n missingPorts: WatchedPort[];\n conflictingPorts: WatchedPort[];\n detail?: string;\n}\n\nexport interface RecoveryOutcome {\n changedTarget: boolean;\n detail?: string;\n}\n\nexport interface SessionWatchEvent {\n type:\n | \"health.checked\"\n | \"session.degraded\"\n | \"recovery.started\"\n | \"recovery.failed\"\n | \"recovery.completed\"\n | \"watch.failed\";\n health?: SessionHealth;\n attempt?: number;\n detail?: string;\n}\n\nexport interface SessionWatchSummary {\n checks: number;\n degradations: number;\n recoveryAttempts: number;\n recoveries: number;\n targetChanges: number;\n failed: boolean;\n lastHealth?: SessionHealth;\n}\n\nexport interface SessionWatchOptions {\n signal: AbortSignal;\n observe: (signal: AbortSignal) => Promise<SessionHealth>;\n recover: (\n health: SessionHealth,\n attempt: number,\n signal: AbortSignal,\n ) => Promise<RecoveryOutcome>;\n intervalMs?: number;\n policy?: RecoveryPolicyInput;\n clock?: () => number;\n sleep?: (milliseconds: number, signal: AbortSignal) => Promise<boolean>;\n onEvent?: (event: SessionWatchEvent) => void;\n}\n\nfunction positiveInteger(value: number, field: string): void {\n if (!Number.isSafeInteger(value) || value < 1) {\n throw new RangeError(`${field} must be a positive safe integer`);\n }\n}\n\nexport function sessionHealthy(health: SessionHealth): boolean {\n return (\n health.targetReady &&\n health.logReady !== false &&\n health.missingPorts.length === 0 &&\n health.conflictingPorts.length === 0\n );\n}\n\nfunction failureDetail(error: unknown): string {\n return error instanceof Error && error.message.trim() !== \"\"\n ? `Health operation failed: ${error.message}`\n : \"Health operation failed unexpectedly.\";\n}\n\nexport async function abortableDelay(milliseconds: number, signal: AbortSignal): Promise<boolean> {\n positiveInteger(milliseconds, \"milliseconds\");\n if (signal.aborted) return false;\n return await new Promise<boolean>((resolve) => {\n let settled = false;\n const finish = (completed: boolean) => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n signal.removeEventListener(\"abort\", onAbort);\n resolve(completed);\n };\n const onAbort = () => finish(false);\n const timer = setTimeout(() => finish(true), milliseconds);\n signal.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n\nexport async function watchSession(options: SessionWatchOptions): Promise<SessionWatchSummary> {\n const intervalMs = options.intervalMs ?? 1_000;\n positiveInteger(intervalMs, \"intervalMs\");\n const policy = resolveRecoveryPolicy(options.policy);\n const clock = options.clock ?? Date.now;\n const sleep = options.sleep ?? abortableDelay;\n const machine = new SessionStateMachine();\n machine.transition(\"acquiring-target\", \"watcher received selected target\");\n machine.transition(\"preparing-ports\", \"watcher received verified ports\");\n machine.transition(\"starting-child\", \"watcher received running child\");\n machine.transition(\"ready\", \"watching session health\");\n const summary: SessionWatchSummary = {\n checks: 0,\n degradations: 0,\n recoveryAttempts: 0,\n recoveries: 0,\n targetChanges: 0,\n failed: false,\n };\n\n while (!options.signal.aborted) {\n if (!(await sleep(intervalMs, options.signal))) break;\n let health: SessionHealth;\n try {\n health = await options.observe(options.signal);\n } catch (error) {\n summary.failed = true;\n options.onEvent?.({ type: \"watch.failed\", detail: failureDetail(error) });\n return summary;\n }\n summary.checks += 1;\n summary.lastHealth = health;\n options.onEvent?.({ type: \"health.checked\", health });\n if (sessionHealthy(health)) continue;\n\n summary.degradations += 1;\n machine.transition(\"degraded\", health.detail ?? \"session health check failed\");\n options.onEvent?.({\n type: \"session.degraded\",\n health,\n ...(health.detail === undefined ? {} : { detail: health.detail }),\n });\n const startedAt = clock();\n let recovered = false;\n let lastHealth = health;\n for (let attempt = 1; ; attempt += 1) {\n const elapsedMs = Math.max(0, clock() - startedAt);\n if (!recoveryAttemptAllowed(policy, attempt, elapsedMs)) break;\n machine.transition(\"recovering\", `recovery attempt ${String(attempt)}`);\n summary.recoveryAttempts += 1;\n options.onEvent?.({ type: \"recovery.started\", health: lastHealth, attempt });\n if (!(await sleep(recoveryDelayMs(policy, attempt), options.signal))) break;\n let outcome: RecoveryOutcome;\n try {\n outcome = await options.recover(lastHealth, attempt, options.signal);\n } catch (error) {\n outcome = { changedTarget: false, detail: failureDetail(error) };\n }\n if (outcome.changedTarget) summary.targetChanges += 1;\n if (options.signal.aborted) break;\n let verified: SessionHealth;\n try {\n verified = await options.observe(options.signal);\n } catch (error) {\n machine.transition(\"degraded\", \"recovery verification failed unexpectedly\");\n options.onEvent?.({\n type: \"recovery.failed\",\n health: lastHealth,\n attempt,\n detail: failureDetail(error),\n });\n continue;\n }\n summary.checks += 1;\n summary.lastHealth = verified;\n options.onEvent?.({ type: \"health.checked\", health: verified, attempt });\n if (sessionHealthy(verified)) {\n machine.transition(\"ready\", \"recovery independently verified\");\n summary.recoveries += 1;\n recovered = true;\n options.onEvent?.({\n type: \"recovery.completed\",\n health: verified,\n attempt,\n ...(outcome.detail === undefined ? {} : { detail: outcome.detail }),\n });\n break;\n }\n lastHealth = verified;\n machine.transition(\"degraded\", verified.detail ?? \"recovery verification failed\");\n options.onEvent?.({\n type: \"recovery.failed\",\n health: verified,\n attempt,\n ...(outcome.detail === undefined && verified.detail === undefined\n ? {}\n : { detail: outcome.detail ?? verified.detail }),\n });\n }\n if (!recovered && !options.signal.aborted) {\n machine.transition(\"failed\", \"recovery budget exhausted\");\n summary.failed = true;\n options.onEvent?.({\n type: \"watch.failed\",\n health: summary.lastHealth,\n detail: \"Recovery budget exhausted.\",\n });\n return summary;\n }\n }\n return summary;\n}\n",
27
27
  "import { createHash, randomUUID } from \"node:crypto\";\nimport {\n appendFile,\n mkdir,\n readdir,\n readFile,\n rename,\n rm,\n stat,\n writeFile,\n} from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport path from \"node:path\";\nimport process from \"node:process\";\nimport type { EventBus } from \"../core/event-bus.js\";\nimport { type RedactionOptions, redactText } from \"../core/redaction.js\";\nimport type { AdbReadyEvent, JsonValue, Problem, Severity } from \"../domain/contracts.js\";\n\nexport type StoredSessionStatus = \"completed\" | \"failed\" | \"interrupted\" | \"running\";\n\nexport interface StoredProblem {\n code: string;\n category: string;\n severity: Severity;\n summary: string;\n detail: string;\n retryable: boolean;\n}\n\nexport interface SessionManifest {\n schemaVersion: 1;\n sessionId: string;\n status: StoredSessionStatus;\n command: string;\n startedAt: string;\n updatedAt: string;\n finishedAt?: string;\n eventFile: string;\n eventCount: number;\n eventBytes: number;\n targetFingerprint?: string;\n projectFingerprint?: string;\n preset?: string;\n problems: StoredProblem[];\n}\n\nexport interface SessionStoreOptions {\n directory?: string;\n env?: NodeJS.ProcessEnv;\n platform?: NodeJS.Platform;\n homeDirectory?: string;\n maxSessions?: number;\n maxAgeDays?: number;\n maxBytes?: number;\n redaction?: RedactionOptions;\n}\n\nexport interface SessionRecorderInput {\n sessionId: string;\n command: string;\n startedAt: string;\n privateLiterals?: readonly string[];\n}\n\nexport interface SessionFinishInput {\n status: Exclude<StoredSessionStatus, \"running\">;\n finishedAt: string;\n problems?: readonly Problem[];\n targetIdentity?: string;\n projectName?: string;\n preset?: string;\n}\n\nexport type SessionStoreResult<T> =\n | { ok: true; value: T; directory: string }\n | {\n ok: false;\n code: \"SESSION_INVALID\" | \"SESSION_UNREADABLE\" | \"SESSION_UNWRITABLE\";\n message: string;\n directory: string;\n };\n\nconst DEFAULT_MAX_SESSIONS = 30;\nconst DEFAULT_MAX_AGE_DAYS = 14;\nconst DEFAULT_MAX_BYTES = 20 * 1024 * 1024;\nconst SESSION_ID_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/u;\n\nfunction positiveInteger(value: number, field: string): void {\n if (!Number.isSafeInteger(value) || value < 1) {\n throw new RangeError(`${field} must be a positive safe integer`);\n }\n}\n\nexport function defaultSessionStoreDirectory(\n platform: NodeJS.Platform,\n env: NodeJS.ProcessEnv,\n homeDirectory: string,\n): string {\n const platformPath = platform === \"win32\" ? path.win32 : path.posix;\n if (env.XDG_STATE_HOME !== undefined && env.XDG_STATE_HOME.trim() !== \"\") {\n return platformPath.join(env.XDG_STATE_HOME, \"adb-ready\", \"sessions\");\n }\n if (platform === \"win32\") {\n const root = env.LOCALAPPDATA?.trim() || env.APPDATA?.trim() || homeDirectory;\n return platformPath.join(root, \"adb-ready\", \"sessions\");\n }\n if (platform === \"darwin\") {\n return platformPath.join(\n homeDirectory,\n \"Library\",\n \"Application Support\",\n \"adb-ready\",\n \"sessions\",\n );\n }\n return platformPath.join(homeDirectory, \".local\", \"state\", \"adb-ready\", \"sessions\");\n}\n\nfunction resolveDirectory(options: SessionStoreOptions): string {\n return (\n options.directory ??\n defaultSessionStoreDirectory(\n options.platform ?? process.platform,\n options.env ?? process.env,\n options.homeDirectory ?? homedir(),\n )\n );\n}\n\nfunction assertSessionId(sessionId: string): void {\n if (!SESSION_ID_PATTERN.test(sessionId)) {\n throw new RangeError(\"sessionId contains unsupported characters\");\n }\n}\n\nfunction manifestPath(directory: string, sessionId: string): string {\n assertSessionId(sessionId);\n return path.join(directory, `${sessionId}.json`);\n}\n\nfunction eventPath(directory: string, sessionId: string): string {\n assertSessionId(sessionId);\n return path.join(directory, `${sessionId}.ndjson`);\n}\n\nasync function atomicJson(file: string, value: JsonValue): Promise<void> {\n const temporary = path.join(path.dirname(file), `.${path.basename(file)}-${randomUUID()}.tmp`);\n try {\n await writeFile(temporary, `${JSON.stringify(value, null, 2)}\\n`, {\n encoding: \"utf8\",\n flag: \"wx\",\n mode: 0o600,\n });\n await rename(temporary, file);\n } catch (error) {\n await rm(temporary, { force: true }).catch(() => undefined);\n throw error;\n }\n}\n\nfunction fingerprint(value: string): string {\n return `sha256:${createHash(\"sha256\").update(value).digest(\"hex\").slice(0, 16)}`;\n}\n\nfunction storedProblem(problem: Problem, options: RedactionOptions): StoredProblem {\n return {\n code: problem.code,\n category: problem.category,\n severity: problem.severity,\n summary: redactText(problem.summary, options).value,\n detail: redactText(problem.detail, options).value,\n retryable: problem.retryable,\n };\n}\n\nfunction redactedJson(value: JsonValue, options: RedactionOptions): JsonValue {\n if (typeof value === \"string\") return redactText(value, options).value;\n if (Array.isArray(value)) return value.map((item) => redactedJson(item, options));\n if (value !== null && typeof value === \"object\") {\n return Object.fromEntries(\n Object.entries(value).map(([key, item]) => [key, redactedJson(item, options)]),\n );\n }\n return value;\n}\n\nfunction privateValues(event: AdbReadyEvent): string[] {\n const values = new Set<string>();\n if (event.correlation.targetId !== undefined) values.add(event.correlation.targetId);\n const data = event.data;\n for (const key of [\"serial\", \"hardwareSerial\", \"endpoint\", \"targetId\"] as const) {\n const value = data?.[key];\n if (typeof value === \"string\" && value !== \"\") values.add(value);\n }\n const args = data?.args;\n if (Array.isArray(args)) {\n for (let index = 0; index < args.length; index += 1) {\n const argument = args[index];\n if ((argument === \"-s\" || argument === \"-t\") && typeof args[index + 1] === \"string\") {\n values.add(args[index + 1] as string);\n }\n if ((argument === \"connect\" || argument === \"pair\") && typeof args[index + 1] === \"string\") {\n values.add(args[index + 1] as string);\n }\n }\n }\n return [...values];\n}\n\nfunction redactEvent(\n event: AdbReadyEvent,\n literals: ReadonlySet<string>,\n options: RedactionOptions,\n): AdbReadyEvent {\n const redaction: RedactionOptions = {\n ...options,\n additionalLiterals: [...(options.additionalLiterals ?? []), ...literals],\n };\n return {\n ...event,\n message: redactText(event.message, redaction).value,\n correlation: {\n ...event.correlation,\n ...(event.correlation.targetId === undefined\n ? {}\n : { targetId: fingerprint(event.correlation.targetId) }),\n },\n ...(event.data === undefined\n ? {}\n : { data: redactedJson(event.data, redaction) as Record<string, JsonValue> }),\n };\n}\n\nfunction validManifest(value: unknown): value is SessionManifest {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) return false;\n const candidate = value as Partial<SessionManifest>;\n return (\n candidate.schemaVersion === 1 &&\n typeof candidate.sessionId === \"string\" &&\n SESSION_ID_PATTERN.test(candidate.sessionId) &&\n (candidate.status === \"running\" ||\n candidate.status === \"completed\" ||\n candidate.status === \"failed\" ||\n candidate.status === \"interrupted\") &&\n typeof candidate.command === \"string\" &&\n typeof candidate.startedAt === \"string\" &&\n Number.isFinite(Date.parse(candidate.startedAt)) &&\n typeof candidate.updatedAt === \"string\" &&\n Number.isFinite(Date.parse(candidate.updatedAt)) &&\n typeof candidate.eventFile === \"string\" &&\n candidate.eventFile === `${candidate.sessionId}.ndjson` &&\n typeof candidate.eventCount === \"number\" &&\n typeof candidate.eventBytes === \"number\" &&\n Array.isArray(candidate.problems)\n );\n}\n\nasync function pruneSessions(options: SessionStoreOptions): Promise<void> {\n const directory = resolveDirectory(options);\n const maxSessions = options.maxSessions ?? DEFAULT_MAX_SESSIONS;\n const maxAgeDays = options.maxAgeDays ?? DEFAULT_MAX_AGE_DAYS;\n const maxBytes = options.maxBytes ?? DEFAULT_MAX_BYTES;\n positiveInteger(maxSessions, \"maxSessions\");\n positiveInteger(maxAgeDays, \"maxAgeDays\");\n positiveInteger(maxBytes, \"maxBytes\");\n const listed = await listSessions(options);\n if (!listed.ok) return;\n const completed = listed.value\n .filter(({ status }) => status !== \"running\")\n .sort((left, right) => right.updatedAt.localeCompare(left.updatedAt));\n const cutoff = Date.now() - maxAgeDays * 24 * 60 * 60 * 1_000;\n let retainedBytes = 0;\n for (const [index, manifest] of completed.entries()) {\n const files = [\n manifestPath(directory, manifest.sessionId),\n eventPath(directory, manifest.sessionId),\n ];\n const sizes = await Promise.all(\n files.map(async (file) => (await stat(file).catch(() => undefined))?.size ?? 0),\n );\n const bytes = sizes.reduce((total, size) => total + size, 0);\n const expired = Date.parse(manifest.updatedAt) < cutoff;\n const exceedsCount = index >= maxSessions;\n const exceedsBytes = retainedBytes + bytes > maxBytes;\n if (expired || exceedsCount || exceedsBytes) {\n await Promise.all(files.map(async (file) => await rm(file, { force: true })));\n } else {\n retainedBytes += bytes;\n }\n }\n}\n\nexport class SessionRecorder {\n readonly #bus: EventBus;\n readonly #directory: string;\n readonly #eventPath: string;\n readonly #manifestPath: string;\n readonly #options: SessionStoreOptions;\n readonly #privateLiterals: Set<string>;\n readonly #unsubscribe: () => void;\n #manifest: SessionManifest;\n #pending: Promise<void> = Promise.resolve();\n #writeFailed = false;\n #closed = false;\n\n private constructor(\n bus: EventBus,\n manifest: SessionManifest,\n options: SessionStoreOptions,\n privateLiterals: readonly string[],\n ) {\n this.#bus = bus;\n this.#manifest = manifest;\n this.#options = options;\n this.#directory = resolveDirectory(options);\n this.#eventPath = eventPath(this.#directory, manifest.sessionId);\n this.#manifestPath = manifestPath(this.#directory, manifest.sessionId);\n this.#privateLiterals = new Set(privateLiterals.filter(Boolean));\n this.#unsubscribe = this.#bus.subscribe((event) => this.#record(event));\n }\n\n static async create(\n bus: EventBus,\n input: SessionRecorderInput,\n options: SessionStoreOptions = {},\n ): Promise<SessionRecorder> {\n assertSessionId(input.sessionId);\n const directory = resolveDirectory(options);\n await mkdir(directory, { recursive: true, mode: 0o700 });\n const manifest: SessionManifest = {\n schemaVersion: 1,\n sessionId: input.sessionId,\n status: \"running\",\n command: input.command,\n startedAt: input.startedAt,\n updatedAt: input.startedAt,\n eventFile: `${input.sessionId}.ndjson`,\n eventCount: 0,\n eventBytes: 0,\n problems: [],\n };\n const events = eventPath(directory, input.sessionId);\n try {\n await writeFile(events, \"\", {\n encoding: \"utf8\",\n flag: \"wx\",\n mode: 0o600,\n });\n await atomicJson(manifestPath(directory, input.sessionId), manifest as unknown as JsonValue);\n } catch (error) {\n await rm(events, { force: true }).catch(() => undefined);\n throw error;\n }\n return new SessionRecorder(bus, manifest, options, input.privateLiterals ?? []);\n }\n\n addPrivateLiteral(value: string | undefined): void {\n if (value !== undefined && value !== \"\") this.#privateLiterals.add(value);\n }\n\n async finish(input: SessionFinishInput): Promise<SessionStoreResult<SessionManifest>> {\n if (this.#closed) {\n return {\n ok: false,\n code: \"SESSION_INVALID\",\n message: \"The session recorder is already closed.\",\n directory: this.#directory,\n };\n }\n this.#closed = true;\n this.#unsubscribe();\n await this.#pending;\n if (this.#writeFailed) {\n return {\n ok: false,\n code: \"SESSION_UNWRITABLE\",\n message: \"ADB Ready could not persist all session events.\",\n directory: this.#directory,\n };\n }\n const redaction: RedactionOptions = {\n ...this.#options.redaction,\n additionalLiterals: [\n ...(this.#options.redaction?.additionalLiterals ?? []),\n ...this.#privateLiterals,\n ],\n };\n this.#manifest = {\n ...this.#manifest,\n status: input.status,\n updatedAt: input.finishedAt,\n finishedAt: input.finishedAt,\n ...(input.targetIdentity === undefined\n ? {}\n : { targetFingerprint: fingerprint(input.targetIdentity) }),\n ...(input.projectName === undefined\n ? {}\n : { projectFingerprint: fingerprint(input.projectName) }),\n ...(input.preset === undefined ? {} : { preset: input.preset }),\n problems: (input.problems ?? []).map((problem) => storedProblem(problem, redaction)),\n };\n try {\n await atomicJson(this.#manifestPath, this.#manifest as unknown as JsonValue);\n await pruneSessions(this.#options);\n return { ok: true, value: structuredClone(this.#manifest), directory: this.#directory };\n } catch {\n return {\n ok: false,\n code: \"SESSION_UNWRITABLE\",\n message: \"ADB Ready could not finalize its session history.\",\n directory: this.#directory,\n };\n }\n }\n\n #record(event: AdbReadyEvent): void {\n if (this.#closed) return;\n for (const value of privateValues(event)) this.#privateLiterals.add(value);\n const safe = redactEvent(event, this.#privateLiterals, this.#options.redaction ?? {});\n const line = `${JSON.stringify(safe)}\\n`;\n const bytes = Buffer.byteLength(line);\n this.#manifest.eventCount += 1;\n this.#manifest.eventBytes += bytes;\n this.#pending = this.#pending\n .then(async () => {\n await appendFile(this.#eventPath, line, { encoding: \"utf8\", mode: 0o600 });\n })\n .catch(() => {\n this.#writeFailed = true;\n });\n }\n}\n\nexport async function listSessions(\n options: SessionStoreOptions = {},\n): Promise<SessionStoreResult<SessionManifest[]>> {\n const directory = resolveDirectory(options);\n let entries: string[];\n try {\n entries = await readdir(directory);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return { ok: true, value: [], directory };\n }\n return {\n ok: false,\n code: \"SESSION_UNREADABLE\",\n message: \"ADB Ready could not read its session history.\",\n directory,\n };\n }\n const manifests: SessionManifest[] = [];\n for (const entry of entries.filter((name) => name.endsWith(\".json\")).sort()) {\n try {\n const value: unknown = JSON.parse(await readFile(path.join(directory, entry), \"utf8\"));\n if (validManifest(value) && entry === `${value.sessionId}.json`) manifests.push(value);\n } catch {}\n }\n return {\n ok: true,\n value: manifests.sort((left, right) => right.updatedAt.localeCompare(left.updatedAt)),\n directory,\n };\n}\n\nexport async function readSession(\n sessionId: string,\n options: SessionStoreOptions = {},\n): Promise<SessionStoreResult<SessionManifest>> {\n const directory = resolveDirectory(options);\n try {\n const value: unknown = JSON.parse(await readFile(manifestPath(directory, sessionId), \"utf8\"));\n return validManifest(value)\n ? { ok: true, value, directory }\n : {\n ok: false,\n code: \"SESSION_INVALID\",\n message: \"The stored session manifest is invalid.\",\n directory,\n };\n } catch (error) {\n return {\n ok: false,\n code: error instanceof RangeError ? \"SESSION_INVALID\" : \"SESSION_UNREADABLE\",\n message: \"ADB Ready could not read the requested session.\",\n directory,\n };\n }\n}\n\nexport async function readSessionEvents(\n sessionId: string,\n options: SessionStoreOptions = {},\n): Promise<SessionStoreResult<AdbReadyEvent[]>> {\n const directory = resolveDirectory(options);\n try {\n const raw = await readFile(eventPath(directory, sessionId), \"utf8\");\n const events = raw\n .split(\"\\n\")\n .filter(Boolean)\n .map((line) => JSON.parse(line) as AdbReadyEvent);\n return { ok: true, value: events, directory };\n } catch (error) {\n return {\n ok: false,\n code: error instanceof RangeError ? \"SESSION_INVALID\" : \"SESSION_UNREADABLE\",\n message: \"ADB Ready could not read the requested session events.\",\n directory,\n };\n }\n}\n",
28
- "import type { AdbDevice, AdbDeviceState, AdbMdnsService } from \"../adb/parsers.js\";\nimport { parseAdbNetworkEndpoint } from \"../adb/parsers.js\";\n\nexport type TargetTransportKind = \"emulator\" | \"tcp\" | \"tls\" | \"usb\" | \"unknown\";\n\nexport interface TargetObservation {\n device: AdbDevice;\n hardwareSerial?: string;\n}\n\nexport interface TargetTransport {\n serial: string;\n state: AdbDeviceState;\n kind: TargetTransportKind;\n transportId?: string;\n endpoint?: string;\n stable: boolean;\n}\n\nexport interface AndroidTarget {\n id: string;\n serial: string;\n state: AdbDeviceState;\n name: string;\n hardwareSerial?: string;\n product?: string;\n device?: string;\n transports: TargetTransport[];\n}\n\nexport interface TargetInventory {\n targets: AndroidTarget[];\n services: AdbMdnsService[];\n}\n\nexport function isMdnsServiceSerial(serial: string): boolean {\n return /\\._adb(?:-tls-(?:connect|pairing))?\\._tcp(?:\\.|$)/iu.test(serial);\n}\n\nexport function isStableAdbSerial(serial: string): boolean {\n if (\n serial.trim() !== serial ||\n serial === \"\" ||\n /\\s/u.test(serial) ||\n isMdnsServiceSerial(serial)\n ) {\n return false;\n }\n if (serial.startsWith(\"0.0.0.0:\") || serial.startsWith(\"[::]:\")) {\n return false;\n }\n return true;\n}\n\nfunction transportKind(\n device: AdbDevice,\n services: readonly AdbMdnsService[],\n): TargetTransportKind {\n if (/^emulator-\\d+$/u.test(device.serial)) {\n return \"emulator\";\n }\n const endpoint = parseAdbNetworkEndpoint(device.serial);\n if (endpoint !== undefined) {\n return services.some(\n (service) => service.serviceType === \"connect\" && service.endpoint.serial === endpoint.serial,\n )\n ? \"tls\"\n : \"tcp\";\n }\n if (isMdnsServiceSerial(device.serial)) {\n return \"unknown\";\n }\n if (device.usb !== undefined || device.serial !== \"\") {\n return \"usb\";\n }\n return \"unknown\";\n}\n\nconst TRANSPORT_PRIORITY: Record<TargetTransportKind, number> = {\n usb: 0,\n emulator: 1,\n tls: 2,\n tcp: 3,\n unknown: 4,\n};\n\nfunction statePriority(state: AdbDeviceState): number {\n return state === \"device\" ? 0 : state === \"unauthorized\" ? 1 : state === \"offline\" ? 2 : 3;\n}\n\nfunction compareTransports(left: TargetTransport, right: TargetTransport): number {\n return (\n statePriority(left.state) - statePriority(right.state) ||\n Number(!left.stable) - Number(!right.stable) ||\n TRANSPORT_PRIORITY[left.kind] - TRANSPORT_PRIORITY[right.kind] ||\n left.serial.localeCompare(right.serial)\n );\n}\n\nfunction groupKey(observation: TargetObservation): string {\n const hardwareSerial = observation.hardwareSerial?.trim();\n return hardwareSerial === undefined || hardwareSerial === \"\"\n ? `adb:${observation.device.serial}`\n : `hardware:${hardwareSerial}`;\n}\n\nexport function buildTargetInventory(\n observations: readonly TargetObservation[],\n services: readonly AdbMdnsService[] = [],\n): TargetInventory {\n const groups = new Map<string, TargetObservation[]>();\n for (const observation of observations) {\n const key = groupKey(observation);\n const group = groups.get(key) ?? [];\n group.push(observation);\n groups.set(key, group);\n }\n\n const targets = [...groups.entries()].map(([id, group]): AndroidTarget => {\n const transports = group\n .map(({ device }): TargetTransport => {\n const endpoint = parseAdbNetworkEndpoint(device.serial);\n return {\n serial: device.serial,\n state: device.state,\n kind: transportKind(device, services),\n stable: isStableAdbSerial(device.serial),\n ...(device.transportId === undefined ? {} : { transportId: device.transportId }),\n ...(endpoint === undefined ? {} : { endpoint: endpoint.serial }),\n };\n })\n .sort(compareTransports);\n const canonical = transports[0];\n const representative =\n group.find(({ device }) => device.serial === canonical?.serial)?.device ?? group[0]?.device;\n if (canonical === undefined || representative === undefined) {\n throw new Error(\"Target grouping produced an empty target\");\n }\n const hardwareSerial = group\n .find(({ hardwareSerial }) => hardwareSerial?.trim())\n ?.hardwareSerial?.trim();\n return {\n id,\n serial: canonical.serial,\n state: canonical.state,\n name: representative.model ?? representative.product ?? hardwareSerial ?? canonical.serial,\n ...(hardwareSerial === undefined ? {} : { hardwareSerial }),\n ...(representative.product === undefined ? {} : { product: representative.product }),\n ...(representative.device === undefined ? {} : { device: representative.device }),\n transports,\n };\n });\n\n return {\n targets: targets.sort((left, right) => left.id.localeCompare(right.id)),\n services: [...services],\n };\n}\n",
28
+ "import type { AdbDevice, AdbDeviceState, AdbMdnsService } from \"../adb/parsers.js\";\nimport { parseAdbNetworkEndpoint } from \"../adb/parsers.js\";\n\nexport type TargetTransportKind = \"emulator\" | \"tcp\" | \"tls\" | \"usb\" | \"unknown\";\n\nexport interface TargetObservation {\n device: AdbDevice;\n hardwareSerial?: string;\n}\n\nexport interface TargetTransport {\n serial: string;\n state: AdbDeviceState;\n kind: TargetTransportKind;\n transportId?: string;\n endpoint?: string;\n stable: boolean;\n}\n\nexport interface AndroidTarget {\n id: string;\n serial: string;\n state: AdbDeviceState;\n name: string;\n hardwareSerial?: string;\n product?: string;\n device?: string;\n transports: TargetTransport[];\n}\n\nexport interface TargetInventory {\n targets: AndroidTarget[];\n services: AdbMdnsService[];\n}\n\nexport function isMdnsServiceSerial(serial: string): boolean {\n return /\\._adb(?:-tls-(?:connect|pairing))?\\._tcp(?:\\.|$)/iu.test(serial);\n}\n\nexport function isStableAdbSerial(serial: string): boolean {\n if (\n serial.trim() !== serial ||\n serial === \"\" ||\n /\\s/u.test(serial) ||\n isMdnsServiceSerial(serial)\n ) {\n return false;\n }\n if (serial.startsWith(\"0.0.0.0:\") || serial.startsWith(\"[::]:\")) {\n return false;\n }\n return true;\n}\n\nfunction normalizedServiceSerial(value: string): string {\n return value.trim().replace(/\\.+$/u, \"\");\n}\n\nfunction serviceSerial(service: AdbMdnsService): string {\n return normalizedServiceSerial(`${service.instance}.${service.rawServiceType}`);\n}\n\n/**\n * Correlates transient mDNS transports only through the exact advertised\n * service and an endpoint whose hardware identity was observed directly.\n * Incomplete or ambiguous evidence is intentionally left unresolved.\n */\nexport function correlateMdnsTransportIdentities(\n observations: readonly TargetObservation[],\n services: readonly AdbMdnsService[],\n): TargetObservation[] {\n const identityByEndpoint = new Map<string, Set<string>>();\n for (const observation of observations) {\n const hardwareSerial = observation.hardwareSerial?.trim();\n const endpoint = parseAdbNetworkEndpoint(observation.device.serial);\n if (hardwareSerial === undefined || hardwareSerial === \"\" || endpoint === undefined) continue;\n const identities = identityByEndpoint.get(endpoint.serial) ?? new Set<string>();\n identities.add(hardwareSerial);\n identityByEndpoint.set(endpoint.serial, identities);\n }\n\n return observations.map((observation) => {\n if (\n observation.hardwareSerial !== undefined ||\n !isMdnsServiceSerial(observation.device.serial)\n ) {\n return observation;\n }\n const matchingServices = services.filter(\n (service) => serviceSerial(service) === normalizedServiceSerial(observation.device.serial),\n );\n const identities = new Set<string>();\n for (const service of matchingServices) {\n const advertisedIdentity = service.hardwareSerial?.trim();\n if (advertisedIdentity !== undefined && advertisedIdentity !== \"\") {\n identities.add(advertisedIdentity);\n }\n for (const endpoint of [service.endpoint, ...(service.alternateEndpoints ?? [])]) {\n for (const identity of identityByEndpoint.get(endpoint.serial) ?? []) {\n identities.add(identity);\n }\n }\n }\n const [hardwareSerial] = identities;\n return identities.size === 1 && hardwareSerial !== undefined\n ? { ...observation, hardwareSerial }\n : observation;\n });\n}\n\nfunction transportKind(\n device: AdbDevice,\n services: readonly AdbMdnsService[],\n): TargetTransportKind {\n if (/^emulator-\\d+$/u.test(device.serial)) {\n return \"emulator\";\n }\n const endpoint = parseAdbNetworkEndpoint(device.serial);\n if (endpoint !== undefined) {\n return services.some(\n (service) => service.serviceType === \"connect\" && service.endpoint.serial === endpoint.serial,\n )\n ? \"tls\"\n : \"tcp\";\n }\n if (isMdnsServiceSerial(device.serial)) {\n return \"unknown\";\n }\n if (device.usb !== undefined || device.serial !== \"\") {\n return \"usb\";\n }\n return \"unknown\";\n}\n\nconst TRANSPORT_PRIORITY: Record<TargetTransportKind, number> = {\n usb: 0,\n emulator: 1,\n tls: 2,\n tcp: 3,\n unknown: 4,\n};\n\nfunction statePriority(state: AdbDeviceState): number {\n return state === \"device\" ? 0 : state === \"unauthorized\" ? 1 : state === \"offline\" ? 2 : 3;\n}\n\nfunction compareTransports(left: TargetTransport, right: TargetTransport): number {\n return (\n statePriority(left.state) - statePriority(right.state) ||\n Number(!left.stable) - Number(!right.stable) ||\n TRANSPORT_PRIORITY[left.kind] - TRANSPORT_PRIORITY[right.kind] ||\n left.serial.localeCompare(right.serial)\n );\n}\n\nfunction groupKey(observation: TargetObservation): string {\n const hardwareSerial = observation.hardwareSerial?.trim();\n return hardwareSerial === undefined || hardwareSerial === \"\"\n ? `adb:${observation.device.serial}`\n : `hardware:${hardwareSerial}`;\n}\n\nexport function buildTargetInventory(\n observations: readonly TargetObservation[],\n services: readonly AdbMdnsService[] = [],\n): TargetInventory {\n const groups = new Map<string, TargetObservation[]>();\n for (const observation of observations) {\n const key = groupKey(observation);\n const group = groups.get(key) ?? [];\n group.push(observation);\n groups.set(key, group);\n }\n\n const targets = [...groups.entries()].map(([id, group]): AndroidTarget => {\n const transports = group\n .map(({ device }): TargetTransport => {\n const endpoint = parseAdbNetworkEndpoint(device.serial);\n return {\n serial: device.serial,\n state: device.state,\n kind: transportKind(device, services),\n stable: isStableAdbSerial(device.serial),\n ...(device.transportId === undefined ? {} : { transportId: device.transportId }),\n ...(endpoint === undefined ? {} : { endpoint: endpoint.serial }),\n };\n })\n .sort(compareTransports);\n const canonical = transports[0];\n const representative =\n group.find(({ device }) => device.serial === canonical?.serial)?.device ?? group[0]?.device;\n if (canonical === undefined || representative === undefined) {\n throw new Error(\"Target grouping produced an empty target\");\n }\n const hardwareSerial = group\n .find(({ hardwareSerial }) => hardwareSerial?.trim())\n ?.hardwareSerial?.trim();\n return {\n id,\n serial: canonical.serial,\n state: canonical.state,\n name: representative.model ?? representative.product ?? hardwareSerial ?? canonical.serial,\n ...(hardwareSerial === undefined ? {} : { hardwareSerial }),\n ...(representative.product === undefined ? {} : { product: representative.product }),\n ...(representative.device === undefined ? {} : { device: representative.device }),\n transports,\n };\n });\n\n return {\n targets: targets.sort((left, right) => left.id.localeCompare(right.id)),\n services: [...services],\n };\n}\n",
29
29
  "import { parseAdbNetworkEndpoint } from \"../adb/parsers.js\";\nimport type { AndroidTarget, TargetTransport } from \"./model.js\";\n\nexport type TargetSelectionReason =\n | \"alias\"\n | \"explicit\"\n | \"only-ready\"\n | \"remembered\"\n | \"remembered-identity\"\n | \"transport-id\";\n\nexport interface SelectedTarget {\n target: AndroidTarget;\n transport: TargetTransport;\n reason: TargetSelectionReason;\n}\n\nexport type TargetSelectionResult =\n | { kind: \"selected\"; selection: SelectedTarget }\n | { kind: \"ambiguous\"; candidates: AndroidTarget[] }\n | { kind: \"not-found\"; selector: string }\n | { kind: \"unavailable\"; target: AndroidTarget }\n | { kind: \"duplicate\"; target: AndroidTarget; transports: TargetTransport[] }\n | { kind: \"none\" };\n\nexport interface TargetSelectionOptions {\n selector?: string;\n transportId?: string;\n rememberedSerial?: string;\n rememberedHardwareSerial?: string;\n aliases?: Readonly<Record<string, string>>;\n rememberedOnly?: boolean;\n}\n\nfunction readyTransports(target: AndroidTarget): TargetTransport[] {\n return target.transports.filter(({ stable, state }) => stable && state === \"device\");\n}\n\nfunction selection(\n target: AndroidTarget,\n transport: TargetTransport,\n reason: TargetSelectionReason,\n): TargetSelectionResult {\n return { kind: \"selected\", selection: { target, transport, reason } };\n}\n\nfunction findBySerial(\n targets: readonly AndroidTarget[],\n serial: string,\n): { target: AndroidTarget; transports: TargetTransport[] } | undefined {\n for (const target of targets) {\n const transports = target.transports.filter((candidate) => candidate.serial === serial);\n if (transports.length > 0) {\n return { target, transports };\n }\n }\n return undefined;\n}\n\nfunction transportMatchingRememberedKind(\n transports: readonly TargetTransport[],\n rememberedSerial: string | undefined,\n): TargetTransport | undefined {\n const rememberedWasNetwork =\n rememberedSerial !== undefined && parseAdbNetworkEndpoint(rememberedSerial) !== undefined;\n if (rememberedWasNetwork) {\n return transports.find(({ kind }) => kind === \"tls\" || kind === \"tcp\") ?? transports[0];\n }\n return transports.find(({ kind }) => kind === \"usb\" || kind === \"emulator\") ?? transports[0];\n}\n\nexport function selectTarget(\n targets: readonly AndroidTarget[],\n options: TargetSelectionOptions = {},\n): TargetSelectionResult {\n if (options.transportId !== undefined) {\n for (const target of targets) {\n const transport = target.transports.find(\n ({ transportId }) => transportId === options.transportId,\n );\n if (transport !== undefined) {\n return transport.state === \"device\" && transport.stable\n ? selection(target, transport, \"transport-id\")\n : { kind: \"unavailable\", target };\n }\n }\n return { kind: \"not-found\", selector: options.transportId };\n }\n\n if (options.selector !== undefined) {\n const resolved = options.aliases?.[options.selector] ?? options.selector;\n const reason: TargetSelectionReason =\n options.aliases?.[options.selector] === undefined ? \"explicit\" : \"alias\";\n const exactTarget = targets.find(({ id }) => id === resolved);\n if (exactTarget !== undefined) {\n const transports = readyTransports(exactTarget);\n const transport = transports[0];\n if (transports.length > 1 && new Set(transports.map(({ serial }) => serial)).size === 1) {\n return { kind: \"duplicate\", target: exactTarget, transports };\n }\n return transport === undefined\n ? { kind: \"unavailable\", target: exactTarget }\n : selection(exactTarget, transport, reason);\n }\n const match = findBySerial(targets, resolved);\n if (match === undefined) {\n return { kind: \"not-found\", selector: options.selector };\n }\n const readyMatches = match.transports.filter(\n ({ stable, state }) => stable && state === \"device\",\n );\n if (readyMatches.length > 1) {\n return { kind: \"duplicate\", target: match.target, transports: readyMatches };\n }\n const transport = match.transports[0];\n return transport !== undefined && transport.state === \"device\" && transport.stable\n ? selection(match.target, transport, reason)\n : { kind: \"unavailable\", target: match.target };\n }\n\n if (options.rememberedSerial !== undefined) {\n const remembered = findBySerial(targets, options.rememberedSerial);\n if (remembered !== undefined && remembered.transports.length > 1) {\n return { kind: \"duplicate\", target: remembered.target, transports: remembered.transports };\n }\n const transport = remembered?.transports[0];\n if (\n remembered !== undefined &&\n transport !== undefined &&\n transport.state === \"device\" &&\n transport.stable\n ) {\n return selection(remembered.target, transport, \"remembered\");\n }\n const identityMatches =\n options.rememberedHardwareSerial === undefined\n ? []\n : targets.filter(\n ({ hardwareSerial }) => hardwareSerial === options.rememberedHardwareSerial,\n );\n if (identityMatches.length > 1) {\n return { kind: \"ambiguous\", candidates: identityMatches };\n }\n const identityTarget = identityMatches[0];\n if (identityTarget !== undefined) {\n const transport = transportMatchingRememberedKind(\n readyTransports(identityTarget),\n options.rememberedSerial,\n );\n if (transport !== undefined) {\n return selection(identityTarget, transport, \"remembered-identity\");\n }\n if (options.rememberedOnly) {\n return { kind: \"unavailable\", target: identityTarget };\n }\n } else if (options.rememberedOnly) {\n return remembered === undefined\n ? { kind: \"not-found\", selector: \"remembered target\" }\n : { kind: \"unavailable\", target: remembered.target };\n }\n } else if (options.rememberedHardwareSerial !== undefined) {\n const identityMatches = targets.filter(\n ({ hardwareSerial }) => hardwareSerial === options.rememberedHardwareSerial,\n );\n if (identityMatches.length > 1) {\n return { kind: \"ambiguous\", candidates: identityMatches };\n }\n const identityTarget = identityMatches[0];\n const transport =\n identityTarget === undefined\n ? undefined\n : transportMatchingRememberedKind(readyTransports(identityTarget), undefined);\n if (identityTarget !== undefined && transport !== undefined) {\n return selection(identityTarget, transport, \"remembered-identity\");\n }\n if (options.rememberedOnly && identityTarget !== undefined) {\n return { kind: \"unavailable\", target: identityTarget };\n }\n if (options.rememberedOnly) {\n return { kind: \"not-found\", selector: \"remembered target\" };\n }\n } else if (options.rememberedOnly) {\n return { kind: \"not-found\", selector: \"remembered target\" };\n }\n\n const ready = targets.filter((target) => readyTransports(target).length > 0);\n if (ready.length === 0) {\n return { kind: \"none\" };\n }\n if (ready.length > 1) {\n return { kind: \"ambiguous\", candidates: ready };\n }\n const target = ready[0];\n const transports = target === undefined ? [] : readyTransports(target);\n const transport = transports[0];\n if (\n target !== undefined &&\n transports.length > 1 &&\n new Set(transports.map(({ serial }) => serial)).size === 1\n ) {\n return { kind: \"duplicate\", target, transports };\n }\n return target === undefined || transport === undefined\n ? { kind: \"none\" }\n : selection(target, transport, \"only-ready\");\n}\n",
30
30
  "import { randomUUID } from \"node:crypto\";\nimport { readFile, rename, rm, stat, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport type { ConfigProvenance, ConfigValues, LoadedConfig } from \"../config/types.js\";\nimport { redactText } from \"../core/redaction.js\";\nimport { type DevPreset, detectProject, type PackageManagerName } from \"../dev/project.js\";\nimport type { JsonValue, Problem, ResultEnvelope } from \"../domain/contracts.js\";\nimport { ExitCode, SCHEMA_VERSION } from \"../domain/contracts.js\";\n\nexport interface ConfigCommandDependencies {\n clock?: () => Date;\n detectProject?: typeof detectProject;\n idFactory?: () => string;\n}\n\nexport interface InitOptions {\n cwd: string;\n preset?: DevPreset;\n packageManager?: PackageManagerName;\n reversePorts?: readonly number[];\n logs?: boolean;\n cleanupPorts?: boolean;\n force?: boolean;\n dryRun?: boolean;\n}\n\nexport interface InitData {\n status: \"created\" | \"planned\" | \"replaced\";\n path: string;\n detectedPreset?: DevPreset;\n detectedPackageManager?: PackageManagerName;\n document: JsonValue;\n}\n\nexport interface ConfigValueExplanation {\n key: string;\n value: JsonValue;\n source: ConfigProvenance[\"source\"];\n location?: string;\n}\n\nexport interface ConfigReportData {\n action: \"explain\" | \"validate\";\n valid: true;\n files: { project?: string; user?: string };\n profile?: LoadedConfig[\"profile\"];\n values?: ConfigValueExplanation[];\n}\n\nexport interface ConfigCommandExecution<T> {\n result: ResultEnvelope<T>;\n exitCode: number;\n}\n\nfunction execute<T>(\n command: string,\n data: T | null,\n problems: Problem[],\n dependencies: ConfigCommandDependencies,\n): ConfigCommandExecution<T> {\n const now = (dependencies.clock ?? (() => new Date()))();\n const ok = problems.every(({ severity }) => severity !== \"error\");\n return {\n exitCode: ok ? ExitCode.Success : ExitCode.InvalidInput,\n result: {\n schemaVersion: SCHEMA_VERSION,\n command,\n commandId: (dependencies.idFactory ?? randomUUID)(),\n ok,\n startedAt: now.toISOString(),\n finishedAt: now.toISOString(),\n durationMs: 0,\n data,\n problems,\n },\n };\n}\n\nfunction configProblem(code: string, summary: string, detail: string): Problem {\n return {\n code,\n category: \"input.configuration\",\n severity: \"error\",\n summary,\n detail,\n retryable: true,\n evidence: [],\n actions: [],\n correlation: { commandId: \"config\" },\n };\n}\n\nfunction jsonValue(value: unknown): JsonValue {\n return JSON.parse(JSON.stringify(value)) as JsonValue;\n}\n\nfunction safeLocation(location: string | undefined): string | undefined {\n if (location === undefined) return undefined;\n return redactText(path.basename(location)).value;\n}\n\nexport function projectConfigDocument(options: {\n preset?: DevPreset;\n packageManager?: PackageManagerName;\n reversePorts?: readonly number[];\n logs?: boolean;\n cleanupPorts?: boolean;\n}): JsonValue {\n const frameworkPorts =\n options.preset === \"expo\" || options.preset === \"react-native\" ? [8081] : [];\n const reversePorts = [...new Set(options.reversePorts ?? frameworkPorts)];\n const dev = {\n ...(options.preset === undefined ? {} : { preset: options.preset }),\n ...(options.packageManager === undefined ? {} : { packageManager: options.packageManager }),\n ...(reversePorts.length === 0 ? {} : { reversePorts }),\n logs: options.logs ?? true,\n cleanupPorts: options.cleanupPorts ?? true,\n watch: true,\n };\n return {\n $schema: \"./node_modules/adb-ready/schema/config-v1.schema.json\",\n version: 1,\n dev,\n };\n}\n\nexport async function runInit(\n options: InitOptions,\n dependencies: ConfigCommandDependencies = {},\n): Promise<ConfigCommandExecution<InitData>> {\n const project = await (dependencies.detectProject ?? detectProject)({\n cwd: options.cwd,\n ...(options.packageManager === undefined\n ? {}\n : { explicitPackageManager: options.packageManager }),\n });\n const preset = options.preset ?? project.preset;\n const packageManager = options.packageManager ?? project.packageManager.name;\n const document = projectConfigDocument({\n ...(preset === undefined ? {} : { preset }),\n ...(packageManager === undefined ? {} : { packageManager }),\n ...(options.reversePorts === undefined ? {} : { reversePorts: options.reversePorts }),\n ...(options.logs === undefined ? {} : { logs: options.logs }),\n ...(options.cleanupPorts === undefined ? {} : { cleanupPorts: options.cleanupPorts }),\n });\n const destination = path.join(project.root, \"adb-ready.config.json\");\n const displayPath = path.relative(options.cwd, destination) || path.basename(destination);\n const exists = await stat(destination)\n .then((entry) => entry.isFile())\n .catch(() => false);\n if (exists && !options.force) {\n return execute<InitData>(\n \"init\",\n null,\n [\n configProblem(\n \"CONFIG_ALREADY_EXISTS\",\n \"A project configuration already exists.\",\n \"Review the existing file or pass --force to replace it explicitly.\",\n ),\n ],\n dependencies,\n );\n }\n if (options.dryRun) {\n return execute(\n \"init\",\n {\n status: \"planned\",\n path: displayPath,\n ...(project.preset === undefined ? {} : { detectedPreset: project.preset }),\n ...(project.packageManager.name === undefined\n ? {}\n : { detectedPackageManager: project.packageManager.name }),\n document,\n },\n [],\n dependencies,\n );\n }\n const temporary = path.join(project.root, `.adb-ready.config-${randomUUID()}.tmp`);\n const backup = path.join(project.root, `.adb-ready.config-${randomUUID()}.backup`);\n let movedExisting = false;\n try {\n await writeFile(temporary, `${JSON.stringify(document, null, 2)}\\n`, {\n encoding: \"utf8\",\n flag: \"wx\",\n mode: 0o644,\n });\n if (exists) {\n await rename(destination, backup);\n movedExisting = true;\n }\n await rename(temporary, destination);\n JSON.parse(await readFile(destination, \"utf8\"));\n if (movedExisting) await rm(backup, { force: true });\n } catch {\n await rm(temporary, { force: true }).catch(() => undefined);\n if (movedExisting) {\n await rm(destination, { force: true }).catch(() => undefined);\n await rename(backup, destination).catch(() => undefined);\n }\n return execute<InitData>(\n \"init\",\n null,\n [\n configProblem(\n \"CONFIG_WRITE_FAILED\",\n \"The project configuration could not be written safely.\",\n \"Check project directory permissions and retry.\",\n ),\n ],\n dependencies,\n );\n }\n return execute(\n \"init\",\n {\n status: exists ? \"replaced\" : \"created\",\n path: displayPath,\n ...(project.preset === undefined ? {} : { detectedPreset: project.preset }),\n ...(project.packageManager.name === undefined\n ? {}\n : { detectedPackageManager: project.packageManager.name }),\n document,\n },\n [],\n dependencies,\n );\n}\n\nexport function runConfigReport(\n action: \"explain\" | \"validate\",\n loaded: LoadedConfig,\n dependencies: ConfigCommandDependencies = {},\n): ConfigCommandExecution<ConfigReportData> {\n const projectFile = safeLocation(loaded.files.project);\n const userFile = safeLocation(loaded.files.user);\n const files = {\n ...(projectFile === undefined ? {} : { project: projectFile }),\n ...(userFile === undefined ? {} : { user: userFile }),\n };\n const values = (Object.keys(loaded.values) as Array<keyof ConfigValues>)\n .sort()\n .flatMap((key): ConfigValueExplanation[] => {\n const value = loaded.values[key];\n const provenance = loaded.provenance[key];\n if (value === undefined || provenance === undefined) return [];\n const location = safeLocation(provenance.location);\n return [\n {\n key,\n value: jsonValue(value),\n source: provenance.source,\n ...(location === undefined ? {} : { location }),\n },\n ];\n });\n return execute<ConfigReportData>(\n `config ${action}`,\n {\n action,\n valid: true,\n files,\n ...(loaded.profile === undefined ? {} : { profile: loaded.profile }),\n ...(action === \"explain\" ? { values } : {}),\n },\n [],\n dependencies,\n );\n}\n",
31
31
  "import { randomUUID } from \"node:crypto\";\nimport {\n type CompiledContext,\n type ContextCompilerOptions,\n compileSessionContext,\n} from \"../ai/context-compiler.js\";\nimport type { AdbReadyEvent, Problem, ResultEnvelope } from \"../domain/contracts.js\";\nimport { ExitCode, SCHEMA_VERSION } from \"../domain/contracts.js\";\nimport {\n listSessions,\n readSession,\n readSessionEvents,\n type SessionManifest,\n type SessionStoreOptions,\n type StoredProblem,\n} from \"../state/session-store.js\";\n\nexport type SessionCommandAction = \"events\" | \"list\" | \"show\";\n\nexport type SessionCommandData =\n | { action: \"list\"; sessions: SessionManifest[] }\n | { action: \"show\"; session: SessionManifest }\n | { action: \"events\"; session: SessionManifest; events: AdbReadyEvent[] };\n\nexport interface ProblemsCommandData {\n sessionId: string;\n status: SessionManifest[\"status\"];\n problems: StoredProblem[];\n}\n\nexport interface ContextCommandData extends CompiledContext {\n sessionId: string;\n status: SessionManifest[\"status\"];\n}\n\nexport interface SessionCommandDependencies {\n clock?: () => Date;\n idFactory?: () => string;\n}\n\nexport interface SessionCommandExecution<T> {\n result: ResultEnvelope<T>;\n exitCode: number;\n}\n\nfunction storageProblem(code: string, summary: string, detail: string, commandId: string): Problem {\n return {\n code,\n category: \"state.session-history\",\n severity: \"error\",\n summary,\n detail,\n retryable: true,\n evidence: [],\n actions: [],\n correlation: { commandId },\n };\n}\n\nfunction execution<T>(\n command: string,\n data: T | null,\n problems: Problem[],\n dependencies: SessionCommandDependencies,\n): SessionCommandExecution<T> {\n const now = (dependencies.clock ?? (() => new Date()))();\n const ok = problems.every(({ severity }) => severity !== \"error\");\n return {\n exitCode: ok ? ExitCode.Success : ExitCode.Environment,\n result: {\n schemaVersion: SCHEMA_VERSION,\n command,\n commandId: (dependencies.idFactory ?? randomUUID)(),\n ok,\n startedAt: now.toISOString(),\n finishedAt: now.toISOString(),\n durationMs: 0,\n data,\n problems,\n },\n };\n}\n\nasync function resolveManifest(\n sessionId: string | undefined,\n options: SessionStoreOptions,\n): Promise<\n | { ok: true; manifest: SessionManifest }\n | { ok: false; code: string; summary: string; detail: string }\n> {\n if (sessionId !== undefined) {\n const stored = await readSession(sessionId, options);\n return stored.ok\n ? { ok: true, manifest: stored.value }\n : {\n ok: false,\n code: stored.code,\n summary: \"The requested session is unavailable.\",\n detail: stored.message,\n };\n }\n const listed = await listSessions(options);\n if (!listed.ok) {\n return {\n ok: false,\n code: listed.code,\n summary: \"Session history is unavailable.\",\n detail: listed.message,\n };\n }\n const latest = listed.value[0];\n return latest === undefined\n ? {\n ok: false,\n code: \"SESSION_NOT_FOUND\",\n summary: \"No saved development session exists yet.\",\n detail: \"Run adb-ready dev first, then inspect the latest session.\",\n }\n : { ok: true, manifest: latest };\n}\n\nexport async function runSessionCommand(\n action: SessionCommandAction,\n sessionId: string | undefined,\n options: SessionStoreOptions = {},\n dependencies: SessionCommandDependencies = {},\n): Promise<SessionCommandExecution<SessionCommandData>> {\n const command = `sessions ${action}`;\n if (action === \"list\") {\n const listed = await listSessions(options);\n return listed.ok\n ? execution(command, { action, sessions: listed.value }, [], dependencies)\n : execution<SessionCommandData>(\n command,\n null,\n [\n storageProblem(\n listed.code,\n \"Session history is unavailable.\",\n listed.message,\n \"session-history\",\n ),\n ],\n dependencies,\n );\n }\n const resolved = await resolveManifest(sessionId, options);\n if (!resolved.ok) {\n return execution<SessionCommandData>(\n command,\n null,\n [storageProblem(resolved.code, resolved.summary, resolved.detail, \"session-history\")],\n dependencies,\n );\n }\n if (action === \"show\") {\n return execution(command, { action, session: resolved.manifest }, [], dependencies);\n }\n const events = await readSessionEvents(resolved.manifest.sessionId, options);\n return events.ok\n ? execution(\n command,\n { action, session: resolved.manifest, events: events.value },\n [],\n dependencies,\n )\n : execution<SessionCommandData>(\n command,\n null,\n [\n storageProblem(\n events.code,\n \"The requested session events are unavailable.\",\n events.message,\n \"session-history\",\n ),\n ],\n dependencies,\n );\n}\n\nexport async function runProblemsCommand(\n sessionId: string | undefined,\n options: SessionStoreOptions = {},\n dependencies: SessionCommandDependencies = {},\n): Promise<SessionCommandExecution<ProblemsCommandData>> {\n const resolved = await resolveManifest(sessionId, options);\n if (!resolved.ok) {\n return execution<ProblemsCommandData>(\n \"problems\",\n null,\n [storageProblem(resolved.code, resolved.summary, resolved.detail, \"session-problems\")],\n dependencies,\n );\n }\n return execution(\n \"problems\",\n {\n sessionId: resolved.manifest.sessionId,\n status: resolved.manifest.status,\n problems: resolved.manifest.problems,\n },\n [],\n dependencies,\n );\n}\n\nexport async function runContextCommand(\n sessionId: string | undefined,\n characterBudget: number | undefined,\n options: SessionStoreOptions = {},\n dependencies: SessionCommandDependencies = {},\n compilerOptions: Omit<ContextCompilerOptions, \"characterBudget\"> = {},\n): Promise<SessionCommandExecution<ContextCommandData>> {\n const resolved = await resolveManifest(sessionId, options);\n if (!resolved.ok) {\n return execution<ContextCommandData>(\n \"context\",\n null,\n [storageProblem(resolved.code, resolved.summary, resolved.detail, \"session-context\")],\n dependencies,\n );\n }\n const events = await readSessionEvents(resolved.manifest.sessionId, options);\n if (!events.ok) {\n return execution<ContextCommandData>(\n \"context\",\n null,\n [\n storageProblem(\n events.code,\n \"The requested session events are unavailable.\",\n events.message,\n \"session-context\",\n ),\n ],\n dependencies,\n );\n }\n const compiled = compileSessionContext(resolved.manifest, events.value, {\n ...(characterBudget === undefined ? {} : { characterBudget }),\n ...compilerOptions,\n });\n return execution(\n \"context\",\n {\n sessionId: resolved.manifest.sessionId,\n status: resolved.manifest.status,\n ...compiled,\n },\n [],\n dependencies,\n );\n}\n",
@@ -38,12 +38,13 @@
38
38
  "import { renderLinkCoreFrame } from \"./ascii-scene.js\";\nimport { type SelectInput, selectOne } from \"./select.js\";\nimport type { TextSink } from \"./spinner.js\";\nimport { style } from \"./style.js\";\nimport type { TerminalCapabilities } from \"./terminal.js\";\n\nexport type HomeAction =\n | \"connect\"\n | \"context\"\n | \"dev\"\n | \"devices\"\n | \"doctor\"\n | \"exit\"\n | \"help\"\n | \"init\"\n | \"logs\"\n | \"pair\"\n | \"sessions\"\n | \"version\";\nexport type HomeResult =\n | { kind: \"action\"; action: HomeAction }\n | { kind: \"cancelled\"; reason: \"interrupt\" | \"signal\" }\n | { kind: \"unavailable\" };\n\nexport interface HomeScreenOptions {\n version: string;\n input: SelectInput;\n sink: TextSink;\n capabilities: TerminalCapabilities;\n signal?: AbortSignal;\n refreshIntervalMs?: number;\n presentation?: \"full\" | \"menu\";\n}\n\nfunction fit(value: string, width: number): string {\n if (value.length <= width) {\n return value.padEnd(width);\n }\n return width <= 3 ? value.slice(0, width) : `${value.slice(0, width - 3)}...`;\n}\n\nfunction productPanel(version: string, capabilities: TerminalCapabilities): string[] {\n const unicode = capabilities.unicode;\n const width = 36;\n const inner = width - 4;\n const top = unicode ? `╭─${\"─\".repeat(width - 4)}╮` : `+-${\"-\".repeat(width - 4)}+`;\n const bottom = unicode ? `╰${\"─\".repeat(width - 2)}╯` : `+${\"-\".repeat(width - 2)}+`;\n const side = unicode ? \"│\" : \"|\";\n const rows = [\n \"ADB READY\",\n \"Android sessions. Kept ready.\",\n \"\",\n \"RUN one target and dev command\",\n \"WATCH ports, target, and logs\",\n \"SHARE redacted AI context\",\n \"\",\n `adb-ready v${version}`,\n ];\n return [\n style.dim(top, capabilities),\n ...rows.map((row, index) => {\n const content = fit(row, inner);\n const styled =\n index === 0\n ? style.strong(content, capabilities)\n : index === 1\n ? style.accent(content, capabilities)\n : style.dim(content, capabilities);\n return `${style.dim(side, capabilities)} ${styled} ${style.dim(side, capabilities)}`;\n }),\n style.dim(bottom, capabilities),\n ];\n}\n\nfunction center(value: string, width: number): string {\n const padding = Math.max(0, Math.floor((width - value.length) / 2));\n return `${\" \".repeat(padding)}${value}`;\n}\n\nfunction homePreamble(\n frame: number,\n version: string,\n capabilities: TerminalCapabilities,\n): string[] {\n const angleX = 0.38 + Math.sin(frame * 0.035) * 0.12;\n const angleY = frame * 0.045;\n\n if (capabilities.columns < 76) {\n const width = Math.max(20, Math.min(34, capabilities.columns - 4));\n const core = renderLinkCoreFrame({ angleX, angleY, width, height: 12 });\n return [\n ...core.map((line) => style.accent(center(line, capabilities.columns), capabilities)),\n \"\",\n style.strong(center(\"ADB READY\", capabilities.columns), capabilities),\n style.dim(center(\"Android sessions. Kept ready.\", capabilities.columns), capabilities),\n style.dim(center(`v${version}`, capabilities.columns), capabilities),\n \"\",\n ];\n }\n\n const coreWidth = 36;\n const core = renderLinkCoreFrame({ angleX, angleY, width: coreWidth, height: 14 });\n const panel = productPanel(version, capabilities);\n const panelOffset = 2;\n return core\n .map((line, index) => {\n const left = style.accent(line.padEnd(coreWidth), capabilities);\n const right = index >= panelOffset ? (panel[index - panelOffset] ?? \"\") : \"\";\n return `${left} ${right}`.trimEnd();\n })\n .concat(\"\");\n}\n\nconst COMPACT_WORDMARK = [\n \" ## ### ### ### #### ## ### # #\",\n \"# # # # # # # # # # # # # # #\",\n \"#### # # ### ### ### #### # # ## \",\n \"# # # # # # # # # # # # # # \",\n \"# # ### ### # # #### # # ### # \",\n];\n\nfunction compactSessionPreamble(capabilities: TerminalCapabilities): string[] {\n const unicode = capabilities.unicode;\n const width = Math.max(20, Math.min(45, capabilities.columns));\n const inner = width - 4;\n const top = unicode ? `╭${\"─\".repeat(width - 2)}╮` : `+${\"-\".repeat(width - 2)}+`;\n const bottom = unicode ? `╰${\"─\".repeat(width - 2)}╯` : `+${\"-\".repeat(width - 2)}+`;\n const side = unicode ? \"│\" : \"|\";\n const wordmark = width >= 45 ? COMPACT_WORDMARK : [\"ADB READY\"];\n const rows = wordmark.map((line) => {\n const content = fit(center(line, inner), inner);\n return `${style.dim(side, capabilities)} ${style.accent(content, capabilities)} ${style.dim(side, capabilities)}`;\n });\n\n return [\"\", style.dim(top, capabilities), ...rows, style.dim(bottom, capabilities), \"\"];\n}\n\nexport function clearInteractiveScreen(sink: TextSink, capabilities: TerminalCapabilities): void {\n if (capabilities.interactive) {\n sink.write(\"\\u001B[2J\\u001B[H\");\n }\n}\n\nexport async function showHomeScreen(options: HomeScreenOptions): Promise<HomeResult> {\n if (!options.capabilities.interactive) {\n return { kind: \"unavailable\" };\n }\n\n const presentation = options.presentation ?? \"full\";\n if (presentation === \"full\") {\n clearInteractiveScreen(options.sink, options.capabilities);\n }\n const selection = await selectOne({\n title: presentation === \"full\" ? \"WHAT DO YOU WANT TO DO?\" : \"ACTIONS\",\n options: [\n {\n value: \"dev\" as const,\n label: \"Start development session\",\n description: \"Prepare one target, ports, logs, and your project command\",\n recommended: true,\n },\n {\n value: \"logs\" as const,\n label: \"Inspect app logs\",\n description: \"Stream or dump redacted logs by package, PID, tag, and level\",\n },\n {\n value: \"doctor\" as const,\n label: \"Check my setup\",\n description: \"Validate runtime, ADB, server, and target access\",\n },\n {\n value: \"devices\" as const,\n label: \"Show Android targets\",\n description: \"See connected devices and running emulators\",\n },\n {\n value: \"connect\" as const,\n label: \"Connect wirelessly\",\n description: \"Discover and verify a Wireless debugging target\",\n },\n {\n value: \"pair\" as const,\n label: \"Pair a new target\",\n description: \"Use Android's hidden six-digit pairing code\",\n },\n {\n value: \"sessions\" as const,\n label: \"Browse saved sessions\",\n description: \"Review private run summaries and diagnostic timelines\",\n },\n {\n value: \"context\" as const,\n label: \"Create AI debug context\",\n description: \"Export a bounded redacted Markdown brief from the latest run\",\n },\n {\n value: \"version\" as const,\n label: \"Show version\",\n description: `ADB Ready ${options.version}`,\n },\n {\n value: \"init\" as const,\n label: \"Initialize this project\",\n description: \"Create a validated config from detected project signals\",\n },\n {\n value: \"help\" as const,\n label: \"View command reference\",\n description: \"Explore commands, flags, and automation output\",\n },\n { value: \"exit\" as const, label: \"Exit\", description: \"Close ADB Ready\" },\n ],\n input: options.input,\n sink: options.sink,\n capabilities:\n presentation === \"full\"\n ? options.capabilities\n : { ...options.capabilities, animation: false },\n preamble: (frame: number) =>\n presentation === \"full\"\n ? homePreamble(frame, options.version, options.capabilities)\n : compactSessionPreamble(options.capabilities),\n ...(options.refreshIntervalMs === undefined\n ? {}\n : { refreshIntervalMs: options.refreshIntervalMs }),\n ...(options.signal === undefined ? {} : { signal: options.signal }),\n });\n\n if (selection.kind === \"unavailable\") {\n return selection;\n }\n if (selection.kind === \"cancelled\") {\n return selection.reason === \"escape\"\n ? { kind: \"action\", action: \"exit\" }\n : { kind: \"cancelled\", reason: selection.reason };\n }\n return { kind: \"action\", action: selection.value };\n}\n",
39
39
  "import type { SelectInput } from \"./select.js\";\nimport type { TextSink } from \"./spinner.js\";\nimport { style } from \"./style.js\";\nimport type { TerminalCapabilities } from \"./terminal.js\";\n\nexport type PairingCodeResult =\n | { kind: \"submitted\"; value: string }\n | { kind: \"cancelled\"; reason: \"eof\" | \"escape\" | \"interrupt\" | \"signal\" }\n | { kind: \"unavailable\" };\n\ninterface EndAwareInput {\n once?(event: \"end\", listener: () => void): unknown;\n}\n\nexport interface PairingCodeOptions {\n input: SelectInput;\n sink: TextSink;\n capabilities: TerminalCapabilities;\n fromStdin: boolean;\n signal?: AbortSignal;\n}\n\nexport async function readPairingCode(options: PairingCodeOptions): Promise<PairingCodeResult> {\n const interactive = options.capabilities.interactive && !options.fromStdin;\n if (interactive && options.input.setRawMode === undefined) {\n return { kind: \"unavailable\" };\n }\n\n return await new Promise<PairingCodeResult>((resolve) => {\n const wasRaw = options.input.isRaw === true;\n let value = \"\";\n let settled = false;\n\n const attempt = (operation: () => unknown) => {\n try {\n operation();\n } catch {\n // Cleanup is best-effort so every independent restoration still runs.\n }\n };\n const cleanup = () => {\n attempt(() => options.input.off(\"data\", onData));\n attempt(() => options.signal?.removeEventListener(\"abort\", onAbort));\n if (interactive && !wasRaw) {\n attempt(() => options.input.setRawMode?.(false));\n }\n attempt(() => options.input.pause());\n };\n const settle = (result: PairingCodeResult) => {\n if (settled) {\n return;\n }\n settled = true;\n cleanup();\n if (interactive) {\n attempt(() => options.sink.write(\"\\n\"));\n }\n resolve(result);\n };\n const submit = () => settle({ kind: \"submitted\", value });\n const onAbort = () => settle({ kind: \"cancelled\", reason: \"signal\" });\n const onEnd = () => {\n if (value !== \"\") {\n submit();\n } else {\n settle({ kind: \"cancelled\", reason: \"eof\" });\n }\n };\n const onData = (chunk: Uint8Array | string) => {\n const input = typeof chunk === \"string\" ? chunk : new TextDecoder().decode(chunk);\n for (const character of input) {\n if (character === \"\\u0003\") {\n settle({ kind: \"cancelled\", reason: \"interrupt\" });\n return;\n }\n if (interactive && character === \"\\u001B\") {\n settle({ kind: \"cancelled\", reason: \"escape\" });\n return;\n }\n if (character === \"\\r\" || character === \"\\n\") {\n submit();\n return;\n }\n if (interactive && (character === \"\\u007F\" || character === \"\\b\")) {\n if (value.length > 0) {\n value = value.slice(0, -1);\n options.sink.write(\"\\b \\b\");\n }\n continue;\n }\n if (interactive) {\n if (/\\d/u.test(character) && value.length < 6) {\n value += character;\n options.sink.write(options.capabilities.unicode ? \"•\" : \"*\");\n }\n } else if (value.length < 128) {\n value += character;\n }\n }\n };\n\n try {\n if (interactive) {\n options.sink.write(\n `${style.strong(\"Pairing code\", options.capabilities)} ${style.dim(\"(6 digits, hidden):\", options.capabilities)} `,\n );\n options.input.setRawMode?.(true);\n }\n options.input.resume();\n options.input.on(\"data\", onData);\n (options.input as SelectInput & EndAwareInput).once?.(\"end\", onEnd);\n options.signal?.addEventListener(\"abort\", onAbort, { once: true });\n } catch {\n settle({ kind: \"unavailable\" });\n return;\n }\n if (options.signal?.aborted) {\n onAbort();\n }\n });\n}\n",
40
40
  "import { sanitizeTerminalText, style, symbols } from \"./style.js\";\nimport type { TerminalCapabilities } from \"./terminal.js\";\n\nexport interface TextSink {\n write(chunk: string): unknown;\n}\n\nexport interface TimerScheduler {\n setInterval(callback: () => void, milliseconds: number): unknown;\n clearInterval(handle: unknown): void;\n}\n\nconst scheduler: TimerScheduler = {\n setInterval: (callback, milliseconds) => setInterval(callback, milliseconds),\n clearInterval: (handle) => clearInterval(handle as ReturnType<typeof setInterval>),\n};\n\nexport class Spinner {\n readonly #sink: TextSink;\n readonly #capabilities: TerminalCapabilities;\n readonly #scheduler: TimerScheduler;\n #timer: unknown;\n #frame = 0;\n #message = \"\";\n #cursorHidden = false;\n\n constructor(\n sink: TextSink,\n capabilities: TerminalCapabilities,\n timerScheduler: TimerScheduler = scheduler,\n ) {\n this.#sink = sink;\n this.#capabilities = capabilities;\n this.#scheduler = timerScheduler;\n }\n\n start(message: string): void {\n this.stopAnimation();\n this.#message = sanitizeTerminalText(message);\n if (!this.#capabilities.animation) {\n return;\n }\n this.hideCursor();\n this.drawFrame();\n this.#timer = this.#scheduler.setInterval(() => this.drawFrame(), 80);\n }\n\n succeed(message = this.#message): void {\n this.finish(\"success\", message);\n }\n\n fail(message = this.#message): void {\n this.finish(\"failure\", message);\n }\n\n warn(message = this.#message): void {\n this.finish(\"warning\", message);\n }\n\n dispose(): void {\n this.stopAnimation();\n this.showCursor();\n }\n\n private finish(status: \"failure\" | \"success\" | \"warning\", message: string): void {\n this.stopAnimation();\n if (this.#capabilities.animation) {\n this.#sink.write(\"\\r\\u001B[2K\");\n }\n const glyphs = symbols(this.#capabilities);\n const symbol =\n status === \"success\"\n ? style.success(glyphs.success, this.#capabilities)\n : status === \"warning\"\n ? style.warning(glyphs.warning, this.#capabilities)\n : style.failure(glyphs.failure, this.#capabilities);\n this.#sink.write(`${symbol} ${sanitizeTerminalText(message)}\\n`);\n this.showCursor();\n }\n\n private drawFrame(): void {\n const frames = this.#capabilities.unicode\n ? [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"]\n : [\"-\", \"\\\\\", \"|\", \"/\"];\n const frame = frames[this.#frame % frames.length] ?? frames[0] ?? \">\";\n this.#frame += 1;\n this.#sink.write(`\\r\\u001B[2K${style.accent(frame, this.#capabilities)} ${this.#message}`);\n }\n\n private stopAnimation(): void {\n if (this.#timer !== undefined) {\n this.#scheduler.clearInterval(this.#timer);\n this.#timer = undefined;\n }\n }\n\n private hideCursor(): void {\n if (!this.#cursorHidden) {\n this.#sink.write(\"\\u001B[?25l\");\n this.#cursorHidden = true;\n }\n }\n\n private showCursor(): void {\n if (this.#cursorHidden) {\n this.#sink.write(\"\\u001B[?25h\");\n this.#cursorHidden = false;\n }\n }\n}\n",
41
- "import type { EventBus } from \"../core/event-bus.js\";\nimport type { AdbReadyEvent } from \"../domain/contracts.js\";\nimport { Spinner, type TextSink, type TimerScheduler } from \"./spinner.js\";\nimport type { TerminalCapabilities } from \"./terminal.js\";\n\nexport class ProgressRenderer {\n readonly #spinner: Spinner;\n readonly #unsubscribe: () => void;\n readonly #verbose: boolean;\n readonly #sink: TextSink;\n\n constructor(options: {\n bus: EventBus;\n sink: TextSink;\n capabilities: TerminalCapabilities;\n verbose?: boolean;\n scheduler?: TimerScheduler;\n }) {\n this.#sink = options.sink;\n this.#verbose = options.verbose ?? false;\n this.#spinner = new Spinner(options.sink, options.capabilities, options.scheduler);\n this.#unsubscribe = options.bus.subscribe((event) => this.onEvent(event));\n }\n\n dispose(): void {\n this.#unsubscribe();\n this.#spinner.dispose();\n }\n\n private onEvent(event: AdbReadyEvent): void {\n if (event.type === \"operation.started\") {\n this.#spinner.start(event.message);\n } else if (event.type === \"operation.completed\") {\n this.#spinner.succeed(event.message.replace(/ completed$/u, \"\"));\n } else if (event.type === \"operation.failed\") {\n this.#spinner.fail(event.message.replace(/ failed$/u, \"\"));\n } else if (event.type === \"session.state.changed\") {\n const state = event.data?.to;\n if (state === \"acquiring-target\") {\n this.#spinner.start(\"Acquiring one Android target\");\n } else if (state === \"preparing-ports\") {\n this.#spinner.start(\"Preparing session ports\");\n } else if (state === \"starting-child\") {\n this.#spinner.start(\"Starting development command\");\n } else if (state === \"ready\") {\n this.#spinner.succeed(\"Development session ready\");\n } else if (state === \"stopping\") {\n this.#spinner.start(\"Stopping owned session resources\");\n } else if (state === \"failed\") {\n this.#spinner.fail(\"Development session failed\");\n }\n } else if (event.type === \"session.degraded\") {\n this.#spinner.warn(event.message);\n } else if (event.type === \"recovery.started\") {\n this.#spinner.start(\n event.data?.attempt === undefined\n ? \"Recovering development session\"\n : `Recovering development session · attempt ${String(event.data.attempt)}`,\n );\n } else if (event.type === \"recovery.completed\") {\n this.#spinner.succeed(event.message);\n } else if (event.type === \"recovery.failed\") {\n this.#spinner.warn(event.message);\n } else if (event.type === \"watch.failed\") {\n this.#spinner.fail(event.message);\n } else if (\n this.#verbose &&\n event.type !== \"health.checked\" &&\n event.source !== \"child.stdout\" &&\n event.source !== \"child.stderr\" &&\n event.source !== \"logcat\"\n ) {\n this.#sink.write(`› ${event.message}\\n`);\n }\n }\n}\n",
42
- "import type { AdbDevice, AdbMdnsService } from \"../adb/parsers.js\";\nimport type {\n ConnectedData,\n DevData,\n DevicesData,\n DoctorData,\n LogsData,\n PairedData,\n PortsData,\n TargetDiscoveryData,\n} from \"../app/commands.js\";\nimport type { ConfigReportData, InitData } from \"../app/config-commands.js\";\nimport type {\n ContextCommandData,\n ProblemsCommandData,\n SessionCommandData,\n} from \"../app/session-commands.js\";\nimport type { OutputFormat } from \"../cli/arguments.js\";\nimport type { EventBus } from \"../core/event-bus.js\";\nimport type { AdbReadyEvent, OperationPlan, Problem, ResultEnvelope } from \"../domain/contracts.js\";\nimport type { AndroidTarget } from \"../target/model.js\";\nimport type { TextSink } from \"./spinner.js\";\nimport { sanitizeTerminalText, style, symbols } from \"./style.js\";\nimport type { TerminalCapabilities } from \"./terminal.js\";\n\nexport type CommandResult = ResultEnvelope<unknown>;\n\nexport interface ResultRenderOptions {\n format: OutputFormat;\n capabilities: TerminalCapabilities;\n sink: TextSink;\n verbose?: boolean;\n}\n\nfunction clean(value: unknown): string {\n return sanitizeTerminalText(String(value));\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isDoctorData(value: unknown): value is DoctorData {\n return (\n isRecord(value) &&\n isRecord(value.runtime) &&\n isRecord(value.adb) &&\n Array.isArray(value.devices)\n );\n}\n\nfunction hasDevices(value: unknown): value is DoctorData | DevicesData {\n return isRecord(value) && Array.isArray(value.devices);\n}\n\nfunction hasTargets(value: unknown): value is DoctorData | DevicesData {\n return isRecord(value) && Array.isArray(value.targets);\n}\n\nfunction hasDiscovery(value: unknown): value is { discovery: TargetDiscoveryData } {\n return isRecord(value) && isRecord(value.discovery) && isRecord(value.discovery.mdns);\n}\n\nfunction isConnectData(value: unknown): value is ConnectedData {\n return isRecord(value) && value.state === \"device\" && typeof value.serial === \"string\";\n}\n\nfunction isPairData(value: unknown): value is PairedData {\n return isRecord(value) && value.paired === true && typeof value.endpoint === \"string\";\n}\n\nfunction isPortsData(value: unknown): value is PortsData {\n return (\n isRecord(value) &&\n (value.direction === \"forward\" || value.direction === \"reverse\") &&\n Array.isArray(value.mappings) &&\n isRecord(value.selected)\n );\n}\n\nfunction isDevData(value: unknown): value is DevData {\n return (\n isRecord(value) &&\n typeof value.sessionId === \"string\" &&\n isRecord(value.selected) &&\n isRecord(value.project) &&\n isRecord(value.command) &&\n isRecord(value.ports) &&\n isRecord(value.journal)\n );\n}\n\nfunction isLogsData(value: unknown): value is LogsData {\n return (\n isRecord(value) &&\n isRecord(value.selected) &&\n Array.isArray(value.filters) &&\n Array.isArray(value.records) &&\n typeof value.dropped === \"number\"\n );\n}\n\nfunction isSessionCommandData(value: unknown): value is SessionCommandData {\n return (\n isRecord(value) &&\n (value.action === \"list\" || value.action === \"show\" || value.action === \"events\")\n );\n}\n\nfunction isProblemsCommandData(value: unknown): value is ProblemsCommandData {\n return (\n isRecord(value) &&\n typeof value.sessionId === \"string\" &&\n typeof value.status === \"string\" &&\n Array.isArray(value.problems)\n );\n}\n\nfunction isContextCommandData(value: unknown): value is ContextCommandData {\n return (\n isRecord(value) &&\n typeof value.sessionId === \"string\" &&\n typeof value.markdown === \"string\" &&\n typeof value.characterCount === \"number\" &&\n typeof value.includedEvents === \"number\"\n );\n}\n\nfunction isInitData(value: unknown): value is InitData {\n return (\n isRecord(value) &&\n (value.status === \"created\" || value.status === \"planned\" || value.status === \"replaced\") &&\n typeof value.path === \"string\" &&\n isRecord(value.document)\n );\n}\n\nfunction isConfigReportData(value: unknown): value is ConfigReportData {\n return (\n isRecord(value) &&\n (value.action === \"validate\" || value.action === \"explain\") &&\n value.valid === true &&\n isRecord(value.files)\n );\n}\n\nfunction hasPlan(value: unknown): value is { plan: OperationPlan } {\n return isRecord(value) && isRecord(value.plan) && Array.isArray(value.plan.steps);\n}\n\nfunction deviceLabel(device: AdbDevice): string {\n const identity = device.model ?? device.product ?? device.device;\n return identity === undefined\n ? `${clean(device.serial)} · ${clean(device.state)}`\n : `${clean(identity)} · ${clean(device.serial)} · ${clean(device.state)}`;\n}\n\nfunction targetLabel(target: AndroidTarget): string {\n const transports = target.transports.map(({ kind }) => kind).join(\"+\");\n const transportSummary = target.transports.length > 1 ? ` · ${transports}` : \"\";\n return `${clean(target.name)} · ${clean(target.serial)} · ${clean(target.state)}${clean(transportSummary)}`;\n}\n\nfunction wirelessServiceLabel(service: AdbMdnsService): string {\n const identity = service.givenName ?? service.deviceModel ?? service.instance;\n const pairingState =\n service.serviceType !== \"connect\" || service.knownDevice === undefined\n ? \"\"\n : service.knownDevice\n ? \" · paired\"\n : \" · pair first\";\n return `${clean(identity)} · ${clean(service.endpoint.serial)} · ${clean(service.serviceType)}${pairingState}`;\n}\n\nfunction problemLines(\n problem: Problem,\n capabilities: TerminalCapabilities,\n verbose: boolean,\n): string[] {\n const glyphs = symbols(capabilities);\n const marker =\n problem.severity === \"error\"\n ? style.failure(glyphs.failure, capabilities)\n : style.warning(glyphs.warning, capabilities);\n const lines = [\n `${marker} ${style.strong(clean(problem.summary), capabilities)}`,\n ` ${clean(problem.detail)}`,\n ];\n const action = problem.actions[0];\n if (action !== undefined) {\n lines.push(` ${style.accent(\"Next:\", capabilities)} ${clean(action.title)}`);\n }\n if (verbose) {\n for (const evidence of problem.evidence) {\n const field =\n evidence.field === undefined ? evidence.source : `${evidence.source}.${evidence.field}`;\n lines.push(\n ` ${style.dim(`${clean(field)}: ${clean(JSON.stringify(evidence.value))}`, capabilities)}`,\n );\n }\n }\n return lines;\n}\n\nfunction renderHuman(result: CommandResult, options: ResultRenderOptions): void {\n const { capabilities, sink } = options;\n const glyphs = symbols(capabilities);\n const lines: string[] = [];\n lines.push(\n `${style.strong(\"ADB Ready\", capabilities)} ${style.dim(`· ${clean(result.command)}`, capabilities)}`,\n \"\",\n );\n\n if (result.command === \"doctor\" && isDoctorData(result.data)) {\n const data = result.data;\n const runtime = `${data.runtime.name} ${data.runtime.version}`;\n const adbVersion = data.adb.version.platformToolsVersion ?? \"unknown version\";\n lines.push(\n `${style.success(glyphs.success, capabilities)} Runtime ${clean(runtime)} · ${clean(data.runtime.platform)}/${clean(data.runtime.architecture)}`,\n `${style.success(glyphs.success, capabilities)} ADB Platform-Tools ${clean(adbVersion)}`,\n `${style.success(glyphs.success, capabilities)} Path ${clean(data.adb.path)}`,\n `${style.success(glyphs.success, capabilities)} Features ${String(data.adb.hostFeatures.length)} detected`,\n \"\",\n );\n }\n\n if (result.command === \"connect\" && isConnectData(result.data)) {\n lines.push(\n `${style.success(glyphs.success, capabilities)} Connected ${clean(result.data.endpoint)}`,\n `${style.success(glyphs.success, capabilities)} Verified ${clean(result.data.serial)} · device`,\n );\n if (result.data.hardwareSerial !== undefined) {\n lines.push(\n `${style.success(glyphs.success, capabilities)} Identity ${clean(result.data.hardwareSerial)}`,\n );\n }\n }\n\n if (result.command === \"dev\" && isDevData(result.data)) {\n const data = result.data;\n lines.push(\n `${style.success(glyphs.success, capabilities)} Target ${clean(data.selected.target.name)} · ${clean(data.selected.transport.serial)}`,\n `${style.success(glyphs.success, capabilities)} Project ${clean(data.project.name ?? data.project.root)} · ${clean(data.preset)}`,\n `${style.success(glyphs.success, capabilities)} Ports ${String(data.ports.requested.length)} ready · ${String(data.ports.created.length)} created · ${String(data.ports.reused.length)} reused`,\n `${style.success(glyphs.success, capabilities)} Command ${clean(data.command.executable)} ${data.command.args.map(clean).join(\" \")}`,\n );\n if (data.child !== undefined) {\n lines.push(\n `${data.child.exitCode === 0 ? style.success(glyphs.success, capabilities) : style.failure(glyphs.failure, capabilities)} Child ${data.child.exitCode === null ? clean(data.child.signal) : `exit ${String(data.child.exitCode)}`}`,\n );\n }\n lines.push(\n `${style.success(glyphs.success, capabilities)} Journal ${String(data.journal.events.length)} events${data.journal.dropped === 0 ? \"\" : ` · ${String(data.journal.dropped)} dropped`}`,\n `${data.recovery.failed ? style.failure(glyphs.failure, capabilities) : style.success(glyphs.success, capabilities)} Recovery ${data.recovery.failed ? \"failed\" : data.recovery.recoveries === 0 ? \"healthy\" : `${String(data.recovery.recoveries)} verified repair(s)`}`,\n `${style.success(glyphs.success, capabilities)} Session ${clean(data.sessionId)} · ${clean(data.status)}`,\n );\n }\n\n if (result.command === \"logs\" && isLogsData(result.data)) {\n const data = result.data;\n lines.push(\n `${style.success(glyphs.success, capabilities)} Target ${clean(data.selected.target.name)} · ${clean(data.selected.transport.serial)}`,\n `${style.success(glyphs.success, capabilities)} Filter ${data.filters.map(clean).join(\" \")}${data.packageName === undefined ? \"\" : ` · ${clean(data.packageName)}`}${data.uid === undefined ? \"\" : ` · UID ${String(data.uid)}`}${data.pid === undefined ? \"\" : ` · PID ${String(data.pid)}`}`,\n `${style.success(glyphs.success, capabilities)} Buffers ${data.buffers.length === 0 ? \"device default\" : data.buffers.map(clean).join(\", \")}`,\n `${style.success(glyphs.success, capabilities)} Records ${String(data.records.length)} retained${data.dropped === 0 ? \"\" : ` · ${String(data.dropped)} dropped`}`,\n );\n if (data.findings.length > 0) {\n lines.push(\"\", style.strong(`Findings (${String(data.findings.length)})`, capabilities));\n data.findings.forEach((finding, index) => {\n const branch = index === data.findings.length - 1 ? glyphs.end : glyphs.branch;\n lines.push(\n `${style.dim(branch, capabilities)} ${style.failure(clean(finding.code), capabilities)} · ${clean(finding.summary)}`,\n );\n });\n }\n }\n\n if (result.command.startsWith(\"sessions \") && isSessionCommandData(result.data)) {\n const data = result.data;\n if (data.action === \"list\") {\n lines.push(style.strong(`Sessions (${String(data.sessions.length)})`, capabilities));\n if (data.sessions.length === 0) {\n lines.push(`${style.dim(glyphs.end, capabilities)} No saved sessions`);\n }\n data.sessions.forEach((session, index) => {\n const branch = index === data.sessions.length - 1 ? glyphs.end : glyphs.branch;\n const context = [session.preset, session.projectFingerprint].filter(Boolean).join(\" · \");\n lines.push(\n `${style.dim(branch, capabilities)} ${clean(session.sessionId)} · ${clean(session.status)} · ${clean(session.updatedAt)}${context === \"\" ? \"\" : ` · ${clean(context)}`}`,\n );\n });\n } else {\n const session = data.session;\n lines.push(\n `${style.success(glyphs.success, capabilities)} Session ${clean(session.sessionId)}`,\n `${style.success(glyphs.success, capabilities)} Status ${clean(session.status)}`,\n `${style.success(glyphs.success, capabilities)} Started ${clean(session.startedAt)}`,\n `${style.success(glyphs.success, capabilities)} Events ${String(session.eventCount)} · ${String(session.eventBytes)} bytes`,\n );\n if (data.action === \"events\") {\n lines.push(\"\", style.strong(`Timeline (${String(data.events.length)})`, capabilities));\n data.events.forEach((event, index) => {\n const branch = index === data.events.length - 1 ? glyphs.end : glyphs.branch;\n lines.push(\n `${style.dim(branch, capabilities)} ${clean(event.timestamp)} · ${clean(event.severity)} · ${clean(event.type)} · ${clean(event.message)}`,\n );\n });\n }\n }\n }\n\n if (result.command === \"problems\" && isProblemsCommandData(result.data)) {\n const data = result.data;\n lines.push(\n `${style.success(glyphs.success, capabilities)} Session ${clean(data.sessionId)}`,\n `${style.success(glyphs.success, capabilities)} Status ${clean(data.status)}`,\n \"\",\n style.strong(`Problems (${String(data.problems.length)})`, capabilities),\n );\n if (data.problems.length === 0) {\n lines.push(`${style.dim(glyphs.end, capabilities)} No recorded problems`);\n } else {\n data.problems.forEach((problem, index) => {\n const branch = index === data.problems.length - 1 ? glyphs.end : glyphs.branch;\n lines.push(\n `${style.dim(branch, capabilities)} ${style.failure(clean(problem.code), capabilities)} · ${clean(problem.summary)}`,\n ` ${clean(problem.detail)}`,\n );\n });\n }\n }\n\n if (result.command === \"context\" && isContextCommandData(result.data)) {\n lines.push(\n `${style.success(glyphs.success, capabilities)} Session ${clean(result.data.sessionId)}`,\n `${style.success(glyphs.success, capabilities)} Context ${String(result.data.characterCount)} characters`,\n `${style.success(glyphs.success, capabilities)} Evidence ${String(result.data.includedEvents)} included · ${String(result.data.omittedEvents)} omitted`,\n `${style.success(glyphs.success, capabilities)} Privacy pseudonymized · redacted · local only`,\n );\n }\n\n if (result.command === \"init\" && isInitData(result.data)) {\n lines.push(\n `${style.success(glyphs.success, capabilities)} Config ${clean(result.data.path)}`,\n `${style.success(glyphs.success, capabilities)} Status ${clean(result.data.status)}`,\n ...(result.data.detectedPreset === undefined\n ? []\n : [\n `${style.success(glyphs.success, capabilities)} Preset ${clean(result.data.detectedPreset)}`,\n ]),\n );\n }\n\n if (result.command.startsWith(\"config \") && isConfigReportData(result.data)) {\n lines.push(\n `${style.success(glyphs.success, capabilities)} Config valid`,\n `${style.success(glyphs.success, capabilities)} Project ${clean(result.data.files.project ?? \"not found\")}`,\n `${style.success(glyphs.success, capabilities)} User ${clean(result.data.files.user ?? \"not found\")}`,\n );\n if (result.data.action === \"explain\") {\n const values = result.data.values ?? [];\n lines.push(\"\", style.strong(`Resolved values (${String(values.length)})`, capabilities));\n values.forEach((value, index) => {\n const branch = index === values.length - 1 ? glyphs.end : glyphs.branch;\n lines.push(\n `${style.dim(branch, capabilities)} ${clean(value.key)} = ${clean(JSON.stringify(value.value))} · ${clean(value.source)}${value.location === undefined ? \"\" : ` · ${clean(value.location)}`}`,\n );\n });\n }\n }\n\n if (result.command === \"pair\" && isPairData(result.data)) {\n lines.push(\n `${style.success(glyphs.success, capabilities)} Paired ${clean(result.data.endpoint)}`,\n style.dim(\"Run adb-ready connect to verify the final device transport.\", capabilities),\n );\n }\n if (result.command.startsWith(\"ports \") && isPortsData(result.data)) {\n const data = result.data;\n lines.push(\n `${style.success(glyphs.success, capabilities)} Target ${clean(data.selected.transport.serial)}`,\n `${style.success(glyphs.success, capabilities)} Action ${clean(data.status)} · ${clean(data.direction)}`,\n \"\",\n style.strong(`Mappings (${String(data.mappings.length)})`, capabilities),\n );\n if (data.mappings.length === 0) {\n lines.push(`${style.dim(glyphs.end, capabilities)} None`);\n } else {\n data.mappings.forEach((mapping, index) => {\n const branch = index === data.mappings.length - 1 ? glyphs.end : glyphs.branch;\n const arrow = mapping.direction === \"reverse\" ? \"device → host\" : \"host → device\";\n lines.push(\n `${style.dim(branch, capabilities)} ${clean(arrow)} · ${clean(mapping.device)} ↔ ${clean(mapping.host)}`,\n );\n });\n }\n }\n if (hasPlan(result.data)) {\n const steps = result.data.plan.steps;\n lines.push(style.strong(\"Dry-run plan\", capabilities));\n steps.forEach((step, index) => {\n const branch = index === steps.length - 1 ? glyphs.end : glyphs.branch;\n lines.push(`${style.dim(branch, capabilities)} ${clean(step.title)} · ${clean(step.risk)}`);\n });\n }\n\n if (hasTargets(result.data)) {\n const targets = result.data.targets;\n lines.push(style.strong(`Targets (${String(targets.length)})`, capabilities));\n if (targets.length === 0) {\n lines.push(`${style.dim(glyphs.end, capabilities)} None visible`);\n } else {\n targets.forEach((target, index) => {\n const branch = index === targets.length - 1 ? glyphs.end : glyphs.branch;\n lines.push(`${style.dim(branch, capabilities)} ${targetLabel(target)}`);\n });\n }\n if (\"selected\" in result.data && result.data.selected !== undefined) {\n lines.push(\n `${style.accent(glyphs.active, capabilities)} Selected ${targetLabel(result.data.selected.target)}`,\n );\n }\n } else if (hasDevices(result.data)) {\n const devices = result.data.devices;\n lines.push(style.strong(`Targets (${String(devices.length)})`, capabilities));\n devices.forEach((device, index) => {\n const branch = index === devices.length - 1 ? glyphs.end : glyphs.branch;\n lines.push(`${style.dim(branch, capabilities)} ${deviceLabel(device)}`);\n });\n }\n\n if (hasDiscovery(result.data) && result.data.discovery.mdns.services.length > 0) {\n const services = result.data.discovery.mdns.services;\n lines.push(\"\", style.strong(`Wireless discovery (${String(services.length)})`, capabilities));\n services.forEach((service, index) => {\n const branch = index === services.length - 1 ? glyphs.end : glyphs.branch;\n lines.push(`${style.dim(branch, capabilities)} ${wirelessServiceLabel(service)}`);\n });\n }\n\n if (result.problems.length > 0) {\n lines.push(\"\", style.strong(\"Diagnostics\", capabilities));\n for (const problem of result.problems) {\n lines.push(...problemLines(problem, capabilities, options.verbose ?? false));\n }\n }\n\n const status = result.ok\n ? `${style.success(glyphs.success, capabilities)} Completed in ${String(result.durationMs)}ms`\n : `${style.failure(glyphs.failure, capabilities)} Failed in ${String(result.durationMs)}ms`;\n lines.push(\"\", status);\n sink.write(`${lines.join(\"\\n\")}\\n`);\n}\n\nfunction renderPlain(result: CommandResult, sink: TextSink): void {\n sink.write(`command=${clean(result.command)}\\n`);\n sink.write(`ok=${String(result.ok)}\\n`);\n sink.write(`duration_ms=${String(result.durationMs)}\\n`);\n if (isDoctorData(result.data)) {\n const data = result.data;\n sink.write(`runtime=${clean(data.runtime.name)}\\n`);\n sink.write(`runtime_version=${clean(data.runtime.version)}\\n`);\n sink.write(`adb_version=${clean(data.adb.version.platformToolsVersion ?? \"unknown\")}\\n`);\n }\n if (isConnectData(result.data)) {\n sink.write(`endpoint=${clean(result.data.endpoint)}\\n`);\n sink.write(`serial=${clean(result.data.serial)}\\n`);\n sink.write(`state=${clean(result.data.state)}\\n`);\n if (result.data.hardwareSerial !== undefined) {\n sink.write(`hardware_serial=${clean(result.data.hardwareSerial)}\\n`);\n }\n }\n if (isDevData(result.data)) {\n sink.write(`session_id=${clean(result.data.sessionId)}\\n`);\n sink.write(`status=${clean(result.data.status)}\\n`);\n sink.write(`preset=${clean(result.data.preset)}\\n`);\n sink.write(`serial=${clean(result.data.selected.transport.serial)}\\n`);\n sink.write(`project_root=${clean(result.data.project.root)}\\n`);\n sink.write(`port_count=${String(result.data.ports.requested.length)}\\n`);\n sink.write(`journal_event_count=${String(result.data.journal.events.length)}\\n`);\n sink.write(`journal_dropped=${String(result.data.journal.dropped)}\\n`);\n if (result.data.child !== undefined) {\n sink.write(`child_exit_code=${String(result.data.child.exitCode)}\\n`);\n }\n }\n if (isLogsData(result.data)) {\n sink.write(`serial=${clean(result.data.selected.transport.serial)}\\n`);\n sink.write(`filters=${result.data.filters.map(clean).join(\",\")}\\n`);\n if (result.data.packageName !== undefined) {\n sink.write(`package=${clean(result.data.packageName)}\\n`);\n }\n if (result.data.pid !== undefined) sink.write(`pid=${String(result.data.pid)}\\n`);\n if (result.data.uid !== undefined) sink.write(`uid=${String(result.data.uid)}\\n`);\n sink.write(`buffers=${result.data.buffers.map(clean).join(\",\")}\\n`);\n sink.write(`record_count=${String(result.data.records.length)}\\n`);\n sink.write(`record_dropped=${String(result.data.dropped)}\\n`);\n sink.write(`finding_count=${String(result.data.findings.length)}\\n`);\n result.data.findings.forEach((finding) => {\n sink.write(`finding=${clean(finding.code)}:${clean(finding.summary)}\\n`);\n });\n result.data.records.forEach((record, index) => {\n sink.write(`record_${String(index)}=${clean(record.raw)}\\n`);\n });\n }\n if (isSessionCommandData(result.data)) {\n sink.write(`action=${clean(result.data.action)}\\n`);\n if (result.data.action === \"list\") {\n sink.write(`session_count=${String(result.data.sessions.length)}\\n`);\n result.data.sessions.forEach((session, index) => {\n sink.write(\n `session_${String(index)}=${clean(session.sessionId)}:${clean(session.status)}:${clean(session.updatedAt)}\\n`,\n );\n });\n } else {\n sink.write(`session_id=${clean(result.data.session.sessionId)}\\n`);\n sink.write(`status=${clean(result.data.session.status)}\\n`);\n sink.write(`event_count=${String(result.data.session.eventCount)}\\n`);\n if (result.data.action === \"events\") {\n result.data.events.forEach((event, index) => {\n sink.write(\n `event_${String(index)}=${clean(event.timestamp)}:${clean(event.severity)}:${clean(event.type)}:${clean(event.message)}\\n`,\n );\n });\n }\n }\n }\n if (isProblemsCommandData(result.data)) {\n sink.write(`session_id=${clean(result.data.sessionId)}\\n`);\n sink.write(`status=${clean(result.data.status)}\\n`);\n sink.write(`problem_count=${String(result.data.problems.length)}\\n`);\n result.data.problems.forEach((problem) => {\n sink.write(`problem=${clean(problem.code)}:${clean(problem.summary)}\\n`);\n });\n }\n if (isContextCommandData(result.data)) {\n sink.write(`session_id=${clean(result.data.sessionId)}\\n`);\n sink.write(`status=${clean(result.data.status)}\\n`);\n sink.write(`character_count=${String(result.data.characterCount)}\\n`);\n sink.write(`included_events=${String(result.data.includedEvents)}\\n`);\n sink.write(`omitted_events=${String(result.data.omittedEvents)}\\n`);\n sink.write(`filtered_events=${String(result.data.filteredEvents)}\\n`);\n }\n if (isInitData(result.data)) {\n sink.write(`status=${clean(result.data.status)}\\n`);\n sink.write(`path=${clean(result.data.path)}\\n`);\n if (result.data.detectedPreset !== undefined) {\n sink.write(`detected_preset=${clean(result.data.detectedPreset)}\\n`);\n }\n }\n if (isConfigReportData(result.data)) {\n sink.write(`action=${clean(result.data.action)}\\n`);\n sink.write(\"valid=true\\n\");\n if (result.data.files.project !== undefined) {\n sink.write(`project_config=${clean(result.data.files.project)}\\n`);\n }\n if (result.data.files.user !== undefined) {\n sink.write(`user_config=${clean(result.data.files.user)}\\n`);\n }\n for (const value of result.data.values ?? []) {\n sink.write(\n `value=${clean(value.key)}:${clean(JSON.stringify(value.value))}:${clean(value.source)}\\n`,\n );\n }\n }\n if (isPairData(result.data)) {\n sink.write(`endpoint=${clean(result.data.endpoint)}\\n`);\n sink.write(\"paired=true\\n\");\n }\n if (isPortsData(result.data)) {\n sink.write(`direction=${clean(result.data.direction)}\\n`);\n sink.write(`action=${clean(result.data.action)}\\n`);\n sink.write(`status=${clean(result.data.status)}\\n`);\n sink.write(`serial=${clean(result.data.selected.transport.serial)}\\n`);\n sink.write(`mapping_count=${String(result.data.mappings.length)}\\n`);\n result.data.mappings.forEach((mapping, index) => {\n sink.write(\n `mapping_${String(index)}=${clean(mapping.direction)}:${clean(mapping.device)}:${clean(mapping.host)}\\n`,\n );\n });\n }\n if (hasPlan(result.data)) {\n sink.write(\"dry_run=true\\n\");\n sink.write(`step_count=${String(result.data.plan.steps.length)}\\n`);\n result.data.plan.steps.forEach((step, index) => {\n sink.write(`step_${String(index)}=${clean(step.id)}:${clean(step.title)}\\n`);\n });\n }\n if (hasTargets(result.data)) {\n sink.write(`target_count=${String(result.data.targets.length)}\\n`);\n result.data.targets.forEach((target, index) => {\n sink.write(`target_${String(index)}=${targetLabel(target)}\\n`);\n });\n if (\"selected\" in result.data && result.data.selected !== undefined) {\n sink.write(`selected=${targetLabel(result.data.selected.target)}\\n`);\n }\n } else if (hasDevices(result.data)) {\n sink.write(`device_count=${String(result.data.devices.length)}\\n`);\n result.data.devices.forEach((device, index) => {\n sink.write(`device_${String(index)}=${deviceLabel(device)}\\n`);\n });\n }\n if (hasDiscovery(result.data)) {\n const services = result.data.discovery.mdns.services;\n sink.write(`wireless_service_count=${String(services.length)}\\n`);\n services.forEach((service, index) => {\n sink.write(`wireless_service_${String(index)}=${wirelessServiceLabel(service)}\\n`);\n });\n }\n for (const problem of result.problems) {\n sink.write(`problem=${clean(problem.code)}:${clean(problem.summary)}\\n`);\n }\n}\n\nexport function renderResult(result: CommandResult, options: ResultRenderOptions): void {\n if (options.format === \"markdown\" && isContextCommandData(result.data)) {\n options.sink.write(result.data.markdown);\n } else if (options.format === \"json\") {\n options.sink.write(`${JSON.stringify(result)}\\n`);\n } else if (options.format === \"ndjson\") {\n options.sink.write(`${JSON.stringify({ kind: \"result\", ...result })}\\n`);\n } else if (options.format === \"plain\") {\n renderPlain(result, options.sink);\n } else {\n renderHuman(result, options);\n }\n}\n\nexport class NdjsonEventRenderer {\n readonly #unsubscribe: () => void;\n\n constructor(bus: EventBus, sink: TextSink) {\n this.#unsubscribe = bus.subscribe((event) => this.write(event, sink));\n }\n\n dispose(): void {\n this.#unsubscribe();\n }\n\n private write(event: AdbReadyEvent, sink: TextSink): void {\n sink.write(`${JSON.stringify({ kind: \"event\", ...event })}\\n`);\n }\n}\n",
41
+ "import type { EventBus } from \"../core/event-bus.js\";\nimport type { AdbReadyEvent } from \"../domain/contracts.js\";\nimport { Spinner, type TextSink, type TimerScheduler } from \"./spinner.js\";\nimport type { TerminalCapabilities } from \"./terminal.js\";\n\nexport class ProgressRenderer {\n readonly #spinner: Spinner;\n readonly #unsubscribe: () => void;\n readonly #verbose: boolean;\n readonly #sink: TextSink;\n\n constructor(options: {\n bus: EventBus;\n sink: TextSink;\n capabilities: TerminalCapabilities;\n verbose?: boolean;\n scheduler?: TimerScheduler;\n }) {\n this.#sink = options.sink;\n this.#verbose = options.verbose ?? false;\n this.#spinner = new Spinner(options.sink, options.capabilities, options.scheduler);\n this.#unsubscribe = options.bus.subscribe((event) => this.onEvent(event));\n }\n\n dispose(): void {\n this.#unsubscribe();\n this.#spinner.dispose();\n }\n\n private onEvent(event: AdbReadyEvent): void {\n if (event.data?.presentation === \"background\") return;\n\n if (event.type === \"operation.started\") {\n this.#spinner.start(event.message);\n } else if (event.type === \"operation.completed\") {\n this.#spinner.succeed(event.message.replace(/ completed$/u, \"\"));\n } else if (event.type === \"operation.failed\") {\n this.#spinner.fail(event.message.replace(/ failed$/u, \"\"));\n } else if (event.type === \"session.state.changed\") {\n const state = event.data?.to;\n if (state === \"acquiring-target\") {\n this.#spinner.start(\"Acquiring one Android target\");\n } else if (state === \"preparing-ports\") {\n this.#spinner.start(\"Preparing session ports\");\n } else if (state === \"starting-child\") {\n this.#spinner.start(\"Starting development command\");\n } else if (state === \"ready\") {\n this.#spinner.succeed(\"Development session ready\");\n } else if (state === \"stopping\") {\n this.#spinner.start(\"Stopping owned session resources\");\n } else if (state === \"failed\") {\n this.#spinner.fail(\"Development session failed\");\n }\n } else if (event.type === \"session.degraded\") {\n this.#spinner.warn(event.message);\n } else if (event.type === \"recovery.started\") {\n this.#spinner.start(\n event.data?.attempt === undefined\n ? \"Recovering development session\"\n : `Recovering development session · attempt ${String(event.data.attempt)}`,\n );\n } else if (event.type === \"recovery.completed\") {\n this.#spinner.succeed(event.message);\n } else if (event.type === \"recovery.failed\") {\n this.#spinner.warn(event.message);\n } else if (event.type === \"watch.failed\") {\n this.#spinner.fail(event.message);\n } else if (\n this.#verbose &&\n event.type !== \"health.checked\" &&\n event.source !== \"child.stdout\" &&\n event.source !== \"child.stderr\" &&\n event.source !== \"logcat\"\n ) {\n this.#sink.write(`› ${event.message}\\n`);\n }\n }\n}\n",
42
+ "import type { AdbDevice, AdbMdnsService } from \"../adb/parsers.js\";\nimport type {\n ConnectedData,\n DevData,\n DevicesData,\n DoctorData,\n LogsData,\n PairedData,\n PortsData,\n TargetDiscoveryData,\n} from \"../app/commands.js\";\nimport type { ConfigReportData, InitData } from \"../app/config-commands.js\";\nimport type {\n ContextCommandData,\n ProblemsCommandData,\n SessionCommandData,\n} from \"../app/session-commands.js\";\nimport type { OutputFormat } from \"../cli/arguments.js\";\nimport type { EventBus } from \"../core/event-bus.js\";\nimport type { AdbReadyEvent, OperationPlan, Problem, ResultEnvelope } from \"../domain/contracts.js\";\nimport { ProblemCode } from \"../domain/problems.js\";\nimport type { AndroidTarget } from \"../target/model.js\";\nimport type { TextSink } from \"./spinner.js\";\nimport { sanitizeTerminalText, style, symbols } from \"./style.js\";\nimport type { TerminalCapabilities } from \"./terminal.js\";\n\nexport type CommandResult = ResultEnvelope<unknown>;\n\nexport interface ResultRenderOptions {\n format: OutputFormat;\n capabilities: TerminalCapabilities;\n sink: TextSink;\n verbose?: boolean;\n}\n\nfunction clean(value: unknown): string {\n return sanitizeTerminalText(String(value));\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isDoctorData(value: unknown): value is DoctorData {\n return (\n isRecord(value) &&\n isRecord(value.runtime) &&\n isRecord(value.adb) &&\n Array.isArray(value.devices)\n );\n}\n\nfunction hasDevices(value: unknown): value is DoctorData | DevicesData {\n return isRecord(value) && Array.isArray(value.devices);\n}\n\nfunction hasTargets(value: unknown): value is DoctorData | DevicesData {\n return isRecord(value) && Array.isArray(value.targets);\n}\n\nfunction hasDiscovery(value: unknown): value is { discovery: TargetDiscoveryData } {\n return isRecord(value) && isRecord(value.discovery) && isRecord(value.discovery.mdns);\n}\n\nfunction isConnectData(value: unknown): value is ConnectedData {\n return isRecord(value) && value.state === \"device\" && typeof value.serial === \"string\";\n}\n\nfunction isPairData(value: unknown): value is PairedData {\n return isRecord(value) && value.paired === true && typeof value.endpoint === \"string\";\n}\n\nfunction isPortsData(value: unknown): value is PortsData {\n return (\n isRecord(value) &&\n (value.direction === \"forward\" || value.direction === \"reverse\") &&\n Array.isArray(value.mappings) &&\n isRecord(value.selected)\n );\n}\n\nfunction isDevData(value: unknown): value is DevData {\n return (\n isRecord(value) &&\n typeof value.sessionId === \"string\" &&\n isRecord(value.selected) &&\n isRecord(value.project) &&\n isRecord(value.command) &&\n isRecord(value.ports) &&\n isRecord(value.journal)\n );\n}\n\nfunction isLogsData(value: unknown): value is LogsData {\n return (\n isRecord(value) &&\n isRecord(value.selected) &&\n Array.isArray(value.filters) &&\n Array.isArray(value.records) &&\n typeof value.dropped === \"number\"\n );\n}\n\nfunction isSessionCommandData(value: unknown): value is SessionCommandData {\n if (!isRecord(value)) return false;\n if (value.action === \"list\") return Array.isArray(value.sessions);\n if (value.action === \"show\") return isRecord(value.session);\n return value.action === \"events\" && isRecord(value.session) && Array.isArray(value.events);\n}\n\nfunction isProblemsCommandData(value: unknown): value is ProblemsCommandData {\n return (\n isRecord(value) &&\n typeof value.sessionId === \"string\" &&\n typeof value.status === \"string\" &&\n Array.isArray(value.problems)\n );\n}\n\nfunction isContextCommandData(value: unknown): value is ContextCommandData {\n return (\n isRecord(value) &&\n typeof value.sessionId === \"string\" &&\n typeof value.markdown === \"string\" &&\n typeof value.characterCount === \"number\" &&\n typeof value.includedEvents === \"number\"\n );\n}\n\nfunction isInitData(value: unknown): value is InitData {\n return (\n isRecord(value) &&\n (value.status === \"created\" || value.status === \"planned\" || value.status === \"replaced\") &&\n typeof value.path === \"string\" &&\n isRecord(value.document)\n );\n}\n\nfunction isConfigReportData(value: unknown): value is ConfigReportData {\n return (\n isRecord(value) &&\n (value.action === \"validate\" || value.action === \"explain\") &&\n value.valid === true &&\n isRecord(value.files)\n );\n}\n\nfunction hasPlan(value: unknown): value is { plan: OperationPlan } {\n return isRecord(value) && isRecord(value.plan) && Array.isArray(value.plan.steps);\n}\n\nfunction deviceLabel(device: AdbDevice): string {\n const identity = device.model ?? device.product ?? device.device;\n return identity === undefined\n ? `${clean(device.serial)} · ${clean(device.state)}`\n : `${clean(identity)} · ${clean(device.serial)} · ${clean(device.state)}`;\n}\n\nfunction targetLabel(target: AndroidTarget): string {\n const transports = target.transports.map(({ kind }) => kind).join(\"+\");\n const transportSummary = target.transports.length > 1 ? ` · ${transports}` : \"\";\n return `${clean(target.name)} · ${clean(target.serial)} · ${clean(target.state)}${clean(transportSummary)}`;\n}\n\nfunction wirelessServiceLabel(service: AdbMdnsService): string {\n const identity = service.givenName ?? service.deviceModel ?? service.instance;\n const pairingState =\n service.serviceType !== \"connect\" || service.knownDevice === undefined\n ? \"\"\n : service.knownDevice\n ? \" · paired\"\n : \" · pair first\";\n return `${clean(identity)} · ${clean(service.endpoint.serial)} · ${clean(service.serviceType)}${pairingState}`;\n}\n\nfunction problemLines(\n problem: Problem,\n capabilities: TerminalCapabilities,\n verbose: boolean,\n): string[] {\n const glyphs = symbols(capabilities);\n const marker =\n problem.severity === \"error\" && problem.code !== ProblemCode.OperationInterrupted\n ? style.failure(glyphs.failure, capabilities)\n : style.warning(glyphs.warning, capabilities);\n const lines = [\n `${marker} ${style.strong(clean(problem.summary), capabilities)}`,\n ` ${clean(problem.detail)}`,\n ];\n const action = problem.actions[0];\n if (action !== undefined) {\n lines.push(` ${style.accent(\"Next:\", capabilities)} ${clean(action.title)}`);\n }\n if (verbose) {\n for (const evidence of problem.evidence) {\n const field =\n evidence.field === undefined ? evidence.source : `${evidence.source}.${evidence.field}`;\n lines.push(\n ` ${style.dim(`${clean(field)}: ${clean(JSON.stringify(evidence.value))}`, capabilities)}`,\n );\n }\n }\n return lines;\n}\n\nfunction renderHuman(result: CommandResult, options: ResultRenderOptions): void {\n const { capabilities, sink } = options;\n const glyphs = symbols(capabilities);\n const lines: string[] = [];\n lines.push(\n `${style.strong(\"ADB Ready\", capabilities)} ${style.dim(`· ${clean(result.command)}`, capabilities)}`,\n \"\",\n );\n\n if (result.command === \"doctor\" && isDoctorData(result.data)) {\n const data = result.data;\n const runtime = `${data.runtime.name} ${data.runtime.version}`;\n const adbVersion = data.adb.version.platformToolsVersion ?? \"unknown version\";\n lines.push(\n `${style.success(glyphs.success, capabilities)} Runtime ${clean(runtime)} · ${clean(data.runtime.platform)}/${clean(data.runtime.architecture)}`,\n `${style.success(glyphs.success, capabilities)} ADB Platform-Tools ${clean(adbVersion)}`,\n `${style.success(glyphs.success, capabilities)} Path ${clean(data.adb.path)}`,\n `${style.success(glyphs.success, capabilities)} Features ${String(data.adb.hostFeatures.length)} detected`,\n \"\",\n );\n }\n\n if (result.command === \"connect\" && isConnectData(result.data)) {\n lines.push(\n `${style.success(glyphs.success, capabilities)} Connected ${clean(result.data.endpoint)}`,\n `${style.success(glyphs.success, capabilities)} Verified ${clean(result.data.serial)} · device`,\n );\n if (result.data.hardwareSerial !== undefined) {\n lines.push(\n `${style.success(glyphs.success, capabilities)} Identity ${clean(result.data.hardwareSerial)}`,\n );\n }\n }\n\n if (result.command === \"dev\" && isDevData(result.data)) {\n const data = result.data;\n const sessionMarker =\n data.status === \"interrupted\"\n ? style.warning(glyphs.warning, capabilities)\n : data.status === \"failed\"\n ? style.failure(glyphs.failure, capabilities)\n : style.success(glyphs.success, capabilities);\n lines.push(\n `${style.success(glyphs.success, capabilities)} Target ${clean(data.selected.target.name)} · ${clean(data.selected.transport.serial)}`,\n `${style.success(glyphs.success, capabilities)} Project ${clean(data.project.name ?? data.project.root)} · ${clean(data.preset)}`,\n `${style.success(glyphs.success, capabilities)} Ports ${String(data.ports.requested.length)} ready · ${String(data.ports.created.length)} created · ${String(data.ports.reused.length)} reused`,\n `${style.success(glyphs.success, capabilities)} Command ${clean(data.command.executable)} ${data.command.args.map(clean).join(\" \")}`,\n );\n if (data.child !== undefined) {\n const childMarker =\n data.status === \"interrupted\"\n ? style.warning(glyphs.warning, capabilities)\n : data.child.exitCode === 0\n ? style.success(glyphs.success, capabilities)\n : style.failure(glyphs.failure, capabilities);\n lines.push(\n `${childMarker} Child ${data.child.exitCode === null ? clean(data.child.signal) : `exit ${String(data.child.exitCode)}`}`,\n );\n }\n lines.push(\n `${style.success(glyphs.success, capabilities)} Journal ${String(data.journal.events.length)} events${data.journal.dropped === 0 ? \"\" : ` · ${String(data.journal.dropped)} dropped`}`,\n `${data.recovery.failed ? style.failure(glyphs.failure, capabilities) : style.success(glyphs.success, capabilities)} Recovery ${data.recovery.failed ? \"failed\" : data.recovery.recoveries === 0 ? \"healthy\" : `${String(data.recovery.recoveries)} verified repair(s)`}`,\n `${sessionMarker} Session ${clean(data.sessionId)} · ${clean(data.status)}`,\n );\n }\n\n if (result.command === \"logs\" && isLogsData(result.data)) {\n const data = result.data;\n lines.push(\n `${style.success(glyphs.success, capabilities)} Target ${clean(data.selected.target.name)} · ${clean(data.selected.transport.serial)}`,\n `${style.success(glyphs.success, capabilities)} Filter ${data.filters.map(clean).join(\" \")}${data.packageName === undefined ? \"\" : ` · ${clean(data.packageName)}`}${data.uid === undefined ? \"\" : ` · UID ${String(data.uid)}`}${data.pid === undefined ? \"\" : ` · PID ${String(data.pid)}`}`,\n `${style.success(glyphs.success, capabilities)} Buffers ${data.buffers.length === 0 ? \"device default\" : data.buffers.map(clean).join(\", \")}`,\n `${style.success(glyphs.success, capabilities)} Records ${String(data.records.length)} retained${data.dropped === 0 ? \"\" : ` · ${String(data.dropped)} dropped`}`,\n );\n if (data.findings.length > 0) {\n lines.push(\"\", style.strong(`Findings (${String(data.findings.length)})`, capabilities));\n data.findings.forEach((finding, index) => {\n const branch = index === data.findings.length - 1 ? glyphs.end : glyphs.branch;\n lines.push(\n `${style.dim(branch, capabilities)} ${style.failure(clean(finding.code), capabilities)} · ${clean(finding.summary)}`,\n );\n });\n }\n }\n\n if (result.command.startsWith(\"sessions \") && isSessionCommandData(result.data)) {\n const data = result.data;\n if (data.action === \"list\") {\n lines.push(style.strong(`Sessions (${String(data.sessions.length)})`, capabilities));\n if (data.sessions.length === 0) {\n lines.push(`${style.dim(glyphs.end, capabilities)} No saved sessions`);\n }\n data.sessions.forEach((session, index) => {\n const branch = index === data.sessions.length - 1 ? glyphs.end : glyphs.branch;\n const context = [session.preset, session.projectFingerprint].filter(Boolean).join(\" · \");\n lines.push(\n `${style.dim(branch, capabilities)} ${clean(session.sessionId)} · ${clean(session.status)} · ${clean(session.updatedAt)}${context === \"\" ? \"\" : ` · ${clean(context)}`}`,\n );\n });\n } else {\n const session = data.session;\n lines.push(\n `${style.success(glyphs.success, capabilities)} Session ${clean(session.sessionId)}`,\n `${style.success(glyphs.success, capabilities)} Status ${clean(session.status)}`,\n `${style.success(glyphs.success, capabilities)} Started ${clean(session.startedAt)}`,\n `${style.success(glyphs.success, capabilities)} Events ${String(session.eventCount)} · ${String(session.eventBytes)} bytes`,\n );\n if (data.action === \"events\") {\n lines.push(\"\", style.strong(`Timeline (${String(data.events.length)})`, capabilities));\n data.events.forEach((event, index) => {\n const branch = index === data.events.length - 1 ? glyphs.end : glyphs.branch;\n lines.push(\n `${style.dim(branch, capabilities)} ${clean(event.timestamp)} · ${clean(event.severity)} · ${clean(event.type)} · ${clean(event.message)}`,\n );\n });\n }\n }\n }\n\n if (result.command === \"problems\" && isProblemsCommandData(result.data)) {\n const data = result.data;\n lines.push(\n `${style.success(glyphs.success, capabilities)} Session ${clean(data.sessionId)}`,\n `${style.success(glyphs.success, capabilities)} Status ${clean(data.status)}`,\n \"\",\n style.strong(`Problems (${String(data.problems.length)})`, capabilities),\n );\n if (data.problems.length === 0) {\n lines.push(`${style.dim(glyphs.end, capabilities)} No recorded problems`);\n } else {\n data.problems.forEach((problem, index) => {\n const branch = index === data.problems.length - 1 ? glyphs.end : glyphs.branch;\n lines.push(\n `${style.dim(branch, capabilities)} ${style.failure(clean(problem.code), capabilities)} · ${clean(problem.summary)}`,\n ` ${clean(problem.detail)}`,\n );\n });\n }\n }\n\n if (result.command === \"context\" && isContextCommandData(result.data)) {\n lines.push(\n `${style.success(glyphs.success, capabilities)} Session ${clean(result.data.sessionId)}`,\n `${style.success(glyphs.success, capabilities)} Context ${String(result.data.characterCount)} characters`,\n `${style.success(glyphs.success, capabilities)} Evidence ${String(result.data.includedEvents)} included · ${String(result.data.omittedEvents)} omitted`,\n `${style.success(glyphs.success, capabilities)} Privacy pseudonymized · redacted · local only`,\n );\n }\n\n if (result.command === \"init\" && isInitData(result.data)) {\n lines.push(\n `${style.success(glyphs.success, capabilities)} Config ${clean(result.data.path)}`,\n `${style.success(glyphs.success, capabilities)} Status ${clean(result.data.status)}`,\n ...(result.data.detectedPreset === undefined\n ? []\n : [\n `${style.success(glyphs.success, capabilities)} Preset ${clean(result.data.detectedPreset)}`,\n ]),\n );\n }\n\n if (result.command.startsWith(\"config \") && isConfigReportData(result.data)) {\n lines.push(\n `${style.success(glyphs.success, capabilities)} Config valid`,\n `${style.success(glyphs.success, capabilities)} Project ${clean(result.data.files.project ?? \"not found\")}`,\n `${style.success(glyphs.success, capabilities)} User ${clean(result.data.files.user ?? \"not found\")}`,\n );\n if (result.data.action === \"explain\") {\n const values = result.data.values ?? [];\n lines.push(\"\", style.strong(`Resolved values (${String(values.length)})`, capabilities));\n values.forEach((value, index) => {\n const branch = index === values.length - 1 ? glyphs.end : glyphs.branch;\n lines.push(\n `${style.dim(branch, capabilities)} ${clean(value.key)} = ${clean(JSON.stringify(value.value))} · ${clean(value.source)}${value.location === undefined ? \"\" : ` · ${clean(value.location)}`}`,\n );\n });\n }\n }\n\n if (result.command === \"pair\" && isPairData(result.data)) {\n lines.push(\n `${style.success(glyphs.success, capabilities)} Paired ${clean(result.data.endpoint)}`,\n style.dim(\"Run adb-ready connect to verify the final device transport.\", capabilities),\n );\n }\n if (result.command.startsWith(\"ports \") && isPortsData(result.data)) {\n const data = result.data;\n lines.push(\n `${style.success(glyphs.success, capabilities)} Target ${clean(data.selected.transport.serial)}`,\n `${style.success(glyphs.success, capabilities)} Action ${clean(data.status)} · ${clean(data.direction)}`,\n \"\",\n style.strong(`Mappings (${String(data.mappings.length)})`, capabilities),\n );\n if (data.mappings.length === 0) {\n lines.push(`${style.dim(glyphs.end, capabilities)} None`);\n } else {\n data.mappings.forEach((mapping, index) => {\n const branch = index === data.mappings.length - 1 ? glyphs.end : glyphs.branch;\n const arrow = mapping.direction === \"reverse\" ? \"device → host\" : \"host → device\";\n lines.push(\n `${style.dim(branch, capabilities)} ${clean(arrow)} · ${clean(mapping.device)} ↔ ${clean(mapping.host)}`,\n );\n });\n }\n }\n if (hasPlan(result.data)) {\n const steps = result.data.plan.steps;\n lines.push(style.strong(\"Dry-run plan\", capabilities));\n steps.forEach((step, index) => {\n const branch = index === steps.length - 1 ? glyphs.end : glyphs.branch;\n lines.push(`${style.dim(branch, capabilities)} ${clean(step.title)} · ${clean(step.risk)}`);\n });\n }\n\n if (hasTargets(result.data)) {\n const targets = result.data.targets;\n lines.push(style.strong(`Targets (${String(targets.length)})`, capabilities));\n if (targets.length === 0) {\n lines.push(`${style.dim(glyphs.end, capabilities)} None visible`);\n } else {\n targets.forEach((target, index) => {\n const branch = index === targets.length - 1 ? glyphs.end : glyphs.branch;\n lines.push(`${style.dim(branch, capabilities)} ${targetLabel(target)}`);\n });\n }\n if (\"selected\" in result.data && result.data.selected !== undefined) {\n lines.push(\n `${style.accent(glyphs.active, capabilities)} Selected ${targetLabel(result.data.selected.target)}`,\n );\n }\n } else if (hasDevices(result.data)) {\n const devices = result.data.devices;\n lines.push(style.strong(`Targets (${String(devices.length)})`, capabilities));\n devices.forEach((device, index) => {\n const branch = index === devices.length - 1 ? glyphs.end : glyphs.branch;\n lines.push(`${style.dim(branch, capabilities)} ${deviceLabel(device)}`);\n });\n }\n\n if (hasDiscovery(result.data) && result.data.discovery.mdns.services.length > 0) {\n const services = result.data.discovery.mdns.services;\n lines.push(\"\", style.strong(`Wireless discovery (${String(services.length)})`, capabilities));\n services.forEach((service, index) => {\n const branch = index === services.length - 1 ? glyphs.end : glyphs.branch;\n lines.push(`${style.dim(branch, capabilities)} ${wirelessServiceLabel(service)}`);\n });\n }\n\n if (result.problems.length > 0) {\n lines.push(\"\", style.strong(\"Diagnostics\", capabilities));\n for (const problem of result.problems) {\n lines.push(...problemLines(problem, capabilities, options.verbose ?? false));\n }\n }\n\n const interrupted =\n result.problems.some(({ code }) => code === ProblemCode.OperationInterrupted) &&\n !result.problems.some(\n ({ code, severity }) => severity === \"error\" && code !== ProblemCode.OperationInterrupted,\n );\n const status = result.ok\n ? `${style.success(glyphs.success, capabilities)} Completed in ${String(result.durationMs)}ms`\n : interrupted\n ? `${style.warning(glyphs.warning, capabilities)} Interrupted safely in ${String(result.durationMs)}ms`\n : `${style.failure(glyphs.failure, capabilities)} Failed in ${String(result.durationMs)}ms`;\n lines.push(\"\", status);\n sink.write(`${lines.join(\"\\n\")}\\n`);\n}\n\nfunction renderPlain(result: CommandResult, sink: TextSink): void {\n sink.write(`command=${clean(result.command)}\\n`);\n sink.write(`ok=${String(result.ok)}\\n`);\n sink.write(`duration_ms=${String(result.durationMs)}\\n`);\n if (isDoctorData(result.data)) {\n const data = result.data;\n sink.write(`runtime=${clean(data.runtime.name)}\\n`);\n sink.write(`runtime_version=${clean(data.runtime.version)}\\n`);\n sink.write(`adb_version=${clean(data.adb.version.platformToolsVersion ?? \"unknown\")}\\n`);\n }\n if (isConnectData(result.data)) {\n sink.write(`endpoint=${clean(result.data.endpoint)}\\n`);\n sink.write(`serial=${clean(result.data.serial)}\\n`);\n sink.write(`state=${clean(result.data.state)}\\n`);\n if (result.data.hardwareSerial !== undefined) {\n sink.write(`hardware_serial=${clean(result.data.hardwareSerial)}\\n`);\n }\n }\n if (isDevData(result.data)) {\n sink.write(`session_id=${clean(result.data.sessionId)}\\n`);\n sink.write(`status=${clean(result.data.status)}\\n`);\n sink.write(`preset=${clean(result.data.preset)}\\n`);\n sink.write(`serial=${clean(result.data.selected.transport.serial)}\\n`);\n sink.write(`project_root=${clean(result.data.project.root)}\\n`);\n sink.write(`port_count=${String(result.data.ports.requested.length)}\\n`);\n sink.write(`journal_event_count=${String(result.data.journal.events.length)}\\n`);\n sink.write(`journal_dropped=${String(result.data.journal.dropped)}\\n`);\n if (result.data.child !== undefined) {\n sink.write(`child_exit_code=${String(result.data.child.exitCode)}\\n`);\n }\n }\n if (isLogsData(result.data)) {\n sink.write(`serial=${clean(result.data.selected.transport.serial)}\\n`);\n sink.write(`filters=${result.data.filters.map(clean).join(\",\")}\\n`);\n if (result.data.packageName !== undefined) {\n sink.write(`package=${clean(result.data.packageName)}\\n`);\n }\n if (result.data.pid !== undefined) sink.write(`pid=${String(result.data.pid)}\\n`);\n if (result.data.uid !== undefined) sink.write(`uid=${String(result.data.uid)}\\n`);\n sink.write(`buffers=${result.data.buffers.map(clean).join(\",\")}\\n`);\n sink.write(`record_count=${String(result.data.records.length)}\\n`);\n sink.write(`record_dropped=${String(result.data.dropped)}\\n`);\n sink.write(`finding_count=${String(result.data.findings.length)}\\n`);\n result.data.findings.forEach((finding) => {\n sink.write(`finding=${clean(finding.code)}:${clean(finding.summary)}\\n`);\n });\n result.data.records.forEach((record, index) => {\n sink.write(`record_${String(index)}=${clean(record.raw)}\\n`);\n });\n }\n if (isSessionCommandData(result.data)) {\n sink.write(`action=${clean(result.data.action)}\\n`);\n if (result.data.action === \"list\") {\n sink.write(`session_count=${String(result.data.sessions.length)}\\n`);\n result.data.sessions.forEach((session, index) => {\n sink.write(\n `session_${String(index)}=${clean(session.sessionId)}:${clean(session.status)}:${clean(session.updatedAt)}\\n`,\n );\n });\n } else {\n sink.write(`session_id=${clean(result.data.session.sessionId)}\\n`);\n sink.write(`status=${clean(result.data.session.status)}\\n`);\n sink.write(`event_count=${String(result.data.session.eventCount)}\\n`);\n if (result.data.action === \"events\") {\n result.data.events.forEach((event, index) => {\n sink.write(\n `event_${String(index)}=${clean(event.timestamp)}:${clean(event.severity)}:${clean(event.type)}:${clean(event.message)}\\n`,\n );\n });\n }\n }\n }\n if (isProblemsCommandData(result.data)) {\n sink.write(`session_id=${clean(result.data.sessionId)}\\n`);\n sink.write(`status=${clean(result.data.status)}\\n`);\n sink.write(`problem_count=${String(result.data.problems.length)}\\n`);\n result.data.problems.forEach((problem) => {\n sink.write(`problem=${clean(problem.code)}:${clean(problem.summary)}\\n`);\n });\n }\n if (isContextCommandData(result.data)) {\n sink.write(`session_id=${clean(result.data.sessionId)}\\n`);\n sink.write(`status=${clean(result.data.status)}\\n`);\n sink.write(`character_count=${String(result.data.characterCount)}\\n`);\n sink.write(`included_events=${String(result.data.includedEvents)}\\n`);\n sink.write(`omitted_events=${String(result.data.omittedEvents)}\\n`);\n sink.write(`filtered_events=${String(result.data.filteredEvents)}\\n`);\n }\n if (isInitData(result.data)) {\n sink.write(`status=${clean(result.data.status)}\\n`);\n sink.write(`path=${clean(result.data.path)}\\n`);\n if (result.data.detectedPreset !== undefined) {\n sink.write(`detected_preset=${clean(result.data.detectedPreset)}\\n`);\n }\n }\n if (isConfigReportData(result.data)) {\n sink.write(`action=${clean(result.data.action)}\\n`);\n sink.write(\"valid=true\\n\");\n if (result.data.files.project !== undefined) {\n sink.write(`project_config=${clean(result.data.files.project)}\\n`);\n }\n if (result.data.files.user !== undefined) {\n sink.write(`user_config=${clean(result.data.files.user)}\\n`);\n }\n for (const value of result.data.values ?? []) {\n sink.write(\n `value=${clean(value.key)}:${clean(JSON.stringify(value.value))}:${clean(value.source)}\\n`,\n );\n }\n }\n if (isPairData(result.data)) {\n sink.write(`endpoint=${clean(result.data.endpoint)}\\n`);\n sink.write(\"paired=true\\n\");\n }\n if (isPortsData(result.data)) {\n sink.write(`direction=${clean(result.data.direction)}\\n`);\n sink.write(`action=${clean(result.data.action)}\\n`);\n sink.write(`status=${clean(result.data.status)}\\n`);\n sink.write(`serial=${clean(result.data.selected.transport.serial)}\\n`);\n sink.write(`mapping_count=${String(result.data.mappings.length)}\\n`);\n result.data.mappings.forEach((mapping, index) => {\n sink.write(\n `mapping_${String(index)}=${clean(mapping.direction)}:${clean(mapping.device)}:${clean(mapping.host)}\\n`,\n );\n });\n }\n if (hasPlan(result.data)) {\n sink.write(\"dry_run=true\\n\");\n sink.write(`step_count=${String(result.data.plan.steps.length)}\\n`);\n result.data.plan.steps.forEach((step, index) => {\n sink.write(`step_${String(index)}=${clean(step.id)}:${clean(step.title)}\\n`);\n });\n }\n if (hasTargets(result.data)) {\n sink.write(`target_count=${String(result.data.targets.length)}\\n`);\n result.data.targets.forEach((target, index) => {\n sink.write(`target_${String(index)}=${targetLabel(target)}\\n`);\n });\n if (\"selected\" in result.data && result.data.selected !== undefined) {\n sink.write(`selected=${targetLabel(result.data.selected.target)}\\n`);\n }\n } else if (hasDevices(result.data)) {\n sink.write(`device_count=${String(result.data.devices.length)}\\n`);\n result.data.devices.forEach((device, index) => {\n sink.write(`device_${String(index)}=${deviceLabel(device)}\\n`);\n });\n }\n if (hasDiscovery(result.data)) {\n const services = result.data.discovery.mdns.services;\n sink.write(`wireless_service_count=${String(services.length)}\\n`);\n services.forEach((service, index) => {\n sink.write(`wireless_service_${String(index)}=${wirelessServiceLabel(service)}\\n`);\n });\n }\n for (const problem of result.problems) {\n sink.write(`problem=${clean(problem.code)}:${clean(problem.summary)}\\n`);\n }\n}\n\nexport function renderResult(result: CommandResult, options: ResultRenderOptions): void {\n if (options.format === \"markdown\" && isContextCommandData(result.data)) {\n options.sink.write(result.data.markdown);\n } else if (options.format === \"json\") {\n options.sink.write(`${JSON.stringify(result)}\\n`);\n } else if (options.format === \"ndjson\") {\n if (isSessionCommandData(result.data) && result.data.action === \"events\") {\n for (const event of result.data.events) {\n options.sink.write(`${JSON.stringify({ kind: \"event\", ...event })}\\n`);\n }\n options.sink.write(\n `${JSON.stringify({\n kind: \"result\",\n ...result,\n data: {\n action: result.data.action,\n session: result.data.session,\n eventCount: result.data.events.length,\n },\n })}\\n`,\n );\n } else {\n options.sink.write(`${JSON.stringify({ kind: \"result\", ...result })}\\n`);\n }\n } else if (options.format === \"plain\") {\n renderPlain(result, options.sink);\n } else {\n renderHuman(result, options);\n }\n}\n\nexport class NdjsonEventRenderer {\n readonly #unsubscribe: () => void;\n\n constructor(bus: EventBus, sink: TextSink) {\n this.#unsubscribe = bus.subscribe((event) => this.write(event, sink));\n }\n\n dispose(): void {\n this.#unsubscribe();\n }\n\n private write(event: AdbReadyEvent, sink: TextSink): void {\n sink.write(`${JSON.stringify({ kind: \"event\", ...event })}\\n`);\n }\n}\n",
43
+ "import { parseLogcatThreadtimeLine } from \"../adb/parsers.js\";\nimport { sanitizeTerminalText, style } from \"./style.js\";\nimport type { TerminalCapabilities } from \"./terminal.js\";\n\nconst ERROR_LINE = /(?:^|\\s)(?:err!|error|fatal|exception|failed|failure|crash)(?::|\\b)/iu;\nconst WARNING_LINE = /(?:^|\\s)(?:warn|warning|deprecated|deprecation)(?::|\\b)/iu;\nconst SUCCESS_LINE = /(?:^|\\s)(?:ready|started|bundled|done|success|completed)(?::|\\b)/iu;\nconst PROGRESS_LINE = /(?:^|\\s)(?:starting|building|bundling|opening|waiting)(?::|\\b)/iu;\n\nexport function renderLogStreamLine(line: string, capabilities: TerminalCapabilities): string {\n const safe = sanitizeTerminalText(line);\n const parsed = parseLogcatThreadtimeLine(safe);\n if (parsed?.priority === \"E\" || parsed?.priority === \"F\" || parsed?.priority === \"A\") {\n return style.failure(safe, capabilities);\n }\n if (parsed?.priority === \"W\") return style.warning(safe, capabilities);\n if (parsed?.priority === \"D\" || parsed?.priority === \"V\") {\n return style.dim(safe, capabilities);\n }\n if (parsed?.priority === \"I\") return style.accent(safe, capabilities);\n if (ERROR_LINE.test(safe)) return style.failure(safe, capabilities);\n if (WARNING_LINE.test(safe)) return style.warning(safe, capabilities);\n return safe;\n}\n\nexport function renderChildStreamLine(\n stream: \"stderr\" | \"stdout\",\n line: string,\n capabilities: TerminalCapabilities,\n): string {\n const safe = sanitizeTerminalText(line);\n const prefix = style.dim(stream === \"stderr\" ? \"│\" : \" \", capabilities);\n const rendered = ERROR_LINE.test(safe)\n ? style.failure(safe, capabilities)\n : WARNING_LINE.test(safe)\n ? style.warning(safe, capabilities)\n : SUCCESS_LINE.test(safe)\n ? style.success(safe, capabilities)\n : PROGRESS_LINE.test(safe)\n ? style.accent(safe, capabilities)\n : safe;\n return `${prefix} ${rendered}`;\n}\n",
43
44
  "import type { OutputFormat } from \"../cli/arguments.js\";\n\nexport interface TerminalPreferences {\n format: OutputFormat;\n nonInteractive: boolean;\n color?: boolean;\n unicode?: boolean;\n animation?: boolean;\n interactive?: boolean;\n env?: NodeJS.ProcessEnv;\n inputIsTTY: boolean;\n outputIsTTY: boolean;\n columns?: number;\n}\n\nexport interface TerminalCapabilities {\n interactive: boolean;\n color: boolean;\n unicode: boolean;\n animation: boolean;\n columns: number;\n}\n\nfunction environmentFlag(value: string | undefined): boolean {\n if (value === undefined) {\n return false;\n }\n return ![\"\", \"0\", \"false\", \"no\", \"off\"].includes(value.trim().toLowerCase());\n}\n\nexport function resolveTerminalCapabilities(\n preferences: TerminalPreferences,\n): TerminalCapabilities {\n const env = preferences.env ?? {};\n const human = preferences.format === \"human\";\n const dumb = env.TERM?.toLowerCase() === \"dumb\";\n const ci = environmentFlag(env.CI);\n const reducedMotion = environmentFlag(env.ADB_READY_REDUCED_MOTION);\n const noColorEnvironment = Object.hasOwn(env, \"NO_COLOR\");\n const locale = `${env.LC_ALL ?? \"\"} ${env.LC_CTYPE ?? \"\"} ${env.LANG ?? \"\"}`;\n const localeSupportsUnicode = /UTF-?8/iu.test(locale);\n const interactive =\n human &&\n preferences.nonInteractive === false &&\n preferences.interactive !== false &&\n preferences.inputIsTTY &&\n preferences.outputIsTTY &&\n !ci &&\n !dumb;\n const colorPreference = preferences.color ?? !noColorEnvironment;\n const unicodePreference = preferences.unicode ?? localeSupportsUnicode;\n\n return {\n interactive,\n color: human && preferences.outputIsTTY && !dumb && colorPreference,\n unicode: human && unicodePreference,\n animation:\n interactive && preferences.animation !== false && !reducedMotion && !environmentFlag(env.CI),\n columns: Math.max(20, preferences.columns ?? 80),\n };\n}\n",
44
45
  "import type { PortAction } from \"../app/commands.js\";\nimport type { DevPreset, PackageManagerName } from \"../dev/project.js\";\nimport type { PortDirection } from \"../ports/model.js\";\n\nexport type CommandName =\n | \"config\"\n | \"connect\"\n | \"context\"\n | \"dev\"\n | \"devices\"\n | \"doctor\"\n | \"help\"\n | \"init\"\n | \"logs\"\n | \"pair\"\n | \"ports\"\n | \"problems\"\n | \"sessions\"\n | \"version\";\nexport type OutputFormat = \"human\" | \"json\" | \"markdown\" | \"ndjson\" | \"plain\";\nexport type ContextFilter =\n | \"child\"\n | \"logs\"\n | \"ports\"\n | \"problems\"\n | \"recovery\"\n | \"state\"\n | \"target\";\n\nexport interface CliOptions {\n command: CommandName;\n helpTarget?: Exclude<CommandName, \"help\" | \"version\">;\n format: OutputFormat;\n quiet: boolean;\n verbose: boolean;\n nonInteractive: boolean;\n color?: boolean;\n unicode?: boolean;\n animation?: boolean;\n timeoutMs?: number;\n adbPath?: string;\n adbHost?: string;\n adbPort?: number;\n configPath?: string;\n profileName?: string;\n select: boolean;\n device?: string;\n transportId?: string;\n endpoint?: string;\n pairingCodeStdin: boolean;\n remembered: boolean;\n dryRun: boolean;\n portDirection?: PortDirection;\n portAction?: PortAction;\n primaryPort?: string;\n secondaryPort?: string;\n preset?: DevPreset;\n packageManager?: PackageManagerName;\n reversePorts?: string[];\n logs?: boolean;\n cleanupPorts?: boolean;\n customCommand?: { executable: string; args: string[] };\n sessionAction?: \"events\" | \"list\" | \"show\";\n sessionId?: string;\n logPackage?: string;\n logPid?: number;\n logTags?: string[];\n logExcludeTags?: string[];\n logPriority?: \"A\" | \"D\" | \"E\" | \"F\" | \"I\" | \"S\" | \"V\" | \"W\";\n logBuffers?: Array<\"crash\" | \"main\" | \"system\">;\n logSince?: string;\n logTail?: number;\n logDump?: boolean;\n logMaxRecords?: number;\n contextBudget?: number;\n contextSinceMs?: number;\n contextOnly?: ContextFilter[];\n configAction?: \"explain\" | \"validate\";\n force?: boolean;\n}\n\nexport interface CliParseFailure {\n ok: false;\n code: \"CLI_INVALID_OPTION\" | \"CLI_INVALID_VALUE\" | \"CLI_USAGE\";\n message: string;\n option?: string;\n}\n\nexport interface CliParseSuccess {\n ok: true;\n options: CliOptions;\n}\n\nexport type CliParseResult = CliParseFailure | CliParseSuccess;\n\nconst COMMANDS = new Set<CommandName>([\n \"config\",\n \"connect\",\n \"context\",\n \"dev\",\n \"devices\",\n \"doctor\",\n \"help\",\n \"init\",\n \"logs\",\n \"pair\",\n \"ports\",\n \"problems\",\n \"sessions\",\n \"version\",\n]);\nconst BOOLEAN_OPTIONS = new Set([\n \"-h\",\n \"--help\",\n \"-V\",\n \"--version\",\n \"--json\",\n \"--quiet\",\n \"--verbose\",\n \"--non-interactive\",\n \"--color\",\n \"--no-color\",\n \"--unicode\",\n \"--no-unicode\",\n \"--animation\",\n \"--no-animation\",\n \"--select\",\n \"--pairing-code-stdin\",\n \"--last\",\n \"--dry-run\",\n \"--logs\",\n \"--no-logs\",\n \"--cleanup-ports\",\n \"--no-cleanup-ports\",\n \"--dump\",\n \"--force\",\n]);\n\nfunction failure(code: CliParseFailure[\"code\"], message: string, option?: string): CliParseFailure {\n return { ok: false, code, message, ...(option === undefined ? {} : { option }) };\n}\n\nfunction parseDuration(value: string): number | undefined {\n const match = value.match(/^(\\d+(?:\\.\\d+)?)(ms|s|m|h)?$/u);\n if (match === null) {\n return undefined;\n }\n const amount = Number(match[1]);\n const unit = match[2] ?? \"ms\";\n const multiplier = unit === \"h\" ? 3_600_000 : unit === \"m\" ? 60_000 : unit === \"s\" ? 1_000 : 1;\n const milliseconds = amount * multiplier;\n return Number.isSafeInteger(milliseconds) && milliseconds > 0 ? milliseconds : undefined;\n}\n\nfunction splitLongOption(argument: string): { option: string; inlineValue?: string } {\n const separator = argument.indexOf(\"=\");\n if (separator === -1) {\n return { option: argument };\n }\n return { option: argument.slice(0, separator), inlineValue: argument.slice(separator + 1) };\n}\n\nexport function parseArguments(argv: readonly string[]): CliParseResult {\n let command: CommandName | undefined;\n let helpTarget: CliOptions[\"helpTarget\"];\n let format: OutputFormat = \"human\";\n let quiet = false;\n let verbose = false;\n let nonInteractive = false;\n let color: boolean | undefined;\n let unicode: boolean | undefined;\n let animation: boolean | undefined;\n let timeoutMs: number | undefined;\n let adbPath: string | undefined;\n let adbHost: string | undefined;\n let adbPort: number | undefined;\n let configPath: string | undefined;\n let profileName: string | undefined;\n let select = false;\n let device: string | undefined;\n let transportId: string | undefined;\n let endpoint: string | undefined;\n let pairingCodeStdin = false;\n let remembered = false;\n let dryRun = false;\n let portDirection: PortDirection | undefined;\n let portAction: PortAction | undefined;\n let primaryPort: string | undefined;\n let secondaryPort: string | undefined;\n let preset: DevPreset | undefined;\n let packageManager: PackageManagerName | undefined;\n const reversePorts: string[] = [];\n let logs: boolean | undefined;\n let cleanupPorts: boolean | undefined;\n let customCommand: CliOptions[\"customCommand\"];\n let sessionAction: CliOptions[\"sessionAction\"];\n let sessionId: string | undefined;\n let logPackage: string | undefined;\n let logPid: number | undefined;\n const logTags: string[] = [];\n const logExcludeTags: string[] = [];\n let logPriority: CliOptions[\"logPriority\"];\n const logBuffers: NonNullable<CliOptions[\"logBuffers\"]> = [];\n let logSince: string | undefined;\n let logTail: number | undefined;\n let logDump = false;\n let logMaxRecords: number | undefined;\n let contextBudget: number | undefined;\n let contextSinceMs: number | undefined;\n const contextOnly: ContextFilter[] = [];\n let configAction: CliOptions[\"configAction\"];\n let force = false;\n\n for (let index = 0; index < argv.length; index += 1) {\n const argument = argv[index];\n if (argument === undefined) {\n continue;\n }\n\n if (argument === \"--\") {\n if (command !== \"dev\") {\n return failure(\"CLI_USAGE\", \"-- command passthrough can only be used with dev.\");\n }\n const executable = argv[index + 1];\n if (executable === undefined || executable.trim() === \"\") {\n return failure(\"CLI_USAGE\", \"dev -- requires an executable.\");\n }\n customCommand = { executable, args: argv.slice(index + 2) };\n break;\n }\n\n if (!argument.startsWith(\"-\")) {\n if (command === undefined) {\n if (!COMMANDS.has(argument as CommandName)) {\n return failure(\"CLI_USAGE\", `Unknown command: ${argument}`);\n }\n const candidate = argument as CommandName;\n command = candidate;\n continue;\n }\n if (command === \"help\" && COMMANDS.has(argument as CommandName)) {\n const candidate = argument as CommandName;\n if (\n candidate === \"connect\" ||\n candidate === \"config\" ||\n candidate === \"context\" ||\n candidate === \"dev\" ||\n candidate === \"devices\" ||\n candidate === \"doctor\" ||\n candidate === \"logs\" ||\n candidate === \"init\" ||\n candidate === \"pair\" ||\n candidate === \"ports\" ||\n candidate === \"problems\" ||\n candidate === \"sessions\"\n ) {\n helpTarget = candidate;\n continue;\n }\n }\n if ((command === \"connect\" || command === \"pair\") && endpoint === undefined) {\n endpoint = argument;\n continue;\n }\n if (command === \"sessions\") {\n if (\n sessionAction === undefined &&\n (argument === \"events\" || argument === \"list\" || argument === \"show\")\n ) {\n sessionAction = argument;\n continue;\n }\n if (\n (sessionAction === \"events\" || sessionAction === \"show\") &&\n sessionId === undefined &&\n /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/u.test(argument)\n ) {\n sessionId = argument;\n continue;\n }\n }\n if (\n command === \"config\" &&\n configAction === undefined &&\n (argument === \"explain\" || argument === \"validate\")\n ) {\n configAction = argument;\n continue;\n }\n if (\n command === \"problems\" &&\n sessionId === undefined &&\n /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/u.test(argument)\n ) {\n sessionId = argument;\n continue;\n }\n if (\n command === \"context\" &&\n sessionId === undefined &&\n /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/u.test(argument)\n ) {\n sessionId = argument;\n continue;\n }\n if (command === \"ports\") {\n if (portDirection === undefined && (argument === \"forward\" || argument === \"reverse\")) {\n portDirection = argument;\n continue;\n }\n if (\n portDirection !== undefined &&\n portAction === undefined &&\n (argument === \"add\" || argument === \"list\" || argument === \"remove\")\n ) {\n portAction = argument;\n continue;\n }\n if (portAction !== undefined && portAction !== \"list\" && primaryPort === undefined) {\n primaryPort = argument;\n continue;\n }\n if (portAction === \"add\" && secondaryPort === undefined) {\n secondaryPort = argument;\n continue;\n }\n }\n return failure(\"CLI_USAGE\", `Unexpected argument: ${argument}`);\n }\n\n const { option, inlineValue } = splitLongOption(argument);\n if (inlineValue !== undefined && BOOLEAN_OPTIONS.has(option)) {\n return failure(\"CLI_INVALID_OPTION\", `${option} does not accept a value.`, option);\n }\n const readValue = (): CliParseFailure | string => {\n if (inlineValue !== undefined) {\n return inlineValue;\n }\n const value = argv[index + 1];\n if (value === undefined || value.startsWith(\"-\")) {\n return failure(\"CLI_INVALID_VALUE\", `${option} requires a value.`, option);\n }\n index += 1;\n return value;\n };\n\n if (option === \"-h\" || option === \"--help\") {\n if (command !== undefined && command !== \"help\" && command !== \"version\") {\n helpTarget = command;\n }\n command = \"help\";\n } else if (option === \"-V\" || option === \"--version\") {\n command = \"version\";\n } else if (option === \"--json\") {\n format = \"json\";\n } else if (option === \"--format\") {\n const value = readValue();\n if (typeof value !== \"string\") {\n return value;\n }\n if (\n !new Set<OutputFormat>([\"human\", \"json\", \"markdown\", \"ndjson\", \"plain\"]).has(\n value as OutputFormat,\n )\n ) {\n return failure(\n \"CLI_INVALID_VALUE\",\n `Invalid format: ${value}. Expected human, plain, markdown, json, or ndjson.`,\n option,\n );\n }\n format = value as OutputFormat;\n } else if (option === \"--quiet\") {\n quiet = true;\n } else if (option === \"--verbose\") {\n verbose = true;\n } else if (option === \"--non-interactive\") {\n nonInteractive = true;\n } else if (option === \"--color\") {\n color = true;\n } else if (option === \"--no-color\") {\n color = false;\n } else if (option === \"--unicode\") {\n unicode = true;\n } else if (option === \"--no-unicode\") {\n unicode = false;\n } else if (option === \"--animation\") {\n animation = true;\n } else if (option === \"--no-animation\") {\n animation = false;\n } else if (option === \"--select\") {\n select = true;\n } else if (option === \"--device\" || option === \"--serial\" || option === \"-s\") {\n const value = readValue();\n if (typeof value !== \"string\") {\n return value;\n }\n if (value.trim() === \"\") {\n return failure(\"CLI_INVALID_VALUE\", `${option} cannot be empty.`, option);\n }\n device = value;\n } else if (option === \"--transport-id\") {\n const value = readValue();\n if (typeof value !== \"string\") {\n return value;\n }\n if (!/^\\d+$/u.test(value)) {\n return failure(\"CLI_INVALID_VALUE\", `Invalid transport ID: ${value}.`, option);\n }\n transportId = value;\n } else if (option === \"--pairing-code-stdin\") {\n pairingCodeStdin = true;\n } else if (option === \"--last\") {\n remembered = true;\n } else if (option === \"--dry-run\") {\n dryRun = true;\n } else if (option === \"--preset\") {\n const value = readValue();\n if (typeof value !== \"string\") return value;\n if (\n !new Set<DevPreset>([\"custom\", \"expo\", \"gradle\", \"react-native\"]).has(value as DevPreset)\n ) {\n return failure(\n \"CLI_INVALID_VALUE\",\n `Invalid preset: ${value}. Expected custom, expo, gradle, or react-native.`,\n option,\n );\n }\n preset = value as DevPreset;\n } else if (option === \"--package-manager\") {\n const value = readValue();\n if (typeof value !== \"string\") return value;\n if (\n !new Set<PackageManagerName>([\"bun\", \"npm\", \"pnpm\", \"yarn\"]).has(\n value as PackageManagerName,\n )\n ) {\n return failure(\n \"CLI_INVALID_VALUE\",\n `Invalid package manager: ${value}. Expected bun, npm, pnpm, or yarn.`,\n option,\n );\n }\n packageManager = value as PackageManagerName;\n } else if (option === \"--port\") {\n const value = readValue();\n if (typeof value !== \"string\") return value;\n const parsed = Number(value);\n if (!/^\\d+$/u.test(value) || !Number.isSafeInteger(parsed) || parsed < 1 || parsed > 65_535) {\n return failure(\"CLI_INVALID_VALUE\", `Invalid reverse port: ${value}.`, option);\n }\n reversePorts.push(value);\n } else if (option === \"--logs\") {\n logs = true;\n } else if (option === \"--no-logs\") {\n logs = false;\n } else if (option === \"--cleanup-ports\") {\n cleanupPorts = true;\n } else if (option === \"--no-cleanup-ports\") {\n cleanupPorts = false;\n } else if (option === \"--package\") {\n const value = readValue();\n if (typeof value !== \"string\") return value;\n if (!/^[A-Za-z][A-Za-z0-9_]*(?:\\.[A-Za-z0-9_]+)+$/u.test(value)) {\n return failure(\"CLI_INVALID_VALUE\", `Invalid Android package name: ${value}.`, option);\n }\n logPackage = value;\n } else if (option === \"--pid\") {\n const value = readValue();\n if (typeof value !== \"string\") return value;\n const parsed = Number(value);\n if (!/^\\d+$/u.test(value) || !Number.isSafeInteger(parsed) || parsed < 1) {\n return failure(\"CLI_INVALID_VALUE\", `Invalid process ID: ${value}.`, option);\n }\n logPid = parsed;\n } else if (option === \"--tag\") {\n const value = readValue();\n if (typeof value !== \"string\") return value;\n if (!/^[^\\s:]{1,128}$/u.test(value)) {\n return failure(\"CLI_INVALID_VALUE\", `Invalid log tag: ${value}.`, option);\n }\n logTags.push(value);\n } else if (option === \"--exclude-tag\") {\n const value = readValue();\n if (typeof value !== \"string\") return value;\n if (!/^[^\\s:]{1,128}$/u.test(value)) {\n return failure(\"CLI_INVALID_VALUE\", `Invalid excluded log tag: ${value}.`, option);\n }\n logExcludeTags.push(value);\n } else if (option === \"--buffer\") {\n const value = readValue();\n if (typeof value !== \"string\") return value;\n if (value !== \"main\" && value !== \"system\" && value !== \"crash\") {\n return failure(\n \"CLI_INVALID_VALUE\",\n `Invalid log buffer: ${value}. Expected main, system, or crash.`,\n option,\n );\n }\n logBuffers.push(value);\n } else if (option === \"--since\") {\n const value = readValue();\n if (typeof value !== \"string\") return value;\n if (command === \"context\") {\n contextSinceMs = parseDuration(value);\n if (contextSinceMs === undefined) {\n return failure(\n \"CLI_INVALID_VALUE\",\n `Invalid context duration: ${value}. Use a value such as 30s, 5m, or 1h.`,\n option,\n );\n }\n } else if (!/^[0-9][0-9 .:-]{0,63}$/u.test(value)) {\n return failure(\n \"CLI_INVALID_VALUE\",\n `Invalid log start time: ${value}. Use an Android logcat timestamp.`,\n option,\n );\n } else {\n logSince = value;\n }\n } else if (option === \"--only\") {\n const value = readValue();\n if (typeof value !== \"string\") return value;\n const filters = value.split(\",\").filter((item) => item !== \"\");\n const allowed = new Set<ContextFilter>([\n \"child\",\n \"logs\",\n \"ports\",\n \"problems\",\n \"recovery\",\n \"state\",\n \"target\",\n ]);\n if (\n command !== \"context\" ||\n filters.length === 0 ||\n filters.some((item) => !allowed.has(item as ContextFilter))\n ) {\n return failure(\"CLI_INVALID_VALUE\", `Invalid context filters: ${value}.`, option);\n }\n contextOnly.push(...(filters as ContextFilter[]));\n } else if (option === \"--tail\") {\n const value = readValue();\n if (typeof value !== \"string\") return value;\n const parsed = Number(value);\n if (!/^\\d+$/u.test(value) || !Number.isSafeInteger(parsed) || parsed < 1) {\n return failure(\"CLI_INVALID_VALUE\", `Invalid log tail count: ${value}.`, option);\n }\n logTail = parsed;\n } else if (option === \"--level\") {\n const value = readValue();\n if (typeof value !== \"string\") return value;\n const normalized = value.toUpperCase();\n if (!new Set([\"A\", \"D\", \"E\", \"F\", \"I\", \"S\", \"V\", \"W\"]).has(normalized)) {\n return failure(\"CLI_INVALID_VALUE\", `Invalid log priority: ${value}.`, option);\n }\n logPriority = normalized as NonNullable<CliOptions[\"logPriority\"]>;\n } else if (option === \"--dump\") {\n logDump = true;\n } else if (option === \"--force\") {\n force = true;\n } else if (option === \"--max-records\") {\n const value = readValue();\n if (typeof value !== \"string\") return value;\n const parsed = Number(value);\n if (!/^\\d+$/u.test(value) || !Number.isSafeInteger(parsed) || parsed < 1) {\n return failure(\"CLI_INVALID_VALUE\", `Invalid record limit: ${value}.`, option);\n }\n logMaxRecords = parsed;\n } else if (option === \"--budget\") {\n const value = readValue();\n if (typeof value !== \"string\") return value;\n const parsed = Number(value);\n if (!/^\\d+$/u.test(value) || !Number.isSafeInteger(parsed) || parsed < 1_000) {\n return failure(\n \"CLI_INVALID_VALUE\",\n `Invalid context budget: ${value}. Expected at least 1000 characters.`,\n option,\n );\n }\n contextBudget = parsed;\n } else if (option === \"--timeout\") {\n const value = readValue();\n if (typeof value !== \"string\") {\n return value;\n }\n timeoutMs = parseDuration(value);\n if (timeoutMs === undefined) {\n return failure(\n \"CLI_INVALID_VALUE\",\n `Invalid timeout: ${value}. Use a positive duration such as 500ms, 5s, or 1m.`,\n option,\n );\n }\n } else if (option === \"--adb\") {\n const value = readValue();\n if (typeof value !== \"string\") {\n return value;\n }\n if (value.trim() === \"\") {\n return failure(\"CLI_INVALID_VALUE\", \"--adb cannot be empty.\", option);\n }\n adbPath = value;\n } else if (option === \"--adb-host\") {\n const value = readValue();\n if (typeof value !== \"string\") {\n return value;\n }\n if (value.trim() === \"\") {\n return failure(\"CLI_INVALID_VALUE\", \"--adb-host cannot be empty.\", option);\n }\n adbHost = value;\n } else if (option === \"--adb-port\") {\n const value = readValue();\n if (typeof value !== \"string\") {\n return value;\n }\n const parsed = Number(value);\n if (!Number.isSafeInteger(parsed) || parsed < 1 || parsed > 65_535) {\n return failure(\"CLI_INVALID_VALUE\", `Invalid ADB server port: ${value}.`, option);\n }\n adbPort = parsed;\n } else if (option === \"--config\") {\n const value = readValue();\n if (typeof value !== \"string\") {\n return value;\n }\n if (value.trim() === \"\") {\n return failure(\"CLI_INVALID_VALUE\", \"--config cannot be empty.\", option);\n }\n configPath = value;\n } else if (option === \"--profile\") {\n const value = readValue();\n if (typeof value !== \"string\") {\n return value;\n }\n if (!/^[a-zA-Z0-9][a-zA-Z0-9._-]{0,63}$/u.test(value)) {\n return failure(\"CLI_INVALID_VALUE\", `Invalid profile name: ${value}.`, option);\n }\n profileName = value;\n } else {\n return failure(\"CLI_INVALID_OPTION\", `Unknown option: ${option}`, option);\n }\n }\n\n if (quiet && verbose) {\n return failure(\"CLI_USAGE\", \"--quiet and --verbose cannot be used together.\");\n }\n\n command ??= \"help\";\n if (command === \"config\") configAction ??= \"validate\";\n if (command === \"context\" && format === \"human\") format = \"markdown\";\n if (command === \"sessions\") sessionAction ??= \"list\";\n const targetCommand =\n command === \"dev\" || command === \"devices\" || command === \"logs\" || command === \"ports\";\n if (select && !targetCommand) {\n return failure(\n \"CLI_USAGE\",\n \"--select can only be used with a target-aware command.\",\n \"--select\",\n );\n }\n if ((device !== undefined || transportId !== undefined) && !targetCommand) {\n return failure(\n \"CLI_USAGE\",\n \"Target selection options can only be used with a target-aware command.\",\n );\n }\n if (select && nonInteractive) {\n return failure(\"CLI_USAGE\", \"--select cannot be combined with --non-interactive.\", \"--select\");\n }\n if (select && format !== \"human\") {\n return failure(\"CLI_USAGE\", \"--select can only be used with human output.\", \"--select\");\n }\n if (select && (device !== undefined || transportId !== undefined)) {\n return failure(\"CLI_USAGE\", \"--select cannot be combined with an explicit target selector.\");\n }\n if (device !== undefined && transportId !== undefined) {\n return failure(\"CLI_USAGE\", \"--device and --transport-id cannot be combined.\");\n }\n if (pairingCodeStdin && command !== \"pair\") {\n return failure(\n \"CLI_USAGE\",\n \"--pairing-code-stdin can only be used with the pair command.\",\n \"--pairing-code-stdin\",\n );\n }\n if (remembered && !targetCommand) {\n return failure(\"CLI_USAGE\", \"--last can only be used with a target-aware command.\", \"--last\");\n }\n if (remembered && (select || device !== undefined || transportId !== undefined)) {\n return failure(\"CLI_USAGE\", \"--last cannot be combined with another target selector.\");\n }\n if (\n dryRun &&\n command !== \"connect\" &&\n command !== \"dev\" &&\n command !== \"pair\" &&\n command !== \"ports\" &&\n command !== \"init\"\n ) {\n return failure(\n \"CLI_USAGE\",\n \"--dry-run can only be used with connect, dev, init, pair, or ports.\",\n \"--dry-run\",\n );\n }\n if (command === \"ports\") {\n if (portDirection === undefined) {\n return failure(\"CLI_USAGE\", \"ports requires a direction: reverse or forward.\");\n }\n if (portAction === undefined) {\n return failure(\"CLI_USAGE\", `ports ${portDirection} requires list, add, or remove.`);\n }\n if (portAction === \"list\" && (primaryPort !== undefined || secondaryPort !== undefined)) {\n return failure(\"CLI_USAGE\", `ports ${portDirection} list does not accept a port.`);\n }\n if (portAction !== \"list\" && primaryPort === undefined) {\n return failure(\"CLI_USAGE\", `ports ${portDirection} ${portAction} requires a listen port.`);\n }\n if (portAction === \"remove\" && secondaryPort !== undefined) {\n return failure(\"CLI_USAGE\", `ports ${portDirection} remove accepts one port.`);\n }\n }\n if (\n command !== \"dev\" &&\n command !== \"init\" &&\n (preset !== undefined ||\n packageManager !== undefined ||\n reversePorts.length > 0 ||\n logs !== undefined ||\n cleanupPorts !== undefined ||\n customCommand !== undefined)\n ) {\n return failure(\"CLI_USAGE\", \"Development options can only be used with the dev command.\");\n }\n if (\n command !== \"logs\" &&\n (logPackage !== undefined ||\n logPid !== undefined ||\n logTags.length > 0 ||\n logExcludeTags.length > 0 ||\n logPriority !== undefined ||\n logBuffers.length > 0 ||\n logSince !== undefined ||\n logTail !== undefined ||\n logDump ||\n logMaxRecords !== undefined)\n ) {\n return failure(\"CLI_USAGE\", \"Log filtering options can only be used with the logs command.\");\n }\n if (logPackage !== undefined && logPid !== undefined) {\n return failure(\"CLI_USAGE\", \"--package and --pid cannot be combined.\");\n }\n if (logSince !== undefined && logTail !== undefined) {\n return failure(\"CLI_USAGE\", \"--since and --tail cannot be combined.\");\n }\n if (contextBudget !== undefined && command !== \"context\") {\n return failure(\"CLI_USAGE\", \"--budget can only be used with the context command.\");\n }\n if ((contextSinceMs !== undefined || contextOnly.length > 0) && command !== \"context\") {\n return failure(\"CLI_USAGE\", \"Context filtering options can only be used with context.\");\n }\n if (format === \"markdown\" && command !== \"context\") {\n return failure(\"CLI_USAGE\", \"Markdown output is only available for the context command.\");\n }\n if (force && command !== \"init\") {\n return failure(\"CLI_USAGE\", \"--force can only be used with the init command.\");\n }\n\n return {\n ok: true,\n options: {\n command,\n ...(helpTarget === undefined ? {} : { helpTarget }),\n format,\n quiet,\n verbose,\n nonInteractive,\n ...(color === undefined ? {} : { color }),\n ...(unicode === undefined ? {} : { unicode }),\n ...(animation === undefined ? {} : { animation }),\n ...(timeoutMs === undefined ? {} : { timeoutMs }),\n ...(adbPath === undefined ? {} : { adbPath }),\n ...(adbHost === undefined ? {} : { adbHost }),\n ...(adbPort === undefined ? {} : { adbPort }),\n ...(configPath === undefined ? {} : { configPath }),\n ...(profileName === undefined ? {} : { profileName }),\n select,\n ...(device === undefined ? {} : { device }),\n ...(transportId === undefined ? {} : { transportId }),\n ...(endpoint === undefined ? {} : { endpoint }),\n pairingCodeStdin,\n remembered,\n dryRun,\n ...(portDirection === undefined ? {} : { portDirection }),\n ...(portAction === undefined ? {} : { portAction }),\n ...(primaryPort === undefined ? {} : { primaryPort }),\n ...(secondaryPort === undefined ? {} : { secondaryPort }),\n ...(preset === undefined ? {} : { preset }),\n ...(packageManager === undefined ? {} : { packageManager }),\n ...(reversePorts.length === 0 ? {} : { reversePorts }),\n ...(logs === undefined ? {} : { logs }),\n ...(cleanupPorts === undefined ? {} : { cleanupPorts }),\n ...(customCommand === undefined ? {} : { customCommand }),\n ...(sessionAction === undefined ? {} : { sessionAction }),\n ...(sessionId === undefined ? {} : { sessionId }),\n ...(logPackage === undefined ? {} : { logPackage }),\n ...(logPid === undefined ? {} : { logPid }),\n ...(logTags.length === 0 ? {} : { logTags }),\n ...(logExcludeTags.length === 0 ? {} : { logExcludeTags }),\n ...(logPriority === undefined ? {} : { logPriority }),\n ...(logBuffers.length === 0 ? {} : { logBuffers: [...new Set(logBuffers)] }),\n ...(logSince === undefined ? {} : { logSince }),\n ...(logTail === undefined ? {} : { logTail }),\n ...(logDump ? { logDump: true } : {}),\n ...(logMaxRecords === undefined ? {} : { logMaxRecords }),\n ...(contextBudget === undefined ? {} : { contextBudget }),\n ...(contextSinceMs === undefined ? {} : { contextSinceMs }),\n ...(contextOnly.length === 0 ? {} : { contextOnly: [...new Set(contextOnly)] }),\n ...(configAction === undefined ? {} : { configAction }),\n ...(force ? { force: true } : {}),\n },\n };\n}\n"
45
46
  ],
46
- "mappings": "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",
47
- "debugId": "62DDFFDF33E82E9264756E2164756E21",
47
+ "mappings": "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",
48
+ "debugId": "D3161FCA6036C77564756E2164756E21",
48
49
  "names": []
49
50
  }