@mmmbuto/gemini-cli-termux 0.24.1-termux → 0.24.2-termux

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -29,7 +29,7 @@ pkg update && pkg upgrade -y
29
29
  pkg install nodejs-lts -y
30
30
  npm install -g @mmmbuto/gemini-cli-termux
31
31
 
32
- gemini --version # expected: 0.24.1-termux (npm latest)
32
+ gemini --version # expected: 0.24.2-termux (npm latest)
33
33
  ```
34
34
 
35
35
  Build from source:
@@ -105,8 +105,9 @@ See [docs/patches/README.md](./docs/patches/README.md) for complete solutions.
105
105
  npm install -g @mmmbuto/gemini-cli-termux@latest
106
106
  ```
107
107
 
108
- ### Changelog (0.24.1-termux)
108
+ ### Changelog (0.24.2-termux)
109
109
 
110
+ - **Auto-update fix**: uses the fork package name to prevent upstream overwrite.
110
111
  - **Memory Mode presets** in `/settings → Memory` (default / jit / jit+json).
111
112
  - **JIT + JSON** combined memory support (ContextManager now loads JSON memory).
112
113
  - **Memory settings reorganized** into a dedicated section; MCP import
@@ -1,6 +1,8 @@
1
- # Termux Patches (0.22.7-termux testing)
1
+ # Termux Patches (Upstream Differences)
2
2
 
3
- Minimal changes to run `gemini-cli` on Android/Termux ARM64 without native deps.
3
+ This document lists **all patches** that differentiate this Termux fork from
4
+ upstream `google-gemini/gemini-cli`. It is not tied to a specific release; keep
5
+ it updated whenever a new patch is added or removed.
4
6
 
5
7
  ## Patch List
6
8
 
@@ -17,32 +19,13 @@ Minimal changes to run `gemini-cli` on Android/Termux ARM64 without native deps.
17
19
  6. **Punycode warning** – Suppresses deprecation warning on Android.
18
20
  7. **Termux detection** – `packages/core/src/utils/termux-detect.ts` utility.
19
21
  8. **Postinstall message** – Clear success message on Termux install.
20
- 9. **Context memory revamp** – Dual JSON (base RO + user RW) plus journal
21
- (`user.journal.jsonl`), auto-load toggles, primary selector, and MCP import
22
- tool (disabled by default; base writes still gated).
22
+ 9. **Context memory + Memory Mode** – JSON memories (base/user/journal) plus
23
+ presets: `default`, `jit`, `jit+json`. Auto-load toggles, primary selector,
24
+ and MCP import tool (disabled by default; base writes still gated).
23
25
  10. **Mobile-first settings** – Compact `/settings` rendering by default on
24
26
  Termux; TTS toggle exposed (opt-in).
25
- 11. **Shell parser fix** – Tree-sitter for bash loaded lazily after Base64
26
- polyfill; resolves `Uint8Array.fromBase64` crash on Termux Node 22/24.
27
-
28
- ## New in 0.22.7 (testing)
29
-
30
- - **Gemini 3 Flash preview** exposed in model list/help.
31
- - MCP import tool (`mcp_import_memory`) to pull remote MCP data into base/user
32
- memories when enabled.
33
- - Context memory split (base/user/journal) with merge-safe compaction and
34
- high-sensitivity auto-load filtering.
35
- - Mobile settings view default-on; TTS enable/disable switch.
36
- - Bash parser initialization hardened for Termux runtime (fixes
37
- `run_shell_command` crashes).
38
-
39
- ## New in 0.22.2
40
-
41
- - Termux-API tool discovery support (`scripts/termux-tools/`)
42
- - Improved installation experience (`scripts/postinstall.js`)
43
- - Helper scripts for build from source (`scripts/termux-setup.sh`)
44
- - Makefile targets: `termux-install`, `termux-clean`
45
- - Merge verification script (`scripts/check-termux-patches.sh`)
27
+ 11. **Shell parser fix** – Base64 polyfill in bundle banner to support
28
+ web-tree-sitter on Node 22/24 (fixes `run_shell_command`).
46
29
 
47
30
  ## Expected Warnings
48
31
 
@@ -59,4 +42,4 @@ All patches are designed to be merge-safe. See
59
42
  [docs/termux-api/MERGE_STRATEGY.md](../termux-api/MERGE_STRATEGY.md) for details
60
43
  on maintaining patches after upstream sync.
61
44
 
62
- **Version**: 0.22.7-termux (testing) / latest dist-tag: 0.22.2-termux
45
+ **Scope**: All active Termux releases (update as patches change).
@@ -1,13 +1,16 @@
1
1
  # Merge Strategy - Upstream Sync
2
2
 
3
- **Project**: gemini-cli-termux **Author**: DioNanos **Date**: 2025-12-17
3
+ **Project**: gemini-cli-termux
4
+ **Author**: DioNanos
5
+ **Last updated**: 2025-12-28
6
+ **Scope**: Version-agnostic strategy for maintaining all Termux patches
4
7
 
5
8
  ---
6
9
 
7
10
  ## Overview
8
11
 
9
- Strategy for maintaining Termux patches easily applicable after each merge with
10
- the upstream `google-gemini/gemini-cli`.
12
+ Strategy for keeping Termux patches merge-safe and easy to re-apply after each
13
+ sync with upstream `google-gemini/gemini-cli`.
11
14
 
12
15
  ---
13
16
 
@@ -35,19 +38,21 @@ All Termux modifications must be:
35
38
  ```
36
39
  gemini-cli-termux/
37
40
  ├── packages/core/src/
38
- │ ├── utils/
39
- │ └── termux-detect.ts # NEW - no conflicts
40
- │ └── contextMemory.ts # NEW - Termux context memory logic
41
- │ └── index.ts # Minimal EDIT - 2 export lines
41
+ │ ├── utils/termux-detect.ts # NEW - no conflicts
42
+ ├── utils/contextMemory.ts # NEW - JSON memory + journal
43
+ ├── services/contextManager.ts # EDIT - JIT + JSON wiring
44
+ │ └── tools/shell.ts # EDIT - TTS guard
45
+ ├── packages/cli/src/config/
46
+ │ ├── settingsSchema.ts # EDIT - Memory Mode settings
47
+ │ └── config.ts # EDIT - Memory Mode logic
42
48
  ├── scripts/
43
- │ ├── postinstall.js # NEW - no conflicts
44
- │ ├── termux-setup.sh # NEW - no conflicts
45
- └── termux-tools/ # NEW - no conflicts
46
- ├── discovery.sh
47
- │ └── call.sh
48
- ├── esbuild.config.js # EDIT - banner (isolated)
49
- ├── package.json # EDIT - scripts.postinstall, dist-tags
50
- └── Makefile # EDIT - additional targets
49
+ │ ├── postinstall.cjs # NEW - no conflicts
50
+ │ ├── termux-setup.sh # NEW - no conflicts
51
+ ├── termux-tools/ # NEW - no conflicts
52
+ └── check-termux-patches.sh # NEW - verification script
53
+ ├── esbuild.config.js # EDIT - banner (polyfills + Termux)
54
+ ├── package.json # EDIT - postinstall + Termux config
55
+ └── README.md # EDIT - Termux docs
51
56
  ```
52
57
 
53
58
  ---
@@ -76,20 +81,27 @@ Likely conflict files:
76
81
  - `package.json` - Resolve by keeping our scripts
77
82
  - `esbuild.config.js` - Resolve by keeping our banner
78
83
  - `packages/core/src/index.ts` - Resolve by keeping our exports
84
+ - `packages/cli/src/config/settingsSchema.ts` - Keep Memory Mode settings
85
+ - `packages/cli/src/config/config.ts` - Keep Memory Mode mapping logic
86
+ - `packages/core/src/services/contextManager.ts` - Keep JIT + JSON wiring
87
+ - `packages/core/src/utils/contextMemory.ts` - Keep JSON memory logic
88
+ - `packages/core/src/tools/shell.ts` - Keep TTS guard
79
89
 
80
90
  ### Step 4: Verify patches intact
81
91
 
82
92
  ```bash
83
93
  # Check that our files still exist
84
94
  ls -la packages/core/src/utils/termux-detect.ts
85
- ls -la scripts/postinstall.js
95
+ ls -la packages/core/src/utils/contextMemory.ts
96
+ ls -la scripts/postinstall.cjs
86
97
  ls -la scripts/termux-setup.sh
87
98
  ls -la scripts/termux-tools/
88
99
 
89
100
  # Check that modifications are present
90
- grep "TERMUX__PREFIX" esbuild.config.js
101
+ grep "TERMUX PATCH" esbuild.config.js
91
102
  grep "postinstall" package.json
92
103
  grep "termux-detect" packages/core/src/index.ts
104
+ grep "memory.mode" packages/cli/src/config/settingsSchema.ts
93
105
  ```
94
106
 
95
107
  ### Step 5: Build test
@@ -122,7 +134,7 @@ git commit -m "merge: upstream vX.Y.Z + Termux patches"
122
134
  {
123
135
  "scripts": {
124
136
  // ... upstream scripts ...
125
- "postinstall": "node scripts/postinstall.js || true" // TERMUX PATCH
137
+ "postinstall": "node scripts/postinstall.cjs || true" // TERMUX PATCH
126
138
  }
127
139
  }
128
140
  ```
@@ -137,9 +149,15 @@ git commit -m "merge: upstream vX.Y.Z + Termux patches"
137
149
  banner: {
138
150
  js: `/* UPSTREAM BANNER */
139
151
  // TERMUX PATCH START
152
+ // Base64 polyfill for web-tree-sitter (Node 22/24)
153
+ if (typeof Uint8Array.fromBase64 !== 'function') { /* ... */ }
154
+ if (typeof Uint8Array.prototype.toBase64 !== 'function') { /* ... */ }
155
+ // Clipboardy Termux detection
140
156
  if (process.platform === 'android' && process.env.PREFIX && !process.env.TERMUX__PREFIX) {
141
157
  process.env.TERMUX__PREFIX = process.env.PREFIX;
142
158
  }
159
+ // Punycode deprecation warning suppression
160
+ if (process.platform === 'android') { /* ... */ }
143
161
  // TERMUX PATCH END
144
162
  `,
145
163
  },
@@ -156,20 +174,21 @@ if (process.platform === 'android' && process.env.PREFIX && !process.env.TERMUX_
156
174
 
157
175
  // TERMUX PATCH
158
176
  export * from './utils/termux-detect.js';
159
- export * from './utils/contextMemory.js';
177
+ ```
160
178
 
161
- ### Context memory safety
179
+ ### Context memory + Memory Mode
162
180
 
163
- - Keep `contextMemory.ts` additive; if upstream adds similar logic, retain
164
- Termux fields `allowBaseWrite`, runtime setters, key/TTL guards, sensitivity
165
- filter, and incremental journal processing.
181
+ - `packages/core/src/utils/contextMemory.ts` implements JSON memories and
182
+ journal compaction.
183
+ - `packages/core/src/services/contextManager.ts` wires JIT + JSON.
184
+ - `packages/cli/src/config/settingsSchema.ts` + `config.ts` add Memory Mode
185
+ settings and mapping logic.
166
186
 
167
187
  ### Shell / TTS guard
168
188
 
169
189
  - `packages/core/src/tools/shell.ts` contains a guard to block
170
190
  `termux-tts-speak` when `notifications.ttsEnabled` is false. Re-apply after
171
191
  merges if the shell tool changes.
172
- ```
173
192
 
174
193
  ---
175
194
 
@@ -192,10 +211,11 @@ ERRORS=0
192
211
  # Check file existence
193
212
  FILES=(
194
213
  "packages/core/src/utils/termux-detect.ts"
195
- "scripts/postinstall.js"
214
+ "scripts/postinstall.cjs"
196
215
  "scripts/termux-setup.sh"
197
216
  "scripts/termux-tools/discovery.sh"
198
217
  "scripts/termux-tools/call.sh"
218
+ "scripts/check-termux-patches.sh"
199
219
  )
200
220
 
201
221
  for f in "${FILES[@]}"; do
@@ -208,8 +228,8 @@ for f in "${FILES[@]}"; do
208
228
  done
209
229
 
210
230
  # Check key contents
211
- if grep -q "TERMUX__PREFIX" esbuild.config.js; then
212
- echo "✓ esbuild.config.js has TERMUX patch"
231
+ if grep -q "TERMUX PATCH" esbuild.config.js; then
232
+ echo "✓ esbuild.config.js has TERMUX patches"
213
233
  else
214
234
  echo "✗ esbuild.config.js MISSING TERMUX patch"
215
235
  ERRORS=$((ERRORS + 1))
@@ -229,6 +249,13 @@ else
229
249
  ERRORS=$((ERRORS + 1))
230
250
  fi
231
251
 
252
+ if grep -q "termux-install" Makefile; then
253
+ echo "✓ Makefile has termux-install target"
254
+ else
255
+ echo "✗ Makefile MISSING termux-install target"
256
+ ERRORS=$((ERRORS + 1))
257
+ fi
258
+
232
259
  echo ""
233
260
  if [ $ERRORS -eq 0 ]; then
234
261
  echo "=== All patches intact ==="
@@ -254,17 +281,20 @@ bash scripts/check-termux-patches.sh || echo "WARNING: Termux patches need atten
254
281
 
255
282
  ### Files to monitor
256
283
 
257
- | Upstream File | Impact | Action |
258
- | ---------------------------- | ------ | -------------- |
259
- | `package.json` | High | Verify scripts |
260
- | `esbuild.config.js` | High | Verify banner |
261
- | `packages/core/src/index.ts` | Medium | Verify exports |
262
- | `packages/core/src/tools/*` | Low | No action |
263
- | `packages/cli/*` | Low | No action |
284
+ | Upstream File | Impact | Action |
285
+ | ---------------------------------------------- | ------ | --------------------------- |
286
+ | `esbuild.config.js` | High | Verify banner patches |
287
+ | `package.json` | High | Verify postinstall + config |
288
+ | `packages/cli/src/config/settingsSchema.ts` | High | Memory Mode settings |
289
+ | `packages/core/src/services/contextManager.ts` | High | JIT + JSON wiring |
290
+ | `packages/core/src/utils/contextMemory.ts` | High | JSON memory logic |
291
+ | `packages/core/src/tools/shell.ts` | Medium | TTS guard |
292
+ | `packages/core/src/index.ts` | Medium | termux-detect export |
293
+ | `scripts/termux-tools/*` | Low | Termux-API tools |
264
294
 
265
295
  ### Changelog Tracking
266
296
 
267
- Keep note of integrated upstream versions:
297
+ Keep note of integrated upstream versions (update as you merge):
268
298
 
269
299
  ```
270
300
  docs/termux-api/UPSTREAM_TRACKING.md
@@ -273,10 +303,11 @@ docs/termux-api/UPSTREAM_TRACKING.md
273
303
  ```markdown
274
304
  # Upstream Tracking
275
305
 
276
- | Version | Date | Notes |
277
- | -------------- | ---------- | ------------------ |
278
- | 0.21.0-nightly | 2025-12-12 | Initial fork base |
279
- | 0.22.0-nightly | 2025-12-17 | Synced, patches ok |
306
+ | Version | Date | Notes |
307
+ | -------------- | ---------- | ------------------------------- |
308
+ | 0.21.0-nightly | 2025-12-12 | Initial fork base |
309
+ | 0.22.0-nightly | 2025-12-17 | Synced, patches ok |
310
+ | 0.24.0-nightly | 2025-12-27 | Synced, Memory Mode + shell fix |
280
311
  ```
281
312
 
282
313
  ---
package/bundle/gemini.js CHANGED
@@ -106902,7 +106902,7 @@ import { fileURLToPath as fileURLToPath4 } from "node:url";
106902
106902
  import path12 from "node:path";
106903
106903
  async function getVersion() {
106904
106904
  const pkgJson = await getPackageJson(__dirname3);
106905
- return "0.24.1-termux";
106905
+ return "0.24.2-termux";
106906
106906
  }
106907
106907
  var __filename, __dirname3;
106908
106908
  var init_version2 = __esm({
@@ -157917,7 +157917,7 @@ var require_import_in_the_middle = __commonJS({
157917
157917
  "node_modules/import-in-the-middle/index.js"(exports2, module2) {
157918
157918
  var path129 = __require("path");
157919
157919
  var parse14 = require_module_details_from_path();
157920
- var { fileURLToPath: fileURLToPath22 } = __require("url");
157920
+ var { fileURLToPath: fileURLToPath23 } = __require("url");
157921
157921
  var { MessageChannel: MessageChannel2 } = __require("worker_threads");
157922
157922
  var {
157923
157923
  importHooks,
@@ -157996,7 +157996,7 @@ var require_import_in_the_middle = __commonJS({
157996
157996
  } else {
157997
157997
  if (name4.startsWith("file://")) {
157998
157998
  try {
157999
- name4 = fileURLToPath22(name4);
157999
+ name4 = fileURLToPath23(name4);
158000
158000
  } catch (e3) {
158001
158001
  }
158002
158002
  }
@@ -158011,7 +158011,7 @@ var require_import_in_the_middle = __commonJS({
158011
158011
  if (moduleName2 === name4) {
158012
158012
  if (baseDir) {
158013
158013
  if (internals) {
158014
- name4 = name4 + path129.sep + path129.relative(baseDir, fileURLToPath22(filename));
158014
+ name4 = name4 + path129.sep + path129.relative(baseDir, fileURLToPath23(filename));
158015
158015
  } else {
158016
158016
  if (!getExperimentalPatchInternals() && !baseDir.endsWith(specifiers.get(filename))) continue;
158017
158017
  }
@@ -161811,8 +161811,8 @@ var GIT_COMMIT_INFO, CLI_VERSION;
161811
161811
  var init_git_commit = __esm({
161812
161812
  "packages/core/dist/src/generated/git-commit.js"() {
161813
161813
  "use strict";
161814
- GIT_COMMIT_INFO = "ebc61b8dd";
161815
- CLI_VERSION = "0.24.0-termux";
161814
+ GIT_COMMIT_INFO = "e832d2820";
161815
+ CLI_VERSION = "0.24.1-termux";
161816
161816
  }
161817
161817
  });
161818
161818
 
@@ -314589,7 +314589,7 @@ var require_snapshot_recorder = __commonJS({
314589
314589
  "node_modules/undici/lib/mock/snapshot-recorder.js"(exports2, module2) {
314590
314590
  "use strict";
314591
314591
  var { writeFile: writeFile11, readFile: readFile13, mkdir: mkdir11 } = __require("node:fs/promises");
314592
- var { dirname: dirname28, resolve: resolve30 } = __require("node:path");
314592
+ var { dirname: dirname29, resolve: resolve30 } = __require("node:path");
314593
314593
  var { setTimeout: setTimeout4, clearTimeout: clearTimeout2 } = __require("node:timers");
314594
314594
  var { InvalidArgumentError, UndiciError } = require_errors6();
314595
314595
  var { hashId, isUrlExcludedFactory, normalizeHeaders: normalizeHeaders2, createHeaderFilters } = require_snapshot_utils();
@@ -314813,7 +314813,7 @@ var require_snapshot_recorder = __commonJS({
314813
314813
  throw new InvalidArgumentError("Snapshot path is required");
314814
314814
  }
314815
314815
  const resolvedPath = resolve30(path129);
314816
- await mkdir11(dirname28(resolvedPath), { recursive: true });
314816
+ await mkdir11(dirname29(resolvedPath), { recursive: true });
314817
314817
  const data = Array.from(this.#snapshots.entries()).map(([hash, snapshot]) => ({
314818
314818
  hash,
314819
314819
  snapshot
@@ -401773,11 +401773,11 @@ var require_util26 = __commonJS({
401773
401773
  if (files.includes("node_modules") || files.includes("package.json") || files.includes("package.json5") || files.includes("package.yaml") || files.includes("pnpm-workspace.yaml")) {
401774
401774
  return name5;
401775
401775
  }
401776
- const dirname28 = path129.dirname(name5);
401777
- if (dirname28 === name5) {
401776
+ const dirname29 = path129.dirname(name5);
401777
+ if (dirname29 === name5) {
401778
401778
  return original;
401779
401779
  }
401780
- return find(dirname28, original);
401780
+ return find(dirname29, original);
401781
401781
  } catch (error40) {
401782
401782
  if (name5 === original) {
401783
401783
  if (error40.code === "ENOENT") {
@@ -405572,18 +405572,18 @@ var require_build3 = __commonJS({
405572
405572
  // node_modules/escalade/sync/index.js
405573
405573
  var require_sync3 = __commonJS({
405574
405574
  "node_modules/escalade/sync/index.js"(exports2, module2) {
405575
- var { dirname: dirname28, resolve: resolve30 } = __require("path");
405575
+ var { dirname: dirname29, resolve: resolve30 } = __require("path");
405576
405576
  var { readdirSync: readdirSync5, statSync: statSync10 } = __require("fs");
405577
405577
  module2.exports = function(start2, callback) {
405578
405578
  let dir = resolve30(".", start2);
405579
405579
  let tmp, stats = statSync10(dir);
405580
405580
  if (!stats.isDirectory()) {
405581
- dir = dirname28(dir);
405581
+ dir = dirname29(dir);
405582
405582
  }
405583
405583
  while (true) {
405584
405584
  tmp = callback(dir, readdirSync5(dir));
405585
405585
  if (tmp) return resolve30(dir, tmp);
405586
- dir = dirname28(tmp = dir);
405586
+ dir = dirname29(tmp = dir);
405587
405587
  if (tmp === dir) break;
405588
405588
  }
405589
405589
  };
@@ -405621,7 +405621,7 @@ var require_require_directory = __commonJS({
405621
405621
  var fs113 = __require("fs");
405622
405622
  var join45 = __require("path").join;
405623
405623
  var resolve30 = __require("path").resolve;
405624
- var dirname28 = __require("path").dirname;
405624
+ var dirname29 = __require("path").dirname;
405625
405625
  var defaultOptions4 = {
405626
405626
  extensions: ["js", "json", "coffee"],
405627
405627
  recurse: true,
@@ -405654,7 +405654,7 @@ var require_require_directory = __commonJS({
405654
405654
  options2[prop] = defaultOptions4[prop];
405655
405655
  }
405656
405656
  }
405657
- path129 = !path129 ? dirname28(m2.filename) : resolve30(dirname28(m2.filename), path129);
405657
+ path129 = !path129 ? dirname29(m2.filename) : resolve30(dirname29(m2.filename), path129);
405658
405658
  fs113.readdirSync(path129).forEach(function(filename) {
405659
405659
  var joined = join45(path129, filename), files, key, obj;
405660
405660
  if (fs113.statSync(joined).isDirectory() && options2.recurse) {
@@ -407476,9 +407476,9 @@ var require_command_exists = __commonJS({
407476
407476
  cleanInput = function(s3) {
407477
407477
  var isPathName = /[\\]/.test(s3);
407478
407478
  if (isPathName) {
407479
- var dirname28 = '"' + path129.dirname(s3) + '"';
407479
+ var dirname29 = '"' + path129.dirname(s3) + '"';
407480
407480
  var basename22 = '"' + path129.basename(s3) + '"';
407481
- return dirname28 + ":" + basename22;
407481
+ return dirname29 + ":" + basename22;
407482
407482
  }
407483
407483
  return '"' + s3 + '"';
407484
407484
  };
@@ -440961,7 +440961,7 @@ var WarningMessage = ({ text }) => {
440961
440961
  };
440962
440962
 
440963
440963
  // packages/cli/src/generated/git-commit.ts
440964
- var GIT_COMMIT_INFO2 = "374071c93";
440964
+ var GIT_COMMIT_INFO2 = "468a27221";
440965
440965
 
440966
440966
  // packages/cli/src/ui/components/AboutBox.tsx
440967
440967
  var import_jsx_runtime33 = __toESM(require_jsx_runtime(), 1);
@@ -454157,12 +454157,24 @@ import * as fs73 from "node:fs";
454157
454157
  import * as path88 from "node:path";
454158
454158
  import * as childProcess3 from "node:child_process";
454159
454159
  import process46 from "node:process";
454160
+ import { fileURLToPath as fileURLToPath16 } from "node:url";
454161
+ var __filename4 = fileURLToPath16(import.meta.url);
454162
+ var __dirname10 = path88.dirname(__filename4);
454160
454163
  var isDevelopment = process46.env["NODE_ENV"] === "development";
454161
- function getInstallationInfo(projectRoot, isAutoUpdateDisabled) {
454164
+ async function getPackageName() {
454165
+ try {
454166
+ const packageJson2 = await getPackageJson(__dirname10);
454167
+ return packageJson2?.name || "@mmmbuto/gemini-cli-termux";
454168
+ } catch {
454169
+ return "@mmmbuto/gemini-cli-termux";
454170
+ }
454171
+ }
454172
+ async function getInstallationInfo(projectRoot, isAutoUpdateDisabled) {
454162
454173
  const cliPath = process46.argv[1];
454163
454174
  if (!cliPath) {
454164
454175
  return { packageManager: "unknown" /* UNKNOWN */, isGlobal: false };
454165
454176
  }
454177
+ const packageName = await getPackageName();
454166
454178
  try {
454167
454179
  const realPath = fs73.realpathSync(cliPath).replace(/\\/g, "/");
454168
454180
  const normalizedProjectRoot = projectRoot?.replace(/\\/g, "/");
@@ -454203,7 +454215,7 @@ function getInstallationInfo(projectRoot, isAutoUpdateDisabled) {
454203
454215
  }
454204
454216
  }
454205
454217
  if (realPath.includes("/.pnpm/global")) {
454206
- const updateCommand3 = "pnpm add -g @google/gemini-cli@latest";
454218
+ const updateCommand3 = `pnpm add -g ${packageName}@latest`;
454207
454219
  return {
454208
454220
  packageManager: "pnpm" /* PNPM */,
454209
454221
  isGlobal: true,
@@ -454212,7 +454224,7 @@ function getInstallationInfo(projectRoot, isAutoUpdateDisabled) {
454212
454224
  };
454213
454225
  }
454214
454226
  if (realPath.includes("/.yarn/global")) {
454215
- const updateCommand3 = "yarn global add @google/gemini-cli@latest";
454227
+ const updateCommand3 = `yarn global add ${packageName}@latest`;
454216
454228
  return {
454217
454229
  packageManager: "yarn" /* YARN */,
454218
454230
  isGlobal: true,
@@ -454228,7 +454240,7 @@ function getInstallationInfo(projectRoot, isAutoUpdateDisabled) {
454228
454240
  };
454229
454241
  }
454230
454242
  if (realPath.includes("/.bun/bin")) {
454231
- const updateCommand3 = "bun add -g @google/gemini-cli@latest";
454243
+ const updateCommand3 = `bun add -g ${packageName}@latest`;
454232
454244
  return {
454233
454245
  packageManager: "bun" /* BUN */,
454234
454246
  isGlobal: true,
@@ -454251,7 +454263,7 @@ function getInstallationInfo(projectRoot, isAutoUpdateDisabled) {
454251
454263
  updateMessage: "Locally installed. Please update via your project's package.json."
454252
454264
  };
454253
454265
  }
454254
- const updateCommand2 = "npm install -g @google/gemini-cli@latest";
454266
+ const updateCommand2 = `npm install -g ${packageName}@latest`;
454255
454267
  return {
454256
454268
  packageManager: "npm" /* NPM */,
454257
454269
  isGlobal: true,
@@ -457146,7 +457158,7 @@ import path97 from "node:path";
457146
457158
 
457147
457159
  // packages/cli/node_modules/tar/dist/esm/list.js
457148
457160
  import fs78 from "node:fs";
457149
- import { dirname as dirname22, parse as parse10 } from "path";
457161
+ import { dirname as dirname23, parse as parse10 } from "path";
457150
457162
 
457151
457163
  // packages/cli/node_modules/tar/dist/esm/options.js
457152
457164
  var argmap = /* @__PURE__ */ new Map([
@@ -458752,7 +458764,7 @@ var filesFilter = (opt, files) => {
458752
458764
  if (m2 !== void 0) {
458753
458765
  ret = m2;
458754
458766
  } else {
458755
- ret = mapHas(dirname22(file2), root);
458767
+ ret = mapHas(dirname23(file2), root);
458756
458768
  }
458757
458769
  }
458758
458770
  map3.set(file2, ret);
@@ -470365,10 +470377,10 @@ async function latestVersion(packageName, options2) {
470365
470377
  // packages/cli/src/ui/utils/updateCheck.ts
470366
470378
  var import_semver3 = __toESM(require_semver3(), 1);
470367
470379
  init_dist7();
470368
- import { fileURLToPath as fileURLToPath16 } from "node:url";
470380
+ import { fileURLToPath as fileURLToPath17 } from "node:url";
470369
470381
  import path114 from "node:path";
470370
- var __filename4 = fileURLToPath16(import.meta.url);
470371
- var __dirname10 = path114.dirname(__filename4);
470382
+ var __filename5 = fileURLToPath17(import.meta.url);
470383
+ var __dirname11 = path114.dirname(__filename5);
470372
470384
  function getBestAvailableUpdate(nightly, stable) {
470373
470385
  if (!nightly) return stable || null;
470374
470386
  if (!stable) return nightly || null;
@@ -470385,7 +470397,7 @@ async function checkForUpdates(settings) {
470385
470397
  if (process.env["DEV"] === "true") {
470386
470398
  return null;
470387
470399
  }
470388
- const packageJson2 = await getPackageJson(__dirname10);
470400
+ const packageJson2 = await getPackageJson(__dirname11);
470389
470401
  if (!packageJson2 || !packageJson2.name || !packageJson2.version) {
470390
470402
  return null;
470391
470403
  }
@@ -470442,7 +470454,7 @@ import { spawn as spawn10 } from "node:child_process";
470442
470454
  var spawnWrapper = spawn10;
470443
470455
 
470444
470456
  // packages/cli/src/utils/handleAutoUpdate.ts
470445
- function handleAutoUpdate(info2, settings, projectRoot, spawnFn = spawnWrapper) {
470457
+ async function handleAutoUpdate(info2, settings, projectRoot, spawnFn = spawnWrapper) {
470446
470458
  if (!info2) {
470447
470459
  return;
470448
470460
  }
@@ -470456,7 +470468,7 @@ Automatic update is not available in sandbox mode.`
470456
470468
  if (settings.merged.general?.disableUpdateNag) {
470457
470469
  return;
470458
470470
  }
470459
- const installationInfo = getInstallationInfo(
470471
+ const installationInfo = await getInstallationInfo(
470460
470472
  projectRoot,
470461
470473
  settings.merged.general?.disableAutoUpdate ?? false
470462
470474
  );
@@ -474123,18 +474135,18 @@ function ui(opts) {
474123
474135
  }
474124
474136
 
474125
474137
  // node_modules/escalade/sync/index.mjs
474126
- import { dirname as dirname23, resolve as resolve21 } from "path";
474138
+ import { dirname as dirname24, resolve as resolve21 } from "path";
474127
474139
  import { readdirSync as readdirSync4, statSync as statSync8 } from "fs";
474128
474140
  function sync_default(start2, callback) {
474129
474141
  let dir = resolve21(".", start2);
474130
474142
  let tmp, stats = statSync8(dir);
474131
474143
  if (!stats.isDirectory()) {
474132
- dir = dirname23(dir);
474144
+ dir = dirname24(dir);
474133
474145
  }
474134
474146
  while (true) {
474135
474147
  tmp = callback(dir, readdirSync4(dir));
474136
474148
  if (tmp) return resolve21(dir, tmp);
474137
- dir = dirname23(tmp = dir);
474149
+ dir = dirname24(tmp = dir);
474138
474150
  if (tmp === dir) break;
474139
474151
  }
474140
474152
  }
@@ -474142,8 +474154,8 @@ function sync_default(start2, callback) {
474142
474154
  // node_modules/yargs/lib/platform-shims/esm.mjs
474143
474155
  import { inspect as inspect5 } from "util";
474144
474156
  import { readFileSync as readFileSync18 } from "fs";
474145
- import { fileURLToPath as fileURLToPath17 } from "url";
474146
- import { basename as basename19, dirname as dirname24, extname as extname6, relative as relative8, resolve as resolve23 } from "path";
474157
+ import { fileURLToPath as fileURLToPath18 } from "url";
474158
+ import { basename as basename19, dirname as dirname25, extname as extname6, relative as relative8, resolve as resolve23 } from "path";
474147
474159
 
474148
474160
  // node_modules/y18n/build/lib/platform-shims/node.js
474149
474161
  import { readFileSync as readFileSync17, statSync as statSync9, writeFile as writeFile9 } from "fs";
@@ -474335,13 +474347,13 @@ var y18n_default = y18n2;
474335
474347
  // node_modules/yargs/lib/platform-shims/esm.mjs
474336
474348
  var REQUIRE_ERROR = "require is not supported by ESM";
474337
474349
  var REQUIRE_DIRECTORY_ERROR = "loading a directory of commands is not supported yet for ESM";
474338
- var __dirname11;
474350
+ var __dirname12;
474339
474351
  try {
474340
- __dirname11 = fileURLToPath17(import.meta.url);
474352
+ __dirname12 = fileURLToPath18(import.meta.url);
474341
474353
  } catch (e3) {
474342
- __dirname11 = process.cwd();
474354
+ __dirname12 = process.cwd();
474343
474355
  }
474344
- var mainFilename = __dirname11.substring(0, __dirname11.lastIndexOf("node_modules"));
474356
+ var mainFilename = __dirname12.substring(0, __dirname12.lastIndexOf("node_modules"));
474345
474357
  var esm_default3 = {
474346
474358
  assert: {
474347
474359
  notStrictEqual,
@@ -474361,7 +474373,7 @@ var esm_default3 = {
474361
474373
  Parser: lib_default,
474362
474374
  path: {
474363
474375
  basename: basename19,
474364
- dirname: dirname24,
474376
+ dirname: dirname25,
474365
474377
  extname: extname6,
474366
474378
  relative: relative8,
474367
474379
  resolve: resolve23
@@ -474386,7 +474398,7 @@ var esm_default3 = {
474386
474398
  return [...str].length;
474387
474399
  },
474388
474400
  y18n: y18n_default({
474389
- directory: resolve23(__dirname11, "../../../locales"),
474401
+ directory: resolve23(__dirname12, "../../../locales"),
474390
474402
  updateFiles: false
474391
474403
  })
474392
474404
  };
@@ -475046,10 +475058,10 @@ init_dist7();
475046
475058
  init_read_package_up();
475047
475059
 
475048
475060
  // packages/core/src/utils/version.ts
475049
- import { fileURLToPath as fileURLToPath18 } from "node:url";
475061
+ import { fileURLToPath as fileURLToPath19 } from "node:url";
475050
475062
  import path121 from "node:path";
475051
- var __filename5 = fileURLToPath18(import.meta.url);
475052
- var __dirname12 = path121.dirname(__filename5);
475063
+ var __filename6 = fileURLToPath19(import.meta.url);
475064
+ var __dirname13 = path121.dirname(__filename6);
475053
475065
 
475054
475066
  // packages/core/src/utils/debugLogger.ts
475055
475067
  import * as fs105 from "node:fs";
@@ -478900,11 +478912,11 @@ var linkCommand = {
478900
478912
  // packages/cli/src/commands/extensions/new.ts
478901
478913
  init_dist7();
478902
478914
  import { access as access4, cp, mkdir as mkdir10, readdir as readdir9, writeFile as writeFile10 } from "node:fs/promises";
478903
- import { join as join43, dirname as dirname27, basename as basename20 } from "node:path";
478904
- import { fileURLToPath as fileURLToPath19 } from "node:url";
478905
- var __filename6 = fileURLToPath19(import.meta.url);
478906
- var __dirname13 = dirname27(__filename6);
478907
- var EXAMPLES_PATH = join43(__dirname13, "examples");
478915
+ import { join as join43, dirname as dirname28, basename as basename20 } from "node:path";
478916
+ import { fileURLToPath as fileURLToPath20 } from "node:url";
478917
+ var __filename7 = fileURLToPath20(import.meta.url);
478918
+ var __dirname14 = dirname28(__filename7);
478919
+ var EXAMPLES_PATH = join43(__dirname14, "examples");
478908
478920
  async function pathExists2(path129) {
478909
478921
  try {
478910
478922
  await access4(path129);
@@ -479388,10 +479400,10 @@ var hooksCommand2 = {
479388
479400
  init_dist7();
479389
479401
  var import_command_exists = __toESM(require_command_exists2(), 1);
479390
479402
  import * as os30 from "node:os";
479391
- import { fileURLToPath as fileURLToPath20 } from "node:url";
479403
+ import { fileURLToPath as fileURLToPath21 } from "node:url";
479392
479404
  import path124 from "node:path";
479393
- var __filename7 = fileURLToPath20(import.meta.url);
479394
- var __dirname14 = path124.dirname(__filename7);
479405
+ var __filename8 = fileURLToPath21(import.meta.url);
479406
+ var __dirname15 = path124.dirname(__filename8);
479395
479407
  var VALID_SANDBOX_COMMANDS = [
479396
479408
  "docker",
479397
479409
  "podman",
@@ -479443,7 +479455,7 @@ function getSandboxCommand(sandbox) {
479443
479455
  async function loadSandboxConfig(settings, argv) {
479444
479456
  const sandboxOption = argv.sandbox ?? settings.tools?.sandbox;
479445
479457
  const command2 = getSandboxCommand(sandboxOption);
479446
- const packageJson2 = await getPackageJson(__dirname14);
479458
+ const packageJson2 = await getPackageJson(__dirname15);
479447
479459
  const image2 = process.env["GEMINI_SANDBOX_IMAGE"] ?? packageJson2?.config?.sandboxImageUri;
479448
479460
  return command2 && image2 ? { command: command2, image: image2 } : void 0;
479449
479461
  }
@@ -479690,7 +479702,7 @@ async function parseArguments2(settings) {
479690
479702
  if (settings?.tools?.enableHooks) {
479691
479703
  yargsInstance.command(hooksCommand2);
479692
479704
  }
479693
- yargsInstance.version(process58.env["CLI_VERSION"] || "0.24.0-termux").alias("v", "version").help().alias("h", "help").strict().demandCommand(0, 0).exitProcess(false);
479705
+ yargsInstance.version(process58.env["CLI_VERSION"] || "0.24.2-termux").alias("v", "version").help().alias("h", "help").strict().demandCommand(0, 0).exitProcess(false);
479694
479706
  yargsInstance.wrap(yargsInstance.terminalWidth());
479695
479707
  let result;
479696
479708
  try {
@@ -480066,7 +480078,7 @@ import { exec as exec4, execSync as execSync7, spawn as spawn11 } from "node:chi
480066
480078
  import os33 from "node:os";
480067
480079
  import path126 from "node:path";
480068
480080
  import fs109 from "node:fs";
480069
- import { fileURLToPath as fileURLToPath21 } from "node:url";
480081
+ import { fileURLToPath as fileURLToPath22 } from "node:url";
480070
480082
  init_dist7();
480071
480083
  import { promisify as promisify15 } from "node:util";
480072
480084
 
@@ -480242,7 +480254,7 @@ async function start_sandbox(config2, nodeArgs = [], cliConfig, cliArgs = []) {
480242
480254
  );
480243
480255
  }
480244
480256
  const profile = process.env["SEATBELT_PROFILE"] ??= "permissive-open";
480245
- let profileFile = fileURLToPath21(
480257
+ let profileFile = fileURLToPath22(
480246
480258
  new URL(`sandbox-macos-${profile}.sb`, import.meta.url)
480247
480259
  );
480248
480260
  if (!BUILTIN_SEATBELT_PROFILES.includes(profile)) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mmmbuto/gemini-cli-termux",
3
- "version": "0.24.1-termux",
3
+ "version": "0.24.2-termux",
4
4
  "engines": {
5
5
  "node": ">=20.0.0"
6
6
  },
@@ -14,7 +14,7 @@
14
14
  "url": "https://github.com/DioNanos/gemini-cli-termux.git"
15
15
  },
16
16
  "config": {
17
- "sandboxImageUri": "us-docker.pkg.dev/gemini-code-dev/gemini-cli/sandbox:0.24.0-nightly.20251227.37be16243"
17
+ "sandboxImageUri": "us-docker.pkg.dev/gemini-code-dev/gemini-cli/sandbox:0.24.2-termux"
18
18
  },
19
19
  "scripts": {
20
20
  "start": "crossenv NODE_ENV=development node scripts/start.js",