From e5851cfcc2fa5b9a78f8554817fcf8f769ec1933 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 2 May 2026 17:50:30 +0100 Subject: [PATCH] test(plugins): align source contract registry expectations --- .../bundled-capability-metadata.test.ts | 22 ---------- .../contracts/registry.contract.test.ts | 41 ++++--------------- 2 files changed, 9 insertions(+), 54 deletions(-) diff --git a/src/plugins/bundled-capability-metadata.test.ts b/src/plugins/bundled-capability-metadata.test.ts index 6c382f99c92..609460f49d0 100644 --- a/src/plugins/bundled-capability-metadata.test.ts +++ b/src/plugins/bundled-capability-metadata.test.ts @@ -13,34 +13,12 @@ import { pluginTestRepoRoot as repoRoot } from "./generated-plugin-test-helpers. import type { OpenClawPackageManifest } from "./manifest.js"; import type { PluginManifest } from "./manifest.js"; -function collectExcludedPackagedExtensionDirs(): ReadonlySet { - const packageJson = JSON.parse(fs.readFileSync(path.join(repoRoot, "package.json"), "utf-8")) as { - files?: unknown; - }; - if (!Array.isArray(packageJson.files)) { - return new Set(); - } - const excluded = new Set(); - for (const entry of packageJson.files) { - if (typeof entry !== "string") { - continue; - } - const match = /^!dist\/extensions\/([^/]+)\/\*\*$/u.exec(entry); - if (match?.[1]) { - excluded.add(match[1]); - } - } - return excluded; -} - function readManifestRecords(): PluginManifest[] { const extensionsDir = path.join(repoRoot, "extensions"); - const excludedDirs = collectExcludedPackagedExtensionDirs(); return fs .readdirSync(extensionsDir, { withFileTypes: true }) .filter((entry) => entry.isDirectory()) .map((entry) => path.join(extensionsDir, entry.name)) - .filter((pluginDir) => !excludedDirs.has(path.basename(pluginDir))) .filter((pluginDir) => { const packagePath = path.join(pluginDir, "package.json"); if (!fs.existsSync(packagePath)) { diff --git a/src/plugins/contracts/registry.contract.test.ts b/src/plugins/contracts/registry.contract.test.ts index 0ec3f47113e..a284a4ee288 100644 --- a/src/plugins/contracts/registry.contract.test.ts +++ b/src/plugins/contracts/registry.contract.test.ts @@ -1,9 +1,8 @@ -import fs from "node:fs"; -import path from "node:path"; import { describe, expect, it } from "vitest"; import { uniqueSortedStrings } from "../../plugin-sdk/test-helpers/string-utils.js"; import { loadPluginManifestRegistry, type PluginManifestRecord } from "../manifest-registry.js"; import { resolveManifestContractPluginIds } from "../plugin-registry.js"; +import { BUNDLED_PLUGIN_CONTRACT_SNAPSHOTS } from "./inventory/bundled-capability-metadata.js"; import { pluginRegistrationContractRegistry, providerContractLoadError, @@ -11,34 +10,6 @@ import { } from "./registry.js"; describe("plugin contract registry", () => { - function collectExcludedPackagedExtensionDirs(): ReadonlySet { - const packageJson = JSON.parse( - fs.readFileSync(path.join(process.cwd(), "package.json"), "utf-8"), - ) as { - files?: unknown; - }; - if (!Array.isArray(packageJson.files)) { - return new Set(); - } - const excluded = new Set(); - for (const entry of packageJson.files) { - if (typeof entry !== "string") { - continue; - } - const match = /^!dist\/extensions\/([^/]+)\/\*\*$/u.exec(entry); - if (match?.[1]) { - excluded.add(match[1]); - } - } - return excluded; - } - - const excludedPackagedExtensionDirs = collectExcludedPackagedExtensionDirs(); - - function isPackagedCorePluginId(pluginId: string): boolean { - return !excludedPackagedExtensionDirs.has(pluginId); - } - function expectUniqueIds(ids: readonly string[]) { expect(ids).toEqual([...new Set(ids)]); } @@ -53,8 +24,11 @@ describe("plugin contract registry", () => { } function resolveBundledManifestPluginIds(predicate: (plugin: PluginManifestRecord) => boolean) { + const snapshotPluginIds = new Set( + BUNDLED_PLUGIN_CONTRACT_SNAPSHOTS.map((entry) => entry.pluginId), + ); return loadPluginManifestRegistry({}) - .plugins.filter((plugin) => isPackagedCorePluginId(plugin.id) && predicate(plugin)) + .plugins.filter((plugin) => snapshotPluginIds.has(plugin.id) && predicate(plugin)) .map((plugin) => plugin.id) .toSorted((left, right) => left.localeCompare(right)); } @@ -203,10 +177,13 @@ describe("plugin contract registry", () => { }); it("covers every bundled web search plugin from the shared resolver", () => { + const snapshotPluginIds = new Set( + BUNDLED_PLUGIN_CONTRACT_SNAPSHOTS.map((entry) => entry.pluginId), + ); const bundledWebSearchPluginIds = resolveManifestContractPluginIds({ contract: "webSearchProviders", origin: "bundled", - }).filter(isPackagedCorePluginId); + }).filter((pluginId) => snapshotPluginIds.has(pluginId)); expect( uniqueSortedStrings(