@mmmbuto/gemini-cli-termux 0.22.7-termux → 0.24.0-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 +17 -21
- package/bundle/docs/TERMUX.md +97 -0
- package/bundle/docs/architecture.md +80 -0
- package/bundle/docs/assets/connected_devtools.png +0 -0
- package/bundle/docs/assets/gemini-screenshot.png +0 -0
- package/bundle/docs/assets/release_patch.png +0 -0
- package/bundle/docs/assets/theme-ansi-light.png +0 -0
- package/bundle/docs/assets/theme-ansi.png +0 -0
- package/bundle/docs/assets/theme-atom-one.png +0 -0
- package/bundle/docs/assets/theme-ayu-light.png +0 -0
- package/bundle/docs/assets/theme-ayu.png +0 -0
- package/bundle/docs/assets/theme-custom.png +0 -0
- package/bundle/docs/assets/theme-default-light.png +0 -0
- package/bundle/docs/assets/theme-default.png +0 -0
- package/bundle/docs/assets/theme-dracula.png +0 -0
- package/bundle/docs/assets/theme-github-light.png +0 -0
- package/bundle/docs/assets/theme-github.png +0 -0
- package/bundle/docs/assets/theme-google-light.png +0 -0
- package/bundle/docs/assets/theme-xcode-light.png +0 -0
- package/bundle/docs/changelogs/index.md +592 -0
- package/bundle/docs/changelogs/latest.md +225 -0
- package/bundle/docs/changelogs/preview.md +129 -0
- package/bundle/docs/changelogs/releases.md +896 -0
- package/bundle/docs/cli/authentication.md +3 -0
- package/bundle/docs/cli/checkpointing.md +94 -0
- package/bundle/docs/cli/commands.md +354 -0
- package/bundle/docs/cli/configuration.md +792 -0
- package/bundle/docs/cli/context-memory.md +69 -0
- package/bundle/docs/cli/custom-commands.md +315 -0
- package/bundle/docs/cli/enterprise.md +565 -0
- package/bundle/docs/cli/gemini-ignore.md +71 -0
- package/bundle/docs/cli/gemini-md.md +108 -0
- package/bundle/docs/cli/generation-settings.md +210 -0
- package/bundle/docs/cli/headless.md +388 -0
- package/bundle/docs/cli/index.md +63 -0
- package/bundle/docs/cli/keyboard-shortcuts.md +143 -0
- package/bundle/docs/cli/model-routing.md +37 -0
- package/bundle/docs/cli/model.md +62 -0
- package/bundle/docs/cli/sandbox.md +171 -0
- package/bundle/docs/cli/session-management.md +158 -0
- package/bundle/docs/cli/settings.md +114 -0
- package/bundle/docs/cli/system-prompt.md +93 -0
- package/bundle/docs/cli/telemetry.md +791 -0
- package/bundle/docs/cli/themes.md +237 -0
- package/bundle/docs/cli/token-caching.md +20 -0
- package/bundle/docs/cli/trusted-folders.md +95 -0
- package/bundle/docs/cli/tutorials.md +83 -0
- package/bundle/docs/cli/uninstall.md +47 -0
- package/bundle/docs/core/index.md +101 -0
- package/bundle/docs/core/memport.md +244 -0
- package/bundle/docs/core/policy-engine.md +267 -0
- package/bundle/docs/core/tools-api.md +131 -0
- package/bundle/docs/examples/proxy-script.md +83 -0
- package/bundle/docs/extensions/extension-releasing.md +183 -0
- package/bundle/docs/extensions/getting-started-extensions.md +245 -0
- package/bundle/docs/extensions/index.md +293 -0
- package/bundle/docs/faq.md +154 -0
- package/bundle/docs/get-started/authentication.md +321 -0
- package/bundle/docs/get-started/configuration-v1.md +888 -0
- package/bundle/docs/get-started/configuration.md +1511 -0
- package/bundle/docs/get-started/deployment.md +143 -0
- package/bundle/docs/get-started/examples.md +219 -0
- package/bundle/docs/get-started/gemini-3.md +116 -0
- package/bundle/docs/get-started/index.md +71 -0
- package/bundle/docs/get-started/installation.md +141 -0
- package/bundle/docs/hooks/best-practices.md +806 -0
- package/bundle/docs/hooks/index.md +665 -0
- package/bundle/docs/hooks/reference.md +168 -0
- package/bundle/docs/hooks/writing-hooks.md +1026 -0
- package/bundle/docs/ide-integration/ide-companion-spec.md +267 -0
- package/bundle/docs/ide-integration/index.md +202 -0
- package/bundle/docs/index.md +147 -0
- package/bundle/docs/integration-tests.md +211 -0
- package/bundle/docs/issue-and-pr-automation.md +134 -0
- package/bundle/docs/local-development.md +128 -0
- package/bundle/docs/mermaid/context.mmd +103 -0
- package/bundle/docs/mermaid/render-path.mmd +64 -0
- package/bundle/docs/npm.md +62 -0
- package/bundle/docs/patches/CONTEXT_MEMORY_COMPARISON.md +306 -0
- package/bundle/docs/patches/MERGE_TO_0.24_ANALYSIS.md +321 -0
- package/bundle/docs/patches/README.md +62 -0
- package/bundle/docs/quota-and-pricing.md +158 -0
- package/bundle/docs/release-confidence.md +164 -0
- package/bundle/docs/releases.md +540 -0
- package/bundle/docs/sidebar.json +297 -0
- package/bundle/docs/termux-api/COMMANDS.md +592 -0
- package/bundle/docs/termux-api/DISCOVERY_SETUP.md +670 -0
- package/bundle/docs/termux-api/EXECUTION_PLAN.md +532 -0
- package/bundle/docs/termux-api/MERGE_STRATEGY.md +325 -0
- package/bundle/docs/termux-api/PATCHES.md +483 -0
- package/bundle/docs/termux-api/README.md +416 -0
- package/bundle/docs/tools/file-system.md +217 -0
- package/bundle/docs/tools/index.md +95 -0
- package/bundle/docs/tools/mcp-server.md +1044 -0
- package/bundle/docs/tools/memory.md +54 -0
- package/bundle/docs/tools/shell.md +260 -0
- package/bundle/docs/tools/todos.md +57 -0
- package/bundle/docs/tools/web-fetch.md +59 -0
- package/bundle/docs/tools/web-search.md +42 -0
- package/bundle/docs/tos-privacy.md +96 -0
- package/bundle/docs/troubleshooting.md +158 -0
- package/bundle/gemini.js +8901 -6534
- package/package.json +10 -8
|
@@ -0,0 +1,532 @@
|
|
|
1
|
+
# Execution Plan - Sonnet 4.5
|
|
2
|
+
|
|
3
|
+
**Project**: gemini-cli-termux **Author**: DioNanos **Date**: 2025-12-17
|
|
4
|
+
**Status**: AWAITING APPROVAL
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
Execution plan to implement the patches and improvements described in the
|
|
11
|
+
documentation. To be executed with Sonnet 4.5 ONLY after approval.
|
|
12
|
+
|
|
13
|
+
**IMPORTANT**: Local changes only, NO PUSH.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Prerequisites
|
|
18
|
+
|
|
19
|
+
Before starting:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
cd ~/Dev/gemini-cli-termux
|
|
23
|
+
git status # Verify clean state
|
|
24
|
+
git branch # Verify current branch
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Task List
|
|
30
|
+
|
|
31
|
+
### PHASE 1: Installation Improvements
|
|
32
|
+
|
|
33
|
+
#### Task 1.1: Create postinstall script
|
|
34
|
+
|
|
35
|
+
**File**: `scripts/postinstall.js` **Action**: CREATE **Priority**: HIGH
|
|
36
|
+
|
|
37
|
+
```javascript
|
|
38
|
+
// scripts/postinstall.js
|
|
39
|
+
const os = require('os');
|
|
40
|
+
|
|
41
|
+
// Only show message on Termux/Android
|
|
42
|
+
if (
|
|
43
|
+
os.platform() === 'android' ||
|
|
44
|
+
process.env.TERMUX_VERSION ||
|
|
45
|
+
(process.env.PREFIX && process.env.PREFIX.includes('com.termux'))
|
|
46
|
+
) {
|
|
47
|
+
console.log('');
|
|
48
|
+
console.log(
|
|
49
|
+
'╔══════════════════════════════════════════════════════════════╗',
|
|
50
|
+
);
|
|
51
|
+
console.log(
|
|
52
|
+
'║ gemini-cli-termux installed successfully on Termux! ║',
|
|
53
|
+
);
|
|
54
|
+
console.log(
|
|
55
|
+
'║ ║',
|
|
56
|
+
);
|
|
57
|
+
console.log(
|
|
58
|
+
'║ Note: Native module warnings above are EXPECTED. ║',
|
|
59
|
+
);
|
|
60
|
+
console.log(
|
|
61
|
+
'║ The CLI works with reduced PTY functionality. ║',
|
|
62
|
+
);
|
|
63
|
+
console.log(
|
|
64
|
+
'║ ║',
|
|
65
|
+
);
|
|
66
|
+
console.log(
|
|
67
|
+
'║ Quick start: gemini --version ║',
|
|
68
|
+
);
|
|
69
|
+
console.log(
|
|
70
|
+
'║ First run: gemini ║',
|
|
71
|
+
);
|
|
72
|
+
console.log(
|
|
73
|
+
'╚══════════════════════════════════════════════════════════════╝',
|
|
74
|
+
);
|
|
75
|
+
console.log('');
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
#### Task 1.2: Update package.json with postinstall
|
|
82
|
+
|
|
83
|
+
**File**: `package.json` **Action**: EDIT **Priority**: HIGH
|
|
84
|
+
|
|
85
|
+
Add in `scripts`:
|
|
86
|
+
|
|
87
|
+
```json
|
|
88
|
+
"postinstall": "node scripts/postinstall.js || true"
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
#### Task 1.3: Create termux-setup.sh helper
|
|
94
|
+
|
|
95
|
+
**File**: `scripts/termux-setup.sh` **Action**: CREATE **Priority**: MEDIUM
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
#!/data/data/com.termux/files/usr/bin/bash
|
|
99
|
+
|
|
100
|
+
set -e
|
|
101
|
+
|
|
102
|
+
echo "=== Gemini CLI Termux Setup ==="
|
|
103
|
+
echo ""
|
|
104
|
+
|
|
105
|
+
# Check Node version
|
|
106
|
+
NODE_VERSION=$(node -v 2>/dev/null | cut -d'v' -f2 | cut -d'.' -f1)
|
|
107
|
+
if [ -z "$NODE_VERSION" ] || [ "$NODE_VERSION" -lt 20 ]; then
|
|
108
|
+
echo "❌ Error: Node.js 20+ required"
|
|
109
|
+
echo " Install with: pkg install nodejs-lts"
|
|
110
|
+
exit 1
|
|
111
|
+
fi
|
|
112
|
+
echo "✓ Node.js version: $(node -v)"
|
|
113
|
+
|
|
114
|
+
# Check if in project directory
|
|
115
|
+
if [ ! -f "package.json" ]; then
|
|
116
|
+
echo "❌ Error: Run this script from gemini-cli-termux root directory"
|
|
117
|
+
exit 1
|
|
118
|
+
fi
|
|
119
|
+
|
|
120
|
+
# Install dependencies (suppress optional warnings)
|
|
121
|
+
echo ""
|
|
122
|
+
echo "Installing dependencies..."
|
|
123
|
+
npm install --ignore-optional --ignore-scripts 2>&1 | grep -v "npm warn" || true
|
|
124
|
+
|
|
125
|
+
# Build
|
|
126
|
+
echo ""
|
|
127
|
+
echo "Building bundle..."
|
|
128
|
+
npm run build 2>&1
|
|
129
|
+
npm run bundle 2>&1
|
|
130
|
+
|
|
131
|
+
echo ""
|
|
132
|
+
echo "=== Setup Complete ==="
|
|
133
|
+
echo ""
|
|
134
|
+
echo "Run with: node bundle/gemini.js"
|
|
135
|
+
echo "Or link globally: npm link"
|
|
136
|
+
echo ""
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
#### Task 1.4: Update Makefile
|
|
142
|
+
|
|
143
|
+
**File**: `Makefile` **Action**: EDIT **Priority**: MEDIUM
|
|
144
|
+
|
|
145
|
+
Add target:
|
|
146
|
+
|
|
147
|
+
```makefile
|
|
148
|
+
# Termux-specific install and build
|
|
149
|
+
termux-install:
|
|
150
|
+
@echo "=== Installing for Termux ==="
|
|
151
|
+
npm install --ignore-optional --ignore-scripts
|
|
152
|
+
npm run build
|
|
153
|
+
npm run bundle
|
|
154
|
+
@echo ""
|
|
155
|
+
@echo "Done! Run: node bundle/gemini.js"
|
|
156
|
+
|
|
157
|
+
termux-clean:
|
|
158
|
+
rm -rf node_modules
|
|
159
|
+
rm -f bundle/gemini.js
|
|
160
|
+
|
|
161
|
+
.PHONY: termux-install termux-clean
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
### PHASE 2: Termux Detection Utility
|
|
167
|
+
|
|
168
|
+
#### Task 2.1: Create termux-detect.ts
|
|
169
|
+
|
|
170
|
+
**File**: `packages/core/src/utils/termux-detect.ts` **Action**: CREATE
|
|
171
|
+
**Priority**: MEDIUM
|
|
172
|
+
|
|
173
|
+
```typescript
|
|
174
|
+
/**
|
|
175
|
+
* @license
|
|
176
|
+
* Copyright 2025 Google LLC
|
|
177
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
178
|
+
*/
|
|
179
|
+
|
|
180
|
+
import { execSync } from 'node:child_process';
|
|
181
|
+
|
|
182
|
+
export interface TermuxEnvironment {
|
|
183
|
+
isTermux: boolean;
|
|
184
|
+
hasTermuxApi: boolean;
|
|
185
|
+
apiVersion?: string;
|
|
186
|
+
prefix: string;
|
|
187
|
+
availableCommands: string[];
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Detect if running in Termux environment
|
|
192
|
+
*/
|
|
193
|
+
export function isTermux(): boolean {
|
|
194
|
+
return (
|
|
195
|
+
process.platform === 'android' ||
|
|
196
|
+
!!process.env.TERMUX_VERSION ||
|
|
197
|
+
!!(process.env.PREFIX && process.env.PREFIX.includes('com.termux'))
|
|
198
|
+
);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Detect full Termux environment including API availability
|
|
203
|
+
*/
|
|
204
|
+
export function detectTermuxEnvironment(): TermuxEnvironment {
|
|
205
|
+
if (!isTermux()) {
|
|
206
|
+
return {
|
|
207
|
+
isTermux: false,
|
|
208
|
+
hasTermuxApi: false,
|
|
209
|
+
prefix: '',
|
|
210
|
+
availableCommands: [],
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
let hasTermuxApi = false;
|
|
215
|
+
let apiVersion: string | undefined;
|
|
216
|
+
const availableCommands: string[] = [];
|
|
217
|
+
|
|
218
|
+
try {
|
|
219
|
+
// Check if termux-api is installed
|
|
220
|
+
execSync('which termux-battery-status', { stdio: 'ignore' });
|
|
221
|
+
hasTermuxApi = true;
|
|
222
|
+
|
|
223
|
+
// Try to get version
|
|
224
|
+
try {
|
|
225
|
+
const result = execSync(
|
|
226
|
+
'pkg show termux-api 2>/dev/null | grep Version || echo ""',
|
|
227
|
+
{ encoding: 'utf-8' },
|
|
228
|
+
);
|
|
229
|
+
const match = result.match(/Version:\s*(.+)/);
|
|
230
|
+
if (match) {
|
|
231
|
+
apiVersion = match[1].trim();
|
|
232
|
+
}
|
|
233
|
+
} catch {
|
|
234
|
+
// Version detection failed, continue
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// Detect available commands
|
|
238
|
+
const commands = [
|
|
239
|
+
'termux-battery-status',
|
|
240
|
+
'termux-clipboard-get',
|
|
241
|
+
'termux-clipboard-set',
|
|
242
|
+
'termux-toast',
|
|
243
|
+
'termux-notification',
|
|
244
|
+
'termux-tts-speak',
|
|
245
|
+
'termux-vibrate',
|
|
246
|
+
'termux-torch',
|
|
247
|
+
'termux-location',
|
|
248
|
+
'termux-wifi-connectioninfo',
|
|
249
|
+
'termux-camera-info',
|
|
250
|
+
'termux-sensor',
|
|
251
|
+
'termux-dialog',
|
|
252
|
+
];
|
|
253
|
+
|
|
254
|
+
for (const cmd of commands) {
|
|
255
|
+
try {
|
|
256
|
+
execSync(`which ${cmd}`, { stdio: 'ignore' });
|
|
257
|
+
availableCommands.push(cmd);
|
|
258
|
+
} catch {
|
|
259
|
+
// Command not available
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
} catch {
|
|
263
|
+
// termux-api not installed
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
return {
|
|
267
|
+
isTermux: true,
|
|
268
|
+
hasTermuxApi,
|
|
269
|
+
apiVersion,
|
|
270
|
+
prefix: process.env.PREFIX || '/data/data/com.termux/files/usr',
|
|
271
|
+
availableCommands,
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
---
|
|
277
|
+
|
|
278
|
+
#### Task 2.2: Export termux-detect from core index
|
|
279
|
+
|
|
280
|
+
**File**: `packages/core/src/index.ts` **Action**: EDIT **Priority**: MEDIUM
|
|
281
|
+
|
|
282
|
+
Add export:
|
|
283
|
+
|
|
284
|
+
```typescript
|
|
285
|
+
export * from './utils/termux-detect.js';
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
---
|
|
289
|
+
|
|
290
|
+
### PHASE 3: Punycode Warning Suppression
|
|
291
|
+
|
|
292
|
+
#### Task 3.1: Update esbuild banner
|
|
293
|
+
|
|
294
|
+
**File**: `esbuild.config.js` **Action**: EDIT **Priority**: LOW
|
|
295
|
+
|
|
296
|
+
Modify JS banner to include:
|
|
297
|
+
|
|
298
|
+
```javascript
|
|
299
|
+
banner: {
|
|
300
|
+
js: `import { createRequire } from 'module'; const require = createRequire(import.meta.url); globalThis.__filename = require('url').fileURLToPath(import.meta.url); globalThis.__dirname = require('path').dirname(globalThis.__filename);
|
|
301
|
+
// Termux compatibility: clipboardy expects TERMUX__PREFIX but Termux sets PREFIX
|
|
302
|
+
if (process.platform === 'android' && process.env.PREFIX && !process.env.TERMUX__PREFIX) { process.env.TERMUX__PREFIX = process.env.PREFIX; }
|
|
303
|
+
// Suppress punycode deprecation warning on Termux
|
|
304
|
+
if (process.platform === 'android') {
|
|
305
|
+
const origEmit = process.emit;
|
|
306
|
+
process.emit = function(name, data) {
|
|
307
|
+
if (name === 'warning' && data && data.name === 'DeprecationWarning' && data.message && data.message.includes('punycode')) return false;
|
|
308
|
+
return origEmit.apply(process, arguments);
|
|
309
|
+
};
|
|
310
|
+
}`,
|
|
311
|
+
},
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
---
|
|
315
|
+
|
|
316
|
+
### PHASE 4: Tool Discovery Scripts (User-space)
|
|
317
|
+
|
|
318
|
+
#### Task 4.1: Create discovery.sh in scripts/termux-tools/
|
|
319
|
+
|
|
320
|
+
**File**: `scripts/termux-tools/discovery.sh` **Action**: CREATE **Priority**:
|
|
321
|
+
MEDIUM
|
|
322
|
+
|
|
323
|
+
(Content already defined in DISCOVERY_SETUP.md)
|
|
324
|
+
|
|
325
|
+
---
|
|
326
|
+
|
|
327
|
+
#### Task 4.2: Create call.sh in scripts/termux-tools/
|
|
328
|
+
|
|
329
|
+
**File**: `scripts/termux-tools/call.sh` **Action**: CREATE **Priority**: MEDIUM
|
|
330
|
+
|
|
331
|
+
(Content already defined in DISCOVERY_SETUP.md)
|
|
332
|
+
|
|
333
|
+
---
|
|
334
|
+
|
|
335
|
+
### PHASE 5: Documentation
|
|
336
|
+
|
|
337
|
+
#### Task 5.1: Update main README.md
|
|
338
|
+
|
|
339
|
+
**File**: `README.md` **Action**: EDIT **Priority**: HIGH
|
|
340
|
+
|
|
341
|
+
Add Termux-API section:
|
|
342
|
+
|
|
343
|
+
```markdown
|
|
344
|
+
## Termux-API Integration (New!)
|
|
345
|
+
|
|
346
|
+
This fork supports integration with Termux-API commands for Android device
|
|
347
|
+
access.
|
|
348
|
+
|
|
349
|
+
See [docs/termux-api/](./docs/termux-api/) for:
|
|
350
|
+
|
|
351
|
+
- Integration plan and architecture
|
|
352
|
+
- Complete command reference
|
|
353
|
+
- Tool discovery setup guide
|
|
354
|
+
- Patch documentation
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
---
|
|
358
|
+
|
|
359
|
+
#### Task 5.2: Update docs/TERMUX.md
|
|
360
|
+
|
|
361
|
+
**File**: `docs/TERMUX.md` **Action**: EDIT **Priority**: MEDIUM
|
|
362
|
+
|
|
363
|
+
Add Termux-API section:
|
|
364
|
+
|
|
365
|
+
````markdown
|
|
366
|
+
## Termux-API Support (Optional)
|
|
367
|
+
|
|
368
|
+
Enable access to Android hardware and APIs:
|
|
369
|
+
|
|
370
|
+
1. Install Termux-API package:
|
|
371
|
+
```bash
|
|
372
|
+
pkg install termux-api jq
|
|
373
|
+
```
|
|
374
|
+
````
|
|
375
|
+
|
|
376
|
+
2. Install Termux:API app from F-Droid
|
|
377
|
+
|
|
378
|
+
3. Setup tool discovery (optional):
|
|
379
|
+
|
|
380
|
+
```bash
|
|
381
|
+
# Copy scripts to config
|
|
382
|
+
mkdir -p ~/.config/gemini/termux-tools
|
|
383
|
+
cp scripts/termux-tools/*.sh ~/.config/gemini/termux-tools/
|
|
384
|
+
chmod +x ~/.config/gemini/termux-tools/*.sh
|
|
385
|
+
|
|
386
|
+
# Configure in settings.json
|
|
387
|
+
echo '{"tool_discovery_command": "bash ~/.config/gemini/termux-tools/discovery.sh", "tool_call_command": "bash ~/.config/gemini/termux-tools/call.sh"}' > ~/.config/gemini/settings.json
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
4. Test:
|
|
391
|
+
```bash
|
|
392
|
+
gemini "What's my battery status?"
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
See [docs/termux-api/](./docs/termux-api/) for complete documentation.
|
|
396
|
+
|
|
397
|
+
````
|
|
398
|
+
|
|
399
|
+
---
|
|
400
|
+
|
|
401
|
+
#### Task 5.3: Update docs/patches/README.md
|
|
402
|
+
**File**: `docs/patches/README.md`
|
|
403
|
+
**Action**: EDIT
|
|
404
|
+
**Priority**: LOW
|
|
405
|
+
|
|
406
|
+
Update version and add new patches:
|
|
407
|
+
```markdown
|
|
408
|
+
# Termux Patches (0.22.0-termux)
|
|
409
|
+
|
|
410
|
+
Minimal changes to run `gemini-cli` on Android/Termux ARM64 without native deps.
|
|
411
|
+
|
|
412
|
+
## Patch List
|
|
413
|
+
|
|
414
|
+
1. **Clipboard (TERMUX__PREFIX)** – On Termux set `TERMUX__PREFIX` from
|
|
415
|
+
`$PREFIX` so clipboardy detects Termux correctly.
|
|
416
|
+
2. **Optional native modules** – Leave `node-pty`, `keytar`, `tree-sitter-bash`
|
|
417
|
+
in `optionalDependencies`; build failures are tolerated.
|
|
418
|
+
3. **Core exports** – `packages/core/src/index.ts` re-exports stdio utilities.
|
|
419
|
+
4. **Bundle** – Prebuilt `bundle/gemini.js` shipped in npm package.
|
|
420
|
+
5. **is-in-ci override** – Prevents ink from detecting Termux as CI.
|
|
421
|
+
6. **Punycode warning** – Suppresses deprecation warning on Termux.
|
|
422
|
+
7. **Termux detection** – `packages/core/src/utils/termux-detect.ts` utility.
|
|
423
|
+
8. **Postinstall message** – Clear success message on Termux install.
|
|
424
|
+
|
|
425
|
+
## New in 0.22.0
|
|
426
|
+
|
|
427
|
+
- Termux-API tool discovery support
|
|
428
|
+
- Improved installation experience
|
|
429
|
+
- Helper scripts for build from source
|
|
430
|
+
|
|
431
|
+
**Version**: 0.22.0-termux
|
|
432
|
+
````
|
|
433
|
+
|
|
434
|
+
---
|
|
435
|
+
|
|
436
|
+
## Execution Order
|
|
437
|
+
|
|
438
|
+
```
|
|
439
|
+
PHASE 1 (Installation) - High Priority
|
|
440
|
+
├── 1.1 scripts/postinstall.js [CREATE]
|
|
441
|
+
├── 1.2 package.json [EDIT - postinstall]
|
|
442
|
+
├── 1.3 scripts/termux-setup.sh [CREATE]
|
|
443
|
+
└── 1.4 Makefile [EDIT - termux targets]
|
|
444
|
+
|
|
445
|
+
PHASE 2 (Detection) - Medium Priority
|
|
446
|
+
├── 2.1 packages/core/src/utils/termux-detect.ts [CREATE]
|
|
447
|
+
└── 2.2 packages/core/src/index.ts [EDIT - export]
|
|
448
|
+
|
|
449
|
+
PHASE 3 (Warning) - Low Priority
|
|
450
|
+
└── 3.1 esbuild.config.js [EDIT - banner]
|
|
451
|
+
|
|
452
|
+
PHASE 4 (Discovery Scripts) - Medium Priority
|
|
453
|
+
├── 4.1 scripts/termux-tools/discovery.sh [CREATE]
|
|
454
|
+
└── 4.2 scripts/termux-tools/call.sh [CREATE]
|
|
455
|
+
|
|
456
|
+
PHASE 5 (Docs) - High Priority
|
|
457
|
+
├── 5.1 README.md [EDIT]
|
|
458
|
+
├── 5.2 docs/TERMUX.md [EDIT]
|
|
459
|
+
└── 5.3 docs/patches/README.md [EDIT]
|
|
460
|
+
```
|
|
461
|
+
|
|
462
|
+
---
|
|
463
|
+
|
|
464
|
+
## Post-Execution Verification
|
|
465
|
+
|
|
466
|
+
```bash
|
|
467
|
+
# 1. Build test
|
|
468
|
+
npm install --ignore-optional --ignore-scripts
|
|
469
|
+
npm run build
|
|
470
|
+
npm run bundle
|
|
471
|
+
|
|
472
|
+
# 2. Version check
|
|
473
|
+
node bundle/gemini.js --version
|
|
474
|
+
|
|
475
|
+
# 3. Termux detection (if on Termux)
|
|
476
|
+
node -e "const {isTermux} = require('./packages/core/dist/utils/termux-detect.js'); console.log('isTermux:', isTermux())"
|
|
477
|
+
|
|
478
|
+
# 4. Discovery test (if configured)
|
|
479
|
+
bash scripts/termux-tools/discovery.sh | jq '.[] | .name' | head -5
|
|
480
|
+
|
|
481
|
+
# 5. Git status (NO PUSH)
|
|
482
|
+
git status
|
|
483
|
+
git diff --stat
|
|
484
|
+
```
|
|
485
|
+
|
|
486
|
+
---
|
|
487
|
+
|
|
488
|
+
## Commit Message (when approved)
|
|
489
|
+
|
|
490
|
+
```
|
|
491
|
+
feat(termux): improve installation and add Termux-API support
|
|
492
|
+
|
|
493
|
+
- Add postinstall script with clear success message for Termux
|
|
494
|
+
- Add termux-setup.sh helper for build from source
|
|
495
|
+
- Add Makefile targets for Termux install
|
|
496
|
+
- Add termux-detect.ts utility for environment detection
|
|
497
|
+
- Add punycode warning suppression on Android
|
|
498
|
+
- Add Tool Discovery scripts for Termux-API integration
|
|
499
|
+
- Update documentation
|
|
500
|
+
|
|
501
|
+
Fixes #XX
|
|
502
|
+
```
|
|
503
|
+
|
|
504
|
+
---
|
|
505
|
+
|
|
506
|
+
### PHASE 6: Merge Automation
|
|
507
|
+
|
|
508
|
+
#### Task 6.1: Create check-termux-patches.sh
|
|
509
|
+
|
|
510
|
+
**File**: `scripts/check-termux-patches.sh` **Action**: CREATE **Priority**:
|
|
511
|
+
HIGH
|
|
512
|
+
|
|
513
|
+
Script to verify that all patches are intact after upstream merge. (See
|
|
514
|
+
MERGE_STRATEGY.md for complete content)
|
|
515
|
+
|
|
516
|
+
---
|
|
517
|
+
|
|
518
|
+
## Notes for Sonnet 4.5
|
|
519
|
+
|
|
520
|
+
1. Execute tasks in PHASE order
|
|
521
|
+
2. Verify build after each PHASE
|
|
522
|
+
3. DO NOT execute git push
|
|
523
|
+
4. Report any compilation errors
|
|
524
|
+
5. All TypeScript files must pass typecheck
|
|
525
|
+
6. All patches must be easily re-applicable after upstream sync
|
|
526
|
+
7. Use `// TERMUX PATCH:` comments to identify modifications
|
|
527
|
+
|
|
528
|
+
---
|
|
529
|
+
|
|
530
|
+
**STATUS**: Awaiting DAG approval
|
|
531
|
+
|
|
532
|
+
_Author: DioNanos_
|