Spaces:
Paused
Paused
| import type { OpenClawConfig } from "../../config/config.js"; | |
| import type { SkillEntry, SkillSnapshot } from "./types.js"; | |
| import { resolveSkillConfig } from "./config.js"; | |
| import { resolveSkillKey } from "./frontmatter.js"; | |
| export function applySkillEnvOverrides(params: { skills: SkillEntry[]; config?: OpenClawConfig }) { | |
| const { skills, config } = params; | |
| const updates: Array<{ key: string; prev: string | undefined }> = []; | |
| for (const entry of skills) { | |
| const skillKey = resolveSkillKey(entry.skill, entry); | |
| const skillConfig = resolveSkillConfig(config, skillKey); | |
| if (!skillConfig) { | |
| continue; | |
| } | |
| if (skillConfig.env) { | |
| for (const [envKey, envValue] of Object.entries(skillConfig.env)) { | |
| if (!envValue || process.env[envKey]) { | |
| continue; | |
| } | |
| updates.push({ key: envKey, prev: process.env[envKey] }); | |
| process.env[envKey] = envValue; | |
| } | |
| } | |
| const primaryEnv = entry.metadata?.primaryEnv; | |
| if (primaryEnv && skillConfig.apiKey && !process.env[primaryEnv]) { | |
| updates.push({ key: primaryEnv, prev: process.env[primaryEnv] }); | |
| process.env[primaryEnv] = skillConfig.apiKey; | |
| } | |
| } | |
| return () => { | |
| for (const update of updates) { | |
| if (update.prev === undefined) { | |
| delete process.env[update.key]; | |
| } else { | |
| process.env[update.key] = update.prev; | |
| } | |
| } | |
| }; | |
| } | |
| export function applySkillEnvOverridesFromSnapshot(params: { | |
| snapshot?: SkillSnapshot; | |
| config?: OpenClawConfig; | |
| }) { | |
| const { snapshot, config } = params; | |
| if (!snapshot) { | |
| return () => {}; | |
| } | |
| const updates: Array<{ key: string; prev: string | undefined }> = []; | |
| for (const skill of snapshot.skills) { | |
| const skillConfig = resolveSkillConfig(config, skill.name); | |
| if (!skillConfig) { | |
| continue; | |
| } | |
| if (skillConfig.env) { | |
| for (const [envKey, envValue] of Object.entries(skillConfig.env)) { | |
| if (!envValue || process.env[envKey]) { | |
| continue; | |
| } | |
| updates.push({ key: envKey, prev: process.env[envKey] }); | |
| process.env[envKey] = envValue; | |
| } | |
| } | |
| if (skill.primaryEnv && skillConfig.apiKey && !process.env[skill.primaryEnv]) { | |
| updates.push({ | |
| key: skill.primaryEnv, | |
| prev: process.env[skill.primaryEnv], | |
| }); | |
| process.env[skill.primaryEnv] = skillConfig.apiKey; | |
| } | |
| } | |
| return () => { | |
| for (const update of updates) { | |
| if (update.prev === undefined) { | |
| delete process.env[update.key]; | |
| } else { | |
| process.env[update.key] = update.prev; | |
| } | |
| } | |
| }; | |
| } | |