Skip to content

Conversation

@cleverark
Copy link

@cleverark cleverark commented Jan 8, 2026

Feature/direction based headlight switching

Summary by CodeRabbit

Release Notes

  • New Features

    • Added native Android app for Bluetooth-based device control with main controls and comprehensive settings interface
    • Enhanced web UI with multi-tab design supporting presets, LED effects, motion controls, and OTA updates
    • Implemented direction-based lighting control and braking detection for enhanced safety
    • Added configurable lighting modes: normal, taillight-only, headlight-only, direction-based, and running lights
    • Introduced automated secret-prevention Git hooks on clone and push
  • Documentation

    • Added comprehensive guides for setup, troubleshooting, UI updates, and quick implementation
  • Infrastructure

    • Streamlined release workflow with semantic versioning
    • Reorganized build configuration and .gitignore structure

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 8, 2026

Caution

Review failed

The pull request is closed.

Walkthrough

This pull request introduces a comprehensive ArkLights PEV lighting system with Git hooks for secret prevention, a complete Android Kotlin/Compose application for device control via Bluetooth, extensive web-based and native UI components, detailed documentation, and supporting build/setup tooling across multiple platforms.

Changes

Cohort / File(s) Summary
Git Hooks & Secret Prevention
.githooks/*, AUTO_SETUP_HOOKS.md, FORCE_PRECOMMIT_GUIDE.md, CLOUD_GIT_LIMITATIONS.md, install-hooks-bootstrap.sh, README_HOOKS_SNIPPET.md, SECRET_PREVENTION_CRITICAL.md
Adds post-checkout hook to auto-configure core.hooksPath, pre-commit hook to scan for secrets (passwords, API keys, tokens), pre-push hook to block pushes with sensitive data, plus comprehensive documentation and bootstrap script for setup.
CI/CD & Build Workflow
.github/workflows/release.yml, .gitignore, .vscode/tasks.json
Replaces multi-step release workflow with Node.js semantic-release; reorganizes .gitignore into cohesive sections; replaces composite VS Code tasks with individual PlatformIO-driven shell tasks.
Android Project Configuration
Android/build.gradle.kts, Android/gradle.properties, Android/gradle/libs.versions.toml, Android/gradle/wrapper/*, Android/settings.gradle.kts, Android/.gitignore
Establishes Gradle 8.13 wrapper, version catalog, plugin management, repository configuration, and project structure for Android app build pipeline.
Android App Core Services
Android/app/src/main/java/com/example/arklights/bluetooth/BluetoothService.kt, Android/app/src/main/java/com/example/arklights/api/ArkLightsApiService.kt, Android/app/src/main/java/com/example/arklights/viewmodel/ArkLightsViewModel.kt
Introduces BluetoothService for BLE device discovery/connection/communication, ArkLightsApiService for HTTP-like API calls over Bluetooth, and ArkLightsViewModel orchestrating connectivity and state management.
Android App Data Models
Android/app/src/main/java/com/example/arklights/data/Models.kt
Defines serializable data classes (LEDControlRequest, LEDConfigRequest, LEDStatus, ApiResponse, BluetoothDevice), enums (ConnectionState), and LED constants objects.
Android App Activities & Screens
Android/app/src/main/java/com/example/arklights/MainActivity.kt, Android/app/src/main/java/com/example/arklights/ui/screens/*
Implements MainActivity with permission handling, device discovery screen with pairing support, main control screen with tabs (Main Controls/Settings), and connection state screens.
Android App UI Components & Theme
Android/app/src/main/java/com/example/arklights/ui/components/UIComponents.kt, Android/app/src/main/java/com/example/arklights/ui/theme/*
Provides reusable Jetpack Compose components for LED/motion/startup/calibration/WiFi/ESPNow/group management control sections, plus Material 3 theme definitions and color schemes.
Android App Resources & Manifest
Android/app/src/main/AndroidManifest.xml, Android/app/src/main/res/*
Declares Bluetooth, location, and network permissions; defines adaptive launcher icons and theme resources; includes backup/data extraction rules.
Android App Testing
Android/app/src/androidTest/*, Android/app/src/test/*
Adds example instrumented and unit tests for JUnit validation.
Web UI & Asset Files
data/ui/index.html, data/ui/styles.css, data/ui/script.js
Implements full-featured web control panel with tabs, presets, color pickers, effect/motion controls, calibration UI, OTA update workflow, WiFi/ESPNow/group/LED configuration sections, and real-time status polling.
UI Creation & Debugging Tools
create_ui_update.py, debug_ui_update.py, apply_ui_patch.py, check_ui_files.py, diagnose_update_file.py
Python utilities for packaging UI files for OTA update, creating debug artifacts, patching firmware, validating file structure, and diagnosing update packages.
UI Update Documentation & Examples
arklights_ui_update*.txt, UI_UPDATE_SYSTEM.md, UI_SEPARATION_README.md, TROUBLESHOOTING_UI_UPDATE.md, improved_ui_update.cpp
Documents filesystem-based UI with SPIFFS/embedded fallback, update endpoint at /updateui, streaming/chunked processing implementations, troubleshooting workflows, and file format specifications.
Feature Implementation Guides
QUICK_IMPLEMENTATION_GUIDE.md, CODE_REVIEW_AND_RECOMMENDATIONS.md
Provides detailed direction detection, braking detection, and effect separation implementations with state variables, function declarations, API endpoints, UI controls, and testing checklists.
System & Device Documentation
ARKLIGHTS_README.md, Android/README.md, SERIAL_COMMANDS_REFERENCE.md
Describes ArkLights architecture, features, Android app design, Bluetooth API, and serial command interface for device control.
Legacy & Board Configuration
legacy/*, boards/seeed_xiao_esp32s3.json
Adds legacy documentation (CONTRIBUTING, IMPLEMENTATION_SUMMARY, LED_CONFIGURATION_GUIDE, ONEWHEEL_README, QUICK_SETUP, WEB_UI_COMPLETE, UI_UPDATE_GUIDE, build.sh, create_ui_update.py, force_littlefs.py) and Seeed XIAO ESP32S3 board definition for PlatformIO.
CI/CD & GitHub Actions
github-actions-example.yml, CONTRIBUTING.md (removed)
Adds example pre-commit GitHub Actions workflow with secret scanning; removes old CONTRIBUTING.md file.

Estimated code review effort

🎯 5 (Critical) | ⏱️ ~120 minutes

Reasoning: This PR is substantial and heterogeneous, spanning 80+ new files across multiple distinct domains—Bash scripting (Git hooks), Kotlin/Jetpack Compose (Android app with services, ViewModels, UI components), JavaScript/HTML/CSS (web UI), Python (utility scripts), C++ (firmware patches), and extensive Markdown documentation. The Android app introduces significant logic density with Bluetooth state management, BLE GATT callbacks, permission handling, coroutine-based async operations, and a comprehensive ViewModel architecture. The web UI includes complex real-time status polling, calibration workflows, and OTA update handling. Multiple file additions require individual reasoning despite some repetitive patterns (e.g., similar API service methods, UI control functions). The breadth of technologies and interrelated components necessitates thorough cross-domain understanding.

Possibly related PRs

Suggested reviewers

  • DedeHai
  • netmindz
  • willmmiles
✨ Finishing touches
  • 📝 Generate docstrings

📜 Recent review details

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 22ab62d and 34cee23.

⛔ Files ignored due to path filters (198)
  • Android/gradle/wrapper/gradle-wrapper.jar is excluded by !**/*.jar
  • arklights.bin is excluded by !**/*.bin
  • legacy/build_output/map/seeed_xiao_esp32s3.map is excluded by !**/*.map
  • legacy/build_output/release/WLED_0.16.0-alpha_ESP32-S3.bin is excluded by !**/*.bin
  • legacy/build_output/release/WLED_0.16.0-alpha_OneWheel_ESP32-S3.bin is excluded by !**/*.bin
  • legacy/dependencies.lock is excluded by !**/*.lock
  • legacy/images/macbook-pro-space-gray-on-the-wooden-table.jpg is excluded by !**/*.jpg
  • legacy/images/walking-with-iphone-x.jpg is excluded by !**/*.jpg
  • legacy/images/wled_logo_akemi.png is excluded by !**/*.png
  • legacy/images/wled_logo_old.png is excluded by !**/*.png
  • legacy/node_modules/.bin/acorn is excluded by !**/node_modules/**
  • legacy/node_modules/.bin/conventional-changelog-writer is excluded by !**/node_modules/**
  • legacy/node_modules/.bin/conventional-commits-parser is excluded by !**/node_modules/**
  • legacy/node_modules/.bin/csso is excluded by !**/node_modules/**
  • legacy/node_modules/.bin/esparse is excluded by !**/node_modules/**
  • legacy/node_modules/.bin/esvalidate is excluded by !**/node_modules/**
  • legacy/node_modules/.bin/handlebars is excluded by !**/node_modules/**
  • legacy/node_modules/.bin/highlight is excluded by !**/node_modules/**
  • legacy/node_modules/.bin/html-minifier-terser is excluded by !**/node_modules/**
  • legacy/node_modules/.bin/inliner is excluded by !**/node_modules/**
  • legacy/node_modules/.bin/js-yaml is excluded by !**/node_modules/**
  • legacy/node_modules/.bin/latest-version is excluded by !**/node_modules/**
  • legacy/node_modules/.bin/marked is excluded by !**/node_modules/**
  • legacy/node_modules/.bin/mime is excluded by !**/node_modules/**
  • legacy/node_modules/.bin/mkdirp is excluded by !**/node_modules/**
  • legacy/node_modules/.bin/node-which is excluded by !**/node_modules/**
  • legacy/node_modules/.bin/nodemon is excluded by !**/node_modules/**
  • legacy/node_modules/.bin/nodetouch is excluded by !**/node_modules/**
  • legacy/node_modules/.bin/npm is excluded by !**/node_modules/**
  • legacy/node_modules/.bin/npx is excluded by !**/node_modules/**
  • legacy/node_modules/.bin/rc is excluded by !**/node_modules/**
  • legacy/node_modules/.bin/repeating is excluded by !**/node_modules/**
  • legacy/node_modules/.bin/semantic-release is excluded by !**/node_modules/**
  • legacy/node_modules/.bin/semver is excluded by !**/node_modules/**
  • legacy/node_modules/.bin/sshpk-conv is excluded by !**/node_modules/**
  • legacy/node_modules/.bin/sshpk-sign is excluded by !**/node_modules/**
  • legacy/node_modules/.bin/sshpk-verify is excluded by !**/node_modules/**
  • legacy/node_modules/.bin/svgo is excluded by !**/node_modules/**
  • legacy/node_modules/.bin/terser is excluded by !**/node_modules/**
  • legacy/node_modules/.bin/uglifyjs is excluded by !**/node_modules/**
  • legacy/node_modules/.bin/uuid is excluded by !**/node_modules/**
  • legacy/node_modules/.package-lock.json is excluded by !**/node_modules/**
  • legacy/node_modules/@babel/code-frame/LICENSE is excluded by !**/node_modules/**
  • legacy/node_modules/@babel/code-frame/README.md is excluded by !**/node_modules/**
  • legacy/node_modules/@babel/code-frame/lib/index.js is excluded by !**/node_modules/**
  • legacy/node_modules/@babel/code-frame/lib/index.js.map is excluded by !**/node_modules/**, !**/*.map
  • legacy/node_modules/@babel/code-frame/package.json is excluded by !**/node_modules/**
  • legacy/node_modules/@babel/helper-validator-identifier/LICENSE is excluded by !**/node_modules/**
  • legacy/node_modules/@babel/helper-validator-identifier/README.md is excluded by !**/node_modules/**
  • legacy/node_modules/@babel/helper-validator-identifier/lib/identifier.js is excluded by !**/node_modules/**
  • legacy/node_modules/@babel/helper-validator-identifier/lib/identifier.js.map is excluded by !**/node_modules/**, !**/*.map
  • legacy/node_modules/@babel/helper-validator-identifier/lib/index.js is excluded by !**/node_modules/**
  • legacy/node_modules/@babel/helper-validator-identifier/lib/index.js.map is excluded by !**/node_modules/**, !**/*.map
  • legacy/node_modules/@babel/helper-validator-identifier/lib/keyword.js is excluded by !**/node_modules/**
  • legacy/node_modules/@babel/helper-validator-identifier/lib/keyword.js.map is excluded by !**/node_modules/**, !**/*.map
  • legacy/node_modules/@babel/helper-validator-identifier/package.json is excluded by !**/node_modules/**
  • legacy/node_modules/@colors/colors/LICENSE is excluded by !**/node_modules/**
  • legacy/node_modules/@colors/colors/README.md is excluded by !**/node_modules/**
  • legacy/node_modules/@colors/colors/examples/normal-usage.js is excluded by !**/node_modules/**
  • legacy/node_modules/@colors/colors/examples/safe-string.js is excluded by !**/node_modules/**
  • legacy/node_modules/@colors/colors/index.d.ts is excluded by !**/node_modules/**
  • legacy/node_modules/@colors/colors/lib/colors.js is excluded by !**/node_modules/**
  • legacy/node_modules/@colors/colors/lib/custom/trap.js is excluded by !**/node_modules/**
  • legacy/node_modules/@colors/colors/lib/custom/zalgo.js is excluded by !**/node_modules/**
  • legacy/node_modules/@colors/colors/lib/extendStringPrototype.js is excluded by !**/node_modules/**
  • legacy/node_modules/@colors/colors/lib/index.js is excluded by !**/node_modules/**
  • legacy/node_modules/@colors/colors/lib/maps/america.js is excluded by !**/node_modules/**
  • legacy/node_modules/@colors/colors/lib/maps/rainbow.js is excluded by !**/node_modules/**
  • legacy/node_modules/@colors/colors/lib/maps/random.js is excluded by !**/node_modules/**
  • legacy/node_modules/@colors/colors/lib/maps/zebra.js is excluded by !**/node_modules/**
  • legacy/node_modules/@colors/colors/lib/styles.js is excluded by !**/node_modules/**
  • legacy/node_modules/@colors/colors/lib/system/has-flag.js is excluded by !**/node_modules/**
  • legacy/node_modules/@colors/colors/lib/system/supports-colors.js is excluded by !**/node_modules/**
  • legacy/node_modules/@colors/colors/package.json is excluded by !**/node_modules/**
  • legacy/node_modules/@colors/colors/safe.d.ts is excluded by !**/node_modules/**
  • legacy/node_modules/@colors/colors/safe.js is excluded by !**/node_modules/**
  • legacy/node_modules/@colors/colors/themes/generic-logging.js is excluded by !**/node_modules/**
  • legacy/node_modules/@jridgewell/gen-mapping/LICENSE is excluded by !**/node_modules/**
  • legacy/node_modules/@jridgewell/gen-mapping/README.md is excluded by !**/node_modules/**
  • legacy/node_modules/@jridgewell/gen-mapping/dist/gen-mapping.mjs is excluded by !**/dist/**, !**/node_modules/**
  • legacy/node_modules/@jridgewell/gen-mapping/dist/gen-mapping.mjs.map is excluded by !**/dist/**, !**/node_modules/**, !**/*.map
  • legacy/node_modules/@jridgewell/gen-mapping/dist/gen-mapping.umd.js is excluded by !**/dist/**, !**/node_modules/**
  • legacy/node_modules/@jridgewell/gen-mapping/dist/gen-mapping.umd.js.map is excluded by !**/dist/**, !**/node_modules/**, !**/*.map
  • legacy/node_modules/@jridgewell/gen-mapping/dist/types/gen-mapping.d.ts is excluded by !**/dist/**, !**/node_modules/**
  • legacy/node_modules/@jridgewell/gen-mapping/dist/types/sourcemap-segment.d.ts is excluded by !**/dist/**, !**/node_modules/**
  • legacy/node_modules/@jridgewell/gen-mapping/dist/types/types.d.ts is excluded by !**/dist/**, !**/node_modules/**
  • legacy/node_modules/@jridgewell/gen-mapping/package.json is excluded by !**/node_modules/**
  • legacy/node_modules/@jridgewell/resolve-uri/LICENSE is excluded by !**/node_modules/**
  • legacy/node_modules/@jridgewell/resolve-uri/README.md is excluded by !**/node_modules/**
  • legacy/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.mjs is excluded by !**/dist/**, !**/node_modules/**
  • legacy/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.mjs.map is excluded by !**/dist/**, !**/node_modules/**, !**/*.map
  • legacy/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.umd.js is excluded by !**/dist/**, !**/node_modules/**
  • legacy/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.umd.js.map is excluded by !**/dist/**, !**/node_modules/**, !**/*.map
  • legacy/node_modules/@jridgewell/resolve-uri/dist/types/resolve-uri.d.ts is excluded by !**/dist/**, !**/node_modules/**
  • legacy/node_modules/@jridgewell/resolve-uri/package.json is excluded by !**/node_modules/**
  • legacy/node_modules/@jridgewell/set-array/LICENSE is excluded by !**/node_modules/**
  • legacy/node_modules/@jridgewell/set-array/README.md is excluded by !**/node_modules/**
  • legacy/node_modules/@jridgewell/set-array/dist/set-array.mjs is excluded by !**/dist/**, !**/node_modules/**
  • legacy/node_modules/@jridgewell/set-array/dist/set-array.mjs.map is excluded by !**/dist/**, !**/node_modules/**, !**/*.map
  • legacy/node_modules/@jridgewell/set-array/dist/set-array.umd.js is excluded by !**/dist/**, !**/node_modules/**
  • legacy/node_modules/@jridgewell/set-array/dist/set-array.umd.js.map is excluded by !**/dist/**, !**/node_modules/**, !**/*.map
  • legacy/node_modules/@jridgewell/set-array/dist/types/set-array.d.ts is excluded by !**/dist/**, !**/node_modules/**
  • legacy/node_modules/@jridgewell/set-array/package.json is excluded by !**/node_modules/**
  • legacy/node_modules/@jridgewell/source-map/LICENSE is excluded by !**/node_modules/**
  • legacy/node_modules/@jridgewell/source-map/README.md is excluded by !**/node_modules/**
  • legacy/node_modules/@jridgewell/source-map/dist/source-map.cjs is excluded by !**/dist/**, !**/node_modules/**
  • legacy/node_modules/@jridgewell/source-map/dist/source-map.cjs.map is excluded by !**/dist/**, !**/node_modules/**, !**/*.map
  • legacy/node_modules/@jridgewell/source-map/dist/source-map.mjs is excluded by !**/dist/**, !**/node_modules/**
  • legacy/node_modules/@jridgewell/source-map/dist/source-map.mjs.map is excluded by !**/dist/**, !**/node_modules/**, !**/*.map
  • legacy/node_modules/@jridgewell/source-map/dist/source-map.umd.js is excluded by !**/dist/**, !**/node_modules/**
  • legacy/node_modules/@jridgewell/source-map/dist/source-map.umd.js.map is excluded by !**/dist/**, !**/node_modules/**, !**/*.map
  • legacy/node_modules/@jridgewell/source-map/dist/types/source-map.d.ts is excluded by !**/dist/**, !**/node_modules/**
  • legacy/node_modules/@jridgewell/source-map/package.json is excluded by !**/node_modules/**
  • legacy/node_modules/@jridgewell/sourcemap-codec/LICENSE is excluded by !**/node_modules/**
  • legacy/node_modules/@jridgewell/sourcemap-codec/README.md is excluded by !**/node_modules/**
  • legacy/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.mjs is excluded by !**/dist/**, !**/node_modules/**
  • legacy/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.mjs.map is excluded by !**/dist/**, !**/node_modules/**, !**/*.map
  • legacy/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.umd.js is excluded by !**/dist/**, !**/node_modules/**
  • legacy/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.umd.js.map is excluded by !**/dist/**, !**/node_modules/**, !**/*.map
  • legacy/node_modules/@jridgewell/sourcemap-codec/dist/types/scopes.d.ts is excluded by !**/dist/**, !**/node_modules/**
  • legacy/node_modules/@jridgewell/sourcemap-codec/dist/types/sourcemap-codec.d.ts is excluded by !**/dist/**, !**/node_modules/**
  • legacy/node_modules/@jridgewell/sourcemap-codec/dist/types/strings.d.ts is excluded by !**/dist/**, !**/node_modules/**
  • legacy/node_modules/@jridgewell/sourcemap-codec/dist/types/vlq.d.ts is excluded by !**/dist/**, !**/node_modules/**
  • legacy/node_modules/@jridgewell/sourcemap-codec/package.json is excluded by !**/node_modules/**
  • legacy/node_modules/@jridgewell/trace-mapping/LICENSE is excluded by !**/node_modules/**
  • legacy/node_modules/@jridgewell/trace-mapping/README.md is excluded by !**/node_modules/**
  • legacy/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.mjs is excluded by !**/dist/**, !**/node_modules/**
  • legacy/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.mjs.map is excluded by !**/dist/**, !**/node_modules/**, !**/*.map
  • legacy/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.umd.js is excluded by !**/dist/**, !**/node_modules/**
  • legacy/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.umd.js.map is excluded by !**/dist/**, !**/node_modules/**, !**/*.map
  • legacy/node_modules/@jridgewell/trace-mapping/dist/types/any-map.d.ts is excluded by !**/dist/**, !**/node_modules/**
  • legacy/node_modules/@jridgewell/trace-mapping/dist/types/binary-search.d.ts is excluded by !**/dist/**, !**/node_modules/**
  • legacy/node_modules/@jridgewell/trace-mapping/dist/types/by-source.d.ts is excluded by !**/dist/**, !**/node_modules/**
  • legacy/node_modules/@jridgewell/trace-mapping/dist/types/resolve.d.ts is excluded by !**/dist/**, !**/node_modules/**
  • legacy/node_modules/@jridgewell/trace-mapping/dist/types/sort.d.ts is excluded by !**/dist/**, !**/node_modules/**
  • legacy/node_modules/@jridgewell/trace-mapping/dist/types/sourcemap-segment.d.ts is excluded by !**/dist/**, !**/node_modules/**
  • legacy/node_modules/@jridgewell/trace-mapping/dist/types/strip-filename.d.ts is excluded by !**/dist/**, !**/node_modules/**
  • legacy/node_modules/@jridgewell/trace-mapping/dist/types/trace-mapping.d.ts is excluded by !**/dist/**, !**/node_modules/**
  • legacy/node_modules/@jridgewell/trace-mapping/dist/types/types.d.ts is excluded by !**/dist/**, !**/node_modules/**
  • legacy/node_modules/@jridgewell/trace-mapping/package.json is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.scandir/LICENSE is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.scandir/README.md is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.scandir/out/adapters/fs.d.ts is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.scandir/out/adapters/fs.js is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.scandir/out/constants.d.ts is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.scandir/out/constants.js is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.scandir/out/index.d.ts is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.scandir/out/index.js is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.scandir/out/providers/async.d.ts is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.scandir/out/providers/async.js is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.scandir/out/providers/common.d.ts is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.scandir/out/providers/common.js is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.scandir/out/providers/sync.d.ts is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.scandir/out/providers/sync.js is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.scandir/out/settings.d.ts is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.scandir/out/settings.js is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.scandir/out/types/index.d.ts is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.scandir/out/types/index.js is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.scandir/out/utils/fs.d.ts is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.scandir/out/utils/fs.js is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.scandir/out/utils/index.d.ts is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.scandir/out/utils/index.js is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.scandir/package.json is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.stat/LICENSE is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.stat/README.md is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.stat/out/adapters/fs.d.ts is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.stat/out/adapters/fs.js is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.stat/out/index.d.ts is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.stat/out/index.js is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.stat/out/providers/async.d.ts is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.stat/out/providers/async.js is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.stat/out/providers/sync.d.ts is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.stat/out/providers/sync.js is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.stat/out/settings.d.ts is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.stat/out/settings.js is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.stat/out/types/index.d.ts is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.stat/out/types/index.js is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.stat/package.json is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.walk/LICENSE is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.walk/README.md is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.walk/out/index.d.ts is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.walk/out/index.js is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.walk/out/providers/async.d.ts is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.walk/out/providers/async.js is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.walk/out/providers/index.d.ts is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.walk/out/providers/index.js is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.walk/out/providers/stream.d.ts is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.walk/out/providers/stream.js is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.walk/out/providers/sync.d.ts is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.walk/out/providers/sync.js is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.walk/out/readers/async.d.ts is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.walk/out/readers/async.js is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.walk/out/readers/common.d.ts is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.walk/out/readers/common.js is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.walk/out/readers/reader.d.ts is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.walk/out/readers/reader.js is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.walk/out/readers/sync.d.ts is excluded by !**/node_modules/**
  • legacy/node_modules/@nodelib/fs.walk/out/readers/sync.js is excluded by !**/node_modules/**
📒 Files selected for processing (102)
  • .githooks/README.md
  • .githooks/post-checkout
  • .githooks/pre-commit
  • .githooks/pre-push
  • .github/workflows/release.yml
  • .gitignore
  • .vscode/tasks.json
  • ARKLIGHTS_README.md
  • AUTO_SETUP_HOOKS.md
  • Android/.gitignore
  • Android/README.md
  • Android/app/.gitignore
  • Android/app/build.gradle.kts
  • Android/app/proguard-rules.pro
  • Android/app/src/androidTest/java/com/example/arklights/ExampleInstrumentedTest.kt
  • Android/app/src/main/AndroidManifest.xml
  • Android/app/src/main/java/com/example/arklights/MainActivity.kt
  • Android/app/src/main/java/com/example/arklights/api/ArkLightsApiService.kt
  • Android/app/src/main/java/com/example/arklights/bluetooth/BluetoothService.kt
  • Android/app/src/main/java/com/example/arklights/data/Models.kt
  • Android/app/src/main/java/com/example/arklights/ui/components/UIComponents.kt
  • Android/app/src/main/java/com/example/arklights/ui/screens/ArkLightsApp.kt
  • Android/app/src/main/java/com/example/arklights/ui/screens/DeviceDiscoveryScreen.kt
  • Android/app/src/main/java/com/example/arklights/ui/screens/MainControlScreen.kt
  • Android/app/src/main/java/com/example/arklights/ui/theme/Color.kt
  • Android/app/src/main/java/com/example/arklights/ui/theme/Theme.kt
  • Android/app/src/main/java/com/example/arklights/ui/theme/Type.kt
  • Android/app/src/main/java/com/example/arklights/viewmodel/ArkLightsViewModel.kt
  • Android/app/src/main/res/drawable/ic_launcher_background.xml
  • Android/app/src/main/res/drawable/ic_launcher_foreground.xml
  • Android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
  • Android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
  • Android/app/src/main/res/mipmap-hdpi/ic_launcher.webp
  • Android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
  • Android/app/src/main/res/mipmap-mdpi/ic_launcher.webp
  • Android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
  • Android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp
  • Android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
  • Android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
  • Android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
  • Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
  • Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
  • Android/app/src/main/res/values/colors.xml
  • Android/app/src/main/res/values/strings.xml
  • Android/app/src/main/res/values/themes.xml
  • Android/app/src/main/res/xml/backup_rules.xml
  • Android/app/src/main/res/xml/data_extraction_rules.xml
  • Android/app/src/test/java/com/example/arklights/ExampleUnitTest.kt
  • Android/build.gradle.kts
  • Android/gradle.properties
  • Android/gradle/libs.versions.toml
  • Android/gradle/wrapper/gradle-wrapper.properties
  • Android/gradlew
  • Android/gradlew.bat
  • Android/settings.gradle.kts
  • CLOUD_GIT_LIMITATIONS.md
  • CODE_REVIEW_AND_RECOMMENDATIONS.md
  • CONTRIBUTING.md
  • FORCE_PRECOMMIT_GUIDE.md
  • QUICK_IMPLEMENTATION_GUIDE.md
  • README_HOOKS_SNIPPET.md
  • SECRET_PREVENTION_CRITICAL.md
  • SERIAL_COMMANDS_REFERENCE.md
  • TROUBLESHOOTING_UI_UPDATE.md
  • UI_SEPARATION_README.md
  • UI_UPDATE_SYSTEM.md
  • apply_ui_patch.py
  • arklights_ui_update.txt
  • arklights_ui_update_part1.txt
  • arklights_ui_update_part2.txt
  • arklights_ui_update_part3.txt
  • boards/seeed_xiao_esp32s3.json
  • check_ui_files.py
  • create_ui_update.py
  • data/ui/index.html
  • data/ui/script.js
  • data/ui/styles.css
  • debug_ui_update.py
  • debug_ui_update.txt
  • diagnose_update_file.py
  • github-actions-example.yml
  • improved_ui_update.cpp
  • install-hooks-bootstrap.sh
  • legacy/CHANGELOG.md
  • legacy/CMakeLists.txt
  • legacy/CODE_OF_CONDUCT.md
  • legacy/CONTRIBUTING.md
  • legacy/IMPLEMENTATION_SUMMARY.md
  • legacy/LED_CONFIGURATION_GUIDE.md
  • legacy/ONEWHEEL_README.md
  • legacy/QUICK_SETUP.md
  • legacy/UI_UPDATE_GUIDE.md
  • legacy/WEB_UI_COMPLETE.md
  • legacy/boards/lolin_s3_mini.json
  • legacy/boards/seeed_xiao_esp32s3.json
  • legacy/build.sh
  • legacy/create_ui_update.py
  • legacy/force_littlefs.py
  • legacy/images/Readme.md
  • legacy/include/README
  • legacy/lib/ESP8266PWM/src/core_esp8266_waveform_phase.cpp
  • legacy/lib/README

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@cleverark cleverark closed this Jan 8, 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.

1 participant