diff --git a/src/modules/qqbot/plugin-platform/infrastructure/integration/package/builtin-plugin-package-loader.service.ts b/src/modules/qqbot/plugin-platform/infrastructure/integration/package/builtin-plugin-package-loader.service.ts index e4c24a0..ce678c1 100644 --- a/src/modules/qqbot/plugin-platform/infrastructure/integration/package/builtin-plugin-package-loader.service.ts +++ b/src/modules/qqbot/plugin-platform/infrastructure/integration/package/builtin-plugin-package-loader.service.ts @@ -177,7 +177,7 @@ export class QqbotBuiltinPluginPackageLoaderService { `src/modules/qqbot/plugins/${pluginKey}`, ); if (existsSync(join(sourceRoot, 'plugin.json'))) return sourceRoot; - return join(__dirname, `../../../plugins/${pluginKey}`); + return join(__dirname, `../../../../plugins/${pluginKey}`); } } diff --git a/test/modules/qqbot/plugin-platform/builtin-plugin-package-loader.spec.ts b/test/modules/qqbot/plugin-platform/builtin-plugin-package-loader.spec.ts new file mode 100644 index 0000000..d5b42e6 --- /dev/null +++ b/test/modules/qqbot/plugin-platform/builtin-plugin-package-loader.spec.ts @@ -0,0 +1,34 @@ +import { mkdtempSync, rmSync } from 'node:fs'; +import { tmpdir } from 'node:os'; +import { join } from 'node:path'; +import { QqbotBuiltinPluginPackageLoaderService } from '@/modules/qqbot/plugin-platform/infrastructure/integration/package/builtin-plugin-package-loader.service'; + +describe('QqbotBuiltinPluginPackageLoaderService', () => { + const createLoader = () => + new QqbotBuiltinPluginPackageLoaderService( + {} as any, + {} as any, + {} as any, + {} as any, + {} as any, + {} as any, + ) as any; + + it('resolves built-in plugin manifests from compiled qqbot plugin package root', () => { + const originalCwd = process.cwd(); + const sandbox = mkdtempSync(join(tmpdir(), 'kt-plugin-loader-')); + + try { + process.chdir(sandbox); + + const pluginRoot = createLoader().resolvePluginRoot('bangdream') as string; + const normalized = pluginRoot.replace(/\\/g, '/'); + + expect(normalized).toMatch(/modules\/qqbot\/plugins\/bangdream$/); + expect(normalized).not.toContain('/plugin-platform/plugins/'); + } finally { + process.chdir(originalCwd); + rmSync(sandbox, { recursive: true, force: true }); + } + }); +});