Skip to content

Integrate turbo builds#120

Closed
kaeawc wants to merge 1548 commits intozillow:mainfrom
kaeawc:claude/integrate-turbo-builds-jx7yT
Closed

Integrate turbo builds#120
kaeawc wants to merge 1548 commits intozillow:mainfrom
kaeawc:claude/integrate-turbo-builds-jx7yT

Conversation

@kaeawc
Copy link
Collaborator

@kaeawc kaeawc commented Feb 25, 2026

Was reading about how turbo could enable faster builds and be configured for better AI output so I implemented it

kaeawc and others added 30 commits February 8, 2026 21:21
* 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>
)

Brighten the dark-theme tool window stripe icon from #AFB1B3 to #CED0D6
so it renders at the active/selected brightness regardless of state.

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>
kaeawc and others added 29 commits February 22, 2026 20:57
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
@kaeawc kaeawc closed this Feb 25, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants