mirror of
https://github.com/callstack/agent-device.git
synced 2026-09-14 20:06:34 +08:00
4d016db3b8
Behavior-preserving relocation: move the text-entry concern out of the (formerly 1805-line) RunnerTests+Interaction.swift — the repo's most-changed file — into a new RunnerTests+TextEntry.swift. Interaction.swift drops to 1068 lines (-737). Moved verbatim (no logic changes): - value types: TextTypingRepairMode, TextEntryTiming, TextEntryResult, TextEntryTarget - the focus -> type -> verify -> repair pipeline (typeTextReliably + focus orchestration + readiness polling + dropped-char/repair heuristics) - clearTextInput and the text-entry leaf helpers (editableTextValue, isPlaceholderValue, isGenericTextInputLabel, normalizedElementText, moveCaretToEnd, estimatedDeleteCount, keyboardBecameVisible, keyboardElementExists) The whole cluster is text-entry-exclusive (its only callers are within the moved code or the already-internal command entry points), so every symbol keeps its original visibility — no access widened. Shared helpers used by gestures/snapshot/get-text (isKeyboardVisible, visibleKeyboardFrame, textInputAt, textInputCandidatesAt, readableText, ...) stay in Interaction. The new file is auto-included via the project's file-system-synchronized group. This is the safe, cosmetic half of the "TextEntry engine" architecture candidate. A deeper extraction behind a real seam/type is intentionally deferred: it carries the #245 revert risk and wants stronger text-entry e2e coverage first. Verified: xcodebuild build-for-testing -> TEST BUILD SUCCEEDED. Pure relocation, no behavior change.
agent-device iOS Runner
This folder contains the lightweight XCUITest runner used to provide element-level automation for Apple-family targets.
Intent
- Provide a minimal XCTest target that exposes UI automation over a small HTTP server.
- Allow local builds via
xcodebuildand caching for faster subsequent runs. - Support simulator prebuilds where compatible.
Status
Current internal runner for iOS, tvOS, and macOS desktop automation.
Protocol and maintenance references:
- Protocol overview:
RUNNER_PROTOCOL.md - TypeScript client:
../src/platforms/ios/runner-client.ts - Swift wire models:
AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Models.swift
UITest Runner File Map
AgentDeviceRunnerUITests/RunnerTests is split into focused files to reduce context size for contributors and LLM agents.
RunnerTests.swift: shared state/constants,setUp(), andtestCommand()entry flow.RunnerTests+Models.swift: wire protocol models (Command,Response, snapshot payload models).RunnerTests+Environment.swift: environment and CLI argument helpers (RunnerEnv).RunnerTests+Transport.swift: TCP request handling and HTTP parsing/encoding.RunnerTests+CommandExecution.swift: command dispatch (execute*) and command switch.RunnerTests+Lifecycle.swift: activation/retry/stabilization and recording lifecycle helpers.RunnerTests+Interaction.swift: tap/drag/swipe/type/back/home/rotate/app-switcher helpers.RunnerTests+Snapshot.swift: fast/raw snapshot builders and include/filter helpers.RunnerTests+SystemModal.swift: SpringBoard/system modal detection and modal snapshot shaping.RunnerTests+ScreenRecorder.swift: nestedScreenRecorderimplementation.
Protocol Notes
- The daemon posts JSON commands to
POST /commandon the runner's local HTTP listener. - The runner responds with a JSON envelope shaped as
{ ok, data?, error? }. - The protocol is internal to
agent-device; when adding or renaming commands, update both wire models and the protocol tests/docs in the same change.