@mmmbuto/gemini-cli-termux 0.42.0-termux → 0.46.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.
Files changed (79) hide show
  1. package/README.md +22 -2
  2. package/bundle/builtin/antigravity-support/SKILL.md +58 -0
  3. package/bundle/{chunk-BF6DCDLJ.js → chunk-4TSWR3AN.js} +145 -55
  4. package/bundle/{chunk-PL5MCDGY.js → chunk-6HI7VNOG.js} +55 -70
  5. package/bundle/{chunk-6PXDEURC.js → chunk-7QZTHDKK.js} +2 -4
  6. package/bundle/{chunk-ORXUJRZC.js → chunk-B7I47N5E.js} +3 -3
  7. package/bundle/{chunk-EHTAR2YP.js → chunk-G2G6HEZZ.js} +1 -1
  8. package/bundle/{chunk-LX6GOGBA.js → chunk-IB4Q6NBY.js} +123186 -73766
  9. package/bundle/{chunk-MP2YMAMR.js → chunk-IT3YFQ3I.js} +1 -1
  10. package/bundle/{chunk-RJTRUG2J.js → chunk-TUDYL3X4.js} +29 -5
  11. package/bundle/{chunk-A6KCGXPK.js → chunk-WUVOS6TV.js} +13 -6
  12. package/bundle/{chunk-SLMD2AMF.js → chunk-YGU42N5I.js} +847 -655
  13. package/bundle/{cleanup-RTDYF5DD.js → cleanup-GEP2OOHM.js} +4 -5
  14. package/bundle/{devtools-ZLHMA45S.js → devtools-V7NE4CQA.js} +1 -1
  15. package/bundle/{devtoolsService-SKRXJOXW.js → devtoolsService-EVM2JJLB.js} +5 -6
  16. package/bundle/{dist-B3HBIK36.js → dist-R3LOFA4X.js} +331 -285
  17. package/bundle/docs/changelogs/index.md +59 -0
  18. package/bundle/docs/changelogs/latest.md +201 -167
  19. package/bundle/docs/changelogs/preview.md +45 -102
  20. package/bundle/docs/cli/auto-memory.md +61 -40
  21. package/bundle/docs/cli/gemini-md.md +0 -2
  22. package/bundle/docs/cli/plan-mode.md +0 -1
  23. package/bundle/docs/cli/settings.md +19 -19
  24. package/bundle/docs/cli/tutorials/memory-management.md +3 -3
  25. package/bundle/docs/extensions/reference.md +16 -0
  26. package/bundle/docs/extensions/releasing.md +58 -24
  27. package/bundle/docs/extensions/writing-extensions.md +7 -0
  28. package/bundle/docs/get-started/installation.mdx +2 -2
  29. package/bundle/docs/issue-and-pr-automation.md +29 -1
  30. package/bundle/docs/reference/commands.md +0 -3
  31. package/bundle/docs/reference/configuration.md +173 -78
  32. package/bundle/docs/reference/keyboard-shortcuts.md +23 -0
  33. package/bundle/docs/reference/tools.md +0 -2
  34. package/bundle/docs/tools/mcp-server.md +24 -3
  35. package/bundle/docs/tools/memory.md +10 -13
  36. package/bundle/examples/custom-commands/commands/fs/grep-code.toml +6 -0
  37. package/bundle/examples/custom-commands/gemini-extension.json +4 -0
  38. package/bundle/examples/exclude-tools/gemini-extension.json +5 -0
  39. package/bundle/examples/hooks/gemini-extension.json +4 -0
  40. package/bundle/examples/hooks/hooks/hooks.json +14 -0
  41. package/bundle/examples/hooks/scripts/on-start.js +8 -0
  42. package/bundle/examples/mcp-server/README.md +35 -0
  43. package/bundle/examples/mcp-server/example.js +60 -0
  44. package/bundle/examples/mcp-server/gemini-extension.json +11 -0
  45. package/bundle/examples/mcp-server/package.json +11 -0
  46. package/bundle/examples/policies/README.md +41 -0
  47. package/bundle/examples/policies/gemini-extension.json +5 -0
  48. package/bundle/examples/policies/policies/policies.toml +28 -0
  49. package/bundle/examples/skills/gemini-extension.json +4 -0
  50. package/bundle/examples/skills/skills/greeter/SKILL.md +7 -0
  51. package/bundle/examples/themes-example/README.md +31 -0
  52. package/bundle/examples/themes-example/gemini-extension.json +29 -0
  53. package/bundle/{gemini-NJWIVDFH.js → gemini-SGAFQX2R.js} +450 -297
  54. package/bundle/gemini.js +18 -13
  55. package/bundle/{dist-T73EYRDX.js → https-proxy-agent-AVGR4LHR.js} +8 -3
  56. package/bundle/{interactiveCli-QHKQZZJU.js → interactiveCli-MEEXSI2X.js} +1922 -1675
  57. package/bundle/{liteRtServerManager-USDJEPCM.js → liteRtServerManager-3EZO3JZ5.js} +6 -7
  58. package/bundle/{oauth2-provider-ARATJNEE.js → oauth2-provider-AJMTKEL6.js} +8 -10
  59. package/bundle/package.json +1 -1
  60. package/bundle/policies/plan.toml +1 -1
  61. package/bundle/policies/write.toml +0 -7
  62. package/bundle/src-LG4OHBW7.js +343 -0
  63. package/bundle/{start-IWR7MCIR.js → start-YW7YIVR7.js} +8 -9
  64. package/bundle/worker/worker-entry.js +7863 -0
  65. package/package.json +3 -3
  66. package/bundle/chunk-2X6HJV2G.js +0 -52710
  67. package/bundle/memoryDiscovery-EEGUKQ5C.js +0 -29
  68. package/bundle/node_modules/@google/gemini-cli-devtools/dist/client/main.js +0 -96
  69. package/bundle/node_modules/@google/gemini-cli-devtools/dist/src/_client-assets.d.ts +0 -7
  70. package/bundle/node_modules/@google/gemini-cli-devtools/dist/src/_client-assets.js +0 -9
  71. package/bundle/node_modules/@google/gemini-cli-devtools/dist/src/_client-assets.js.map +0 -1
  72. package/bundle/node_modules/@google/gemini-cli-devtools/dist/src/index.d.ts +0 -48
  73. package/bundle/node_modules/@google/gemini-cli-devtools/dist/src/index.js +0 -333
  74. package/bundle/node_modules/@google/gemini-cli-devtools/dist/src/index.js.map +0 -1
  75. package/bundle/node_modules/@google/gemini-cli-devtools/dist/src/types.d.ts +0 -36
  76. package/bundle/node_modules/@google/gemini-cli-devtools/dist/src/types.js +0 -7
  77. package/bundle/node_modules/@google/gemini-cli-devtools/dist/src/types.js.map +0 -1
  78. package/bundle/node_modules/@google/gemini-cli-devtools/package.json +0 -33
  79. package/bundle/policies/memory-manager.toml +0 -20
@@ -1 +0,0 @@
1
- {"version":3,"file":"_client-assets.js","sourceRoot":"","sources":["../../src/_client-assets.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,oDAAoD;AACpD,MAAM,CAAC,MAAM,UAAU,GAAG,ynBAAynB,CAAC;AACppB,MAAM,CAAC,MAAM,SAAS,GAAG,k28NAAk28N,CAAC"}
@@ -1,48 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import { EventEmitter } from 'node:events';
7
- import { type WebSocket } from 'ws';
8
- import type { NetworkLog, ConsoleLogPayload } from './types.js';
9
- export type { NetworkLog, ConsoleLogPayload, InspectorConsoleLog, } from './types.js';
10
- interface IncomingNetworkPayload extends Partial<NetworkLog> {
11
- chunk?: {
12
- index: number;
13
- data: string;
14
- timestamp: number;
15
- };
16
- }
17
- export interface SessionInfo {
18
- sessionId: string;
19
- ws: WebSocket;
20
- lastPing: number;
21
- }
22
- /**
23
- * DevTools Viewer
24
- *
25
- * Receives logs via WebSocket from CLI sessions.
26
- */
27
- export declare class DevTools extends EventEmitter {
28
- private static instance;
29
- private logs;
30
- private consoleLogs;
31
- private server;
32
- private wss;
33
- private sessions;
34
- private heartbeatTimer;
35
- private port;
36
- private static readonly DEFAULT_PORT;
37
- private static readonly MAX_PORT_RETRIES;
38
- private constructor();
39
- static getInstance(): DevTools;
40
- addInternalConsoleLog(payload: ConsoleLogPayload, sessionId?: string, timestamp?: number): void;
41
- addInternalNetworkLog(payload: IncomingNetworkPayload, sessionId?: string, timestamp?: number): void;
42
- getUrl(): string;
43
- getPort(): number;
44
- stop(): Promise<void>;
45
- start(): Promise<string>;
46
- private setupWebSocketServer;
47
- private handleWebSocketMessage;
48
- }
@@ -1,333 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import http from 'node:http';
7
- import { randomUUID } from 'node:crypto';
8
- import { EventEmitter } from 'node:events';
9
- import { WebSocketServer } from 'ws';
10
- import { INDEX_HTML, CLIENT_JS } from './_client-assets.js';
11
- /**
12
- * DevTools Viewer
13
- *
14
- * Receives logs via WebSocket from CLI sessions.
15
- */
16
- export class DevTools extends EventEmitter {
17
- static instance;
18
- logs = [];
19
- consoleLogs = [];
20
- server = null;
21
- wss = null;
22
- sessions = new Map();
23
- heartbeatTimer = null;
24
- port = 25417;
25
- static DEFAULT_PORT = 25417;
26
- static MAX_PORT_RETRIES = 10;
27
- constructor() {
28
- super();
29
- // Each SSE client adds 3 listeners; raise the limit to avoid warnings
30
- this.setMaxListeners(50);
31
- }
32
- static getInstance() {
33
- if (!DevTools.instance) {
34
- DevTools.instance = new DevTools();
35
- }
36
- return DevTools.instance;
37
- }
38
- addInternalConsoleLog(payload, sessionId, timestamp) {
39
- const entry = {
40
- ...payload,
41
- id: randomUUID(),
42
- sessionId,
43
- timestamp: timestamp || Date.now(),
44
- };
45
- this.consoleLogs.push(entry);
46
- if (this.consoleLogs.length > 5000)
47
- this.consoleLogs.shift();
48
- this.emit('console-update', entry);
49
- }
50
- addInternalNetworkLog(payload, sessionId, timestamp) {
51
- if (!payload.id)
52
- return;
53
- const existingIndex = this.logs.findIndex((l) => l.id === payload.id);
54
- if (existingIndex > -1) {
55
- const existing = this.logs[existingIndex];
56
- // Handle chunk accumulation
57
- if (payload.chunk) {
58
- const chunks = existing.chunks || [];
59
- chunks.push(payload.chunk);
60
- this.logs[existingIndex] = {
61
- ...existing,
62
- chunks,
63
- sessionId: sessionId || existing.sessionId,
64
- };
65
- }
66
- else {
67
- this.logs[existingIndex] = {
68
- ...existing,
69
- ...payload,
70
- sessionId: sessionId || existing.sessionId,
71
- // Drop chunks once we have the full response body — the data
72
- // is redundant and keeping both can blow past V8's string limit
73
- // when serializing the snapshot.
74
- chunks: payload.response?.body ? undefined : existing.chunks,
75
- response: payload.response
76
- ? { ...existing.response, ...payload.response }
77
- : existing.response,
78
- };
79
- }
80
- this.emit('update', this.logs[existingIndex]);
81
- }
82
- else if (payload.url) {
83
- // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
84
- const entry = {
85
- ...payload,
86
- sessionId,
87
- timestamp: timestamp || Date.now(),
88
- chunks: payload.chunk ? [payload.chunk] : undefined,
89
- };
90
- this.logs.push(entry);
91
- if (this.logs.length > 10)
92
- this.logs.shift();
93
- this.emit('update', entry);
94
- }
95
- }
96
- getUrl() {
97
- return `http://127.0.0.1:${this.port}`;
98
- }
99
- getPort() {
100
- return this.port;
101
- }
102
- stop() {
103
- return new Promise((resolve) => {
104
- if (this.heartbeatTimer) {
105
- clearInterval(this.heartbeatTimer);
106
- this.heartbeatTimer = null;
107
- }
108
- if (this.wss) {
109
- this.wss.close();
110
- this.wss = null;
111
- }
112
- if (this.server) {
113
- this.server.close(() => resolve());
114
- this.server = null;
115
- }
116
- else {
117
- resolve();
118
- }
119
- // Reset singleton so a fresh start() is possible
120
- DevTools.instance = undefined;
121
- });
122
- }
123
- start() {
124
- return new Promise((resolve, reject) => {
125
- if (this.server) {
126
- resolve(this.getUrl());
127
- return;
128
- }
129
- this.server = http.createServer((req, res) => {
130
- // Only allow same-origin requests — the client is served from this
131
- // server so cross-origin access is unnecessary and would let arbitrary
132
- // websites exfiltrate logs (which may contain API keys/headers).
133
- const origin = req.headers.origin;
134
- if (origin) {
135
- const allowed = `http://127.0.0.1:${this.port}`;
136
- if (origin === allowed) {
137
- res.setHeader('Access-Control-Allow-Origin', allowed);
138
- }
139
- }
140
- // API routes
141
- if (req.url === '/api/trigger-debugger' && req.method === 'POST') {
142
- let body = '';
143
- req.on('data', (chunk) => {
144
- body += chunk;
145
- });
146
- req.on('end', () => {
147
- try {
148
- const parsed = JSON.parse(body);
149
- if (typeof parsed !== 'object' ||
150
- parsed === null ||
151
- !('sessionId' in parsed) ||
152
- typeof parsed.sessionId !== 'string') {
153
- res.writeHead(400, { 'Content-Type': 'application/json' });
154
- res.end(JSON.stringify({ error: 'Invalid request' }));
155
- return;
156
- }
157
- const sessionId = parsed.sessionId;
158
- const session = this.sessions.get(sessionId);
159
- if (session) {
160
- session.ws.send(JSON.stringify({ type: 'trigger-debugger' }));
161
- res.writeHead(200, { 'Content-Type': 'application/json' });
162
- res.end(JSON.stringify({ success: true }));
163
- }
164
- else {
165
- res.writeHead(404, { 'Content-Type': 'application/json' });
166
- res.end(JSON.stringify({ error: 'Session not found' }));
167
- }
168
- }
169
- catch {
170
- res.writeHead(400, { 'Content-Type': 'application/json' });
171
- res.end(JSON.stringify({ error: 'Invalid request' }));
172
- }
173
- });
174
- }
175
- else if (req.url === '/events') {
176
- res.writeHead(200, {
177
- 'Content-Type': 'text/event-stream',
178
- 'Cache-Control': 'no-cache',
179
- Connection: 'keep-alive',
180
- });
181
- // Send full snapshot on connect
182
- const snapshot = JSON.stringify({
183
- networkLogs: this.logs,
184
- consoleLogs: this.consoleLogs,
185
- sessions: Array.from(this.sessions.keys()),
186
- });
187
- res.write(`event: snapshot\ndata: ${snapshot}\n\n`);
188
- // Incremental updates
189
- const onNetwork = (log) => {
190
- res.write(`event: network\ndata: ${JSON.stringify(log)}\n\n`);
191
- };
192
- const onConsole = (log) => {
193
- res.write(`event: console\ndata: ${JSON.stringify(log)}\n\n`);
194
- };
195
- const onSession = () => {
196
- const sessions = Array.from(this.sessions.keys());
197
- res.write(`event: session\ndata: ${JSON.stringify(sessions)}\n\n`);
198
- };
199
- this.on('update', onNetwork);
200
- this.on('console-update', onConsole);
201
- this.on('session-update', onSession);
202
- req.on('close', () => {
203
- this.off('update', onNetwork);
204
- this.off('console-update', onConsole);
205
- this.off('session-update', onSession);
206
- });
207
- }
208
- else if (req.url === '/' || req.url === '/index.html') {
209
- res.writeHead(200, { 'Content-Type': 'text/html' });
210
- res.end(INDEX_HTML);
211
- }
212
- else if (req.url === '/assets/main.js') {
213
- res.writeHead(200, { 'Content-Type': 'application/javascript' });
214
- res.end(CLIENT_JS);
215
- }
216
- else {
217
- res.writeHead(404);
218
- res.end('Not Found');
219
- }
220
- });
221
- this.server.on('error', (e) => {
222
- if (typeof e === 'object' &&
223
- e !== null &&
224
- 'code' in e &&
225
- e.code === 'EADDRINUSE') {
226
- if (this.port - DevTools.DEFAULT_PORT >= DevTools.MAX_PORT_RETRIES) {
227
- reject(new Error(`DevTools: all ports ${DevTools.DEFAULT_PORT}–${this.port} in use`));
228
- return;
229
- }
230
- this.port++;
231
- this.server?.listen(this.port, '127.0.0.1');
232
- }
233
- else {
234
- reject(e instanceof Error ? e : new Error(String(e)));
235
- }
236
- });
237
- this.server.listen(this.port, '127.0.0.1', () => {
238
- this.setupWebSocketServer();
239
- resolve(this.getUrl());
240
- });
241
- });
242
- }
243
- setupWebSocketServer() {
244
- if (!this.server)
245
- return;
246
- this.wss = new WebSocketServer({ server: this.server, path: '/ws' });
247
- this.wss.on('connection', (ws) => {
248
- let sessionId = null;
249
- ws.on('message', (data) => {
250
- try {
251
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
252
- const message = JSON.parse(data.toString());
253
- // Handle registration first
254
- if (message.type === 'register') {
255
- sessionId = String(message.sessionId);
256
- if (!sessionId)
257
- return;
258
- this.sessions.set(sessionId, {
259
- sessionId,
260
- ws,
261
- lastPing: Date.now(),
262
- });
263
- // Notify session update
264
- this.emit('session-update');
265
- // Send registration acknowledgement
266
- ws.send(JSON.stringify({
267
- type: 'registered',
268
- sessionId,
269
- timestamp: Date.now(),
270
- }));
271
- }
272
- else if (sessionId) {
273
- this.handleWebSocketMessage(sessionId, message);
274
- }
275
- }
276
- catch {
277
- // Invalid WebSocket message
278
- }
279
- });
280
- ws.on('close', () => {
281
- if (sessionId) {
282
- this.sessions.delete(sessionId);
283
- this.emit('session-update');
284
- }
285
- });
286
- ws.on('error', () => {
287
- // WebSocket error — no action needed
288
- });
289
- });
290
- // Heartbeat mechanism
291
- this.heartbeatTimer = setInterval(() => {
292
- const now = Date.now();
293
- this.sessions.forEach((session, sessionId) => {
294
- if (now - session.lastPing > 30000) {
295
- session.ws.close();
296
- this.sessions.delete(sessionId);
297
- }
298
- else {
299
- // Send ping
300
- session.ws.send(JSON.stringify({ type: 'ping', timestamp: now }));
301
- }
302
- });
303
- }, 10000);
304
- this.heartbeatTimer.unref();
305
- }
306
- handleWebSocketMessage(sessionId, message) {
307
- const session = this.sessions.get(sessionId);
308
- if (!session)
309
- return;
310
- switch (message['type']) {
311
- case 'pong':
312
- session.lastPing = Date.now();
313
- break;
314
- case 'console':
315
- this.addInternalConsoleLog(
316
- // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
317
- message['payload'], sessionId,
318
- // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
319
- message['timestamp']);
320
- break;
321
- case 'network':
322
- this.addInternalNetworkLog(
323
- // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
324
- message['payload'], sessionId,
325
- // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
326
- message['timestamp']);
327
- break;
328
- default:
329
- break;
330
- }
331
- }
332
- }
333
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,36 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- export interface NetworkLog {
7
- id: string;
8
- sessionId?: string;
9
- timestamp: number;
10
- method: string;
11
- url: string;
12
- headers: Record<string, string | string[] | undefined>;
13
- body?: string;
14
- pending?: boolean;
15
- chunks?: Array<{
16
- index: number;
17
- data: string;
18
- timestamp: number;
19
- }>;
20
- response?: {
21
- status: number;
22
- headers: Record<string, string | string[] | undefined>;
23
- body?: string;
24
- durationMs: number;
25
- };
26
- error?: string;
27
- }
28
- export interface ConsoleLogPayload {
29
- type: 'log' | 'warn' | 'error' | 'debug' | 'info';
30
- content: string;
31
- }
32
- export interface InspectorConsoleLog extends ConsoleLogPayload {
33
- id: string;
34
- sessionId?: string;
35
- timestamp: number;
36
- }
@@ -1,7 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- export {};
7
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -1,33 +0,0 @@
1
- {
2
- "name": "@google/gemini-cli-devtools",
3
- "version": "0.42.0",
4
- "private": true,
5
- "license": "Apache-2.0",
6
- "type": "module",
7
- "main": "dist/src/index.js",
8
- "types": "dist/src/index.d.ts",
9
- "exports": {
10
- ".": {
11
- "types": "./dist/src/index.d.ts",
12
- "default": "./dist/src/index.js"
13
- }
14
- },
15
- "scripts": {
16
- "build": "npm run build:client && tsc -p tsconfig.build.json",
17
- "build:client": "node esbuild.client.js"
18
- },
19
- "files": [
20
- "dist",
21
- "client/index.html"
22
- ],
23
- "engines": {
24
- "node": ">=20"
25
- },
26
- "devDependencies": {
27
- "react": "^19.2.0",
28
- "react-dom": "^19.2.0"
29
- },
30
- "dependencies": {
31
- "ws": "^8.16.0"
32
- }
33
- }
@@ -1,20 +0,0 @@
1
- # Policy for Memory Manager Agent
2
- # Allows the save_memory agent to manage memories in the ~/.gemini/ folder.
3
-
4
- # Read-only tools: allow access to anything under .gemini/
5
- [[rule]]
6
- subagent = "save_memory"
7
- toolName = ["read_file", "list_directory", "glob", "grep_search"]
8
- decision = "allow"
9
- priority = 100
10
- argsPattern = "(^|.*/)\\.gemini/.*"
11
- denyMessage = "Memory Manager is only allowed to access the .gemini folder."
12
-
13
- # Write tools: only allow .md files under .gemini/
14
- [[rule]]
15
- subagent = "save_memory"
16
- toolName = ["write_file", "replace"]
17
- decision = "allow"
18
- priority = 100
19
- argsPattern = "(^|.*/)\\.gemini/.*\\.md\""
20
- denyMessage = "Memory Manager is only allowed to write .md files in the .gemini folder."