68 lines
2.5 KiB
TypeScript
68 lines
2.5 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { resolveOpenClawMetadata, resolveSkillInvocationPolicy } from "./frontmatter.js";
|
|
|
|
describe("resolveSkillInvocationPolicy", () => {
|
|
it("defaults to enabled behaviors", () => {
|
|
const policy = resolveSkillInvocationPolicy({});
|
|
expect(policy.userInvocable).toBe(true);
|
|
expect(policy.disableModelInvocation).toBe(false);
|
|
});
|
|
|
|
it("parses frontmatter boolean strings", () => {
|
|
const policy = resolveSkillInvocationPolicy({
|
|
"user-invocable": "no",
|
|
"disable-model-invocation": "yes",
|
|
});
|
|
expect(policy.userInvocable).toBe(false);
|
|
expect(policy.disableModelInvocation).toBe(true);
|
|
});
|
|
});
|
|
|
|
describe("resolveOpenClawMetadata install validation", () => {
|
|
function resolveInstall(frontmatter: Record<string, string>) {
|
|
return resolveOpenClawMetadata(frontmatter)?.install;
|
|
}
|
|
|
|
it("accepts safe install specs", () => {
|
|
const install = resolveInstall({
|
|
metadata:
|
|
'{"openclaw":{"install":[{"kind":"brew","formula":"python@3.12"},{"kind":"node","package":"@scope/pkg@1.2.3"},{"kind":"go","module":"example.com/tool/cmd@v1.2.3"},{"kind":"uv","package":"uvicorn[standard]==0.31.0"},{"kind":"download","url":"https://example.com/tool.tar.gz"}]}}',
|
|
});
|
|
expect(install).toEqual([
|
|
{ kind: "brew", formula: "python@3.12" },
|
|
{ kind: "node", package: "@scope/pkg@1.2.3" },
|
|
{ kind: "go", module: "example.com/tool/cmd@v1.2.3" },
|
|
{ kind: "uv", package: "uvicorn[standard]==0.31.0" },
|
|
{ kind: "download", url: "https://example.com/tool.tar.gz" },
|
|
]);
|
|
});
|
|
|
|
it("drops unsafe brew formula values", () => {
|
|
const install = resolveInstall({
|
|
metadata: '{"openclaw":{"install":[{"kind":"brew","formula":"wget --HEAD"}]}}',
|
|
});
|
|
expect(install).toBeUndefined();
|
|
});
|
|
|
|
it("drops unsafe npm package specs for node installers", () => {
|
|
const install = resolveInstall({
|
|
metadata: '{"openclaw":{"install":[{"kind":"node","package":"file:../malicious"}]}}',
|
|
});
|
|
expect(install).toBeUndefined();
|
|
});
|
|
|
|
it("drops unsafe go module specs", () => {
|
|
const install = resolveInstall({
|
|
metadata: '{"openclaw":{"install":[{"kind":"go","module":"https://evil.example/mod"}]}}',
|
|
});
|
|
expect(install).toBeUndefined();
|
|
});
|
|
|
|
it("drops unsafe download urls", () => {
|
|
const install = resolveInstall({
|
|
metadata: '{"openclaw":{"install":[{"kind":"download","url":"file:///tmp/payload.tgz"}]}}',
|
|
});
|
|
expect(install).toBeUndefined();
|
|
});
|
|
});
|