From a80ecb9937c053638a94a2a2faaf1b48be5fa44b Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Tue, 14 Apr 2026 17:39:12 +0100 Subject: [PATCH] fix(plugin-sdk): align root alias scoped sdk map --- src/plugin-sdk/root-alias.cjs | 11 ++++++---- .../contracts/plugin-sdk-root-alias.test.ts | 21 +++++++++++++++++++ 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/plugin-sdk/root-alias.cjs b/src/plugin-sdk/root-alias.cjs index 8fcac41d018..10c6f165c42 100644 --- a/src/plugin-sdk/root-alias.cjs +++ b/src/plugin-sdk/root-alias.cjs @@ -7,6 +7,7 @@ let monolithicSdk = null; let diagnosticEventsModule = null; const jitiLoaders = new Map(); const pluginSdkSubpathsCache = new Map(); +const pluginSdkPackageNames = ["openclaw/plugin-sdk", "@openclaw/plugin-sdk"]; const isDistRootAlias = __filename.includes( `${path.sep}dist${path.sep}plugin-sdk${path.sep}root-alias.cjs`, ); @@ -127,14 +128,16 @@ function buildPluginSdkAliasMap(useDist) { const ext = useDist ? ".js" : ".ts"; const normalizeTarget = (target) => process.platform === "win32" ? target.replace(/\\/g, "/") : target; - const aliasMap = { - "openclaw/plugin-sdk": normalizeTarget(__filename), - }; + const aliasMap = Object.fromEntries( + pluginSdkPackageNames.map((packageName) => [packageName, normalizeTarget(__filename)]), + ); for (const subpath of listPluginSdkExportedSubpaths()) { const candidate = path.join(pluginSdkDir, `${subpath}${ext}`); if (fs.existsSync(candidate)) { - aliasMap[`openclaw/plugin-sdk/${subpath}`] = normalizeTarget(candidate); + for (const packageName of pluginSdkPackageNames) { + aliasMap[`${packageName}/${subpath}`] = normalizeTarget(candidate); + } } } diff --git a/src/plugins/contracts/plugin-sdk-root-alias.test.ts b/src/plugins/contracts/plugin-sdk-root-alias.test.ts index 9e02fbc83bf..95d86d63a2b 100644 --- a/src/plugins/contracts/plugin-sdk-root-alias.test.ts +++ b/src/plugins/contracts/plugin-sdk-root-alias.test.ts @@ -253,6 +253,27 @@ describe("plugin-sdk root alias", () => { ); }); + it("builds scoped and unscoped plugin-sdk aliases for jiti loads", () => { + const lazyModule = loadRootAliasWithStubs({ + distExists: true, + monolithicExports: { + slowHelper: (): string => "loaded", + }, + }); + + expect((lazyModule.moduleExports.slowHelper as () => string)()).toBe("loaded"); + expect(lazyModule.createJitiOptions.at(-1)?.alias).toMatchObject({ + "openclaw/plugin-sdk": rootAliasPath, + "@openclaw/plugin-sdk": rootAliasPath, + "openclaw/plugin-sdk/group-access": expect.stringContaining( + path.join("src", "plugin-sdk", "group-access.ts"), + ), + "@openclaw/plugin-sdk/group-access": expect.stringContaining( + path.join("src", "plugin-sdk", "group-access.ts"), + ), + }); + }); + it("prefers hashed dist diagnostic events chunks before falling back to src", () => { const packageRoot = createPackageRoot(); const distAliasPath = createDistAliasPath();