From 482bd91dfdc23c7a034a3bbafad941af3ed1c4c1 Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Fri, 27 Feb 2026 09:12:52 -0800 Subject: [PATCH] test(skills): cover capability normalization variants --- src/agents/skills/frontmatter.test.ts | 57 ++++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/src/agents/skills/frontmatter.test.ts b/src/agents/skills/frontmatter.test.ts index 280140963253..3f12f32afe16 100644 --- a/src/agents/skills/frontmatter.test.ts +++ b/src/agents/skills/frontmatter.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from "vitest"; -import { resolveSkillInvocationPolicy } from "./frontmatter.js"; +import { resolveOpenClawMetadata, resolveSkillInvocationPolicy } from "./frontmatter.js"; describe("resolveSkillInvocationPolicy", () => { it("defaults to enabled behaviors", () => { @@ -17,3 +17,58 @@ describe("resolveSkillInvocationPolicy", () => { expect(policy.disableModelInvocation).toBe(true); }); }); + +describe("resolveOpenClawMetadata", () => { + it("parses canonical capabilities from string array", () => { + const metadata = resolveOpenClawMetadata({ + metadata: '{"openclaw":{"capabilities":["shell","network"]}}', + }); + expect(metadata?.capabilities).toEqual(["shell", "network"]); + }); + + it("normalizes capability aliases used by other harnesses", () => { + const metadata = resolveOpenClawMetadata({ + metadata: JSON.stringify({ + openclaw: { + capabilities: ["web_fetch", "terminal", "subagent", "cron", "message"], + }, + }), + }); + expect(metadata?.capabilities).toEqual([ + "network", + "shell", + "sessions", + "scheduling", + "messaging", + ]); + }); + + it("supports object map capability shape with constraints payload", () => { + const metadata = resolveOpenClawMetadata({ + metadata: JSON.stringify({ + openclaw: { + capabilities: { + shell: { mode: "restricted", allow: ["git", "gh"] }, + network: { web_search: true, web_fetch: true }, + }, + }, + }), + }); + expect(metadata?.capabilities).toEqual(["shell", "network"]); + }); + + it("supports object array capability shape", () => { + const metadata = resolveOpenClawMetadata({ + metadata: JSON.stringify({ + openclaw: { + capabilities: [ + { type: "network.search", constraints: { provider: "brave" } }, + { name: "filesystem", constraints: { paths: ["workspace"] } }, + { id: "browser", constraints: { screen: "read" } }, + ], + }, + }), + }); + expect(metadata?.capabilities).toEqual(["network", "filesystem", "browser"]); + }); +});