diff --git a/src/skills/loading/skills.test.ts b/src/skills/loading/skills.test.ts index 1d1a5a9e8621..86f5a20b958c 100644 --- a/src/skills/loading/skills.test.ts +++ b/src/skills/loading/skills.test.ts @@ -573,6 +573,44 @@ describe("applySkillEnvOverrides", () => { }); }); + it("skips disabled snapshot skills before resolving raw apiKey SecretRefs", () => { + const skillName = "env-skill"; + const snapshot = envSkillSnapshot(skillName, { + primaryEnv: "ENV_KEY", + requires: { env: ["ENV_KEY"] }, + }); + const config: OpenClawConfig = { + skills: { + entries: { + [skillName]: { + enabled: false, + apiKey: { + source: "env", + provider: "default", + id: "GITHUB_PAT", + }, + }, + }, + }, + }; + + withClearedEnv(["ENV_KEY", "GITHUB_PAT"], () => { + const restore = applySkillEnvOverridesFromSnapshot({ + snapshot, + config, + }); + + try { + expect(process.env.ENV_KEY).toBeUndefined(); + expect(process.env.GITHUB_PAT).toBeUndefined(); + } finally { + restore(); + expect(process.env.ENV_KEY).toBeUndefined(); + expect(process.env.GITHUB_PAT).toBeUndefined(); + } + }); + }); + it("prefers the active runtime snapshot over raw SecretRef skill config", () => { const skillName = "env-skill"; const entries = envSkillEntries(skillName, { diff --git a/src/skills/runtime/env-overrides.ts b/src/skills/runtime/env-overrides.ts index 94c2f1f4a683..efe4fac6c4ad 100644 --- a/src/skills/runtime/env-overrides.ts +++ b/src/skills/runtime/env-overrides.ts @@ -208,6 +208,10 @@ function applySkillConfigEnvOverrides(params: { } } +function shouldApplySkillConfigEnvOverrides(skillConfig: SkillConfig): boolean { + return skillConfig.enabled !== false; +} + function createEnvReverter(updates: EnvUpdate[]) { return () => { for (const update of updates) { @@ -227,6 +231,9 @@ export function applySkillEnvOverrides(params: { skills: SkillEntry[]; config?: if (!skillConfig) { continue; } + if (!shouldApplySkillConfigEnvOverrides(skillConfig)) { + continue; + } applySkillConfigEnvOverrides({ updates, @@ -256,6 +263,9 @@ export function applySkillEnvOverridesFromSnapshot(params: { if (!skillConfig) { continue; } + if (!shouldApplySkillConfigEnvOverrides(skillConfig)) { + continue; + } applySkillConfigEnvOverrides({ updates,