
























@@ -137,8 +137,8 @@ describe("shell env fallback", () => {
137137).toBe(15000);
138138});
139139140-it("skips when already has an expected key", () => {
141-const env: NodeJS.ProcessEnv = { OPENAI_API_KEY: "set" };
140+it("skips when already has all expected keys", () => {
141+const env: NodeJS.ProcessEnv = { OPENAI_API_KEY: "set", DISCORD_BOT_TOKEN: "set" };
142142const exec = vi.fn(() => Buffer.from(""));
143143144144const res = runShellEnvFallback({
@@ -154,6 +154,37 @@ describe("shell env fallback", () => {
154154expect(exec).not.toHaveBeenCalled();
155155});
156156157+it("imports missing expected keys even when another expected key already exists", () => {
158+const env: NodeJS.ProcessEnv = { OPENCLAW_GATEWAY_TOKEN: "set" };
159+const exec = vi.fn(() =>
160+Buffer.from(
161+"OPENCLAW_GATEWAY_TOKEN=from-shell\0TWILIO_ACCOUNT_SID=AC123\0TWILIO_AUTH_TOKEN=secret\0TWILIO_FROM_NUMBER=+15550001234\0",
162+),
163+);
164+165+const res = runShellEnvFallback({
166+enabled: true,
167+ env,
168+expectedKeys: [
169+"OPENCLAW_GATEWAY_TOKEN",
170+"TWILIO_ACCOUNT_SID",
171+"TWILIO_AUTH_TOKEN",
172+"TWILIO_FROM_NUMBER",
173+],
174+ exec,
175+});
176+177+expect(res).toEqual({
178+ok: true,
179+applied: ["TWILIO_ACCOUNT_SID", "TWILIO_AUTH_TOKEN", "TWILIO_FROM_NUMBER"],
180+});
181+expect(env.OPENCLAW_GATEWAY_TOKEN).toBe("set");
182+expect(env.TWILIO_ACCOUNT_SID).toBe("AC123");
183+expect(env.TWILIO_AUTH_TOKEN).toBe("secret");
184+expect(env.TWILIO_FROM_NUMBER).toBe("+15550001234");
185+expect(exec).toHaveBeenCalledTimes(1);
186+});
187+157188it("treats explicitly empty env vars as intentional overrides", () => {
158189const env: NodeJS.ProcessEnv = { OPENAI_API_KEY: "" };
159190const exec = vi.fn(() => Buffer.from("OPENAI_API_KEY=from-shell\0"));
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。