From 795b9742e2d2c511f1587cd040603d18d01b05b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pierzcha=C5=82a?= Date: Thu, 15 Oct 2026 13:08:29 +0200 Subject: [PATCH 1/2] refactor(test): move sdk, remote and metro tests beside their modules (pure git mv) Specifier fixes follow in the next commit. Co-Authored-By: Claude Opus 5.5 --- src/{__tests__ => metro}/client-metro-auto-companion.test.ts | 0 src/{__tests__ => metro}/client-metro-companion.test.ts | 0 src/{__tests__ => metro}/client-metro-startup-cleanup.test.ts | 0 src/{__tests__ => metro}/client-metro.test.ts | 0 src/{__tests__ => metro}/metro-session-hints.test.ts | 0 src/{ => remote}/__tests__/remote-config-public.test.ts | 0 src/{ => remote}/__tests__/upload-client-cancellation.test.ts | 0 src/{ => remote}/__tests__/upload-client.test.ts | 0 src/{__tests__ => sdk}/android-adb-public.test.ts | 0 src/{commands/batch/public.test.ts => sdk/batch-public.test.ts} | 0 src/{__tests__ => sdk}/contracts-schema-public.test.ts | 0 src/{__tests__ => sdk}/metro-public.test.ts | 0 12 files changed, 0 insertions(+), 0 deletions(-) rename src/{__tests__ => metro}/client-metro-auto-companion.test.ts (100%) rename src/{__tests__ => metro}/client-metro-companion.test.ts (100%) rename src/{__tests__ => metro}/client-metro-startup-cleanup.test.ts (100%) rename src/{__tests__ => metro}/client-metro.test.ts (100%) rename src/{__tests__ => metro}/metro-session-hints.test.ts (100%) rename src/{ => remote}/__tests__/remote-config-public.test.ts (100%) rename src/{ => remote}/__tests__/upload-client-cancellation.test.ts (100%) rename src/{ => remote}/__tests__/upload-client.test.ts (100%) rename src/{__tests__ => sdk}/android-adb-public.test.ts (100%) rename src/{commands/batch/public.test.ts => sdk/batch-public.test.ts} (100%) rename src/{__tests__ => sdk}/contracts-schema-public.test.ts (100%) rename src/{__tests__ => sdk}/metro-public.test.ts (100%) diff --git a/src/__tests__/client-metro-auto-companion.test.ts b/src/metro/client-metro-auto-companion.test.ts similarity index 100% rename from src/__tests__/client-metro-auto-companion.test.ts rename to src/metro/client-metro-auto-companion.test.ts diff --git a/src/__tests__/client-metro-companion.test.ts b/src/metro/client-metro-companion.test.ts similarity index 100% rename from src/__tests__/client-metro-companion.test.ts rename to src/metro/client-metro-companion.test.ts diff --git a/src/__tests__/client-metro-startup-cleanup.test.ts b/src/metro/client-metro-startup-cleanup.test.ts similarity index 100% rename from src/__tests__/client-metro-startup-cleanup.test.ts rename to src/metro/client-metro-startup-cleanup.test.ts diff --git a/src/__tests__/client-metro.test.ts b/src/metro/client-metro.test.ts similarity index 100% rename from src/__tests__/client-metro.test.ts rename to src/metro/client-metro.test.ts diff --git a/src/__tests__/metro-session-hints.test.ts b/src/metro/metro-session-hints.test.ts similarity index 100% rename from src/__tests__/metro-session-hints.test.ts rename to src/metro/metro-session-hints.test.ts diff --git a/src/__tests__/remote-config-public.test.ts b/src/remote/__tests__/remote-config-public.test.ts similarity index 100% rename from src/__tests__/remote-config-public.test.ts rename to src/remote/__tests__/remote-config-public.test.ts diff --git a/src/__tests__/upload-client-cancellation.test.ts b/src/remote/__tests__/upload-client-cancellation.test.ts similarity index 100% rename from src/__tests__/upload-client-cancellation.test.ts rename to src/remote/__tests__/upload-client-cancellation.test.ts diff --git a/src/__tests__/upload-client.test.ts b/src/remote/__tests__/upload-client.test.ts similarity index 100% rename from src/__tests__/upload-client.test.ts rename to src/remote/__tests__/upload-client.test.ts diff --git a/src/__tests__/android-adb-public.test.ts b/src/sdk/android-adb-public.test.ts similarity index 100% rename from src/__tests__/android-adb-public.test.ts rename to src/sdk/android-adb-public.test.ts diff --git a/src/commands/batch/public.test.ts b/src/sdk/batch-public.test.ts similarity index 100% rename from src/commands/batch/public.test.ts rename to src/sdk/batch-public.test.ts diff --git a/src/__tests__/contracts-schema-public.test.ts b/src/sdk/contracts-schema-public.test.ts similarity index 100% rename from src/__tests__/contracts-schema-public.test.ts rename to src/sdk/contracts-schema-public.test.ts diff --git a/src/__tests__/metro-public.test.ts b/src/sdk/metro-public.test.ts similarity index 100% rename from src/__tests__/metro-public.test.ts rename to src/sdk/metro-public.test.ts From 9221fd0a612fd4868c5b553ccc41c75ed69918c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pierzcha=C5=82a?= Date: Thu, 15 Oct 2026 13:10:02 +0200 Subject: [PATCH 2/2] refactor(test): point moved sdk, remote and metro tests at their new neighbours Specifier-only edits; the one other change is the mutation-lane exclusion path in vitest.config.ts. Co-Authored-By: Claude Opus 5.5 --- src/metro/client-metro-auto-companion.test.ts | 6 +++--- src/metro/client-metro-companion.test.ts | 2 +- src/metro/client-metro-startup-cleanup.test.ts | 2 +- src/metro/client-metro.test.ts | 6 +++--- src/metro/metro-session-hints.test.ts | 2 +- src/remote/__tests__/remote-config-public.test.ts | 4 ++-- .../__tests__/upload-client-cancellation.test.ts | 2 +- src/remote/__tests__/upload-client.test.ts | 4 ++-- src/sdk/android-adb-public.test.ts | 2 +- src/sdk/batch-public.test.ts | 2 +- src/sdk/contracts-schema-public.test.ts | 11 +++-------- src/sdk/metro-public.test.ts | 4 ++-- vitest.config.ts | 2 +- 13 files changed, 22 insertions(+), 27 deletions(-) diff --git a/src/metro/client-metro-auto-companion.test.ts b/src/metro/client-metro-auto-companion.test.ts index 1d41106cd6..a5ea01df04 100644 --- a/src/metro/client-metro-auto-companion.test.ts +++ b/src/metro/client-metro-auto-companion.test.ts @@ -5,12 +5,12 @@ import path from 'node:path'; import { mkdtempForTestSync } from '@agent-device/test-kit/tmp-dir'; import { AppError } from '@agent-device/kernel/errors'; -vi.mock('../metro/client-metro-companion.ts', () => ({ +vi.mock('./client-metro-companion.ts', () => ({ ensureMetroCompanion: vi.fn(), })); -import { ensureMetroCompanion } from '../metro/client-metro-companion.ts'; -import { prepareMetroRuntime } from '../metro/client-metro.ts'; +import { ensureMetroCompanion } from './client-metro-companion.ts'; +import { prepareMetroRuntime } from './client-metro.ts'; const TEST_BRIDGE_SCOPE = { tenantId: 'tenant-1', diff --git a/src/metro/client-metro-companion.test.ts b/src/metro/client-metro-companion.test.ts index d32d8cc209..15c7f48f9d 100644 --- a/src/metro/client-metro-companion.test.ts +++ b/src/metro/client-metro-companion.test.ts @@ -28,7 +28,7 @@ import { type ConfirmedProcessStop, } from '@agent-device/host-kit/process'; -import { ensureMetroCompanion, stopMetroCompanion } from '../metro/client-metro-companion.ts'; +import { ensureMetroCompanion, stopMetroCompanion } from './client-metro-companion.ts'; import { ensureReactDevtoolsCompanion } from '../client/client-react-devtools-companion.ts'; import { METRO_COMPANION_RUN_ARG } from '../client/client-companion-tunnel-contract.ts'; diff --git a/src/metro/client-metro-startup-cleanup.test.ts b/src/metro/client-metro-startup-cleanup.test.ts index d3d869dcbc..715c3d8c06 100644 --- a/src/metro/client-metro-startup-cleanup.test.ts +++ b/src/metro/client-metro-startup-cleanup.test.ts @@ -25,7 +25,7 @@ import { type ConfirmedProcessStop, } from '@agent-device/host-kit/process'; -import { prepareMetroRuntime } from '../metro/client-metro.ts'; +import { prepareMetroRuntime } from './client-metro.ts'; afterEach(() => { vi.useRealTimers(); diff --git a/src/metro/client-metro.test.ts b/src/metro/client-metro.test.ts index 7f62e0bb8d..9fb47df213 100644 --- a/src/metro/client-metro.test.ts +++ b/src/metro/client-metro.test.ts @@ -7,10 +7,10 @@ import { createServer } from 'node:http'; import type { Socket } from 'node:net'; import net from 'node:net'; import path from 'node:path'; -import { prepareMetroRuntime, reloadMetro } from '../metro/client-metro.ts'; -import { resolveMetroReloadEndpoints } from '../metro/metro-reload-endpoints.ts'; +import { prepareMetroRuntime, reloadMetro } from './client-metro.ts'; +import { resolveMetroReloadEndpoints } from './metro-reload-endpoints.ts'; import { createAgentDeviceClient } from '../agent-device-client.ts'; -import { readMetroSessionHints } from '../metro/metro-session-hints.ts'; +import { readMetroSessionHints } from './metro-session-hints.ts'; import { resolveDaemonPaths } from '@agent-device/daemon-contracts/daemon-resolution'; import { AppError } from '@agent-device/kernel/errors'; import { isProcessAlive, waitForProcessExit } from '@agent-device/host-kit/process'; diff --git a/src/metro/metro-session-hints.test.ts b/src/metro/metro-session-hints.test.ts index 497ae0e6dd..1eff8ebd5b 100644 --- a/src/metro/metro-session-hints.test.ts +++ b/src/metro/metro-session-hints.test.ts @@ -8,7 +8,7 @@ import { clearMetroSessionHints, readMetroSessionHints, writeMetroSessionHints, -} from '../metro/metro-session-hints.ts'; +} from './metro-session-hints.ts'; import { mkdtempForTestSync } from '@agent-device/test-kit/tmp-dir'; function tempStateDir(): string { diff --git a/src/remote/__tests__/remote-config-public.test.ts b/src/remote/__tests__/remote-config-public.test.ts index b13e160be3..ac66edea44 100644 --- a/src/remote/__tests__/remote-config-public.test.ts +++ b/src/remote/__tests__/remote-config-public.test.ts @@ -2,8 +2,8 @@ import { test } from 'vitest'; import assert from 'node:assert/strict'; import fs from 'node:fs'; import path from 'node:path'; -import { resolveRemoteConfigProfile } from '../remote/remote-config.ts'; -import { resolveRemoteConfigPath } from '../remote/remote-config-core.ts'; +import { resolveRemoteConfigProfile } from '../remote-config.ts'; +import { resolveRemoteConfigPath } from '../remote-config-core.ts'; import { mkdtempForTestSync } from '@agent-device/test-kit/tmp-dir'; test('public remote-config helpers resolve file paths and merged profiles', () => { diff --git a/src/remote/__tests__/upload-client-cancellation.test.ts b/src/remote/__tests__/upload-client-cancellation.test.ts index ae2ac3cd90..0b31fdb4a7 100644 --- a/src/remote/__tests__/upload-client-cancellation.test.ts +++ b/src/remote/__tests__/upload-client-cancellation.test.ts @@ -13,7 +13,7 @@ import fs from 'node:fs'; import http, { type IncomingMessage, type ServerResponse } from 'node:http'; import path from 'node:path'; import { once } from 'node:events'; -import { uploadArtifact } from '../remote/upload-client.ts'; +import { uploadArtifact } from '../upload-client.ts'; import { mkdtempForTestSync } from '@agent-device/test-kit/tmp-dir'; const TEST_TOKEN = 'agent-device-upload-cancel-token'; diff --git a/src/remote/__tests__/upload-client.test.ts b/src/remote/__tests__/upload-client.test.ts index e794493326..3f32a856f3 100644 --- a/src/remote/__tests__/upload-client.test.ts +++ b/src/remote/__tests__/upload-client.test.ts @@ -4,8 +4,8 @@ import { createHash, randomUUID } from 'node:crypto'; import fs from 'node:fs'; import http, { type IncomingMessage, type ServerResponse } from 'node:http'; import path from 'node:path'; -import { uploadArtifact } from '../remote/upload-client.ts'; -import type { UploadProgressEvent } from '../remote/upload-progress.ts'; +import { uploadArtifact } from '../upload-client.ts'; +import type { UploadProgressEvent } from '../upload-progress.ts'; import { runCmdSync, withCommandExecutorOverride } from '@agent-device/host-kit/command'; import { mkdtempForTestSync } from '@agent-device/test-kit/tmp-dir'; import { closeLoopbackServer, listenOnLoopback } from '@agent-device/test-kit/loopback'; diff --git a/src/sdk/android-adb-public.test.ts b/src/sdk/android-adb-public.test.ts index 3bccd89300..2ea57c8f59 100644 --- a/src/sdk/android-adb-public.test.ts +++ b/src/sdk/android-adb-public.test.ts @@ -2,7 +2,7 @@ import assert from 'node:assert/strict'; import { test } from 'vitest'; test('public android-adb entrypoint exposes helpers but not resolver internals', async () => { - const androidAdb = await import('../sdk/android-adb.ts'); + const androidAdb = await import('./android-adb.ts'); assert.equal(typeof androidAdb.createAndroidPortReverseManager, 'function'); assert.equal(typeof androidAdb.captureAndroidLogcatWithAdb, 'function'); diff --git a/src/sdk/batch-public.test.ts b/src/sdk/batch-public.test.ts index ef22badb94..a73c0cea2c 100644 --- a/src/sdk/batch-public.test.ts +++ b/src/sdk/batch-public.test.ts @@ -1,6 +1,6 @@ import { test } from 'vitest'; import assert from 'node:assert/strict'; -import { runBatch } from '../../sdk/batch.ts'; +import { runBatch } from './batch.ts'; import type { DaemonRequest } from '@agent-device/kernel/contracts'; test('public batch entrypoint exports daemon-compatible orchestration helpers', async () => { diff --git a/src/sdk/contracts-schema-public.test.ts b/src/sdk/contracts-schema-public.test.ts index 04cb8f4b01..14252eaf08 100644 --- a/src/sdk/contracts-schema-public.test.ts +++ b/src/sdk/contracts-schema-public.test.ts @@ -24,13 +24,8 @@ import fs from 'node:fs'; import path from 'node:path'; import { test } from 'vitest'; import type { CommandResult } from '@agent-device/command-registry/command-result'; -import { - centerOfRect, - defaultHintForCode, - normalizeError, - type DaemonError, -} from '../sdk/contracts.ts'; -import { AppError } from '../sdk/index.ts'; +import { centerOfRect, defaultHintForCode, normalizeError, type DaemonError } from './contracts.ts'; +import { AppError } from './index.ts'; const invalidArgsCode = 'INVALID_ARGS' satisfies AppErrorCode; const rect = { x: 1, y: 2, width: 3, height: 4 } satisfies Rect; @@ -53,7 +48,7 @@ test('public contracts error helpers do not load diagnostics module', () => { }); test('public contract facade does not expose parser schemas', async () => { - const publicContracts = (await import('../sdk/contracts.ts')) as Record; + const publicContracts = (await import('./contracts.ts')) as Record; assert.equal(publicContracts.daemonCommandRequestSchema, undefined); assert.equal(publicContracts.daemonRuntimeSchema, undefined); diff --git a/src/sdk/metro-public.test.ts b/src/sdk/metro-public.test.ts index 4860388579..bb55581e4f 100644 --- a/src/sdk/metro-public.test.ts +++ b/src/sdk/metro-public.test.ts @@ -7,7 +7,7 @@ import { type MetroBridgeDescriptor, type MetroTunnelRequestMessage, type MetroTunnelResponseMessage, -} from '../sdk/metro.ts'; +} from './metro.ts'; test('public metro entrypoint exposes url and transport helpers', () => { assert.equal(normalizeBaseUrl('https://bridge.example.test///'), 'https://bridge.example.test'); @@ -29,7 +29,7 @@ test('public metro entrypoint exposes url and transport helpers', () => { }); test('public metro entrypoint does not expose runtime hint builders', async () => { - const metro = (await import('../sdk/metro.ts')) as Record; + const metro = (await import('./metro.ts')) as Record; assert.equal(metro.buildIosRuntimeHints, undefined); assert.equal(metro.buildAndroidRuntimeHints, undefined); diff --git a/vitest.config.ts b/vitest.config.ts index cb40929cc1..53838319ab 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -7,7 +7,7 @@ import slowTestGateReporter from './scripts/vitest-slow-test-reporter.ts'; // mutation lane excludes these tests even though the unit lane runs them normally. const MUTATION_EXCLUDED_SUBPROCESS_TESTS: readonly string[] = [ // Stubs npx plus the package managers and spawns a real Metro dev server per case. - 'src/__tests__/client-metro.test.ts', + 'src/metro/client-metro.test.ts', // The SUT is the subprocess watchdog: a node subprocess per case, one hangs on purpose (#1414). 'scripts/fuzz/harness.test.ts', // The daemon takeover test launches a branch-named daemon per case to prove