imcodes 2026.4.1871-dev.1857 → 2026.4.1872-dev.1858

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.
@@ -1,8 +1,8 @@
1
- export declare const SESSION_AGENT_TYPES: readonly ["claude-code-sdk", "claude-code", "codex-sdk", "codex", "copilot-sdk", "cursor-headless", "opencode", "gemini", "qwen", "openclaw", "shell", "script"];
1
+ export declare const SESSION_AGENT_TYPES: readonly ["claude-code-sdk", "claude-code", "codex-sdk", "codex", "copilot-sdk", "cursor-headless", "opencode", "gemini-sdk", "gemini", "qwen", "openclaw", "shell", "script"];
2
2
  export type SessionAgentType = typeof SESSION_AGENT_TYPES[number];
3
3
  export declare const CLAUDE_CODE_FAMILY: readonly ["claude-code-sdk", "claude-code"];
4
4
  export declare const CODEX_FAMILY: readonly ["codex-sdk", "codex"];
5
- export declare const TRANSPORT_SESSION_AGENT_TYPES: readonly ["claude-code-sdk", "codex-sdk", "copilot-sdk", "cursor-headless", "qwen", "openclaw"];
5
+ export declare const TRANSPORT_SESSION_AGENT_TYPES: readonly ["claude-code-sdk", "codex-sdk", "copilot-sdk", "cursor-headless", "gemini-sdk", "qwen", "openclaw"];
6
6
  export declare const PROCESS_SESSION_AGENT_TYPES: readonly ["claude-code", "codex", "opencode", "gemini", "shell", "script"];
7
7
  export declare function isSessionAgentType(value: string): value is SessionAgentType;
8
8
  export declare function isClaudeCodeFamily(value: string): value is typeof CLAUDE_CODE_FAMILY[number];
@@ -1 +1 @@
1
- {"version":3,"file":"agent-types.d.ts","sourceRoot":"","sources":["../../shared/agent-types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,kKAatB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAElE,eAAO,MAAM,kBAAkB,6CAA8C,CAAC;AAC9E,eAAO,MAAM,YAAY,iCAAkC,CAAC;AAC5D,eAAO,MAAM,6BAA6B,iGAOhC,CAAC;AACX,eAAO,MAAM,2BAA2B,4EAA6E,CAAC;AAEtH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,gBAAgB,CAE3E;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAE5F;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,OAAO,YAAY,CAAC,MAAM,CAAC,CAEjF;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,OAAO,6BAA6B,CAAC,MAAM,CAAC,CAEhH;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAE5E"}
1
+ {"version":3,"file":"agent-types.d.ts","sourceRoot":"","sources":["../../shared/agent-types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,gLActB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAElE,eAAO,MAAM,kBAAkB,6CAA8C,CAAC;AAC9E,eAAO,MAAM,YAAY,iCAAkC,CAAC;AAC5D,eAAO,MAAM,6BAA6B,+GAQhC,CAAC;AACX,eAAO,MAAM,2BAA2B,4EAA6E,CAAC;AAEtH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,gBAAgB,CAE3E;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAE5F;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,OAAO,YAAY,CAAC,MAAM,CAAC,CAEjF;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,OAAO,6BAA6B,CAAC,MAAM,CAAC,CAEhH;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAE5E"}
@@ -6,6 +6,7 @@ export const SESSION_AGENT_TYPES = [
6
6
  'copilot-sdk',
7
7
  'cursor-headless',
8
8
  'opencode',
9
+ 'gemini-sdk',
9
10
  'gemini',
10
11
  'qwen',
11
12
  'openclaw',
@@ -19,6 +20,7 @@ export const TRANSPORT_SESSION_AGENT_TYPES = [
19
20
  'codex-sdk',
20
21
  'copilot-sdk',
21
22
  'cursor-headless',
23
+ 'gemini-sdk',
22
24
  'qwen',
23
25
  'openclaw',
24
26
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"agent-types.js","sourceRoot":"","sources":["../../shared/agent-types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,iBAAiB;IACjB,aAAa;IACb,WAAW;IACX,OAAO;IACP,aAAa;IACb,iBAAiB;IACjB,UAAU;IACV,QAAQ;IACR,MAAM;IACN,UAAU;IACV,OAAO;IACP,QAAQ;CACA,CAAC;AAIX,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,iBAAiB,EAAE,aAAa,CAAU,CAAC;AAC9E,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,WAAW,EAAE,OAAO,CAAU,CAAC;AAC5D,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,iBAAiB;IACjB,WAAW;IACX,aAAa;IACb,iBAAiB;IACjB,MAAM;IACN,UAAU;CACF,CAAC;AACX,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAU,CAAC;AAEtH,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,OAAQ,mBAAyC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,OAAQ,kBAAwC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,OAAQ,YAAkC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,KAAa;IACvD,OAAQ,6BAAmD,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAa;IACjD,OAAO,2BAA2B,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;AACtE,CAAC"}
1
+ {"version":3,"file":"agent-types.js","sourceRoot":"","sources":["../../shared/agent-types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,iBAAiB;IACjB,aAAa;IACb,WAAW;IACX,OAAO;IACP,aAAa;IACb,iBAAiB;IACjB,UAAU;IACV,YAAY;IACZ,QAAQ;IACR,MAAM;IACN,UAAU;IACV,OAAO;IACP,QAAQ;CACA,CAAC;AAIX,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,iBAAiB,EAAE,aAAa,CAAU,CAAC;AAC9E,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,WAAW,EAAE,OAAO,CAAU,CAAC;AAC5D,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,iBAAiB;IACjB,WAAW;IACX,aAAa;IACb,iBAAiB;IACjB,YAAY;IACZ,MAAM;IACN,UAAU;CACF,CAAC;AACX,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAU,CAAC;AAEtH,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,OAAQ,mBAAyC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,OAAQ,kBAAwC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,OAAQ,YAAkC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,KAAa;IACvD,OAAQ,6BAAmD,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAa;IACjD,OAAO,2BAA2B,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;AACtE,CAAC"}
@@ -16,7 +16,7 @@ export declare const SUPERVISION_MODE: {
16
16
  export declare const SUPERVISION_TRANSPORT_CONFIG_KEY: "supervision";
17
17
  export declare const SUPERVISION_USER_DEFAULT_PREF_KEY: "supervision.user_default";
18
18
  export declare const SUPERVISION_SUPPORTED_BACKENDS: readonly ["claude-code-sdk", "codex-sdk", "qwen", "openclaw"];
19
- export declare const SUPERVISION_SUPPORTED_TARGET_SESSION_TYPES: readonly ["claude-code-sdk", "codex-sdk", "copilot-sdk", "cursor-headless", "qwen", "openclaw"];
19
+ export declare const SUPERVISION_SUPPORTED_TARGET_SESSION_TYPES: readonly ["claude-code-sdk", "codex-sdk", "copilot-sdk", "cursor-headless", "gemini-sdk", "qwen", "openclaw"];
20
20
  export declare const SUPERVISION_UNSUPPORTED_TARGET_SESSION_TYPES: readonly ["claude-code", "codex", "opencode", "gemini", "shell", "script"];
21
21
  export declare const SUPERVISION_AUDIT_MODES: SupervisionAuditMode[];
22
22
  export declare const SUPERVISION_DEFAULT_TIMEOUT_MS = 12000;
@@ -1 +1 @@
1
- {"version":3,"file":"supervision-config.d.ts","sourceRoot":"","sources":["../../shared/supervision-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"supervision-config.d.ts","sourceRoot":"","sources":["../../shared/supervision-config.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,7 @@ export type TransportAgent = typeof TRANSPORT_SESSION_AGENT_TYPES[number];
13
13
  /** All agent types */
14
14
  export type AgentType = SessionAgentType;
15
15
  /** Set of all transport agent type strings */
16
- export declare const TRANSPORT_AGENTS: Set<"claude-code-sdk" | "codex-sdk" | "qwen" | "openclaw" | "copilot-sdk" | "cursor-headless">;
16
+ export declare const TRANSPORT_AGENTS: Set<"claude-code-sdk" | "codex-sdk" | "qwen" | "openclaw" | "copilot-sdk" | "cursor-headless" | "gemini-sdk">;
17
17
  /** Set of all process agent type strings */
18
18
  export declare const PROCESS_AGENTS: Set<"claude-code" | "codex" | "opencode" | "gemini" | "shell" | "script">;
19
19
  /** Check if an agent type is transport-backed */
@@ -1 +1 @@
1
- {"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../../src/agent/detect.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,2BAA2B,EAC3B,6BAA6B,EAC7B,KAAK,gBAAgB,EACtB,MAAM,6BAA6B,CAAC;AAErC,MAAM,MAAM,WAAW,GACnB,MAAM,GACN,WAAW,GACX,UAAU,GACV,cAAc,GACd,YAAY,GACZ,OAAO,GACP,SAAS,CAAC;AAEd,2DAA2D;AAC3D,MAAM,MAAM,YAAY,GAAG,OAAO,2BAA2B,CAAC,MAAM,CAAC,CAAC;AAEtE,iEAAiE;AACjE,MAAM,MAAM,cAAc,GAAG,OAAO,6BAA6B,CAAC,MAAM,CAAC,CAAC;AAE1E,sBAAsB;AACtB,MAAM,MAAM,SAAS,GAAG,gBAAgB,CAAC;AAEzC,8CAA8C;AAC9C,eAAO,MAAM,gBAAgB,gGAAyD,CAAC;AAEvF,4CAA4C;AAC5C,eAAO,MAAM,cAAc,2EAAqD,CAAC;AAEjF,iDAAiD;AACjD,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,IAAI,cAAc,CAE/E;AAED,+CAA+C;AAC/C,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,IAAI,YAAY,CAE3E;AAuID,yDAAyD;AACzD,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EAAE,EACf,SAAS,EAAE,SAAS;AACpB,+FAA+F;AAC/F,UAAU,CAAC,EAAE,MAAM,GAClB,WAAW,CA0Eb;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,YAAY,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,EACrC,SAAS,EAAE,SAAS,EACpB,IAAI,CAAC,EAAE,kBAAkB,GACxB,OAAO,CAAC,WAAW,CAAC,CAiCtB;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,WAAW,CAAC,CAMtB"}
1
+ {"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../../src/agent/detect.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,2BAA2B,EAC3B,6BAA6B,EAC7B,KAAK,gBAAgB,EACtB,MAAM,6BAA6B,CAAC;AAErC,MAAM,MAAM,WAAW,GACnB,MAAM,GACN,WAAW,GACX,UAAU,GACV,cAAc,GACd,YAAY,GACZ,OAAO,GACP,SAAS,CAAC;AAEd,2DAA2D;AAC3D,MAAM,MAAM,YAAY,GAAG,OAAO,2BAA2B,CAAC,MAAM,CAAC,CAAC;AAEtE,iEAAiE;AACjE,MAAM,MAAM,cAAc,GAAG,OAAO,6BAA6B,CAAC,MAAM,CAAC,CAAC;AAE1E,sBAAsB;AACtB,MAAM,MAAM,SAAS,GAAG,gBAAgB,CAAC;AAEzC,8CAA8C;AAC9C,eAAO,MAAM,gBAAgB,+GAAyD,CAAC;AAEvF,4CAA4C;AAC5C,eAAO,MAAM,cAAc,2EAAqD,CAAC;AAEjF,iDAAiD;AACjD,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,IAAI,cAAc,CAE/E;AAED,+CAA+C;AAC/C,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,IAAI,YAAY,CAE3E;AAuID,yDAAyD;AACzD,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EAAE,EACf,SAAS,EAAE,SAAS;AACpB,+FAA+F;AAC/F,UAAU,CAAC,EAAE,MAAM,GAClB,WAAW,CA0Eb;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,YAAY,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,EACrC,SAAS,EAAE,SAAS,EACpB,IAAI,CAAC,EAAE,kBAAkB,GACxB,OAAO,CAAC,WAAW,CAAC,CAiCtB;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,WAAW,CAAC,CAMtB"}
@@ -77,6 +77,10 @@ async function createProvider(id) {
77
77
  const { QwenProvider } = await import('./providers/qwen.js');
78
78
  return new QwenProvider();
79
79
  }
80
+ case 'gemini-sdk': {
81
+ const { GeminiSdkProvider } = await import('./providers/gemini-sdk.js');
82
+ return new GeminiSdkProvider();
83
+ }
80
84
  case 'claude-code-sdk': {
81
85
  const { ClaudeCodeSdkProvider } = await import('./providers/claude-code-sdk.js');
82
86
  return new ClaudeCodeSdkProvider();
@@ -1 +1 @@
1
- {"version":3,"file":"provider-registry.js","sourceRoot":"","sources":["../../../src/agent/provider-registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider-registry.js","sourceRoot":"","sources":["../../../src/agent/provider-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * GeminiSdkProvider — TransportProvider that drives `gemini --acp` over the
3
+ * Agent Client Protocol (ACP, https://agentclientprotocol.com/).
4
+ *
5
+ * Architecture
6
+ * ------------
7
+ * ACP is a JSON-RPC 2.0 protocol over stdio. We use the canonical TypeScript
8
+ * client from `@agentclientprotocol/sdk` (the same library the Gemini CLI
9
+ * itself implements on the agent side, see
10
+ * gemini-cli/packages/cli/src/acp/acpClient.ts) so we don't have to reimplement
11
+ * request/response correlation, ndjson framing, or bidirectional RPC routing.
12
+ *
13
+ * One `gemini --acp` child is spawned per daemon on connect() and held for
14
+ * the lifetime of the provider. Multiple ACP sessions are multiplexed over the
15
+ * single stdio connection — the SDK routes each notification/request by
16
+ * `sessionId`, we just maintain a `sessionId → route` map.
17
+ *
18
+ * Unlike QwenProvider (which spawns per-turn `qwen -p` processes and parses
19
+ * Anthropic-shaped stream-json lines), this provider:
20
+ * - Holds a single long-lived process (like CodexSdkProvider).
21
+ * - Emits completion when `agent.prompt()` resolves with `{ stopReason }`,
22
+ * not on a final line event.
23
+ * - Routes tool_call / tool_call_update events by ACP `toolCallId`.
24
+ *
25
+ * Session persistence
26
+ * -------------------
27
+ * Gemini CLI persists session history to
28
+ * `~/.gemini/tmp/<project>/chats/<sessionId>.json`, so `session/load` works
29
+ * across process restarts. We call `newSession` on first send and `loadSession`
30
+ * when a `resumeId` is present.
31
+ *
32
+ * Limitations (intentional for MVP)
33
+ * ---------------------------------
34
+ * - Reasoning effort: ACP has no per-session effort knob; Gemini bakes thinking
35
+ * budget into the model choice. capabilities.reasoningEffort = false.
36
+ * - Attachments: ACP supports image/audio ContentBlocks, but we currently
37
+ * accept text only to match other SDK providers.
38
+ * - Filesystem reverse-RPC: we advertise fs capabilities = false so the agent
39
+ * uses its own fs access. Wiring client-side fs through the daemon would
40
+ * require a permission-broker integration we don't need yet.
41
+ * - Auth: the Gemini CLI caches OAuth credentials under ~/.gemini/. We do NOT
42
+ * call `authenticate()` and rely on the user having logged in once. API-key
43
+ * auth can be added later by wiring the `AUTHENTICATE` path.
44
+ */
45
+ import type { TransportProvider, ProviderCapabilities, ProviderConfig, ProviderError, SessionConfig, SessionInfoUpdate, ProviderStatusUpdate, ToolCallEvent } from '../transport-provider.js';
46
+ import type { AgentMessage, MessageDelta } from '../../../shared/agent-message.js';
47
+ import type { ProviderContextPayload } from '../../../shared/context-types.js';
48
+ import type { TransportAttachment } from '../../../shared/transport-attachments.js';
49
+ import type { TransportEffortLevel } from '../../../shared/effort-levels.js';
50
+ export declare class GeminiSdkProvider implements TransportProvider {
51
+ readonly id = "gemini-sdk";
52
+ readonly connectionMode: "local-sdk";
53
+ readonly sessionOwnership: "shared";
54
+ readonly capabilities: ProviderCapabilities;
55
+ private config;
56
+ private sessions;
57
+ /** Reverse lookup so `sessionUpdate` notifications can find the right state
58
+ * by ACP sessionId (which we only learn after newSession/loadSession). */
59
+ private acpToRoute;
60
+ private deltaCallbacks;
61
+ private completeCallbacks;
62
+ private errorCallbacks;
63
+ private toolCallCallbacks;
64
+ private sessionInfoCallbacks;
65
+ private statusCallbacks;
66
+ private child;
67
+ private connection;
68
+ /** Resolves once `initialize` has completed so subsequent RPCs can proceed. */
69
+ private initPromise;
70
+ connect(config: ProviderConfig): Promise<void>;
71
+ disconnect(): Promise<void>;
72
+ createSession(config: SessionConfig): Promise<string>;
73
+ endSession(sessionId: string): Promise<void>;
74
+ onDelta(cb: (sessionId: string, delta: MessageDelta) => void): () => void;
75
+ onComplete(cb: (sessionId: string, message: AgentMessage) => void): () => void;
76
+ onError(cb: (sessionId: string, error: ProviderError) => void): () => void;
77
+ onToolCall(cb: (sessionId: string, tool: ToolCallEvent) => void): void;
78
+ onSessionInfo(cb: (sessionId: string, info: SessionInfoUpdate) => void): () => void;
79
+ onStatus(cb: (sessionId: string, status: ProviderStatusUpdate) => void): () => void;
80
+ setSessionAgentId(sessionId: string, agentId: string): void;
81
+ send(sessionId: string, payloadOrMessage: string | ProviderContextPayload, attachments?: TransportAttachment[], extraSystemPrompt?: string): Promise<void>;
82
+ cancel(sessionId: string): Promise<void>;
83
+ private startAcpServer;
84
+ /** Build the Client impl passed to ClientSideConnection. The SDK invokes
85
+ * these methods when the agent sends us requests/notifications. */
86
+ private createClientImpl;
87
+ private startTurn;
88
+ /** Create the session on the agent if it doesn't exist yet, otherwise
89
+ * resume it. Applies `yolo` mode once per session. */
90
+ private ensureSessionReady;
91
+ private createFreshAcpSession;
92
+ private applySessionMetadata;
93
+ private buildPromptContent;
94
+ private settleTurn;
95
+ private handleSessionUpdate;
96
+ private handleAgentChunk;
97
+ private handleToolCall;
98
+ private handleToolCallUpdate;
99
+ private emitMergedToolCall;
100
+ private teardownChild;
101
+ private emitSessionInfo;
102
+ private emitStatus;
103
+ private clearStatus;
104
+ private emitError;
105
+ private resolveBinaryPath;
106
+ private makeError;
107
+ private normalizeError;
108
+ /** Hook used by setSessionEffort in the TransportProvider interface — we
109
+ * declare reasoningEffort:false so this should never be called, but other
110
+ * providers define the method so we mirror the shape. */
111
+ setSessionEffort(_sessionId: string, _effort: TransportEffortLevel): void;
112
+ }
113
+ //# sourceMappingURL=gemini-sdk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-sdk.d.ts","sourceRoot":"","sources":["../../../../src/agent/providers/gemini-sdk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,795 @@
1
+ /**
2
+ * GeminiSdkProvider — TransportProvider that drives `gemini --acp` over the
3
+ * Agent Client Protocol (ACP, https://agentclientprotocol.com/).
4
+ *
5
+ * Architecture
6
+ * ------------
7
+ * ACP is a JSON-RPC 2.0 protocol over stdio. We use the canonical TypeScript
8
+ * client from `@agentclientprotocol/sdk` (the same library the Gemini CLI
9
+ * itself implements on the agent side, see
10
+ * gemini-cli/packages/cli/src/acp/acpClient.ts) so we don't have to reimplement
11
+ * request/response correlation, ndjson framing, or bidirectional RPC routing.
12
+ *
13
+ * One `gemini --acp` child is spawned per daemon on connect() and held for
14
+ * the lifetime of the provider. Multiple ACP sessions are multiplexed over the
15
+ * single stdio connection — the SDK routes each notification/request by
16
+ * `sessionId`, we just maintain a `sessionId → route` map.
17
+ *
18
+ * Unlike QwenProvider (which spawns per-turn `qwen -p` processes and parses
19
+ * Anthropic-shaped stream-json lines), this provider:
20
+ * - Holds a single long-lived process (like CodexSdkProvider).
21
+ * - Emits completion when `agent.prompt()` resolves with `{ stopReason }`,
22
+ * not on a final line event.
23
+ * - Routes tool_call / tool_call_update events by ACP `toolCallId`.
24
+ *
25
+ * Session persistence
26
+ * -------------------
27
+ * Gemini CLI persists session history to
28
+ * `~/.gemini/tmp/<project>/chats/<sessionId>.json`, so `session/load` works
29
+ * across process restarts. We call `newSession` on first send and `loadSession`
30
+ * when a `resumeId` is present.
31
+ *
32
+ * Limitations (intentional for MVP)
33
+ * ---------------------------------
34
+ * - Reasoning effort: ACP has no per-session effort knob; Gemini bakes thinking
35
+ * budget into the model choice. capabilities.reasoningEffort = false.
36
+ * - Attachments: ACP supports image/audio ContentBlocks, but we currently
37
+ * accept text only to match other SDK providers.
38
+ * - Filesystem reverse-RPC: we advertise fs capabilities = false so the agent
39
+ * uses its own fs access. Wiring client-side fs through the daemon would
40
+ * require a permission-broker integration we don't need yet.
41
+ * - Auth: the Gemini CLI caches OAuth credentials under ~/.gemini/. We do NOT
42
+ * call `authenticate()` and rely on the user having logged in once. API-key
43
+ * auth can be added later by wiring the `AUTHENTICATE` path.
44
+ */
45
+ import { spawn } from 'node:child_process';
46
+ import { Readable, Writable } from 'node:stream';
47
+ import { randomUUID } from 'node:crypto';
48
+ import { ClientSideConnection, ndJsonStream, RequestError, } from '@agentclientprotocol/sdk';
49
+ import { killProcessTree } from '../../util/kill-process-tree.js';
50
+ import { CONNECTION_MODES, normalizeProviderPayload, SESSION_OWNERSHIP, PROVIDER_ERROR_CODES, } from '../transport-provider.js';
51
+ import logger from '../../util/logger.js';
52
+ import { normalizeTransportCwd, resolveExecutableForSpawn } from '../transport-paths.js';
53
+ const GEMINI_BIN = 'gemini';
54
+ /** ACP mode id we request once per session. Matches the `yolo` mode advertised
55
+ * by the Gemini CLI (see packages/core/src/policy/types.ts ApprovalMode). */
56
+ const GEMINI_YOLO_MODE = 'yolo';
57
+ export class GeminiSdkProvider {
58
+ id = 'gemini-sdk';
59
+ connectionMode = CONNECTION_MODES.LOCAL_SDK;
60
+ sessionOwnership = SESSION_OWNERSHIP.SHARED;
61
+ capabilities = {
62
+ streaming: true,
63
+ toolCalling: true,
64
+ approval: false,
65
+ sessionRestore: true,
66
+ multiTurn: true,
67
+ attachments: false,
68
+ reasoningEffort: false,
69
+ contextSupport: 'degraded-message-side-context-mapping',
70
+ };
71
+ config = null;
72
+ sessions = new Map();
73
+ /** Reverse lookup so `sessionUpdate` notifications can find the right state
74
+ * by ACP sessionId (which we only learn after newSession/loadSession). */
75
+ acpToRoute = new Map();
76
+ deltaCallbacks = [];
77
+ completeCallbacks = [];
78
+ errorCallbacks = [];
79
+ toolCallCallbacks = [];
80
+ sessionInfoCallbacks = [];
81
+ statusCallbacks = [];
82
+ child = null;
83
+ connection = null;
84
+ /** Resolves once `initialize` has completed so subsequent RPCs can proceed. */
85
+ initPromise = null;
86
+ async connect(config) {
87
+ await this.startAcpServer(config);
88
+ this.config = config;
89
+ logger.info({ provider: this.id }, 'Gemini SDK provider connected via --acp');
90
+ }
91
+ async disconnect() {
92
+ this.teardownChild();
93
+ this.acpToRoute.clear();
94
+ this.sessions.clear();
95
+ this.config = null;
96
+ this.initPromise = null;
97
+ }
98
+ async createSession(config) {
99
+ const routeId = config.bindExistingKey ?? config.sessionKey;
100
+ const existing = config.fresh ? undefined : this.sessions.get(routeId);
101
+ const state = {
102
+ routeId,
103
+ cwd: normalizeTransportCwd(config.cwd) ?? existing?.cwd ?? normalizeTransportCwd(process.cwd()),
104
+ model: typeof config.agentId === 'string' ? config.agentId : existing?.model,
105
+ acpSessionId: config.resumeId ?? existing?.acpSessionId,
106
+ loaded: false,
107
+ modeApplied: false,
108
+ promptInFlight: false,
109
+ replaying: false,
110
+ cancelled: false,
111
+ currentMessageId: null,
112
+ currentText: '',
113
+ toolCalls: new Map(),
114
+ emittedToolSignatures: new Map(),
115
+ lastStatusSignature: null,
116
+ };
117
+ this.sessions.set(routeId, state);
118
+ if (state.acpSessionId) {
119
+ this.acpToRoute.set(state.acpSessionId, routeId);
120
+ this.emitSessionInfo(routeId, { resumeId: state.acpSessionId });
121
+ }
122
+ return routeId;
123
+ }
124
+ async endSession(sessionId) {
125
+ const state = this.sessions.get(sessionId);
126
+ if (!state)
127
+ return;
128
+ // ACP has a session/close RPC (optional capability). We call it best-effort
129
+ // so the agent can free state; if it fails, the session is still gone on
130
+ // our side. closeSession is optional on the Agent interface so we have to
131
+ // feature-detect.
132
+ if (state.acpSessionId && state.loaded && this.connection) {
133
+ const closer = this.connection.closeSession;
134
+ if (typeof closer === 'function') {
135
+ await closer.call(this.connection, { sessionId: state.acpSessionId }).catch(() => { });
136
+ }
137
+ this.acpToRoute.delete(state.acpSessionId);
138
+ }
139
+ this.sessions.delete(sessionId);
140
+ }
141
+ onDelta(cb) {
142
+ this.deltaCallbacks.push(cb);
143
+ return () => {
144
+ const idx = this.deltaCallbacks.indexOf(cb);
145
+ if (idx >= 0)
146
+ this.deltaCallbacks.splice(idx, 1);
147
+ };
148
+ }
149
+ onComplete(cb) {
150
+ this.completeCallbacks.push(cb);
151
+ return () => {
152
+ const idx = this.completeCallbacks.indexOf(cb);
153
+ if (idx >= 0)
154
+ this.completeCallbacks.splice(idx, 1);
155
+ };
156
+ }
157
+ onError(cb) {
158
+ this.errorCallbacks.push(cb);
159
+ return () => {
160
+ const idx = this.errorCallbacks.indexOf(cb);
161
+ if (idx >= 0)
162
+ this.errorCallbacks.splice(idx, 1);
163
+ };
164
+ }
165
+ onToolCall(cb) {
166
+ this.toolCallCallbacks.push(cb);
167
+ }
168
+ onSessionInfo(cb) {
169
+ this.sessionInfoCallbacks.push(cb);
170
+ return () => {
171
+ const idx = this.sessionInfoCallbacks.indexOf(cb);
172
+ if (idx >= 0)
173
+ this.sessionInfoCallbacks.splice(idx, 1);
174
+ };
175
+ }
176
+ onStatus(cb) {
177
+ this.statusCallbacks.push(cb);
178
+ return () => {
179
+ const idx = this.statusCallbacks.indexOf(cb);
180
+ if (idx >= 0)
181
+ this.statusCallbacks.splice(idx, 1);
182
+ };
183
+ }
184
+ setSessionAgentId(sessionId, agentId) {
185
+ const state = this.sessions.get(sessionId);
186
+ if (!state)
187
+ return;
188
+ state.model = agentId;
189
+ // If session already loaded, best-effort push the model change via the
190
+ // experimental RPC. Swallow errors: if the CLI version predates it,
191
+ // subsequent prompts still use the original model — still correct, just
192
+ // not the requested one.
193
+ if (state.acpSessionId && state.loaded && this.connection) {
194
+ const setter = this.connection.unstable_setSessionModel;
195
+ if (typeof setter === 'function') {
196
+ void setter.call(this.connection, {
197
+ sessionId: state.acpSessionId,
198
+ modelId: agentId,
199
+ }).catch((err) => {
200
+ logger.debug({ provider: this.id, err, agentId }, 'unstable_setSessionModel failed (non-fatal)');
201
+ });
202
+ }
203
+ }
204
+ }
205
+ async send(sessionId, payloadOrMessage, attachments, extraSystemPrompt) {
206
+ if (!this.config || !this.connection) {
207
+ throw this.makeError(PROVIDER_ERROR_CODES.CONNECTION_LOST, 'Gemini ACP server not connected', false);
208
+ }
209
+ const state = this.sessions.get(sessionId);
210
+ if (!state) {
211
+ throw this.makeError(PROVIDER_ERROR_CODES.SESSION_NOT_FOUND, `Unknown Gemini SDK session: ${sessionId}`, false);
212
+ }
213
+ if (state.promptInFlight) {
214
+ throw this.makeError(PROVIDER_ERROR_CODES.PROVIDER_ERROR, 'Gemini SDK session is already busy', true);
215
+ }
216
+ state.cancelled = false;
217
+ // NOTE: currentText/currentMessageId are cleared AFTER ensureSessionReady
218
+ // inside startTurn — not here. `loadSession` replays the full conversation
219
+ // history as `agent_message_chunk` notifications, and if we cleared before
220
+ // resume those replay chunks would accumulate into currentText and be
221
+ // re-emitted as the new turn's content.
222
+ state.toolCalls.clear();
223
+ state.emittedToolSignatures.clear();
224
+ state.lastStatusSignature = null;
225
+ const payload = normalizeProviderPayload(payloadOrMessage, attachments, extraSystemPrompt);
226
+ await this.startTurn(sessionId, state, payload);
227
+ }
228
+ async cancel(sessionId) {
229
+ const state = this.sessions.get(sessionId);
230
+ if (!state?.acpSessionId || !state.promptInFlight || !this.connection)
231
+ return;
232
+ state.cancelled = true;
233
+ // `cancel` is a one-shot notification; the pending prompt() Promise will
234
+ // then resolve with stopReason='cancelled' (or occasionally the agent
235
+ // settles with the partial turn — we handle both in startTurn).
236
+ await this.connection.cancel({ sessionId: state.acpSessionId }).catch((err) => {
237
+ logger.debug({ provider: this.id, sessionId, err }, 'ACP cancel notification failed (non-fatal)');
238
+ });
239
+ }
240
+ // ── ACP client-side glue ────────────────────────────────────────────────
241
+ async startAcpServer(config) {
242
+ this.teardownChild();
243
+ const binaryPath = this.resolveBinaryPath(config);
244
+ const resolved = resolveExecutableForSpawn(binaryPath);
245
+ const args = [...resolved.prependArgs, '--acp'];
246
+ const child = spawn(resolved.executable, args, {
247
+ stdio: ['pipe', 'pipe', 'pipe'],
248
+ env: { ...process.env, ...(config.env ?? {}) },
249
+ windowsHide: true,
250
+ });
251
+ this.child = child;
252
+ child.stderr.on('data', (chunk) => {
253
+ const text = chunk.toString().trim();
254
+ if (!text)
255
+ return;
256
+ // Gemini CLI writes verbose startup noise to stderr. Keep it at debug to
257
+ // avoid polluting normal daemon logs.
258
+ logger.debug({ provider: this.id, stderr: text }, 'Gemini ACP stderr');
259
+ });
260
+ child.on('exit', (code, signal) => {
261
+ const err = new Error(`Gemini ACP server exited with code=${code} signal=${signal}`);
262
+ const sessions = [...this.sessions.keys()];
263
+ for (const sid of sessions) {
264
+ this.emitError(sid, this.makeError(PROVIDER_ERROR_CODES.CONNECTION_LOST, err.message, false));
265
+ }
266
+ this.child = null;
267
+ this.connection = null;
268
+ this.initPromise = null;
269
+ });
270
+ child.on('error', (err) => {
271
+ logger.error({ provider: this.id, err }, 'Gemini ACP spawn error');
272
+ const sessions = [...this.sessions.keys()];
273
+ for (const sid of sessions) {
274
+ this.emitError(sid, this.makeError(PROVIDER_ERROR_CODES.CONNECTION_LOST, err.message, false));
275
+ }
276
+ this.child = null;
277
+ this.connection = null;
278
+ this.initPromise = null;
279
+ });
280
+ // `ndJsonStream` wants Web streams; convert the Node stdio streams.
281
+ const writable = Writable.toWeb(child.stdin);
282
+ const readable = Readable.toWeb(child.stdout);
283
+ const stream = ndJsonStream(writable, readable);
284
+ // Construct the ACP connection. The callback receives the Agent handle we
285
+ // can use to call RPC methods; we return a Client impl that handles
286
+ // reverse RPC (requestPermission + session notifications).
287
+ this.connection = new ClientSideConnection(() => this.createClientImpl(), stream);
288
+ // Kick off initialize once; all subsequent calls await the same promise.
289
+ this.initPromise = (async () => {
290
+ const result = await this.connection.initialize({
291
+ // Protocol version number. 1 is the current major; the agent tells us
292
+ // what it supports in the response but for now we only talk 1.
293
+ protocolVersion: 1,
294
+ clientCapabilities: {
295
+ fs: { readTextFile: false, writeTextFile: false },
296
+ // `terminal` is a boolean in current ACP schema. Leave off — we don't
297
+ // provide a client-side terminal.
298
+ terminal: false,
299
+ },
300
+ });
301
+ logger.info({ provider: this.id, agentInfo: result.agentInfo, caps: result.agentCapabilities }, 'Gemini ACP initialized');
302
+ })().catch((err) => {
303
+ logger.error({ provider: this.id, err }, 'Gemini ACP initialize failed');
304
+ throw err;
305
+ });
306
+ await this.initPromise;
307
+ }
308
+ /** Build the Client impl passed to ClientSideConnection. The SDK invokes
309
+ * these methods when the agent sends us requests/notifications. */
310
+ createClientImpl() {
311
+ return {
312
+ requestPermission: async (params) => {
313
+ // We operate exclusively in `yolo` mode after setSessionMode, so this
314
+ // path should never fire — but guard against an agent that ignores the
315
+ // mode for particularly dangerous ops. Respond "cancelled" so the
316
+ // agent aborts the tool call rather than hanging forever. A future
317
+ // revision can plumb this to a real UI approval flow.
318
+ logger.warn({ provider: this.id, sessionId: params.sessionId, toolCall: params.toolCall?.title }, 'Gemini ACP requestPermission received in yolo mode; auto-denying');
319
+ return { outcome: { outcome: 'cancelled' } };
320
+ },
321
+ sessionUpdate: async (params) => {
322
+ this.handleSessionUpdate(params);
323
+ },
324
+ // Provide `readTextFile`/`writeTextFile` stubs so that if the agent ever
325
+ // tries to call them despite our caps advertising false, we fail loudly
326
+ // instead of hanging. These throw RequestError so the JSON-RPC layer
327
+ // reports a proper error code to the agent.
328
+ readTextFile: async (_params) => {
329
+ throw new RequestError(-32601, 'Method not available — client fs capability disabled');
330
+ },
331
+ writeTextFile: async (_params) => {
332
+ throw new RequestError(-32601, 'Method not available — client fs capability disabled');
333
+ },
334
+ };
335
+ }
336
+ // ── Prompt turn orchestration ───────────────────────────────────────────
337
+ async startTurn(sessionId, state, payload) {
338
+ state.promptInFlight = true;
339
+ try {
340
+ await this.ensureSessionReady(sessionId, state);
341
+ // Start the turn's delta buffer clean. (During loadSession the replay
342
+ // flag already suppresses accumulation; this belt-and-suspenders reset
343
+ // also catches any stray state left by a prior turn that errored out
344
+ // before settleTurn ran.)
345
+ state.currentText = '';
346
+ state.currentMessageId = null;
347
+ const promptBlocks = this.buildPromptContent(payload);
348
+ // Long-lived call — agent streams sessionUpdate notifications until this
349
+ // resolves with { stopReason }.
350
+ const result = await this.connection.prompt({
351
+ sessionId: state.acpSessionId,
352
+ prompt: promptBlocks,
353
+ });
354
+ this.settleTurn(sessionId, state, result.stopReason);
355
+ }
356
+ catch (err) {
357
+ state.promptInFlight = false;
358
+ this.clearStatus(sessionId, state);
359
+ this.emitError(sessionId, this.normalizeError(err));
360
+ }
361
+ }
362
+ /** Create the session on the agent if it doesn't exist yet, otherwise
363
+ * resume it. Applies `yolo` mode once per session. */
364
+ async ensureSessionReady(sessionId, state) {
365
+ if (!this.connection) {
366
+ throw this.makeError(PROVIDER_ERROR_CODES.CONNECTION_LOST, 'Gemini ACP connection not ready', false);
367
+ }
368
+ await this.initPromise;
369
+ if (!state.loaded) {
370
+ if (state.acpSessionId) {
371
+ // Resume an existing session (survives across CLI restarts via
372
+ // ~/.gemini/tmp/<project>/chats/<id>.json).
373
+ try {
374
+ const loader = this.connection.loadSession;
375
+ if (typeof loader !== 'function') {
376
+ throw new Error('Agent does not implement loadSession (capability mismatch)');
377
+ }
378
+ // `loadSession` streams the full message history back as
379
+ // session/update notifications *before* the RPC resolves. Set the
380
+ // replay flag so handleSessionUpdate drops those history chunks
381
+ // instead of forwarding them to the current-turn delta listeners.
382
+ state.replaying = true;
383
+ let loadResult;
384
+ try {
385
+ loadResult = await loader.call(this.connection, {
386
+ sessionId: state.acpSessionId,
387
+ cwd: state.cwd,
388
+ mcpServers: [],
389
+ });
390
+ }
391
+ finally {
392
+ state.replaying = false;
393
+ }
394
+ state.loaded = true;
395
+ this.applySessionMetadata(sessionId, state, loadResult);
396
+ }
397
+ catch (err) {
398
+ logger.info({ provider: this.id, sessionId, acpSessionId: state.acpSessionId, err }, 'Gemini ACP loadSession failed; falling back to newSession');
399
+ this.acpToRoute.delete(state.acpSessionId);
400
+ state.acpSessionId = undefined;
401
+ await this.createFreshAcpSession(sessionId, state);
402
+ }
403
+ }
404
+ else {
405
+ await this.createFreshAcpSession(sessionId, state);
406
+ }
407
+ }
408
+ if (!state.modeApplied && state.acpSessionId && this.connection) {
409
+ const modeSetter = this.connection.setSessionMode;
410
+ if (typeof modeSetter === 'function') {
411
+ await modeSetter.call(this.connection, {
412
+ sessionId: state.acpSessionId,
413
+ modeId: GEMINI_YOLO_MODE,
414
+ }).catch((err) => {
415
+ // Not fatal — default mode just means the agent will issue
416
+ // requestPermission callbacks that we auto-deny. Worth a log.
417
+ logger.warn({ provider: this.id, sessionId, err }, 'setSessionMode(yolo) failed; tools may be denied');
418
+ });
419
+ }
420
+ state.modeApplied = true;
421
+ }
422
+ // If the caller specified a model, push it once per turn so we follow
423
+ // setSessionAgentId calls that happened before the session was loaded.
424
+ if (state.model && state.acpSessionId && this.connection) {
425
+ const modelSetter = this.connection.unstable_setSessionModel;
426
+ if (typeof modelSetter === 'function') {
427
+ await modelSetter.call(this.connection, {
428
+ sessionId: state.acpSessionId,
429
+ modelId: state.model,
430
+ }).catch((err) => {
431
+ logger.debug({ provider: this.id, sessionId, err }, 'unstable_setSessionModel pre-turn failed (non-fatal)');
432
+ });
433
+ }
434
+ }
435
+ }
436
+ async createFreshAcpSession(sessionId, state) {
437
+ const result = await this.connection.newSession({
438
+ cwd: state.cwd,
439
+ mcpServers: [],
440
+ });
441
+ state.acpSessionId = result.sessionId;
442
+ state.loaded = true;
443
+ state.modeApplied = false;
444
+ this.acpToRoute.set(state.acpSessionId, sessionId);
445
+ this.applySessionMetadata(sessionId, state, result);
446
+ this.emitSessionInfo(sessionId, { resumeId: state.acpSessionId });
447
+ }
448
+ applySessionMetadata(sessionId, state, info) {
449
+ const currentModel = info.models?.currentModelId;
450
+ if (typeof currentModel === 'string' && !state.model) {
451
+ state.model = currentModel;
452
+ this.emitSessionInfo(sessionId, { model: currentModel });
453
+ }
454
+ }
455
+ buildPromptContent(payload) {
456
+ // ACP has no separate system-prompt slot. Follow the CodexSdkProvider
457
+ // convention and prepend the resolved systemText as a context preamble so
458
+ // the agent sees the persona/description alongside the user turn.
459
+ const userText = payload.systemText
460
+ ? `Context instructions:\n${payload.systemText}\n\n${payload.assembledMessage}`
461
+ : payload.assembledMessage;
462
+ return [{ type: 'text', text: userText }];
463
+ }
464
+ settleTurn(sessionId, state, stopReason) {
465
+ state.promptInFlight = false;
466
+ this.clearStatus(sessionId, state);
467
+ const text = state.currentText;
468
+ const messageId = state.currentMessageId ?? `${sessionId}:${randomUUID()}`;
469
+ state.currentText = '';
470
+ state.currentMessageId = null;
471
+ if (stopReason === 'cancelled' || state.cancelled) {
472
+ state.cancelled = false;
473
+ this.emitError(sessionId, this.makeError(PROVIDER_ERROR_CODES.CANCELLED, 'Gemini turn cancelled', true));
474
+ return;
475
+ }
476
+ if (stopReason === 'refusal') {
477
+ this.emitError(sessionId, this.makeError(PROVIDER_ERROR_CODES.PROVIDER_ERROR, 'Gemini refused the request', false));
478
+ return;
479
+ }
480
+ if (stopReason === 'max_tokens' || stopReason === 'max_turn_requests') {
481
+ // Still emit whatever text we accumulated — it's a partial but useful
482
+ // response — and mark metadata so the UI can show the truncation cause.
483
+ const msg = {
484
+ id: messageId,
485
+ sessionId,
486
+ kind: 'text',
487
+ role: 'assistant',
488
+ content: text,
489
+ timestamp: Date.now(),
490
+ status: 'complete',
491
+ metadata: {
492
+ stopReason,
493
+ ...(state.model ? { model: state.model } : {}),
494
+ ...(state.acpSessionId ? { resumeId: state.acpSessionId } : {}),
495
+ },
496
+ };
497
+ for (const cb of this.completeCallbacks)
498
+ cb(sessionId, msg);
499
+ return;
500
+ }
501
+ // stopReason === 'end_turn' (happy path).
502
+ const msg = {
503
+ id: messageId,
504
+ sessionId,
505
+ kind: 'text',
506
+ role: 'assistant',
507
+ content: text,
508
+ timestamp: Date.now(),
509
+ status: 'complete',
510
+ metadata: {
511
+ ...(state.model ? { model: state.model } : {}),
512
+ ...(state.acpSessionId ? { resumeId: state.acpSessionId } : {}),
513
+ },
514
+ };
515
+ for (const cb of this.completeCallbacks)
516
+ cb(sessionId, msg);
517
+ }
518
+ // ── sessionUpdate dispatch ──────────────────────────────────────────────
519
+ handleSessionUpdate(params) {
520
+ const routeId = this.acpToRoute.get(params.sessionId);
521
+ if (!routeId)
522
+ return;
523
+ const state = this.sessions.get(routeId);
524
+ if (!state)
525
+ return;
526
+ const update = params.update;
527
+ // While loadSession is replaying history, drop every turn-scoped event.
528
+ // We only resurface the persisted agent text/tools when the user actually
529
+ // asks a new question; replay is purely a server-side side-effect of
530
+ // session/load and must not be confused with the current-turn stream.
531
+ if (state.replaying) {
532
+ return;
533
+ }
534
+ switch (update.sessionUpdate) {
535
+ case 'agent_message_chunk':
536
+ this.handleAgentChunk(routeId, state, update);
537
+ return;
538
+ case 'agent_thought_chunk':
539
+ // ACP thought chunks map to our transient "thinking" status. We
540
+ // intentionally do NOT append the thought text to the main content
541
+ // stream — it's reasoning, not the assistant message.
542
+ this.emitStatus(routeId, state, { status: 'thinking', label: 'Thinking...' });
543
+ return;
544
+ case 'tool_call':
545
+ this.handleToolCall(routeId, state, update);
546
+ return;
547
+ case 'tool_call_update':
548
+ this.handleToolCallUpdate(routeId, state, update);
549
+ return;
550
+ case 'current_mode_update':
551
+ // Just informational — the user may have switched mode through the
552
+ // agent's own command vocabulary. Treat as metadata.
553
+ logger.debug({ provider: this.id, sessionId: routeId, modeId: update.currentModeId }, 'Gemini ACP mode changed');
554
+ return;
555
+ case 'usage_update': {
556
+ // Map ACP's usage update onto our generic quota/session-info signal.
557
+ // ACP's `UsageUpdate` is experimental; guard every field.
558
+ const u = update;
559
+ this.emitSessionInfo(routeId, {
560
+ ...(typeof u.tokens === 'object' && u.tokens
561
+ ? { quotaMeta: u.tokens }
562
+ : {}),
563
+ });
564
+ return;
565
+ }
566
+ case 'available_commands_update':
567
+ case 'user_message_chunk':
568
+ case 'plan':
569
+ case 'config_option_update':
570
+ case 'session_info_update':
571
+ // Ignore for now. `user_message_chunk` arrives during history replay
572
+ // and would double-inject prior user turns into the delta stream.
573
+ return;
574
+ default:
575
+ logger.debug({ provider: this.id, sessionId: routeId, sessionUpdate: update.sessionUpdate }, 'Unhandled ACP session update');
576
+ return;
577
+ }
578
+ }
579
+ handleAgentChunk(sessionId, state, update) {
580
+ const chunkText = extractTextFromContent(update.content);
581
+ if (!chunkText)
582
+ return;
583
+ this.clearStatus(sessionId, state);
584
+ // ACP has a `messageId` field on each chunk. When it changes we start a
585
+ // new assistant message. Fall back to our own UUID if the agent doesn't
586
+ // populate it (older CLI versions).
587
+ const incomingId = update.messageId ?? null;
588
+ if (incomingId && incomingId !== state.currentMessageId) {
589
+ state.currentMessageId = incomingId;
590
+ state.currentText = '';
591
+ }
592
+ else if (!state.currentMessageId) {
593
+ state.currentMessageId = randomUUID();
594
+ }
595
+ state.currentText += chunkText;
596
+ const delta = {
597
+ messageId: state.currentMessageId,
598
+ type: 'text',
599
+ delta: state.currentText,
600
+ role: 'assistant',
601
+ };
602
+ for (const cb of this.deltaCallbacks)
603
+ cb(sessionId, delta);
604
+ }
605
+ handleToolCall(sessionId, state, update) {
606
+ this.clearStatus(sessionId, state);
607
+ const merged = {
608
+ toolCallId: update.toolCallId,
609
+ title: update.title ?? update.toolCallId,
610
+ kind: update.kind ?? undefined,
611
+ status: update.status ?? 'pending',
612
+ content: Array.isArray(update.content) ? update.content : [],
613
+ rawInput: update.rawInput,
614
+ rawOutput: update.rawOutput,
615
+ };
616
+ state.toolCalls.set(update.toolCallId, merged);
617
+ this.emitMergedToolCall(sessionId, state, merged);
618
+ }
619
+ handleToolCallUpdate(sessionId, state, update) {
620
+ const existing = state.toolCalls.get(update.toolCallId);
621
+ // ACP spec: every field on ToolCallUpdate is optional and replaces the
622
+ // corresponding field on the original tool_call. We synthesize a stub if
623
+ // the agent updates a tool we never saw start (shouldn't happen, but
624
+ // defensive).
625
+ const merged = existing ?? {
626
+ toolCallId: update.toolCallId,
627
+ title: update.title ?? update.toolCallId,
628
+ kind: update.kind ?? undefined,
629
+ status: update.status ?? 'pending',
630
+ content: [],
631
+ };
632
+ if (typeof update.title === 'string')
633
+ merged.title = update.title;
634
+ if (typeof update.kind === 'string')
635
+ merged.kind = update.kind;
636
+ if (typeof update.status === 'string')
637
+ merged.status = update.status;
638
+ if (Array.isArray(update.content))
639
+ merged.content = update.content;
640
+ if ('rawInput' in update)
641
+ merged.rawInput = update.rawInput;
642
+ if ('rawOutput' in update)
643
+ merged.rawOutput = update.rawOutput;
644
+ state.toolCalls.set(update.toolCallId, merged);
645
+ this.emitMergedToolCall(sessionId, state, merged);
646
+ }
647
+ emitMergedToolCall(sessionId, state, merged) {
648
+ const normalizedStatus = mapToolStatus(merged.status);
649
+ const output = normalizedStatus === 'running' ? undefined : flattenToolContent(merged.content);
650
+ const evt = {
651
+ id: merged.toolCallId,
652
+ name: merged.title,
653
+ status: normalizedStatus,
654
+ ...(merged.rawInput !== undefined ? { input: merged.rawInput } : {}),
655
+ ...(output !== undefined ? { output } : {}),
656
+ detail: {
657
+ kind: merged.kind ?? 'tool_use',
658
+ summary: merged.title,
659
+ input: merged.rawInput,
660
+ output,
661
+ meta: { status: merged.status },
662
+ raw: merged,
663
+ },
664
+ };
665
+ const signature = JSON.stringify({
666
+ status: evt.status,
667
+ name: evt.name,
668
+ input: evt.input ?? null,
669
+ output: evt.output ?? null,
670
+ });
671
+ if (state.emittedToolSignatures.get(merged.toolCallId) === signature)
672
+ return;
673
+ state.emittedToolSignatures.set(merged.toolCallId, signature);
674
+ for (const cb of this.toolCallCallbacks)
675
+ cb(sessionId, evt);
676
+ }
677
+ // ── Helpers ─────────────────────────────────────────────────────────────
678
+ teardownChild() {
679
+ // Closing the ACP connection is implicit when we close stdin. The SDK's
680
+ // internal readers finish when stdout ends. tree-kill the CLI so its
681
+ // node wrapper doesn't leave grandchildren behind.
682
+ if (this.child && !this.child.killed) {
683
+ try {
684
+ this.child.stdin.end();
685
+ }
686
+ catch { /* noop */ }
687
+ void killProcessTree(this.child);
688
+ }
689
+ this.child = null;
690
+ this.connection = null;
691
+ }
692
+ emitSessionInfo(sessionId, info) {
693
+ for (const cb of this.sessionInfoCallbacks)
694
+ cb(sessionId, info);
695
+ }
696
+ emitStatus(sessionId, state, status) {
697
+ const signature = JSON.stringify({ status: status.status, label: status.label ?? null });
698
+ if (state.lastStatusSignature === signature)
699
+ return;
700
+ state.lastStatusSignature = signature;
701
+ for (const cb of this.statusCallbacks)
702
+ cb(sessionId, status);
703
+ }
704
+ clearStatus(sessionId, state) {
705
+ this.emitStatus(sessionId, state, { status: null, label: null });
706
+ }
707
+ emitError(sessionId, error) {
708
+ for (const cb of this.errorCallbacks)
709
+ cb(sessionId, error);
710
+ }
711
+ resolveBinaryPath(config) {
712
+ return typeof config?.binaryPath === 'string' && config.binaryPath.trim()
713
+ ? config.binaryPath
714
+ : GEMINI_BIN;
715
+ }
716
+ makeError(code, message, recoverable, details) {
717
+ return { code, message, recoverable, ...(details !== undefined ? { details } : {}) };
718
+ }
719
+ normalizeError(err) {
720
+ if (err && typeof err === 'object' && 'code' in err && 'message' in err && 'recoverable' in err) {
721
+ // Already a ProviderError.
722
+ return err;
723
+ }
724
+ const message = err instanceof Error ? err.message : String(err);
725
+ if (err instanceof RequestError) {
726
+ // Map ACP auth_required (code -32000 in Gemini CLI today, but spec
727
+ // reserves this code) onto our AUTH_FAILED so the UI surfaces a
728
+ // login-needed card instead of a generic error.
729
+ if (/auth/i.test(message)) {
730
+ return this.makeError(PROVIDER_ERROR_CODES.AUTH_FAILED, message, false, err);
731
+ }
732
+ return this.makeError(PROVIDER_ERROR_CODES.PROVIDER_ERROR, message, false, err);
733
+ }
734
+ if (/ENOENT|not found|spawn .*gemini/i.test(message)) {
735
+ return this.makeError(PROVIDER_ERROR_CODES.PROVIDER_NOT_FOUND, `Gemini CLI not found: ${message}`, false, err);
736
+ }
737
+ if (/auth/i.test(message)) {
738
+ return this.makeError(PROVIDER_ERROR_CODES.AUTH_FAILED, message, false, err);
739
+ }
740
+ return this.makeError(PROVIDER_ERROR_CODES.PROVIDER_ERROR, message, false, err);
741
+ }
742
+ /** Hook used by setSessionEffort in the TransportProvider interface — we
743
+ * declare reasoningEffort:false so this should never be called, but other
744
+ * providers define the method so we mirror the shape. */
745
+ setSessionEffort(_sessionId, _effort) {
746
+ // no-op — effort is baked into the model choice.
747
+ }
748
+ }
749
+ // ── Module-scope pure helpers ─────────────────────────────────────────────
750
+ /** Extract a text string from a ContentBlock if it's a textual variant.
751
+ * Gemini's agent_message_chunk and agent_thought_chunk carry TextContent;
752
+ * image/audio/resource variants are silently dropped. */
753
+ function extractTextFromContent(block) {
754
+ if (!block || typeof block !== 'object')
755
+ return '';
756
+ if (block.type === 'text' && typeof block.text === 'string')
757
+ return block.text;
758
+ return '';
759
+ }
760
+ /** Join the content array of a completed tool call into a single human-readable
761
+ * string. ACP allows `content` to mix `{type:'content', content:TextContent}`
762
+ * and `{type:'diff',...}` entries. For the brief UI summary we only unwrap
763
+ * textual content; the full structured detail stays in `detail.raw`. */
764
+ function flattenToolContent(content) {
765
+ if (!Array.isArray(content) || content.length === 0)
766
+ return undefined;
767
+ const parts = [];
768
+ for (const item of content) {
769
+ if (!item || typeof item !== 'object')
770
+ continue;
771
+ if (item.type === 'content' && item.content?.type === 'text' && typeof item.content.text === 'string') {
772
+ parts.push(item.content.text);
773
+ }
774
+ else if (item.type === 'diff') {
775
+ const newText = typeof item.newText === 'string' ? item.newText : '';
776
+ parts.push(newText);
777
+ }
778
+ }
779
+ return parts.length > 0 ? parts.join('\n') : undefined;
780
+ }
781
+ /** Map ACP's ToolCallStatus enum onto our ToolCallEvent status union. */
782
+ function mapToolStatus(status) {
783
+ switch (status) {
784
+ case 'completed':
785
+ return 'complete';
786
+ case 'failed':
787
+ case 'cancelled':
788
+ return 'error';
789
+ case 'pending':
790
+ case 'in_progress':
791
+ default:
792
+ return 'running';
793
+ }
794
+ }
795
+ //# sourceMappingURL=gemini-sdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-sdk.js","sourceRoot":"","sources":["../../../../src/agent/providers/gemini-sdk.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "imcodes",
3
- "version": "2026.4.1871-dev.1857",
3
+ "version": "2026.4.1872-dev.1858",
4
4
  "description": "A chat interface for AI coding agents — control Claude Code, Codex, Gemini CLI, OpenCode from browser and mobile",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -38,6 +38,7 @@
38
38
  "prepare": "husky"
39
39
  },
40
40
  "dependencies": {
41
+ "@agentclientprotocol/sdk": "^0.20.0",
41
42
  "@anthropic-ai/claude-agent-sdk": "^0.2.92",
42
43
  "@github/copilot-sdk": "^0.2.2",
43
44
  "@huggingface/transformers": "^4.1.0",
@@ -50,7 +51,8 @@
50
51
  "pino-pretty": "^13.1.3",
51
52
  "tsx": "^4.19.0",
52
53
  "ws": "^8.18.0",
53
- "yaml": "^2.6.0"
54
+ "yaml": "^2.6.0",
55
+ "zod": "^4.3.6"
54
56
  },
55
57
  "devDependencies": {
56
58
  "@types/node": "^24.0.0",
@@ -64,8 +66,7 @@
64
66
  "jsdom": "^28.1.0",
65
67
  "lint-staged": "^16.3.4",
66
68
  "typescript": "^5.7.0",
67
- "vitest": "^2.1.0",
68
- "zod": "^4.3.6"
69
+ "vitest": "^2.1.0"
69
70
  },
70
71
  "lint-staged": {
71
72
  "**/*": "grep -qvE 'API_KEY|SECRET|PASSWORD|TOKEN|PRIVATE_KEY' || (echo 'Error: Potential sensitive information detected in your commit!' && exit 1)"