Files
openclaw/src/agents/skills/bundled-context.ts
2026-02-14 16:36:15 +00:00

41 lines
1.3 KiB
TypeScript

import { loadSkillsFromDir } from "@mariozechner/pi-coding-agent";
import { createSubsystemLogger } from "../../logging/subsystem.js";
import { resolveBundledSkillsDir, type BundledSkillsResolveOptions } from "./bundled-dir.js";
const skillsLogger = createSubsystemLogger("skills");
let hasWarnedMissingBundledDir = false;
let cachedBundledContext: { dir: string; names: Set<string> } | null = null;
export type BundledSkillsContext = {
dir?: string;
names: Set<string>;
};
export function resolveBundledSkillsContext(
opts: BundledSkillsResolveOptions = {},
): BundledSkillsContext {
const dir = resolveBundledSkillsDir(opts);
const names = new Set<string>();
if (!dir) {
if (!hasWarnedMissingBundledDir) {
hasWarnedMissingBundledDir = true;
skillsLogger.warn(
"Bundled skills directory could not be resolved; built-in skills may be missing.",
);
}
return { dir, names };
}
if (cachedBundledContext?.dir === dir) {
return { dir, names: new Set(cachedBundledContext.names) };
}
const result = loadSkillsFromDir({ dir, source: "openclaw-bundled" });
for (const skill of result.skills) {
if (skill.name.trim()) {
names.add(skill.name);
}
}
cachedBundledContext = { dir, names: new Set(names) };
return { dir, names };
}