diff --git a/AGENTS.md b/AGENTS.md index 3e2de45d5..1b7155a29 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -139,7 +139,7 @@ Command-only flags (like `find --first`) that do not flow to the platform layer - Use `keyboard dismiss` for iOS keyboard dismissal; it may tap safe native controls such as `Done` but must not fall back to system back navigation. - Do not remove shared snapshot/session model behavior without full migration. - Command/device support must come from `src/core/capabilities.ts`. -- Apple-family target changes must keep `src/utils/device.ts`, `src/core/capabilities.ts`, `src/core/dispatch-resolve.ts`, `src/platforms/ios/devices.ts`, and `src/platforms/ios/runner-xctestrun.ts` in sync. +- Apple-family target changes must keep `src/kernel/device.ts`, `src/core/capabilities.ts`, `src/core/dispatch-resolve.ts`, `src/platforms/ios/devices.ts`, and `src/platforms/ios/runner-xctestrun.ts` in sync. - iOS simulator-set scoping is iOS-specific: do not let `iosSimulatorDeviceSet` hide the host macOS desktop target when `--platform macos` or `--target desktop` is requested. - If Swift runner code changes, run `pnpm build:xcuitest`. - Use `inferFillText` and `uniqueStrings` from `src/daemon/action-utils.ts`. @@ -157,7 +157,7 @@ Command-only flags (like `find --first`) that do not flow to the platform layer - Request diagnostics belong in `sessions//requests/.ndjson` once the effective session is resolved. The top-level daemon log is for daemon lifecycle/startup and pre-session failures. - Session artifact paths are centralized in `src/daemon/session-store.ts`; do not hand-build session log paths in handlers. - Do not add ad-hoc stderr/file logging where diagnostics helpers apply. -- Normalize user-facing failures via `src/utils/errors.ts` (`normalizeError`). +- Normalize user-facing failures via `src/kernel/errors.ts` (`normalizeError`). - Failure payload contract: `code`, `message`, `hint`, `diagnosticId`, `logPath`, `details`. - User-facing errors should be short and actionable: say what failed, why when known, and how to recover. Put recovery steps in `hint` when the action is not obvious, for example restart/retry, use plain screenshot when AX state is unavailable, navigate with coordinates, or inspect logs. - If an interaction unexpectedly takes 5+ seconds, inspect the relevant daemon log before attributing it to the app. Check the session `--state-dir` `daemon.log` or the failure `logPath` for runner restart, stale session recovery, AX failure, transport retry, or command timeout evidence. diff --git a/docs/adr/0009-apple-platform-consolidation.md b/docs/adr/0009-apple-platform-consolidation.md index 97fe32c7e..27c3bc8e3 100644 --- a/docs/adr/0009-apple-platform-consolidation.md +++ b/docs/adr/0009-apple-platform-consolidation.md @@ -9,7 +9,7 @@ Accepted Apple support is modeled asymmetrically and is physically smeared across an `ios` directory that is really the shared Apple engine. `Platform` carries `ios` and `macos` as separate literals, but tvOS is not a platform at all — it is `platform: 'ios' + target: 'tv'`, with the OS name reconstructed late and lossily by -`resolveApplePlatformName` (`src/utils/device.ts`). Meanwhile ~697 LOC of macOS code lives inside +`resolveApplePlatformName` (`src/kernel/device.ts`). Meanwhile ~697 LOC of macOS code lives inside `src/platforms/ios/`, `src/platforms/macos/devices.ts` is a 19-line stub that the iOS discovery imports (the dependency arrow points backwards), and the Apple interactor in `src/core/interactors/apple.ts` reaches into `platforms/ios`. A four-investigator survey found that ~85% of `platforms/ios` (the runner stack, diff --git a/fallow-baselines/health.json b/fallow-baselines/health.json index 2dbf1b221..2a0a3576b 100644 --- a/fallow-baselines/health.json +++ b/fallow-baselines/health.json @@ -553,7 +553,7 @@ "count": 1 } }, - "src/utils/device.ts": { + "src/kernel/device.ts": { "complexity_moderate": { "count": 1 } @@ -723,7 +723,7 @@ "src/utils/text-surface.ts:high impact", "src/utils/selector-build.ts:high impact", "src/core/batch.ts:complexity", - "src/utils/device.ts:high impact", + "src/kernel/device.ts:high impact", "src/daemon/network-log.ts:high impact", "src/commands/cli-grammar/selectors.ts:untested risk", "src/platforms/ios/xml.ts:high impact", diff --git a/plans/apple-platform-consolidation.md b/plans/apple-platform-consolidation.md index 756018363..4bade1b7f 100644 --- a/plans/apple-platform-consolidation.md +++ b/plans/apple-platform-consolidation.md @@ -28,7 +28,7 @@ each OS to its own `Platform` literal. Reasons from the code: BEFORE — Apple support is smeared across an "iOS" folder that is really the Apple engine ───────────────────────────────────────────────────────────────────────────────────────── -DeviceInfo (src/utils/device.ts) +DeviceInfo (src/kernel/device.ts) platform: ios | macos | android | linux | web ← macOS is its OWN literal … kind: simulator | emulator | device target?: mobile | tv | desktop ← … but tvOS = ios + target:'tv' (asymmetric!) diff --git a/src/__tests__/cli-client-commands.test.ts b/src/__tests__/cli-client-commands.test.ts index 0fe6512bd..000e7b2a4 100644 --- a/src/__tests__/cli-client-commands.test.ts +++ b/src/__tests__/cli-client-commands.test.ts @@ -14,7 +14,7 @@ import type { MetroReloadOptions, } from '../client.ts'; import type { SettingsUpdateOptions } from '../client-types.ts'; -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; import { resolveCliOptions } from '../utils/cli-options.ts'; test('install-from-source forwards URL and repeated headers to client.apps.installFromSource', async () => { diff --git a/src/__tests__/cli-close.test.ts b/src/__tests__/cli-close.test.ts index 0b543719c..d38276219 100644 --- a/src/__tests__/cli-close.test.ts +++ b/src/__tests__/cli-close.test.ts @@ -1,6 +1,6 @@ import { test } from 'vitest'; import assert from 'node:assert/strict'; -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; import { runCliCapture, type CapturedCliRun } from './cli-capture.ts'; function runCliWithDaemonStartupFailure(argv: string[]): Promise { diff --git a/src/__tests__/client-metro.test.ts b/src/__tests__/client-metro.test.ts index e51a8c1ec..f2d12a044 100644 --- a/src/__tests__/client-metro.test.ts +++ b/src/__tests__/client-metro.test.ts @@ -9,7 +9,7 @@ import net from 'node:net'; import os from 'node:os'; import path from 'node:path'; import { prepareMetroRuntime, reloadMetro } from '../client-metro.ts'; -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; import { isProcessAlive, waitForProcessExit } from '../utils/process-identity.ts'; const TEST_TOKEN = 'agent-device-proxy-test-token'; diff --git a/src/__tests__/client-normalizers.test.ts b/src/__tests__/client-normalizers.test.ts index b2045e1cb..a64d2f589 100644 --- a/src/__tests__/client-normalizers.test.ts +++ b/src/__tests__/client-normalizers.test.ts @@ -1,7 +1,7 @@ import { test } from 'vitest'; import assert from 'node:assert/strict'; import { normalizeOpenDevice } from '../client-normalizers.ts'; -import { PLATFORMS } from '../utils/device.ts'; +import { PLATFORMS } from '../kernel/device.ts'; test('normalizeOpenDevice accepts exactly the canonical leaf platforms', () => { for (const platform of PLATFORMS) { diff --git a/src/__tests__/client.test.ts b/src/__tests__/client.test.ts index 3c8020e49..f3076d1f0 100644 --- a/src/__tests__/client.test.ts +++ b/src/__tests__/client.test.ts @@ -3,7 +3,7 @@ import assert from 'node:assert/strict'; import { createAgentDeviceClient, type AgentDeviceClientConfig } from '../client.ts'; import { runCommand } from '../commands/command-surface.ts'; import type { DaemonRequest, DaemonResponse } from '../contracts.ts'; -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; function createTransport( handler: (req: Omit) => Promise | DaemonResponse, diff --git a/src/__tests__/contracts-schema-public.test.ts b/src/__tests__/contracts-schema-public.test.ts index bc7deddae..12a165267 100644 --- a/src/__tests__/contracts-schema-public.test.ts +++ b/src/__tests__/contracts-schema-public.test.ts @@ -40,7 +40,7 @@ const node = { test('public contracts error helpers do not load diagnostics module', () => { const errorsSource = fs.readFileSync( - path.join(import.meta.dirname, '..', 'utils', 'errors.ts'), + path.join(import.meta.dirname, '..', 'kernel', 'errors.ts'), 'utf8', ); diff --git a/src/__tests__/daemon-client-progress.test.ts b/src/__tests__/daemon-client-progress.test.ts index bc5254570..c741fb874 100644 --- a/src/__tests__/daemon-client-progress.test.ts +++ b/src/__tests__/daemon-client-progress.test.ts @@ -4,7 +4,7 @@ import type { Socket } from 'node:net'; import { test } from 'vitest'; import type { DaemonRequest, DaemonResponse } from '../daemon/types.ts'; import { readDaemonSocketProgressResponse } from '../daemon-client-progress.ts'; -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; type MockSocket = EventEmitter & { ended: boolean; diff --git a/src/__tests__/provider-device-runtime.test.ts b/src/__tests__/provider-device-runtime.test.ts index 408f589a3..bb74d4d31 100644 --- a/src/__tests__/provider-device-runtime.test.ts +++ b/src/__tests__/provider-device-runtime.test.ts @@ -11,7 +11,7 @@ import { } from '../provider-device-runtime.ts'; import type { Interactor } from '../core/interactor-types.ts'; import type { SimulatorLease } from '../daemon/lease-registry.ts'; -import type { DeviceInfo } from '../utils/device.ts'; +import type { DeviceInfo } from '../kernel/device.ts'; afterEach(() => { setActiveProviderDeviceRuntimes([]); diff --git a/src/__tests__/remote-connection.test.ts b/src/__tests__/remote-connection.test.ts index cd0183107..3334c07b1 100644 --- a/src/__tests__/remote-connection.test.ts +++ b/src/__tests__/remote-connection.test.ts @@ -24,7 +24,7 @@ import { PROXY_REMOTE_LEASE_TTL_MS, } from '../cli/commands/connection-runtime.ts'; import { stopMetroCompanion } from '../client-metro-companion.ts'; -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; import { hashRemoteConfigFile, readActiveConnectionState, diff --git a/src/__tests__/test-utils/device-fixtures.ts b/src/__tests__/test-utils/device-fixtures.ts index 02675fad2..edeffa868 100644 --- a/src/__tests__/test-utils/device-fixtures.ts +++ b/src/__tests__/test-utils/device-fixtures.ts @@ -1,4 +1,4 @@ -import type { DeviceInfo } from '../../utils/device.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; export const ANDROID_EMULATOR: DeviceInfo = { platform: 'android', diff --git a/src/backend.ts b/src/backend.ts index dcd1175a5..e0f895ddf 100644 --- a/src/backend.ts +++ b/src/backend.ts @@ -2,7 +2,7 @@ import type { AlertAction, AlertInfo } from './alert-contract.ts'; import type { AppsFilter } from './contracts/app-inventory.ts'; import type { Point, SnapshotNode, SnapshotOptions, SnapshotState } from './kernel/snapshot.ts'; import type { NetworkIncludeMode } from './contracts.ts'; -import type { DeviceTarget, Platform, PlatformSelector } from './utils/device.ts'; +import type { DeviceTarget, Platform, PlatformSelector } from './kernel/device.ts'; import type { BackMode } from './core/back-mode.ts'; import type { RepeatedInput } from './commands/command-input.ts'; import type { ClickButton } from './core/click-button.ts'; diff --git a/src/batch-contract.ts b/src/batch-contract.ts index e792f63f3..62cf5c093 100644 --- a/src/batch-contract.ts +++ b/src/batch-contract.ts @@ -1,5 +1,5 @@ import { daemonRuntimeSchema, type SessionRuntimeHints } from './contracts.ts'; -import { AppError } from './utils/errors.ts'; +import { AppError } from './kernel/errors.ts'; import { isRecord } from './utils/parsing.ts'; export const DEFAULT_BATCH_MAX_STEPS = 100; diff --git a/src/batch-policy.ts b/src/batch-policy.ts index 3489d512c..ea4552f1b 100644 --- a/src/batch-policy.ts +++ b/src/batch-policy.ts @@ -1,6 +1,6 @@ import { deriveStructuredBatchCommandNames } from './core/command-descriptor/derive.ts'; import { commandDescriptors } from './core/command-descriptor/registry.ts'; -import { AppError } from './utils/errors.ts'; +import { AppError } from './kernel/errors.ts'; /** * The exact set of command names exposed through `batch`, as a narrow union. diff --git a/src/cli-test-reporters/custom.ts b/src/cli-test-reporters/custom.ts index 9304abce6..0d2061cd1 100644 --- a/src/cli-test-reporters/custom.ts +++ b/src/cli-test-reporters/custom.ts @@ -1,7 +1,7 @@ import os from 'node:os'; import path from 'node:path'; import { pathToFileURL } from 'node:url'; -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; import type { ReplayTestReporter, ReplayTestReporterFactory } from './types.ts'; import type { ReplayTestReporterSpec } from './spec.ts'; diff --git a/src/cli-test-reporters/junit.ts b/src/cli-test-reporters/junit.ts index b86aba405..979c76fcf 100644 --- a/src/cli-test-reporters/junit.ts +++ b/src/cli-test-reporters/junit.ts @@ -1,6 +1,6 @@ import path from 'node:path'; import type { ReplaySuiteResult, ReplaySuiteTestResult } from '../daemon/types.ts'; -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; import type { ReplayTestReporter, ReplayTestReporterContext } from './types.ts'; import { appendOptionalLine, diff --git a/src/cli-test-reporters/spec.ts b/src/cli-test-reporters/spec.ts index 45c3949f4..720d9a8f2 100644 --- a/src/cli-test-reporters/spec.ts +++ b/src/cli-test-reporters/spec.ts @@ -1,4 +1,4 @@ -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; export type ReplayTestReporterSpec = | { diff --git a/src/cli.ts b/src/cli.ts index 7afaf49cf..dedfd3a18 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -1,5 +1,5 @@ import { parseRawArgs, usage, usageForCommand } from './utils/args.ts'; -import { asAppError, AppError, normalizeError } from './utils/errors.ts'; +import { asAppError, AppError, normalizeError } from './kernel/errors.ts'; import { printHumanError, printJson } from './utils/output.ts'; import { readVersion } from './utils/version.ts'; import { pathToFileURL } from 'node:url'; diff --git a/src/cli/__tests__/auth-session.test.ts b/src/cli/__tests__/auth-session.test.ts index 56e8cb07a..c477e5aa1 100644 --- a/src/cli/__tests__/auth-session.test.ts +++ b/src/cli/__tests__/auth-session.test.ts @@ -12,7 +12,7 @@ import { summarizeCliSession, writeCliSession, } from '../auth-session.ts'; -import { normalizeError } from '../../utils/errors.ts'; +import { normalizeError } from '../../kernel/errors.ts'; const baseFlags = { json: false, diff --git a/src/cli/auth-session.ts b/src/cli/auth-session.ts index 78ee8348f..9ce9add0d 100644 --- a/src/cli/auth-session.ts +++ b/src/cli/auth-session.ts @@ -1,7 +1,7 @@ import fs from 'node:fs'; import path from 'node:path'; import { runCmd } from '../utils/exec.ts'; -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; import type { CliFlags } from '../utils/cli-flags.ts'; import type { EnvMap } from '../utils/env-map.ts'; import { readCloudJsonResponse } from './cloud-response.ts'; diff --git a/src/cli/batch-steps.ts b/src/cli/batch-steps.ts index 9ac2827e8..7955bfe17 100644 --- a/src/cli/batch-steps.ts +++ b/src/cli/batch-steps.ts @@ -4,7 +4,7 @@ import { parseBatchStepRuntime } from '../batch-contract.ts'; import { readInputFromCli } from '../commands/cli-grammar.ts'; import { isCommandName, type CommandName } from '../commands/command-metadata.ts'; import type { CliFlags } from '../utils/cli-flags.ts'; -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; import { isRecord } from '../utils/parsing.ts'; type LegacyCliBatchStep = { diff --git a/src/cli/cloud-connection-profile.ts b/src/cli/cloud-connection-profile.ts index 1e183674e..5e075d63f 100644 --- a/src/cli/cloud-connection-profile.ts +++ b/src/cli/cloud-connection-profile.ts @@ -1,6 +1,6 @@ import crypto from 'node:crypto'; import type { RemoteConfigProfile } from '../remote-config-schema.ts'; -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; import type { CliFlags } from '../utils/cli-flags.ts'; import type { EnvMap } from '../utils/env-map.ts'; import { resolveCloudAccessForConnect } from './auth-session.ts'; diff --git a/src/cli/cloud-response.ts b/src/cli/cloud-response.ts index da11046d5..444a6048f 100644 --- a/src/cli/cloud-response.ts +++ b/src/cli/cloud-response.ts @@ -1,4 +1,4 @@ -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; export async function readCloudJsonResponse( response: Response, diff --git a/src/cli/commands/agent-cdp.ts b/src/cli/commands/agent-cdp.ts index f278ae79b..2daad9c24 100644 --- a/src/cli/commands/agent-cdp.ts +++ b/src/cli/commands/agent-cdp.ts @@ -1,5 +1,5 @@ import { runCmdStreaming } from '../../utils/exec.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { isRemoteBridgeBackend } from './remote-bridge.ts'; import type { SessionRuntimeHints } from '../../contracts.ts'; import type { CliFlags } from '../../utils/cli-flags.ts'; diff --git a/src/cli/commands/auth.ts b/src/cli/commands/auth.ts index 6abb2b0ed..b9ed629ec 100644 --- a/src/cli/commands/auth.ts +++ b/src/cli/commands/auth.ts @@ -1,5 +1,5 @@ import { resolveDaemonPaths } from '../../daemon/config.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { loginWithDeviceAuth, removeCliSession, summarizeCliSession } from '../auth-session.ts'; import { writeCommandOutput } from './shared.ts'; import type { ClientCommandHandler } from './router-types.ts'; diff --git a/src/cli/commands/connection-runtime.ts b/src/cli/commands/connection-runtime.ts index 634ac7cbd..e51b99a3a 100644 --- a/src/cli/commands/connection-runtime.ts +++ b/src/cli/commands/connection-runtime.ts @@ -2,7 +2,7 @@ import { resolveDaemonPaths } from '../../daemon/config.ts'; import { stopReactDevtoolsCompanion } from '../../client-react-devtools-companion.ts'; import { stopMetroTunnel } from '../../metro.ts'; import { resolveRemoteConfigProfile } from '../../remote-config.ts'; -import { resolveDevice, type DeviceInfo } from '../../utils/device.ts'; +import { resolveDevice, type DeviceInfo } from '../../kernel/device.ts'; import { shouldAgentCdpUseRemoteBridgeUrl } from './agent-cdp.ts'; import type { MetroBridgeScope } from '../../client-companion-tunnel-contract.ts'; import { @@ -16,7 +16,7 @@ import { } from '../../remote-connection-state.ts'; import { profileToCliFlags } from '../../utils/remote-config.ts'; import type { BatchStep } from '../../client-types.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import type { LeaseBackend, SessionRuntimeHints } from '../../contracts.ts'; import type { CliFlags } from '../../utils/cli-flags.ts'; import type { AgentDeviceClient, Lease } from '../../client.ts'; diff --git a/src/cli/commands/connection.ts b/src/cli/commands/connection.ts index 42d012251..8dcdf94e4 100644 --- a/src/cli/commands/connection.ts +++ b/src/cli/commands/connection.ts @@ -12,7 +12,7 @@ import { type RemoteConnectionState, type RemoteConnectionRequestMetadata, } from '../../remote-connection-state.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { resolveCloudConnectProfile } from '../cloud-connection-profile.ts'; import { resolveProxyConnectProfile } from '../proxy-connection-profile.ts'; import { diff --git a/src/cli/commands/proxy.ts b/src/cli/commands/proxy.ts index 2188fd711..d5f1d66c0 100644 --- a/src/cli/commands/proxy.ts +++ b/src/cli/commands/proxy.ts @@ -2,7 +2,7 @@ import { randomBytes } from 'node:crypto'; import { createDaemonProxyServer } from '../../daemon-proxy.ts'; import { buildDaemonHttpBaseUrl } from '../../daemon/http-contract.ts'; import { ensureDaemon, resolveClientSettings } from '../../daemon-client-lifecycle.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { colorize, supportsColor } from '../../utils/output.ts'; import type { CliFlags } from '../../utils/cli-flags.ts'; import { writeCommandOutput } from './shared.ts'; diff --git a/src/cli/commands/react-devtools.ts b/src/cli/commands/react-devtools.ts index 3090ea6fd..c64d055c2 100644 --- a/src/cli/commands/react-devtools.ts +++ b/src/cli/commands/react-devtools.ts @@ -3,7 +3,7 @@ import { ensureReactDevtoolsCompanion, stopReactDevtoolsCompanion, } from '../../client-react-devtools-companion.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { isRemoteBridgeBackend } from './remote-bridge.ts'; import type { CliFlags } from '../../utils/cli-flags.ts'; diff --git a/src/cli/commands/replay.ts b/src/cli/commands/replay.ts index 6263753c1..a9f6d24e7 100644 --- a/src/cli/commands/replay.ts +++ b/src/cli/commands/replay.ts @@ -1,7 +1,7 @@ import fs from 'node:fs'; import path from 'node:path'; import { exportReplayScriptToMaestro } from '../../compat/maestro/export-flow.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { resolveUserPath } from '../../utils/path-resolution.ts'; import { writeCommandOutput } from './shared.ts'; import type { ClientCommandHandler } from './router-types.ts'; diff --git a/src/cli/commands/screenshot.ts b/src/cli/commands/screenshot.ts index eb8072e98..883877666 100644 --- a/src/cli/commands/screenshot.ts +++ b/src/cli/commands/screenshot.ts @@ -1,5 +1,5 @@ import { formatScreenshotDiffText, formatSnapshotDiffText } from '../../utils/output.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { resolveUserPath } from '../../utils/path-resolution.ts'; import type { AgentDeviceBackend } from '../../backend.ts'; import type { AgentDeviceClient, CaptureScreenshotResult } from '../../client.ts'; diff --git a/src/cli/commands/web.ts b/src/cli/commands/web.ts index 4f68e40e7..69fecf342 100644 --- a/src/cli/commands/web.ts +++ b/src/cli/commands/web.ts @@ -3,7 +3,7 @@ import { setupManagedAgentBrowser, type AgentBrowserToolStatus, } from '../../platforms/web/agent-browser-tool.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import type { CliFlags } from '../../utils/cli-flags.ts'; import { printJson } from '../../utils/output.ts'; diff --git a/src/cli/generated-remote-config.ts b/src/cli/generated-remote-config.ts index 975289367..24bcd20e0 100644 --- a/src/cli/generated-remote-config.ts +++ b/src/cli/generated-remote-config.ts @@ -3,7 +3,7 @@ import fs from 'node:fs'; import path from 'node:path'; import { resolveRemoteConfigProfile } from '../remote-config.ts'; import type { RemoteConfigProfile, ResolvedRemoteConfigProfile } from '../remote-config-schema.ts'; -import { AppError, asAppError } from '../utils/errors.ts'; +import { AppError, asAppError } from '../kernel/errors.ts'; import type { EnvMap } from '../utils/env-map.ts'; import type { CliFlags } from '../utils/cli-flags.ts'; import { profileToCliFlags } from '../utils/remote-config.ts'; diff --git a/src/cli/proxy-connection-profile.ts b/src/cli/proxy-connection-profile.ts index fc6d70316..3e2068283 100644 --- a/src/cli/proxy-connection-profile.ts +++ b/src/cli/proxy-connection-profile.ts @@ -1,6 +1,6 @@ import crypto from 'node:crypto'; import type { RemoteConfigProfile } from '../remote-config-schema.ts'; -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; import type { CliFlags } from '../utils/cli-flags.ts'; import type { EnvMap } from '../utils/env-map.ts'; import { persistAndResolveGeneratedProfile } from './generated-remote-config.ts'; diff --git a/src/client-metro.ts b/src/client-metro.ts index 0eb59dd8d..efc6e226f 100644 --- a/src/client-metro.ts +++ b/src/client-metro.ts @@ -9,7 +9,7 @@ import type { MetroBridgeRuntimePayload, MetroRuntimeHints, } from './metro-types.ts'; -import { AppError } from './utils/errors.ts'; +import { AppError } from './kernel/errors.ts'; import { runCmdSync, runCmdDetached } from './utils/exec.ts'; import { resolveUserPath } from './utils/path-resolution.ts'; import { waitForProcessExit } from './utils/process-identity.ts'; diff --git a/src/client-normalizers.ts b/src/client-normalizers.ts index 2751a0455..867373545 100644 --- a/src/client-normalizers.ts +++ b/src/client-normalizers.ts @@ -1,10 +1,10 @@ import type { CommandFlags } from './core/dispatch.ts'; import { screenshotFlagsFromOptions } from './contracts/screenshot.ts'; import type { DaemonRequest, SessionRuntimeHints } from './daemon/types.ts'; -import { AppError, type NormalizedError } from './utils/errors.ts'; +import { AppError, type NormalizedError } from './kernel/errors.ts'; import type { SnapshotNode } from './kernel/snapshot.ts'; import { buildAppIdentifiers, buildDeviceIdentifiers } from './client-shared.ts'; -import { isPlatform } from './utils/device.ts'; +import { isPlatform } from './kernel/device.ts'; import { leaseScopeFromOptions, leaseScopeToCommandFlags, diff --git a/src/client-shared.ts b/src/client-shared.ts index 57230a73d..eba9084e9 100644 --- a/src/client-shared.ts +++ b/src/client-shared.ts @@ -14,7 +14,7 @@ import { publicSnapshotCaptureAnnotations, type SnapshotCaptureAnnotations, } from './snapshot-capture-annotations.ts'; -import type { Platform } from './utils/device.ts'; +import type { Platform } from './kernel/device.ts'; import { successText, withSuccessText } from './utils/success-text.ts'; export function buildAppIdentifiers(params: { diff --git a/src/client-types.ts b/src/client-types.ts index ca2bbbee6..4ff970547 100644 --- a/src/client-types.ts +++ b/src/client-types.ts @@ -11,7 +11,7 @@ import type { SessionIsolationMode, SessionRuntimeHints, } from './contracts.ts'; -import type { DeviceKind, DeviceTarget, Platform, PlatformSelector } from './utils/device.ts'; +import type { DeviceKind, DeviceTarget, Platform, PlatformSelector } from './kernel/device.ts'; import type { BackMode } from './core/back-mode.ts'; import type { ClickButton } from './core/click-button.ts'; import type { RecordingExportQuality } from './core/recording-export-quality.ts'; diff --git a/src/commands/batch/projection.ts b/src/commands/batch/projection.ts index bc46fbc8b..052d20391 100644 --- a/src/commands/batch/projection.ts +++ b/src/commands/batch/projection.ts @@ -9,7 +9,7 @@ import { readBatchStepRecord, } from '../../batch-contract.ts'; import type { DaemonBatchStep } from '../../core/batch.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { request } from '../cli-grammar/common.ts'; import type { CommandInput, DaemonCommandRequest, DaemonWriter } from '../cli-grammar/types.ts'; import { buildRequestFlags } from '../command-flags.ts'; diff --git a/src/commands/capture/alert.ts b/src/commands/capture/alert.ts index 73d7a5bb3..cc25e4736 100644 --- a/src/commands/capture/alert.ts +++ b/src/commands/capture/alert.ts @@ -13,7 +13,7 @@ import type { CliReader, DaemonWriter } from '../cli-grammar/types.ts'; import { defineCommandFacet } from '../family/types.ts'; import { defineFieldCommandMetadata } from '../field-command-contract.ts'; import { messageOutput } from '../output-common.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; const ALERT_COMMAND_NAME = 'alert'; diff --git a/src/commands/capture/diff.ts b/src/commands/capture/diff.ts index dc72fc0ba..401512afd 100644 --- a/src/commands/capture/diff.ts +++ b/src/commands/capture/diff.ts @@ -1,6 +1,6 @@ import { PUBLIC_COMMANDS } from '../../command-catalog.ts'; import { SNAPSHOT_FLAGS } from '../../utils/cli-flags.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { booleanField, integerField, diff --git a/src/commands/capture/runtime/diff-screenshot.ts b/src/commands/capture/runtime/diff-screenshot.ts index e1233ce0a..dc0122247 100644 --- a/src/commands/capture/runtime/diff-screenshot.ts +++ b/src/commands/capture/runtime/diff-screenshot.ts @@ -9,7 +9,7 @@ import type { ResolvedInputFile, } from '../../../io.ts'; import type { AgentDeviceRuntime, CommandContext } from '../../../runtime-contract.ts'; -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; import { compareScreenshots, type ScreenshotDiffResult, diff --git a/src/commands/capture/runtime/screenshot.ts b/src/commands/capture/runtime/screenshot.ts index ecfcabc80..fa77ce98b 100644 --- a/src/commands/capture/runtime/screenshot.ts +++ b/src/commands/capture/runtime/screenshot.ts @@ -1,4 +1,4 @@ -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; import { successText } from '../../../utils/success-text.ts'; import { resizePngFileToMaxSize } from '../../../utils/png-resize.ts'; import type { ArtifactDescriptor } from '../../../io.ts'; diff --git a/src/commands/capture/runtime/snapshot.ts b/src/commands/capture/runtime/snapshot.ts index f92bfd48c..1ca4732fe 100644 --- a/src/commands/capture/runtime/snapshot.ts +++ b/src/commands/capture/runtime/snapshot.ts @@ -8,7 +8,7 @@ import { type SnapshotCaptureAnnotations, } from '../../../snapshot-capture-annotations.ts'; import { renderSnapshotQualityWarnings } from '../../../utils/snapshot-quality.ts'; -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; import { buildSnapshotDiff, countSnapshotComparableLines } from '../../../utils/snapshot-diff.ts'; import type { SnapshotDiffLine, SnapshotDiffSummary } from '../../../utils/snapshot-diff.ts'; import type { diff --git a/src/commands/capture/settings.ts b/src/commands/capture/settings.ts index 1c6922092..5be30b3b9 100644 --- a/src/commands/capture/settings.ts +++ b/src/commands/capture/settings.ts @@ -3,7 +3,7 @@ import type { SettingsUpdateOptions } from '../../client-types.ts'; import { SETTINGS_USAGE_OVERRIDE } from '../../core/settings-contract.ts'; import type { CommandSchemaOverride } from '../../utils/cli-command-schema-types.ts'; import type { CliFlags } from '../../utils/cli-flags.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { readLocationCoordinate } from '../../utils/location-coordinates.ts'; import { defineExecutableCommand } from '../command-contract.ts'; import { enumField, numberField, requiredField, stringField } from '../command-input.ts'; diff --git a/src/commands/capture/wait.ts b/src/commands/capture/wait.ts index 2b74b714d..9b8025c98 100644 --- a/src/commands/capture/wait.ts +++ b/src/commands/capture/wait.ts @@ -2,7 +2,7 @@ import { PUBLIC_COMMANDS } from '../../command-catalog.ts'; import type { WaitCommandOptions } from '../../client-types.ts'; import { parseWaitPositionals } from '../../core/wait-positionals.ts'; import { SELECTOR_SNAPSHOT_FLAGS, type CliFlags } from '../../utils/cli-flags.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { tryParseSelectorChain } from '../../utils/selectors-parse.ts'; import { booleanField, diff --git a/src/commands/cli-grammar/common.ts b/src/commands/cli-grammar/common.ts index 27c79bda4..198d82357 100644 --- a/src/commands/cli-grammar/common.ts +++ b/src/commands/cli-grammar/common.ts @@ -5,7 +5,7 @@ import type { } from '../../client-types.ts'; import { splitSelectorFromArgs } from '../../utils/selectors-parse.ts'; import type { CliFlags } from '../../utils/cli-flags.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { compactRecord, type SelectorSnapshotInput } from '../command-input.ts'; import type { DaemonWriter, diff --git a/src/commands/command-input.ts b/src/commands/command-input.ts index f9dbc3041..20b169e37 100644 --- a/src/commands/command-input.ts +++ b/src/commands/command-input.ts @@ -9,7 +9,7 @@ import { PLATFORM_SELECTORS, type DeviceTarget, type PlatformSelector, -} from '../utils/device.ts'; +} from '../kernel/device.ts'; import type { JsonSchema } from './command-contract.ts'; const INTERACTION_TARGET_KINDS = ['ref', 'selector', 'point'] as const; diff --git a/src/commands/command-projection.ts b/src/commands/command-projection.ts index 97f2736e7..26b9bd984 100644 --- a/src/commands/command-projection.ts +++ b/src/commands/command-projection.ts @@ -3,7 +3,7 @@ import type { CommandInput, DaemonCommandRequest, DaemonWriter } from './cli-gra import { findCommandMetadata } from './command-metadata.ts'; import { readMetadataCommandFlags } from './command-flags.ts'; import { listCommandFamilyDaemonWriters } from './family/registry.ts'; -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; const daemonWriters: Record = { ...listCommandFamilyDaemonWriters(), diff --git a/src/commands/debugging/index.ts b/src/commands/debugging/index.ts index 510090e34..cc42b5f7f 100644 --- a/src/commands/debugging/index.ts +++ b/src/commands/debugging/index.ts @@ -1,4 +1,4 @@ -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import type { CommandSchemaOverride } from '../../utils/cli-command-schema-types.ts'; import { enumField, requiredField, stringField } from '../command-input.ts'; import { defineCommandFacet, defineCommandFamilyFromFacets } from '../family/types.ts'; diff --git a/src/commands/interaction/gesture.ts b/src/commands/interaction/gesture.ts index 0bb640483..eb3ef9b4b 100644 --- a/src/commands/interaction/gesture.ts +++ b/src/commands/interaction/gesture.ts @@ -1,7 +1,7 @@ import { PUBLIC_COMMANDS } from '../../command-catalog.ts'; import type { FlingOptions, RotateGestureOptions } from '../../client-types.ts'; import type { CliFlags } from '../../utils/cli-flags.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { commonInputFromFlags, direct, diff --git a/src/commands/interaction/interactions.ts b/src/commands/interaction/interactions.ts index f6a3e9eaf..6327e4972 100644 --- a/src/commands/interaction/interactions.ts +++ b/src/commands/interaction/interactions.ts @@ -10,7 +10,7 @@ import { readFillTargetFromPositionals, readInteractionTargetFromPositionals, } from '../../core/interaction-positionals.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import type { ScrollInputDirection } from './runtime/gestures.ts'; import { commonInputFromFlags, diff --git a/src/commands/interaction/runtime/gestures.ts b/src/commands/interaction/runtime/gestures.ts index 5d5bb6631..c0686da7d 100644 --- a/src/commands/interaction/runtime/gestures.ts +++ b/src/commands/interaction/runtime/gestures.ts @@ -1,4 +1,4 @@ -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; import type { Point, Rect, SnapshotNode, SnapshotState } from '../../../kernel/snapshot.ts'; import { centerOfRect } from '../../../kernel/snapshot.ts'; import { diff --git a/src/commands/interaction/runtime/interactions.test.ts b/src/commands/interaction/runtime/interactions.test.ts index 959688abd..67b2255e3 100644 --- a/src/commands/interaction/runtime/interactions.test.ts +++ b/src/commands/interaction/runtime/interactions.test.ts @@ -9,7 +9,7 @@ import { createMemorySessionStore, localCommandPolicy, } from '../../../runtime.ts'; -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; import type { Point, SnapshotState } from '../../../kernel/snapshot.ts'; import { makeSnapshotState } from '../../../__tests__/test-utils/index.ts'; diff --git a/src/commands/interaction/runtime/interactions.ts b/src/commands/interaction/runtime/interactions.ts index 51b915ba4..ed17a2c38 100644 --- a/src/commands/interaction/runtime/interactions.ts +++ b/src/commands/interaction/runtime/interactions.ts @@ -1,4 +1,4 @@ -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; import type { ClickButton } from '../../../core/click-button.ts'; import type { AgentDeviceRuntime, CommandContext } from '../../../runtime-contract.ts'; import { isFillableType } from '../../../utils/snapshot-processing.ts'; diff --git a/src/commands/interaction/runtime/resolution.ts b/src/commands/interaction/runtime/resolution.ts index 7ce21eca3..a4084b313 100644 --- a/src/commands/interaction/runtime/resolution.ts +++ b/src/commands/interaction/runtime/resolution.ts @@ -1,4 +1,4 @@ -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; import type { Point, SnapshotNode, SnapshotState } from '../../../kernel/snapshot.ts'; import { findNodeByRef, normalizeRef } from '../../../kernel/snapshot.ts'; import { resolveRectCenter } from '../../../utils/rect-center.ts'; diff --git a/src/commands/interaction/runtime/selector-read-shared.ts b/src/commands/interaction/runtime/selector-read-shared.ts index f0ae84d8b..5934b4fb0 100644 --- a/src/commands/interaction/runtime/selector-read-shared.ts +++ b/src/commands/interaction/runtime/selector-read-shared.ts @@ -3,7 +3,7 @@ import type { CommandContext, CommandSessionRecord, } from '../../../runtime-contract.ts'; -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; import type { SnapshotNode, SnapshotState } from '../../../kernel/snapshot.ts'; import { findNodeByRef, normalizeRef } from '../../../kernel/snapshot.ts'; import { isSparseSnapshotQualityVerdict } from '../../../utils/snapshot-quality.ts'; diff --git a/src/commands/interaction/runtime/selector-read.ts b/src/commands/interaction/runtime/selector-read.ts index edb739e41..901a766bd 100644 --- a/src/commands/interaction/runtime/selector-read.ts +++ b/src/commands/interaction/runtime/selector-read.ts @@ -11,7 +11,7 @@ import { type SnapshotQualityVerdict, } from '../../../utils/snapshot-quality.ts'; import type { AgentDeviceRuntime, CommandContext } from '../../../runtime-contract.ts'; -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; import { findSelectorChainMatch, formatSelectorFailure, diff --git a/src/commands/interaction/selectors.ts b/src/commands/interaction/selectors.ts index 1fefa159b..1dc7f9e15 100644 --- a/src/commands/interaction/selectors.ts +++ b/src/commands/interaction/selectors.ts @@ -1,7 +1,7 @@ import { PUBLIC_COMMANDS } from '../../command-catalog.ts'; import type { FindOptions, IsOptions } from '../../client-types.ts'; import type { CliFlags } from '../../utils/cli-flags.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { direct, optionalCliNumber, diff --git a/src/commands/io-policy.ts b/src/commands/io-policy.ts index 83be18ce8..bba7d62b9 100644 --- a/src/commands/io-policy.ts +++ b/src/commands/io-policy.ts @@ -9,7 +9,7 @@ import type { TemporaryFile, } from '../io.ts'; import type { AgentDeviceRuntime } from '../runtime-contract.ts'; -import { AppError, asAppError } from '../utils/errors.ts'; +import { AppError, asAppError } from '../kernel/errors.ts'; export async function resolveCommandInput( runtime: AgentDeviceRuntime, diff --git a/src/commands/management/install.ts b/src/commands/management/install.ts index f7adc3b81..1b5c0aa8d 100644 --- a/src/commands/management/install.ts +++ b/src/commands/management/install.ts @@ -2,7 +2,7 @@ import { INTERNAL_COMMANDS, PUBLIC_COMMANDS } from '../../command-catalog.ts'; import type { DaemonInstallSource } from '../../contracts.ts'; import type { CliFlags } from '../../utils/cli-flags.ts'; import type { CommandSchemaOverride } from '../../utils/cli-command-schema-types.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { parseGitHubActionsArtifactInstallSourceSpec } from '../../utils/install-source-config.ts'; import { booleanField, diff --git a/src/commands/management/runtime/admin.ts b/src/commands/management/runtime/admin.ts index ae018301f..168238c5e 100644 --- a/src/commands/management/runtime/admin.ts +++ b/src/commands/management/runtime/admin.ts @@ -7,7 +7,7 @@ import type { BackendInstallSource, } from '../../../backend.ts'; import type { AgentDeviceRuntime, CommandContext } from '../../../runtime-contract.ts'; -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; import { successText } from '../../../utils/success-text.ts'; import { toBackendResult, diff --git a/src/commands/management/runtime/apps.ts b/src/commands/management/runtime/apps.ts index b78f22f7f..fe653ad62 100644 --- a/src/commands/management/runtime/apps.ts +++ b/src/commands/management/runtime/apps.ts @@ -9,7 +9,7 @@ import type { import type { FileInputRef } from '../../../io.ts'; import type { AgentDeviceRuntime, CommandContext } from '../../../runtime-contract.ts'; import { assertResolvedAppsFilter } from '../app-inventory-contract.ts'; -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; import { successText } from '../../../utils/success-text.ts'; import { resolveCommandInput } from '../../io-policy.ts'; import { diff --git a/src/commands/management/session.ts b/src/commands/management/session.ts index 8023bd693..2c55ec435 100644 --- a/src/commands/management/session.ts +++ b/src/commands/management/session.ts @@ -1,4 +1,4 @@ -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import type { CommandSchemaOverride } from '../../utils/cli-command-schema-types.ts'; import { enumField } from '../command-input.ts'; import { defineExecutableCommand } from '../command-contract.ts'; diff --git a/src/commands/metro/index.ts b/src/commands/metro/index.ts index 02c3fac6a..a8461e7c7 100644 --- a/src/commands/metro/index.ts +++ b/src/commands/metro/index.ts @@ -5,7 +5,7 @@ import type { MetroReloadOptions, MetroReloadResult, } from '../../client-types.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import type { CommandSchemaOverride } from '../../utils/cli-command-schema-types.ts'; import { booleanField, diff --git a/src/commands/observability/index.ts b/src/commands/observability/index.ts index bfb7b865b..a0124f2e6 100644 --- a/src/commands/observability/index.ts +++ b/src/commands/observability/index.ts @@ -1,6 +1,6 @@ import type { LogsOptions, NetworkOptions } from '../../client-types.ts'; import { NETWORK_INCLUDE_MODES, type NetworkIncludeMode } from '../../contracts.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { parseStringMember } from '../../utils/string-enum.ts'; import type { CommandSchemaOverride } from '../../utils/cli-command-schema-types.ts'; import { defineCommandFacet, defineCommandFamilyFromFacets } from '../family/types.ts'; diff --git a/src/commands/observability/runtime/diagnostics.ts b/src/commands/observability/runtime/diagnostics.ts index fa0f0136d..f98304144 100644 --- a/src/commands/observability/runtime/diagnostics.ts +++ b/src/commands/observability/runtime/diagnostics.ts @@ -8,7 +8,7 @@ import type { BackendReadLogsOptions, } from '../../../backend.ts'; import type { AgentDeviceRuntime, CommandContext } from '../../../runtime-contract.ts'; -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; import { requireIntInRange } from '../../../utils/validation.ts'; import { formatLogsResult, formatNetworkResult, formatPerfResult } from './diagnostics-format.ts'; import type { diff --git a/src/commands/perf/index.ts b/src/commands/perf/index.ts index cd79c6f25..b34bfbfe1 100644 --- a/src/commands/perf/index.ts +++ b/src/commands/perf/index.ts @@ -1,5 +1,5 @@ import type { PerfOptions } from '../../client-types.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import type { CommandSchemaOverride } from '../../utils/cli-command-schema-types.ts'; import { enumField, stringField } from '../command-input.ts'; import { defineCommandFacet, defineCommandFamilyFromFacets } from '../family/types.ts'; diff --git a/src/commands/react-native/index.ts b/src/commands/react-native/index.ts index d2274c55c..041bc29e0 100644 --- a/src/commands/react-native/index.ts +++ b/src/commands/react-native/index.ts @@ -1,4 +1,4 @@ -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import type { CommandSchemaOverride } from '../../utils/cli-command-schema-types.ts'; import { defineCommandFacet, defineCommandFamilyFromFacets } from '../family/types.ts'; import { defineExecutableCommand } from '../command-contract.ts'; diff --git a/src/commands/recording/index.ts b/src/commands/recording/index.ts index a931a7c4b..16eaee504 100644 --- a/src/commands/recording/index.ts +++ b/src/commands/recording/index.ts @@ -1,6 +1,6 @@ import type { RecordOptions } from '../../client-types.ts'; import { RECORDING_EXPORT_QUALITIES } from '../../core/recording-export-quality.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import type { CommandSchemaOverride } from '../../utils/cli-command-schema-types.ts'; import { defineCommandFacet, defineCommandFamilyFromFacets } from '../family/types.ts'; import { defineExecutableCommand } from '../command-contract.ts'; diff --git a/src/commands/recording/runtime/recording.ts b/src/commands/recording/runtime/recording.ts index c0f4518c9..7da485102 100644 --- a/src/commands/recording/runtime/recording.ts +++ b/src/commands/recording/runtime/recording.ts @@ -6,7 +6,7 @@ import type { } from '../../../backend.ts'; import type { ArtifactDescriptor, FileOutputRef } from '../../../io.ts'; import type { CommandContext } from '../../../runtime-contract.ts'; -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; import { successText } from '../../../utils/success-text.ts'; import { requireIntInRange } from '../../../utils/validation.ts'; import { diff --git a/src/commands/system/index.ts b/src/commands/system/index.ts index fb157f8bc..f2bc0c048 100644 --- a/src/commands/system/index.ts +++ b/src/commands/system/index.ts @@ -2,7 +2,7 @@ import type { ClipboardCommandOptions } from '../../client-types.ts'; import type { BackMode } from '../../core/back-mode.ts'; import { BACK_MODES } from '../../core/back-mode.ts'; import { parseDeviceRotation, DEVICE_ROTATIONS } from '../../core/device-rotation.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import type { CommandSchemaOverride } from '../../utils/cli-command-schema-types.ts'; import { defineCommandFacet, defineCommandFamilyFromFacets } from '../family/types.ts'; import { defineExecutableCommand } from '../command-contract.ts'; diff --git a/src/commands/system/runtime/system.ts b/src/commands/system/runtime/system.ts index 617f8793d..aa8d9099a 100644 --- a/src/commands/system/runtime/system.ts +++ b/src/commands/system/runtime/system.ts @@ -7,7 +7,7 @@ import type { } from '../../../backend.ts'; import type { CommandContext } from '../../../runtime-contract.ts'; import type { BackMode } from '../../../core/back-mode.ts'; -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; import { successText } from '../../../utils/success-text.ts'; import { requireIntInRange } from '../../../utils/validation.ts'; import { isKeyboardAction } from '../../../utils/keyboard-actions.ts'; diff --git a/src/commands/text.ts b/src/commands/text.ts index 4143bfaf8..0ae4bd7f8 100644 --- a/src/commands/text.ts +++ b/src/commands/text.ts @@ -1,4 +1,4 @@ -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; export function normalizeOptionalText( value: string | undefined, diff --git a/src/compat/__tests__/replay-input.test.ts b/src/compat/__tests__/replay-input.test.ts index d7d31fdfb..0ee6f52c2 100644 --- a/src/compat/__tests__/replay-input.test.ts +++ b/src/compat/__tests__/replay-input.test.ts @@ -1,6 +1,6 @@ import { test } from 'vitest'; import assert from 'node:assert/strict'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { parseReplayInput } from '../replay-input.ts'; test('parseReplayInput routes compat replay scripts through the selected parser', () => { diff --git a/src/compat/maestro/__tests__/export-flow.test.ts b/src/compat/maestro/__tests__/export-flow.test.ts index a337d5252..4732d2ff7 100644 --- a/src/compat/maestro/__tests__/export-flow.test.ts +++ b/src/compat/maestro/__tests__/export-flow.test.ts @@ -1,6 +1,6 @@ import { parseAllDocuments } from 'yaml'; import { describe, expect, test } from 'vitest'; -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; import { exportReplayScriptToMaestro } from '../export-flow.ts'; describe('exportReplayScriptToMaestro', () => { diff --git a/src/compat/maestro/__tests__/points.test.ts b/src/compat/maestro/__tests__/points.test.ts index 66e1b3c86..8bf4b3807 100644 --- a/src/compat/maestro/__tests__/points.test.ts +++ b/src/compat/maestro/__tests__/points.test.ts @@ -1,6 +1,6 @@ import assert from 'node:assert/strict'; import { test, expect } from 'vitest'; -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; import { formatMaestroPoint, parseAbsolutePoint, parseMaestroPoint } from '../points.ts'; test('formatMaestroPoint serializes coordinate pairs', () => { diff --git a/src/compat/maestro/__tests__/replay-flow.test.ts b/src/compat/maestro/__tests__/replay-flow.test.ts index c7efc4a5c..949e98e11 100644 --- a/src/compat/maestro/__tests__/replay-flow.test.ts +++ b/src/compat/maestro/__tests__/replay-flow.test.ts @@ -3,7 +3,7 @@ import assert from 'node:assert/strict'; import fs from 'node:fs'; import os from 'node:os'; import path from 'node:path'; -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; import { parseMaestroReplayFlow } from '../replay-flow.ts'; test('parseMaestroReplayFlow converts a supported Maestro command subset', () => { diff --git a/src/compat/maestro/__tests__/runtime-targets.test.ts b/src/compat/maestro/__tests__/runtime-targets.test.ts index a4a68083f..fc6513155 100644 --- a/src/compat/maestro/__tests__/runtime-targets.test.ts +++ b/src/compat/maestro/__tests__/runtime-targets.test.ts @@ -1,7 +1,7 @@ import assert from 'node:assert/strict'; import { test, expect } from 'vitest'; import type { SnapshotNode, SnapshotState } from '../../../kernel/snapshot.ts'; -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; import { extractMaestroVisibleTextQuery, readMaestroSelectorPlatform, diff --git a/src/compat/maestro/command-mapper.ts b/src/compat/maestro/command-mapper.ts index 65da4f052..0d0170acf 100644 --- a/src/compat/maestro/command-mapper.ts +++ b/src/compat/maestro/command-mapper.ts @@ -1,5 +1,5 @@ import type { SessionAction } from '../../daemon/types.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { convertLaunchApp, convertStopApp } from './device-actions.ts'; import { convertDoubleTapOn, diff --git a/src/compat/maestro/device-actions.ts b/src/compat/maestro/device-actions.ts index 433629b0e..a6f2b7e4c 100644 --- a/src/compat/maestro/device-actions.ts +++ b/src/compat/maestro/device-actions.ts @@ -1,5 +1,5 @@ import type { SessionAction } from '../../daemon/types.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { action, assertOnlyKeys, diff --git a/src/compat/maestro/export-flow.ts b/src/compat/maestro/export-flow.ts index 1b21fb307..c8fd49762 100644 --- a/src/compat/maestro/export-flow.ts +++ b/src/compat/maestro/export-flow.ts @@ -1,7 +1,7 @@ import type { SessionAction } from '../../daemon/types.ts'; import { parseSelectorChain, type Selector } from '../../daemon/selectors.ts'; import type { SelectorTerm } from '../../utils/selectors-parse.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { parseReplayScriptDetailed, readReplayScriptMetadata, diff --git a/src/compat/maestro/flow-control.ts b/src/compat/maestro/flow-control.ts index dfa0496b4..8d486c678 100644 --- a/src/compat/maestro/flow-control.ts +++ b/src/compat/maestro/flow-control.ts @@ -1,5 +1,5 @@ import type { SessionAction } from '../../daemon/types.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { maestroSelector } from './interactions.ts'; import { action, diff --git a/src/compat/maestro/flow-yaml.ts b/src/compat/maestro/flow-yaml.ts index 96fec12b9..604dc5c59 100644 --- a/src/compat/maestro/flow-yaml.ts +++ b/src/compat/maestro/flow-yaml.ts @@ -1,5 +1,5 @@ import { parseAllDocuments, stringify } from 'yaml'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; export function parseMaestroYamlDocuments(script: string): unknown[] { const documents = parseAllDocuments(script); diff --git a/src/compat/maestro/interactions.ts b/src/compat/maestro/interactions.ts index f37a8f5b5..e26427343 100644 --- a/src/compat/maestro/interactions.ts +++ b/src/compat/maestro/interactions.ts @@ -1,5 +1,5 @@ import type { SessionAction } from '../../daemon/types.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { action, assertOnlyKeys, diff --git a/src/compat/maestro/replay-flow.ts b/src/compat/maestro/replay-flow.ts index db9b9a316..371090035 100644 --- a/src/compat/maestro/replay-flow.ts +++ b/src/compat/maestro/replay-flow.ts @@ -1,7 +1,7 @@ import fs from 'node:fs'; import path from 'node:path'; import type { SessionAction } from '../../daemon/types.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { convertMaestroCommandWithLine } from './command-mapper.ts'; import { parseMaestroYamlDocuments } from './flow-yaml.ts'; import { MAESTRO_RUNTIME_COMMAND } from './runtime-commands.ts'; diff --git a/src/compat/maestro/run-script.ts b/src/compat/maestro/run-script.ts index 2b6602690..fac663d35 100644 --- a/src/compat/maestro/run-script.ts +++ b/src/compat/maestro/run-script.ts @@ -2,7 +2,7 @@ import fs from 'node:fs'; import path from 'node:path'; import vm from 'node:vm'; import type { SessionAction } from '../../daemon/types.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { runCmdSync } from '../../utils/exec.ts'; import { MAESTRO_RUNTIME_COMMAND } from './runtime-commands.ts'; import { diff --git a/src/compat/maestro/runtime-targets.ts b/src/compat/maestro/runtime-targets.ts index 656a164a3..1b90298b7 100644 --- a/src/compat/maestro/runtime-targets.ts +++ b/src/compat/maestro/runtime-targets.ts @@ -1,4 +1,4 @@ -import type { Platform } from '../../utils/device.ts'; +import type { Platform } from '../../kernel/device.ts'; import type { ElementSelectorKey } from '../../core/interactor-types.ts'; import type { Rect, SnapshotNode, SnapshotState } from '../../kernel/snapshot.ts'; import { parseSelectorChain } from '../../daemon/selectors.ts'; diff --git a/src/compat/maestro/runtime.ts b/src/compat/maestro/runtime.ts index 1ade30c4b..e1b03e4b5 100644 --- a/src/compat/maestro/runtime.ts +++ b/src/compat/maestro/runtime.ts @@ -1,4 +1,4 @@ -import { asAppError } from '../../utils/errors.ts'; +import { asAppError } from '../../kernel/errors.ts'; import type { ReplayVarScope } from '../../replay/vars.ts'; import type { DaemonInvokeFn, DaemonResponse } from '../../daemon/types.ts'; import { executeRunScriptFile } from './run-script.ts'; diff --git a/src/compat/maestro/support.ts b/src/compat/maestro/support.ts index 1dc5a56f7..c2b3cc58a 100644 --- a/src/compat/maestro/support.ts +++ b/src/compat/maestro/support.ts @@ -1,5 +1,5 @@ import type { SessionAction } from '../../daemon/types.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { MAESTRO_COMPAT_TRACKER_URL, MAESTRO_NEW_ISSUE_URL } from './support-matrix.ts'; import type { MaestroCommand, MaestroFlowConfig, MaestroParseContext } from './types.ts'; diff --git a/src/compat/replay-input.ts b/src/compat/replay-input.ts index 57b7cf8f8..9680d46d4 100644 --- a/src/compat/replay-input.ts +++ b/src/compat/replay-input.ts @@ -1,5 +1,5 @@ import type { CommandFlags } from '../core/dispatch.ts'; -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; import { collectReplayShellEnv, parseReplayCliEnvEntries, diff --git a/src/contracts.ts b/src/contracts.ts index c7b45e693..1f88e2455 100644 --- a/src/contracts.ts +++ b/src/contracts.ts @@ -1,5 +1,5 @@ -export type { AppErrorCode } from './utils/errors.ts'; -export { defaultHintForCode, normalizeError } from './utils/errors.ts'; +export type { AppErrorCode } from './kernel/errors.ts'; +export { defaultHintForCode, normalizeError } from './kernel/errors.ts'; export type { DebugSymbolsCrashFrame, DebugSymbolsCrashSummary, @@ -7,8 +7,8 @@ export type { DebugSymbolsOptions, DebugSymbolsResult, } from './contracts/debug-symbols.ts'; -import type { PlatformSelector } from './utils/device.ts'; -import { PLATFORM_SELECTORS } from './utils/device.ts'; +import type { PlatformSelector } from './kernel/device.ts'; +import { PLATFORM_SELECTORS } from './kernel/device.ts'; export type SessionRuntimeHints = { platform?: 'ios' | 'android'; diff --git a/src/contracts/app-inventory.ts b/src/contracts/app-inventory.ts index f18be14ec..9886498e0 100644 --- a/src/contracts/app-inventory.ts +++ b/src/contracts/app-inventory.ts @@ -1,4 +1,4 @@ -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; export type AppsFilter = 'user-installed' | 'all'; diff --git a/src/contracts/device.ts b/src/contracts/device.ts index 2ae2bcbc1..aa2e8cff8 100644 --- a/src/contracts/device.ts +++ b/src/contracts/device.ts @@ -1,4 +1,4 @@ -import type { DeviceKind, DeviceTarget, Platform } from '../utils/device.ts'; +import type { DeviceKind, DeviceTarget, Platform } from '../kernel/device.ts'; import type { TargetShutdownResult } from '../target-shutdown-contract.ts'; /** diff --git a/src/contracts/screenshot.ts b/src/contracts/screenshot.ts index a6e8c64f9..7a8f58c2d 100644 --- a/src/contracts/screenshot.ts +++ b/src/contracts/screenshot.ts @@ -1,4 +1,4 @@ -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; export const SCREENSHOT_COMMAND_FLAG_KEYS = [ 'out', diff --git a/src/core/__tests__/app-events.test.ts b/src/core/__tests__/app-events.test.ts index a2ebee940..4be66a317 100644 --- a/src/core/__tests__/app-events.test.ts +++ b/src/core/__tests__/app-events.test.ts @@ -1,7 +1,7 @@ import { test } from 'vitest'; import assert from 'node:assert/strict'; import { parseTriggerAppEventArgs } from '../app-events.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; test('parseTriggerAppEventArgs validates event name format', () => { assert.throws( diff --git a/src/core/__tests__/capabilities.test.ts b/src/core/__tests__/capabilities.test.ts index 062f6546f..ea960aed1 100644 --- a/src/core/__tests__/capabilities.test.ts +++ b/src/core/__tests__/capabilities.test.ts @@ -1,7 +1,7 @@ import { test } from 'vitest'; import assert from 'node:assert/strict'; import { isCommandSupportedOnDevice, unsupportedHintForDevice } from '../capabilities.ts'; -import { matchesPlatformSelector, type DeviceInfo } from '../../utils/device.ts'; +import { matchesPlatformSelector, type DeviceInfo } from '../../kernel/device.ts'; import { WEB_DESKTOP_DEVICE } from '../../__tests__/test-utils/index.ts'; const iosSimulator: DeviceInfo = { diff --git a/src/core/__tests__/dispatch-interactions.test.ts b/src/core/__tests__/dispatch-interactions.test.ts index 91c7800cd..82e478e33 100644 --- a/src/core/__tests__/dispatch-interactions.test.ts +++ b/src/core/__tests__/dispatch-interactions.test.ts @@ -20,7 +20,7 @@ import { } from '../dispatch-interactions.ts'; import type { Interactor } from '../interactor-types.ts'; import type { RunnerCommand } from '../../platforms/ios/runner-contract.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { ANDROID_EMULATOR, IOS_SIMULATOR } from '../../__tests__/test-utils/device-fixtures.ts'; vi.mock('../../platforms/ios/macos-helper.ts', async (importOriginal) => { diff --git a/src/core/__tests__/dispatch-open.test.ts b/src/core/__tests__/dispatch-open.test.ts index 9c18cac26..0a61844ed 100644 --- a/src/core/__tests__/dispatch-open.test.ts +++ b/src/core/__tests__/dispatch-open.test.ts @@ -1,8 +1,8 @@ import { beforeEach, test, vi } from 'vitest'; import assert from 'node:assert/strict'; import { dispatchCommand } from '../dispatch.ts'; -import { AppError } from '../../utils/errors.ts'; -import type { DeviceInfo } from '../../utils/device.ts'; +import { AppError } from '../../kernel/errors.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; import { openIosApp, setIosSetting } from '../../platforms/ios/apps.ts'; import { openAndroidApp } from '../../platforms/android/app-lifecycle.ts'; import { setAndroidSetting } from '../../platforms/android/settings.ts'; diff --git a/src/core/__tests__/dispatch-pinch.test.ts b/src/core/__tests__/dispatch-pinch.test.ts index f28caf131..cca605c92 100644 --- a/src/core/__tests__/dispatch-pinch.test.ts +++ b/src/core/__tests__/dispatch-pinch.test.ts @@ -1,7 +1,7 @@ import { test } from 'vitest'; import assert from 'node:assert/strict'; import { dispatchCommand } from '../dispatch.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { MACOS_DEVICE, TVOS_SIMULATOR } from '../../__tests__/test-utils/device-fixtures.ts'; test('dispatch pinch rejects helper-backed macOS surfaces', async () => { diff --git a/src/core/__tests__/dispatch-push.test.ts b/src/core/__tests__/dispatch-push.test.ts index d8b31615d..05e5e1466 100644 --- a/src/core/__tests__/dispatch-push.test.ts +++ b/src/core/__tests__/dispatch-push.test.ts @@ -4,7 +4,7 @@ import { promises as fs } from 'node:fs'; import os from 'node:os'; import path from 'node:path'; import { dispatchCommand } from '../dispatch.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { ANDROID_EMULATOR } from '../../__tests__/test-utils/device-fixtures.ts'; test('dispatch push reports missing payload file as INVALID_ARGS', async () => { diff --git a/src/core/__tests__/dispatch-resolve.test.ts b/src/core/__tests__/dispatch-resolve.test.ts index 79c6a69ae..794b35ba1 100644 --- a/src/core/__tests__/dispatch-resolve.test.ts +++ b/src/core/__tests__/dispatch-resolve.test.ts @@ -20,8 +20,8 @@ import { withDeviceInventoryProvider, withResolveTargetDeviceCacheScope, } from '../dispatch-resolve.ts'; -import type { DeviceInfo } from '../../utils/device.ts'; -import { AppError } from '../../utils/errors.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; +import { AppError } from '../../kernel/errors.ts'; const physical: DeviceInfo = { platform: 'ios', diff --git a/src/core/__tests__/dispatch-scroll.test.ts b/src/core/__tests__/dispatch-scroll.test.ts index 82bee78d8..a030fbd9e 100644 --- a/src/core/__tests__/dispatch-scroll.test.ts +++ b/src/core/__tests__/dispatch-scroll.test.ts @@ -2,7 +2,7 @@ import { test } from 'vitest'; import assert from 'node:assert/strict'; import { dispatchCommand } from '../dispatch.ts'; import { handleLongPressCommand, handleScrollCommand } from '../dispatch-interactions.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import type { Interactor } from '../interactor-types.ts'; import { IOS_SIMULATOR } from '../../__tests__/test-utils/device-fixtures.ts'; diff --git a/src/core/__tests__/dispatch-series.test.ts b/src/core/__tests__/dispatch-series.test.ts index 6593ee8b7..eda16a0fc 100644 --- a/src/core/__tests__/dispatch-series.test.ts +++ b/src/core/__tests__/dispatch-series.test.ts @@ -6,8 +6,8 @@ import { shouldUseIosPressSequence, chunkRunnerSequenceStepsByBudget, } from '../dispatch-series.ts'; -import { AppError } from '../../utils/errors.ts'; -import type { DeviceInfo } from '../../utils/device.ts'; +import { AppError } from '../../kernel/errors.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; const iosDevice: DeviceInfo = { platform: 'ios', id: 'test', name: 'iPhone', kind: 'simulator' }; const androidDevice: DeviceInfo = { diff --git a/src/core/__tests__/dispatch-target.test.ts b/src/core/__tests__/dispatch-target.test.ts index f21975d7d..55f9a28c2 100644 --- a/src/core/__tests__/dispatch-target.test.ts +++ b/src/core/__tests__/dispatch-target.test.ts @@ -1,7 +1,7 @@ import { test } from 'vitest'; import assert from 'node:assert/strict'; import { resolveTargetDevice } from '../dispatch.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; test('resolveTargetDevice requires platform when target selector is provided', async () => { await assert.rejects( diff --git a/src/core/__tests__/dispatch-trigger-app-event.test.ts b/src/core/__tests__/dispatch-trigger-app-event.test.ts index 0f646e468..6cdbbe8bc 100644 --- a/src/core/__tests__/dispatch-trigger-app-event.test.ts +++ b/src/core/__tests__/dispatch-trigger-app-event.test.ts @@ -4,7 +4,7 @@ import { promises as fs } from 'node:fs'; import os from 'node:os'; import path from 'node:path'; import { dispatchCommand } from '../dispatch.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { ANDROID_EMULATOR, IOS_DEVICE, diff --git a/src/core/__tests__/dispatch-type.test.ts b/src/core/__tests__/dispatch-type.test.ts index e9e527daf..06510e4ca 100644 --- a/src/core/__tests__/dispatch-type.test.ts +++ b/src/core/__tests__/dispatch-type.test.ts @@ -1,7 +1,7 @@ import { test } from 'vitest'; import assert from 'node:assert/strict'; import { dispatchCommand } from '../dispatch.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { ANDROID_EMULATOR } from '../../__tests__/test-utils/device-fixtures.ts'; test('dispatch type rejects ref-shaped first positional with a repair hint', async () => { diff --git a/src/core/__tests__/scroll-gesture.test.ts b/src/core/__tests__/scroll-gesture.test.ts index e1606f4cc..db7857c54 100644 --- a/src/core/__tests__/scroll-gesture.test.ts +++ b/src/core/__tests__/scroll-gesture.test.ts @@ -1,6 +1,6 @@ import { test } from 'vitest'; import assert from 'node:assert/strict'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { assertScrollGestureInput, buildScrollGesturePlan, diff --git a/src/core/__tests__/web-interactor.test.ts b/src/core/__tests__/web-interactor.test.ts index a4a49c1fe..01c8e78f0 100644 --- a/src/core/__tests__/web-interactor.test.ts +++ b/src/core/__tests__/web-interactor.test.ts @@ -1,7 +1,7 @@ import assert from 'node:assert/strict'; import { test } from 'vitest'; import { createWebInteractor } from '../interactors/web.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { withWebProvider, type WebProvider } from '../../platforms/web/provider.ts'; test('web interactor delegates first-slice operations to the scoped provider', async () => { diff --git a/src/core/app-events.ts b/src/core/app-events.ts index e12c36f64..29b0f478c 100644 --- a/src/core/app-events.ts +++ b/src/core/app-events.ts @@ -1,5 +1,5 @@ -import type { DeviceInfo } from '../utils/device.ts'; -import { AppError } from '../utils/errors.ts'; +import type { DeviceInfo } from '../kernel/device.ts'; +import { AppError } from '../kernel/errors.ts'; const APP_EVENT_NAME_PATTERN = /^[A-Za-z0-9_.:-]{1,64}$/; const MAX_APP_EVENT_PAYLOAD_BYTES = 8 * 1024; diff --git a/src/core/batch.ts b/src/core/batch.ts index 1631e5012..0d8f5fc76 100644 --- a/src/core/batch.ts +++ b/src/core/batch.ts @@ -1,5 +1,5 @@ import { type DaemonRequest, type DaemonResponse } from '../contracts.ts'; -import { AppError, asAppError } from '../utils/errors.ts'; +import { AppError, asAppError } from '../kernel/errors.ts'; import { isRecord } from '../utils/parsing.ts'; import { DEFAULT_BATCH_MAX_STEPS, diff --git a/src/core/capabilities.ts b/src/core/capabilities.ts index 8cffde35c..8981622f1 100644 --- a/src/core/capabilities.ts +++ b/src/core/capabilities.ts @@ -2,7 +2,7 @@ import { deriveCapabilityMatrix } from './command-descriptor/derive.ts'; import { commandDescriptors } from './command-descriptor/registry.ts'; import { deriveCapabilityForPlatform } from './platform-descriptor/derive.ts'; import { platformDescriptors } from './platform-descriptor/registry.ts'; -import type { DeviceInfo } from '../utils/device.ts'; +import type { DeviceInfo } from '../kernel/device.ts'; type KindMatrix = { simulator?: boolean; diff --git a/src/core/click-button.ts b/src/core/click-button.ts index da35ff079..75ab09eb6 100644 --- a/src/core/click-button.ts +++ b/src/core/click-button.ts @@ -1,4 +1,4 @@ -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; export const CLICK_BUTTONS = ['primary', 'secondary', 'middle'] as const; export type ClickButton = (typeof CLICK_BUTTONS)[number]; diff --git a/src/core/command-descriptor/registry.ts b/src/core/command-descriptor/registry.ts index fa539b450..d08824438 100644 --- a/src/core/command-descriptor/registry.ts +++ b/src/core/command-descriptor/registry.ts @@ -5,7 +5,7 @@ import { } from '../../command-catalog.ts'; import type { CommandCapability } from '../capabilities.ts'; import type { DaemonRequest } from '../../daemon/types.ts'; -import type { DeviceInfo } from '../../utils/device.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; import type { CommandDescriptor } from './types.ts'; // --------------------------------------------------------------------------- diff --git a/src/core/device-rotation.ts b/src/core/device-rotation.ts index c4cbd1121..969ff57f1 100644 --- a/src/core/device-rotation.ts +++ b/src/core/device-rotation.ts @@ -1,4 +1,4 @@ -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; export const DEVICE_ROTATIONS = [ 'portrait', diff --git a/src/core/dispatch-interactions.ts b/src/core/dispatch-interactions.ts index 484e85893..e0794ac9a 100644 --- a/src/core/dispatch-interactions.ts +++ b/src/core/dispatch-interactions.ts @@ -1,5 +1,5 @@ -import { AppError } from '../utils/errors.ts'; -import type { DeviceInfo } from '../utils/device.ts'; +import { AppError } from '../kernel/errors.ts'; +import type { DeviceInfo } from '../kernel/device.ts'; import { successText, withSuccessText } from '../utils/success-text.ts'; import { findMistargetedTypeRefToken } from '../utils/type-target-warning.ts'; import { diff --git a/src/core/dispatch-payload.ts b/src/core/dispatch-payload.ts index c84ef2745..973fbd409 100644 --- a/src/core/dispatch-payload.ts +++ b/src/core/dispatch-payload.ts @@ -1,5 +1,5 @@ import { promises as fs } from 'node:fs'; -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; import { resolvePayloadInput } from '../utils/payload-input.ts'; export async function readNotificationPayload( diff --git a/src/core/dispatch-resolve.ts b/src/core/dispatch-resolve.ts index 1b8ea593f..4318c4308 100644 --- a/src/core/dispatch-resolve.ts +++ b/src/core/dispatch-resolve.ts @@ -1,5 +1,5 @@ import { AsyncLocalStorage } from 'node:async_hooks'; -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; import { isApplePlatform, resolveDevice, @@ -7,7 +7,7 @@ import { type DeviceInfo, type DeviceTarget, type PlatformSelector, -} from '../utils/device.ts'; +} from '../kernel/device.ts'; import { withDiagnosticTimer } from '../utils/diagnostics.ts'; import { resolveAndroidSerialAllowlist, diff --git a/src/core/dispatch-series.ts b/src/core/dispatch-series.ts index 9c0d00423..ca8535f1e 100644 --- a/src/core/dispatch-series.ts +++ b/src/core/dispatch-series.ts @@ -1,4 +1,4 @@ -import { isApplePlatform, type DeviceInfo } from '../utils/device.ts'; +import { isApplePlatform, type DeviceInfo } from '../kernel/device.ts'; import { sleep } from '../utils/timeouts.ts'; export { requireIntInRange } from '../utils/validation.ts'; diff --git a/src/core/dispatch.ts b/src/core/dispatch.ts index 5b7da6a54..cca5a379d 100644 --- a/src/core/dispatch.ts +++ b/src/core/dispatch.ts @@ -1,7 +1,7 @@ import { promises as fs } from 'node:fs'; import pathModule from 'node:path'; -import { AppError } from '../utils/errors.ts'; -import type { DeviceInfo } from '../utils/device.ts'; +import { AppError } from '../kernel/errors.ts'; +import type { DeviceInfo } from '../kernel/device.ts'; import { getInteractor } from './interactors.ts'; import type { Interactor, RunnerContext } from './interactor-types.ts'; import { isDeepLinkTarget } from './open-target.ts'; diff --git a/src/core/interactors.ts b/src/core/interactors.ts index f018de91b..7f7140e9b 100644 --- a/src/core/interactors.ts +++ b/src/core/interactors.ts @@ -1,5 +1,5 @@ -import type { DeviceInfo } from '../utils/device.ts'; -import { AppError } from '../utils/errors.ts'; +import type { DeviceInfo } from '../kernel/device.ts'; +import { AppError } from '../kernel/errors.ts'; import { getProviderDeviceInteractor, isActiveProviderDevice } from '../provider-device-runtime.ts'; import type { Interactor, RunnerContext } from './interactor-types.ts'; diff --git a/src/core/interactors/android.ts b/src/core/interactors/android.ts index 6e36f6283..65d857ec2 100644 --- a/src/core/interactors/android.ts +++ b/src/core/interactors/android.ts @@ -29,7 +29,7 @@ import { setAndroidSetting } from '../../platforms/android/settings.ts'; import { snapshotAndroid } from '../../platforms/android/snapshot.ts'; import { screenshotAndroid } from '../../platforms/android/screenshot.ts'; import { withDiagnosticTimer } from '../../utils/diagnostics.ts'; -import type { DeviceInfo } from '../../utils/device.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; import type { Interactor } from '../interactor-types.ts'; import { snapshotCaptureAnnotationsFrom } from '../../snapshot-capture-annotations.ts'; diff --git a/src/core/interactors/apple.ts b/src/core/interactors/apple.ts index 30892667b..9356c080d 100644 --- a/src/core/interactors/apple.ts +++ b/src/core/interactors/apple.ts @@ -15,8 +15,8 @@ import { import { runMacOsScreenshotAction } from '../../platforms/ios/macos-helper.ts'; import { runIosRunnerCommand } from '../../platforms/ios/runner-client.ts'; import { withDiagnosticTimer } from '../../utils/diagnostics.ts'; -import type { DeviceInfo } from '../../utils/device.ts'; -import { AppError } from '../../utils/errors.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; +import { AppError } from '../../kernel/errors.ts'; import type { RawSnapshotNode } from '../../kernel/snapshot.ts'; import type { Interactor, RunnerContext } from '../interactor-types.ts'; import { diff --git a/src/core/interactors/linux.ts b/src/core/interactors/linux.ts index 66a4667bf..6cebbb94c 100644 --- a/src/core/interactors/linux.ts +++ b/src/core/interactors/linux.ts @@ -1,4 +1,4 @@ -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { withDiagnosticTimer } from '../../utils/diagnostics.ts'; import { backLinux, diff --git a/src/core/interactors/web.ts b/src/core/interactors/web.ts index 241be4534..930c0a384 100644 --- a/src/core/interactors/web.ts +++ b/src/core/interactors/web.ts @@ -1,5 +1,5 @@ import type { Interactor } from '../interactor-types.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { withDiagnosticTimer } from '../../utils/diagnostics.ts'; import { resolveWebProvider } from '../../platforms/web/provider.ts'; diff --git a/src/core/platform-descriptor/__tests__/parity.test.ts b/src/core/platform-descriptor/__tests__/parity.test.ts index fd22948cf..73dd094f5 100644 --- a/src/core/platform-descriptor/__tests__/parity.test.ts +++ b/src/core/platform-descriptor/__tests__/parity.test.ts @@ -1,6 +1,6 @@ import assert from 'node:assert/strict'; import { test } from 'vitest'; -import { isApplePlatform, PLATFORMS, type Platform } from '../../../utils/device.ts'; +import { isApplePlatform, PLATFORMS, type Platform } from '../../../kernel/device.ts'; import type { CommandCapability } from '../../capabilities.ts'; import { deriveApplePlatforms, deriveCapabilityForPlatform } from '../derive.ts'; import { platformDescriptors } from '../registry.ts'; diff --git a/src/core/platform-descriptor/derive.ts b/src/core/platform-descriptor/derive.ts index 9ae053e90..6969d5743 100644 --- a/src/core/platform-descriptor/derive.ts +++ b/src/core/platform-descriptor/derive.ts @@ -1,4 +1,4 @@ -import type { Platform } from '../../utils/device.ts'; +import type { Platform } from '../../kernel/device.ts'; import type { CommandCapability } from '../capabilities.ts'; import type { CapabilityBucket, PlatformDescriptor } from './types.ts'; @@ -9,7 +9,7 @@ import type { CapabilityBucket, PlatformDescriptor } from './types.ts'; * switch is deleted. * * This module only TYPE-imports from {@link CommandCapability} (erased at runtime - * under `verbatimModuleSyntax`) and from `utils/device.ts`, so wiring it into + * under `verbatimModuleSyntax`) and from `kernel/device.ts`, so wiring it into * `capabilities.ts` forms no runtime cycle — mirroring `command-descriptor/derive.ts`. */ diff --git a/src/core/platform-descriptor/registry.ts b/src/core/platform-descriptor/registry.ts index f01b59790..5c3603031 100644 --- a/src/core/platform-descriptor/registry.ts +++ b/src/core/platform-descriptor/registry.ts @@ -1,4 +1,4 @@ -import type { Platform } from '../../utils/device.ts'; +import type { Platform } from '../../kernel/device.ts'; import type { PlatformDescriptor } from './types.ts'; /** diff --git a/src/core/platform-descriptor/types.ts b/src/core/platform-descriptor/types.ts index d3b30b18f..e744159a8 100644 --- a/src/core/platform-descriptor/types.ts +++ b/src/core/platform-descriptor/types.ts @@ -1,4 +1,4 @@ -import type { Platform } from '../../utils/device.ts'; +import type { Platform } from '../../kernel/device.ts'; /** * The capability-bucket key a leaf {@link Platform} reads from a @@ -18,9 +18,9 @@ export type CapabilityBucket = 'apple' | 'android' | 'linux' | 'web'; * - `isApple` — whether the platform is an Apple platform * (mirrors `isApplePlatform` for leaf platforms). * - * `Platform` stays sourced from `utils/device.ts`; the registry only + * `Platform` stays sourced from `kernel/device.ts`; the registry only * `satisfies`-checks against it (it does not become its source), which keeps the - * utils→core layering one-directional and avoids an import cycle. + * core→kernel layering one-directional and avoids an import cycle. */ export type PlatformDescriptor = { platform: Platform; diff --git a/src/core/platform-inventory.ts b/src/core/platform-inventory.ts index f7489c472..f55f5ccdb 100644 --- a/src/core/platform-inventory.ts +++ b/src/core/platform-inventory.ts @@ -1,4 +1,4 @@ -import type { DeviceInfo, DeviceTarget, PlatformSelector } from '../utils/device.ts'; +import type { DeviceInfo, DeviceTarget, PlatformSelector } from '../kernel/device.ts'; export type DeviceInventoryRequest = { platform?: PlatformSelector; diff --git a/src/core/scroll-command.ts b/src/core/scroll-command.ts index adac62f75..07587c84c 100644 --- a/src/core/scroll-command.ts +++ b/src/core/scroll-command.ts @@ -1,4 +1,4 @@ -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; export const SCROLL_DURATION_MAX_MS = 10_000; diff --git a/src/core/scroll-gesture.ts b/src/core/scroll-gesture.ts index 789c560dd..55b4eb00a 100644 --- a/src/core/scroll-gesture.ts +++ b/src/core/scroll-gesture.ts @@ -1,4 +1,4 @@ -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; import { defineStringEnum } from '../utils/string-enum.ts'; import type { Rect, SnapshotNode } from '../kernel/snapshot.ts'; diff --git a/src/core/viewport-dimension.ts b/src/core/viewport-dimension.ts index 46879f868..f9de3e81a 100644 --- a/src/core/viewport-dimension.ts +++ b/src/core/viewport-dimension.ts @@ -1,4 +1,4 @@ -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; export function readViewportDimension( value: string | undefined, diff --git a/src/daemon-artifacts.ts b/src/daemon-artifacts.ts index 2c99f7cfa..c51e6af81 100644 --- a/src/daemon-artifacts.ts +++ b/src/daemon-artifacts.ts @@ -3,7 +3,7 @@ import http from 'node:http'; import https from 'node:https'; import path from 'node:path'; import { pipeline } from 'node:stream/promises'; -import { AppError } from './utils/errors.ts'; +import { AppError } from './kernel/errors.ts'; import type { DaemonArtifact, DaemonRequest, DaemonResponse } from './daemon/types.ts'; import { buildDaemonHttpAuthHeaders } from './daemon/http-contract.ts'; import { diff --git a/src/daemon-client-lifecycle.ts b/src/daemon-client-lifecycle.ts index 2405e740c..a6d587ce0 100644 --- a/src/daemon-client-lifecycle.ts +++ b/src/daemon-client-lifecycle.ts @@ -2,7 +2,7 @@ import fs from 'node:fs'; import net from 'node:net'; import os from 'node:os'; import path from 'node:path'; -import { AppError } from './utils/errors.ts'; +import { AppError } from './kernel/errors.ts'; import type { DaemonRequest } from './daemon/types.ts'; import { runCmdDetachedMonitored, type ExecDetachedExit } from './utils/exec.ts'; import { findProjectRoot, readVersion } from './utils/version.ts'; diff --git a/src/daemon-client-progress.ts b/src/daemon-client-progress.ts index 11481730a..671b71e20 100644 --- a/src/daemon-client-progress.ts +++ b/src/daemon-client-progress.ts @@ -1,6 +1,6 @@ import http from 'node:http'; import type { Socket } from 'node:net'; -import { AppError } from './utils/errors.ts'; +import { AppError } from './kernel/errors.ts'; import type { DaemonRequest, DaemonResponse } from './daemon/types.ts'; import type { RequestProgressEvent } from './daemon/request-progress.ts'; import { consumeTextLines } from './utils/line-stream.ts'; diff --git a/src/daemon-client-rpc.ts b/src/daemon-client-rpc.ts index 74bc4b435..eb789f3a8 100644 --- a/src/daemon-client-rpc.ts +++ b/src/daemon-client-rpc.ts @@ -1,4 +1,4 @@ -import { AppError, toAppErrorCode } from './utils/errors.ts'; +import { AppError, toAppErrorCode } from './kernel/errors.ts'; import { createRequestId } from './utils/diagnostics.ts'; import type { DaemonRequest, DaemonResponse } from './daemon/types.ts'; import { materializeRemoteArtifacts } from './daemon-artifacts.ts'; diff --git a/src/daemon-client-timeout.ts b/src/daemon-client-timeout.ts index 31b77a7b6..fc30a0a6c 100644 --- a/src/daemon-client-timeout.ts +++ b/src/daemon-client-timeout.ts @@ -1,4 +1,4 @@ -import { AppError } from './utils/errors.ts'; +import { AppError } from './kernel/errors.ts'; import { runCmdSync } from './utils/exec.ts'; import { emitDiagnostic } from './utils/diagnostics.ts'; import { isAgentDeviceDaemonProcess } from './utils/process-identity.ts'; diff --git a/src/daemon-client-transport.ts b/src/daemon-client-transport.ts index cda3a6cd8..b3f9e947f 100644 --- a/src/daemon-client-transport.ts +++ b/src/daemon-client-transport.ts @@ -1,7 +1,7 @@ import net from 'node:net'; import http from 'node:http'; import https from 'node:https'; -import { AppError } from './utils/errors.ts'; +import { AppError } from './kernel/errors.ts'; import { readNodeHttpResponseBody } from './utils/node-http.ts'; import type { DaemonRequest, DaemonResponse } from './daemon/types.ts'; import { emitDiagnostic } from './utils/diagnostics.ts'; diff --git a/src/daemon-error.ts b/src/daemon-error.ts index 6d2188cc7..4565047a7 100644 --- a/src/daemon-error.ts +++ b/src/daemon-error.ts @@ -1,4 +1,4 @@ -import { AppError, toAppErrorCode } from './utils/errors.ts'; +import { AppError, toAppErrorCode } from './kernel/errors.ts'; import type { DaemonError } from './contracts.ts'; export function throwDaemonError(error: DaemonError): never { diff --git a/src/daemon-proxy.ts b/src/daemon-proxy.ts index 7713529b9..7d3bf9174 100644 --- a/src/daemon-proxy.ts +++ b/src/daemon-proxy.ts @@ -2,7 +2,7 @@ import http, { type IncomingMessage, type ServerResponse } from 'node:http'; import { Readable } from 'node:stream'; import { pipeline } from 'node:stream/promises'; import { randomUUID } from 'node:crypto'; -import { AppError, normalizeError } from './utils/errors.ts'; +import { AppError, normalizeError } from './kernel/errors.ts'; import { readNodeHttpRequestBody } from './utils/node-http.ts'; import { timingSafeStringEqual } from './utils/timing-safe-equal.ts'; import { diff --git a/src/daemon-runtime.ts b/src/daemon-runtime.ts index 728d5bc00..faa1db94e 100644 --- a/src/daemon-runtime.ts +++ b/src/daemon-runtime.ts @@ -1,5 +1,5 @@ import crypto from 'node:crypto'; -import { asAppError, AppError } from './utils/errors.ts'; +import { asAppError, AppError } from './kernel/errors.ts'; import { SessionStore } from './daemon/session-store.ts'; import { cleanupStaleAppLogProcesses } from './daemon/app-log-process.ts'; import { resolveDaemonPaths, resolveDaemonServerMode } from './daemon/config.ts'; diff --git a/src/daemon.ts b/src/daemon.ts index a0db3665f..1e1a70038 100644 --- a/src/daemon.ts +++ b/src/daemon.ts @@ -1,5 +1,5 @@ import { startDaemonRuntime } from './daemon-runtime.ts'; -import { asAppError } from './utils/errors.ts'; +import { asAppError } from './kernel/errors.ts'; void startDaemonRuntime().catch((error) => { const appErr = asAppError(error); diff --git a/src/daemon/__tests__/artifact-materialization.test.ts b/src/daemon/__tests__/artifact-materialization.test.ts index 17e3f290a..ce370cc1d 100644 --- a/src/daemon/__tests__/artifact-materialization.test.ts +++ b/src/daemon/__tests__/artifact-materialization.test.ts @@ -4,7 +4,7 @@ import fs from 'node:fs'; import http from 'node:http'; import os from 'node:os'; import path from 'node:path'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { runCmdSync } from '../../utils/exec.ts'; import { cleanupMaterializedArtifact, materializeArtifact } from '../artifact-materialization.ts'; diff --git a/src/daemon/__tests__/device-ready.test.ts b/src/daemon/__tests__/device-ready.test.ts index 73ec263ea..d4d9cdfb5 100644 --- a/src/daemon/__tests__/device-ready.test.ts +++ b/src/daemon/__tests__/device-ready.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeEach, expect, test, vi } from 'vitest'; import assert from 'node:assert/strict'; import { promises as fs } from 'node:fs'; -import type { DeviceInfo } from '../../utils/device.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; vi.mock('../../utils/exec.ts', () => ({ runCmd: vi.fn(), diff --git a/src/daemon/__tests__/request-cancel.test.ts b/src/daemon/__tests__/request-cancel.test.ts index da96f90f4..915d1cecd 100644 --- a/src/daemon/__tests__/request-cancel.test.ts +++ b/src/daemon/__tests__/request-cancel.test.ts @@ -1,6 +1,6 @@ import { test } from 'vitest'; import assert from 'node:assert/strict'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { createRequestCanceledError, isRequestCanceledError, diff --git a/src/daemon/__tests__/request-platform-providers.test.ts b/src/daemon/__tests__/request-platform-providers.test.ts index dab8dcee9..44d33465c 100644 --- a/src/daemon/__tests__/request-platform-providers.test.ts +++ b/src/daemon/__tests__/request-platform-providers.test.ts @@ -11,7 +11,7 @@ import { import { withTargetDeviceResolutionScope } from '../../core/dispatch-resolve.ts'; import { createLocalAppleToolProvider, runXcrun } from '../../platforms/ios/tool-provider.ts'; import { resolveWebProvider, type WebProvider } from '../../platforms/web/provider.ts'; -import type { DeviceInfo } from '../../utils/device.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; import { withRequestPlatformProviderScope } from '../request-platform-providers.ts'; import type { DaemonRequest } from '../types.ts'; diff --git a/src/daemon/__tests__/request-router-android-perf.test.ts b/src/daemon/__tests__/request-router-android-perf.test.ts index 74b4485e1..961c9197e 100644 --- a/src/daemon/__tests__/request-router-android-perf.test.ts +++ b/src/daemon/__tests__/request-router-android-perf.test.ts @@ -2,7 +2,7 @@ import { expect, test } from 'vitest'; import { createRequestHandler } from '../request-router.ts'; import { LeaseRegistry } from '../lease-registry.ts'; import { SessionStore } from '../session-store.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import type { AndroidAdbExecutor, AndroidAdbProvider, diff --git a/src/daemon/__tests__/request-router-open.test.ts b/src/daemon/__tests__/request-router-open.test.ts index d8b69086b..a35dd0f77 100644 --- a/src/daemon/__tests__/request-router-open.test.ts +++ b/src/daemon/__tests__/request-router-open.test.ts @@ -10,8 +10,8 @@ import { dispatchCommand } from '../../core/dispatch.ts'; import { createRequestHandler } from '../request-router.ts'; import { LeaseRegistry } from '../lease-registry.ts'; import { ensureDeviceReady } from '../device-ready.ts'; -import type { DeviceInfo } from '../../utils/device.ts'; -import { AppError } from '../../utils/errors.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; +import { AppError } from '../../kernel/errors.ts'; import { makeSessionStore } from '../../__tests__/test-utils/store-factory.ts'; const mockDispatch = vi.mocked(dispatchCommand); diff --git a/src/daemon/__tests__/request-router-typed-error.test.ts b/src/daemon/__tests__/request-router-typed-error.test.ts index eb54821cb..0f8a04993 100644 --- a/src/daemon/__tests__/request-router-typed-error.test.ts +++ b/src/daemon/__tests__/request-router-typed-error.test.ts @@ -19,7 +19,7 @@ import { createRequestHandler } from '../request-router.ts'; import type { DaemonRequest, SessionState } from '../types.ts'; import { LeaseRegistry } from '../lease-registry.ts'; import { makeSessionStore } from '../../__tests__/test-utils/store-factory.ts'; -import { AppError, retriableForErrorCode } from '../../utils/errors.ts'; +import { AppError, retriableForErrorCode } from '../../kernel/errors.ts'; import { supportedPlatformsForCommand } from '../../core/capabilities.ts'; const mockDispatch = vi.mocked(dispatchCommand); diff --git a/src/daemon/__tests__/runtime-hints.test.ts b/src/daemon/__tests__/runtime-hints.test.ts index 4b85332ec..e6f56f5ea 100644 --- a/src/daemon/__tests__/runtime-hints.test.ts +++ b/src/daemon/__tests__/runtime-hints.test.ts @@ -3,13 +3,13 @@ import assert from 'node:assert/strict'; import { promises as fs } from 'node:fs'; import os from 'node:os'; import path from 'node:path'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { applyRuntimeHintsToApp, clearRuntimeHintsFromApp, resolveRuntimeTransportHints, } from '../runtime-hints.ts'; -import type { DeviceInfo } from '../../utils/device.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; async function withMockedAdb( run: (ctx: { diff --git a/src/daemon/__tests__/session-selector.test.ts b/src/daemon/__tests__/session-selector.test.ts index f65fe4d31..244dd1279 100644 --- a/src/daemon/__tests__/session-selector.test.ts +++ b/src/daemon/__tests__/session-selector.test.ts @@ -1,7 +1,7 @@ import { test } from 'vitest'; import assert from 'node:assert/strict'; import { assertSessionSelectorMatches } from '../session-selector.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import type { SessionState } from '../types.ts'; function makeSession(overrides?: Partial): SessionState { diff --git a/src/daemon/__tests__/target-shutdown.test.ts b/src/daemon/__tests__/target-shutdown.test.ts index 522cc5a08..141a93278 100644 --- a/src/daemon/__tests__/target-shutdown.test.ts +++ b/src/daemon/__tests__/target-shutdown.test.ts @@ -1,5 +1,5 @@ import { beforeEach, expect, test, vi } from 'vitest'; -import type { DeviceInfo } from '../../utils/device.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; vi.mock('../../platforms/ios/simulator.ts', async (importOriginal) => { const actual = await importOriginal(); diff --git a/src/daemon/android-snapshot-timeout-evidence.ts b/src/daemon/android-snapshot-timeout-evidence.ts index 450cf4e61..4188faf39 100644 --- a/src/daemon/android-snapshot-timeout-evidence.ts +++ b/src/daemon/android-snapshot-timeout-evidence.ts @@ -4,7 +4,7 @@ import path from 'node:path'; import type { DaemonResponse, SessionState } from './types.ts'; import { dispatchCommand } from '../core/dispatch.ts'; import { emitDiagnostic } from '../utils/diagnostics.ts'; -import { normalizeError, type NormalizedError } from '../utils/errors.ts'; +import { normalizeError, type NormalizedError } from '../kernel/errors.ts'; import type { ScreenshotOverlayRef } from '../kernel/snapshot.ts'; import { contextFromFlags } from './context.ts'; import { annotateScreenshotWithRefs } from './screenshot-overlay.ts'; diff --git a/src/daemon/android-system-dialog.ts b/src/daemon/android-system-dialog.ts index 609f26cd2..cda0e28f6 100644 --- a/src/daemon/android-system-dialog.ts +++ b/src/daemon/android-system-dialog.ts @@ -7,7 +7,7 @@ import { import { snapshotAndroid } from '../platforms/android/snapshot.ts'; import { runAndroidAdb } from '../platforms/android/adb.ts'; import { emitDiagnostic } from '../utils/diagnostics.ts'; -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; import { centerOfRect, attachRefs, type SnapshotNode } from '../kernel/snapshot.ts'; import { sleep } from '../utils/timeouts.ts'; import { pruneGroupNodes } from '../utils/snapshot-processing.ts'; diff --git a/src/daemon/app-log-android.ts b/src/daemon/app-log-android.ts index da193066c..f172ee20a 100644 --- a/src/daemon/app-log-android.ts +++ b/src/daemon/app-log-android.ts @@ -9,7 +9,7 @@ import { captureAndroidLogcatWithAdb, streamAndroidLogcatWithAdb, } from '../platforms/android/logcat.ts'; -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; import { clearPidFile, readStoredAppLogProcessMeta, diff --git a/src/daemon/app-log.ts b/src/daemon/app-log.ts index 745180eb3..8e2ece5f9 100644 --- a/src/daemon/app-log.ts +++ b/src/daemon/app-log.ts @@ -1,7 +1,7 @@ import fs from 'node:fs'; import path from 'node:path'; -import type { DeviceInfo } from '../utils/device.ts'; -import { AppError } from '../utils/errors.ts'; +import type { DeviceInfo } from '../kernel/device.ts'; +import { AppError } from '../kernel/errors.ts'; import { runCmd } from '../utils/exec.ts'; import { runXcrun } from '../platforms/ios/tool-provider.ts'; import { runAndroidAdb } from '../platforms/android/adb.ts'; diff --git a/src/daemon/apple-runner-options.ts b/src/daemon/apple-runner-options.ts index 601a73c53..fa82b15c5 100644 --- a/src/daemon/apple-runner-options.ts +++ b/src/daemon/apple-runner-options.ts @@ -2,7 +2,7 @@ import { isDeepLinkTarget } from '../core/open-target.ts'; import type { SessionSurface } from '../core/session-surface.ts'; import type { AppleRunnerLifecycleOptions } from '../platforms/ios/runner-provider.ts'; import { prewarmIosRunnerCache } from '../platforms/ios/runner-client.ts'; -import type { DeviceInfo } from '../utils/device.ts'; +import type { DeviceInfo } from '../kernel/device.ts'; import { contextFromFlags } from './context.ts'; import type { DaemonRequest } from './types.ts'; diff --git a/src/daemon/artifact-archive.ts b/src/daemon/artifact-archive.ts index 8e8c5443f..31d8ccd30 100644 --- a/src/daemon/artifact-archive.ts +++ b/src/daemon/artifact-archive.ts @@ -1,6 +1,6 @@ import fs from 'node:fs'; import path from 'node:path'; -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; import { runCmd } from '../utils/exec.ts'; export async function extractTarInstallableArtifact(params: { diff --git a/src/daemon/artifact-download.ts b/src/daemon/artifact-download.ts index 461ea39ec..1a8898f2d 100644 --- a/src/daemon/artifact-download.ts +++ b/src/daemon/artifact-download.ts @@ -6,7 +6,7 @@ import path from 'node:path'; import { once } from 'node:events'; import { Transform } from 'node:stream'; import { pipeline } from 'node:stream/promises'; -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; const MAX_ARTIFACT_BYTES = 2 * 1024 * 1024 * 1024; // 2 GB const MAX_ERROR_BODY_CHARS = 4096; diff --git a/src/daemon/artifact-materialization.ts b/src/daemon/artifact-materialization.ts index 761fe8890..1de7d97f8 100644 --- a/src/daemon/artifact-materialization.ts +++ b/src/daemon/artifact-materialization.ts @@ -7,7 +7,7 @@ import { } from './artifact-archive.ts'; import { createArtifactTempDir, downloadArtifactToTempDir } from './artifact-download.ts'; import { readInfoPlistString } from '../platforms/ios/plist.ts'; -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; export type MaterializeArtifactParams = { platform: 'ios' | 'android'; diff --git a/src/daemon/artifact-tracking.ts b/src/daemon/artifact-tracking.ts index 84fd4e7fd..6522b1da7 100644 --- a/src/daemon/artifact-tracking.ts +++ b/src/daemon/artifact-tracking.ts @@ -1,6 +1,6 @@ import crypto from 'node:crypto'; import fs from 'node:fs'; -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; // --- Downloadable artifact tracking --- diff --git a/src/daemon/device-ready.ts b/src/daemon/device-ready.ts index dd41cf0fe..a95192205 100644 --- a/src/daemon/device-ready.ts +++ b/src/daemon/device-ready.ts @@ -1,8 +1,8 @@ -import type { DeviceInfo } from '../utils/device.ts'; +import type { DeviceInfo } from '../kernel/device.ts'; import os from 'node:os'; import path from 'node:path'; import { promises as fs } from 'node:fs'; -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; import { resolveIosDevicectlHint, IOS_DEVICECTL_DEFAULT_HINT } from '../platforms/ios/devicectl.ts'; import { runXcrun } from '../platforms/ios/tool-provider.ts'; import { isActiveProviderDevice } from '../provider-device-runtime.ts'; diff --git a/src/daemon/device-targets.ts b/src/daemon/device-targets.ts index 72ac23a91..1b30e213a 100644 --- a/src/daemon/device-targets.ts +++ b/src/daemon/device-targets.ts @@ -1,4 +1,4 @@ -import type { DeviceInfo } from '../utils/device.ts'; +import type { DeviceInfo } from '../kernel/device.ts'; export function isIosSimulator(device: DeviceInfo): boolean { return device.platform === 'ios' && device.kind === 'simulator'; diff --git a/src/daemon/direct-ios-selector.ts b/src/daemon/direct-ios-selector.ts index a7b8f6114..046adbe5d 100644 --- a/src/daemon/direct-ios-selector.ts +++ b/src/daemon/direct-ios-selector.ts @@ -1,6 +1,6 @@ import type { SessionState } from './types.ts'; import { tryParseSelectorChain } from './selectors.ts'; -import { asAppError } from '../utils/errors.ts'; +import { asAppError } from '../kernel/errors.ts'; import type { ElementSelectorTapOptions } from '../core/interactor-types.ts'; export type DirectIosSelectorTarget = ElementSelectorTapOptions & { raw: string }; diff --git a/src/daemon/handlers/__tests__/interaction.test.ts b/src/daemon/handlers/__tests__/interaction.test.ts index 1781ececb..e004adfeb 100644 --- a/src/daemon/handlers/__tests__/interaction.test.ts +++ b/src/daemon/handlers/__tests__/interaction.test.ts @@ -4,7 +4,7 @@ import type { SessionStore } from '../../session-store.ts'; import type { SessionState } from '../../types.ts'; import type { CommandFlags } from '../../../core/dispatch.ts'; import { attachRefs, type SnapshotBackend } from '../../../kernel/snapshot.ts'; -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; import { buildSnapshotState } from '../snapshot-capture.ts'; import { makeSessionStore } from '../../../__tests__/test-utils/store-factory.ts'; import { diff --git a/src/daemon/handlers/__tests__/replay-heal.test.ts b/src/daemon/handlers/__tests__/replay-heal.test.ts index f95ba1c57..147cbe4e3 100644 --- a/src/daemon/handlers/__tests__/replay-heal.test.ts +++ b/src/daemon/handlers/__tests__/replay-heal.test.ts @@ -14,7 +14,7 @@ import { handleSessionCommands } from '../session.ts'; import { healReplayAction } from '../session-replay-heal.ts'; import { SessionStore } from '../../session-store.ts'; import type { DaemonRequest, DaemonResponse, SessionAction } from '../../types.ts'; -import type { DeviceInfo } from '../../../utils/device.ts'; +import type { DeviceInfo } from '../../../kernel/device.ts'; import { dispatchCommand, resolveTargetDevice } from '../../../core/dispatch.ts'; import { ensureDeviceReady } from '../../device-ready.ts'; import { makeIosSession } from '../../../__tests__/test-utils/session-factories.ts'; diff --git a/src/daemon/handlers/__tests__/session-close-shutdown.test.ts b/src/daemon/handlers/__tests__/session-close-shutdown.test.ts index f3953f628..98c206a77 100644 --- a/src/daemon/handlers/__tests__/session-close-shutdown.test.ts +++ b/src/daemon/handlers/__tests__/session-close-shutdown.test.ts @@ -4,7 +4,7 @@ import os from 'node:os'; import path from 'node:path'; import { SessionStore } from '../../session-store.ts'; import type { DaemonRequest, DaemonResponse, SessionState } from '../../types.ts'; -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; vi.mock('../../../platforms/ios/simulator.ts', async (importOriginal) => { const actual = await importOriginal(); diff --git a/src/daemon/handlers/__tests__/session-observability.test.ts b/src/daemon/handlers/__tests__/session-observability.test.ts index b48494575..fbcb9b45e 100644 --- a/src/daemon/handlers/__tests__/session-observability.test.ts +++ b/src/daemon/handlers/__tests__/session-observability.test.ts @@ -6,7 +6,7 @@ import { beforeEach, test, vi } from 'vitest'; import type { AndroidAdbExecutor } from '../../../platforms/android/adb-executor.ts'; import { makeSessionStore } from '../../../__tests__/test-utils/store-factory.ts'; import { makeAndroidSession, makeIosSession } from '../../../__tests__/test-utils/index.ts'; -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; import type { AppleXctracePerfCapture } from '../../../platforms/ios/perf-xctrace.ts'; import type { DaemonResponse } from '../../types.ts'; diff --git a/src/daemon/handlers/__tests__/session-open-runtime.test.ts b/src/daemon/handlers/__tests__/session-open-runtime.test.ts index 1c8a2ae21..09d18fbec 100644 --- a/src/daemon/handlers/__tests__/session-open-runtime.test.ts +++ b/src/daemon/handlers/__tests__/session-open-runtime.test.ts @@ -4,7 +4,7 @@ import os from 'node:os'; import path from 'node:path'; import { SessionStore } from '../../session-store.ts'; import type { DaemonRequest, DaemonResponse, SessionState } from '../../types.ts'; -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; vi.mock('../../../core/dispatch.ts', async (importOriginal) => { const actual = await importOriginal(); diff --git a/src/daemon/handlers/__tests__/session-open-surface.test.ts b/src/daemon/handlers/__tests__/session-open-surface.test.ts index b6fbe06ff..8e8830f4c 100644 --- a/src/daemon/handlers/__tests__/session-open-surface.test.ts +++ b/src/daemon/handlers/__tests__/session-open-surface.test.ts @@ -1,6 +1,6 @@ import assert from 'node:assert/strict'; import { test } from 'vitest'; -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; import { resolveRequestedOpenSurface } from '../session-open-surface.ts'; test('resolveRequestedOpenSurface rejects surface flag on iOS', () => { diff --git a/src/daemon/handlers/__tests__/session-open-target.test.ts b/src/daemon/handlers/__tests__/session-open-target.test.ts index b07c6185e..f747037b7 100644 --- a/src/daemon/handlers/__tests__/session-open-target.test.ts +++ b/src/daemon/handlers/__tests__/session-open-target.test.ts @@ -1,5 +1,5 @@ import { beforeEach, expect, test, vi } from 'vitest'; -import type { DeviceInfo } from '../../../utils/device.ts'; +import type { DeviceInfo } from '../../../kernel/device.ts'; vi.mock('../../../platforms/android/app-lifecycle.ts', () => ({ getAndroidAppState: vi.fn(), diff --git a/src/daemon/handlers/__tests__/session-replay-vars.test.ts b/src/daemon/handlers/__tests__/session-replay-vars.test.ts index 492c7ebbc..eb298febb 100644 --- a/src/daemon/handlers/__tests__/session-replay-vars.test.ts +++ b/src/daemon/handlers/__tests__/session-replay-vars.test.ts @@ -3,7 +3,7 @@ import assert from 'node:assert/strict'; import fs from 'node:fs'; import os from 'node:os'; import path from 'node:path'; -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; import { runCmdBackground, type ExecBackgroundResult } from '../../../utils/exec.ts'; import type { DaemonInvokeFn, DaemonRequest, DaemonResponse, SessionAction } from '../../types.ts'; import type { CommandFlags } from '../../../core/dispatch.ts'; diff --git a/src/daemon/handlers/__tests__/session-test-discovery.test.ts b/src/daemon/handlers/__tests__/session-test-discovery.test.ts index d2ec3e00a..2249f0c17 100644 --- a/src/daemon/handlers/__tests__/session-test-discovery.test.ts +++ b/src/daemon/handlers/__tests__/session-test-discovery.test.ts @@ -3,7 +3,7 @@ import assert from 'node:assert/strict'; import fs from 'node:fs'; import os from 'node:os'; import path from 'node:path'; -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; import { discoverReplayTestEntries } from '../session-test-discovery.ts'; test('discoverReplayTestEntries expands directories in deterministic path order', () => { diff --git a/src/daemon/handlers/__tests__/session-test-suite.test.ts b/src/daemon/handlers/__tests__/session-test-suite.test.ts index 0c4db5d61..6c8c3fd4c 100644 --- a/src/daemon/handlers/__tests__/session-test-suite.test.ts +++ b/src/daemon/handlers/__tests__/session-test-suite.test.ts @@ -13,7 +13,7 @@ import { registerRequestAbort, } from '../../request-cancel.ts'; import { withDeviceInventoryProvider } from '../../../core/dispatch-resolve.ts'; -import type { DeviceInfo } from '../../../utils/device.ts'; +import type { DeviceInfo } from '../../../kernel/device.ts'; import { makeAndroidSession } from '../../../__tests__/test-utils/index.ts'; function makeSessionStore(): SessionStore { diff --git a/src/daemon/handlers/__tests__/session.test.ts b/src/daemon/handlers/__tests__/session.test.ts index 4172668ad..fe4f4a986 100644 --- a/src/daemon/handlers/__tests__/session.test.ts +++ b/src/daemon/handlers/__tests__/session.test.ts @@ -96,7 +96,7 @@ import { } from '../../materialized-path-registry.ts'; import { SessionStore } from '../../session-store.ts'; import type { DaemonRequest, DaemonResponse, SessionState } from '../../types.ts'; -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; import { dispatchCommand, resolveTargetDevice } from '../../../core/dispatch.ts'; import { ensureDeviceReady } from '../../device-ready.ts'; import { applyRuntimeHintsToApp, clearRuntimeHintsFromApp } from '../../runtime-hints.ts'; diff --git a/src/daemon/handlers/__tests__/snapshot-handler.test.ts b/src/daemon/handlers/__tests__/snapshot-handler.test.ts index 26be1ee23..810655d28 100644 --- a/src/daemon/handlers/__tests__/snapshot-handler.test.ts +++ b/src/daemon/handlers/__tests__/snapshot-handler.test.ts @@ -8,7 +8,7 @@ import { withSessionlessRunnerCleanup } from '../snapshot-session.ts'; import { captureSnapshot } from '../snapshot-capture.ts'; import { SessionStore } from '../../session-store.ts'; import type { SessionState } from '../../types.ts'; -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; import { buildSnapshotSignatures } from '../../android-snapshot-freshness.ts'; import { buildInteractionSurfaceSignature } from '../../interaction-outcome-policy.ts'; import { buildSnapshotPresentationKey } from '../../../kernel/snapshot.ts'; diff --git a/src/daemon/handlers/install-source.ts b/src/daemon/handlers/install-source.ts index 7e893b547..84b1be400 100644 --- a/src/daemon/handlers/install-source.ts +++ b/src/daemon/handlers/install-source.ts @@ -15,7 +15,7 @@ import { SessionStore } from '../session-store.ts'; import type { DaemonRequest, DaemonResponse, SessionState } from '../types.ts'; import { resolveInstallFromSourceResultTarget } from '../../client-shared.ts'; -import { AppError, normalizeError } from '../../utils/errors.ts'; +import { AppError, normalizeError } from '../../kernel/errors.ts'; import { withSuccessText } from '../../utils/success-text.ts'; import { requireCommandSupported } from './response.ts'; import { recordSessionAction } from './handler-utils.ts'; diff --git a/src/daemon/handlers/interaction-android-escape.ts b/src/daemon/handlers/interaction-android-escape.ts index c6ac6615e..9519f84f0 100644 --- a/src/daemon/handlers/interaction-android-escape.ts +++ b/src/daemon/handlers/interaction-android-escape.ts @@ -1,5 +1,5 @@ import { getAndroidAppState } from '../../platforms/android/app-lifecycle.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import type { SessionState } from '../types.ts'; export type AndroidEscapeSurface = { diff --git a/src/daemon/handlers/interaction-runtime.ts b/src/daemon/handlers/interaction-runtime.ts index 2c0d52173..2bc01dde9 100644 --- a/src/daemon/handlers/interaction-runtime.ts +++ b/src/daemon/handlers/interaction-runtime.ts @@ -5,7 +5,7 @@ import type { BackendSnapshotResult, } from '../../backend.ts'; import { createAgentDevice } from '../../runtime.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import type { SessionState } from '../types.ts'; import { setSessionSnapshot } from '../session-snapshot.ts'; import type { InteractionHandlerParams } from './interaction-common.ts'; diff --git a/src/daemon/handlers/interaction-touch.ts b/src/daemon/handlers/interaction-touch.ts index 4fca2fa87..f50c5b76d 100644 --- a/src/daemon/handlers/interaction-touch.ts +++ b/src/daemon/handlers/interaction-touch.ts @@ -10,7 +10,7 @@ import type { LongPressCommandResult, PressCommandResult, } from '../../contracts/interaction.ts'; -import { asAppError, normalizeError } from '../../utils/errors.ts'; +import { asAppError, normalizeError } from '../../kernel/errors.ts'; import type { DaemonResponse, SessionState } from '../types.ts'; import { buildTouchVisualizationResult, diff --git a/src/daemon/handlers/interaction.ts b/src/daemon/handlers/interaction.ts index 636a7aaf4..64d9ec849 100644 --- a/src/daemon/handlers/interaction.ts +++ b/src/daemon/handlers/interaction.ts @@ -8,7 +8,7 @@ import { createInteractionRuntime } from './interaction-runtime.ts'; import { finalizeTouchInteraction } from './interaction-common.ts'; import { errorResponse, noActiveSessionError, requireCommandSupported } from './response.ts'; import { PUBLIC_COMMANDS } from '../../command-catalog.ts'; -import { normalizeError } from '../../utils/errors.ts'; +import { normalizeError } from '../../kernel/errors.ts'; import { successText } from '../../utils/success-text.ts'; import { ensureAndroidBlockingSystemDialogReady, diff --git a/src/daemon/handlers/react-native.ts b/src/daemon/handlers/react-native.ts index e20bcaf31..7917c2df5 100644 --- a/src/daemon/handlers/react-native.ts +++ b/src/daemon/handlers/react-native.ts @@ -4,7 +4,7 @@ import { analyzeReactNativeOverlay, type ReactNativeOverlayDismissTarget, } from '../../core/react-native-overlay.ts'; -import { normalizeError } from '../../utils/errors.ts'; +import { normalizeError } from '../../kernel/errors.ts'; import { stripUndefined } from '../../utils/parsing.ts'; import { successText } from '../../utils/success-text.ts'; import type { SnapshotState } from '../../kernel/snapshot.ts'; diff --git a/src/daemon/handlers/response.ts b/src/daemon/handlers/response.ts index e9b988941..d2c18179b 100644 --- a/src/daemon/handlers/response.ts +++ b/src/daemon/handlers/response.ts @@ -1,5 +1,5 @@ import { isCommandSupportedOnDevice, unsupportedHintForDevice } from '../../core/capabilities.ts'; -import type { DeviceInfo } from '../../utils/device.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; import type { DaemonResponse } from '../types.ts'; export type DaemonFailureResponse = Extract; diff --git a/src/daemon/handlers/session-close.ts b/src/daemon/handlers/session-close.ts index 8e48b598d..f1cd7cb63 100644 --- a/src/daemon/handlers/session-close.ts +++ b/src/daemon/handlers/session-close.ts @@ -1,5 +1,5 @@ import { emitDiagnostic } from '../../utils/diagnostics.ts'; -import { isApplePlatform, type DeviceInfo } from '../../utils/device.ts'; +import { isApplePlatform, type DeviceInfo } from '../../kernel/device.ts'; import { dispatchCommand } from '../../core/dispatch.ts'; import { contextFromFlags } from '../context.ts'; import type { DaemonRequest, DaemonResponse, SessionState } from '../types.ts'; diff --git a/src/daemon/handlers/session-deploy.ts b/src/daemon/handlers/session-deploy.ts index 73e221d52..f31ae219e 100644 --- a/src/daemon/handlers/session-deploy.ts +++ b/src/daemon/handlers/session-deploy.ts @@ -1,7 +1,7 @@ import fs from 'node:fs'; import { installProviderDeviceApp } from '../../provider-device-runtime.ts'; import { cleanupUploadedArtifact, prepareUploadedArtifact } from '../artifact-tracking.ts'; -import type { DeviceInfo } from '../../utils/device.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; import type { DaemonRequest, DaemonResponse } from '../types.ts'; import { SessionStore } from '../session-store.ts'; import { recordSessionAction } from './handler-utils.ts'; diff --git a/src/daemon/handlers/session-device-utils.ts b/src/daemon/handlers/session-device-utils.ts index f5e51fa8d..f9c38a62a 100644 --- a/src/daemon/handlers/session-device-utils.ts +++ b/src/daemon/handlers/session-device-utils.ts @@ -1,5 +1,5 @@ -import type { DeviceInfo } from '../../utils/device.ts'; -import { AppError } from '../../utils/errors.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; +import { AppError } from '../../kernel/errors.ts'; import { ensureDeviceReady } from '../device-ready.ts'; import { resolveTargetDevice } from '../../core/dispatch.ts'; import type { DaemonRequest, DaemonResponse, SessionState } from '../types.ts'; diff --git a/src/daemon/handlers/session-inventory.ts b/src/daemon/handlers/session-inventory.ts index 216d593e3..ba0a3e5f6 100644 --- a/src/daemon/handlers/session-inventory.ts +++ b/src/daemon/handlers/session-inventory.ts @@ -1,12 +1,12 @@ import { listDeviceInventory } from '../../core/dispatch-resolve.ts'; import { assertResolvedAppsFilter } from '../../contracts/app-inventory.ts'; -import { asAppError } from '../../utils/errors.ts'; +import { asAppError } from '../../kernel/errors.ts'; import { isApplePlatform, resolveAppleSimulatorSetPathForSelector, type DeviceInfo, type PlatformSelector, -} from '../../utils/device.ts'; +} from '../../kernel/device.ts'; import { resolveAndroidSerialAllowlist, resolveIosSimulatorDeviceSetPath, diff --git a/src/daemon/handlers/session-native-perf.ts b/src/daemon/handlers/session-native-perf.ts index 4b5972b5a..32576539f 100644 --- a/src/daemon/handlers/session-native-perf.ts +++ b/src/daemon/handlers/session-native-perf.ts @@ -15,7 +15,7 @@ import { type AndroidNativePerfKind, type AndroidNativePerfSession, } from '../../platforms/android/perf.ts'; -import { AppError, normalizeError } from '../../utils/errors.ts'; +import { AppError, normalizeError } from '../../kernel/errors.ts'; import { SessionStore } from '../session-store.ts'; import type { DaemonRequest, DaemonResponse, SessionState } from '../types.ts'; import { errorResponse, type DaemonFailureResponse } from './response.ts'; diff --git a/src/daemon/handlers/session-observability.ts b/src/daemon/handlers/session-observability.ts index a6885d893..fd78b5b98 100644 --- a/src/daemon/handlers/session-observability.ts +++ b/src/daemon/handlers/session-observability.ts @@ -11,7 +11,7 @@ import { type PerfArea, type PerfKind, } from '../../contracts/perf.ts'; -import { AppError, normalizeError } from '../../utils/errors.ts'; +import { AppError, normalizeError } from '../../kernel/errors.ts'; import { resolveWebProvider } from '../../platforms/web/provider.ts'; import type { AndroidAdbExecutor } from '../../platforms/android/adb-executor.ts'; import type { DaemonRequest, DaemonResponse, DaemonResponseData, SessionState } from '../types.ts'; diff --git a/src/daemon/handlers/session-open-prepare.ts b/src/daemon/handlers/session-open-prepare.ts index fcb6e828b..e16df4295 100644 --- a/src/daemon/handlers/session-open-prepare.ts +++ b/src/daemon/handlers/session-open-prepare.ts @@ -1,6 +1,6 @@ import { isDeepLinkTarget } from '../../core/open-target.ts'; import { ensureDeviceReady } from '../device-ready.ts'; -import type { DeviceInfo } from '../../utils/device.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; import type { DaemonRequest, DaemonResponse, SessionRuntimeHints, SessionState } from '../types.ts'; import { SessionStore } from '../session-store.ts'; import { @@ -15,7 +15,7 @@ import { resolveAndroidPackageForOpen, resolveSessionAppBundleIdForTarget, } from './session-open-target.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { errorResponse } from './response.ts'; import { resolveMacOsSurfaceAppState, diff --git a/src/daemon/handlers/session-open-surface.ts b/src/daemon/handlers/session-open-surface.ts index 3753278af..b17aa4cff 100644 --- a/src/daemon/handlers/session-open-surface.ts +++ b/src/daemon/handlers/session-open-surface.ts @@ -1,8 +1,8 @@ import { parseSessionSurface, type SessionSurface } from '../../core/session-surface.ts'; import { resolveFrontmostMacOsApp } from '../../platforms/ios/macos-helper.ts'; -import type { DeviceInfo } from '../../utils/device.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; import type { SessionRuntimeHints, SessionState } from '../types.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { successText } from '../../utils/success-text.ts'; import type { StartupPerfSample } from './session-startup-metrics.ts'; diff --git a/src/daemon/handlers/session-open-target.ts b/src/daemon/handlers/session-open-target.ts index c95c0d29d..6973492e2 100644 --- a/src/daemon/handlers/session-open-target.ts +++ b/src/daemon/handlers/session-open-target.ts @@ -3,7 +3,7 @@ import { isWebUrl, resolveIosDeviceDeepLinkBundleId, } from '../../core/open-target.ts'; -import { isApplePlatform, type DeviceInfo } from '../../utils/device.ts'; +import { isApplePlatform, type DeviceInfo } from '../../kernel/device.ts'; async function resolveIosBundleIdForOpen( device: DeviceInfo, diff --git a/src/daemon/handlers/session-open.ts b/src/daemon/handlers/session-open.ts index 276a46f1f..0474fe40e 100644 --- a/src/daemon/handlers/session-open.ts +++ b/src/daemon/handlers/session-open.ts @@ -12,7 +12,7 @@ import { createIosRunnerCacheColdBootPrewarmForOpen, } from '../apple-runner-options.ts'; import { applyRuntimeHintsToApp } from '../runtime-hints.ts'; -import type { DeviceInfo } from '../../utils/device.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; import type { DaemonRequest, DaemonResponse, SessionRuntimeHints, SessionState } from '../types.ts'; import { resolveSessionRequestLogPath, diff --git a/src/daemon/handlers/session-perf-xctrace.ts b/src/daemon/handlers/session-perf-xctrace.ts index 93e9cc043..478f24e75 100644 --- a/src/daemon/handlers/session-perf-xctrace.ts +++ b/src/daemon/handlers/session-perf-xctrace.ts @@ -1,5 +1,5 @@ -import { asAppError, normalizeError } from '../../utils/errors.ts'; -import { isApplePlatform } from '../../utils/device.ts'; +import { asAppError, normalizeError } from '../../kernel/errors.ts'; +import { isApplePlatform } from '../../kernel/device.ts'; import type { DaemonRequest, DaemonResponse, SessionState } from '../types.ts'; import { SessionStore } from '../session-store.ts'; import { diff --git a/src/daemon/handlers/session-perf.ts b/src/daemon/handlers/session-perf.ts index e32868bca..a219484e5 100644 --- a/src/daemon/handlers/session-perf.ts +++ b/src/daemon/handlers/session-perf.ts @@ -1,7 +1,7 @@ import path from 'node:path'; import type { SessionAction, SessionState } from '../types.ts'; -import { AppError, normalizeError } from '../../utils/errors.ts'; -import { isApplePlatform } from '../../utils/device.ts'; +import { AppError, normalizeError } from '../../kernel/errors.ts'; +import { isApplePlatform } from '../../kernel/device.ts'; import type { AndroidAdbExecutor } from '../../platforms/android/adb-executor.ts'; import { ANDROID_HPROF_SNAPSHOT_DESCRIPTION, diff --git a/src/daemon/handlers/session-replay-runtime.ts b/src/daemon/handlers/session-replay-runtime.ts index ed0d8431c..474d9d0c7 100644 --- a/src/daemon/handlers/session-replay-runtime.ts +++ b/src/daemon/handlers/session-replay-runtime.ts @@ -2,7 +2,7 @@ import fs from 'node:fs'; import path from 'node:path'; import { type CommandFlags } from '../../core/dispatch.ts'; import { parseReplayInput } from '../../compat/replay-input.ts'; -import { asAppError } from '../../utils/errors.ts'; +import { asAppError } from '../../kernel/errors.ts'; import type { DaemonInvokeFn, DaemonRequest, DaemonResponse, SessionAction } from '../types.ts'; import { emitRequestProgress, readReplayTestActionProgress } from '../request-progress.ts'; import { SessionStore } from '../session-store.ts'; diff --git a/src/daemon/handlers/session-runtime.ts b/src/daemon/handlers/session-runtime.ts index b8de2ab31..c0f6cd8c3 100644 --- a/src/daemon/handlers/session-runtime.ts +++ b/src/daemon/handlers/session-runtime.ts @@ -1,5 +1,5 @@ -import { AppError, asAppError } from '../../utils/errors.ts'; -import type { DeviceInfo } from '../../utils/device.ts'; +import { AppError, asAppError } from '../../kernel/errors.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; import type { CommandFlags } from '../../core/dispatch.ts'; import type { DaemonRequest, SessionRuntimeHints, SessionState } from '../types.ts'; import { SessionStore } from '../session-store.ts'; diff --git a/src/daemon/handlers/session-state.ts b/src/daemon/handlers/session-state.ts index 8379c1da8..d18a5f7cf 100644 --- a/src/daemon/handlers/session-state.ts +++ b/src/daemon/handlers/session-state.ts @@ -1,5 +1,5 @@ -import { asAppError } from '../../utils/errors.ts'; -import { isApplePlatform, type DeviceInfo } from '../../utils/device.ts'; +import { asAppError } from '../../kernel/errors.ts'; +import { isApplePlatform, type DeviceInfo } from '../../kernel/device.ts'; import type { DaemonRequest, DaemonResponse } from '../types.ts'; import { SessionStore } from '../session-store.ts'; import { ensureDeviceReady } from '../device-ready.ts'; diff --git a/src/daemon/handlers/session-test-discovery.ts b/src/daemon/handlers/session-test-discovery.ts index 64b354110..8c632320b 100644 --- a/src/daemon/handlers/session-test-discovery.ts +++ b/src/daemon/handlers/session-test-discovery.ts @@ -1,7 +1,7 @@ import fs from 'node:fs'; import path from 'node:path'; -import { AppError } from '../../utils/errors.ts'; -import { isApplePlatform, type PlatformSelector } from '../../utils/device.ts'; +import { AppError } from '../../kernel/errors.ts'; +import { isApplePlatform, type PlatformSelector } from '../../kernel/device.ts'; import { resolveRequestTrackingId } from '../request-cancel.ts'; import { SessionStore } from '../session-store.ts'; import { readReplayScriptMetadata, type ReplayScriptMetadata } from '../../replay/script.ts'; diff --git a/src/daemon/handlers/session-test-runtime.ts b/src/daemon/handlers/session-test-runtime.ts index 0a619a337..390194237 100644 --- a/src/daemon/handlers/session-test-runtime.ts +++ b/src/daemon/handlers/session-test-runtime.ts @@ -2,7 +2,7 @@ import fs from 'node:fs'; import path from 'node:path'; import { setTimeout as sleep } from 'node:timers/promises'; import { emitDiagnostic } from '../../utils/diagnostics.ts'; -import { normalizeError } from '../../utils/errors.ts'; +import { normalizeError } from '../../kernel/errors.ts'; import { clearRequestCanceled, getRequestSignal, diff --git a/src/daemon/handlers/session-test-sharding.ts b/src/daemon/handlers/session-test-sharding.ts index 97395c06d..19cc209c5 100644 --- a/src/daemon/handlers/session-test-sharding.ts +++ b/src/daemon/handlers/session-test-sharding.ts @@ -8,8 +8,8 @@ import { matchesPlatformSelector, resolveAppleSimulatorSetPathForSelector, type DeviceInfo, -} from '../../utils/device.ts'; -import { AppError } from '../../utils/errors.ts'; +} from '../../kernel/device.ts'; +import { AppError } from '../../kernel/errors.ts'; import type { CommandFlags } from '../../core/dispatch.ts'; export type ReplayTestShardMode = 'all' | 'split'; diff --git a/src/daemon/handlers/session-test.ts b/src/daemon/handlers/session-test.ts index ac837c029..c1ddab528 100644 --- a/src/daemon/handlers/session-test.ts +++ b/src/daemon/handlers/session-test.ts @@ -1,4 +1,4 @@ -import { asAppError, normalizeError } from '../../utils/errors.ts'; +import { asAppError, normalizeError } from '../../kernel/errors.ts'; import { errorResponse } from './response.ts'; import type { DaemonRequest, diff --git a/src/daemon/handlers/session.ts b/src/daemon/handlers/session.ts index a6103ed17..cabb636d3 100644 --- a/src/daemon/handlers/session.ts +++ b/src/daemon/handlers/session.ts @@ -6,8 +6,8 @@ import { prepareIosRunner, type PrepareIosRunnerResult, } from '../../platforms/ios/runner-client.ts'; -import type { DeviceInfo } from '../../utils/device.ts'; -import { isApplePlatform } from '../../utils/device.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; +import { isApplePlatform } from '../../kernel/device.ts'; import type { DaemonInvokeFn, DaemonRequest, DaemonResponse, SessionState } from '../types.ts'; import { SessionStore } from '../session-store.ts'; import { contextFromFlags } from '../context.ts'; diff --git a/src/daemon/handlers/snapshot-alert.ts b/src/daemon/handlers/snapshot-alert.ts index eda00cf24..a2e5293e1 100644 --- a/src/daemon/handlers/snapshot-alert.ts +++ b/src/daemon/handlers/snapshot-alert.ts @@ -8,7 +8,7 @@ import { sleep } from '../../utils/timeouts.ts'; import { runIosRunnerCommand } from '../../platforms/ios/runner-client.ts'; import { runMacOsAlertAction } from '../../platforms/ios/macos-helper.ts'; import { handleAndroidAlert } from '../../platforms/android/alert.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import type { DaemonRequest, DaemonResponse, SessionState } from '../types.ts'; import { SessionStore } from '../session-store.ts'; import { buildAppleRunnerRequestOptions } from '../apple-runner-options.ts'; diff --git a/src/daemon/handlers/snapshot-capture.ts b/src/daemon/handlers/snapshot-capture.ts index c658d29bd..54b6ea9a2 100644 --- a/src/daemon/handlers/snapshot-capture.ts +++ b/src/daemon/handlers/snapshot-capture.ts @@ -1,5 +1,5 @@ import { dispatchCommand, type CommandFlags } from '../../core/dispatch.ts'; -import { isMobilePlatform } from '../../utils/device.ts'; +import { isMobilePlatform } from '../../kernel/device.ts'; import { sleep } from '../../utils/timeouts.ts'; import { runMacOsSnapshotAction } from '../../platforms/ios/macos-helper.ts'; import { snapshotLinux } from '../../platforms/linux/snapshot.ts'; diff --git a/src/daemon/http-errors.ts b/src/daemon/http-errors.ts index ace94f7fa..94c222a50 100644 --- a/src/daemon/http-errors.ts +++ b/src/daemon/http-errors.ts @@ -1,5 +1,5 @@ import type http from 'node:http'; -import { normalizeError } from '../utils/errors.ts'; +import { normalizeError } from '../kernel/errors.ts'; export type NormalizedHttpError = ReturnType; diff --git a/src/daemon/http-server.ts b/src/daemon/http-server.ts index 23198eef3..9c7045061 100644 --- a/src/daemon/http-server.ts +++ b/src/daemon/http-server.ts @@ -1,6 +1,6 @@ import http, { type IncomingHttpHeaders } from 'node:http'; import fs from 'node:fs'; -import { AppError, normalizeError, toAppErrorCode } from '../utils/errors.ts'; +import { AppError, normalizeError, toAppErrorCode } from '../kernel/errors.ts'; import { emitDiagnostic } from '../utils/diagnostics.ts'; import { timingSafeStringEqual } from '../utils/timing-safe-equal.ts'; import type { diff --git a/src/daemon/install-source-resolution.ts b/src/daemon/install-source-resolution.ts index 93f79d822..5716678da 100644 --- a/src/daemon/install-source-resolution.ts +++ b/src/daemon/install-source-resolution.ts @@ -1,4 +1,4 @@ -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; import type { MaterializeInstallSource } from '../platforms/install-source.ts'; import { cleanupUploadedArtifact, prepareUploadedArtifact } from './artifact-tracking.ts'; import type { DaemonInstallSource, DaemonRequest } from './types.ts'; diff --git a/src/daemon/interaction-outcome-policy.ts b/src/daemon/interaction-outcome-policy.ts index af5fb1bd7..99acb6dd1 100644 --- a/src/daemon/interaction-outcome-policy.ts +++ b/src/daemon/interaction-outcome-policy.ts @@ -1,5 +1,5 @@ import { dispatchCommand, type CommandFlags } from '../core/dispatch.ts'; -import { isMobilePlatform } from '../utils/device.ts'; +import { isMobilePlatform } from '../kernel/device.ts'; import type { SnapshotNode, SnapshotState } from '../kernel/snapshot.ts'; import { emitDiagnostic } from '../utils/diagnostics.ts'; import { contextFromFlags } from './context.ts'; diff --git a/src/daemon/lease-registry.ts b/src/daemon/lease-registry.ts index 18c9dad3c..fbf6952ff 100644 --- a/src/daemon/lease-registry.ts +++ b/src/daemon/lease-registry.ts @@ -1,6 +1,6 @@ import crypto from 'node:crypto'; import type { LeaseBackend } from '../contracts.ts'; -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; import { normalizeTenantId } from './config.ts'; export type DeviceLease = { diff --git a/src/daemon/materialized-path-registry.ts b/src/daemon/materialized-path-registry.ts index f09589f2c..840ecbdd1 100644 --- a/src/daemon/materialized-path-registry.ts +++ b/src/daemon/materialized-path-registry.ts @@ -2,7 +2,7 @@ import crypto from 'node:crypto'; import fs from 'node:fs/promises'; import os from 'node:os'; import path from 'node:path'; -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; const DEFAULT_MATERIALIZED_PATH_TTL_MS = 15 * 60 * 1000; diff --git a/src/daemon/post-gesture-stabilization.ts b/src/daemon/post-gesture-stabilization.ts index cee4ef659..e28a225c4 100644 --- a/src/daemon/post-gesture-stabilization.ts +++ b/src/daemon/post-gesture-stabilization.ts @@ -1,5 +1,5 @@ import { emitDiagnostic } from '../utils/diagnostics.ts'; -import { isMobilePlatform } from '../utils/device.ts'; +import { isMobilePlatform } from '../kernel/device.ts'; import type { CommandFlags } from '../core/dispatch.ts'; import type { SnapshotState } from '../kernel/snapshot.ts'; import { sleep } from '../utils/timeouts.ts'; diff --git a/src/daemon/recording-provider.ts b/src/daemon/recording-provider.ts index 2d420c5e9..56cad98a4 100644 --- a/src/daemon/recording-provider.ts +++ b/src/daemon/recording-provider.ts @@ -1,5 +1,5 @@ import { buildSimctlArgsForDevice } from '../platforms/ios/simctl.ts'; -import type { DeviceInfo } from '../utils/device.ts'; +import type { DeviceInfo } from '../kernel/device.ts'; import { runCmdBackground, type ExecBackgroundResult, type ExecResult } from '../utils/exec.ts'; import { createScopedProvider } from '../utils/scoped-provider.ts'; diff --git a/src/daemon/request-admission.ts b/src/daemon/request-admission.ts index b727dafde..9b26aecdc 100644 --- a/src/daemon/request-admission.ts +++ b/src/daemon/request-admission.ts @@ -1,4 +1,4 @@ -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; import { normalizeTenantId, resolveSessionIsolationMode } from './config.ts'; import { isLeaseAdmissionExempt } from './daemon-command-registry.ts'; import { diff --git a/src/daemon/request-cancel.ts b/src/daemon/request-cancel.ts index 49f27e9ef..68761cd26 100644 --- a/src/daemon/request-cancel.ts +++ b/src/daemon/request-cancel.ts @@ -1,4 +1,4 @@ -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; const canceledRequestIds = new Set(); const requestAbortControllers = new Map(); diff --git a/src/daemon/request-finalization.ts b/src/daemon/request-finalization.ts index 5668b8d7d..d8a02651f 100644 --- a/src/daemon/request-finalization.ts +++ b/src/daemon/request-finalization.ts @@ -1,5 +1,5 @@ import path from 'node:path'; -import { AppError, normalizeError, toAppErrorCode } from '../utils/errors.ts'; +import { AppError, normalizeError, toAppErrorCode } from '../kernel/errors.ts'; import { emitDiagnostic, flushDiagnosticsToSessionFile, diff --git a/src/daemon/request-generic-dispatch.ts b/src/daemon/request-generic-dispatch.ts index 0a9925701..f3e6c16e9 100644 --- a/src/daemon/request-generic-dispatch.ts +++ b/src/daemon/request-generic-dispatch.ts @@ -24,7 +24,7 @@ import { recordTouchVisualizationEvent, } from './recording-gestures.ts'; import { markPostGestureStabilization } from './post-gesture-stabilization.ts'; -import { normalizeError } from '../utils/errors.ts'; +import { normalizeError } from '../kernel/errors.ts'; import { shouldGuardAndroidBlockingDialog } from './daemon-command-registry.ts'; const GESTURE_PLATFORM_COMMANDS: Readonly> = { diff --git a/src/daemon/request-handler-chain.ts b/src/daemon/request-handler-chain.ts index f84cb430d..ba87d9d9f 100644 --- a/src/daemon/request-handler-chain.ts +++ b/src/daemon/request-handler-chain.ts @@ -1,6 +1,6 @@ import type { CommandFlags } from '../core/dispatch.ts'; import type { AndroidAdbExecutor } from '../platforms/android/adb-executor.ts'; -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; import { getDaemonCommandRoute } from './daemon-command-registry.ts'; import type { DaemonCommandContext } from './context.ts'; import type { LeaseLifecycleProvider } from './handlers/lease.ts'; diff --git a/src/daemon/request-lock-policy.ts b/src/daemon/request-lock-policy.ts index d2d3d7b8e..61d883ba3 100644 --- a/src/daemon/request-lock-policy.ts +++ b/src/daemon/request-lock-policy.ts @@ -1,4 +1,4 @@ -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; import type { CommandFlags } from '../core/dispatch.ts'; import type { SessionState, DaemonRequest } from './types.ts'; import { @@ -7,7 +7,7 @@ import { type SessionSelectorConflict, type SessionSelectorConflictKey, } from './session-selector.ts'; -import { isApplePlatform, type PlatformSelector } from '../utils/device.ts'; +import { isApplePlatform, type PlatformSelector } from '../kernel/device.ts'; import { buildSessionRecoveryHint, describeSessionDevice } from './session-recovery-hints.ts'; import { shellQuoteIfNeeded } from '../utils/shell-quote.ts'; import { hasLockableDeviceSelector, hasSelectorValue } from './device-selector-intent.ts'; diff --git a/src/daemon/request-platform-providers.ts b/src/daemon/request-platform-providers.ts index cec65c533..9eff68362 100644 --- a/src/daemon/request-platform-providers.ts +++ b/src/daemon/request-platform-providers.ts @@ -10,7 +10,7 @@ import type { } from '../platforms/ios/tool-provider.ts'; import type { LinuxToolProvider } from '../platforms/linux/tool-provider.ts'; import type { WebProvider } from '../platforms/web/provider.ts'; -import { isApplePlatform, type DeviceInfo } from '../utils/device.ts'; +import { isApplePlatform, type DeviceInfo } from '../kernel/device.ts'; import type { AppLogProvider } from './app-log.ts'; import { hasExplicitDeviceSelector } from './device-selector-intent.ts'; import type { RecordingProvider } from './recording-provider.ts'; diff --git a/src/daemon/request-router.ts b/src/daemon/request-router.ts index 20fee8684..bf0ed8cb3 100644 --- a/src/daemon/request-router.ts +++ b/src/daemon/request-router.ts @@ -2,7 +2,7 @@ import { type DeviceInventoryProvider, withTargetDeviceResolutionScope, } from '../core/dispatch-resolve.ts'; -import { AppError, normalizeError, retriableForErrorCode } from '../utils/errors.ts'; +import { AppError, normalizeError, retriableForErrorCode } from '../kernel/errors.ts'; import { supportedPlatformsForCommand } from '../core/capabilities.ts'; import { timingSafeStringEqual } from '../utils/timing-safe-equal.ts'; import type { DaemonError, ResponseCost } from '../contracts.ts'; diff --git a/src/daemon/resumable-upload.ts b/src/daemon/resumable-upload.ts index 114628206..76f0e2f25 100644 --- a/src/daemon/resumable-upload.ts +++ b/src/daemon/resumable-upload.ts @@ -3,7 +3,7 @@ import fs from 'node:fs'; import path from 'node:path'; import type { IncomingMessage } from 'node:http'; import { pipeline } from 'node:stream/promises'; -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; import { extractTarInstallableArtifact } from './artifact-archive.ts'; import { createArtifactTempDir, diff --git a/src/daemon/runtime-artifacts.ts b/src/daemon/runtime-artifacts.ts index 7e5ec0d1d..aacbd06e5 100644 --- a/src/daemon/runtime-artifacts.ts +++ b/src/daemon/runtime-artifacts.ts @@ -1,5 +1,5 @@ import type { ArtifactAdapter } from '../io.ts'; -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; export function createUnsupportedArtifactAdapter( label: string, diff --git a/src/daemon/runtime-hints.ts b/src/daemon/runtime-hints.ts index 3fcc0e235..c0ec9b737 100644 --- a/src/daemon/runtime-hints.ts +++ b/src/daemon/runtime-hints.ts @@ -1,5 +1,5 @@ -import type { DeviceInfo } from '../utils/device.ts'; -import { AppError, asAppError } from '../utils/errors.ts'; +import type { DeviceInfo } from '../kernel/device.ts'; +import { AppError, asAppError } from '../kernel/errors.ts'; import type { SessionRuntimeHints } from './types.ts'; import { resolveRuntimeTransportHints, diff --git a/src/daemon/screenshot-runtime.ts b/src/daemon/screenshot-runtime.ts index ee5b64b10..4cfaef016 100644 --- a/src/daemon/screenshot-runtime.ts +++ b/src/daemon/screenshot-runtime.ts @@ -6,7 +6,7 @@ import type { ArtifactAdapter } from '../io.ts'; import { createAgentDevice, localCommandPolicy } from '../runtime.ts'; import { dispatchCommand } from '../core/dispatch.ts'; import { screenshotFlagsFromOptions, screenshotOptionsFromFlags } from '../contracts/screenshot.ts'; -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; import { readScreenshotResultData } from '../utils/screenshot-result.ts'; import type { DaemonCommandContext } from './context.ts'; import type { SessionState } from './types.ts'; diff --git a/src/daemon/selector-runtime-backend.ts b/src/daemon/selector-runtime-backend.ts index d6f999121..53e984958 100644 --- a/src/daemon/selector-runtime-backend.ts +++ b/src/daemon/selector-runtime-backend.ts @@ -5,7 +5,7 @@ import type { } from '../backend.ts'; import { resolveTargetDevice, type CommandFlags } from '../core/dispatch.ts'; import { createAgentDevice } from '../runtime.ts'; -import { isApplePlatform } from '../utils/device.ts'; +import { isApplePlatform } from '../kernel/device.ts'; import { noActiveSessionError, requireCommandSupported } from './handlers/response.ts'; import type { SnapshotNode } from '../kernel/snapshot.ts'; import { findNodeByLabel } from '../utils/snapshot-processing.ts'; diff --git a/src/daemon/selector-runtime.ts b/src/daemon/selector-runtime.ts index 14f52c562..60d6e018e 100644 --- a/src/daemon/selector-runtime.ts +++ b/src/daemon/selector-runtime.ts @@ -1,6 +1,6 @@ import { parseWaitPositionals } from '../core/wait-positionals.ts'; import type { WaitParsed } from '../core/wait-positionals.ts'; -import { AppError, asAppError, normalizeError } from '../utils/errors.ts'; +import { AppError, asAppError, normalizeError } from '../kernel/errors.ts'; import type { SnapshotNode } from '../kernel/snapshot.ts'; import { runIosRunnerCommand } from '../platforms/ios/runner-client.ts'; import { buildAppleRunnerRequestOptions } from './apple-runner-options.ts'; diff --git a/src/daemon/selectors-match.ts b/src/daemon/selectors-match.ts index d62bdd6ca..8843d3d59 100644 --- a/src/daemon/selectors-match.ts +++ b/src/daemon/selectors-match.ts @@ -1,4 +1,4 @@ -import type { Platform } from '../utils/device.ts'; +import type { Platform } from '../kernel/device.ts'; import type { SnapshotNode } from '../kernel/snapshot.ts'; import { isNodeEditable, isNodeVisible } from '../utils/selector-node.ts'; import { extractNodeText, normalizeType } from '../utils/snapshot-processing.ts'; diff --git a/src/daemon/selectors-resolve.ts b/src/daemon/selectors-resolve.ts index 202702aa1..9a96e3f02 100644 --- a/src/daemon/selectors-resolve.ts +++ b/src/daemon/selectors-resolve.ts @@ -1,4 +1,4 @@ -import type { Platform } from '../utils/device.ts'; +import type { Platform } from '../kernel/device.ts'; import type { SnapshotNode, SnapshotState } from '../kernel/snapshot.ts'; import { matchesSelector } from './selectors-match.ts'; import type { Selector, SelectorChain } from './selectors-parse.ts'; diff --git a/src/daemon/session-selector.ts b/src/daemon/session-selector.ts index 38067db54..79c4f667b 100644 --- a/src/daemon/session-selector.ts +++ b/src/daemon/session-selector.ts @@ -1,7 +1,7 @@ -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; import type { CommandFlags } from '../core/dispatch.ts'; import type { SessionState } from './types.ts'; -import { matchesPlatformSelector } from '../utils/device.ts'; +import { matchesPlatformSelector } from '../kernel/device.ts'; import { parseSerialAllowlist } from '../utils/device-isolation.ts'; import { buildSessionRecoveryHint, describeSessionDevice } from './session-recovery-hints.ts'; diff --git a/src/daemon/session-teardown.ts b/src/daemon/session-teardown.ts index 25c35517f..b1d405af2 100644 --- a/src/daemon/session-teardown.ts +++ b/src/daemon/session-teardown.ts @@ -1,5 +1,5 @@ import { emitDiagnostic } from '../utils/diagnostics.ts'; -import { isApplePlatform } from '../utils/device.ts'; +import { isApplePlatform } from '../kernel/device.ts'; import { runMacOsAlertAction } from '../platforms/ios/macos-helper.ts'; import { stopAppLog } from './app-log.ts'; import { stopIosRunnerSession } from '../platforms/ios/runner-client.ts'; diff --git a/src/daemon/snapshot-runtime.ts b/src/daemon/snapshot-runtime.ts index a1e59f699..bcb9664ec 100644 --- a/src/daemon/snapshot-runtime.ts +++ b/src/daemon/snapshot-runtime.ts @@ -1,7 +1,7 @@ import type { AgentDeviceBackend, BackendSnapshotResult } from '../backend.ts'; import type { CommandSessionRecord } from '../runtime.ts'; import { createAgentDevice } from '../runtime.ts'; -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; import type { SnapshotDiffSummary } from '../utils/snapshot-diff.ts'; import type { DaemonRequest, DaemonResponse, DaemonResponseData, SessionState } from './types.ts'; import { SessionStore } from './session-store.ts'; diff --git a/src/daemon/target-shutdown.ts b/src/daemon/target-shutdown.ts index eb8ce5e07..3ea21ca52 100644 --- a/src/daemon/target-shutdown.ts +++ b/src/daemon/target-shutdown.ts @@ -1,8 +1,8 @@ import { runAndroidAdb } from '../platforms/android/adb.ts'; import { getSimulatorState, shutdownSimulator } from '../platforms/ios/simulator.ts'; import type { TargetShutdownResult } from '../target-shutdown-contract.ts'; -import type { DeviceInfo } from '../utils/device.ts'; -import { normalizeError } from '../utils/errors.ts'; +import type { DeviceInfo } from '../kernel/device.ts'; +import { normalizeError } from '../kernel/errors.ts'; import { isAndroidEmulator, isIosSimulator } from './device-targets.ts'; export type DeviceTargetShutdownResult = TargetShutdownResult; diff --git a/src/daemon/transport.ts b/src/daemon/transport.ts index 531d77855..78bec820c 100644 --- a/src/daemon/transport.ts +++ b/src/daemon/transport.ts @@ -1,6 +1,6 @@ import net from 'node:net'; import type { Server as HttpServer } from 'node:http'; -import { AppError, normalizeError } from '../utils/errors.ts'; +import { AppError, normalizeError } from '../kernel/errors.ts'; import type { DaemonInvokeFn, DaemonRequest, DaemonResponse } from './types.ts'; import { clearRequestCanceled, diff --git a/src/daemon/types.ts b/src/daemon/types.ts index 9ce53132a..cf4111544 100644 --- a/src/daemon/types.ts +++ b/src/daemon/types.ts @@ -15,7 +15,7 @@ import type { GestureReferenceFrame, ScrollDirection } from '../core/scroll-gest import type { LogBackend } from './network-log.ts'; import type { SessionSurface } from '../core/session-surface.ts'; import type { RecordingExportQuality } from '../core/recording-export-quality.ts'; -import type { DeviceInfo, Platform, PlatformSelector } from '../utils/device.ts'; +import type { DeviceInfo, Platform, PlatformSelector } from '../kernel/device.ts'; import type { ExecBackgroundResult, ExecResult } from '../utils/exec.ts'; import type { SnapshotState } from '../kernel/snapshot.ts'; import type { AppLogState } from './app-log-process.ts'; diff --git a/src/daemon/upload-http.ts b/src/daemon/upload-http.ts index 1070b0b7c..d922c8128 100644 --- a/src/daemon/upload-http.ts +++ b/src/daemon/upload-http.ts @@ -1,5 +1,5 @@ import http from 'node:http'; -import { AppError, normalizeError } from '../utils/errors.ts'; +import { AppError, normalizeError } from '../kernel/errors.ts'; import type { DaemonRequest } from './types.ts'; import { trackUploadedArtifact } from './artifact-tracking.ts'; import { diff --git a/src/daemon/upload.ts b/src/daemon/upload.ts index e4cc36db3..aee0c8572 100644 --- a/src/daemon/upload.ts +++ b/src/daemon/upload.ts @@ -1,7 +1,7 @@ import fs from 'node:fs'; import path from 'node:path'; import type { IncomingMessage } from 'node:http'; -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; import { extractTarInstallableArtifact } from './artifact-archive.ts'; import { createArtifactTempDir, diff --git a/src/index.ts b/src/index.ts index 79ad42368..bd3ad2dc5 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,6 +1,6 @@ export { createAgentDeviceClient } from './client.ts'; export { createLocalArtifactAdapter } from './io.ts'; -export { AppError, isAgentDeviceError, normalizeAgentDeviceError } from './utils/errors.ts'; +export { AppError, isAgentDeviceError, normalizeAgentDeviceError } from './kernel/errors.ts'; export { centerOfRect } from './kernel/snapshot.ts'; export type { @@ -18,7 +18,7 @@ export type { TemporaryFile, } from './io.ts'; -export type { AppErrorCode, NormalizedError } from './utils/errors.ts'; +export type { AppErrorCode, NormalizedError } from './kernel/errors.ts'; export type { ReplayTestReporter, diff --git a/src/io.ts b/src/io.ts index 98924b9c9..78001c35b 100644 --- a/src/io.ts +++ b/src/io.ts @@ -1,7 +1,7 @@ import { promises as fs } from 'node:fs'; import os from 'node:os'; import path from 'node:path'; -import { AppError } from './utils/errors.ts'; +import { AppError } from './kernel/errors.ts'; export type FileInputRef = | { diff --git a/src/utils/device.ts b/src/kernel/device.ts similarity index 100% rename from src/utils/device.ts rename to src/kernel/device.ts diff --git a/src/utils/errors.ts b/src/kernel/errors.ts similarity index 100% rename from src/utils/errors.ts rename to src/kernel/errors.ts diff --git a/src/utils/redaction.ts b/src/kernel/redaction.ts similarity index 100% rename from src/utils/redaction.ts rename to src/kernel/redaction.ts diff --git a/src/platforms/__tests__/boot-diagnostics.test.ts b/src/platforms/__tests__/boot-diagnostics.test.ts index 2e97cc3d8..0e87d9195 100644 --- a/src/platforms/__tests__/boot-diagnostics.test.ts +++ b/src/platforms/__tests__/boot-diagnostics.test.ts @@ -1,7 +1,7 @@ import { test } from 'vitest'; import assert from 'node:assert/strict'; import { bootFailureHint, classifyBootFailure } from '../boot-diagnostics.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; test('classifyBootFailure maps timeout errors', () => { const reason = classifyBootFailure({ diff --git a/src/platforms/android/__tests__/devices.test.ts b/src/platforms/android/__tests__/devices.test.ts index 1c2d58825..7f5f7e09c 100644 --- a/src/platforms/android/__tests__/devices.test.ts +++ b/src/platforms/android/__tests__/devices.test.ts @@ -11,7 +11,7 @@ vi.mock('../../../utils/exec.ts', async (importOriginal) => { const execActual = await vi.importActual('../../../utils/exec.ts'); -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; import { runCmdDetached } from '../../../utils/exec.ts'; import { ensureAndroidEmulatorBooted, diff --git a/src/platforms/android/__tests__/index.test.ts b/src/platforms/android/__tests__/index.test.ts index 4fc2af533..c1084b935 100644 --- a/src/platforms/android/__tests__/index.test.ts +++ b/src/platforms/android/__tests__/index.test.ts @@ -25,9 +25,9 @@ import { pushAndroidNotification } from '../notifications.ts'; import { setAndroidSetting } from '../settings.ts'; import { withAndroidAdbProvider } from '../adb-executor.ts'; import { parseAndroidLaunchablePackages } from '../app-parsers.ts'; -import type { DeviceInfo } from '../../../utils/device.ts'; +import type { DeviceInfo } from '../../../kernel/device.ts'; import { flushDiagnosticsToSessionFile, withDiagnosticsScope } from '../../../utils/diagnostics.ts'; -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; import { androidUiNodes, parseUiHierarchy } from '../ui-hierarchy.ts'; async function withMockedAdb( diff --git a/src/platforms/android/__tests__/input-actions-fill.test.ts b/src/platforms/android/__tests__/input-actions-fill.test.ts index 55db56816..4828bef50 100644 --- a/src/platforms/android/__tests__/input-actions-fill.test.ts +++ b/src/platforms/android/__tests__/input-actions-fill.test.ts @@ -1,7 +1,7 @@ import { test } from 'vitest'; import assert from 'node:assert/strict'; import { ANDROID_EMULATOR } from '../../../__tests__/test-utils/index.ts'; -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; import { fillAndroid, typeAndroid } from '../input-actions.ts'; import { withAndroidAdbProvider, type AndroidAdbExecutor } from '../adb-executor.ts'; import { diff --git a/src/platforms/android/__tests__/logcat.test.ts b/src/platforms/android/__tests__/logcat.test.ts index 4b489be32..988c1c71d 100644 --- a/src/platforms/android/__tests__/logcat.test.ts +++ b/src/platforms/android/__tests__/logcat.test.ts @@ -1,6 +1,6 @@ import assert from 'node:assert/strict'; import { test } from 'vitest'; -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; import { streamAndroidLogcatWithAdb } from '../logcat.ts'; test('streamAndroidLogcatWithAdb reports unsupported providers without spawn', () => { diff --git a/src/platforms/android/__tests__/snapshot.test.ts b/src/platforms/android/__tests__/snapshot.test.ts index 6057f58fa..07b8f77f2 100644 --- a/src/platforms/android/__tests__/snapshot.test.ts +++ b/src/platforms/android/__tests__/snapshot.test.ts @@ -19,9 +19,9 @@ vi.mock('../adb.ts', async (importOriginal) => { import { screenshotAndroid } from '../screenshot.ts'; import { dumpUiHierarchy, snapshotAndroid } from '../snapshot.ts'; import { buildUiHierarchySnapshot, parseUiHierarchyTree } from '../ui-hierarchy.ts'; -import type { DeviceInfo } from '../../../utils/device.ts'; +import type { DeviceInfo } from '../../../kernel/device.ts'; import { flushDiagnosticsToSessionFile, withDiagnosticsScope } from '../../../utils/diagnostics.ts'; -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; import { runCmd } from '../../../utils/exec.ts'; import { sleep } from '../adb.ts'; import { diff --git a/src/platforms/android/adb-executor.ts b/src/platforms/android/adb-executor.ts index e0820acff..d94eed60f 100644 --- a/src/platforms/android/adb-executor.ts +++ b/src/platforms/android/adb-executor.ts @@ -1,6 +1,6 @@ import { AsyncLocalStorage } from 'node:async_hooks'; import type { Readable, Writable } from 'node:stream'; -import type { DeviceInfo } from '../../utils/device.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; import { runCmd, runCmdBackground, @@ -11,7 +11,7 @@ import { type ExecOptions, type ExecResult, } from '../../utils/exec.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; export type AndroidAdbExecutorOptions = Pick< ExecOptions, diff --git a/src/platforms/android/adb.ts b/src/platforms/android/adb.ts index a5e4ba7bc..086e3453e 100644 --- a/src/platforms/android/adb.ts +++ b/src/platforms/android/adb.ts @@ -1,4 +1,4 @@ -import type { DeviceInfo } from '../../utils/device.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; import { resolveAndroidAdbExecutor, type AndroidAdbExecutorOptions, diff --git a/src/platforms/android/alert.ts b/src/platforms/android/alert.ts index 984c410c7..09d12732a 100644 --- a/src/platforms/android/alert.ts +++ b/src/platforms/android/alert.ts @@ -4,11 +4,11 @@ import { ALERT_POLL_INTERVAL_MS, DEFAULT_ALERT_TIMEOUT_MS, } from '../../alert-contract.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { withDiagnosticTimer } from '../../utils/diagnostics.ts'; import { successText } from '../../utils/success-text.ts'; import { sleep } from '../../utils/timeouts.ts'; -import type { DeviceInfo } from '../../utils/device.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; import { chooseAndroidAlertButton, findAndroidAlertCandidate, diff --git a/src/platforms/android/app-control.ts b/src/platforms/android/app-control.ts index 10c0a5166..aec09d34a 100644 --- a/src/platforms/android/app-control.ts +++ b/src/platforms/android/app-control.ts @@ -1,4 +1,4 @@ -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import type { AndroidAdbExecutor } from './adb-executor.ts'; import { isAmStartError, parseAndroidLaunchComponent } from './app-lifecycle.ts'; diff --git a/src/platforms/android/app-helpers.ts b/src/platforms/android/app-helpers.ts index b45b97f2a..73176a3ee 100644 --- a/src/platforms/android/app-helpers.ts +++ b/src/platforms/android/app-helpers.ts @@ -1,4 +1,4 @@ -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { resolveAppsFilter, type AppsFilter } from '../../contracts/app-inventory.ts'; import type { AndroidAdbExecutor } from './adb-executor.ts'; import { diff --git a/src/platforms/android/app-lifecycle.ts b/src/platforms/android/app-lifecycle.ts index 342b2e090..b4310a97c 100644 --- a/src/platforms/android/app-lifecycle.ts +++ b/src/platforms/android/app-lifecycle.ts @@ -2,10 +2,10 @@ import { promises as fs } from 'node:fs'; import os from 'node:os'; import path from 'node:path'; import { resolveFileOverridePath, runCmd, whichCmd } from '../../utils/exec.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { sleep } from '../../utils/timeouts.ts'; import type { AppsFilter } from '../../contracts/app-inventory.ts'; -import type { DeviceInfo } from '../../utils/device.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; import { isDeepLinkTarget } from '../../core/open-target.ts'; import { createAppResolutionCache, type AppResolutionCacheScope } from '../app-resolution-cache.ts'; import { waitForAndroidBoot } from './devices.ts'; diff --git a/src/platforms/android/device-input-state.ts b/src/platforms/android/device-input-state.ts index 5081cbd03..62113e504 100644 --- a/src/platforms/android/device-input-state.ts +++ b/src/platforms/android/device-input-state.ts @@ -1,6 +1,6 @@ import { emitDiagnostic } from '../../utils/diagnostics.ts'; -import type { DeviceInfo } from '../../utils/device.ts'; -import { AppError } from '../../utils/errors.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; +import { AppError } from '../../kernel/errors.ts'; import { isClipboardShellUnsupported, sleep } from './adb.ts'; import { resolveAndroidAdbExecutor, type AndroidAdbExecutor } from './adb-executor.ts'; import { diff --git a/src/platforms/android/devices.ts b/src/platforms/android/devices.ts index 22d396460..5dbb09b33 100644 --- a/src/platforms/android/devices.ts +++ b/src/platforms/android/devices.ts @@ -1,8 +1,8 @@ import { runCmd, runCmdDetached, whichCmd } from '../../utils/exec.ts'; import type { ExecResult } from '../../utils/exec.ts'; import { sleep } from '../../utils/timeouts.ts'; -import { AppError, asAppError } from '../../utils/errors.ts'; -import type { DeviceInfo } from '../../utils/device.ts'; +import { AppError, asAppError } from '../../kernel/errors.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; import { Deadline, retryWithPolicy } from '../../utils/retry.ts'; import { resolveAndroidSerialAllowlist } from '../../utils/device-isolation.ts'; import { bootFailureHint, classifyBootFailure } from '../boot-diagnostics.ts'; diff --git a/src/platforms/android/fill-verification.ts b/src/platforms/android/fill-verification.ts index c4c432f0a..f4461c4d3 100644 --- a/src/platforms/android/fill-verification.ts +++ b/src/platforms/android/fill-verification.ts @@ -1,4 +1,4 @@ -import type { DeviceInfo } from '../../utils/device.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; import { emitDiagnostic } from '../../utils/diagnostics.ts'; import type { Rect } from '../../kernel/snapshot.ts'; import { diff --git a/src/platforms/android/input-actions.ts b/src/platforms/android/input-actions.ts index f23e7263b..3b0198970 100644 --- a/src/platforms/android/input-actions.ts +++ b/src/platforms/android/input-actions.ts @@ -1,5 +1,5 @@ -import { AppError } from '../../utils/errors.ts'; -import type { DeviceInfo } from '../../utils/device.ts'; +import { AppError } from '../../kernel/errors.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; import { emitDiagnostic } from '../../utils/diagnostics.ts'; import type { DeviceRotation } from '../../core/device-rotation.ts'; import { buildScrollGesturePlan, type ScrollDirection } from '../../core/scroll-gesture.ts'; diff --git a/src/platforms/android/instrumentation-helper.ts b/src/platforms/android/instrumentation-helper.ts index 39984a310..192a78902 100644 --- a/src/platforms/android/instrumentation-helper.ts +++ b/src/platforms/android/instrumentation-helper.ts @@ -1,4 +1,4 @@ -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; // Shared primitives for the Android instrumentation helpers (snapshot + multi-touch). // Both helpers drive `am instrument -w` and parse the resulting diff --git a/src/platforms/android/logcat.ts b/src/platforms/android/logcat.ts index bf36fac5f..839cbae82 100644 --- a/src/platforms/android/logcat.ts +++ b/src/platforms/android/logcat.ts @@ -1,5 +1,5 @@ import fs from 'node:fs'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import type { AndroidAdbExecutor, AndroidAdbProcess, AndroidAdbProvider } from './adb-executor.ts'; export type AndroidLogcatCaptureOptions = { diff --git a/src/platforms/android/multitouch-helper.ts b/src/platforms/android/multitouch-helper.ts index 371588602..3e49ce5da 100644 --- a/src/platforms/android/multitouch-helper.ts +++ b/src/platforms/android/multitouch-helper.ts @@ -1,10 +1,10 @@ import crypto from 'node:crypto'; import fs from 'node:fs/promises'; import path from 'node:path'; -import { AppError, normalizeError } from '../../utils/errors.ts'; +import { AppError, normalizeError } from '../../kernel/errors.ts'; import { emitDiagnostic, withDiagnosticTimer } from '../../utils/diagnostics.ts'; import { findProjectRoot, readVersion } from '../../utils/version.ts'; -import type { DeviceInfo } from '../../utils/device.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; import type { TransformGestureParams } from '../../core/scroll-gesture.ts'; import { installAndroidAdbPackage, diff --git a/src/platforms/android/notifications.ts b/src/platforms/android/notifications.ts index f6cd141d3..d60571cf3 100644 --- a/src/platforms/android/notifications.ts +++ b/src/platforms/android/notifications.ts @@ -1,5 +1,5 @@ -import { AppError } from '../../utils/errors.ts'; -import type { DeviceInfo } from '../../utils/device.ts'; +import { AppError } from '../../kernel/errors.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; import { runAndroidAdb } from './adb.ts'; type AndroidBroadcastPayload = { diff --git a/src/platforms/android/perf-frame-parser.ts b/src/platforms/android/perf-frame-parser.ts index 85f127a2c..93a482da6 100644 --- a/src/platforms/android/perf-frame-parser.ts +++ b/src/platforms/android/perf-frame-parser.ts @@ -1,4 +1,4 @@ -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { roundPercent } from '../perf-utils.ts'; import { parseNumericToken } from './perf-parsing.ts'; import { diff --git a/src/platforms/android/perf-frame.ts b/src/platforms/android/perf-frame.ts index 0723e47a4..9e67f27e0 100644 --- a/src/platforms/android/perf-frame.ts +++ b/src/platforms/android/perf-frame.ts @@ -1,5 +1,5 @@ -import type { DeviceInfo } from '../../utils/device.ts'; -import { AppError } from '../../utils/errors.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; +import { AppError } from '../../kernel/errors.ts'; import { resolveAndroidAdbExecutor, type AndroidAdbExecutor } from './adb-executor.ts'; import { parseAndroidFramePerfSample, type AndroidFramePerfSample } from './perf-frame-parser.ts'; diff --git a/src/platforms/android/perf-native-artifacts.ts b/src/platforms/android/perf-native-artifacts.ts index d62048d88..7664596aa 100644 --- a/src/platforms/android/perf-native-artifacts.ts +++ b/src/platforms/android/perf-native-artifacts.ts @@ -1,8 +1,8 @@ import { promises as fs } from 'node:fs'; import path from 'node:path'; import { setTimeout as delay } from 'node:timers/promises'; -import type { DeviceInfo } from '../../utils/device.ts'; -import { AppError } from '../../utils/errors.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; +import { AppError } from '../../kernel/errors.ts'; import type { AndroidAdbExecutor } from './adb-executor.ts'; import { resolveAndroidAdbExecutor } from './adb-executor.ts'; import { annotateAndroidNativePerfError } from './perf-native-errors.ts'; diff --git a/src/platforms/android/perf-native-errors.ts b/src/platforms/android/perf-native-errors.ts index bebe85068..a5a69dc1c 100644 --- a/src/platforms/android/perf-native-errors.ts +++ b/src/platforms/android/perf-native-errors.ts @@ -1,4 +1,4 @@ -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import type { AndroidNativePerfKind } from './perf-native-types.ts'; export function annotateAndroidNativePerfError( diff --git a/src/platforms/android/perf-native-perfetto.ts b/src/platforms/android/perf-native-perfetto.ts index 057cb7d09..da6238f21 100644 --- a/src/platforms/android/perf-native-perfetto.ts +++ b/src/platforms/android/perf-native-perfetto.ts @@ -1,5 +1,5 @@ -import type { DeviceInfo } from '../../utils/device.ts'; -import { AppError } from '../../utils/errors.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; +import { AppError } from '../../kernel/errors.ts'; import { resolveAndroidAdbExecutor, type AndroidAdbExecutor } from './adb-executor.ts'; import { buildAndroidNativeRemotePath, diff --git a/src/platforms/android/perf-native-process.ts b/src/platforms/android/perf-native-process.ts index cc2e0f05f..0c1dedfd1 100644 --- a/src/platforms/android/perf-native-process.ts +++ b/src/platforms/android/perf-native-process.ts @@ -1,4 +1,4 @@ -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import type { AndroidAdbExecutor } from './adb-executor.ts'; import { buildAndroidNativeToolUnavailableHint } from './perf-native-errors.ts'; import { ANDROID_PERF_TIMEOUT_MS, type AndroidNativePerfKind } from './perf-native-types.ts'; diff --git a/src/platforms/android/perf-native-simpleperf.ts b/src/platforms/android/perf-native-simpleperf.ts index 4d2158571..d66939cbf 100644 --- a/src/platforms/android/perf-native-simpleperf.ts +++ b/src/platforms/android/perf-native-simpleperf.ts @@ -1,5 +1,5 @@ -import type { DeviceInfo } from '../../utils/device.ts'; -import { AppError } from '../../utils/errors.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; +import { AppError } from '../../kernel/errors.ts'; import { resolveAndroidAdbExecutor, type AndroidAdbExecutor } from './adb-executor.ts'; import { buildAndroidNativeRemotePath, diff --git a/src/platforms/android/perf-native-summary.ts b/src/platforms/android/perf-native-summary.ts index 63c757557..72d0fc276 100644 --- a/src/platforms/android/perf-native-summary.ts +++ b/src/platforms/android/perf-native-summary.ts @@ -1,4 +1,4 @@ -import type { DeviceInfo } from '../../utils/device.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; import { sampleAndroidFramePerf } from './perf-frame.ts'; import type { AndroidNativePerfFrameHealthSummary, diff --git a/src/platforms/android/perf.ts b/src/platforms/android/perf.ts index a80cb3dc9..96e332c6d 100644 --- a/src/platforms/android/perf.ts +++ b/src/platforms/android/perf.ts @@ -1,7 +1,7 @@ import { promises as fs } from 'node:fs'; import path from 'node:path'; -import type { DeviceInfo } from '../../utils/device.ts'; -import { AppError } from '../../utils/errors.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; +import { AppError } from '../../kernel/errors.ts'; import { splitNonEmptyTrimmedLines } from '../../utils/parsing.ts'; import { resolveAndroidAdbExecutor, type AndroidAdbExecutor } from './adb-executor.ts'; import { parseNumericToken } from './perf-parsing.ts'; diff --git a/src/platforms/android/screenshot.ts b/src/platforms/android/screenshot.ts index f122f83e5..85795c5b6 100644 --- a/src/platforms/android/screenshot.ts +++ b/src/platforms/android/screenshot.ts @@ -1,6 +1,6 @@ import { promises as fs } from 'node:fs'; -import { AppError } from '../../utils/errors.ts'; -import type { DeviceInfo } from '../../utils/device.ts'; +import { AppError } from '../../kernel/errors.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; import { runAndroidAdb, sleep } from './adb.ts'; // PNG file signature: 0x89 P N G \r \n 0x1A \n diff --git a/src/platforms/android/settings.ts b/src/platforms/android/settings.ts index 9a75e0005..f18792747 100644 --- a/src/platforms/android/settings.ts +++ b/src/platforms/android/settings.ts @@ -1,5 +1,5 @@ -import { AppError } from '../../utils/errors.ts'; -import type { DeviceInfo } from '../../utils/device.ts'; +import { AppError } from '../../kernel/errors.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; import { requireLocationCoordinates } from '../../utils/location-coordinates.ts'; import { summarizeCommandAttemptFailures, diff --git a/src/platforms/android/snapshot-helper-artifact.ts b/src/platforms/android/snapshot-helper-artifact.ts index 55efdab42..a6a474ee9 100644 --- a/src/platforms/android/snapshot-helper-artifact.ts +++ b/src/platforms/android/snapshot-helper-artifact.ts @@ -3,7 +3,7 @@ import fs from 'node:fs'; import fsp from 'node:fs/promises'; import os from 'node:os'; import path from 'node:path'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { readAndroidHelperManifestInteger, readAndroidHelperManifestLiteral, diff --git a/src/platforms/android/snapshot-helper-capture.ts b/src/platforms/android/snapshot-helper-capture.ts index ef8951671..793f84f99 100644 --- a/src/platforms/android/snapshot-helper-capture.ts +++ b/src/platforms/android/snapshot-helper-capture.ts @@ -1,4 +1,4 @@ -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import type { SnapshotOptions } from '../../kernel/snapshot.ts'; import { parseInstrumentationRecords, diff --git a/src/platforms/android/snapshot-helper-install.ts b/src/platforms/android/snapshot-helper-install.ts index a4b0894e0..776ca39e7 100644 --- a/src/platforms/android/snapshot-helper-install.ts +++ b/src/platforms/android/snapshot-helper-install.ts @@ -1,4 +1,4 @@ -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { readAndroidSnapshotHelperInstallOptions, verifyAndroidSnapshotHelperArtifact, diff --git a/src/platforms/android/snapshot-helper-session.ts b/src/platforms/android/snapshot-helper-session.ts index 39bb57e60..8bb434d29 100644 --- a/src/platforms/android/snapshot-helper-session.ts +++ b/src/platforms/android/snapshot-helper-session.ts @@ -1,7 +1,7 @@ import net from 'node:net'; import type { AndroidAdbProcess } from './adb-executor.ts'; -import type { DeviceInfo } from '../../utils/device.ts'; -import { AppError } from '../../utils/errors.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; +import { AppError } from '../../kernel/errors.ts'; import { emitDiagnostic } from '../../utils/diagnostics.ts'; import { ANDROID_SNAPSHOT_HELPER_OUTPUT_FORMAT, diff --git a/src/platforms/android/snapshot.ts b/src/platforms/android/snapshot.ts index 0d4b87b39..ecd112eb1 100644 --- a/src/platforms/android/snapshot.ts +++ b/src/platforms/android/snapshot.ts @@ -1,9 +1,9 @@ import fs from 'node:fs/promises'; import path from 'node:path'; import { withRetry } from '../../utils/retry.ts'; -import { AppError, normalizeError, toAppErrorCode } from '../../utils/errors.ts'; +import { AppError, normalizeError, toAppErrorCode } from '../../kernel/errors.ts'; import { emitDiagnostic, withDiagnosticTimer } from '../../utils/diagnostics.ts'; -import type { DeviceInfo } from '../../utils/device.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; import { findProjectRoot, readVersion } from '../../utils/version.ts'; import { attachRefs, diff --git a/src/platforms/appearance.ts b/src/platforms/appearance.ts index a7aaf8f9f..625c6abad 100644 --- a/src/platforms/appearance.ts +++ b/src/platforms/appearance.ts @@ -1,4 +1,4 @@ -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; export type AppearanceAction = 'light' | 'dark' | 'toggle'; diff --git a/src/platforms/boot-diagnostics.ts b/src/platforms/boot-diagnostics.ts index f074a8f70..ec64b4e2c 100644 --- a/src/platforms/boot-diagnostics.ts +++ b/src/platforms/boot-diagnostics.ts @@ -1,4 +1,4 @@ -import { asAppError } from '../utils/errors.ts'; +import { asAppError } from '../kernel/errors.ts'; export type BootFailureReason = | 'IOS_BOOT_TIMEOUT' diff --git a/src/platforms/install-source.ts b/src/platforms/install-source.ts index 426f68d39..601bc2d4e 100644 --- a/src/platforms/install-source.ts +++ b/src/platforms/install-source.ts @@ -5,7 +5,7 @@ import os from 'node:os'; import path from 'node:path'; import { Readable } from 'node:stream'; import { pipeline } from 'node:stream/promises'; -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; import { runCmd } from '../utils/exec.ts'; import { expandUserHomePath } from '../utils/path-resolution.ts'; diff --git a/src/platforms/ios/__tests__/apple-runner-platform.test.ts b/src/platforms/ios/__tests__/apple-runner-platform.test.ts index b01809040..af00f9c93 100644 --- a/src/platforms/ios/__tests__/apple-runner-platform.test.ts +++ b/src/platforms/ios/__tests__/apple-runner-platform.test.ts @@ -1,7 +1,7 @@ import { test } from 'vitest'; import assert from 'node:assert/strict'; import { resolveRunnerDestination, resolveRunnerPlatformName } from '../apple-runner-platform.ts'; -import type { DeviceInfo } from '../../../utils/device.ts'; +import type { DeviceInfo } from '../../../kernel/device.ts'; function iosSim(overrides: Partial = {}): DeviceInfo { return { diff --git a/src/platforms/ios/__tests__/debug-symbols.test.ts b/src/platforms/ios/__tests__/debug-symbols.test.ts index 23224131a..c08fbf38f 100644 --- a/src/platforms/ios/__tests__/debug-symbols.test.ts +++ b/src/platforms/ios/__tests__/debug-symbols.test.ts @@ -4,7 +4,7 @@ import os from 'node:os'; import path from 'node:path'; import { test } from 'vitest'; import { symbolicateCrashArtifact } from '../debug-symbols.ts'; -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; import { withCommandExecutorOverride } from '../../../utils/exec.ts'; const UUID = 'ABCDEFAB-CDEF-ABCD-EFAB-CDEFABCDEFAB'; diff --git a/src/platforms/ios/__tests__/index.test.ts b/src/platforms/ios/__tests__/index.test.ts index 8e095f5e3..8e486140b 100644 --- a/src/platforms/ios/__tests__/index.test.ts +++ b/src/platforms/ios/__tests__/index.test.ts @@ -75,9 +75,9 @@ import { import { runIosRunnerCommand } from '../runner-client.ts'; import { iosRunnerOverrides } from '../interactions.ts'; import { IOS_SIMULATOR_TERMINATE_TIMEOUT_MS } from '../config.ts'; -import type { DeviceInfo } from '../../../utils/device.ts'; +import type { DeviceInfo } from '../../../kernel/device.ts'; import { withDiagnosticsScope } from '../../../utils/diagnostics.ts'; -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; import { runCmd } from '../../../utils/exec.ts'; import { retryWithPolicy } from '../../../utils/retry.ts'; import { parseIosDeviceAppsPayload, parseIosDeviceProcessesPayload } from '../devicectl.ts'; diff --git a/src/platforms/ios/__tests__/launch-diagnostics.test.ts b/src/platforms/ios/__tests__/launch-diagnostics.test.ts index d58671613..f5fb2c1af 100644 --- a/src/platforms/ios/__tests__/launch-diagnostics.test.ts +++ b/src/platforms/ios/__tests__/launch-diagnostics.test.ts @@ -5,7 +5,7 @@ import { classifyLaunchFailure, launchFailureHint, } from '../launch-diagnostics.ts'; -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; test('isSimulatorLaunchFBSError identifies FBS code=4 errors', () => { const error = new AppError('COMMAND_FAILED', 'xcrun exited with code 4', { diff --git a/src/platforms/ios/__tests__/perf.test.ts b/src/platforms/ios/__tests__/perf.test.ts index 2355412e1..455ccd245 100644 --- a/src/platforms/ios/__tests__/perf.test.ts +++ b/src/platforms/ios/__tests__/perf.test.ts @@ -27,8 +27,8 @@ import { } from '../perf-xctrace.ts'; import { parseAppleFramePerfSample } from '../perf-frame.ts'; import { runCmd, runCmdBackground } from '../../../utils/exec.ts'; -import type { DeviceInfo } from '../../../utils/device.ts'; -import { AppError } from '../../../utils/errors.ts'; +import type { DeviceInfo } from '../../../kernel/device.ts'; +import { AppError } from '../../../kernel/errors.ts'; const mockRunCmd = vi.mocked(runCmd); const mockRunCmdBackground = vi.mocked(runCmdBackground); diff --git a/src/platforms/ios/__tests__/runner-client.test.ts b/src/platforms/ios/__tests__/runner-client.test.ts index 998d4780f..b5cc5b76b 100644 --- a/src/platforms/ios/__tests__/runner-client.test.ts +++ b/src/platforms/ios/__tests__/runner-client.test.ts @@ -29,13 +29,13 @@ vi.mock('../runner-macos-products.ts', async () => { }; }); -import type { DeviceInfo } from '../../../utils/device.ts'; +import type { DeviceInfo } from '../../../kernel/device.ts'; import { type RequestProgressEvent, withRequestProgressSink, } from '../../../daemon/request-progress.ts'; import { flushDiagnosticsToSessionFile, withDiagnosticsScope } from '../../../utils/diagnostics.ts'; -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; import { isReadOnlyRunnerCommand } from '../runner-command-traits.ts'; import { withRunnerCommandId, type RunnerCommand } from '../runner-contract.ts'; import { diff --git a/src/platforms/ios/__tests__/runner-command-retry.test.ts b/src/platforms/ios/__tests__/runner-command-retry.test.ts index 58882942f..14db0cc8f 100644 --- a/src/platforms/ios/__tests__/runner-command-retry.test.ts +++ b/src/platforms/ios/__tests__/runner-command-retry.test.ts @@ -2,7 +2,7 @@ import { beforeEach, test, vi } from 'vitest'; import assert from 'node:assert/strict'; import { IOS_SIMULATOR } from '../../../__tests__/test-utils/index.ts'; import { clearRequestCanceled, markRequestCanceled } from '../../../daemon/request-cancel.ts'; -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; import type { RunnerSession } from '../runner-session-types.ts'; const { diff --git a/src/platforms/ios/__tests__/runner-sequence.test.ts b/src/platforms/ios/__tests__/runner-sequence.test.ts index cf1b0d577..17c71eaac 100644 --- a/src/platforms/ios/__tests__/runner-sequence.test.ts +++ b/src/platforms/ios/__tests__/runner-sequence.test.ts @@ -1,6 +1,6 @@ import { test } from 'vitest'; import assert from 'node:assert/strict'; -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; import { MAX_RUNNER_SEQUENCE_STEPS, SEQUENCEABLE_RUNNER_STEP_KINDS, diff --git a/src/platforms/ios/__tests__/runner-session.test.ts b/src/platforms/ios/__tests__/runner-session.test.ts index 091fc8d29..4c1a2cd4a 100644 --- a/src/platforms/ios/__tests__/runner-session.test.ts +++ b/src/platforms/ios/__tests__/runner-session.test.ts @@ -9,7 +9,7 @@ import { type RequestProgressEvent, withRequestProgressSink, } from '../../../daemon/request-progress.ts'; -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; import { flushDiagnosticsToSessionFile, withDiagnosticsScope } from '../../../utils/diagnostics.ts'; import type { RunnerSession } from '../runner-session-types.ts'; diff --git a/src/platforms/ios/__tests__/runner-transport.test.ts b/src/platforms/ios/__tests__/runner-transport.test.ts index 2037a0c6f..dde87a276 100644 --- a/src/platforms/ios/__tests__/runner-transport.test.ts +++ b/src/platforms/ios/__tests__/runner-transport.test.ts @@ -1,9 +1,9 @@ import fs from 'node:fs'; import { afterEach, beforeEach, test, vi } from 'vitest'; import assert from 'node:assert/strict'; -import type { DeviceInfo } from '../../../utils/device.ts'; +import type { DeviceInfo } from '../../../kernel/device.ts'; import type { ExecBackgroundResult } from '../../../utils/exec.ts'; -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; import type { RunnerSession } from '../runner-session-types.ts'; const { mockRunCmd } = vi.hoisted(() => ({ diff --git a/src/platforms/ios/__tests__/runner-xctestrun.test.ts b/src/platforms/ios/__tests__/runner-xctestrun.test.ts index b0c8394f8..919526596 100644 --- a/src/platforms/ios/__tests__/runner-xctestrun.test.ts +++ b/src/platforms/ios/__tests__/runner-xctestrun.test.ts @@ -5,7 +5,7 @@ import fs from 'node:fs'; import os from 'node:os'; import path from 'node:path'; -import type { DeviceInfo } from '../../../utils/device.ts'; +import type { DeviceInfo } from '../../../kernel/device.ts'; import { withCommandExecutorOverride } from '../../../utils/exec.ts'; import { __resetRunnerToolchainFingerprintCacheForTests, diff --git a/src/platforms/ios/__tests__/simctl.test.ts b/src/platforms/ios/__tests__/simctl.test.ts index e56769721..c16c62d0e 100644 --- a/src/platforms/ios/__tests__/simctl.test.ts +++ b/src/platforms/ios/__tests__/simctl.test.ts @@ -1,7 +1,7 @@ import { test } from 'vitest'; import assert from 'node:assert/strict'; import { buildSimctlArgs, buildSimctlArgsForDevice } from '../simctl.ts'; -import type { DeviceInfo } from '../../../utils/device.ts'; +import type { DeviceInfo } from '../../../kernel/device.ts'; const IOS_SIMULATOR: DeviceInfo = { platform: 'ios', diff --git a/src/platforms/ios/apple-runner-platform.ts b/src/platforms/ios/apple-runner-platform.ts index d9391828e..36c67e462 100644 --- a/src/platforms/ios/apple-runner-platform.ts +++ b/src/platforms/ios/apple-runner-platform.ts @@ -1,5 +1,5 @@ -import { AppError } from '../../utils/errors.ts'; -import { isApplePlatform, resolveApplePlatformName, type DeviceInfo } from '../../utils/device.ts'; +import { AppError } from '../../kernel/errors.ts'; +import { isApplePlatform, resolveApplePlatformName, type DeviceInfo } from '../../kernel/device.ts'; export type RunnerApplePlatformName = 'iOS' | 'tvOS' | 'macOS'; diff --git a/src/platforms/ios/apps.ts b/src/platforms/ios/apps.ts index 96f2bd1bc..239c4b7da 100644 --- a/src/platforms/ios/apps.ts +++ b/src/platforms/ios/apps.ts @@ -2,8 +2,8 @@ import { promises as fs } from 'node:fs'; import os from 'node:os'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; -import type { DeviceInfo } from '../../utils/device.ts'; -import { AppError } from '../../utils/errors.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; +import { AppError } from '../../kernel/errors.ts'; import { emitDiagnostic } from '../../utils/diagnostics.ts'; import type { AppsFilter } from '../../contracts/app-inventory.ts'; import { diff --git a/src/platforms/ios/debug-symbols.ts b/src/platforms/ios/debug-symbols.ts index 2b495d09b..9e5357750 100644 --- a/src/platforms/ios/debug-symbols.ts +++ b/src/platforms/ios/debug-symbols.ts @@ -5,7 +5,7 @@ import { matchImagesToDsyms, readDsymPaths, readDsymSlices } from './debug-symbo import { summarizeCrashArtifact } from './debug-symbols/report.ts'; import { resolveAppleTools, symbolicateAddresses } from './debug-symbols/symbolication.ts'; import type { DebugSymbolsOptions, DebugSymbolsResult } from '../../contracts/debug-symbols.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; export type { DebugSymbolsCrashFrame, diff --git a/src/platforms/ios/debug-symbols/dsym.ts b/src/platforms/ios/debug-symbols/dsym.ts index f1ba5f5e5..d65b5f36a 100644 --- a/src/platforms/ios/debug-symbols/dsym.ts +++ b/src/platforms/ios/debug-symbols/dsym.ts @@ -3,7 +3,7 @@ import path from 'node:path'; import type { AppleImage, DsymMatch, DsymSlice } from './types.ts'; import { normalizeUuid, unique } from './utils.ts'; import { runCmd } from '../../../utils/exec.ts'; -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; const MAX_SEARCH_ENTRIES = 10_000; const MAX_DSYM_CANDIDATES = 200; diff --git a/src/platforms/ios/debug-symbols/symbolication.ts b/src/platforms/ios/debug-symbols/symbolication.ts index 8c96e68a5..4cbf47978 100644 --- a/src/platforms/ios/debug-symbols/symbolication.ts +++ b/src/platforms/ios/debug-symbols/symbolication.ts @@ -1,7 +1,7 @@ import type { DsymMatch, SymbolicatedAddress, SymbolicationGroup } from './types.ts'; import { addressKey, hex, unique } from './utils.ts'; import { runCmd } from '../../../utils/exec.ts'; -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; export async function symbolicateAddresses( addresses: SymbolicatedAddress[], diff --git a/src/platforms/ios/debug-symbols/utils.ts b/src/platforms/ios/debug-symbols/utils.ts index e08835374..cd3576db6 100644 --- a/src/platforms/ios/debug-symbols/utils.ts +++ b/src/platforms/ios/debug-symbols/utils.ts @@ -1,4 +1,4 @@ -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; import { isRecord } from '../../../utils/parsing.ts'; const UUID_RE = /^[0-9a-fA-F-]{32,36}$/; diff --git a/src/platforms/ios/desktop-scroll.ts b/src/platforms/ios/desktop-scroll.ts index 82abdf06c..f887a276a 100644 --- a/src/platforms/ios/desktop-scroll.ts +++ b/src/platforms/ios/desktop-scroll.ts @@ -1,4 +1,4 @@ -import type { DeviceInfo } from '../../utils/device.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; import type { RunnerCallOptions, RunnerContext } from '../../core/interactor-types.ts'; import type { ScrollDirection } from '../../core/scroll-gesture.ts'; import type { RunnerCommand } from './runner-contract.ts'; diff --git a/src/platforms/ios/devicectl.ts b/src/platforms/ios/devicectl.ts index abfada782..98560cea2 100644 --- a/src/platforms/ios/devicectl.ts +++ b/src/platforms/ios/devicectl.ts @@ -2,8 +2,8 @@ import { promises as fs } from 'node:fs'; import os from 'node:os'; import path from 'node:path'; -import type { DeviceInfo } from '../../utils/device.ts'; -import { AppError } from '../../utils/errors.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; +import { AppError } from '../../kernel/errors.ts'; import { IOS_DEVICECTL_TIMEOUT_MS } from './config.ts'; import { runXcrun } from './tool-provider.ts'; diff --git a/src/platforms/ios/devices.ts b/src/platforms/ios/devices.ts index 7c809940e..2b685e159 100644 --- a/src/platforms/ios/devices.ts +++ b/src/platforms/ios/devices.ts @@ -1,8 +1,8 @@ import { promises as fs } from 'node:fs'; import os from 'node:os'; import path from 'node:path'; -import { AppError } from '../../utils/errors.ts'; -import type { AppleOS, DeviceInfo, DeviceTarget } from '../../utils/device.ts'; +import { AppError } from '../../kernel/errors.ts'; +import type { AppleOS, DeviceInfo, DeviceTarget } from '../../kernel/device.ts'; import { resolveIosSimulatorDeviceSetPath } from '../../utils/device-isolation.ts'; import { buildHostMacDevice } from '../macos/devices.ts'; import { buildSimctlArgs } from './simctl.ts'; diff --git a/src/platforms/ios/install-artifact.ts b/src/platforms/ios/install-artifact.ts index 03d2a8399..b338d86dd 100644 --- a/src/platforms/ios/install-artifact.ts +++ b/src/platforms/ios/install-artifact.ts @@ -2,7 +2,7 @@ import { promises as fs } from 'node:fs'; import os from 'node:os'; import path from 'node:path'; import { readInfoPlistString } from './plist.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { runCmd } from '../../utils/exec.ts'; import { isTrustedInstallSourceUrl, diff --git a/src/platforms/ios/interactions.ts b/src/platforms/ios/interactions.ts index 1cd707bea..9d73c188f 100644 --- a/src/platforms/ios/interactions.ts +++ b/src/platforms/ios/interactions.ts @@ -1,4 +1,4 @@ -import type { DeviceInfo } from '../../utils/device.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; import { assertScrollGestureInput, type ScrollDirection } from '../../core/scroll-gesture.ts'; import { normalizeScrollDurationMs, SCROLL_DURATION_MAX_MS } from '../../core/scroll-command.ts'; import { runIosRunnerCommand } from './runner-client.ts'; diff --git a/src/platforms/ios/launch-diagnostics.ts b/src/platforms/ios/launch-diagnostics.ts index 04b30a0c4..bc776fd6b 100644 --- a/src/platforms/ios/launch-diagnostics.ts +++ b/src/platforms/ios/launch-diagnostics.ts @@ -1,5 +1,5 @@ -import { AppError } from '../../utils/errors.ts'; -import type { DeviceInfo } from '../../utils/device.ts'; +import { AppError } from '../../kernel/errors.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; import { buildSimctlArgsForDevice } from './simctl.ts'; import { runAppleToolCommand, runXcrun } from './tool-provider.ts'; diff --git a/src/platforms/ios/macos-apps.ts b/src/platforms/ios/macos-apps.ts index 064f905eb..39e83c693 100644 --- a/src/platforms/ios/macos-apps.ts +++ b/src/platforms/ios/macos-apps.ts @@ -1,7 +1,7 @@ import type { AppsFilter } from '../../contracts/app-inventory.ts'; import { isDeepLinkTarget } from '../../core/open-target.ts'; -import type { DeviceInfo } from '../../utils/device.ts'; -import { AppError } from '../../utils/errors.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; +import { AppError } from '../../kernel/errors.ts'; import { parseAppearanceAction } from '../appearance.ts'; import { createAppResolutionCache, type AppResolutionCacheScope } from '../app-resolution-cache.ts'; import { quitMacOsApp } from './macos-helper.ts'; diff --git a/src/platforms/ios/macos-helper.ts b/src/platforms/ios/macos-helper.ts index 024238f88..2de9bc346 100644 --- a/src/platforms/ios/macos-helper.ts +++ b/src/platforms/ios/macos-helper.ts @@ -3,7 +3,7 @@ import { createHash } from 'node:crypto'; import os from 'node:os'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { resolveExecutableOverridePath } from '../../utils/exec.ts'; import type { SessionSurface } from '../../core/session-surface.ts'; import { diff --git a/src/platforms/ios/macos-host-provider.ts b/src/platforms/ios/macos-host-provider.ts index 23c872005..c2c113868 100644 --- a/src/platforms/ios/macos-host-provider.ts +++ b/src/platforms/ios/macos-host-provider.ts @@ -2,7 +2,7 @@ import { promises as fs } from 'node:fs'; import os from 'node:os'; import path from 'node:path'; import type { AppsFilter } from '../../contracts/app-inventory.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { filterAppleAppsByBundlePrefix } from './app-filter.ts'; import type { IosAppInfo } from './app-info.ts'; import type { AppleMacOsHostProvider, AppleToolCommandExecutor } from './tool-provider-types.ts'; diff --git a/src/platforms/ios/perf-xctrace.ts b/src/platforms/ios/perf-xctrace.ts index 41aae571c..c37dc1a89 100644 --- a/src/platforms/ios/perf-xctrace.ts +++ b/src/platforms/ios/perf-xctrace.ts @@ -2,8 +2,8 @@ import { promises as fs } from 'node:fs'; import os from 'node:os'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; -import { isApplePlatform, type DeviceInfo } from '../../utils/device.ts'; -import { AppError } from '../../utils/errors.ts'; +import { isApplePlatform, type DeviceInfo } from '../../kernel/device.ts'; +import { AppError } from '../../kernel/errors.ts'; import { runCmdBackground, type ExecBackgroundResult, type ExecResult } from '../../utils/exec.ts'; import { uniqueStrings } from '../../daemon/action-utils.ts'; import { findAllXmlNodes } from './perf-xml.ts'; diff --git a/src/platforms/ios/perf.ts b/src/platforms/ios/perf.ts index d61005ebd..d1647f134 100644 --- a/src/platforms/ios/perf.ts +++ b/src/platforms/ios/perf.ts @@ -2,8 +2,8 @@ import { promises as fs } from 'node:fs'; import os from 'node:os'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; -import type { DeviceInfo } from '../../utils/device.ts'; -import { AppError } from '../../utils/errors.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; +import { AppError } from '../../kernel/errors.ts'; import type { ExecResult } from '../../utils/exec.ts'; import { splitNonEmptyTrimmedLines } from '../../utils/parsing.ts'; import { roundPercent } from '../perf-utils.ts'; diff --git a/src/platforms/ios/runner-client.ts b/src/platforms/ios/runner-client.ts index b5039ac66..392ea52c0 100644 --- a/src/platforms/ios/runner-client.ts +++ b/src/platforms/ios/runner-client.ts @@ -1,5 +1,5 @@ import { withRetry } from '../../utils/retry.ts'; -import type { DeviceInfo } from '../../utils/device.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; import { emitDiagnostic } from '../../utils/diagnostics.ts'; import { type RunnerSessionOptions, validateRunnerDevice } from './runner-session.ts'; import { diff --git a/src/platforms/ios/runner-command-recovery.ts b/src/platforms/ios/runner-command-recovery.ts index bb81c8f5b..89ed3003f 100644 --- a/src/platforms/ios/runner-command-recovery.ts +++ b/src/platforms/ios/runner-command-recovery.ts @@ -1,5 +1,5 @@ -import { AppError, toAppErrorCode } from '../../utils/errors.ts'; -import type { DeviceInfo } from '../../utils/device.ts'; +import { AppError, toAppErrorCode } from '../../kernel/errors.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; import { emitDiagnostic } from '../../utils/diagnostics.ts'; import type { RunnerCommand } from './runner-contract.ts'; import { isReadOnlyRunnerCommand } from './runner-command-traits.ts'; diff --git a/src/platforms/ios/runner-contract.ts b/src/platforms/ios/runner-contract.ts index 8d33f9733..b1e69e6ff 100644 --- a/src/platforms/ios/runner-contract.ts +++ b/src/platforms/ios/runner-contract.ts @@ -1,5 +1,5 @@ import crypto from 'node:crypto'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import type { ClickButton } from '../../core/click-button.ts'; import type { DeviceRotation } from '../../core/device-rotation.ts'; import type { ScrollDirection } from '../../core/scroll-gesture.ts'; diff --git a/src/platforms/ios/runner-disposal.ts b/src/platforms/ios/runner-disposal.ts index ebb6a8271..bbc2a7704 100644 --- a/src/platforms/ios/runner-disposal.ts +++ b/src/platforms/ios/runner-disposal.ts @@ -1,5 +1,5 @@ import { emitDiagnostic } from '../../utils/diagnostics.ts'; -import type { DeviceInfo } from '../../utils/device.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; import { isProcessAlive, isProcessGroupAlive } from '../../utils/process-identity.ts'; import { cleanupTempFile, waitForRunner } from './runner-transport.ts'; import { withRunnerCommandId, type RunnerCommand } from './runner-contract.ts'; diff --git a/src/platforms/ios/runner-failure-diagnostics.ts b/src/platforms/ios/runner-failure-diagnostics.ts index 07378a542..69305baaa 100644 --- a/src/platforms/ios/runner-failure-diagnostics.ts +++ b/src/platforms/ios/runner-failure-diagnostics.ts @@ -1,6 +1,6 @@ import fs from 'node:fs/promises'; import type { FileHandle } from 'node:fs/promises'; -import { AppError, type AppErrorCode } from '../../utils/errors.ts'; +import { AppError, type AppErrorCode } from '../../kernel/errors.ts'; const RUNNER_LOG_TAIL_BYTES = 64 * 1024; diff --git a/src/platforms/ios/runner-icon.ts b/src/platforms/ios/runner-icon.ts index 7753be093..9a987b157 100644 --- a/src/platforms/ios/runner-icon.ts +++ b/src/platforms/ios/runner-icon.ts @@ -1,6 +1,6 @@ import fs from 'node:fs'; import path from 'node:path'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { readApplePlistJson, runAppleToolCommand } from './tool-provider.ts'; const ICON_PLIST_KEYS = ['CFBundleIcons', 'CFBundleIcons~ipad'] as const; diff --git a/src/platforms/ios/runner-lease.ts b/src/platforms/ios/runner-lease.ts index 86e052eb8..e83b97a33 100644 --- a/src/platforms/ios/runner-lease.ts +++ b/src/platforms/ios/runner-lease.ts @@ -3,7 +3,7 @@ import fs from 'node:fs'; import os from 'node:os'; import path from 'node:path'; import { emitDiagnostic } from '../../utils/diagnostics.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { acquireProcessLock } from '../../utils/process-lock.ts'; import { isProcessAlive, readProcessStartTime } from '../../utils/process-identity.ts'; import type { RunnerLogicalLeaseContext } from '../../core/runner-lease-context.ts'; diff --git a/src/platforms/ios/runner-lifecycle.ts b/src/platforms/ios/runner-lifecycle.ts index c84e2f4f9..561b5c850 100644 --- a/src/platforms/ios/runner-lifecycle.ts +++ b/src/platforms/ios/runner-lifecycle.ts @@ -1,5 +1,5 @@ -import { AppError } from '../../utils/errors.ts'; -import type { DeviceInfo } from '../../utils/device.ts'; +import { AppError } from '../../kernel/errors.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; import { emitDiagnostic } from '../../utils/diagnostics.ts'; import { getRequestSignal, isRequestCanceledError } from '../../daemon/request-cancel.ts'; import { RUNNER_COMMAND_TIMEOUT_MS, RUNNER_STARTUP_TIMEOUT_MS } from './runner-transport.ts'; diff --git a/src/platforms/ios/runner-macos-products.ts b/src/platforms/ios/runner-macos-products.ts index 4156255a0..9754c4c12 100644 --- a/src/platforms/ios/runner-macos-products.ts +++ b/src/platforms/ios/runner-macos-products.ts @@ -1,6 +1,6 @@ import fs from 'node:fs'; -import type { DeviceInfo } from '../../utils/device.ts'; -import { AppError } from '../../utils/errors.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; +import { AppError } from '../../kernel/errors.ts'; import { runAppleToolCommand } from './tool-provider.ts'; const RUNNER_PRODUCT_REPAIR_FAILURE_REASONS = new Set([ diff --git a/src/platforms/ios/runner-provider.ts b/src/platforms/ios/runner-provider.ts index f14ff8c46..a8485c092 100644 --- a/src/platforms/ios/runner-provider.ts +++ b/src/platforms/ios/runner-provider.ts @@ -1,6 +1,6 @@ import { AsyncLocalStorage } from 'node:async_hooks'; import type { RunnerLogicalLeaseContext } from '../../core/runner-lease-context.ts'; -import type { DeviceInfo } from '../../utils/device.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; import type { RunnerCommand } from './runner-contract.ts'; import type { RunnerXctestrunArtifactState, diff --git a/src/platforms/ios/runner-sequence.ts b/src/platforms/ios/runner-sequence.ts index 90fab58d4..7e03a0e63 100644 --- a/src/platforms/ios/runner-sequence.ts +++ b/src/platforms/ios/runner-sequence.ts @@ -1,4 +1,4 @@ -import { AppError, toAppErrorCode } from '../../utils/errors.ts'; +import { AppError, toAppErrorCode } from '../../kernel/errors.ts'; import type { RunnerCommand, RunnerSequenceStep } from './runner-contract.ts'; export const SEQUENCEABLE_RUNNER_STEP_KINDS = ['tap', 'doubleTap', 'longPress', 'drag'] as const; diff --git a/src/platforms/ios/runner-session-types.ts b/src/platforms/ios/runner-session-types.ts index f0ceb870f..108a62ece 100644 --- a/src/platforms/ios/runner-session-types.ts +++ b/src/platforms/ios/runner-session-types.ts @@ -1,6 +1,6 @@ import type { RunnerLogicalLeaseContext } from '../../core/runner-lease-context.ts'; import type { ExecResult, ExecBackgroundResult } from '../../utils/exec.ts'; -import type { DeviceInfo } from '../../utils/device.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; import type { RunnerXctestrunArtifact } from './runner-xctestrun.ts'; import type { RunnerLease } from './runner-lease.ts'; diff --git a/src/platforms/ios/runner-session.ts b/src/platforms/ios/runner-session.ts index 1b3d9358f..1cc40d5d1 100644 --- a/src/platforms/ios/runner-session.ts +++ b/src/platforms/ios/runner-session.ts @@ -1,8 +1,8 @@ -import { AppError, toAppErrorCode } from '../../utils/errors.ts'; +import { AppError, toAppErrorCode } from '../../kernel/errors.ts'; import { runCmdBackground, type ExecResult, type ExecBackgroundResult } from '../../utils/exec.ts'; import { withKeyedLock } from '../../utils/keyed-lock.ts'; import { Deadline } from '../../utils/retry.ts'; -import { isApplePlatform, type DeviceInfo } from '../../utils/device.ts'; +import { isApplePlatform, type DeviceInfo } from '../../kernel/device.ts'; import type { RunnerLogicalLeaseContext } from '../../core/runner-lease-context.ts'; import type { AppleRunnerLifecycleOptions } from './runner-provider.ts'; import { emitRequestProgress } from '../../daemon/request-progress.ts'; diff --git a/src/platforms/ios/runner-transport.ts b/src/platforms/ios/runner-transport.ts index b8bf1b178..3a8142d62 100644 --- a/src/platforms/ios/runner-transport.ts +++ b/src/platforms/ios/runner-transport.ts @@ -3,9 +3,9 @@ import os from 'node:os'; import path from 'node:path'; import net from 'node:net'; import { createRequestCanceledError, isRequestCanceledError } from '../../daemon/request-cancel.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { Deadline, retryWithPolicy } from '../../utils/retry.ts'; -import type { DeviceInfo } from '../../utils/device.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; import { classifyBootFailure, bootFailureHint } from '../boot-diagnostics.ts'; import { buildSimctlArgsForDevice } from './simctl.ts'; import { runXcrun } from './tool-provider.ts'; diff --git a/src/platforms/ios/runner-xctestrun.ts b/src/platforms/ios/runner-xctestrun.ts index 9562737c1..b5feb09b3 100644 --- a/src/platforms/ios/runner-xctestrun.ts +++ b/src/platforms/ios/runner-xctestrun.ts @@ -2,13 +2,13 @@ import fs from 'node:fs'; import crypto from 'node:crypto'; import os from 'node:os'; import path from 'node:path'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { runCmdStreaming, runCmdSync, type ExecBackgroundResult } from '../../utils/exec.ts'; import { resolveIosSimulatorDeviceSetPath } from '../../utils/device-isolation.ts'; import { readProcessStartTime } from '../../utils/process-identity.ts'; import { acquireProcessLock, type ProcessLockOwner } from '../../utils/process-lock.ts'; import { isEnvTruthy } from '../../utils/retry.ts'; -import type { DeviceInfo } from '../../utils/device.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; import type { DefinedEnvMap as EnvMap } from '../../utils/env-map.ts'; import { withKeyedLock } from '../../utils/keyed-lock.ts'; import { emitRequestProgress } from '../../daemon/request-progress.ts'; diff --git a/src/platforms/ios/screenshot-status-bar.ts b/src/platforms/ios/screenshot-status-bar.ts index e8fc49666..aad57b07a 100644 --- a/src/platforms/ios/screenshot-status-bar.ts +++ b/src/platforms/ios/screenshot-status-bar.ts @@ -1,6 +1,6 @@ -import type { DeviceInfo } from '../../utils/device.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; import { emitDiagnostic } from '../../utils/diagnostics.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import type { ExecOptions } from '../../utils/exec.ts'; import { runSimctlForDevice } from './simctl.ts'; import { extractAppleToolErrorMeta } from './tool-diagnostics.ts'; diff --git a/src/platforms/ios/screenshot.ts b/src/platforms/ios/screenshot.ts index 11eed2299..35b0c8bba 100644 --- a/src/platforms/ios/screenshot.ts +++ b/src/platforms/ios/screenshot.ts @@ -1,8 +1,8 @@ import { promises as fs } from 'node:fs'; import path from 'node:path'; -import type { DeviceInfo } from '../../utils/device.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; import { emitDiagnostic } from '../../utils/diagnostics.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import type { ExecOptions } from '../../utils/exec.ts'; import { Deadline, retryWithPolicy } from '../../utils/retry.ts'; diff --git a/src/platforms/ios/simctl.ts b/src/platforms/ios/simctl.ts index 01f96543d..bfab84203 100644 --- a/src/platforms/ios/simctl.ts +++ b/src/platforms/ios/simctl.ts @@ -1,4 +1,4 @@ -import type { DeviceInfo } from '../../utils/device.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; import type { ExecOptions, ExecResult } from '../../utils/exec.ts'; import { resolveIosSimulatorDeviceSetPath } from '../../utils/device-isolation.ts'; import { runXcrun } from './tool-provider.ts'; diff --git a/src/platforms/ios/simulator.ts b/src/platforms/ios/simulator.ts index 06ecbd956..0f72e728c 100644 --- a/src/platforms/ios/simulator.ts +++ b/src/platforms/ios/simulator.ts @@ -1,5 +1,5 @@ -import type { DeviceInfo } from '../../utils/device.ts'; -import { AppError } from '../../utils/errors.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; +import { AppError } from '../../kernel/errors.ts'; import { Deadline, retryWithPolicy } from '../../utils/retry.ts'; import { bootFailureHint, classifyBootFailure } from '../boot-diagnostics.ts'; diff --git a/src/platforms/ios/tool-diagnostics.ts b/src/platforms/ios/tool-diagnostics.ts index 2385232fd..dfefe26cf 100644 --- a/src/platforms/ios/tool-diagnostics.ts +++ b/src/platforms/ios/tool-diagnostics.ts @@ -1,4 +1,4 @@ -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; export function extractAppleToolErrorMeta(error: unknown): Record { if (!(error instanceof AppError)) { diff --git a/src/platforms/linux/__tests__/atspi-bridge.test.ts b/src/platforms/linux/__tests__/atspi-bridge.test.ts index c9bd7ccf6..87e0fa07d 100644 --- a/src/platforms/linux/__tests__/atspi-bridge.test.ts +++ b/src/platforms/linux/__tests__/atspi-bridge.test.ts @@ -8,7 +8,7 @@ vi.mock('../../../utils/exec.ts', async (importOriginal) => { import { captureAccessibilityTree } from '../atspi-bridge.ts'; import { runCmd, whichCmd } from '../../../utils/exec.ts'; -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; const mockRunCmd = vi.mocked(runCmd); const mockWhichCmd = vi.mocked(whichCmd); diff --git a/src/platforms/linux/__tests__/clipboard.test.ts b/src/platforms/linux/__tests__/clipboard.test.ts index 53c4c66c0..0e81a1589 100644 --- a/src/platforms/linux/__tests__/clipboard.test.ts +++ b/src/platforms/linux/__tests__/clipboard.test.ts @@ -8,7 +8,7 @@ vi.mock('../../../utils/exec.ts', async (importOriginal) => { import { runCmd, whichCmd } from '../../../utils/exec.ts'; import { readLinuxClipboard, writeLinuxClipboard } from '../clipboard.ts'; -import { AppError } from '../../../utils/errors.ts'; +import { AppError } from '../../../kernel/errors.ts'; const mockRunCmd = vi.mocked(runCmd); const mockWhichCmd = vi.mocked(whichCmd); diff --git a/src/platforms/linux/atspi-bridge.ts b/src/platforms/linux/atspi-bridge.ts index 6a46ce9ec..500d9ef7d 100644 --- a/src/platforms/linux/atspi-bridge.ts +++ b/src/platforms/linux/atspi-bridge.ts @@ -11,7 +11,7 @@ import path from 'node:path'; import fs from 'node:fs'; import { fileURLToPath } from 'node:url'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import type { RawSnapshotNode, Rect } from '../../kernel/snapshot.ts'; import { normalizeAtspiRole } from './role-map.ts'; import { resolveLinuxToolProvider, runLinuxToolCommand } from './tool-provider.ts'; diff --git a/src/platforms/linux/devices.ts b/src/platforms/linux/devices.ts index 62e76086f..6068babfa 100644 --- a/src/platforms/linux/devices.ts +++ b/src/platforms/linux/devices.ts @@ -1,5 +1,5 @@ import { hostname } from 'node:os'; -import type { DeviceInfo } from '../../utils/device.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; export async function listLinuxDevices(): Promise { if (process.platform !== 'linux') { diff --git a/src/platforms/linux/linux-env.ts b/src/platforms/linux/linux-env.ts index dcefa9a50..ae2fb17ef 100644 --- a/src/platforms/linux/linux-env.ts +++ b/src/platforms/linux/linux-env.ts @@ -5,7 +5,7 @@ * (press, type, scroll…) does not re-run `which` on every call. */ -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { resolveLinuxToolProvider, type LinuxToolProvider } from './tool-provider.ts'; export type DisplayServer = 'wayland' | 'x11'; diff --git a/src/platforms/linux/tool-provider.ts b/src/platforms/linux/tool-provider.ts index eef88b7a2..4eb03faf7 100644 --- a/src/platforms/linux/tool-provider.ts +++ b/src/platforms/linux/tool-provider.ts @@ -1,6 +1,6 @@ import { runCmd, whichCmd, type ExecOptions, type ExecResult } from '../../utils/exec.ts'; import { emitDiagnostic } from '../../utils/diagnostics.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { createScopedProvider } from '../../utils/scoped-provider.ts'; import { sleep } from '../../utils/timeouts.ts'; import type { ClickButton } from '../../core/click-button.ts'; diff --git a/src/platforms/macos/devices.ts b/src/platforms/macos/devices.ts index 9b305d704..d49f3ca3c 100644 --- a/src/platforms/macos/devices.ts +++ b/src/platforms/macos/devices.ts @@ -1,5 +1,5 @@ import os from 'node:os'; -import type { DeviceInfo } from '../../utils/device.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; const HOST_MAC_DEVICE_ID = 'host-macos-local'; diff --git a/src/platforms/permission-utils.ts b/src/platforms/permission-utils.ts index cf56e871a..c02a07c00 100644 --- a/src/platforms/permission-utils.ts +++ b/src/platforms/permission-utils.ts @@ -1,4 +1,4 @@ -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; export type PermissionAction = 'grant' | 'deny' | 'reset'; export type PermissionTarget = diff --git a/src/platforms/setting-state.ts b/src/platforms/setting-state.ts index 5f7501213..2729f381a 100644 --- a/src/platforms/setting-state.ts +++ b/src/platforms/setting-state.ts @@ -1,4 +1,4 @@ -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; export function parseSettingState(state: string): boolean { const normalized = state.toLowerCase(); diff --git a/src/platforms/web/agent-browser-provider.test.ts b/src/platforms/web/agent-browser-provider.test.ts index fc360f5d1..046b2668a 100644 --- a/src/platforms/web/agent-browser-provider.test.ts +++ b/src/platforms/web/agent-browser-provider.test.ts @@ -6,7 +6,7 @@ import { test } from 'vitest'; import { createAgentBrowserWebProvider } from './agent-browser-provider.ts'; import type { WebSnapshotResult } from './provider.ts'; import { withCommandExecutorOverride, type ExecResult } from '../../utils/exec.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { buildSelectorChainForNode, parseSelectorChain, diff --git a/src/platforms/web/agent-browser-provider.ts b/src/platforms/web/agent-browser-provider.ts index ec69875e7..9d5d9b733 100644 --- a/src/platforms/web/agent-browser-provider.ts +++ b/src/platforms/web/agent-browser-provider.ts @@ -1,5 +1,5 @@ import { runCmd } from '../../utils/exec.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { sleep } from '../../utils/timeouts.ts'; import type { Rect } from '../../kernel/snapshot.ts'; import { normalizeAgentBrowserNetworkRequests } from './agent-browser-network.ts'; diff --git a/src/platforms/web/agent-browser-tool.test.ts b/src/platforms/web/agent-browser-tool.test.ts index 9f27b51ca..91522f3f2 100644 --- a/src/platforms/web/agent-browser-tool.test.ts +++ b/src/platforms/web/agent-browser-tool.test.ts @@ -5,7 +5,7 @@ import path from 'node:path'; import { test } from 'vitest'; import { resolveAgentBrowserTool } from './agent-browser-tool.ts'; import { installFakeManagedAgentBrowser } from './__tests__/test-utils.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; test('managed agent-browser tool reports actionable guidance when install is missing', async () => { const stateDir = fs.mkdtempSync(path.join(os.tmpdir(), 'agent-device-web-tool-')); diff --git a/src/platforms/web/agent-browser-tool.ts b/src/platforms/web/agent-browser-tool.ts index d51c46baf..09ca8979e 100644 --- a/src/platforms/web/agent-browser-tool.ts +++ b/src/platforms/web/agent-browser-tool.ts @@ -3,7 +3,7 @@ import crypto from 'node:crypto'; import os from 'node:os'; import path from 'node:path'; import { runCmd } from '../../utils/exec.ts'; -import { AppError, asAppError } from '../../utils/errors.ts'; +import { AppError, asAppError } from '../../kernel/errors.ts'; import { acquireProcessLock } from '../../utils/process-lock.ts'; import { readProcessStartTime } from '../../utils/process-identity.ts'; diff --git a/src/provider-device-runtime.ts b/src/provider-device-runtime.ts index 68072af19..32d5a0fd1 100644 --- a/src/provider-device-runtime.ts +++ b/src/provider-device-runtime.ts @@ -3,8 +3,8 @@ import type { Interactor } from './core/interactor-types.ts'; import type { DeviceInventoryProvider } from './core/dispatch-resolve.ts'; import type { LeaseLifecycleProvider } from './daemon/handlers/lease.ts'; import type { DeviceLease } from './daemon/lease-registry.ts'; -import type { DeviceInfo } from './utils/device.ts'; -import { AppError } from './utils/errors.ts'; +import type { DeviceInfo } from './kernel/device.ts'; +import { AppError } from './kernel/errors.ts'; export type ProviderDeviceInstallResult = { bundleId?: string; diff --git a/src/recording/__tests__/overlay.test.ts b/src/recording/__tests__/overlay.test.ts index 540dcffd1..70b5d2945 100644 --- a/src/recording/__tests__/overlay.test.ts +++ b/src/recording/__tests__/overlay.test.ts @@ -28,7 +28,7 @@ vi.mock('../../utils/video.ts', () => ({ })); import { overlayRecordingTouches, resizeRecording } from '../overlay.ts'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { runCmd } from '../../utils/exec.ts'; function helperScriptArgs(): string[] { diff --git a/src/recording/output-path.ts b/src/recording/output-path.ts index 60bf3376b..60d6cc256 100644 --- a/src/recording/output-path.ts +++ b/src/recording/output-path.ts @@ -1,5 +1,5 @@ import path from 'node:path'; -import type { Platform, PlatformSelector } from '../utils/device.ts'; +import type { Platform, PlatformSelector } from '../kernel/device.ts'; const DEFAULT_RECORDING_EXTENSION = '.mp4'; export const WEB_RECORDING_EXTENSION = '.webm'; diff --git a/src/recording/overlay.ts b/src/recording/overlay.ts index b087a7628..a638e2cc9 100644 --- a/src/recording/overlay.ts +++ b/src/recording/overlay.ts @@ -2,7 +2,7 @@ import fs from 'node:fs'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; import { runCmd } from '../utils/exec.ts'; -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; import { buildSwiftToolEnv, compileSwiftSourceFile } from '../utils/swift-cache.ts'; import { waitForPlayableVideo, waitForStableFile } from '../utils/video.ts'; import { diff --git a/src/remote-config-core.ts b/src/remote-config-core.ts index c5f8e8011..9a4d4bf72 100644 --- a/src/remote-config-core.ts +++ b/src/remote-config-core.ts @@ -8,7 +8,7 @@ import { type RemoteConfigProfileOptions, type ResolvedRemoteConfigProfile, } from './remote-config-schema.ts'; -import { AppError } from './utils/errors.ts'; +import { AppError } from './kernel/errors.ts'; import { resolveUserPath } from './utils/path-resolution.ts'; import { parseSourceValue } from './utils/source-value.ts'; diff --git a/src/remote-config-schema.ts b/src/remote-config-schema.ts index 365b42f0b..c8eb074d3 100644 --- a/src/remote-config-schema.ts +++ b/src/remote-config-schema.ts @@ -5,7 +5,7 @@ import type { LeaseBackend, SessionIsolationMode, } from './contracts.ts'; -import { PLATFORM_SELECTORS, type DeviceTarget, type PlatformSelector } from './utils/device.ts'; +import { PLATFORM_SELECTORS, type DeviceTarget, type PlatformSelector } from './kernel/device.ts'; import type { MetroPrepareKind } from './client-metro.ts'; export type RemoteConfigMetroOptions = { diff --git a/src/remote-connection-state.ts b/src/remote-connection-state.ts index 52c0761d5..0e471ea85 100644 --- a/src/remote-connection-state.ts +++ b/src/remote-connection-state.ts @@ -2,7 +2,7 @@ import crypto from 'node:crypto'; import fs from 'node:fs'; import path from 'node:path'; import { resolveRemoteConfigPath, resolveRemoteConfigProfile } from './remote-config-core.ts'; -import { AppError } from './utils/errors.ts'; +import { AppError } from './kernel/errors.ts'; import { emitDiagnostic } from './utils/diagnostics.ts'; import type { CliFlags } from './utils/cli-flags.ts'; import type { LeaseBackend, SessionRuntimeHints } from './contracts.ts'; diff --git a/src/replay/__tests__/script.test.ts b/src/replay/__tests__/script.test.ts index e0133c458..436e72b00 100644 --- a/src/replay/__tests__/script.test.ts +++ b/src/replay/__tests__/script.test.ts @@ -3,7 +3,7 @@ import assert from 'node:assert/strict'; import fs from 'node:fs'; import os from 'node:os'; import path from 'node:path'; -import { AppError } from '../../utils/errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { parseReplayScriptDetailed, readReplayScriptMetadata, diff --git a/src/replay/script.ts b/src/replay/script.ts index 54f378f98..21c4c40c8 100644 --- a/src/replay/script.ts +++ b/src/replay/script.ts @@ -1,9 +1,9 @@ import fs from 'node:fs'; -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; import { recordingQualityInputToExportQuality } from '../core/recording-export-quality.ts'; import { readScreenshotScriptFlag } from '../contracts/screenshot.ts'; -import type { DeviceTarget, PlatformSelector } from '../utils/device.ts'; -import { PLATFORM_SELECTORS } from '../utils/device.ts'; +import type { DeviceTarget, PlatformSelector } from '../kernel/device.ts'; +import { PLATFORM_SELECTORS } from '../kernel/device.ts'; import { parseReplayOpenFlags } from './open-script.ts'; import { formatPortableActionLine } from './script-formatting.ts'; import type { SessionAction, SessionState } from '../daemon/types.ts'; diff --git a/src/replay/vars.ts b/src/replay/vars.ts index 71d204bd6..4fd6ce8f2 100644 --- a/src/replay/vars.ts +++ b/src/replay/vars.ts @@ -1,4 +1,4 @@ -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; import type { SessionAction } from '../daemon/types.ts'; export type ReplayVarScope = { diff --git a/src/screenshot-diff/screenshot-diff.ts b/src/screenshot-diff/screenshot-diff.ts index 9b54959da..ef8737af2 100644 --- a/src/screenshot-diff/screenshot-diff.ts +++ b/src/screenshot-diff/screenshot-diff.ts @@ -1,6 +1,6 @@ import { promises as fs } from 'node:fs'; import path from 'node:path'; -import { AppError } from '../utils/errors.ts'; +import { AppError } from '../kernel/errors.ts'; import { PNG } from '../utils/png.ts'; import { computeScreenshotDiffPixelsAsync, diff --git a/src/snapshot-diagnostics.ts b/src/snapshot-diagnostics.ts index 936d1aeba..53ad3d306 100644 --- a/src/snapshot-diagnostics.ts +++ b/src/snapshot-diagnostics.ts @@ -1,5 +1,5 @@ import type { SnapshotBackend } from './kernel/snapshot.ts'; -import type { Platform } from './utils/device.ts'; +import type { Platform } from './kernel/device.ts'; import { isRecord } from './utils/parsing.ts'; const SLOW_SNAPSHOT_P95_WARNING_MS = 1_500; diff --git a/src/target-shutdown-contract.ts b/src/target-shutdown-contract.ts index eed1398dc..2bb8d760a 100644 --- a/src/target-shutdown-contract.ts +++ b/src/target-shutdown-contract.ts @@ -1,4 +1,4 @@ -import type { NormalizedError } from './utils/errors.ts'; +import type { NormalizedError } from './kernel/errors.ts'; export type TargetShutdownResult = { success: boolean; diff --git a/src/upload-client-artifact.ts b/src/upload-client-artifact.ts index d0326ec42..474012984 100644 --- a/src/upload-client-artifact.ts +++ b/src/upload-client-artifact.ts @@ -4,7 +4,7 @@ import os from 'node:os'; import path from 'node:path'; import { Writable } from 'node:stream'; import { pipeline } from 'node:stream/promises'; -import { AppError } from './utils/errors.ts'; +import { AppError } from './kernel/errors.ts'; import { runCmd } from './utils/exec.ts'; const ARTIFACT_HASH_ALGORITHM = 'sha256'; diff --git a/src/upload-client.ts b/src/upload-client.ts index dfb4a277e..7402b519d 100644 --- a/src/upload-client.ts +++ b/src/upload-client.ts @@ -1,5 +1,5 @@ import { randomUUID } from 'node:crypto'; -import { AppError } from './utils/errors.ts'; +import { AppError } from './kernel/errors.ts'; import { buildDaemonHttpAuthHeaders } from './daemon/http-contract.ts'; import { prepareUploadArtifact, type PreparedUploadArtifact } from './upload-client-artifact.ts'; import { isRetryableUploadStreamError, streamFileToHttpRequest } from './upload-stream.ts'; diff --git a/src/upload-stream.ts b/src/upload-stream.ts index 5fa5221c6..0080ea9d4 100644 --- a/src/upload-stream.ts +++ b/src/upload-stream.ts @@ -3,7 +3,7 @@ import http, { type IncomingHttpHeaders } from 'node:http'; import https from 'node:https'; import path from 'node:path'; import { pipeline } from 'node:stream/promises'; -import { AppError } from './utils/errors.ts'; +import { AppError } from './kernel/errors.ts'; import { readNodeHttpResponseBody } from './utils/node-http.ts'; import { createUploadProgressTransform, diff --git a/src/utils/__tests__/args.test.ts b/src/utils/__tests__/args.test.ts index 1c92fa5bd..97b29bff5 100644 --- a/src/utils/__tests__/args.test.ts +++ b/src/utils/__tests__/args.test.ts @@ -1,7 +1,7 @@ import { test } from 'vitest'; import assert from 'node:assert/strict'; import { parseArgs, usage, usageForCommand } from '../args.ts'; -import { AppError } from '../errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { listCapabilityCommands } from '../../core/capabilities.ts'; import { listCapabilityCheckedCommandNames, listCliCommandNames } from '../../command-catalog.ts'; import { getCliCommandSchema } from '../command-schema.ts'; diff --git a/src/utils/__tests__/cli-flags.test.ts b/src/utils/__tests__/cli-flags.test.ts index c38048605..ca75ff4b0 100644 --- a/src/utils/__tests__/cli-flags.test.ts +++ b/src/utils/__tests__/cli-flags.test.ts @@ -1,7 +1,7 @@ import { test } from 'vitest'; import assert from 'node:assert/strict'; import { getFlagDefinition } from '../cli-flags.ts'; -import { PLATFORM_SELECTORS } from '../device.ts'; +import { PLATFORM_SELECTORS } from '../../kernel/device.ts'; test('--platform enumValues are derived from the canonical PLATFORM_SELECTORS tuple', () => { const platformFlag = getFlagDefinition('--platform'); diff --git a/src/utils/__tests__/cli-option-schema.test.ts b/src/utils/__tests__/cli-option-schema.test.ts index b595c710e..58d9fa5c5 100644 --- a/src/utils/__tests__/cli-option-schema.test.ts +++ b/src/utils/__tests__/cli-option-schema.test.ts @@ -7,7 +7,7 @@ import { parseOptionValueFromSource, resolveSourceValueDefinition, } from '../cli-option-schema.ts'; -import { AppError } from '../errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { REMOTE_CONFIG_FIELD_SPECS, getRemoteConfigEnvNames } from '../../remote-config-schema.ts'; test('option schema exposes config/env metadata for global options', () => { diff --git a/src/utils/__tests__/daemon-client-lifecycle.test.ts b/src/utils/__tests__/daemon-client-lifecycle.test.ts index 96ac1ba76..65172e197 100644 --- a/src/utils/__tests__/daemon-client-lifecycle.test.ts +++ b/src/utils/__tests__/daemon-client-lifecycle.test.ts @@ -34,7 +34,7 @@ import { listenOnLoopback, supportsLoopbackBind, } from '../../__tests__/test-utils/index.ts'; -import { AppError } from '../errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { runCmdDetachedMonitored, runCmdSync } from '../exec.ts'; import { readProcessStartTime } from '../process-identity.ts'; import { sleep } from '../timeouts.ts'; diff --git a/src/utils/__tests__/device.test.ts b/src/utils/__tests__/device.test.ts index 459ce1c9a..a6bdb8671 100644 --- a/src/utils/__tests__/device.test.ts +++ b/src/utils/__tests__/device.test.ts @@ -7,9 +7,9 @@ import { resolveApplePlatformName, resolveAppleSimulatorSetPathForSelector, resolveDevice, -} from '../device.ts'; -import type { DeviceInfo } from '../device.ts'; -import { AppError } from '../errors.ts'; +} from '../../kernel/device.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; +import { AppError } from '../../kernel/errors.ts'; test('matchesPlatformSelector resolves apple selector across Apple platforms', () => { assert.equal(matchesPlatformSelector('ios', 'apple'), true); diff --git a/src/utils/__tests__/errors.test.ts b/src/utils/__tests__/errors.test.ts index c56e37fd1..08ad8c934 100644 --- a/src/utils/__tests__/errors.test.ts +++ b/src/utils/__tests__/errors.test.ts @@ -1,6 +1,6 @@ import { test } from 'vitest'; import assert from 'node:assert/strict'; -import { AppError, normalizeError, toAppErrorCode } from '../errors.ts'; +import { AppError, normalizeError, toAppErrorCode } from '../../kernel/errors.ts'; test('normalizeError adds default hint and strips diagnostic metadata from details', () => { const err = new AppError('COMMAND_FAILED', 'runner failed', { diff --git a/src/utils/__tests__/interactors.test.ts b/src/utils/__tests__/interactors.test.ts index a8bf8841e..668def4ae 100644 --- a/src/utils/__tests__/interactors.test.ts +++ b/src/utils/__tests__/interactors.test.ts @@ -1,8 +1,8 @@ import { beforeEach, test, vi } from 'vitest'; import assert from 'node:assert/strict'; import type { RunnerCommand } from '../../platforms/ios/runner-client.ts'; -import type { DeviceInfo } from '../device.ts'; -import { AppError } from '../errors.ts'; +import type { DeviceInfo } from '../../kernel/device.ts'; +import { AppError } from '../../kernel/errors.ts'; vi.mock('../../platforms/ios/runner-client.ts', async (importOriginal) => { const actual = await importOriginal(); diff --git a/src/utils/__tests__/png-worker-client.test.ts b/src/utils/__tests__/png-worker-client.test.ts index b804cc4d1..dbcf1fe8d 100644 --- a/src/utils/__tests__/png-worker-client.test.ts +++ b/src/utils/__tests__/png-worker-client.test.ts @@ -1,6 +1,6 @@ import { afterAll, test } from 'vitest'; import assert from 'node:assert/strict'; -import { AppError } from '../errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { PNG } from '../png-codec.ts'; import { computeScreenshotDiffPixelsAsync, diff --git a/src/utils/__tests__/process-lock.test.ts b/src/utils/__tests__/process-lock.test.ts index edeea7b41..27a826bb4 100644 --- a/src/utils/__tests__/process-lock.test.ts +++ b/src/utils/__tests__/process-lock.test.ts @@ -3,7 +3,7 @@ import fs from 'node:fs'; import os from 'node:os'; import path from 'node:path'; import { afterEach, beforeEach, test } from 'vitest'; -import { AppError } from '../errors.ts'; +import { AppError } from '../../kernel/errors.ts'; import { acquireProcessLock, type ProcessLockOwner } from '../process-lock.ts'; import { readProcessStartTime } from '../process-identity.ts'; diff --git a/src/utils/args.ts b/src/utils/args.ts index 686f78ace..344a57d28 100644 --- a/src/utils/args.ts +++ b/src/utils/args.ts @@ -1,4 +1,4 @@ -import { AppError } from './errors.ts'; +import { AppError } from '../kernel/errors.ts'; import { mergeDefinedFlags } from './merge-flags.ts'; import { applyCommandDefaults, diff --git a/src/utils/cli-config.ts b/src/utils/cli-config.ts index 9469c7bd3..1cfd429c9 100644 --- a/src/utils/cli-config.ts +++ b/src/utils/cli-config.ts @@ -1,6 +1,6 @@ import fs from 'node:fs'; import path from 'node:path'; -import { AppError } from './errors.ts'; +import { AppError } from '../kernel/errors.ts'; import { mergeDefinedFlags } from './merge-flags.ts'; import { type CliFlags, type FlagKey } from './cli-flags.ts'; import { expandUserHomePath, resolveUserPath } from './path-resolution.ts'; diff --git a/src/utils/cli-flags.ts b/src/utils/cli-flags.ts index 21e827477..7a9209e9d 100644 --- a/src/utils/cli-flags.ts +++ b/src/utils/cli-flags.ts @@ -3,7 +3,7 @@ import type { RecordingExportQuality } from '../core/recording-export-quality.ts import type { BackMode } from '../core/back-mode.ts'; import type { ClickButton } from '../core/click-button.ts'; import type { SwipePattern } from '../core/scroll-gesture.ts'; -import { PLATFORM_SELECTORS, type DeviceTarget, type PlatformSelector } from './device.ts'; +import { PLATFORM_SELECTORS, type DeviceTarget, type PlatformSelector } from '../kernel/device.ts'; import type { DaemonInstallSource, DaemonServerMode, diff --git a/src/utils/diagnostics.ts b/src/utils/diagnostics.ts index d95e67a7d..f3e2daf45 100644 --- a/src/utils/diagnostics.ts +++ b/src/utils/diagnostics.ts @@ -3,7 +3,7 @@ import crypto from 'node:crypto'; import fs from 'node:fs'; import os from 'node:os'; import path from 'node:path'; -import { redactDiagnosticData } from './redaction.ts'; +import { redactDiagnosticData } from '../kernel/redaction.ts'; type DiagnosticLevel = 'info' | 'warn' | 'error' | 'debug'; diff --git a/src/utils/exec.ts b/src/utils/exec.ts index 4f44efc03..7a5dc0cc2 100644 --- a/src/utils/exec.ts +++ b/src/utils/exec.ts @@ -5,7 +5,7 @@ import path from 'node:path'; import { spawn, spawnSync, type ChildProcess, type StdioOptions } from 'node:child_process'; import { Readable } from 'node:stream'; import { pipeline } from 'node:stream/promises'; -import { AppError } from './errors.ts'; +import { AppError } from '../kernel/errors.ts'; export type ExecResult = { stdout: string; diff --git a/src/utils/finders.ts b/src/utils/finders.ts index 9c04f53f5..232643c2b 100644 --- a/src/utils/finders.ts +++ b/src/utils/finders.ts @@ -1,5 +1,5 @@ import type { SnapshotNode } from '../kernel/snapshot.ts'; -import { AppError } from './errors.ts'; +import { AppError } from '../kernel/errors.ts'; import { tryParseSelectorChain, type SelectorChain } from './selectors-parse.ts'; export const FIND_LOCATORS = ['any', 'text', 'label', 'value', 'role', 'id'] as const; diff --git a/src/utils/install-source-config.ts b/src/utils/install-source-config.ts index 9d272f724..2299ddded 100644 --- a/src/utils/install-source-config.ts +++ b/src/utils/install-source-config.ts @@ -1,5 +1,5 @@ import type { DaemonInstallSource } from '../contracts.ts'; -import { AppError } from './errors.ts'; +import { AppError } from '../kernel/errors.ts'; export function parseGitHubActionsArtifactInstallSourceSpec( spec: string, diff --git a/src/utils/location-coordinates.ts b/src/utils/location-coordinates.ts index d1ac0d0da..8cc376ce5 100644 --- a/src/utils/location-coordinates.ts +++ b/src/utils/location-coordinates.ts @@ -1,4 +1,4 @@ -import { AppError } from './errors.ts'; +import { AppError } from '../kernel/errors.ts'; export type LocationCoordinateLabel = 'latitude' | 'longitude'; diff --git a/src/utils/node-http.ts b/src/utils/node-http.ts index d44500fd5..02fa49da6 100644 --- a/src/utils/node-http.ts +++ b/src/utils/node-http.ts @@ -1,5 +1,5 @@ import type { IncomingMessage } from 'node:http'; -import { AppError } from './errors.ts'; +import { AppError } from '../kernel/errors.ts'; export function readNodeHttpResponseBody(res: IncomingMessage): Promise { return new Promise((resolve, reject) => { diff --git a/src/utils/output.ts b/src/utils/output.ts index b657ffe76..a1be859e0 100644 --- a/src/utils/output.ts +++ b/src/utils/output.ts @@ -3,7 +3,7 @@ import { buildAndroidHelperPresentationInput, type AndroidHelperPresentationInput, } from './android-helper-snapshot-presentation.ts'; -import { AppError, normalizeError, type NormalizedError } from './errors.ts'; +import { AppError, normalizeError, type NormalizedError } from '../kernel/errors.ts'; import { detectPossibleRepeatedNavSubtree } from './repeated-nav-subtree.ts'; import { buildSnapshotDisplayLines, formatSnapshotLine } from './snapshot-lines.ts'; import { diff --git a/src/utils/parsing.ts b/src/utils/parsing.ts index c9e70af6f..c44449166 100644 --- a/src/utils/parsing.ts +++ b/src/utils/parsing.ts @@ -1,5 +1,5 @@ -import { AppError } from './errors.ts'; -import type { DeviceKind, DeviceTarget, Platform } from './device.ts'; +import { AppError } from '../kernel/errors.ts'; +import type { DeviceKind, DeviceTarget, Platform } from '../kernel/device.ts'; import type { Point, Rect } from '../kernel/snapshot.ts'; function readRequired( diff --git a/src/utils/payload-input.ts b/src/utils/payload-input.ts index afc823722..a8525ef2a 100644 --- a/src/utils/payload-input.ts +++ b/src/utils/payload-input.ts @@ -1,5 +1,5 @@ import fs from 'node:fs'; -import { AppError } from './errors.ts'; +import { AppError } from '../kernel/errors.ts'; function looksLikeInlineJson(value: string): boolean { const trimmed = value.trim(); diff --git a/src/utils/png-resize.ts b/src/utils/png-resize.ts index 1deb214b1..1be52b90d 100644 --- a/src/utils/png-resize.ts +++ b/src/utils/png-resize.ts @@ -1,5 +1,5 @@ import { promises as fs } from 'node:fs'; -import { AppError } from './errors.ts'; +import { AppError } from '../kernel/errors.ts'; import { PNG } from './png-codec.ts'; import { decodePngAsync, encodePngAsync } from './png-worker-client.ts'; diff --git a/src/utils/png-worker-client.ts b/src/utils/png-worker-client.ts index 46b6d16ec..def574832 100644 --- a/src/utils/png-worker-client.ts +++ b/src/utils/png-worker-client.ts @@ -1,6 +1,6 @@ import { Worker } from 'node:worker_threads'; import { emitDiagnostic } from './diagnostics.ts'; -import { AppError, toAppErrorCode } from './errors.ts'; +import { AppError, toAppErrorCode } from '../kernel/errors.ts'; import { resolveInternalEntryModulePath } from './internal-entry.ts'; import { PNG } from './png-codec.ts'; import { decodePng } from './png.ts'; diff --git a/src/utils/png-worker-contract.ts b/src/utils/png-worker-contract.ts index 4b990ae5b..32c4129fc 100644 --- a/src/utils/png-worker-contract.ts +++ b/src/utils/png-worker-contract.ts @@ -1,4 +1,4 @@ -import type { NormalizedError } from './errors.ts'; +import type { NormalizedError } from '../kernel/errors.ts'; import type { ScreenshotDiffPixelsJob, ScreenshotDiffPixelsResult, diff --git a/src/utils/png-worker.ts b/src/utils/png-worker.ts index 8af2bb61a..ea4815b47 100644 --- a/src/utils/png-worker.ts +++ b/src/utils/png-worker.ts @@ -1,5 +1,5 @@ import { parentPort } from 'node:worker_threads'; -import { normalizeError } from './errors.ts'; +import { normalizeError } from '../kernel/errors.ts'; import { PNG } from './png-codec.ts'; import { decodePng } from './png.ts'; import { computeScreenshotDiffPixels } from './screenshot-diff-pixels.ts'; diff --git a/src/utils/png.ts b/src/utils/png.ts index 2861884b1..d708d9b5b 100644 --- a/src/utils/png.ts +++ b/src/utils/png.ts @@ -1,4 +1,4 @@ -import { AppError } from './errors.ts'; +import { AppError } from '../kernel/errors.ts'; import { PNG } from './png-codec.ts'; export { PNG }; diff --git a/src/utils/process-lock.ts b/src/utils/process-lock.ts index 2b13b4af9..d3fc01e4d 100644 --- a/src/utils/process-lock.ts +++ b/src/utils/process-lock.ts @@ -1,6 +1,6 @@ import fs from 'node:fs'; import path from 'node:path'; -import { AppError } from './errors.ts'; +import { AppError } from '../kernel/errors.ts'; import { isProcessAlive, readProcessStartTime } from './process-identity.ts'; import { sleep } from './timeouts.ts'; diff --git a/src/utils/retry.ts b/src/utils/retry.ts index 766e20a92..ed3de2473 100644 --- a/src/utils/retry.ts +++ b/src/utils/retry.ts @@ -1,4 +1,4 @@ -import { AppError } from './errors.ts'; +import { AppError } from '../kernel/errors.ts'; import { emitDiagnostic } from './diagnostics.ts'; type RetryOptions = { diff --git a/src/utils/runtime-transport.ts b/src/utils/runtime-transport.ts index 75419d925..0b3c7f881 100644 --- a/src/utils/runtime-transport.ts +++ b/src/utils/runtime-transport.ts @@ -1,6 +1,6 @@ import { URL } from 'node:url'; import type { SessionRuntimeHints } from '../contracts.ts'; -import { AppError } from './errors.ts'; +import { AppError } from '../kernel/errors.ts'; export type ResolvedRuntimeTransport = { host: string; diff --git a/src/utils/scroll-edge-state.ts b/src/utils/scroll-edge-state.ts index a8e94a25e..99dd8d7fa 100644 --- a/src/utils/scroll-edge-state.ts +++ b/src/utils/scroll-edge-state.ts @@ -2,7 +2,7 @@ import { deriveMobileSnapshotHiddenContentHints, isNodeVisibleInEffectiveViewport, } from './mobile-snapshot-semantics.ts'; -import { AppError } from './errors.ts'; +import { AppError } from '../kernel/errors.ts'; import { isScrollableNodeLike } from './scrollable.ts'; import type { ScrollDirection } from '../core/scroll-gesture.ts'; import type { diff --git a/src/utils/selector-build.ts b/src/utils/selector-build.ts index f784a175d..f2066c6ad 100644 --- a/src/utils/selector-build.ts +++ b/src/utils/selector-build.ts @@ -1,4 +1,4 @@ -import type { Platform } from './device.ts'; +import type { Platform } from '../kernel/device.ts'; import type { SnapshotNode } from '../kernel/snapshot.ts'; import { isNodeVisible } from './selector-node.ts'; import { extractNodeText, normalizeType } from './snapshot-processing.ts'; diff --git a/src/utils/selector-is-predicates.ts b/src/utils/selector-is-predicates.ts index a88ca408f..f721aa968 100644 --- a/src/utils/selector-is-predicates.ts +++ b/src/utils/selector-is-predicates.ts @@ -1,4 +1,4 @@ -import type { Platform } from './device.ts'; +import type { Platform } from '../kernel/device.ts'; import type { SnapshotState } from '../kernel/snapshot.ts'; import { isNodeVisibleInEffectiveViewport } from './mobile-snapshot-semantics.ts'; import { isNodeEditable, isNodeVisible } from './selector-node.ts'; diff --git a/src/utils/selector-node.ts b/src/utils/selector-node.ts index f46e75a1e..e929d7809 100644 --- a/src/utils/selector-node.ts +++ b/src/utils/selector-node.ts @@ -1,4 +1,4 @@ -import type { Platform } from './device.ts'; +import type { Platform } from '../kernel/device.ts'; import type { SnapshotNode } from '../kernel/snapshot.ts'; import { isFillableType } from './snapshot-processing.ts'; diff --git a/src/utils/selectors-parse.ts b/src/utils/selectors-parse.ts index 9ec7982e6..b3c55398b 100644 --- a/src/utils/selectors-parse.ts +++ b/src/utils/selectors-parse.ts @@ -1,4 +1,4 @@ -import { AppError } from './errors.ts'; +import { AppError } from '../kernel/errors.ts'; export type SelectorKey = | 'id' diff --git a/src/utils/session-binding.ts b/src/utils/session-binding.ts index 5ce5b66d6..53e915481 100644 --- a/src/utils/session-binding.ts +++ b/src/utils/session-binding.ts @@ -1,4 +1,4 @@ -import { AppError } from './errors.ts'; +import { AppError } from '../kernel/errors.ts'; import type { CliFlags } from './cli-flags.ts'; import type { DaemonLockPolicy } from '../daemon/types.ts'; diff --git a/src/utils/snapshot-processing.ts b/src/utils/snapshot-processing.ts index 073351468..d699be349 100644 --- a/src/utils/snapshot-processing.ts +++ b/src/utils/snapshot-processing.ts @@ -1,4 +1,4 @@ -import type { Platform } from './device.ts'; +import type { Platform } from '../kernel/device.ts'; import type { RawSnapshotNode, SnapshotNode, SnapshotState } from '../kernel/snapshot.ts'; import { extractReadableText, normalizeType } from './text-surface.ts'; diff --git a/src/utils/source-value.ts b/src/utils/source-value.ts index c5338c4b7..4a8c37cf5 100644 --- a/src/utils/source-value.ts +++ b/src/utils/source-value.ts @@ -1,4 +1,4 @@ -import { AppError } from './errors.ts'; +import { AppError } from '../kernel/errors.ts'; export type SourceValueDefinition = { type: 'boolean' | 'int' | 'enum' | 'string' | 'booleanOrString'; diff --git a/src/utils/string-enum.ts b/src/utils/string-enum.ts index 1035c46e4..3936c44eb 100644 --- a/src/utils/string-enum.ts +++ b/src/utils/string-enum.ts @@ -1,4 +1,4 @@ -import { AppError } from './errors.ts'; +import { AppError } from '../kernel/errors.ts'; /** * Membership guard for an `as const` string tuple (the single source of truth for diff --git a/src/utils/swift-cache.ts b/src/utils/swift-cache.ts index ce0c365af..b623e71c5 100644 --- a/src/utils/swift-cache.ts +++ b/src/utils/swift-cache.ts @@ -2,7 +2,7 @@ import { createHash } from 'node:crypto'; import fs from 'node:fs'; import os from 'node:os'; import path from 'node:path'; -import { AppError } from './errors.ts'; +import { AppError } from '../kernel/errors.ts'; import { runCmd } from './exec.ts'; import { acquireProcessLock } from './process-lock.ts'; import { readProcessStartTime } from './process-identity.ts'; diff --git a/src/utils/validation.ts b/src/utils/validation.ts index 58c5f891d..55517f773 100644 --- a/src/utils/validation.ts +++ b/src/utils/validation.ts @@ -1,4 +1,4 @@ -import { AppError } from './errors.ts'; +import { AppError } from '../kernel/errors.ts'; export function requireIntInRange(value: number, name: string, min: number, max: number): number { if (!Number.isFinite(value) || !Number.isInteger(value) || value < min || value > max) { diff --git a/src/utils/video.ts b/src/utils/video.ts index 34f50594b..a5a9fe7d3 100644 --- a/src/utils/video.ts +++ b/src/utils/video.ts @@ -1,5 +1,5 @@ import fs from 'node:fs'; -import { AppError } from './errors.ts'; +import { AppError } from '../kernel/errors.ts'; import { runCmd } from './exec.ts'; import { buildSwiftToolEnv, compileSwiftSourceText } from './swift-cache.ts'; import { sleep } from './timeouts.ts'; diff --git a/test/integration/provider-scenarios/daemon-http-server.test.ts b/test/integration/provider-scenarios/daemon-http-server.test.ts index cb95ee129..9ee27c386 100644 --- a/test/integration/provider-scenarios/daemon-http-server.test.ts +++ b/test/integration/provider-scenarios/daemon-http-server.test.ts @@ -5,7 +5,7 @@ import http from 'node:http'; import os from 'node:os'; import path from 'node:path'; import { test } from 'vitest'; -import { AppError } from '../../../src/utils/errors.ts'; +import { AppError } from '../../../src/kernel/errors.ts'; import { cleanupUploadedArtifact, prepareUploadedArtifact, diff --git a/test/integration/provider-scenarios/fixtures.ts b/test/integration/provider-scenarios/fixtures.ts index 5f69a6cbb..c5c75bb42 100644 --- a/test/integration/provider-scenarios/fixtures.ts +++ b/test/integration/provider-scenarios/fixtures.ts @@ -1,7 +1,7 @@ import fs from 'node:fs'; import os from 'node:os'; import path from 'node:path'; -import type { DeviceInfo } from '../../../src/utils/device.ts'; +import type { DeviceInfo } from '../../../src/kernel/device.ts'; export const PROVIDER_SCENARIO_ANDROID: DeviceInfo = { platform: 'android', diff --git a/test/integration/provider-scenarios/linux-world.ts b/test/integration/provider-scenarios/linux-world.ts index 9839c2a92..3767fa76c 100644 --- a/test/integration/provider-scenarios/linux-world.ts +++ b/test/integration/provider-scenarios/linux-world.ts @@ -2,7 +2,7 @@ import fs from 'node:fs'; import assert from 'node:assert/strict'; import { listLinuxDevices } from '../../../src/platforms/linux/devices.ts'; import { createLocalLinuxToolProvider } from '../../../src/platforms/linux/tool-provider.ts'; -import type { DeviceInfo } from '../../../src/utils/device.ts'; +import type { DeviceInfo } from '../../../src/kernel/device.ts'; import { validPng } from './assertions.ts'; import { PROVIDER_SCENARIO_LINUX } from './fixtures.ts'; import { diff --git a/test/integration/provider-scenarios/provider-device-runtime.test.ts b/test/integration/provider-scenarios/provider-device-runtime.test.ts index b995ad5d6..1c75f663f 100644 --- a/test/integration/provider-scenarios/provider-device-runtime.test.ts +++ b/test/integration/provider-scenarios/provider-device-runtime.test.ts @@ -12,7 +12,7 @@ import type { Interactor, SnapshotResult } from '../../../src/core/interactor-ty import type { LeaseLifecycleProvider } from '../../../src/daemon/handlers/lease.ts'; import type { DeviceLease } from '../../../src/daemon/lease-registry.ts'; import type { DaemonRequest } from '../../../src/daemon/types.ts'; -import type { DeviceInfo } from '../../../src/utils/device.ts'; +import type { DeviceInfo } from '../../../src/kernel/device.ts'; import { assertRpcOk } from './assertions.ts'; import { createProviderScenarioHarness, diff --git a/test/integration/provider-scenarios/remote-daemon-client.test.ts b/test/integration/provider-scenarios/remote-daemon-client.test.ts index 76090f54e..7417290b1 100644 --- a/test/integration/provider-scenarios/remote-daemon-client.test.ts +++ b/test/integration/provider-scenarios/remote-daemon-client.test.ts @@ -7,7 +7,7 @@ import { test } from 'vitest'; import { createAgentDeviceClient } from '../../../src/client.ts'; import { prepareRemoteRequestArtifacts } from '../../../src/daemon-artifacts.ts'; import { createDaemonProxyServer } from '../../../src/daemon-proxy.ts'; -import { normalizeAgentDeviceError } from '../../../src/utils/errors.ts'; +import { normalizeAgentDeviceError } from '../../../src/kernel/errors.ts'; import { closeLoopbackServer, listenOnLoopback, diff --git a/test/integration/provider-scenarios/transcript.ts b/test/integration/provider-scenarios/transcript.ts index 14c1e6e71..7af3579f6 100644 --- a/test/integration/provider-scenarios/transcript.ts +++ b/test/integration/provider-scenarios/transcript.ts @@ -1,6 +1,6 @@ import assert from 'node:assert/strict'; import { isDeepStrictEqual } from 'node:util'; -import type { Platform } from '../../../src/utils/device.ts'; +import type { Platform } from '../../../src/kernel/device.ts'; export interface ProviderScenarioProviderScope { deviceId?: string;