From e0e55306c9685cdb048ac7955674a9d47b88d4dc Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 11:57:56 +0100 Subject: [PATCH] fix: normalize xurl installer kind to node (#21585) (thanks @santiagomed) --- CHANGELOG.md | 1 + skills/xurl/SKILL.md | 2 +- .../skills.xurl-frontmatter.e2e.test.ts | 21 +++++++++++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 src/agents/skills.xurl-frontmatter.e2e.test.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index c720ff92fa..85ff8c9de9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -118,6 +118,7 @@ Docs: https://docs.openclaw.ai - Docker: pin base images to SHA256 digests in Docker builds to prevent mutable tag drift. (#7734) Thanks @coygeek. - Docker: run build steps as the `node` user and use `COPY --chown` to avoid recursive ownership changes, trimming image size and layer churn. Thanks @huntharo. - Config/Memory: restore schema help/label metadata for hybrid `mmr` and `temporalDecay` settings so configuration surfaces show correct names and guidance. (#18786) Thanks @rodrigouroz. +- Skills/xurl: fix installer metadata to use `kind: "node"` for npm distribution so `openclaw skills` exposes the npm install path correctly. (#21585) Thanks @santiagomed. - Skills/SonosCLI: add troubleshooting guidance for `sonos discover` failures on macOS direct mode (`sendto: no route to host`) and sandbox network restrictions (`bind: operation not permitted`). (#21316) Thanks @huntharo. - macOS/Build: default release packaging to `BUNDLE_ID=ai.openclaw.mac` in `scripts/package-mac-dist.sh`, so Sparkle feed URL is retained and auto-update no longer fails with an empty appcast feed. (#19750) thanks @loganprit. - Signal/Outbound: preserve case for Base64 group IDs during outbound target normalization so cross-context routing and policy checks no longer break when group IDs include uppercase characters. (#5578) Thanks @heyhudson. diff --git a/skills/xurl/SKILL.md b/skills/xurl/SKILL.md index cf76bf158a..20becf7732 100644 --- a/skills/xurl/SKILL.md +++ b/skills/xurl/SKILL.md @@ -18,7 +18,7 @@ metadata: }, { "id": "npm", - "kind": "npm", + "kind": "node", "package": "@xdevplatform/xurl", "bins": ["xurl"], "label": "Install xurl (npm)", diff --git a/src/agents/skills.xurl-frontmatter.e2e.test.ts b/src/agents/skills.xurl-frontmatter.e2e.test.ts new file mode 100644 index 0000000000..11d3473b34 --- /dev/null +++ b/src/agents/skills.xurl-frontmatter.e2e.test.ts @@ -0,0 +1,21 @@ +import fs from "node:fs"; +import path from "node:path"; +import { describe, expect, it } from "vitest"; +import { parseFrontmatter, resolveOpenClawMetadata } from "./skills/frontmatter.js"; + +describe("skills/xurl frontmatter", () => { + it("exposes a node installer for npm distribution", () => { + const skillPath = path.join(process.cwd(), "skills", "xurl", "SKILL.md"); + const raw = fs.readFileSync(skillPath, "utf-8"); + const frontmatter = parseFrontmatter(raw); + const metadata = resolveOpenClawMetadata(frontmatter); + const install = metadata?.install ?? []; + + expect( + install.some( + (spec) => + spec.kind === "node" && spec.package === "@xdevplatform/xurl" && spec.id === "npm", + ), + ).toBe(true); + }); +});