Closed
Conversation
* perf: optimize IDE plugin startup with socket fast-path, parallel port scanning, and async diagnostics Eliminate redundant subprocess spawns in McpProcessDetector by caching isListeningOnSocket result and adding a fast-path that checks for socket file existence before invoking lsof. Parallelize DefaultPortScanner commands with async/awaitAll and skip ss on macOS to avoid 2s timeout. Move DiagnosticsDashboard system checks off the UI thread into a LaunchedEffect with Dispatchers.IO and increase the refresh interval from 2s to 30s. Extract ProcessRunner, SocketFileChecker, PortCommandRunner, and PlatformInfo interfaces to enable unit testing without real subprocesses. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: add screen on/off BroadcastReceiver to resume observation stream The accessibility service observation stream stops sending updates when the device screen turns off because Android suppresses accessibility events for inactive displays. Register a BroadcastReceiver for ACTION_SCREEN_ON/OFF that triggers immediate hierarchy extraction so the push stream resumes on screen wake and sends a final snapshot on screen off. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…ports Extract shared result types (PerfTiming, BaseResult, GestureTimingResult, ActionTimingResult) and DelegateContext into shared/types.ts, replacing ~20 duplicated type definitions across Android and iOS with type aliases. Create SharedGestureDelegate and SharedTextDelegate that both platforms now extend, eliminating ~1200 lines of duplicated WebSocket message handling. Android keeps its unique two-finger swipe; iOS adds cancelScreenshotBackoff to its delegate context for parity. Delete the deprecated AccessibilityServiceClient.ts and XCTestServiceClient.ts re-export shims, updating all 62 import sites to use the canonical observe/android and observe/ios paths. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
refactor: unify platform types and delegates, remove deprecated re-exports
… pipeline Deduplicate download/checksum logic across TypeScript and consolidate build steps into reusable GitHub workflows, reducing ~750 lines of copy-pasted code. Parallelizes APK build in release.yml for faster releases. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
…1200) APK: 58789a8743cbbe48aa97132e6067a2c828f0b13bca3be4b23f10f6f70a9a5e7c -> b7be60f2c4c26c5e7e5b04064fb139707d792badf91170a1874be72b59195ca1 (changed) IPA: b6e5fa9879c58759497b594a71ca44e3a053b1abb71fae32765b8ef30edb5a58 -> f713ca499e593e1561b8877364ffa8702f5b4f6c33ee374bffa4c86ab38b4bee (changed)
The vanniktech maven-publish plugin v0.36.0 with Central Portal registers `publish` as the per-subproject task, not `publishToMavenCentral` or `publishAndReleaseToMavenCentral` (which are root-level lifecycle tasks only). Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- verify-artifact-sha256.sh now exits 1 when no checksum is found in source, preventing releases without a merged checksum update PR - FakeFileDownloader uses mkdtemp instead of writing to caller-provided path, fixing CodeQL insecure temporary file warning Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
On Windows, sha256sum prefixes its output with \ when the filename contains backslashes, producing \abcdef... instead of abcdef... Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Rename from "Build Accessibility Service APK" to "Build Accessibility Service" so the GitHub check name stays consistent with the old inline job. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Reusable workflow calls always produce two-level check names like "build-android-accessibility-service / Build Accessibility Service". Revert to inline jobs in merge.yml and pull_request.yml so the check name stays flat as "Build Accessibility Service", matching branch protection rules. The reusable workflow is still used by release, prepare-release, and nightly where check names don't matter. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
refactor: extract shared utilities and reusable workflows for release pipeline
macOS GitHub Actions runners occasionally lack iOS simulator runtimes, causing confusing build failures. Add a composite action that detects missing runtimes and installs them via xcodebuild -downloadPlatform iOS before any build or test steps run. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Derive the required major iOS version from the selected Xcode's SDK (e.g., iOS 18.x for Xcode 16, iOS 17.x for Xcode 15) so runners with only an older runtime still trigger the download. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add macos-26 runner with Xcode 26.0 to ios-swift-build, ios-swift-test, and ios-xcode-build matrix jobs in both merge and pull_request workflows. Update ios-xcodegen runner from macos-14 to macos-26. Closes #1207 Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
The Alarm was constructed with a nullable cast of ValidationTrigger to Disposable, which returned null for IntellijValidationTrigger (it doesn't implement Disposable). This caused IllegalArgumentException when fileOpened ran off the Swing EDT. Add an explicit parentDisposable parameter and pass the Project from TestPlanFileEditorListener. Closes #1205 Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
…lan execution (#1210) Video test recording is stable and should always be on. Remove the feature flag, CLI arg, env var, and daemon option so recording starts unconditionally. Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
…s-when-no-simulato ci: auto-recover missing iOS simulator runtimes
…#1212) parseDaemonToolResult only checked for explicit `success == false`, letting null/missing success values fall through to return success. This caused failing tests to appear as passing in JUnit XML output. Invert the logic to only return success for explicit `success == true`, and add full-flow tests covering failure, missing success, and success scenarios through the runChild → runAutoMobileTest → notifier path. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…1215) Replace stale screenshot with context-aware placeholder when the observed device disconnects. Shows "Device Disconnected" text, a low-contrast reconnecting spinner when the socket exists, or a "Restart MCP Daemon" button when the daemon socket is missing. Clears all stale data (hierarchy, selection, performance metrics) on disconnect and resumes live data on reconnect. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…ences (#1219) Design docs had grown organically with significant duplication across files. This cleanup removes duplicated content (observation fields, detection methods, resolved open questions), trims implementation-level code examples that belong in PRs, and replaces re-explanations with cross-reference links. Key reductions: - talkback-voiceover.md: 2126 → 199 lines (removed code blocks, 4 use cases, full test plan, risks/conclusion boilerplate) - android/screen-streaming.md: 655 → 193 lines (removed rejected options, scrcpy background, resolved questions, full decoder comparison) - screen-streaming overview: removed duplicated current state and phases - multi-device.md: removed status tracking and implementation details - android/observe.md: replaced duplicated field list with link to overview Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
…s page (#1213) (#1218) The listFeatureFlags/setFeatureFlag MCP tools were removed to save token budget, but the IDE plugin still called them via tools/call. Move feature flag handling to the Unix socket server's local request path so it bypasses MCP entirely while keeping the IDE settings page functional. Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
Bumps `media3` from 1.9.1 to 1.9.2. Updates `androidx.media3:media3-exoplayer` from 1.9.1 to 1.9.2 - [Release notes](https://github.com/androidx/media/releases) - [Changelog](https://github.com/androidx/media/blob/release/RELEASENOTES.md) - [Commits](androidx/media@1.9.1...1.9.2) Updates `androidx.media3:media3-ui` from 1.9.1 to 1.9.2 - [Release notes](https://github.com/androidx/media/releases) - [Changelog](https://github.com/androidx/media/blob/release/RELEASENOTES.md) - [Commits](androidx/media@1.9.1...1.9.2) Updates `androidx.media3:media3-ui-compose` from 1.9.1 to 1.9.2 - [Release notes](https://github.com/androidx/media/releases) - [Changelog](https://github.com/androidx/media/blob/release/RELEASENOTES.md) - [Commits](androidx/media@1.9.1...1.9.2) Updates `androidx.media3:media3-database` from 1.9.1 to 1.9.2 - [Release notes](https://github.com/androidx/media/releases) - [Changelog](https://github.com/androidx/media/blob/release/RELEASENOTES.md) - [Commits](androidx/media@1.9.1...1.9.2) Updates `androidx.media3:media3-datasource` from 1.9.1 to 1.9.2 - [Release notes](https://github.com/androidx/media/releases) - [Changelog](https://github.com/androidx/media/blob/release/RELEASENOTES.md) - [Commits](androidx/media@1.9.1...1.9.2) --- updated-dependencies: - dependency-name: androidx.media3:media3-exoplayer dependency-version: 1.9.2 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: androidx.media3:media3-ui dependency-version: 1.9.2 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: androidx.media3:media3-ui-compose dependency-version: 1.9.2 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: androidx.media3:media3-database dependency-version: 1.9.2 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: androidx.media3:media3-datasource dependency-version: 1.9.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
…-1.9.2 chore(deps): bump media3 from 1.9.1 to 1.9.2 in /android
Replace the one-off ObservationStreamClient.socketExists() call during composition with a polled mutableStateOf that checks every 2 seconds while disconnected/connecting. This ensures the UI transitions between "Device Disconnected" and "Restart MCP Daemon" when the daemon socket appears or disappears after the initial disconnect. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
APK: b7be60f2c4c26c5e7e5b04064fb139707d792badf91170a1874be72b59195ca1 -> b7be60f2c4c26c5e7e5b04064fb139707d792badf91170a1874be72b59195ca1 (unchanged) IPA: f713ca499e593e1561b8877364ffa8702f5b4f6c33ee374bffa4c86ab38b4bee -> ffbb85298b50a95a1498ce716ecc4262b56b6d31471747c08ec95d13b102569d (changed)
) * fix: observe system permission dialogs on iOS and prevent debounce drops - Use fresh XCUIApplication instances per snapshot to avoid stale accessibility cache that missed system permission dialogs - Collect alerts from app snapshot tree via traversal instead of .alerts query which can hang on system permission dialogs - Fix debounce logic: only update structural hash on actual broadcast so debounced changes are re-detected and eventually broadcast - Broadcast initial hierarchy state immediately on start - Expand structural hasher to include all identifying/state properties (contentDesc, role, clickable, enabled, etc.) so permission dialogs trigger change detection - Add springboard fallback when no foreground app detected - Handle app state >= 4 (not just == 4) for foreground detection - Add HierarchyDebouncerTests covering polling resilience, debounce behavior, and structural hashing - Add unique node index counter to Android IDE HierarchyParser to prevent ID collisions - Improve hot-reload script: background watcher with timeout, orphan process cleanup - Update dependencies and checksums Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * perf: optimize IDE layout inspector hierarchy traversals and fix hit testing Build precomputed element/parent maps during parsing (ParsedHierarchy) to eliminate repeated O(n) tree traversals. Move hierarchy parsing and Base64 decoding off the Compose main thread. Cache selectedElement via O(1) map lookup instead of DFS per recomposition. Memoize search filtering with a single O(n) pass instead of O(n^2) per-node descendant checks. Preserve user expand/collapse state across live hierarchy updates. Use index map for O(1) scroll-to-element. Fix hit testing coordinate mismatch where tap coordinates were converted to image pixel space but compared against hierarchy bounds (which use logical points on iOS). Now both overlays and hit testing use the same hierarchy-bounds coordinate system. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: suppress shellcheck false positives for trap-invoked function The watcher_cleanup function is invoked indirectly via trap, which shellcheck cannot detect statically. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: use bun ecosystem in dependabot config to update bun.lock Dependabot was configured with the npm ecosystem which only updates package-lock.json. Since this project uses bun, the lockfile was never updated, causing all dependabot PRs to fail with frozen lockfile errors. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Bumps [kysely](https://github.com/kysely-org/kysely) from 0.28.9 to 0.28.11. - [Release notes](https://github.com/kysely-org/kysely/releases) - [Commits](kysely-org/kysely@v0.28.9...v0.28.11) --- updated-dependencies: - dependency-name: kysely dependency-version: 0.28.11 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 8.53.0 to 8.55.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.55.0/packages/parser) --- updated-dependencies: - dependency-name: "@typescript-eslint/parser" dependency-version: 8.55.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [@faker-js/faker](https://github.com/faker-js/faker) from 10.2.0 to 10.3.0. - [Release notes](https://github.com/faker-js/faker/releases) - [Changelog](https://github.com/faker-js/faker/blob/next/CHANGELOG.md) - [Commits](faker-js/faker@v10.2.0...v10.3.0) --- updated-dependencies: - dependency-name: "@faker-js/faker" dependency-version: 10.3.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Switch from getAccessibilityHierarchy (minTimestamp=0 accepts any cached result, so disableAllFiltering is never applied to the fresh request) to requestHierarchySync which always fetches directly from the device. Also remove incorrect test asserting identifyInteractions is registered without debug mode (it is debugOnly=true). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* chore: remove MCP HTTP transport Remove SSE and Streamable HTTP transports from the public MCP server. Hot reload and daemon communication use stdio + Unix socket exclusively, and HTTP mode has never been used in practice. - Remove HTTP server functions from src/index.ts (startStreamableServer, startSSEServer, startStreamableProxyServer, startSSEProxyServer) - Remove TransportConfig interface and detectPortFromBranch/formatUptime helpers - Remove AUTOMOBILE_PORT/AUTO_MOBILE_PORT env vars and --transport flag - Remove HTTP transport npm scripts from package.json - Remove detect_port() from scripts/local-dev/lib/common.sh - Update docs and READMEs to reflect stdio + daemon socket transports only The daemon's internal HTTP server (daemon.ts) is intentionally kept — it is the daemon transport used by the Unix socket proxy. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * chore: drop bun run dev references from docs Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
P1: After fetching raw (disableAllFiltering=true) on Android/iOS, requestHierarchySync updates the shared cache with the unfiltered snapshot. Invalidate the cache immediately after so subsequent normal observe calls are not served unfiltered data. P2: Thread AbortSignal through appendRawViewHierarchy into both platform sync calls so cancellation is respected instead of blocking until the default 10s (Android) or 5s (iOS) timeout. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Keeps validator, IDE plugin, and quick-fix allowlists in sync with the server-side removal so test plans that reference rawViewHierarchy fail validation rather than silently passing and then failing at runtime. Also updates KDoc on disableAllFiltering params to reference the new observe raw:true flag instead of the removed tool. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- SimCtlClient: let executeCommand failures propagate from getDeviceTypes/getRuntimes rather than swallowing all errors; only catch JSON parse failures with a warning - simctl tests: update failure tests to assert that errors are thrown, not silently swallowed as empty arrays - ElementLocator: add springboard filter to trackObservedBundleId, matching the guard already present in setApplication(_:bundleId:) - FakeSimCtlClient: add missing getDeviceTypes method to match the SimCtl interface - FakeElementLocator: record trackObservedBundleId calls in trackedBundleIds array instead of no-op, consistent with other call-history tracking in the fake - CommandHandlerTests: assert that handleLaunchApp calls trackObservedBundleId with the correct bundle ID - CI workflow: skip benchmark comment step for fork PRs that lack write token permissions Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Bumps [knip](https://github.com/webpro-nl/knip/tree/HEAD/packages/knip) from 5.84.1 to 5.85.0. - [Release notes](https://github.com/webpro-nl/knip/releases) - [Commits](https://github.com/webpro-nl/knip/commits/knip@5.85.0/packages/knip) --- updated-dependencies: - dependency-name: knip dependency-version: 5.85.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [eslint](https://github.com/eslint/eslint) from 10.0.0 to 10.0.1. - [Release notes](https://github.com/eslint/eslint/releases) - [Commits](eslint/eslint@v10.0.0...v10.0.1) --- updated-dependencies: - dependency-name: eslint dependency-version: 10.0.1 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
APK: 0abb3aa8888a1f47b773943437ba2f8624b9ae11c7f2df3b883b131e69969eb1 -> 0abb3aa8888a1f47b773943437ba2f8624b9ae11c7f2df3b883b131e69969eb1 (unchanged) IPA: 5dc9b1053f48e01f045039002d4c009604f630044f25036d9e7efa4f155c4da6 -> b64758b29d944d3815825af9b2148e53a2eb3e790355a07f454c6f985e86f67a (changed)
chore(deps-dev): bump knip from 5.84.1 to 5.85.0
chore(deps-dev): bump eslint from 10.0.0 to 10.0.1
…iewhierarchy-tool- refactor: replace rawViewHierarchy tool with raw flag on observe
) (#1380) Extract shared `getVisionEnrichedError` utility and add `VisionAnalyzer` interface for testability, then wire vision fallback into the error paths of SwipeOn, PinchOn, and DragAndDrop. Refactor TapOnElement to use the shared utility as well. Add vision fallback tests for all four actions. Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 8.56.0 to 8.56.1. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.56.1/packages/eslint-plugin) --- updated-dependencies: - dependency-name: "@typescript-eslint/eslint-plugin" dependency-version: 8.56.1 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [eslint](https://github.com/eslint/eslint) from 10.0.1 to 10.0.2. - [Release notes](https://github.com/eslint/eslint/releases) - [Commits](eslint/eslint@v10.0.1...v10.0.2) --- updated-dependencies: - dependency-name: eslint dependency-version: 10.0.2 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [@modelcontextprotocol/sdk](https://github.com/modelcontextprotocol/typescript-sdk) from 1.26.0 to 1.27.0. - [Release notes](https://github.com/modelcontextprotocol/typescript-sdk/releases) - [Commits](modelcontextprotocol/typescript-sdk@v1.26.0...v1.27.0) --- updated-dependencies: - dependency-name: "@modelcontextprotocol/sdk" dependency-version: 1.27.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
…/eslint-plugin-8.56.1 chore(deps-dev): bump @typescript-eslint/eslint-plugin from 8.56.0 to 8.56.1
chore(deps-dev): bump eslint from 10.0.1 to 10.0.2
…col/sdk-1.27.0 chore(deps): bump @modelcontextprotocol/sdk from 1.26.0 to 1.27.0
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 8.56.0 to 8.56.1. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.56.1/packages/parser) --- updated-dependencies: - dependency-name: "@typescript-eslint/parser" dependency-version: 8.56.1 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
review: address code review findings for PR #1367
APK: 0abb3aa8888a1f47b773943437ba2f8624b9ae11c7f2df3b883b131e69969eb1 -> 0abb3aa8888a1f47b773943437ba2f8624b9ae11c7f2df3b883b131e69969eb1 (unchanged) IPA: b64758b29d944d3815825af9b2148e53a2eb3e790355a07f454c6f985e86f67a -> 61971ba3f116df1e145a01198ad500c4ebec0b5a9682e27849a7dc8ba2ee675b (changed)
…/parser-8.56.1 chore(deps-dev): bump @typescript-eslint/parser from 8.56.0 to 8.56.1
…ect to control-proxy (#1370) * refactor: rename AccessibilityService to CtrlProxy and gradle subproject to control-proxy - Rename Android Gradle subproject from accessibility-service to control-proxy - Rename main service class AutoMobileAccessibilityService to CtrlProxy - Update package name from dev.jasonpearson.automobile.accessibilityservice to dev.jasonpearson.automobile.ctrlproxy - Rename all TypeScript files AccessibilityService* to CtrlProxy* across src/ and test/ - Update all class names, interfaces, imports, and references throughout - Update build files, scripts, docs, and mkdocs nav to use new names - APK artifact name updated from accessibility-service-debug.apk to control-proxy-debug.apk Closes #1355 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * fix: address code review issues from accessibility service rename - Fix GitHub workflow files (pull_request.yml, release.yml, nightly.yml, merge.yml, prepare-release.yml) to use :control-proxy: gradle tasks, control-proxy-apk artifact names, and android/control-proxy/ paths - Rename build-accessibility-service-apk.yml → build-control-proxy-apk.yml - Rename env var AUTOMOBILE_ACCESSIBILITY_APK_PATH → AUTOMOBILE_CTRL_PROXY_APK_PATH and system property automobile.accessibility.apk.path → automobile.ctrl.proxy.apk.path in CtrlProxyManager.ts, CtrlProxyManager.test.ts, and DaemonSocketClient.kt - Replace 236 [ACCESSIBILITY_SERVICE] log prefixes with [CTRL_PROXY] - Rename checkAccessibilityService() → checkCtrlProxy() in doctor checks, update all user-facing "Accessibility Service" display strings to "CtrlProxy" - Rename skipAccessibilityDownload → skipCtrlProxyDownload throughout (ServerConfig, DeviceSessionManager, toolRegistry, daemon, index); keep skipAccessibilityDownload and skipAccessibilitySetup as deprecated aliases; accept --skip-accessibility-download as a backward-compatible CLI alias - Rename accessibilityServiceIncomplete → ctrlProxyIncomplete in TypeScript types and models, and in Android ViewHierarchy.kt / ViewHierarchyExtractor.kt - Update ide/status socket protocol: accessibilityService field → ctrlProxy in socketServerIdeStatus.test.ts - Update module comment in src/features/observe/android/index.ts - Update FakeCtrlProxyManager.ts message strings Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * feat: uninstall legacy accessibility service package on device setup Add LEGACY_PACKAGE constant and uninstallLegacyPackageIfPresent() to AndroidCtrlProxyManager. Called at the start of ensureCompatibleVersion() so devices with the old dev.jasonpearson.automobile.accessibilityservice package are cleaned up automatically when CtrlProxy is set up. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * feat: use AutoMobile launch icon from Playground for CtrlProxy app Replace the system ic_menu_preferences fallback with the same adaptive icon setup used by the Playground app: - Add mipmap-anydpi-v26/ic_launcher.xml and ic_launcher_round.xml - Add mipmap-xxxhdpi/ic_launcher.png for pre-API-26 devices - Replace ic_launcher_foreground.xml vector with the Playground PNG - Replace ic_launcher_background.xml with the Playground green-grid vector - Update AndroidManifest.xml to reference @mipmap/ic_launcher and @mipmap/ic_launcher_round Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * fix: rename accessibility service display name to AutoMobile CtrlProxy Updates app_name string from "AutoMobile A11Y Service" to "AutoMobile CtrlProxy" so the Android Accessibility settings screen shows the correct name for the service and its toggle. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * fix: shorten app_name to CtrlProxy Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * fix: rename accessibility service display name to AutoMobile CtrlProxy Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * fix: rename accessibility service display name to AutoMobile CtrlProxy Keep app_name as "CtrlProxy" so the launcher icon label is not cut off. Add accessibility_service_name string "AutoMobile CtrlProxy" and set it as android:label on the service element so the Android Accessibility settings screen shows the full name. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * fix: remove HTTP transport functions left from rebase conflict resolution The rebase conflict in src/index.ts (from main's removal of MCP HTTP transport in #1372) was incorrectly resolved, leaving four unused functions: startStreamableServer, startSSEServer, startStreamableProxyServer, and startSSEProxyServer. Remove them to fix the lint errors. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix: keep accessibility-service enum value in RawViewHierarchyResult, fix stale import in ObserveScreen The source enum in RawViewHierarchyResult represents a choice between uiautomator XML output and accessibility service JSON output, so the value should remain "accessibility-service" not "control-proxy". Also fix ObserveScreen importing renamed AccessibilityServiceClient as CtrlProxyClient. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix: update visionFallback tests to use renamed CtrlProxy classes These test files were added to main after the initial rename and still referenced the old AccessibilityServiceClient, AndroidAccessibilityServiceManager, and FakeAccessibilityService names. Update them to use CtrlProxyClient, AndroidCtrlProxyManager, and FakeCtrlProxy. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
Add Turborepo v2.8 to cache build/lint/test tasks locally and in CI. Tasks with unchanged inputs complete in ~600ms instead of 15-30s. - Add turbo.json with task-specific inputs, outputs, and env config - Update CI workflows (PR, merge, release) to use turbo run - Add GitHub Actions cache for .turbo directory across CI runs - Setup action uses turbo for build to populate cache early - Add turbo:validate convenience script for parallel lint+build+test - Exclude .turbo from git, npm, and Docker contexts https://claude.ai/code/session_01Vv86cjSoxaHWPjg6NswX5m
Reduce turbo output noise to minimize wasted context window tokens when AI coding agents invoke build/lint/test tasks. - Set "ui": "stream" to avoid interactive TUI escape codes - Set "envMode": "strict" to only hash declared env vars - Add "outputLogs": "new-only" per task (suppress cached output) - CI uses --output-logs=errors-only for even quieter runs - CI uses --log-order=grouped to keep task output non-interleaved - Suppress telemetry and update notices via TURBO_TELEMETRY_DISABLED and DO_NOT_TRACK env vars in all CI steps https://claude.ai/code/session_01Vv86cjSoxaHWPjg6NswX5m
…iptions Add TURBO_NO_UPDATE_NOTIFIER=1 and NO_COLOR=1 to all CI turbo steps to eliminate update prompts and ANSI escape codes from output. Add task description fields to turbo.json for agent-readable context. Follows recommendations from the CodeMine "Be Quiet" blog post. https://claude.ai/code/session_01Vv86cjSoxaHWPjg6NswX5m
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Was reading about how turbo could enable faster builds and be configured for better AI output so I implemented it