@jait/gateway 0.1.411 → 0.1.414

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 (110) hide show
  1. package/dist/cli/doctor.d.ts.map +1 -1
  2. package/dist/cli/doctor.js +0 -3
  3. package/dist/cli/doctor.js.map +1 -1
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +4 -10
  6. package/dist/index.js.map +1 -1
  7. package/dist/providers/acp-provider.d.ts +41 -0
  8. package/dist/providers/acp-provider.d.ts.map +1 -0
  9. package/dist/providers/acp-provider.js +507 -0
  10. package/dist/providers/acp-provider.js.map +1 -0
  11. package/dist/providers/codex-event-mapper.d.ts +2 -3
  12. package/dist/providers/codex-event-mapper.d.ts.map +1 -1
  13. package/dist/providers/codex-event-mapper.js +2 -3
  14. package/dist/providers/codex-event-mapper.js.map +1 -1
  15. package/dist/providers/contracts.d.ts +3 -8
  16. package/dist/providers/contracts.d.ts.map +1 -1
  17. package/dist/providers/contracts.js +2 -7
  18. package/dist/providers/contracts.js.map +1 -1
  19. package/dist/providers/index.d.ts +1 -2
  20. package/dist/providers/index.d.ts.map +1 -1
  21. package/dist/providers/index.js +1 -2
  22. package/dist/providers/index.js.map +1 -1
  23. package/dist/providers/registry.d.ts +1 -5
  24. package/dist/providers/registry.d.ts.map +1 -1
  25. package/dist/providers/registry.js +1 -5
  26. package/dist/providers/registry.js.map +1 -1
  27. package/dist/routes/threads.d.ts.map +1 -1
  28. package/dist/routes/threads.js +6 -32
  29. package/dist/routes/threads.js.map +1 -1
  30. package/dist/tools/thread-tools.d.ts.map +1 -1
  31. package/dist/tools/thread-tools.js +3 -13
  32. package/dist/tools/thread-tools.js.map +1 -1
  33. package/dist/voice-assistant/tools.js +4 -4
  34. package/dist/voice-assistant/tools.js.map +1 -1
  35. package/package.json +4 -2
  36. package/web-dist/assets/{_basePickBy-DTINQlKL.js → _basePickBy-BY3j0pLu.js} +1 -1
  37. package/web-dist/assets/{_baseUniq-C-MG6h2-.js → _baseUniq-BBKXdVtW.js} +1 -1
  38. package/web-dist/assets/{arc-CPWhVSIy.js → arc-DNJNlKJa.js} +1 -1
  39. package/web-dist/assets/{architectureDiagram-2XIMDMQ5-DiaJVGbw.js → architectureDiagram-2XIMDMQ5-DgvlzCLX.js} +1 -1
  40. package/web-dist/assets/{blockDiagram-WCTKOSBZ-BYYoraer.js → blockDiagram-WCTKOSBZ-LIk_pKGv.js} +1 -1
  41. package/web-dist/assets/{c4Diagram-IC4MRINW-Wj5akwx6.js → c4Diagram-IC4MRINW-Dd9l5l1P.js} +1 -1
  42. package/web-dist/assets/channel-CNnC30Rt.js +1 -0
  43. package/web-dist/assets/{chunk-4BX2VUAB-rGkhD2e4.js → chunk-4BX2VUAB-CxecMpnr.js} +1 -1
  44. package/web-dist/assets/{chunk-55IACEB6-BMbM4kBP.js → chunk-55IACEB6-iXe2sYvx.js} +1 -1
  45. package/web-dist/assets/{chunk-FMBD7UC4-CVCvmdxw.js → chunk-FMBD7UC4-SRiAxXsq.js} +1 -1
  46. package/web-dist/assets/{chunk-JSJVCQXG-D8Bh55Yo.js → chunk-JSJVCQXG-DhsSNEw_.js} +1 -1
  47. package/web-dist/assets/{chunk-KX2RTZJC-BijS5dHA.js → chunk-KX2RTZJC-CYISO9K3.js} +1 -1
  48. package/web-dist/assets/{chunk-NQ4KR5QH-BvPmzt7h.js → chunk-NQ4KR5QH-D9PfPLCM.js} +1 -1
  49. package/web-dist/assets/{chunk-QZHKN3VN-D3dtWzpN.js → chunk-QZHKN3VN-BeUfD_Us.js} +1 -1
  50. package/web-dist/assets/{chunk-WL4C6EOR-00I2m_Li.js → chunk-WL4C6EOR-CChE5ckt.js} +1 -1
  51. package/web-dist/assets/classDiagram-VBA2DB6C-CZRuAChC.js +1 -0
  52. package/web-dist/assets/classDiagram-v2-RAHNMMFH-CZRuAChC.js +1 -0
  53. package/web-dist/assets/clone-CfXgw5ZL.js +1 -0
  54. package/web-dist/assets/{cose-bilkent-S5V4N54A-Xa_L_SDR.js → cose-bilkent-S5V4N54A-Dx5SmdOo.js} +1 -1
  55. package/web-dist/assets/{dagre-KLK3FWXG-aKclx8fy.js → dagre-KLK3FWXG-DEwOQO7w.js} +1 -1
  56. package/web-dist/assets/{diagram-E7M64L7V-BajhtSmq.js → diagram-E7M64L7V-Do6ZcaTW.js} +1 -1
  57. package/web-dist/assets/{diagram-IFDJBPK2-CE87U4_E.js → diagram-IFDJBPK2-DorJcAX1.js} +1 -1
  58. package/web-dist/assets/{diagram-P4PSJMXO-BNMJ4h6h.js → diagram-P4PSJMXO-BC1D-fCW.js} +1 -1
  59. package/web-dist/assets/{erDiagram-INFDFZHY-DuvtE5nZ.js → erDiagram-INFDFZHY-CP0mSVaQ.js} +1 -1
  60. package/web-dist/assets/{flowDiagram-PKNHOUZH-BQHnBNw1.js → flowDiagram-PKNHOUZH-DizSRtGj.js} +1 -1
  61. package/web-dist/assets/{ganttDiagram-A5KZAMGK-6iCM2cum.js → ganttDiagram-A5KZAMGK-DCG3RnO6.js} +1 -1
  62. package/web-dist/assets/{gitGraphDiagram-K3NZZRJ6-BK3XRtfb.js → gitGraphDiagram-K3NZZRJ6-FaXWKyXz.js} +1 -1
  63. package/web-dist/assets/{graph-BwziVd0f.js → graph--TtVwd7t.js} +1 -1
  64. package/web-dist/assets/{index-DyvkTnNe.js → index-B2q-RZL4.js} +1 -1
  65. package/web-dist/assets/{index-Bfyg7a6D.js → index-CCQbeCpx.js} +1 -1
  66. package/web-dist/assets/{index-DmbDJ0zR.js → index-DLM62Alw.js} +356 -357
  67. package/web-dist/assets/{infoDiagram-LFFYTUFH-_lcH8o9D.js → infoDiagram-LFFYTUFH-Dv0alkoh.js} +1 -1
  68. package/web-dist/assets/{ishikawaDiagram-PHBUUO56-P9kGf_8a.js → ishikawaDiagram-PHBUUO56-C6dqReRm.js} +1 -1
  69. package/web-dist/assets/{journeyDiagram-4ABVD52K-1JBHr5Eh.js → journeyDiagram-4ABVD52K-CqGp9as4.js} +1 -1
  70. package/web-dist/assets/{kanban-definition-K7BYSVSG-BjbF9Ygm.js → kanban-definition-K7BYSVSG-DcY31-Uk.js} +1 -1
  71. package/web-dist/assets/{layout-BlDoqALI.js → layout-DeDqdHtL.js} +1 -1
  72. package/web-dist/assets/{linear-DHWXphYy.js → linear-Dndn1mXM.js} +1 -1
  73. package/web-dist/assets/{mindmap-definition-YRQLILUH-BGWYtXzC.js → mindmap-definition-YRQLILUH-pUyhhY_g.js} +1 -1
  74. package/web-dist/assets/{pieDiagram-SKSYHLDU-DP604Leh.js → pieDiagram-SKSYHLDU-0ld0kqTd.js} +1 -1
  75. package/web-dist/assets/{quadrantDiagram-337W2JSQ-C3_iyXnp.js → quadrantDiagram-337W2JSQ-CyGZ_o1t.js} +1 -1
  76. package/web-dist/assets/{requirementDiagram-Z7DCOOCP-q8KQZJh1.js → requirementDiagram-Z7DCOOCP-nRggwrRJ.js} +1 -1
  77. package/web-dist/assets/{sankeyDiagram-WA2Y5GQK-w_PH_gg2.js → sankeyDiagram-WA2Y5GQK-CuWIu-UB.js} +1 -1
  78. package/web-dist/assets/{sequenceDiagram-2WXFIKYE-DJ3Jm_vH.js → sequenceDiagram-2WXFIKYE-CF1317GT.js} +1 -1
  79. package/web-dist/assets/{stateDiagram-RAJIS63D-CisLxKjV.js → stateDiagram-RAJIS63D-DfI7H3Ui.js} +1 -1
  80. package/web-dist/assets/stateDiagram-v2-FVOUBMTO-BIB1nAmv.js +1 -0
  81. package/web-dist/assets/{timeline-definition-YZTLITO2-DVIz6ocS.js → timeline-definition-YZTLITO2-Dh7f4001.js} +1 -1
  82. package/web-dist/assets/{treemap-KZPCXAKY-DZpDLVT6.js → treemap-KZPCXAKY-DbkPp1H7.js} +1 -1
  83. package/web-dist/assets/{vennDiagram-LZ73GAT5-DSGr8xH_.js → vennDiagram-LZ73GAT5-BiY_0fvU.js} +1 -1
  84. package/web-dist/assets/{xychartDiagram-JWTSCODW-iheT-zlS.js → xychartDiagram-JWTSCODW-DEU3Uvdf.js} +1 -1
  85. package/web-dist/index.html +1 -1
  86. package/dist/providers/claude-code-provider.d.ts +0 -69
  87. package/dist/providers/claude-code-provider.d.ts.map +0 -1
  88. package/dist/providers/claude-code-provider.js +0 -801
  89. package/dist/providers/claude-code-provider.js.map +0 -1
  90. package/dist/providers/codex-provider.d.ts +0 -63
  91. package/dist/providers/codex-provider.d.ts.map +0 -1
  92. package/dist/providers/codex-provider.js +0 -660
  93. package/dist/providers/codex-provider.js.map +0 -1
  94. package/dist/providers/copilot-provider.d.ts +0 -45
  95. package/dist/providers/copilot-provider.d.ts.map +0 -1
  96. package/dist/providers/copilot-provider.js +0 -591
  97. package/dist/providers/copilot-provider.js.map +0 -1
  98. package/dist/providers/gemini-provider.d.ts +0 -53
  99. package/dist/providers/gemini-provider.d.ts.map +0 -1
  100. package/dist/providers/gemini-provider.js +0 -545
  101. package/dist/providers/gemini-provider.js.map +0 -1
  102. package/dist/providers/opencode-provider.d.ts +0 -44
  103. package/dist/providers/opencode-provider.d.ts.map +0 -1
  104. package/dist/providers/opencode-provider.js +0 -505
  105. package/dist/providers/opencode-provider.js.map +0 -1
  106. package/web-dist/assets/channel-B4UKdMu-.js +0 -1
  107. package/web-dist/assets/classDiagram-VBA2DB6C-DI8Uy9IN.js +0 -1
  108. package/web-dist/assets/classDiagram-v2-RAHNMMFH-DI8Uy9IN.js +0 -1
  109. package/web-dist/assets/clone-B_ua7cXE.js +0 -1
  110. package/web-dist/assets/stateDiagram-v2-FVOUBMTO-BdlIPPcF.js +0 -1
@@ -1,53 +0,0 @@
1
- /**
2
- * Gemini CLI Provider — wraps Google's Gemini CLI as a Jait provider.
3
- *
4
- * Spawns `gemini` CLI with `-o stream-json` for structured NDJSON output.
5
- *
6
- * Gemini CLI stream-json events:
7
- * { type: "init", session_id, model }
8
- * { type: "message", role: "user"|"assistant", content, delta?: boolean }
9
- * { type: "tool_use", tool_name, tool_id, parameters }
10
- * { type: "tool_result", tool_id, status, output?, error? }
11
- * { type: "result", status: "success"|"error", stats? }
12
- */
13
- import type { CliProviderAdapter, ProviderInfo, ProviderAuthStatus, ProviderLoginResult, ProviderLogoutResult, ProviderModelInfo, ProviderSession, ProviderEvent, StartSessionOptions } from "./contracts.js";
14
- export declare class GeminiProvider implements CliProviderAdapter {
15
- readonly id: "gemini";
16
- readonly info: ProviderInfo;
17
- private sessions;
18
- private emitter;
19
- private geminiPath;
20
- checkAvailability(): Promise<boolean>;
21
- getAuthStatus(): Promise<ProviderAuthStatus>;
22
- startLogin(): Promise<ProviderLoginResult>;
23
- logout(): Promise<ProviderLogoutResult>;
24
- listModels(): Promise<ProviderModelInfo[]>;
25
- startSession(options: StartSessionOptions): Promise<ProviderSession>;
26
- sendTurn(sessionId: string, message: string, _attachments?: string[]): Promise<void>;
27
- interruptTurn(sessionId: string): Promise<void>;
28
- respondToApproval(_sessionId: string, _requestId: string, _approved: boolean): Promise<void>;
29
- stopSession(sessionId: string): Promise<void>;
30
- onEvent(handler: (event: ProviderEvent) => void): () => void;
31
- /**
32
- * Dynamically discover models from the installed gemini-cli-core package.
33
- * Reads dist/src/config/models.js and extracts VALID_GEMINI_MODELS + auto aliases.
34
- */
35
- private fetchModelsFromCli;
36
- private findGeminiModelsJs;
37
- private processBuffer;
38
- private handleEvent;
39
- private emit;
40
- private getState;
41
- private hasGeminiConfig;
42
- /**
43
- * Inject Jait MCP servers into the project-level .gemini/settings.json.
44
- * Gemini CLI reads mcpServers from <cwd>/.gemini/settings.json.
45
- */
46
- private injectMcpConfig;
47
- /**
48
- * Remove Jait-injected MCP servers from the project .gemini/settings.json on session end.
49
- */
50
- private cleanupMcpConfig;
51
- private testCommand;
52
- }
53
- //# sourceMappingURL=gemini-provider.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gemini-provider.d.ts","sourceRoot":"","sources":["../../src/providers/gemini-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAQH,OAAO,KAAK,EACV,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,mBAAmB,EACpB,MAAM,gBAAgB,CAAC;AAuBxB,qBAAa,cAAe,YAAW,kBAAkB;IACvD,QAAQ,CAAC,EAAE,EAAG,QAAQ,CAAU;IAChC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAOzB;IAEF,OAAO,CAAC,QAAQ,CAAyC;IACzD,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,UAAU,CAAuB;IAEnC,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC;IA4BrC,aAAa,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAW5C,UAAU,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAI1C,MAAM,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAIvC,UAAU,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAO1C,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,eAAe,CAAC;IAuCpE,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAsGpF,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ/C,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5F,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BnD,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,MAAM,IAAI;IAO5D;;;OAGG;YACW,kBAAkB;YAwDlB,kBAAkB;IA4BhC,OAAO,CAAC,aAAa;IA4BrB,OAAO,CAAC,WAAW;IA2FnB,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,eAAe;IAMvB;;;OAGG;IACH,OAAO,CAAC,eAAe;IAyCvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAuBxB,OAAO,CAAC,WAAW;CAQpB"}
@@ -1,545 +0,0 @@
1
- /**
2
- * Gemini CLI Provider — wraps Google's Gemini CLI as a Jait provider.
3
- *
4
- * Spawns `gemini` CLI with `-o stream-json` for structured NDJSON output.
5
- *
6
- * Gemini CLI stream-json events:
7
- * { type: "init", session_id, model }
8
- * { type: "message", role: "user"|"assistant", content, delta?: boolean }
9
- * { type: "tool_use", tool_name, tool_id, parameters }
10
- * { type: "tool_result", tool_id, status, output?, error? }
11
- * { type: "result", status: "success"|"error", stats? }
12
- */
13
- import { spawn, spawnSync } from "node:child_process";
14
- import { EventEmitter } from "node:events";
15
- import { existsSync, writeFileSync, readFileSync, mkdirSync } from "node:fs";
16
- import { join } from "node:path";
17
- import { homedir } from "node:os";
18
- import { uuidv7 } from "../db/uuidv7.js";
19
- import { NO_PROVIDER_AUTH, unsupportedLogin, unsupportedLogout } from "./provider-auth.js";
20
- // ── Provider implementation ──────────────────────────────────────────
21
- export class GeminiProvider {
22
- id = "gemini";
23
- info = {
24
- id: "gemini",
25
- name: "Gemini CLI",
26
- description: "Google Gemini CLI agent with agentic coding and MCP support",
27
- available: false,
28
- modes: ["full-access", "supervised"],
29
- auth: NO_PROVIDER_AUTH,
30
- };
31
- sessions = new Map();
32
- emitter = new EventEmitter();
33
- geminiPath = null;
34
- async checkAvailability() {
35
- try {
36
- const available = await this.testCommand("gemini");
37
- if (!available) {
38
- this.info.available = false;
39
- this.info.unavailableReason = "Gemini CLI not found. Install with: npm install -g @google/gemini-cli";
40
- return false;
41
- }
42
- this.geminiPath = "gemini";
43
- const hasApiKey = !!process.env.GEMINI_API_KEY?.trim() || !!process.env.GOOGLE_API_KEY?.trim();
44
- const hasConfig = this.hasGeminiConfig();
45
- if (!hasApiKey && !hasConfig) {
46
- this.info.available = false;
47
- this.info.unavailableReason = "Gemini CLI is not configured. Run `gemini` once or set GEMINI_API_KEY.";
48
- return false;
49
- }
50
- this.info.available = true;
51
- this.info.unavailableReason = undefined;
52
- return true;
53
- }
54
- catch {
55
- this.info.available = false;
56
- this.info.unavailableReason = "Failed to check Gemini CLI availability";
57
- return false;
58
- }
59
- }
60
- async getAuthStatus() {
61
- const authenticated = !!process.env.GEMINI_API_KEY?.trim() || !!process.env.GOOGLE_API_KEY?.trim() || this.hasGeminiConfig();
62
- return {
63
- ...NO_PROVIDER_AUTH,
64
- authenticated,
65
- detail: authenticated
66
- ? "Gemini credentials are configured."
67
- : "This Gemini CLI version does not expose a device-login command; run `gemini` once or set GEMINI_API_KEY.",
68
- };
69
- }
70
- async startLogin() {
71
- return unsupportedLogin(this.id, "This Gemini CLI version does not expose a device-login command. Run `gemini` once in a terminal or set GEMINI_API_KEY.");
72
- }
73
- async logout() {
74
- return unsupportedLogout(this.id, "Gemini CLI logout is not available from this installed CLI version.");
75
- }
76
- async listModels() {
77
- const dynamic = await this.fetchModelsFromCli();
78
- if (dynamic.length > 0)
79
- return dynamic;
80
- return FALLBACK_MODELS;
81
- }
82
- async startSession(options) {
83
- const sessionId = uuidv7();
84
- const session = {
85
- id: sessionId,
86
- providerId: "gemini",
87
- threadId: options.threadId,
88
- status: "starting",
89
- runtimeMode: options.mode,
90
- startedAt: new Date().toISOString(),
91
- };
92
- const env = {
93
- ...process.env,
94
- ...options.env,
95
- };
96
- const state = {
97
- session,
98
- process: null,
99
- buffer: "",
100
- workingDirectory: options.workingDirectory,
101
- env,
102
- model: options.model,
103
- exitMode: "normal",
104
- turnCount: 0,
105
- mcpConfigInjected: false,
106
- };
107
- // Inject MCP servers into the project-level .gemini/settings.json
108
- this.injectMcpConfig(state, options.mcpServers);
109
- this.sessions.set(sessionId, state);
110
- state.session.status = "running";
111
- this.emit({ type: "session.started", sessionId });
112
- return session;
113
- }
114
- async sendTurn(sessionId, message, _attachments) {
115
- const state = this.getState(sessionId);
116
- if (state.process) {
117
- throw new Error("Gemini CLI turn already running");
118
- }
119
- const args = [
120
- "-p", message,
121
- "-o", "stream-json",
122
- ];
123
- if (state.session.runtimeMode === "full-access") {
124
- args.push("--yolo");
125
- }
126
- if (state.model) {
127
- args.push("-m", state.model);
128
- }
129
- // Resume previous session for multi-turn conversation
130
- if (state.turnCount > 0 && state.geminiSessionId) {
131
- args.push("--resume", "latest");
132
- }
133
- state.turnCount++;
134
- const cmd = this.geminiPath ?? "gemini";
135
- const child = spawn(cmd, args, {
136
- cwd: state.workingDirectory,
137
- env: state.env,
138
- stdio: ["pipe", "pipe", "pipe"],
139
- shell: true,
140
- windowsHide: true,
141
- });
142
- state.process = child;
143
- state.buffer = "";
144
- state.exitMode = "normal";
145
- state.session.status = "running";
146
- this.emit({ type: "turn.started", sessionId });
147
- // Suppress EPIPE errors when child exits before we finish writing
148
- child.stdin?.on("error", () => { });
149
- child.stdout?.on("data", (data) => {
150
- state.buffer += data.toString();
151
- this.processBuffer(sessionId, state);
152
- });
153
- child.stderr?.on("data", (data) => {
154
- const text = data.toString().trim();
155
- if (text && !text.startsWith("Loaded cached")) {
156
- console.error(`[gemini:${sessionId}] stderr: ${text}`);
157
- }
158
- });
159
- return new Promise((resolve, reject) => {
160
- child.on("exit", (code, signal) => {
161
- state.process = null;
162
- const exitMode = state.exitMode;
163
- state.exitMode = "normal";
164
- if (exitMode === "stop") {
165
- state.session.status = "completed";
166
- state.session.completedAt = new Date().toISOString();
167
- this.emit({ type: "session.completed", sessionId });
168
- resolve();
169
- return;
170
- }
171
- if (exitMode === "interrupt") {
172
- state.session.status = "interrupted";
173
- this.emit({ type: "turn.completed", sessionId });
174
- resolve();
175
- return;
176
- }
177
- if (code === 0) {
178
- state.session.status = "idle";
179
- state.session.error = undefined;
180
- this.emit({ type: "turn.completed", sessionId });
181
- resolve();
182
- return;
183
- }
184
- const error = `Gemini CLI exited with code ${code}${signal ? ` (signal=${signal})` : ""}`;
185
- state.session.status = "error";
186
- state.session.error = error;
187
- this.emit({ type: "session.error", sessionId, error });
188
- reject(new Error(error));
189
- });
190
- child.on("error", (err) => {
191
- state.process = null;
192
- state.exitMode = "normal";
193
- state.session.status = "error";
194
- state.session.error = err.message;
195
- this.emit({ type: "session.error", sessionId, error: err.message });
196
- reject(err);
197
- });
198
- });
199
- }
200
- async interruptTurn(sessionId) {
201
- const state = this.getState(sessionId);
202
- if (state.process) {
203
- state.exitMode = "interrupt";
204
- killChildTree(state.process, "SIGINT");
205
- }
206
- }
207
- async respondToApproval(_sessionId, _requestId, _approved) {
208
- console.warn("Gemini CLI approval response not implemented for non-interactive mode");
209
- }
210
- async stopSession(sessionId) {
211
- const state = this.sessions.get(sessionId);
212
- if (!state)
213
- return;
214
- if (state.process) {
215
- state.exitMode = "stop";
216
- killChildTree(state.process, "SIGTERM");
217
- await new Promise((resolve) => {
218
- const timeout = setTimeout(() => {
219
- if (state.process)
220
- killChildTree(state.process, "SIGKILL");
221
- resolve();
222
- }, 3000);
223
- state.process?.on("exit", () => { clearTimeout(timeout); resolve(); });
224
- });
225
- }
226
- else {
227
- state.session.status = "completed";
228
- state.session.completedAt = new Date().toISOString();
229
- this.emit({ type: "session.completed", sessionId });
230
- }
231
- // Clean up injected MCP config
232
- this.cleanupMcpConfig(state);
233
- this.sessions.delete(sessionId);
234
- }
235
- onEvent(handler) {
236
- this.emitter.on("event", handler);
237
- return () => this.emitter.off("event", handler);
238
- }
239
- // ── Private helpers ────────────────────────────────────────────────
240
- /**
241
- * Dynamically discover models from the installed gemini-cli-core package.
242
- * Reads dist/src/config/models.js and extracts VALID_GEMINI_MODELS + auto aliases.
243
- */
244
- async fetchModelsFromCli() {
245
- try {
246
- const modelsJs = await this.findGeminiModelsJs();
247
- if (!modelsJs)
248
- return [];
249
- const source = readFileSync(modelsJs, "utf-8");
250
- // Extract concrete models from VALID_GEMINI_MODELS Set
251
- const validSet = new Set();
252
- const setMatch = source.match(/VALID_GEMINI_MODELS\s*=\s*new\s+Set\(\[([^\]]+)\]/s);
253
- if (setMatch?.[1]) {
254
- const refs = setMatch[1].matchAll(/(\w+)/g);
255
- for (const [, ref] of refs) {
256
- if (!ref)
257
- continue;
258
- const constMatch = source.match(new RegExp(`const\\s+${ref}\\s*=\\s*['"]([^'"]+)['"]`));
259
- if (constMatch?.[1])
260
- validSet.add(constMatch[1]);
261
- }
262
- }
263
- // Extract auto aliases
264
- const autoModels = new Set();
265
- for (const m of source.matchAll(/(?:MODEL_AUTO|MODEL_ALIAS_AUTO)\s*=\s*['"]([^'"]+)['"]/g)) {
266
- if (m[1])
267
- autoModels.add(m[1]);
268
- }
269
- const models = [];
270
- // Add auto aliases first
271
- for (const id of autoModels) {
272
- const label = id.includes("3") ? "Auto (Gemini 3)" : id.includes("2.5") ? "Auto (Gemini 2.5)" : `Auto (${id})`;
273
- models.push({ id, name: label, description: "Intelligent model routing", isDefault: id.includes("3") });
274
- }
275
- // Also add the bare "auto" alias
276
- if (!autoModels.has("auto")) {
277
- models.push({ id: "auto", name: "Auto (latest)", description: "Automatically selects the best model", isDefault: true });
278
- }
279
- // Add concrete models
280
- for (const id of validSet) {
281
- if (id.includes("customtools"))
282
- continue; // internal-only variant
283
- const tier = id.includes("flash-lite") ? "Flash Lite" : id.includes("flash") ? "Flash" : "Pro";
284
- const family = id.match(/gemini-(\d[\d.]*)/)?.[1] ?? "";
285
- const preview = id.includes("preview") ? " Preview" : "";
286
- models.push({
287
- id,
288
- name: `Gemini ${family} ${tier}${preview}`,
289
- description: `${tier} model${preview ? " (preview)" : ""}`,
290
- });
291
- }
292
- return models.length > 0 ? models : [];
293
- }
294
- catch {
295
- return [];
296
- }
297
- }
298
- async findGeminiModelsJs() {
299
- // Strategy 1: resolve from global npm prefix
300
- const paths = [
301
- // npm global
302
- join(homedir(), ".npm-global", "lib", "node_modules", "@google", "gemini-cli", "node_modules", "@google", "gemini-cli-core", "dist", "src", "config", "models.js"),
303
- // Linux/macOS default global
304
- "/usr/local/lib/node_modules/@google/gemini-cli/node_modules/@google/gemini-cli-core/dist/src/config/models.js",
305
- "/usr/lib/node_modules/@google/gemini-cli/node_modules/@google/gemini-cli-core/dist/src/config/models.js",
306
- // bun global
307
- join(homedir(), ".bun", "install", "global", "node_modules", "@google", "gemini-cli-core", "dist", "src", "config", "models.js"),
308
- ];
309
- for (const p of paths) {
310
- if (existsSync(p))
311
- return p;
312
- }
313
- // Strategy 2: use `npm root -g` to find global prefix dynamically
314
- try {
315
- const result = spawnSync("npm", ["root", "-g"], { encoding: "utf-8", timeout: 5000, shell: true });
316
- if (result.status === 0 && result.stdout?.trim()) {
317
- const p = join(result.stdout.trim(), "@google", "gemini-cli", "node_modules", "@google", "gemini-cli-core", "dist", "src", "config", "models.js");
318
- if (existsSync(p))
319
- return p;
320
- }
321
- }
322
- catch { /* ignore */ }
323
- return null;
324
- }
325
- processBuffer(_sessionId, state) {
326
- const lines = state.buffer.split("\n");
327
- state.buffer = lines.pop() ?? "";
328
- for (const line of lines) {
329
- const trimmed = line.trim();
330
- if (!trimmed)
331
- continue;
332
- try {
333
- const event = JSON.parse(trimmed);
334
- this.handleEvent(state, event);
335
- }
336
- catch {
337
- // Line wasn't valid JSON — try to salvage if JSON is embedded after CLI noise
338
- // (e.g. "MCP issues detected. Run /mcp list for status.{\"type\":\"init\",...}")
339
- const braceIdx = trimmed.indexOf("{");
340
- if (braceIdx > 0) {
341
- try {
342
- const event = JSON.parse(trimmed.slice(braceIdx));
343
- this.handleEvent(state, event);
344
- continue;
345
- }
346
- catch { /* not salvageable */ }
347
- }
348
- // Ignore non-JSON lines — in stream-json mode all real content arrives as
349
- // structured events. Plain text here is CLI warnings/noise, not assistant output.
350
- }
351
- }
352
- }
353
- handleEvent(state, event) {
354
- const sessionId = state.session.id;
355
- const type = event["type"];
356
- switch (type) {
357
- case "init": {
358
- // Session initialization — capture session_id for resume and model info
359
- const geminiSid = String(event["session_id"] ?? "");
360
- if (geminiSid) {
361
- state.geminiSessionId = geminiSid;
362
- }
363
- const model = String(event["model"] ?? "");
364
- if (model) {
365
- this.emit({
366
- type: "activity",
367
- sessionId,
368
- kind: "init",
369
- summary: `Gemini session started with model ${model}`,
370
- });
371
- }
372
- break;
373
- }
374
- case "message": {
375
- const role = String(event["role"] ?? "");
376
- const content = String(event["content"] ?? "");
377
- if (role === "assistant" && content) {
378
- this.emit({ type: "token", sessionId, content });
379
- }
380
- break;
381
- }
382
- case "tool_use": {
383
- const toolName = String(event["tool_name"] ?? "");
384
- const callId = String(event["tool_id"] ?? uuidv7());
385
- const args = (event["parameters"] ?? {});
386
- this.emit({ type: "tool.start", sessionId, tool: toolName, args, callId });
387
- break;
388
- }
389
- case "tool_result": {
390
- const callId = String(event["tool_id"] ?? "");
391
- const status = String(event["status"] ?? "");
392
- const output = String(event["output"] ?? event["error"] ?? "");
393
- this.emit({
394
- type: "tool.result",
395
- sessionId,
396
- tool: callId,
397
- ok: status === "success",
398
- message: output,
399
- callId,
400
- });
401
- break;
402
- }
403
- case "thought": {
404
- const content = String(event["content"] ?? "");
405
- if (content) {
406
- this.emit({ type: "activity", sessionId, kind: "thinking", summary: content, payload: event });
407
- }
408
- break;
409
- }
410
- case "error": {
411
- const message = String(event["message"] ?? "Unknown error");
412
- this.emit({ type: "session.error", sessionId, error: message });
413
- break;
414
- }
415
- case "result": {
416
- const status = String(event["status"] ?? "");
417
- if (status === "error") {
418
- const err = event["error"];
419
- const message = String(err?.["message"] ?? "Gemini turn failed");
420
- this.emit({ type: "session.error", sessionId, error: message });
421
- }
422
- const stats = event["stats"];
423
- if (stats) {
424
- this.emit({
425
- type: "activity",
426
- sessionId,
427
- kind: "usage",
428
- summary: "Gemini usage stats",
429
- payload: stats,
430
- });
431
- }
432
- break;
433
- }
434
- }
435
- }
436
- emit(event) {
437
- this.emitter.emit("event", event);
438
- }
439
- getState(sessionId) {
440
- const state = this.sessions.get(sessionId);
441
- if (!state)
442
- throw new Error(`No Gemini session found: ${sessionId}`);
443
- return state;
444
- }
445
- hasGeminiConfig() {
446
- const configDir = join(homedir(), ".gemini");
447
- const settingsFile = join(configDir, "settings.json");
448
- return existsSync(settingsFile);
449
- }
450
- /**
451
- * Inject Jait MCP servers into the project-level .gemini/settings.json.
452
- * Gemini CLI reads mcpServers from <cwd>/.gemini/settings.json.
453
- */
454
- injectMcpConfig(state, servers) {
455
- if (!servers || servers.length === 0)
456
- return;
457
- const configDir = join(state.workingDirectory, ".gemini");
458
- const configPath = join(configDir, "settings.json");
459
- // Read existing project settings if present
460
- let settings = {};
461
- try {
462
- if (existsSync(configPath)) {
463
- settings = JSON.parse(readFileSync(configPath, "utf-8"));
464
- }
465
- }
466
- catch { /* start fresh */ }
467
- const mcpServers = (settings["mcpServers"] ?? {});
468
- for (const server of servers) {
469
- if (server.transport === "stdio" && server.command) {
470
- mcpServers[server.name] = {
471
- command: server.command,
472
- args: server.args ?? [],
473
- trust: true,
474
- ...(server.env && Object.keys(server.env).length > 0 ? { env: server.env } : {}),
475
- };
476
- }
477
- else if ((server.transport === "sse" || server.transport === "http") && server.url) {
478
- mcpServers[server.name] = {
479
- url: server.url,
480
- trust: true,
481
- };
482
- }
483
- }
484
- settings["mcpServers"] = mcpServers;
485
- mkdirSync(configDir, { recursive: true });
486
- writeFileSync(configPath, JSON.stringify(settings, null, 2));
487
- state.mcpConfigInjected = true;
488
- }
489
- /**
490
- * Remove Jait-injected MCP servers from the project .gemini/settings.json on session end.
491
- */
492
- cleanupMcpConfig(state) {
493
- if (!state.mcpConfigInjected)
494
- return;
495
- const configPath = join(state.workingDirectory, ".gemini", "settings.json");
496
- try {
497
- if (!existsSync(configPath))
498
- return;
499
- const settings = JSON.parse(readFileSync(configPath, "utf-8"));
500
- const mcpServers = settings["mcpServers"];
501
- if (mcpServers) {
502
- // Remove servers that have trust: true (our injected ones)
503
- for (const [name, config] of Object.entries(mcpServers)) {
504
- if (config?.["trust"] === true) {
505
- delete mcpServers[name];
506
- }
507
- }
508
- if (Object.keys(mcpServers).length === 0) {
509
- delete settings["mcpServers"];
510
- }
511
- }
512
- writeFileSync(configPath, JSON.stringify(settings, null, 2));
513
- }
514
- catch { /* best effort */ }
515
- }
516
- testCommand(cmd) {
517
- return new Promise((resolve) => {
518
- const child = spawn(cmd, ["--version"], { stdio: "pipe", shell: true, windowsHide: true });
519
- const timer = setTimeout(() => { child.kill(); resolve(false); }, 5000);
520
- child.on("exit", (code) => { clearTimeout(timer); resolve(code === 0); });
521
- child.on("error", () => { clearTimeout(timer); resolve(false); });
522
- });
523
- }
524
- }
525
- const FALLBACK_MODELS = [
526
- { id: "auto", name: "Auto (latest)", description: "Automatically selects the best model", isDefault: true },
527
- { id: "gemini-3-pro-preview", name: "Gemini 3 Pro Preview", description: "Pro model (preview)" },
528
- { id: "gemini-3.1-pro-preview", name: "Gemini 3.1 Pro Preview", description: "Pro model (preview)" },
529
- { id: "gemini-3-flash-preview", name: "Gemini 3 Flash Preview", description: "Flash model (preview)" },
530
- { id: "gemini-3.1-flash-lite-preview", name: "Gemini 3.1 Flash Lite Preview", description: "Flash Lite model (preview)" },
531
- { id: "gemini-2.5-pro", name: "Gemini 2.5 Pro", description: "Pro model" },
532
- { id: "gemini-2.5-flash", name: "Gemini 2.5 Flash", description: "Flash model" },
533
- { id: "gemini-2.5-flash-lite", name: "Gemini 2.5 Flash Lite", description: "Flash Lite model" },
534
- ];
535
- function killChildTree(child, signal = "SIGTERM") {
536
- if (process.platform === "win32" && child.pid !== undefined) {
537
- try {
538
- spawnSync("taskkill", ["/pid", String(child.pid), "/T", "/F"], { stdio: "ignore" });
539
- return;
540
- }
541
- catch { /* fall through */ }
542
- }
543
- child.kill(signal);
544
- }
545
- //# sourceMappingURL=gemini-provider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gemini-provider.js","sourceRoot":"","sources":["../../src/providers/gemini-provider.ts"],"names":[],"mappings":"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"}