diff --git a/src/cli-schema/cli-config.ts b/src/cli-schema/cli-config.ts index 482eda4706..c4d821cd8b 100644 --- a/src/cli-schema/cli-config.ts +++ b/src/cli-schema/cli-config.ts @@ -2,7 +2,7 @@ import type { CliFlags } from '@agent-device/contracts/command'; import fs from 'node:fs'; import path from 'node:path'; import { AppError } from '@agent-device/kernel/errors'; -import { mergeDefinedFlags } from '../utils/merge-flags.ts'; +import { mergeDefinedFlags } from './merge-flags.ts'; import { type FlagKey } from '../commands/cli-grammar/flag-types.ts'; import { expandUserHomePath, resolveUserPath } from '@agent-device/host-kit/file'; import { diff --git a/src/utils/merge-flags.ts b/src/cli-schema/merge-flags.ts similarity index 100% rename from src/utils/merge-flags.ts rename to src/cli-schema/merge-flags.ts diff --git a/src/cli.ts b/src/cli.ts index 700ae004c3..3fad4d1749 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -34,7 +34,7 @@ import { withDiagnosticsScope, } from '@agent-device/host-kit/diagnostics'; import { resolveDaemonPaths } from './daemon/config.ts'; -import { applyDefaultPlatformBinding, resolveBindingSettings } from './utils/session-binding.ts'; +import { applyDefaultPlatformBinding, resolveBindingSettings } from './cli/session-binding.ts'; import { resolveCliOptions } from './cli/resolve-cli-options.ts'; import { maybeRunUpgradeNotifier } from './cli/update-check.ts'; import { diff --git a/src/utils/__tests__/perf-args.test.ts b/src/cli/parser/__tests__/perf-args.test.ts similarity index 95% rename from src/utils/__tests__/perf-args.test.ts rename to src/cli/parser/__tests__/perf-args.test.ts index 1a04556841..4dbfe0ce2f 100644 --- a/src/utils/__tests__/perf-args.test.ts +++ b/src/cli/parser/__tests__/perf-args.test.ts @@ -1,6 +1,6 @@ import { test } from 'vitest'; import assert from 'node:assert/strict'; -import { parseArgs, usageForCommand } from '../../cli/parser/args.ts'; +import { parseArgs, usageForCommand } from '../args.ts'; test('parseArgs accepts perf area subcommands', () => { const frames = parseArgs(['perf', 'frames'], { strictFlags: true }); diff --git a/src/cli/parser/args.ts b/src/cli/parser/args.ts index 77b52df248..812f9cf9d2 100644 --- a/src/cli/parser/args.ts +++ b/src/cli/parser/args.ts @@ -1,6 +1,6 @@ import type { CliFlags } from '@agent-device/contracts/command'; import { AppError } from '@agent-device/kernel/errors'; -import { mergeDefinedFlags } from '../../utils/merge-flags.ts'; +import { mergeDefinedFlags } from '../../cli-schema/merge-flags.ts'; import { applyCommandDefaults, assertCommandPositionalArity, diff --git a/src/cli/resolve-cli-options.ts b/src/cli/resolve-cli-options.ts index e1fe640039..8bbfcc3242 100644 --- a/src/cli/resolve-cli-options.ts +++ b/src/cli/resolve-cli-options.ts @@ -1,5 +1,5 @@ import type { CliFlags } from '@agent-device/contracts/command'; -import { mergeDefinedFlags } from '../utils/merge-flags.ts'; +import { mergeDefinedFlags } from '../cli-schema/merge-flags.ts'; import { finalizeParsedArgs, parseRawArgs } from './parser/args.ts'; import { resolveConfigBackedFlagDefaults } from '../cli-schema/cli-config.ts'; import { resolveRemoteConfigDefaults } from './remote-config-flags.ts'; diff --git a/src/utils/session-binding.ts b/src/cli/session-binding.ts similarity index 100% rename from src/utils/session-binding.ts rename to src/cli/session-binding.ts diff --git a/src/commands/interaction/runtime/gestures.ts b/src/commands/interaction/runtime/gestures.ts index e86c93919d..e04f564a83 100644 --- a/src/commands/interaction/runtime/gestures.ts +++ b/src/commands/interaction/runtime/gestures.ts @@ -28,7 +28,7 @@ import { type ScrollEdgeTarget, } from '../../../snapshot/scroll-edge-state.ts'; import { successText } from '@agent-device/kernel/success-text'; -import { requireIntInRange } from '../../../utils/validation.ts'; +import { requireIntInRange } from '../../../core/validation.ts'; import { toBackendContext } from '../../runtime-common.ts'; import { toBackendResult, diff --git a/src/commands/interaction/runtime/resolution.ts b/src/commands/interaction/runtime/resolution.ts index 3695841fb2..bbcdfac32a 100644 --- a/src/commands/interaction/runtime/resolution.ts +++ b/src/commands/interaction/runtime/resolution.ts @@ -33,7 +33,7 @@ import { classifyOffscreenScrollDirection, type OffscreenScrollDirection, } from '@agent-device/capture-kit/mobile-snapshot-semantics'; -import { truncateUtf8 } from '../../../utils/truncate-utf8.ts'; +import { truncateUtf8 } from './truncate-utf8.ts'; import type { InteractionTarget, PointTarget, diff --git a/src/utils/__tests__/truncate-utf8.test.ts b/src/commands/interaction/runtime/truncate-utf8.test.ts similarity index 96% rename from src/utils/__tests__/truncate-utf8.test.ts rename to src/commands/interaction/runtime/truncate-utf8.test.ts index b3f13a9575..a223827c45 100644 --- a/src/utils/__tests__/truncate-utf8.test.ts +++ b/src/commands/interaction/runtime/truncate-utf8.test.ts @@ -1,6 +1,6 @@ import { test } from 'vitest'; import assert from 'node:assert/strict'; -import { truncateUtf8 } from '../truncate-utf8.ts'; +import { truncateUtf8 } from './truncate-utf8.ts'; test('truncateUtf8 leaves short strings untouched', () => { assert.equal(truncateUtf8('Save', 256), 'Save'); diff --git a/src/utils/truncate-utf8.ts b/src/commands/interaction/runtime/truncate-utf8.ts similarity index 100% rename from src/utils/truncate-utf8.ts rename to src/commands/interaction/runtime/truncate-utf8.ts diff --git a/src/commands/observability/index.ts b/src/commands/observability/index.ts index 7fea894c38..8ef4d3ae57 100644 --- a/src/commands/observability/index.ts +++ b/src/commands/observability/index.ts @@ -6,7 +6,7 @@ import type { } from '@agent-device/contracts/client'; import { NETWORK_INCLUDE_MODES, type NetworkIncludeMode } from '@agent-device/kernel/contracts'; import { AppError } from '@agent-device/kernel/errors'; -import { parseStringMember } from '../../utils/string-enum.ts'; +import { parseStringMember } from './string-enum.ts'; import type { CommandSchemaOverride } from '../../cli-schema/types.ts'; import { defineCommandFacet, defineCommandFamilyFromFacets } from '../family/types.ts'; import { booleanField, enumField, integerField, stringField } from '../command-input.ts'; diff --git a/src/commands/observability/runtime/diagnostics.ts b/src/commands/observability/runtime/diagnostics.ts index f5d0190d8e..073e7d9ea1 100644 --- a/src/commands/observability/runtime/diagnostics.ts +++ b/src/commands/observability/runtime/diagnostics.ts @@ -9,7 +9,7 @@ import type { } from '../../../backend.ts'; import type { AgentDeviceRuntime, CommandContext } from '../../../runtime-contract.ts'; import { AppError } from '@agent-device/kernel/errors'; -import { requireIntInRange } from '../../../utils/validation.ts'; +import { requireIntInRange } from '../../../core/validation.ts'; import { formatLogsResult, formatNetworkResult, formatPerfResult } from './diagnostics-format.ts'; import type { DiagnosticsLogsCommandResult, diff --git a/src/utils/string-enum.ts b/src/commands/observability/string-enum.ts similarity index 100% rename from src/utils/string-enum.ts rename to src/commands/observability/string-enum.ts diff --git a/src/commands/recording/runtime/recording.ts b/src/commands/recording/runtime/recording.ts index 1f41308d08..2874d5f10d 100644 --- a/src/commands/recording/runtime/recording.ts +++ b/src/commands/recording/runtime/recording.ts @@ -8,7 +8,7 @@ import type { ArtifactDescriptor, FileOutputRef } from '../../../io.ts'; import type { CommandContext } from '../../../runtime-contract.ts'; import { AppError } from '@agent-device/kernel/errors'; import { successText } from '@agent-device/kernel/success-text'; -import { requireIntInRange } from '../../../utils/validation.ts'; +import { requireIntInRange } from '../../../core/validation.ts'; import { recordingQualityInputToExportQuality, type RecordingExportQuality, diff --git a/src/commands/system/runtime/system.ts b/src/commands/system/runtime/system.ts index 38f2c5058a..96ed707695 100644 --- a/src/commands/system/runtime/system.ts +++ b/src/commands/system/runtime/system.ts @@ -11,8 +11,8 @@ import type { BackMode } from '@agent-device/contracts/back-mode'; import { parseTvRemoteButton } from '@agent-device/contracts/tv-remote'; import { AppError } from '@agent-device/kernel/errors'; import { successText } from '@agent-device/kernel/success-text'; -import { requireIntInRange } from '../../../utils/validation.ts'; -import { isKeyboardAction } from '../../../utils/keyboard-actions.ts'; +import { isKeyboardAction } from '../../../core/keyboard-actions.ts'; +import { requireIntInRange } from '../../../core/validation.ts'; import { toBackendResult, type BackendResultEnvelope, diff --git a/src/utils/__tests__/device.test.ts b/src/core/__tests__/device.test.ts similarity index 100% rename from src/utils/__tests__/device.test.ts rename to src/core/__tests__/device.test.ts diff --git a/src/utils/__tests__/interactors.test.ts b/src/core/__tests__/interactors.test.ts similarity index 99% rename from src/utils/__tests__/interactors.test.ts rename to src/core/__tests__/interactors.test.ts index 7e61654ca8..895b13a294 100644 --- a/src/utils/__tests__/interactors.test.ts +++ b/src/core/__tests__/interactors.test.ts @@ -7,7 +7,7 @@ import type { Interactor, RunnerContext } from '@agent-device/contracts/interact import { setActiveProviderDeviceRuntimes } from '../../provider-device-runtime.ts'; import type { ProviderDeviceRuntime } from '@agent-device/contracts/device'; -import { getInteractor, getLocalInteractor } from '../../core/interactors.ts'; +import { getInteractor, getLocalInteractor } from '../interactors.ts'; const iosSimulator: DeviceInfo = { platform: 'apple', diff --git a/src/core/dispatch-payload.ts b/src/core/dispatch-payload.ts index c581c86224..86bbe85aef 100644 --- a/src/core/dispatch-payload.ts +++ b/src/core/dispatch-payload.ts @@ -1,6 +1,6 @@ import { promises as fs } from 'node:fs'; import { AppError } from '@agent-device/kernel/errors'; -import { resolvePayloadInput } from '../utils/payload-input.ts'; +import { resolvePayloadInput } from './payload-input.ts'; import type { JsonObject } from '@agent-device/contracts/client'; export async function readNotificationPayload(payloadArg: string): Promise { diff --git a/src/utils/keyboard-actions.ts b/src/core/keyboard-actions.ts similarity index 100% rename from src/utils/keyboard-actions.ts rename to src/core/keyboard-actions.ts diff --git a/src/utils/parse-timeout.ts b/src/core/parse-timeout.ts similarity index 100% rename from src/utils/parse-timeout.ts rename to src/core/parse-timeout.ts diff --git a/src/utils/payload-input.ts b/src/core/payload-input.ts similarity index 100% rename from src/utils/payload-input.ts rename to src/core/payload-input.ts diff --git a/src/utils/project-runtime.ts b/src/core/project-runtime.ts similarity index 100% rename from src/utils/project-runtime.ts rename to src/core/project-runtime.ts diff --git a/src/utils/validation.ts b/src/core/validation.ts similarity index 100% rename from src/utils/validation.ts rename to src/core/validation.ts diff --git a/src/core/wait-positionals.ts b/src/core/wait-positionals.ts index 16252226ee..2508c39925 100644 --- a/src/core/wait-positionals.ts +++ b/src/core/wait-positionals.ts @@ -1,4 +1,4 @@ -import { parseTimeout } from '../utils/parse-timeout.ts'; +import { parseTimeout } from './parse-timeout.ts'; import { detectUnknownSelectorKeyToken, isRoleHintWord, diff --git a/src/daemon/focus-runtime.ts b/src/daemon/focus-runtime.ts index f9701487f4..bb01f53357 100644 --- a/src/daemon/focus-runtime.ts +++ b/src/daemon/focus-runtime.ts @@ -3,7 +3,7 @@ import { focusRuntimeUse } from '@agent-device/contracts/platform-runtime-operat import type { DeviceInfo } from '@agent-device/kernel/device'; import type { Point } from '@agent-device/kernel/snapshot'; import { successText } from '@agent-device/kernel/success-text'; -import { readPointPositionals } from '../utils/validation.ts'; +import { readPointPositionals } from '../core/validation.ts'; import type { DaemonCommandContext } from './context.ts'; import type { ResolvedGenericExecution } from './request-generic-dispatch.ts'; import { resolveBoundGenericRuntime, type RuntimeAdmissionBindings } from './runtime-admission.ts'; diff --git a/src/daemon/handlers/__tests__/snapshot.test.ts b/src/daemon/handlers/__tests__/snapshot.test.ts index b5b259e74b..34776c6787 100644 --- a/src/daemon/handlers/__tests__/snapshot.test.ts +++ b/src/daemon/handlers/__tests__/snapshot.test.ts @@ -1,7 +1,7 @@ import { test } from 'vitest'; import assert from 'node:assert/strict'; import { parseWaitPositionals as parseWaitArgs } from '../../../core/wait-positionals.ts'; -import { parseTimeout } from '../../../utils/parse-timeout.ts'; +import { parseTimeout } from '../../../core/parse-timeout.ts'; // --- parseTimeout --- diff --git a/src/daemon/handlers/session-app-deployment.ts b/src/daemon/handlers/session-app-deployment.ts index 634850abc2..5688e9ec71 100644 --- a/src/daemon/handlers/session-app-deployment.ts +++ b/src/daemon/handlers/session-app-deployment.ts @@ -11,7 +11,7 @@ import { expireRefFrame } from '../ref-frame.ts'; import type { BindDeviceRuntime, InspectDeviceRuntimeFacts } from '../request-runtime-binding.ts'; import { SessionStore } from '../session-store.ts'; import type { DaemonRequest, DaemonResponse, SessionState } from '../types.ts'; -import { resolvePayloadInput } from '../../utils/payload-input.ts'; +import { resolvePayloadInput } from '../../core/payload-input.ts'; import { resolveDeployResultTarget } from '../result-serialization.ts'; import { withSuccessText } from '@agent-device/kernel/success-text'; import { recordSessionAction } from '../session-action-recorder.ts'; diff --git a/src/daemon/handlers/session-doctor-options.ts b/src/daemon/handlers/session-doctor-options.ts index 0f83b3e4ae..6d9747673c 100644 --- a/src/daemon/handlers/session-doctor-options.ts +++ b/src/daemon/handlers/session-doctor-options.ts @@ -1,4 +1,4 @@ -import { detectProjectRuntimeKind } from '../../utils/project-runtime.ts'; +import { detectProjectRuntimeKind } from '../../core/project-runtime.ts'; import { publicPlatformString } from '@agent-device/kernel/device'; import type { SessionStore } from '../session-store.ts'; import type { DaemonRequest, SessionState } from '../types.ts'; diff --git a/src/daemon/handlers/snapshot-alert.ts b/src/daemon/handlers/snapshot-alert.ts index 69c13ef921..3c8c18ed4d 100644 --- a/src/daemon/handlers/snapshot-alert.ts +++ b/src/daemon/handlers/snapshot-alert.ts @@ -15,7 +15,7 @@ import { contextFromFlags } from '../context.ts'; import type { DaemonRequest, DaemonResponse, SessionState } from '../types.ts'; import { SessionStore } from '../session-store.ts'; import { recordIfSession } from './snapshot-session.ts'; -import { parseTimeout } from '../../utils/parse-timeout.ts'; +import { parseTimeout } from '../../core/parse-timeout.ts'; import { resolveRefFrameEffect } from '../daemon-command-registry.ts'; import { expireRefFrame } from '../ref-frame.ts'; import type { DaemonFailureResponse } from '../response.ts'; diff --git a/src/daemon/keyboard-runtime.ts b/src/daemon/keyboard-runtime.ts index f349e47243..1a7f3f9b9f 100644 --- a/src/daemon/keyboard-runtime.ts +++ b/src/daemon/keyboard-runtime.ts @@ -17,7 +17,7 @@ import type { } from '@agent-device/contracts/platform-runtime'; import type { DeviceInfo } from '@agent-device/kernel/device'; import { AppError } from '@agent-device/kernel/errors'; -import { isKeyboardAction, type KeyboardAction } from '../utils/keyboard-actions.ts'; +import { isKeyboardAction, type KeyboardAction } from '../core/keyboard-actions.ts'; import { successText } from '@agent-device/kernel/success-text'; import type { DaemonCommandContext } from './context.ts'; import { diff --git a/src/daemon/session-event-action-presentation.ts b/src/daemon/session-event-action-presentation.ts index eb4c956145..efe3dd69cf 100644 --- a/src/daemon/session-event-action-presentation.ts +++ b/src/daemon/session-event-action-presentation.ts @@ -3,7 +3,7 @@ import { DEVICE_ROTATIONS } from '@agent-device/contracts/device'; import { BACK_MODES } from '@agent-device/contracts/back-mode'; import { TV_REMOTE_BUTTONS } from '@agent-device/contracts/tv-remote'; import { PUBLIC_COMMANDS } from '../command-catalog.ts'; -import { isKeyboardAction } from '../utils/keyboard-actions.ts'; +import { isKeyboardAction } from '../core/keyboard-actions.ts'; import { compactSessionEventDetails as compactDetails, readSessionEventBoolean as readBoolean, diff --git a/src/daemon/touch-runtime.ts b/src/daemon/touch-runtime.ts index a7db7a3b68..c4c3b8b1b3 100644 --- a/src/daemon/touch-runtime.ts +++ b/src/daemon/touch-runtime.ts @@ -21,7 +21,7 @@ import { AppError } from '@agent-device/kernel/errors'; import type { Point } from '@agent-device/kernel/snapshot'; import { readFillBackendResult } from '../core/fill-backend-result.ts'; import { successText } from '@agent-device/kernel/success-text'; -import { requireIntInRange } from '../utils/validation.ts'; +import { requireIntInRange } from '../core/validation.ts'; import type { DaemonCommandContext } from './context.ts'; import type { DirectIosSelectorTarget } from './direct-ios-selector.ts'; import type { DaemonFailureResponse } from './response.ts'; diff --git a/src/daemon/tv-remote-runtime.ts b/src/daemon/tv-remote-runtime.ts index cea981bba2..a9f568910d 100644 --- a/src/daemon/tv-remote-runtime.ts +++ b/src/daemon/tv-remote-runtime.ts @@ -5,7 +5,7 @@ import { parseTvRemoteButton, type TvRemoteButton } from '@agent-device/contract import type { DeviceInfo } from '@agent-device/kernel/device'; import { AppError } from '@agent-device/kernel/errors'; import { successText } from '@agent-device/kernel/success-text'; -import { requireIntInRange } from '../utils/validation.ts'; +import { requireIntInRange } from '../core/validation.ts'; import type { DaemonCommandContext } from './context.ts'; import type { ResolvedGenericExecution } from './request-generic-dispatch.ts'; import { resolveBoundGenericRuntime, type RuntimeAdmissionBindings } from './runtime-admission.ts'; diff --git a/src/utils/type-target-warning.ts b/src/daemon/type-target-warning.ts similarity index 100% rename from src/utils/type-target-warning.ts rename to src/daemon/type-target-warning.ts diff --git a/src/daemon/type-text-runtime.ts b/src/daemon/type-text-runtime.ts index 8ba89190e6..f8eacf6d6d 100644 --- a/src/daemon/type-text-runtime.ts +++ b/src/daemon/type-text-runtime.ts @@ -6,8 +6,8 @@ import type { import type { DeviceInfo } from '@agent-device/kernel/device'; import { AppError } from '@agent-device/kernel/errors'; import { successText } from '@agent-device/kernel/success-text'; -import { findMistargetedTypeRefToken } from '../utils/type-target-warning.ts'; -import { requireIntInRange } from '../utils/validation.ts'; +import { findMistargetedTypeRefToken } from './type-target-warning.ts'; +import { requireIntInRange } from '../core/validation.ts'; import type { DaemonCommandContext } from './context.ts'; import type { DaemonFailureResponse } from './response.ts'; import { admitRuntimeUse, type RuntimeAdmissionBindings } from './runtime-admission.ts'; diff --git a/src/mcp/tool-input-config.ts b/src/mcp/tool-input-config.ts index fc207f2105..2ad0ea22fe 100644 --- a/src/mcp/tool-input-config.ts +++ b/src/mcp/tool-input-config.ts @@ -4,7 +4,7 @@ import type { CliFlags } from '@agent-device/contracts/command'; import type { JsonSchema } from '../commands/command-contract.ts'; import type { CommandName } from '../commands/command-metadata.ts'; import { resolveConfigBackedFlagDefaults } from '../cli-schema/cli-config.ts'; -import { mergeDefinedFlags } from '../utils/merge-flags.ts'; +import { mergeDefinedFlags } from '../cli-schema/merge-flags.ts'; export function resolveMcpConfigDefaults( name: CommandName, diff --git a/src/metro/client-metro.ts b/src/metro/client-metro.ts index 8c41eaf9e8..bb36e30505 100644 --- a/src/metro/client-metro.ts +++ b/src/metro/client-metro.ts @@ -28,7 +28,7 @@ import { detectProjectRuntimeKindFromPackageJson, readProjectPackageJson, type PackageJsonShape, -} from '../utils/project-runtime.ts'; +} from '../core/project-runtime.ts'; import { normalizeBaseUrl } from '../client/base-url.ts'; import { buildBundleUrl } from './bundle-url.ts'; import {