@yu_robotics/remote-cli 1.1.36 → 1.1.38

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
@@ -7,8 +7,10 @@ Remote control your [Claude Code](https://claude.ai/code) CLI from anywhere usin
7
7
  - **Remote Control**: Control your local development environment from anywhere via mobile
8
8
  - **Secure**: Directory whitelisting, command filtering, and device authentication
9
9
  - **Mobile-Optimized**: Simplified commands and rich text formatting for Feishu
10
- - **Claude Code Integration**: Full access to Claude Code's capabilities and context
11
- - **Persistent Process**: Long-running Claude process with bidirectional streaming (no repeated spawn overhead)
10
+ - **Multi-Backend Support**: Supports Claude Code and Gemini CLI
11
+ - **Multi-session (Threads)**: Create independent chat threads to parallelize tasks
12
+ - **Remote Machine Management**: Control remote servers or Docker via SSH
13
+ - **Persistent Process**: Long-running AI process with bidirectional streaming
12
14
 
13
15
  ## Prerequisites
14
16
 
@@ -69,28 +71,39 @@ Help me fix TypeScript errors in ~/projects/my-app
69
71
 
70
72
  ## Feishu Bot Commands
71
73
 
72
- ### Device Management
74
+ ### Core Management
73
75
 
74
76
  | Command | Description |
75
77
  |---------|-------------|
76
- | `/bind <binding-code>` | Bind a new device |
77
- | `/status` | View status of all devices |
78
- | `/unbind` | Unbind all devices |
79
- | `/device` | List all your bound devices |
80
- | `/device list` | List all your bound devices |
81
- | `/device switch <device-id-or-index>` | Switch to a specific device |
82
- | `/device <device-id-or-index>` | Quick switch to a device |
83
- | `/device unbind <device-id-or-index>` | Unbind a specific device |
84
78
  | `/help` | Show help information |
79
+ | `/status` | View status and all threads |
80
+ | `/abort` | Abort executing task in current thread |
81
+ | `/clear` | Clear context for this thread |
82
+ | `/compact` | Compress history to save tokens |
83
+ | `/cd <dir>` | Change working directory for this thread |
84
+ | `/backend` | List and switch AI backends |
85
+ | `/bind <码>` | Bind a new device |
86
+ | `/unbind` | Unbind all devices |
87
+ | `/device` | List and switch between bound devices |
88
+
89
+ ### Threads & Machines
90
+
91
+ | Command | Description |
92
+ |---------|-------------|
93
+ | `/thread list/new/delete` | Manage session threads |
94
+ | `/machines` | List configured remote machines |
95
+ | `/machine add/remove/show` | Manage remote SSH machines |
96
+ | `/containers <ID>` | List Docker containers on a machine |
97
+ | `/search/view/replace` | Remote file operations |
98
+ | `/backups/restore` | Manage remote file backups |
85
99
 
86
- ### Claude Code Commands
100
+ ### AI CLI Commands Passthrough
87
101
 
88
- All commands/skills supported by local Claude Code are passed through directly, for example:
102
+ All commands/skills supported by local Claude Code or Gemini CLI are passed through directly, for example:
89
103
  - `/commit` - Commit code changes
90
104
  - `/review` - Code review
91
105
  - `/test` - Run tests
92
- - `/clear` - Clear current session
93
- - And all other built-in Claude Code commands
106
+ - And all other built-in AI engine commands
94
107
 
95
108
  ## Security
96
109
 
@@ -12,53 +12,81 @@ export interface GeminiExecutorOptions {
12
12
  /** Thread ID for session isolation */
13
13
  threadId?: string;
14
14
  }
15
- /**
16
- * IExecutor implementation for Gemini CLI via ACP (Agent Client Protocol).
17
- *
18
- * Each execute() call spawns a fresh Gemini CLI subprocess (vibe-kanban style).
19
- * This ensures full isolation between turns — a broken session in one turn
20
- * cannot affect subsequent turns.
21
- *
22
- * Conversation history is persisted as JSONL via SessionManager and replayed
23
- * as context prefix on subsequent calls within the same conversation.
24
- */
25
15
  export declare class GeminiExecutor implements IExecutor {
26
16
  private directoryGuard;
27
17
  private currentWorkingDirectory;
28
- private sessionManager;
29
18
  private readonly model;
30
19
  private readonly autoApprove;
31
20
  private readonly geminiCommand;
32
21
  private readonly geminiVersion;
33
22
  private readonly threadId?;
34
- /** Stable ID for JSONL history file, survives across spawns. */
35
- private conversationId;
23
+ /** Long-lived ACP client — null means not yet spawned or was destroyed. */
24
+ private persistentClient;
25
+ /** ACP session ID of the persistent session. */
26
+ private persistentSessionId;
27
+ /**
28
+ * Mutable options for the current execute() call.
29
+ * The persistent AcpClient callbacks close over this object so they always
30
+ * dispatch to whichever execute() invocation is currently in flight.
31
+ */
32
+ private activeOptions;
36
33
  /** Reference to the in-flight AcpClient for abort support. */
37
34
  private inflightClient;
35
+ /** ACP session ID of the in-flight prompt, needed for cooperative sendCancel. */
36
+ private inflightSessionId;
37
+ /** Handle for the abort grace-period timer so it can be cancelled early. */
38
+ private abortTimer;
39
+ /**
40
+ * Command queue for sequential execution.
41
+ * Matching ClaudePersistentExecutor's approach to ensure thread-safety.
42
+ */
43
+ private commandQueue;
44
+ private isProcessing;
38
45
  constructor(directoryGuard: DirectoryGuard, options?: GeminiExecutorOptions);
39
46
  execute(prompt: string, options: ExecuteOptions): Promise<ExecuteResult>;
47
+ /**
48
+ * Processes the command queue sequentially.
49
+ */
50
+ private processQueue;
51
+ /**
52
+ * Actual execution logic for a single prompt.
53
+ */
54
+ private executeQueued;
40
55
  getCurrentWorkingDirectory(): string;
41
56
  setWorkingDirectory(targetPath: string): Promise<void>;
42
57
  resetContext(): void;
43
58
  /**
44
- * Compact conversation history by truncating to the most recent turns.
45
- * Gemini ACP has no built-in /compact command, so we reduce context size
46
- * by keeping only the last COMPACT_KEEP_TURNS entries from the JSONL history.
59
+ * Compact conversation history by resetting the persistent session.
60
+ * Gemini ACP has no built-in /compact, so we destroy the client entirely.
61
+ * The next execute() call will spawn a fresh process with no prior context.
47
62
  */
48
63
  compactWhenFull(onStream?: (chunk: string) => void): Promise<ExecuteResult>;
49
64
  abort(): Promise<boolean>;
50
65
  destroy(): Promise<void>;
51
66
  /**
52
- * Delete the Gemini session history file for a thread.
67
+ * Delete session data for a thread.
53
68
  * Called by ThreadExecutorPool before removing this executor from the pool.
54
69
  */
55
- deleteThreadData(threadId: string): Promise<void>;
70
+ deleteThreadData(_threadId: string): Promise<void>;
56
71
  getSessionId(): string | null;
57
72
  /**
58
- * Runs a single attempt with a specific model alias.
59
- * Throws on quota errors so the caller can retry with the next model.
73
+ * Returns the existing persistent session if alive, or spawns a new one.
74
+ * The model parameter is only used when spawning a new session.
75
+ */
76
+ private ensurePersistentSession;
77
+ /**
78
+ * Spawns a fresh Gemini CLI subprocess, initializes ACP, and creates a new session.
79
+ * The AcpClient callbacks close over `this.activeOptions` so they always dispatch
80
+ * to whichever execute() call is currently in flight.
81
+ */
82
+ private spawnNewSession;
83
+ /**
84
+ * Sends a single prompt to an existing persistent ACP session.
85
+ * Sets activeOptions so the persistent callbacks dispatch to this call's handlers.
60
86
  */
61
- private executeWithModel;
87
+ private executeWithClient;
88
+ /** Destroys the persistent client and clears all related state. */
89
+ private destroyPersistentClient;
62
90
  private buildGeminiArgs;
63
91
  private buildFriendlyError;
64
92
  }
@@ -1 +1 @@
1
- {"version":3,"file":"GeminiExecutor.d.ts","sourceRoot":"","sources":["../../src/executor/GeminiExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAOvE,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,gDAAgD;IAChD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qFAAqF;IACrF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAqDD;;;;;;;;;GASG;AACH,qBAAa,cAAe,YAAW,SAAS;IAC9C,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,uBAAuB,CAAS;IACxC,OAAO,CAAC,cAAc,CAAiB;IAEvC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAU;IACtC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAS;IAEnC,gEAAgE;IAChE,OAAO,CAAC,cAAc,CAAuB;IAE7C,8DAA8D;IAC9D,OAAO,CAAC,cAAc,CAA0B;gBAEpC,cAAc,EAAE,cAAc,EAAE,OAAO,GAAE,qBAA0B;IAoBzE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IA8C9E,0BAA0B,IAAI,MAAM;IAI9B,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS5D,YAAY,IAAI,IAAI;IASpB;;;;OAIG;IACG,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC;IAsB3E,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;IAOzB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAO9B;;;OAGG;IACG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQvD,YAAY,IAAI,MAAM,GAAG,IAAI;IAI7B;;;OAGG;YACW,gBAAgB;IAkF9B,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,kBAAkB;CAqB3B"}
1
+ {"version":3,"file":"GeminiExecutor.d.ts","sourceRoot":"","sources":["../../src/executor/GeminiExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAMvE,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,gDAAgD;IAChD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qFAAqF;IACrF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AA2ED,qBAAa,cAAe,YAAW,SAAS;IAC9C,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,uBAAuB,CAAS;IAExC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAU;IACtC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAS;IAEnC,2EAA2E;IAC3E,OAAO,CAAC,gBAAgB,CAA0B;IAClD,gDAAgD;IAChD,OAAO,CAAC,mBAAmB,CAAuB;IAElD;;;;OAIG;IACH,OAAO,CAAC,aAAa,CAAqB;IAE1C,8DAA8D;IAC9D,OAAO,CAAC,cAAc,CAA0B;IAChD,iFAAiF;IACjF,OAAO,CAAC,iBAAiB,CAAuB;IAChD,4EAA4E;IAC5E,OAAO,CAAC,UAAU,CAA8C;IAEhE;;;OAGG;IACH,OAAO,CAAC,YAAY,CAKZ;IACR,OAAO,CAAC,YAAY,CAAS;gBAEjB,cAAc,EAAE,cAAc,EAAE,OAAO,GAAE,qBAA0B;IAYzE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IAO9E;;OAEG;YACW,YAAY;IAoB1B;;OAEG;YACW,aAAa;IAqC3B,0BAA0B,IAAI,MAAM;IAI9B,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB5D,YAAY,IAAI,IAAI;IAIpB;;;;OAIG;IACG,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC;IAa3E,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;IAyBzB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAa9B;;;OAGG;IACG,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxD,YAAY,IAAI,MAAM,GAAG,IAAI;IAM7B;;;OAGG;YACW,uBAAuB;IAOrC;;;;OAIG;YACW,eAAe;IAoD7B;;;OAGG;YACW,iBAAiB;IAmD/B,mEAAmE;IACnE,OAAO,CAAC,uBAAuB;IAQ/B,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,kBAAkB;CAqB3B"}
@@ -2,9 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.GeminiExecutor = void 0;
4
4
  const AcpClient_1 = require("./acp/AcpClient");
5
- const SessionManager_1 = require("./acp/SessionManager");
6
- /** Number of most-recent conversation turns to keep after compaction. */
7
- const COMPACT_KEEP_TURNS = 10;
5
+ /** Grace period (ms) between cooperative ACP cancel and force SIGTERM/SIGKILL. */
6
+ const CANCEL_GRACE_MS = 3_000;
8
7
  /**
9
8
  * Maps a Gemini ACP tool call (kind + title) to a Claude-compatible
10
9
  * { name, input } shape so the router's ToolFormatter renders it with
@@ -15,95 +14,108 @@ const COMPACT_KEEP_TURNS = 10;
15
14
  function mapAcpToolCall(kind, title) {
16
15
  switch (kind) {
17
16
  case 'exec':
18
- // Shell command — map to Bash so extractBashContext renders it
19
17
  return { name: 'Bash', input: { command: title } };
20
18
  case 'read':
21
- // File read — map to Read so extractReadContext renders it
22
19
  return { name: 'Read', input: { file_path: title } };
23
20
  case 'write':
24
- // File write/edit — map to Write
25
21
  return { name: 'Write', input: { file_path: title } };
26
22
  case 'list':
27
- // Directory listing — map to Glob
28
23
  return { name: 'Glob', input: { pattern: title } };
29
24
  case 'service':
30
- // MCP / service call
31
25
  return { name: 'Service', input: { call: title } };
32
26
  default:
33
- // Unknown kind — show raw title under generic tool name
34
27
  return { name: kind ?? 'Tool', input: { command: title } };
35
28
  }
36
29
  }
37
30
  /**
38
31
  * Gemini CLI stable model aliases used for quota fallback.
39
32
  *
40
- * These are Gemini CLI's own named aliases (not versioned model strings), so
41
- * they remain valid across model releases. Gemini CLI's ACP mode does NOT
42
- * implement automatic model fallback on quota exhaustion (unlike interactive
43
- * mode), so we handle it here instead.
44
- *
45
33
  * Fallback order: user-configured model → flash → flash-lite
46
34
  */
47
35
  const QUOTA_FALLBACK_ALIASES = ['flash', 'flash-lite'];
48
- /** Returns true when the error message indicates a quota-exhaustion condition. */
36
+ /** Returns true when the error message indicates a quota-exhaustion or capacity condition. */
49
37
  function isQuotaError(error) {
50
38
  if (!(error instanceof Error))
51
39
  return false;
52
- return error.message.includes('exhausted your capacity') || error.message.includes('quota');
40
+ const msg = error.message;
41
+ return (msg.includes('exhausted your capacity') ||
42
+ msg.includes('quota') ||
43
+ msg.includes('No capacity available'));
53
44
  }
54
- /**
55
- * IExecutor implementation for Gemini CLI via ACP (Agent Client Protocol).
56
- *
57
- * Each execute() call spawns a fresh Gemini CLI subprocess (vibe-kanban style).
58
- * This ensures full isolation between turns — a broken session in one turn
59
- * cannot affect subsequent turns.
60
- *
61
- * Conversation history is persisted as JSONL via SessionManager and replayed
62
- * as context prefix on subsequent calls within the same conversation.
63
- */
64
45
  class GeminiExecutor {
65
46
  directoryGuard;
66
47
  currentWorkingDirectory;
67
- sessionManager;
68
48
  model;
69
49
  autoApprove;
70
50
  geminiCommand;
71
51
  geminiVersion;
72
52
  threadId;
73
- /** Stable ID for JSONL history file, survives across spawns. */
74
- conversationId = null;
53
+ /** Long-lived ACP client — null means not yet spawned or was destroyed. */
54
+ persistentClient = null;
55
+ /** ACP session ID of the persistent session. */
56
+ persistentSessionId = null;
57
+ /**
58
+ * Mutable options for the current execute() call.
59
+ * The persistent AcpClient callbacks close over this object so they always
60
+ * dispatch to whichever execute() invocation is currently in flight.
61
+ */
62
+ activeOptions = {};
75
63
  /** Reference to the in-flight AcpClient for abort support. */
76
64
  inflightClient = null;
65
+ /** ACP session ID of the in-flight prompt, needed for cooperative sendCancel. */
66
+ inflightSessionId = null;
67
+ /** Handle for the abort grace-period timer so it can be cancelled early. */
68
+ abortTimer = null;
69
+ /**
70
+ * Command queue for sequential execution.
71
+ * Matching ClaudePersistentExecutor's approach to ensure thread-safety.
72
+ */
73
+ commandQueue = [];
74
+ isProcessing = false;
77
75
  constructor(directoryGuard, options = {}) {
78
76
  this.directoryGuard = directoryGuard;
79
- // Leave model unset by default so Gemini CLI uses its own default
80
- // (gemini-2.5-pro). NOTE: '--model auto' maps to gemini-3-pro-preview
81
- // which has stricter quota limits — do NOT default to 'auto'.
82
- // Users can override via executor.gemini.model in config.
83
77
  this.model = options.model ?? '';
84
78
  this.autoApprove = options.autoApprove ?? true;
85
79
  this.geminiCommand = options.geminiCommand ?? 'npx';
86
80
  this.geminiVersion = options.geminiVersion ?? '@google/gemini-cli@latest';
87
81
  this.currentWorkingDirectory = options.initialWorkingDirectory ?? process.cwd();
88
- this.sessionManager = new SessionManager_1.SessionManager();
89
82
  this.threadId = options.threadId;
90
- if (this.threadId) {
91
- this.conversationId = this.threadId;
92
- }
93
83
  }
94
84
  // ─── IExecutor required ─────────────────────────────────────────────────────
95
85
  async execute(prompt, options) {
96
- // Ensure a stable conversation ID exists for history tracking across spawns
97
- if (!this.conversationId) {
98
- this.conversationId = `conv-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
86
+ return new Promise((resolve, reject) => {
87
+ this.commandQueue.push({ prompt, options, resolve, reject });
88
+ this.processQueue();
89
+ });
90
+ }
91
+ /**
92
+ * Processes the command queue sequentially.
93
+ */
94
+ async processQueue() {
95
+ if (this.isProcessing || this.commandQueue.length === 0) {
96
+ return;
97
+ }
98
+ const command = this.commandQueue.shift();
99
+ if (!command)
100
+ return;
101
+ this.isProcessing = true;
102
+ try {
103
+ const result = await this.executeQueued(command.prompt, command.options);
104
+ command.resolve(result);
105
+ }
106
+ catch (error) {
107
+ command.reject(error instanceof Error ? error : new Error(String(error)));
108
+ }
109
+ finally {
110
+ this.isProcessing = false;
111
+ this.processQueue();
99
112
  }
100
- // Prepend history context for follow-up turns within the same conversation
101
- const historyContext = this.sessionManager.buildResumeContext(this.conversationId);
102
- const finalPrompt = historyContext ? `${historyContext}${prompt}` : prompt;
103
- this.sessionManager.append(this.conversationId, 'user', prompt);
113
+ }
114
+ /**
115
+ * Actual execution logic for a single prompt.
116
+ */
117
+ async executeQueued(prompt, options) {
104
118
  // Build fallback chain: configured model first, then quota fallback aliases.
105
- // Filter out aliases that are already the configured model to avoid retrying
106
- // the same model twice.
107
119
  const fallbackAliases = QUOTA_FALLBACK_ALIASES.filter(a => a !== this.model);
108
120
  const modelsToTry = [this.model, ...fallbackAliases];
109
121
  for (let attempt = 0; attempt < modelsToTry.length; attempt++) {
@@ -115,21 +127,24 @@ class GeminiExecutor {
115
127
  console.warn(`[GeminiExecutor] Quota exhausted on "${modelsToTry[attempt - 1] || 'pro'}", retrying with "${modelLabel}"`);
116
128
  }
117
129
  try {
118
- const result = await this.executeWithModel(modelForAttempt, modelLabel, finalPrompt, prompt, options);
130
+ // Ensure a persistent session exists (spawn if needed)
131
+ const { client, sessionId } = await this.ensurePersistentSession(modelForAttempt);
132
+ const result = await this.executeWithClient(client, sessionId, modelLabel, prompt, options);
119
133
  return result;
120
134
  }
121
135
  catch (error) {
122
136
  if (isQuotaError(error) && attempt < modelsToTry.length - 1) {
123
- // Quota exhausted on this model — try the next one in the chain
137
+ // Quota exhausted — destroy current client, next iteration spawns with fallback model
138
+ this.destroyPersistentClient();
124
139
  continue;
125
140
  }
126
- // Final attempt or non-quota error: surface a friendly message
141
+ // Final attempt or non-quota error: destroy client (so next call respawns) and surface error
142
+ this.destroyPersistentClient();
127
143
  console.error(`[GeminiExecutor] ❌ Execute error:`, error);
128
144
  const msg = error instanceof Error ? error.message : 'Unknown error';
129
145
  return { success: false, error: this.buildFriendlyError(msg, modelLabel) };
130
146
  }
131
147
  }
132
- // Should never reach here, but satisfy TypeScript
133
148
  return { success: false, error: 'All Gemini models exhausted quota.' };
134
149
  }
135
150
  getCurrentWorkingDirectory() {
@@ -137,136 +152,187 @@ class GeminiExecutor {
137
152
  }
138
153
  async setWorkingDirectory(targetPath) {
139
154
  const resolved = this.directoryGuard.resolveWorkingDirectory(targetPath);
155
+ // If directory changes, we MUST restart the persistent process in the new directory.
156
+ // This matches ClaudePersistentExecutor and ensures that tools (ls, read, etc.)
157
+ // run in the expected location.
158
+ const needsRestart = this.currentWorkingDirectory !== resolved && this.persistentClient !== null;
140
159
  this.currentWorkingDirectory = resolved;
141
- // Changing directory resets the conversation context if not using a thread-bound session
142
- if (!this.threadId) {
143
- this.conversationId = null;
160
+ if (needsRestart) {
161
+ console.log(`[GeminiExecutor] Restarting persistent client in new directory: ${resolved}`);
162
+ this.destroyPersistentClient();
144
163
  }
145
164
  }
146
165
  resetContext() {
147
- if (this.conversationId) {
148
- this.sessionManager.remove(this.conversationId);
149
- if (!this.threadId) {
150
- this.conversationId = null;
151
- }
152
- }
166
+ this.destroyPersistentClient();
153
167
  }
154
168
  /**
155
- * Compact conversation history by truncating to the most recent turns.
156
- * Gemini ACP has no built-in /compact command, so we reduce context size
157
- * by keeping only the last COMPACT_KEEP_TURNS entries from the JSONL history.
169
+ * Compact conversation history by resetting the persistent session.
170
+ * Gemini ACP has no built-in /compact, so we destroy the client entirely.
171
+ * The next execute() call will spawn a fresh process with no prior context.
158
172
  */
159
173
  async compactWhenFull(onStream) {
160
- if (!this.conversationId) {
174
+ if (!this.persistentClient) {
161
175
  return { success: true, output: 'No active conversation to compact.' };
162
176
  }
163
- // The previous execute() attempt failed (likely Prompt too long), but it already
164
- // appended the user's prompt to the history. When the caller retries, they will
165
- // send the exact same prompt again. To avoid duplicating it, we pop the last entry
166
- // if it's a 'user' entry.
167
- this.sessionManager.popLastUserEntry(this.conversationId);
168
- onStream?.(`Truncating history to last ${COMPACT_KEEP_TURNS} turns...\n`);
169
- const removed = this.sessionManager.truncate(this.conversationId, COMPACT_KEEP_TURNS);
170
- if (removed === 0) {
171
- return { success: true, output: 'Conversation history is already compact.' };
172
- }
173
- onStream?.(`Removed ${removed} older entries from conversation history.\n`);
174
- return { success: true, output: `Compacted: removed ${removed} older entries, kept ${COMPACT_KEEP_TURNS} most recent turns.` };
177
+ onStream?.('Resetting conversation context (Gemini has no /compact equivalent — starting fresh session)...\n');
178
+ this.destroyPersistentClient();
179
+ return {
180
+ success: true,
181
+ output: 'Context reset: conversation history cleared. Next message starts a fresh Gemini session.',
182
+ };
175
183
  }
176
184
  async abort() {
177
185
  if (!this.inflightClient)
178
186
  return false;
179
- this.inflightClient.destroy();
180
- this.inflightClient = null;
187
+ // Step 1: Send cooperative ACP cancel so Gemini can finish the current
188
+ // tool call cleanly before exiting (avoids half-written files).
189
+ if (this.inflightSessionId) {
190
+ this.inflightClient.sendCancel(this.inflightSessionId);
191
+ console.log(`[GeminiExecutor] Sent ACP cancel for session ${this.inflightSessionId.slice(0, 8)}`);
192
+ }
193
+ // Step 2: Give Gemini a short grace period to respond with stopReason='cancelled'.
194
+ // After either the grace period or natural completion, we destroy the persistent
195
+ // client so the next execute() starts a clean session.
196
+ const clientRef = this.inflightClient;
197
+ this.abortTimer = setTimeout(() => {
198
+ this.abortTimer = null;
199
+ if (clientRef === this.inflightClient) {
200
+ console.warn('[GeminiExecutor] Cancel grace period elapsed, force-destroying persistent client');
201
+ this.destroyPersistentClient();
202
+ }
203
+ }, CANCEL_GRACE_MS);
181
204
  return true;
182
205
  }
183
206
  async destroy() {
184
207
  if (this.inflightClient) {
185
- this.inflightClient.destroy();
186
- this.inflightClient = null;
208
+ if (this.inflightSessionId) {
209
+ this.inflightClient.sendCancel(this.inflightSessionId);
210
+ }
211
+ if (this.abortTimer !== null) {
212
+ clearTimeout(this.abortTimer);
213
+ this.abortTimer = null;
214
+ }
187
215
  }
216
+ this.destroyPersistentClient();
188
217
  }
189
218
  /**
190
- * Delete the Gemini session history file for a thread.
219
+ * Delete session data for a thread.
191
220
  * Called by ThreadExecutorPool before removing this executor from the pool.
192
221
  */
193
- async deleteThreadData(threadId) {
194
- if (this.conversationId) {
195
- this.sessionManager.remove(this.conversationId);
196
- }
197
- else {
198
- this.sessionManager.remove(threadId);
199
- }
222
+ async deleteThreadData(_threadId) {
223
+ this.destroyPersistentClient();
200
224
  }
201
225
  getSessionId() {
202
- return this.conversationId;
226
+ return this.persistentSessionId;
203
227
  }
228
+ // ─── Internal helpers ────────────────────────────────────────────────────────
204
229
  /**
205
- * Runs a single attempt with a specific model alias.
206
- * Throws on quota errors so the caller can retry with the next model.
230
+ * Returns the existing persistent session if alive, or spawns a new one.
231
+ * The model parameter is only used when spawning a new session.
207
232
  */
208
- async executeWithModel(model, modelLabel, finalPrompt, originalPrompt, options) {
209
- let accumulatedOutput = '';
233
+ async ensurePersistentSession(model) {
234
+ if (this.persistentClient && this.persistentSessionId) {
235
+ return { client: this.persistentClient, sessionId: this.persistentSessionId };
236
+ }
237
+ return this.spawnNewSession(model);
238
+ }
239
+ /**
240
+ * Spawns a fresh Gemini CLI subprocess, initializes ACP, and creates a new session.
241
+ * The AcpClient callbacks close over `this.activeOptions` so they always dispatch
242
+ * to whichever execute() call is currently in flight.
243
+ */
244
+ async spawnNewSession(model) {
245
+ const args = this.buildGeminiArgs(model);
210
246
  const acpCallbacks = {
211
247
  onThoughtChunk: (text) => {
212
- // Stream Gemini's thinking to the user, same as Claude does for thinking blocks
213
- accumulatedOutput += text;
214
- options.onStream?.(text);
248
+ this.activeOptions.onStream?.(text);
215
249
  },
216
250
  onTextChunk: (text) => {
217
- accumulatedOutput += text;
218
- options.onStream?.(text);
251
+ this.activeOptions.onStream?.(text);
219
252
  },
220
253
  onToolCall: (toolCallId, title, kind) => {
221
- // Map Gemini ACP kind → Claude-compatible tool name + structured input
222
- // so the router's ToolFormatter renders it consistently with Claude tools.
223
- // The tool card itself provides the progress indicator — no extra onStream needed.
224
254
  const { name, input } = mapAcpToolCall(kind, title);
225
- options.onToolUse?.({ id: toolCallId, name, input });
255
+ this.activeOptions.onToolUse?.({ id: toolCallId, name, input });
226
256
  },
227
257
  onToolResult: (toolCallId, status, output) => {
228
- options.onToolResult?.({
258
+ this.activeOptions.onToolResult?.({
229
259
  tool_use_id: toolCallId,
230
260
  content: output ?? '',
231
261
  is_error: status !== 'completed',
232
262
  });
233
263
  },
234
264
  onPlan: (text) => {
235
- options.onPlanMode?.(text);
265
+ this.activeOptions.onPlanMode?.(text);
236
266
  },
237
267
  onPermissionRequest: this.autoApprove ? undefined : async () => 0,
238
268
  };
239
- const args = this.buildGeminiArgs(model);
240
269
  const client = new AcpClient_1.AcpClient(this.geminiCommand, args, this.currentWorkingDirectory, acpCallbacks);
270
+ console.log(`[GeminiExecutor] Spawning persistent ACP client (model=${model || 'pro (default)'}) for cwd: ${this.currentWorkingDirectory}`);
271
+ await client.initialize();
272
+ const sessionId = await client.newSession(this.currentWorkingDirectory);
273
+ console.log(`[GeminiExecutor] Persistent ACP session created: ${sessionId.slice(0, 8)}`);
274
+ if (this.autoApprove) {
275
+ try {
276
+ await client.setSessionMode(sessionId, 'yolo');
277
+ }
278
+ catch (e) {
279
+ console.warn(`[GeminiExecutor] Optional session mode 'yolo' not supported or rejected:`, e);
280
+ }
281
+ }
282
+ this.persistentClient = client;
283
+ this.persistentSessionId = sessionId;
284
+ return { client, sessionId };
285
+ }
286
+ /**
287
+ * Sends a single prompt to an existing persistent ACP session.
288
+ * Sets activeOptions so the persistent callbacks dispatch to this call's handlers.
289
+ */
290
+ async executeWithClient(client, sessionId, modelLabel, prompt, options) {
291
+ let accumulatedOutput = '';
292
+ // Wire per-execute callbacks via activeOptions so the persistent AcpClient
293
+ // callbacks (which close over this.activeOptions) dispatch to this call.
294
+ this.activeOptions = {
295
+ onStream: (chunk) => {
296
+ accumulatedOutput += chunk;
297
+ options.onStream?.(chunk);
298
+ },
299
+ onToolUse: options.onToolUse,
300
+ onToolResult: options.onToolResult,
301
+ onPlanMode: options.onPlanMode,
302
+ };
241
303
  this.inflightClient = client;
304
+ this.inflightSessionId = sessionId;
242
305
  try {
243
- console.log(`[GeminiExecutor] Spawning ACP client (model=${modelLabel}) for cwd: ${this.currentWorkingDirectory}`);
244
- console.log(`[GeminiExecutor] Gemini command: ${this.geminiCommand} ${args.join(' ')}`);
245
- await client.initialize();
246
- const sessionId = await client.newSession(this.currentWorkingDirectory);
247
- console.log(`[GeminiExecutor] ACP session created: ${sessionId.slice(0, 8)}`);
248
- if (this.autoApprove) {
249
- try {
250
- await client.setSessionMode(sessionId, 'yolo');
251
- }
252
- catch (e) {
253
- console.warn(`[GeminiExecutor] Optional session mode 'yolo' not supported or rejected:`, e);
254
- // Non-fatal: AcpClient will still auto-approve individual permissions if setSessionMode fails
255
- }
256
- }
257
- console.log(`[GeminiExecutor] Sending prompt (length=${finalPrompt.length})...`);
258
- const promptResult = await client.prompt(sessionId, finalPrompt);
306
+ console.log(`[GeminiExecutor] Sending prompt (model=${modelLabel}, length=${prompt.length})...`);
307
+ const promptResult = await client.prompt(sessionId, prompt);
259
308
  console.log(`[GeminiExecutor] Prompt completed, stopReason=${promptResult.stopReason}, model=${modelLabel}`);
260
- this.sessionManager.append(this.conversationId, 'assistant', accumulatedOutput);
261
309
  return {
262
- success: promptResult.stopReason !== 'refusal',
310
+ success: promptResult.stopReason !== 'refusal' && promptResult.stopReason !== 'cancelled',
263
311
  output: accumulatedOutput,
264
- sessionAbbr: this.conversationId.slice(0, 8),
312
+ sessionAbbr: sessionId.slice(0, 8),
265
313
  };
266
314
  }
267
315
  finally {
268
- client.destroy();
316
+ // Clear activeOptions so stale callbacks don't fire after this call ends
317
+ this.activeOptions = {};
318
+ // If abort() was called and its timer is still pending, Gemini responded to
319
+ // the cancel before the grace period elapsed. Destroy the persistent client
320
+ // now (a cancelled session should not be reused) and cancel the timer.
321
+ if (this.abortTimer !== null) {
322
+ clearTimeout(this.abortTimer);
323
+ this.abortTimer = null;
324
+ this.destroyPersistentClient();
325
+ }
269
326
  this.inflightClient = null;
327
+ this.inflightSessionId = null;
328
+ }
329
+ }
330
+ /** Destroys the persistent client and clears all related state. */
331
+ destroyPersistentClient() {
332
+ if (this.persistentClient) {
333
+ this.persistentClient.destroy();
334
+ this.persistentClient = null;
335
+ this.persistentSessionId = null;
270
336
  }
271
337
  }
272
338
  buildGeminiArgs(model) {
@@ -287,7 +353,7 @@ class GeminiExecutor {
287
353
  if (msg.includes('invalid argument') || msg.includes('400')) {
288
354
  return `❌ Prompt too long (Context full). Try cleaning up with /compact or /clear.\n\nRaw error: ${msg}`;
289
355
  }
290
- if (msg.includes('exhausted your capacity') || msg.includes('quota')) {
356
+ if (msg.includes('exhausted your capacity') || msg.includes('quota') || msg.includes('No capacity available')) {
291
357
  const resetMatch = msg.match(/reset after ([^\s.]+)/i);
292
358
  const resetHint = resetMatch ? ` Quota resets in ${resetMatch[1]}.` : '';
293
359
  return (`⚠️ All Gemini models (${[this.model || 'pro', ...QUOTA_FALLBACK_ALIASES].join(' → ')}) have exhausted quota.${resetHint}\n\n` +
@@ -1 +1 @@
1
- {"version":3,"file":"GeminiExecutor.js","sourceRoot":"","sources":["../../src/executor/GeminiExecutor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GeminiExecutor.js","sourceRoot":"","sources":["../../src/executor/GeminiExecutor.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"security-guard.d.ts","sourceRoot":"","sources":["../../src/security/security-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC;IAC5C,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAsLD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,gBAAgB,CA+D3F;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAoB7D;AAED;;;GAGG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAiC1C"}
1
+ {"version":3,"file":"security-guard.d.ts","sourceRoot":"","sources":["../../src/security/security-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC;IAC5C,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAuLD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,gBAAgB,CA+D3F;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAoB7D;AAED;;;GAGG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAiC1C"}
@@ -66,7 +66,8 @@ const PIPE_TO_SHELL_PATTERNS = [
66
66
  /\|\s*sh\b/,
67
67
  /\|\s*zsh\b/,
68
68
  /\|\s*source\b/,
69
- /\$\(/, // Command substitution
69
+ /\$\(/, // Command substitution $()
70
+ /`/, // Backtick command substitution
70
71
  ];
71
72
  /**
72
73
  * Resolve a path that may contain ~ to an absolute path
@@ -1 +1 @@
1
- {"version":3,"file":"security-guard.js","sourceRoot":"","sources":["../../src/security/security-guard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"security-guard.js","sourceRoot":"","sources":["../../src/security/security-guard.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yu_robotics/remote-cli",
3
- "version": "1.1.36",
3
+ "version": "1.1.38",
4
4
  "description": "Remote control Claude Code CLI via mobile",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",