


























@@ -0,0 +1,95 @@
1+import fs from "node:fs/promises";
2+import { describe, expect, it } from "vitest";
3+import { prepareCliBundleMcpConfig } from "./bundle-mcp.js";
4+5+describe("prepareCliBundleMcpConfig gemini", () => {
6+it("writes Gemini system settings for bundle MCP servers", async () => {
7+const prepared = await prepareCliBundleMcpConfig({
8+enabled: true,
9+mode: "gemini-system-settings",
10+backend: {
11+command: "gemini",
12+args: ["--prompt", "{prompt}"],
13+},
14+workspaceDir: "/tmp/openclaw-bundle-mcp-gemini",
15+config: { plugins: { enabled: false } },
16+additionalConfig: {
17+mcpServers: {
18+openclaw: {
19+type: "http",
20+url: "http://127.0.0.1:23119/mcp",
21+headers: {
22+Authorization: "Bearer ${OPENCLAW_MCP_TOKEN}",
23+},
24+},
25+},
26+},
27+env: {
28+OPENCLAW_MCP_TOKEN: "loopback-token-123",
29+},
30+});
31+32+expect(prepared.backend.args).toEqual(["--prompt", "{prompt}"]);
33+expect(prepared.env?.OPENCLAW_MCP_TOKEN).toBe("loopback-token-123");
34+expect(typeof prepared.env?.GEMINI_CLI_SYSTEM_SETTINGS_PATH).toBe("string");
35+const raw = JSON.parse(
36+await fs.readFile(prepared.env?.GEMINI_CLI_SYSTEM_SETTINGS_PATH as string, "utf-8"),
37+) as {
38+mcp?: { allowed?: string[] };
39+mcpServers?: Record<string, { url?: string; headers?: Record<string, string> }>;
40+};
41+expect(raw.mcp?.allowed).toEqual(["openclaw"]);
42+expect(raw.mcpServers?.openclaw?.url).toBe("http://127.0.0.1:23119/mcp");
43+expect(raw.mcpServers?.openclaw?.headers?.Authorization).toBe("Bearer loopback-token-123");
44+45+await prepared.cleanup?.();
46+});
47+48+it("translates user mcp.servers transport fields in Gemini system settings", async () => {
49+const prepared = await prepareCliBundleMcpConfig({
50+enabled: true,
51+mode: "gemini-system-settings",
52+backend: {
53+command: "gemini",
54+args: ["--prompt", "{prompt}"],
55+},
56+workspaceDir: "/tmp/openclaw-bundle-mcp-gemini",
57+config: {
58+plugins: { enabled: false },
59+mcp: {
60+servers: {
61+context7: {
62+transport: "streamable-http",
63+url: "https://mcp.context7.com/mcp",
64+headers: {
65+Authorization: "Bearer ${CONTEXT7_API_KEY}",
66+},
67+},
68+},
69+},
70+},
71+env: {
72+CONTEXT7_API_KEY: "ctx7-test",
73+},
74+});
75+76+expect(prepared.env?.CONTEXT7_API_KEY).toBe("ctx7-test");
77+expect(typeof prepared.env?.GEMINI_CLI_SYSTEM_SETTINGS_PATH).toBe("string");
78+const raw = JSON.parse(
79+await fs.readFile(prepared.env?.GEMINI_CLI_SYSTEM_SETTINGS_PATH as string, "utf-8"),
80+) as {
81+mcp?: { allowed?: string[] };
82+mcpServers?: Record<
83+string,
84+{ type?: string; transport?: string; url?: string; headers?: Record<string, string> }
85+>;
86+};
87+expect(raw.mcp?.allowed).toEqual(["context7"]);
88+expect(raw.mcpServers?.context7?.type).toBe("http");
89+expect(raw.mcpServers?.context7?.transport).toBeUndefined();
90+expect(raw.mcpServers?.context7?.url).toBe("https://mcp.context7.com/mcp");
91+expect(raw.mcpServers?.context7?.headers?.Authorization).toBe("Bearer ctx7-test");
92+93+await prepared.cleanup?.();
94+});
95+});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。