




















@@ -2,7 +2,6 @@
22import { describe, expect, it } from "vitest";
33import { createFixtureSkillEntry } from "../test-support/test-helpers.js";
44import {
5-buildSkillIndex,
65buildSkillIndexEntries,
76filterPromptVisibleSkillEntries,
87filterUserInvocableSkillEntries,
@@ -19,38 +18,18 @@ describe("skill index", () => {
1918expect(normalizeSkillIndexName("@@")).toBe("");
2019});
212022-it("indexes entries by exact and normalized name without changing input order", () => {
21+it("indexes entries without changing input order", () => {
2322const entries = [
2423createFixtureSkillEntry("Excel XLSX", { skillKey: "excel_xlsx" }),
2524createFixtureSkillEntry("GitHub Review"),
2625];
272628-const index = buildSkillIndex(entries);
29-30-expect(index.entries.map((entry) => entry.name)).toEqual(["Excel XLSX", "GitHub Review"]);
31-expect(index.byName.get("Excel XLSX")?.entry).toBe(entries[0]);
32-expect(index.byNormalizedName.get("excel-xlsx")?.map((entry) => entry.name)).toEqual([
27+expect(buildSkillIndexEntries(entries).map((entry) => entry.name)).toEqual([
3328"Excel XLSX",
34-]);
35-expect(index.byNormalizedName.get("github-review")?.map((entry) => entry.name)).toEqual([
3629"GitHub Review",
3730]);
3831});
393240-it("keeps ambiguous normalized names as multiple index entries", () => {
41-const entries = [
42-createFixtureSkillEntry("Excel/XLSX", { skillKey: "excel-slash" }),
43-createFixtureSkillEntry("Excel_XLSX", { skillKey: "excel-underscore" }),
44-];
45-46-const index = buildSkillIndex(entries);
47-48-expect(index.byNormalizedName.get("excel-xlsx")?.map((entry) => entry.name)).toEqual([
49-"Excel/XLSX",
50-"Excel_XLSX",
51-]);
52-});
53-5433it("centralizes runtime, prompt, and command exposure policy", () => {
5534const runtimeHidden = createFixtureSkillEntry("runtime-hidden", {
5635exposure: {
@@ -77,27 +56,23 @@ describe("skill index", () => {
7756invocation: { disableModelInvocation: true, userInvocable: true },
7857});
795880-const index = buildSkillIndex([runtimeHidden, promptHidden, commandHidden, legacyPromptHidden]);
59+const entries = [runtimeHidden, promptHidden, commandHidden, legacyPromptHidden];
60+const indexEntries = buildSkillIndexEntries(entries);
816182-expect(index.runtimeEntries.map((entry) => entry.skill.name)).toEqual([
83-"prompt-hidden",
84-"command-hidden",
85-"legacy-prompt-hidden",
86-]);
87-expect(index.promptVisibleEntries.map((entry) => entry.skill.name)).toEqual([
62+expect(indexEntries.filter((entry) => entry.runtimeVisible).map((entry) => entry.name)).toEqual(
63+["prompt-hidden", "command-hidden", "legacy-prompt-hidden"],
64+);
65+expect(indexEntries.filter((entry) => entry.promptVisible).map((entry) => entry.name)).toEqual([
8866"runtime-hidden",
8967"command-hidden",
9068]);
91-expect(index.userInvocableEntries.map((entry) => entry.skill.name)).toEqual([
69+expect(indexEntries.filter((entry) => entry.userInvocable).map((entry) => entry.name)).toEqual([
9270"runtime-hidden",
9371"prompt-hidden",
9472"legacy-prompt-hidden",
9573]);
96-expect(filterPromptVisibleSkillEntries(index.entries.map((entry) => entry.entry))).toEqual([
97-runtimeHidden,
98-commandHidden,
99-]);
100-expect(filterUserInvocableSkillEntries(index.entries.map((entry) => entry.entry))).toEqual([
74+expect(filterPromptVisibleSkillEntries(entries)).toEqual([runtimeHidden, commandHidden]);
75+expect(filterUserInvocableSkillEntries(entries)).toEqual([
10176runtimeHidden,
10277promptHidden,
10378legacyPromptHidden,
@@ -115,22 +90,22 @@ describe("skill index", () => {
11590skillKey: "workspace-key",
11691});
11792118-const index = buildSkillIndex([bundled, unknownBundled, workspace], {
93+const indexEntries = buildSkillIndexEntries([bundled, unknownBundled, workspace], {
11994bundledNames: new Set(["unknown-bundle"]),
12095agentSkillFilter: ["workspace"],
12196});
12297123-expect(index.byName.get("bundle")).toMatchObject({
98+expect(indexEntries.find((entry) => entry.name === "bundle")).toMatchObject({
12499source: "openclaw-bundled",
125100bundled: true,
126101agentAllowed: false,
127102});
128-expect(index.byName.get("unknown-bundle")).toMatchObject({
103+expect(indexEntries.find((entry) => entry.name === "unknown-bundle")).toMatchObject({
129104source: "unknown",
130105bundled: true,
131106agentAllowed: false,
132107});
133-expect(index.byName.get("workspace")).toMatchObject({
108+expect(indexEntries.find((entry) => entry.name === "workspace")).toMatchObject({
134109source: "openclaw-workspace",
135110bundled: false,
136111skillKey: "workspace-key",
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。