12 KiB
12 KiB
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Script v1.0.27] - 2026-04-13
Fixed
- Fix
oa --updateshowing syntax error after self-update — the running shell process continued reading the replacedoascript file, causing a parse error at the new file's line 240. Addedexit 0after update completes to prevent this (#110)
[Script v1.0.26] - 2026-04-12
Changed
- Switch Codex CLI from upstream
@openai/codexto Termux-optimized@mmmbuto/codex-cli-termux(DioNanos/codex-termux fork). The upstream package ships a static musl binary whose DNS resolver hardcodes/etc/resolv.conf— a file that doesn't exist on Android — causing unreliable network connections. The fork builds as a dynamic Bionic binary that uses Android's native DNS stack, fixing theStream disconnected/error sending requestpattern reported by users behind proxies. CLI command name (codex) is unchanged. (#108)
Fixed
- Fix Codex CLI launcher failing on
com.openclaw.androidnamespace — the npm-created$PREFIX/bin/codexsymlink points to a JS launcher chain that miscalculates paths under the non-standard Android app namespace. Replace the symlink with a bash wrapper that setsLD_LIBRARY_PATHand directly exec'scodex.bin, matching the pattern used for the openclaw CLI wrapper. Applied across all delivery paths (App Install, Termux Install, Update) via npm wrapper hook and inline post-install creation. (#108)
[Script v1.0.25] - 2026-04-11
Fixed
- Fix
bad interpreter: Permission deniedwhen running npm globally-installed CLI tools (codex, claude, clawdhub, etc.) directly from shell on Android/Termux. The root cause is#!/usr/bin/env nodeshebang in.jsentry points, which Android cannot resolve. Two-layer fix: (1) npm wrapper hook automatically rewrites shebangs after everynpm install -g, (2) defense-in-depth calls in install/update scripts catch anything Layer 1 missed.
[Script v1.0.24] - 2026-04-11
Fixed
- Stop permanently polluting user's
~/.npmrcduring install — previouslypost-setup.shwould detect slowregistry.npmjs.orgaccess and writeregistry=https://registry.npmmirror.comto~/.npmrc, affecting all of the user's npm projects forever with no self-recovery. Now the installer uses session-scopedNPM_CONFIG_REGISTRYenv var and caches the chosen registry at~/.openclaw-android/.npm-registry, re-exporting from~/.bashrcon each login. Users bitten by v1.0.22/v1.0.23 are auto-rescued on nextoa --updatebecause env vars override~/.npmrc, and their personal npmrc is left untouched (preserving auth tokens, scope registries, etc.) (#107) - Cover all three install paths for the npm registry detection — App Install (
post-setup.sh), Termux Install (install.sh), and Update (update-core.sh).scripts/setup-env.shnow injects theNPM_CONFIG_REGISTRYre-export line inside the# >>> OpenClaw on Android >>>marker block of~/.bashrcso Termux-install and update paths get the same session-to-session re-evaluation as App Install.
[Script v1.0.23] - 2026-04-11
Fixed
- Preserve user's existing
~/.gitconfigduring post-setup — previouslycat > ~/.gitconfigoverwrote all user settings (name, email, aliases). Now usesgit config --globalto set onlyhttp.sslCAInfoandurl.https://github.com/.insteadOfkeys while keeping user entries intact (#107)
[Script v1.0.22] - 2026-04-10
Added
- ELF binary auto-wrapping: detect glibc binaries via PT_INTERP and route through ld.so, enabling npx-installed native binaries like codex-acp to run on Android (#103)
- Shebang resolution: handle
#!/usr/bin/envscripts without libtermux-exec.so by resolving interpreters from PATH in JavaScript - Shell invocation interception: detect
spawn('sh', ['-c', 'cmd'])pattern used by npm/npx and resolve commands directly - Supplementary glibc library deployment: bundle libcap.so.2 for third-party native binary support
- Localhost DNS shortcut: return 127.0.0.1 immediately for localhost lookups without querying external DNS (#105)
- Create
$PREFIX/glibc/etc/hostsif missing, ensuring getaddrinfo can resolve localhost (#105)
Changed
- Stop restoring LD_PRELOAD in glibc-compat.js — libtermux-exec.so re-injects it via execve hook, crashing glibc child processes with "Could not find a PHDR" errors
- Always use Termux shell for exec/execSync on all Android versions (previously only Android 7-8)
[Script v1.0.21] - 2026-04-07
Fixed
- Fix
oa --backupexiting with error code 1 due totmpdir: unbound variable— trap used local variable that went out of scope - Fix
oa --backup/oa --restoreandask_ynfailing in tty-less environments (SSH pipe, non-interactive) — fallback to stdin when/dev/ttyis unavailable
[Script v1.0.20] - 2026-04-06
Fixed
- Fix dep restore blocked by sharp build failure —
npm installinside openclaw dir triggers sharp's native build which fails on Termux, blocking all other deps. Now runspostinstall-bundled-plugins.mjsdirectly withnpm_config_ignore_scripts=trueto skip sharp while installing channel deps (#92) - Fix dep restore skipped when openclaw already at latest version — check
@buape/carbonpresence instead ofOPENCLAW_UPDATEDflag
[Script v1.0.19] - 2026-04-06
Fixed
- Fix missing channel dependencies after
--ignore-scriptsinstall — reinstall deps inside openclaw package dir to restore optional modules like@buape/carbon,grammy(#92)
[Script v1.0.18] - 2026-04-04
Fixed
- Fix
process.execPathpointing told-linux-aarch64.so.1instead of node wrapper — glibc-compat.js had wrong path (node/bin/nodeinstead ofbin/node), causing OpenClaw 4.2 child process spawns with--disable-warning=ExperimentalWarningto fail (#88) - Add
_OA_WRAPPER_PATHenv var to node wrapper — eliminates path guessing in glibc-compat.js - Fix verify-compat.sh checking wrong wrapper paths — tests now verify behavior (executable script, not ELF) instead of hardcoded paths
- Fix
install.shsession PATH missing$BIN_DIR— node/npm commands could fail to resolve after Step 5 - Fix README (en/ko/zh) documenting wrong wrapper path (
node/bin/node→bin/node) - Fix npm wrapper writing through symlink and corrupting
openclaw.mjs— npm creates symlink$PREFIX/bin/openclaw→openclaw.mjs, our shim writer followed it and destroyed the original file (#89)
[Script v1.0.17] - 2026-04-03
Fixed
- Fix false-positive "glibc node wrapper not found" in install verification — verify-install.sh and status.sh referenced old
node/bin/path instead of newbin/path (#87) - Add
BIN_DIRconstant to lib.sh to prevent path hardcoding drift across verification scripts
[Script v1.0.16] - 2026-04-02
Fixed
- Auto-repatch openclaw CLI wrapper after
npm install/update -g openclaw— prevents/usr/bin/envshebang breakage on Termux (#86) - Move node/npm/npx wrappers to dedicated
bin/directory safe from npm overwrites - Fix missing
bin/nodewrapper creation in already-installed repair path
[Script v1.0.15] - 2026-04-01
Fixed
- Fix
dns.promises.lookupnot patched in glibc-compat.js — OpenClaw's web_search SSRF guard usesnode:dns/promiseswhich bypassed the c-ares DNS fix, causinggetaddrinfo EAI_AGAINon hosts withoutresolv.conf(#83)
[Script v1.0.14] - 2026-04-01
Fixed
- Auto-disable Bonjour/mDNS at runtime when only loopback interface is visible — Android/Termux cannot send multicast, causing repeated "Announcement failed as of socket errors!" gateway logs (#84)
[Script v1.0.13] - 2026-03-31
Added
- Playwright as optional install tool (
oa --install) — installsplaywright-core, auto-configures Chromium path and environment variables - Auto-repatch openclaw CLI wrapper after
npm install/update -g openclaw— prevents shebang breakage on Termux (#86)
Changed
- Bump Gson 2.12.1 → 2.13.2
- Bump androidx.core:core-ktx 1.17.0 → 1.18.0
- Bump ktlint gradle plugin 14.1.0 → 14.2.0
- Bump Gradle wrapper 9.3.1 → 9.4.1
- Bump eslint 9.39.4 → 10.0.3
- Bump globals 16.5.0 → 17.4.0
- Bump eslint-plugin-react-refresh 0.4.24 → 0.5.2
- Bump GitHub Actions: checkout v4→v6, setup-node v4→v6, setup-java v4→v5, upload-artifact v4→v7, download-artifact v4→v8
[App v0.4.0 / Script v1.0.12] - 2026-03-30
Added
- App: i18n support — English, Korean (한국어), Chinese (中文) with auto-detection
- App: Language selector in Settings
- Add Chinese README (README.zh.md) with China mirror download link
- Add language switcher links to README.md, README.ko.md, README.zh.md
- GitHub mirror fallback for China/restricted networks (ghfast.top, ghproxy.net)
- npm registry auto-switch to npmmirror.com when npmjs.org is unreachable
- Add AppLogger centralized logging wrapper, replace all android.util.Log calls
- Add unit test infrastructure (JUnit5 + MockK, 22 tests)
- Add CI code-quality workflow (shellcheck, sync check, markdownlint, doc freshness, kotlin lint, unit tests)
- Add shellcheck, markdownlint to pre-commit hook
- Add post-setup.sh sync verification to pre-commit hook
- Add Claude Code hooks (push warning, document freshness, shellcheck auto-run)
Changed
- Resolve all 48 detekt violations — no baseline needed
- Resolve all 43 shellcheck violations across all scripts
- Resolve all 125 markdownlint violations across all documents
- Refactor BootstrapManager, JsBridge, MainActivity for reduced complexity
- Convert A&&B||C patterns to if/then/else in install.sh, install-tools.sh
- Bump app version to v0.4.0 (versionCode 9)
- Bump script version to v1.0.12
[1.0.6] - 2026-03-10
Changed
- Clean up existing installation on reinstall
[1.0.5] - 2026-03-06
Added
- Standalone Android APK with WebView UI, native terminal, and extra keys bar
- Multi-session terminal tab bar with swipe navigation
- Boot auto-start via BootReceiver
- Chromium browser automation support (
scripts/install-chromium.sh) oa --installcommand for installing optional tools independently
Fixed
update-core.shsyntax error (extrafion line 237)- sharp image processing with WASM fallback for glibc/bionic boundary
Changed
- Switch terminal input mode to
TYPE_NULLfor strict terminal behavior
[1.0.4] - 2025-12-15
Changed
- Upgrade Node.js to v22.22.0 for FTS5 support (
node:sqlitestatic bundle) - Show version in all update skip and completion messages
Removed
- oh-my-opencode support (OpenCode uses internal Bun, PATH-based plugins not detected)
Fixed
- Update version glob picks oldest instead of latest
- Native module build failures during update
[1.0.3] - 2025-11-20
Added
.gitattributesfor LF line ending enforcement
Changed
- Bump version to v1.0.3
[1.0.2] - 2025-10-15
Added
- Platform-plugin architecture (
platforms/<name>/structure) - Shared script library (
scripts/lib.sh) - Verification system (
tests/verify-install.sh)
Changed
- Refactor install flow into modular scripts
- Separate platform-specific code from infrastructure
[1.0.1] - 2025-09-01
Fixed
- Initial bug fixes and stability improvements
[1.0.0] - 2025-08-15
Added
- Initial release
- glibc-runner based execution (no proot-distro required)
- One-command installer (
curl | bash) - Node.js glibc wrapper for standard Linux binaries on Android
- Path conversion for Termux compatibility
- Optional tools: tmux, code-server, OpenCode, AI CLIs
- Post-install verification