



























@@ -85,6 +85,7 @@ const mocks = vi.hoisted(() => {
8585installSkillFromSourceMock: vi.fn(),
8686updateSkillsFromClawHubMock: vi.fn(),
8787readTrackedClawHubSkillSlugsMock: vi.fn(),
88+readVerifiedClawHubSkillSourceUrlMock: vi.fn(),
8889resolveClawHubSkillVerificationTargetMock: vi.fn(),
8990readClawHubSkillsLockfileStatusSyncMock: vi.fn((..._args: unknown[]) => ({ kind: "missing" })),
9091resolveClawHubSkillStatusLinkSyncMock: vi.fn(),
@@ -110,6 +111,7 @@ const {
110111 installSkillFromSourceMock,
111112 updateSkillsFromClawHubMock,
112113 readTrackedClawHubSkillSlugsMock,
114+ readVerifiedClawHubSkillSourceUrlMock,
113115 resolveClawHubSkillVerificationTargetMock,
114116 readClawHubSkillsLockfileStatusSyncMock,
115117 resolveClawHubSkillStatusLinkSyncMock,
@@ -191,6 +193,8 @@ vi.mock("../skills/lifecycle/clawhub.js", () => ({
191193updateSkillsFromClawHub: (...args: unknown[]) => mocks.updateSkillsFromClawHubMock(...args),
192194readTrackedClawHubSkillSlugs: (...args: unknown[]) =>
193195mocks.readTrackedClawHubSkillSlugsMock(...args),
196+readVerifiedClawHubSkillSourceUrl: (...args: unknown[]) =>
197+mocks.readVerifiedClawHubSkillSourceUrlMock(...args),
194198resolveClawHubSkillVerificationTarget: (...args: unknown[]) =>
195199mocks.resolveClawHubSkillVerificationTargetMock(...args),
196200readClawHubSkillsLockfileStatusSync: (...args: unknown[]) =>
@@ -255,6 +259,7 @@ describe("skills cli commands", () => {
255259installSkillFromSourceMock.mockReset();
256260updateSkillsFromClawHubMock.mockReset();
257261readTrackedClawHubSkillSlugsMock.mockReset();
262+readVerifiedClawHubSkillSourceUrlMock.mockReset();
258263resolveClawHubSkillVerificationTargetMock.mockReset();
259264readClawHubSkillsLockfileStatusSyncMock.mockReset();
260265resolveClawHubSkillStatusLinkSyncMock.mockReset();
@@ -278,6 +283,7 @@ describe("skills cli commands", () => {
278283});
279284updateSkillsFromClawHubMock.mockResolvedValue([]);
280285readTrackedClawHubSkillSlugsMock.mockResolvedValue([]);
286+readVerifiedClawHubSkillSourceUrlMock.mockReturnValue(undefined);
281287readClawHubSkillsLockfileStatusSyncMock.mockReturnValue({ kind: "missing" });
282288resolveClawHubSkillStatusLinkSyncMock.mockReturnValue(undefined);
283289resolveLocalSkillCardStatusSyncMock.mockReturnValue(undefined);
@@ -844,6 +850,47 @@ describe("skills cli commands", () => {
844850});
845851});
846852853+it("includes verified ClawHub source URLs in verify JSON output", async () => {
854+const provenance = {
855+source: "server-resolved-github-import",
856+repo: "openclaw/skills",
857+commit: "0123456789abcdef0123456789abcdef01234567",
858+path: "agentreceipt",
859+};
860+const verifiedSourceUrl =
861+"https://github.com/openclaw/skills/tree/0123456789abcdef0123456789abcdef01234567/agentreceipt";
862+readVerifiedClawHubSkillSourceUrlMock.mockReturnValueOnce(verifiedSourceUrl);
863+fetchClawHubSkillVerificationMock.mockResolvedValueOnce({
864+schema: "clawhub.skill.verify.v1",
865+ok: true,
866+decision: "pass",
867+reasons: [],
868+skill: { slug: "agentreceipt", displayName: "Agent Receipt" },
869+publisher: { handle: "openclaw" },
870+version: { version: "1.2.3" },
871+card: {
872+available: true,
873+url: "https://private.example.com/clawhub/api/v1/skills/agentreceipt/card?version=1.2.3",
874+},
875+artifact: {
876+sourceFingerprint: "source-fingerprint",
877+bundleFingerprints: ["generated-bundle-fingerprint"],
878+},
879+ provenance,
880+security: { status: "clean" },
881+signature: { status: "unsigned" },
882+});
883+884+await runCommand(["skills", "verify", "agentreceipt"]);
885+886+expect(readVerifiedClawHubSkillSourceUrlMock).toHaveBeenCalledWith(provenance);
887+const payload = JSON.parse(runtimeStdout.at(-1) ?? "{}") as {
888+openclaw?: { verifiedSourceUrl?: string };
889+};
890+expect(payload.openclaw?.verifiedSourceUrl).toBe(verifiedSourceUrl);
891+expect(defaultRuntime.exit).not.toHaveBeenCalled();
892+});
893+847894it("fetches generated Skill Card markdown for --card", async () => {
848895fetchClawHubSkillVerificationMock.mockResolvedValueOnce({
849896schema: "clawhub.skill.verify.v1",
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。