diff --git a/.fallowrc.json b/.fallowrc.json index 21746458c..b4f547005 100644 --- a/.fallowrc.json +++ b/.fallowrc.json @@ -2,16 +2,16 @@ "$schema": "https://raw.githubusercontent.com/fallow-rs/fallow/main/schema.json", "entry": [ "rslib.config.ts", - "src/index.ts", - "src/io.ts", - "src/artifacts.ts", - "src/metro.ts", - "src/remote-config.ts", - "src/install-source.ts", - "src/android-adb.ts", - "src/contracts.ts", - "src/selectors.ts", - "src/finders.ts", + "src/sdk/index.ts", + "src/sdk/io.ts", + "src/sdk/artifacts.ts", + "src/sdk/metro.ts", + "src/sdk/remote-config.ts", + "src/sdk/install-source.ts", + "src/sdk/android-adb.ts", + "src/sdk/contracts.ts", + "src/sdk/selectors.ts", + "src/sdk/finders.ts", "src/bin.ts", "src/client/companion-tunnel.ts", "src/daemon.ts", diff --git a/rslib.config.ts b/rslib.config.ts index 69ecf7967..8856012c1 100644 --- a/rslib.config.ts +++ b/rslib.config.ts @@ -22,17 +22,17 @@ export default defineConfig({ }, source: { entry: { - index: 'src/index.ts', - io: 'src/io.ts', - artifacts: 'src/artifacts.ts', - batch: 'src/batch.ts', - metro: 'src/metro.ts', - 'remote-config': 'src/remote-config.ts', - 'install-source': 'src/install-source.ts', - 'android-adb': 'src/android-adb.ts', - contracts: 'src/contracts.ts', - selectors: 'src/selectors.ts', - finders: 'src/finders.ts', + index: 'src/sdk/index.ts', + io: 'src/sdk/io.ts', + artifacts: 'src/sdk/artifacts.ts', + batch: 'src/sdk/batch.ts', + metro: 'src/sdk/metro.ts', + 'remote-config': 'src/sdk/remote-config.ts', + 'install-source': 'src/sdk/install-source.ts', + 'android-adb': 'src/sdk/android-adb.ts', + contracts: 'src/sdk/contracts.ts', + selectors: 'src/sdk/selectors.ts', + finders: 'src/sdk/finders.ts', 'internal/bin': 'src/bin.ts', 'internal/companion-tunnel': 'src/client/companion-tunnel.ts', 'internal/daemon': 'src/daemon.ts', diff --git a/src/__tests__/android-adb-public.test.ts b/src/__tests__/android-adb-public.test.ts index 3fbdcf508..3bccd8930 100644 --- a/src/__tests__/android-adb-public.test.ts +++ b/src/__tests__/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('../android-adb.ts'); + const androidAdb = await import('../sdk/android-adb.ts'); assert.equal(typeof androidAdb.createAndroidPortReverseManager, 'function'); assert.equal(typeof androidAdb.captureAndroidLogcatWithAdb, 'function'); diff --git a/src/__tests__/contracts-schema-public.test.ts b/src/__tests__/contracts-schema-public.test.ts index 716f5ade2..17ade2692 100644 --- a/src/__tests__/contracts-schema-public.test.ts +++ b/src/__tests__/contracts-schema-public.test.ts @@ -2,7 +2,7 @@ import { test } from 'vitest'; import assert from 'node:assert/strict'; import fs from 'node:fs'; import path from 'node:path'; -import { AppError } from '../index.ts'; +import { AppError } from '../sdk/index.ts'; import type { CommandResult } from '../core/command-descriptor/command-result.ts'; import type { AppStateCommandResult } from '../contracts/app-state.ts'; import type { ClipboardCommandResult } from '../contracts/clipboard.ts'; @@ -14,7 +14,7 @@ import type { RotateCommandResult, } from '../contracts/navigation.ts'; import type { ViewportCommandResult } from '../contracts/viewport.ts'; -import { centerOfRect, defaultHintForCode, normalizeError } from '../contracts.ts'; +import { centerOfRect, defaultHintForCode, normalizeError } from '../sdk/contracts.ts'; import { daemonCommandRequestSchema, daemonRuntimeSchema, @@ -48,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('../contracts.ts')) as Record; + const publicContracts = (await import('../sdk/contracts.ts')) as Record; assert.equal(publicContracts.daemonCommandRequestSchema, undefined); assert.equal(publicContracts.daemonRuntimeSchema, undefined); diff --git a/src/__tests__/install-source-public.test.ts b/src/__tests__/install-source-public.test.ts index 8fffa4cb9..bc388482f 100644 --- a/src/__tests__/install-source-public.test.ts +++ b/src/__tests__/install-source-public.test.ts @@ -1,7 +1,7 @@ import assert from 'node:assert/strict'; import { test } from 'vitest'; -import { isTrustedInstallSourceUrl, validateDownloadSourceUrl } from '../install-source.ts'; +import { isTrustedInstallSourceUrl, validateDownloadSourceUrl } from '../sdk/install-source.ts'; test('public install-source entrypoint re-exports pure helpers', () => { assert.equal( diff --git a/src/__tests__/metro-protocol-public.test.ts b/src/__tests__/metro-protocol-public.test.ts index b41e34ce0..32dd658cc 100644 --- a/src/__tests__/metro-protocol-public.test.ts +++ b/src/__tests__/metro-protocol-public.test.ts @@ -6,7 +6,7 @@ import { type MetroBridgeDescriptor, type MetroTunnelRequestMessage, type MetroTunnelResponseMessage, -} from '../metro.ts'; +} from '../sdk/metro.ts'; // Type-only contract fixtures — these verify that the public subpath types // remain structurally stable. A rename or breaking shape change will fail diff --git a/src/__tests__/metro-public.test.ts b/src/__tests__/metro-public.test.ts index f244c689f..1713c7386 100644 --- a/src/__tests__/metro-public.test.ts +++ b/src/__tests__/metro-public.test.ts @@ -1,6 +1,6 @@ import { test } from 'vitest'; import assert from 'node:assert/strict'; -import { buildBundleUrl, normalizeBaseUrl, resolveRuntimeTransport } from '../metro.ts'; +import { buildBundleUrl, normalizeBaseUrl, resolveRuntimeTransport } from '../sdk/metro.ts'; test('public metro entrypoint exposes url and transport helpers', () => { assert.equal(normalizeBaseUrl('https://bridge.example.test///'), 'https://bridge.example.test'); @@ -22,7 +22,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('../metro.ts')) as Record; + const metro = (await import('../sdk/metro.ts')) as Record; assert.equal(metro.buildIosRuntimeHints, undefined); assert.equal(metro.buildAndroidRuntimeHints, undefined); diff --git a/src/__tests__/selectors-public.test.ts b/src/__tests__/selectors-public.test.ts index fb90c0c10..24d1ae62f 100644 --- a/src/__tests__/selectors-public.test.ts +++ b/src/__tests__/selectors-public.test.ts @@ -11,7 +11,7 @@ import { tryParseSelectorChain, type SelectorChain, type SelectorDiagnostics, -} from '../selectors.ts'; +} from '../sdk/selectors.ts'; import type { SnapshotNode } from '../kernel/snapshot.ts'; const nodes: SnapshotNode[] = [ diff --git a/src/artifacts.ts b/src/artifacts.ts deleted file mode 100644 index 34ed3c323..000000000 --- a/src/artifacts.ts +++ /dev/null @@ -1 +0,0 @@ -export { resolveAndroidArchivePackageName } from './platforms/android/manifest.ts'; diff --git a/src/batch.ts b/src/batch.ts deleted file mode 100644 index 72a2ca394..000000000 --- a/src/batch.ts +++ /dev/null @@ -1 +0,0 @@ -export { runBatch } from './core/batch.ts'; diff --git a/src/commands/batch/public.test.ts b/src/commands/batch/public.test.ts index 9ad03732e..ac2ba8bd4 100644 --- a/src/commands/batch/public.test.ts +++ b/src/commands/batch/public.test.ts @@ -1,6 +1,6 @@ import { test } from 'vitest'; import assert from 'node:assert/strict'; -import { runBatch } from '../../batch.ts'; +import { runBatch } from '../../sdk/batch.ts'; import type { DaemonRequest } from '../../kernel/contracts.ts'; test('public batch entrypoint exports daemon-compatible orchestration helpers', async () => { diff --git a/src/commands/interaction/runtime/resolution.ts b/src/commands/interaction/runtime/resolution.ts index 3cf7984de..818020847 100644 --- a/src/commands/interaction/runtime/resolution.ts +++ b/src/commands/interaction/runtime/resolution.ts @@ -3,11 +3,8 @@ import type { Point, SnapshotNode, SnapshotState } from '../../../kernel/snapsho import { findNodeByRef, normalizeRef } from '../../../kernel/snapshot.ts'; import { resolveRectCenter } from '../../../utils/rect-center.ts'; import type { AgentDeviceRuntime, CommandContext } from '../../../runtime-contract.ts'; -import { - formatSelectorFailure, - parseSelectorChain, - resolveSelectorChain, -} from '../../../selectors.ts'; +import { parseSelectorChain } from '../../../utils/selectors-parse.ts'; +import { formatSelectorFailure, resolveSelectorChain } from '../../../daemon/selectors.ts'; import { buildSelectorChainForNode } from '../../../utils/selector-build.ts'; import { findNodeByLabel, resolveRefLabel } from '../../../snapshot/snapshot-processing.ts'; import { diff --git a/src/commands/interaction/runtime/selector-read.ts b/src/commands/interaction/runtime/selector-read.ts index c3a9f388a..46ed16bd7 100644 --- a/src/commands/interaction/runtime/selector-read.ts +++ b/src/commands/interaction/runtime/selector-read.ts @@ -12,13 +12,12 @@ import { } from '../../../snapshot/snapshot-quality.ts'; import type { AgentDeviceRuntime, CommandContext } from '../../../runtime-contract.ts'; import { AppError } from '../../../kernel/errors.ts'; +import { parseSelectorChain, type SelectorChain } from '../../../utils/selectors-parse.ts'; import { findSelectorChainMatch, formatSelectorFailure, - parseSelectorChain, resolveSelectorChain, - type SelectorChain, -} from '../../../selectors.ts'; +} from '../../../daemon/selectors.ts'; import { buildSelectorChainForNode } from '../../../utils/selector-build.ts'; import { evaluateIsPredicate, diff --git a/src/daemon/handlers/find.ts b/src/daemon/handlers/find.ts index 359c28c0e..1ea642cd9 100644 --- a/src/daemon/handlers/find.ts +++ b/src/daemon/handlers/find.ts @@ -27,7 +27,8 @@ import { isSparseSnapshotQualityVerdict, type SnapshotQualityVerdict, } from '../../snapshot/snapshot-quality.ts'; -import { resolveSelectorChain, type SelectorChain } from '../../selectors.ts'; +import { resolveSelectorChain } from '../selectors.ts'; +import type { SelectorChain } from '../../utils/selectors-parse.ts'; export { parseFindArgs } from '../../utils/finders.ts'; diff --git a/src/install-source.ts b/src/install-source.ts deleted file mode 100644 index 00630f22e..000000000 --- a/src/install-source.ts +++ /dev/null @@ -1,6 +0,0 @@ -export { - isTrustedInstallSourceUrl, - validateDownloadSourceUrl, -} from './platforms/install-source.ts'; - -export type { MaterializeInstallSource } from './platforms/install-source.ts'; diff --git a/src/metro.ts b/src/metro.ts deleted file mode 100644 index e14514b5c..000000000 --- a/src/metro.ts +++ /dev/null @@ -1,7 +0,0 @@ -export { buildBundleUrl, normalizeBaseUrl } from './utils/url.ts'; -export type { - MetroBridgeDescriptor, - MetroTunnelRequestMessage, - MetroTunnelResponseMessage, -} from './metro/metro.ts'; -export { resolveRuntimeTransport } from './metro/metro.ts'; diff --git a/src/remote-config.ts b/src/remote-config.ts deleted file mode 100644 index d37e46c06..000000000 --- a/src/remote-config.ts +++ /dev/null @@ -1 +0,0 @@ -export type { RemoteConfigProfile } from './remote/remote-config-schema.ts'; diff --git a/src/android-adb.ts b/src/sdk/android-adb.ts similarity index 60% rename from src/android-adb.ts rename to src/sdk/android-adb.ts index 3f8c03259..15b77d151 100644 --- a/src/android-adb.ts +++ b/src/sdk/android-adb.ts @@ -3,19 +3,19 @@ export { type AndroidAdbExecutor, type AndroidAdbExecutorOptions, type AndroidPortReverseEndpoint, -} from './platforms/android/adb-executor.ts'; +} from '../platforms/android/adb-executor.ts'; export { getAndroidAppStateWithAdb, listAndroidAppsWithAdb, -} from './platforms/android/app-helpers.ts'; +} from '../platforms/android/app-helpers.ts'; export { forceStopAndroidAppWithAdb, openAndroidAppWithAdb, -} from './platforms/android/app-control.ts'; -export { captureAndroidLogcatWithAdb } from './platforms/android/logcat.ts'; +} from '../platforms/android/app-control.ts'; +export { captureAndroidLogcatWithAdb } from '../platforms/android/logcat.ts'; export { dismissAndroidKeyboardWithAdb, getAndroidKeyboardStatusWithAdb, readAndroidClipboardWithAdb, writeAndroidClipboardWithAdb, -} from './platforms/android/device-input-state.ts'; +} from '../platforms/android/device-input-state.ts'; diff --git a/src/sdk/artifacts.ts b/src/sdk/artifacts.ts new file mode 100644 index 000000000..3a35c610d --- /dev/null +++ b/src/sdk/artifacts.ts @@ -0,0 +1 @@ +export { resolveAndroidArchivePackageName } from '../platforms/android/manifest.ts'; diff --git a/src/sdk/batch.ts b/src/sdk/batch.ts new file mode 100644 index 000000000..89fc6e59c --- /dev/null +++ b/src/sdk/batch.ts @@ -0,0 +1 @@ +export { runBatch } from '../core/batch.ts'; diff --git a/src/contracts.ts b/src/sdk/contracts.ts similarity index 84% rename from src/contracts.ts rename to src/sdk/contracts.ts index 65c21ca01..c27a28516 100644 --- a/src/contracts.ts +++ b/src/sdk/contracts.ts @@ -11,6 +11,6 @@ export type { LeaseHeartbeatPayload, LeaseReleasePayload, SessionRuntimeHints, -} from './kernel/contracts.ts'; +} from '../kernel/contracts.ts'; -export { centerOfRect, defaultHintForCode, normalizeError } from './kernel/contracts.ts'; +export { centerOfRect, defaultHintForCode, normalizeError } from '../kernel/contracts.ts'; diff --git a/src/sdk/finders.ts b/src/sdk/finders.ts new file mode 100644 index 000000000..94f69878d --- /dev/null +++ b/src/sdk/finders.ts @@ -0,0 +1 @@ +export * from '../finders.ts'; diff --git a/src/index.ts b/src/sdk/index.ts similarity index 57% rename from src/index.ts rename to src/sdk/index.ts index 6e366e0a8..d54d503ff 100644 --- a/src/index.ts +++ b/src/sdk/index.ts @@ -1,7 +1,7 @@ -export { createAgentDeviceClient } from './client/client.ts'; -export { createLocalArtifactAdapter } from './io.ts'; -export { AppError, isAgentDeviceError, normalizeAgentDeviceError } from './kernel/errors.ts'; -export { centerOfRect } from './kernel/snapshot.ts'; +export { createAgentDeviceClient } from '../client/client.ts'; +export { createLocalArtifactAdapter } from '../io.ts'; +export { AppError, isAgentDeviceError, normalizeAgentDeviceError } from '../kernel/errors.ts'; +export { centerOfRect } from '../kernel/snapshot.ts'; export type { AgentDeviceDaemonTransport, @@ -18,6 +18,6 @@ export type { RotateCommandOptions, RotateCommandResult, ScrollOptions, -} from './client/client.ts'; +} from '../client/client.ts'; -export type { SnapshotNode } from './kernel/snapshot.ts'; +export type { SnapshotNode } from '../kernel/snapshot.ts'; diff --git a/src/sdk/install-source.ts b/src/sdk/install-source.ts new file mode 100644 index 000000000..5f40d186c --- /dev/null +++ b/src/sdk/install-source.ts @@ -0,0 +1,6 @@ +export { + isTrustedInstallSourceUrl, + validateDownloadSourceUrl, +} from '../platforms/install-source.ts'; + +export type { MaterializeInstallSource } from '../platforms/install-source.ts'; diff --git a/src/sdk/io.ts b/src/sdk/io.ts new file mode 100644 index 000000000..54269c252 --- /dev/null +++ b/src/sdk/io.ts @@ -0,0 +1 @@ +export * from '../io.ts'; diff --git a/src/sdk/metro.ts b/src/sdk/metro.ts new file mode 100644 index 000000000..ca63b1f2f --- /dev/null +++ b/src/sdk/metro.ts @@ -0,0 +1,7 @@ +export { buildBundleUrl, normalizeBaseUrl } from '../utils/url.ts'; +export type { + MetroBridgeDescriptor, + MetroTunnelRequestMessage, + MetroTunnelResponseMessage, +} from '../metro/metro.ts'; +export { resolveRuntimeTransport } from '../metro/metro.ts'; diff --git a/src/sdk/remote-config.ts b/src/sdk/remote-config.ts new file mode 100644 index 000000000..38c618345 --- /dev/null +++ b/src/sdk/remote-config.ts @@ -0,0 +1 @@ +export type { RemoteConfigProfile } from '../remote/remote-config-schema.ts'; diff --git a/src/sdk/selectors.ts b/src/sdk/selectors.ts new file mode 100644 index 000000000..c182e3e67 --- /dev/null +++ b/src/sdk/selectors.ts @@ -0,0 +1,15 @@ +export type { SelectorChain } from '../utils/selectors-parse.ts'; +export type { SelectorDiagnostics } from '../daemon/selectors.ts'; + +export { + isSelectorToken, + parseSelectorChain, + tryParseSelectorChain, +} from '../utils/selectors-parse.ts'; +export { + findSelectorChainMatch, + formatSelectorFailure, + isNodeEditable, + isNodeVisible, + resolveSelectorChain, +} from '../daemon/selectors.ts'; diff --git a/src/selectors.ts b/src/selectors.ts deleted file mode 100644 index 30d6ad476..000000000 --- a/src/selectors.ts +++ /dev/null @@ -1,15 +0,0 @@ -export type { SelectorChain } from './utils/selectors-parse.ts'; -export type { SelectorDiagnostics } from './daemon/selectors.ts'; - -export { - isSelectorToken, - parseSelectorChain, - tryParseSelectorChain, -} from './utils/selectors-parse.ts'; -export { - findSelectorChainMatch, - formatSelectorFailure, - isNodeEditable, - isNodeVisible, - resolveSelectorChain, -} from './daemon/selectors.ts'; diff --git a/vitest.config.ts b/vitest.config.ts index 95cacb716..e04e6f301 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -29,16 +29,11 @@ export default defineConfig({ 'src/**/__tests__/**', 'src/**/*-types.ts', 'src/**/types.ts', - 'src/android-adb.ts', - 'src/artifacts.ts', - 'src/batch.ts', + 'src/sdk/**', 'src/bin.ts', 'src/client/client-types.ts', 'src/core/interactor-types.ts', - 'src/index.ts', - 'src/install-source.ts', 'src/remote/remote-config.ts', - 'src/selectors.ts', ], }, },