From 6543ce717cae439752efc8ac2ca6c62489c4de88 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 14 Feb 2026 12:42:11 +0000 Subject: [PATCH] perf(test): avoid plugin-sdk barrel imports --- extensions/bluebubbles/src/accounts.ts | 2 +- extensions/feishu/src/accounts.ts | 2 +- extensions/googlechat/src/accounts.ts | 2 +- extensions/irc/src/accounts.ts | 2 +- extensions/matrix/src/matrix/accounts.ts | 2 +- extensions/matrix/src/matrix/actions/client.ts | 2 +- extensions/matrix/src/matrix/active-client.ts | 2 +- extensions/matrix/src/matrix/client/config.ts | 2 +- extensions/matrix/src/matrix/client/shared.ts | 2 +- extensions/matrix/src/matrix/credentials.ts | 2 +- extensions/matrix/src/matrix/send/client.ts | 2 +- extensions/mattermost/src/mattermost/accounts.ts | 2 +- extensions/mattermost/src/onboarding-helpers.ts | 2 +- extensions/mattermost/src/onboarding.ts | 2 +- extensions/nextcloud-talk/src/accounts.ts | 7 ++++++- extensions/zalo/src/accounts.ts | 2 +- extensions/zalouser/src/accounts.ts | 2 +- package.json | 4 ++++ scripts/test-parallel.mjs | 3 ++- src/plugin-sdk/account-id.ts | 1 + tsconfig.plugin-sdk.dts.json | 2 +- tsdown.config.ts | 7 +++++++ vitest.config.ts | 14 +++++++++++--- 23 files changed, 48 insertions(+), 22 deletions(-) create mode 100644 src/plugin-sdk/account-id.ts diff --git a/extensions/bluebubbles/src/accounts.ts b/extensions/bluebubbles/src/accounts.ts index 04320701e5..36a51ff50c 100644 --- a/extensions/bluebubbles/src/accounts.ts +++ b/extensions/bluebubbles/src/accounts.ts @@ -1,5 +1,5 @@ import type { OpenClawConfig } from "openclaw/plugin-sdk"; -import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk"; +import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/account-id"; import { normalizeBlueBubblesServerUrl, type BlueBubblesAccountConfig } from "./types.js"; export type ResolvedBlueBubblesAccount = { diff --git a/extensions/feishu/src/accounts.ts b/extensions/feishu/src/accounts.ts index 4464a1597b..4123bef4f2 100644 --- a/extensions/feishu/src/accounts.ts +++ b/extensions/feishu/src/accounts.ts @@ -1,5 +1,5 @@ import type { ClawdbotConfig } from "openclaw/plugin-sdk"; -import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk"; +import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/account-id"; import type { FeishuConfig, FeishuAccountConfig, diff --git a/extensions/googlechat/src/accounts.ts b/extensions/googlechat/src/accounts.ts index 8a247d1417..2c7126a58b 100644 --- a/extensions/googlechat/src/accounts.ts +++ b/extensions/googlechat/src/accounts.ts @@ -1,5 +1,5 @@ import type { OpenClawConfig } from "openclaw/plugin-sdk"; -import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk"; +import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/account-id"; import type { GoogleChatAccountConfig } from "./types.config.js"; export type GoogleChatCredentialSource = "file" | "inline" | "env" | "none"; diff --git a/extensions/irc/src/accounts.ts b/extensions/irc/src/accounts.ts index dfc6f24d5b..e0caab243d 100644 --- a/extensions/irc/src/accounts.ts +++ b/extensions/irc/src/accounts.ts @@ -1,5 +1,5 @@ import { readFileSync } from "node:fs"; -import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk"; +import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/account-id"; import type { CoreConfig, IrcAccountConfig, IrcNickServConfig } from "./types.js"; const TRUTHY_ENV = new Set(["true", "1", "yes", "on"]); diff --git a/extensions/matrix/src/matrix/accounts.ts b/extensions/matrix/src/matrix/accounts.ts index 6fd3f2763f..ca0716ce50 100644 --- a/extensions/matrix/src/matrix/accounts.ts +++ b/extensions/matrix/src/matrix/accounts.ts @@ -1,4 +1,4 @@ -import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk"; +import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/account-id"; import type { CoreConfig, MatrixConfig } from "../types.js"; import { resolveMatrixConfigForAccount } from "./client.js"; import { credentialsMatchConfig, loadMatrixCredentials } from "./credentials.js"; diff --git a/extensions/matrix/src/matrix/actions/client.ts b/extensions/matrix/src/matrix/actions/client.ts index 8db29b68ff..fb27dfa9ed 100644 --- a/extensions/matrix/src/matrix/actions/client.ts +++ b/extensions/matrix/src/matrix/actions/client.ts @@ -1,4 +1,4 @@ -import { normalizeAccountId } from "openclaw/plugin-sdk"; +import { normalizeAccountId } from "openclaw/plugin-sdk/account-id"; import type { CoreConfig } from "../../types.js"; import type { MatrixActionClient, MatrixActionClientOpts } from "./types.js"; import { getMatrixRuntime } from "../../runtime.js"; diff --git a/extensions/matrix/src/matrix/active-client.ts b/extensions/matrix/src/matrix/active-client.ts index 0f309d395e..a38a419e67 100644 --- a/extensions/matrix/src/matrix/active-client.ts +++ b/extensions/matrix/src/matrix/active-client.ts @@ -1,5 +1,5 @@ import type { MatrixClient } from "@vector-im/matrix-bot-sdk"; -import { normalizeAccountId } from "openclaw/plugin-sdk"; +import { normalizeAccountId } from "openclaw/plugin-sdk/account-id"; // Support multiple active clients for multi-account const activeClients = new Map(); diff --git a/extensions/matrix/src/matrix/client/config.ts b/extensions/matrix/src/matrix/client/config.ts index d454d06734..ef3325e122 100644 --- a/extensions/matrix/src/matrix/client/config.ts +++ b/extensions/matrix/src/matrix/client/config.ts @@ -1,5 +1,5 @@ import { MatrixClient } from "@vector-im/matrix-bot-sdk"; -import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk"; +import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/account-id"; import type { CoreConfig } from "../../types.js"; import type { MatrixAuth, MatrixResolvedConfig } from "./types.js"; import { getMatrixRuntime } from "../../runtime.js"; diff --git a/extensions/matrix/src/matrix/client/shared.ts b/extensions/matrix/src/matrix/client/shared.ts index 7134f754da..5bdb412bc6 100644 --- a/extensions/matrix/src/matrix/client/shared.ts +++ b/extensions/matrix/src/matrix/client/shared.ts @@ -1,6 +1,6 @@ import type { MatrixClient } from "@vector-im/matrix-bot-sdk"; import { LogService } from "@vector-im/matrix-bot-sdk"; -import { normalizeAccountId } from "openclaw/plugin-sdk"; +import { normalizeAccountId } from "openclaw/plugin-sdk/account-id"; import type { CoreConfig } from "../../types.js"; import type { MatrixAuth } from "./types.js"; import { resolveMatrixAuth } from "./config.js"; diff --git a/extensions/matrix/src/matrix/credentials.ts b/extensions/matrix/src/matrix/credentials.ts index 4e1cf84cf0..7da620324d 100644 --- a/extensions/matrix/src/matrix/credentials.ts +++ b/extensions/matrix/src/matrix/credentials.ts @@ -1,7 +1,7 @@ import fs from "node:fs"; import os from "node:os"; import path from "node:path"; -import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk"; +import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/account-id"; import { getMatrixRuntime } from "../runtime.js"; export type MatrixStoredCredentials = { diff --git a/extensions/matrix/src/matrix/send/client.ts b/extensions/matrix/src/matrix/send/client.ts index 3564859b48..87099a01da 100644 --- a/extensions/matrix/src/matrix/send/client.ts +++ b/extensions/matrix/src/matrix/send/client.ts @@ -1,5 +1,5 @@ import type { MatrixClient } from "@vector-im/matrix-bot-sdk"; -import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk"; +import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/account-id"; import type { CoreConfig } from "../../types.js"; import { getMatrixRuntime } from "../../runtime.js"; import { getActiveMatrixClient, getAnyActiveMatrixClient } from "../active-client.js"; diff --git a/extensions/mattermost/src/mattermost/accounts.ts b/extensions/mattermost/src/mattermost/accounts.ts index d4fbd34a21..0da9465613 100644 --- a/extensions/mattermost/src/mattermost/accounts.ts +++ b/extensions/mattermost/src/mattermost/accounts.ts @@ -1,5 +1,5 @@ import type { OpenClawConfig } from "openclaw/plugin-sdk"; -import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk"; +import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/account-id"; import type { MattermostAccountConfig, MattermostChatMode } from "../types.js"; import { normalizeMattermostBaseUrl } from "./client.js"; diff --git a/extensions/mattermost/src/onboarding-helpers.ts b/extensions/mattermost/src/onboarding-helpers.ts index 2c3bd5f41d..cd3b84b386 100644 --- a/extensions/mattermost/src/onboarding-helpers.ts +++ b/extensions/mattermost/src/onboarding-helpers.ts @@ -1,5 +1,5 @@ import type { OpenClawConfig, WizardPrompter } from "openclaw/plugin-sdk"; -import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk"; +import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/account-id"; type PromptAccountIdParams = { cfg: OpenClawConfig; diff --git a/extensions/mattermost/src/onboarding.ts b/extensions/mattermost/src/onboarding.ts index 2384558e14..9f90f1f2ab 100644 --- a/extensions/mattermost/src/onboarding.ts +++ b/extensions/mattermost/src/onboarding.ts @@ -1,5 +1,5 @@ import type { ChannelOnboardingAdapter, OpenClawConfig, WizardPrompter } from "openclaw/plugin-sdk"; -import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk"; +import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/account-id"; import { listMattermostAccountIds, resolveDefaultMattermostAccountId, diff --git a/extensions/nextcloud-talk/src/accounts.ts b/extensions/nextcloud-talk/src/accounts.ts index 344aa2b8dc..0a5a1e725c 100644 --- a/extensions/nextcloud-talk/src/accounts.ts +++ b/extensions/nextcloud-talk/src/accounts.ts @@ -1,7 +1,12 @@ import { readFileSync } from "node:fs"; -import { DEFAULT_ACCOUNT_ID, isTruthyEnvValue, normalizeAccountId } from "openclaw/plugin-sdk"; +import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/account-id"; import type { CoreConfig, NextcloudTalkAccountConfig } from "./types.js"; +function isTruthyEnvValue(value?: string): boolean { + const normalized = (value ?? "").trim().toLowerCase(); + return normalized === "true" || normalized === "1" || normalized === "yes" || normalized === "on"; +} + const debugAccounts = (...args: unknown[]) => { if (isTruthyEnvValue(process.env.OPENCLAW_DEBUG_NEXTCLOUD_TALK_ACCOUNTS)) { console.warn("[nextcloud-talk:accounts]", ...args); diff --git a/extensions/zalo/src/accounts.ts b/extensions/zalo/src/accounts.ts index 32039e0e51..5fb4d13bac 100644 --- a/extensions/zalo/src/accounts.ts +++ b/extensions/zalo/src/accounts.ts @@ -1,5 +1,5 @@ import type { OpenClawConfig } from "openclaw/plugin-sdk"; -import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk"; +import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/account-id"; import type { ResolvedZaloAccount, ZaloAccountConfig, ZaloConfig } from "./types.js"; import { resolveZaloToken } from "./token.js"; diff --git a/extensions/zalouser/src/accounts.ts b/extensions/zalouser/src/accounts.ts index d70c4247dd..81a84343c9 100644 --- a/extensions/zalouser/src/accounts.ts +++ b/extensions/zalouser/src/accounts.ts @@ -1,5 +1,5 @@ import type { OpenClawConfig } from "openclaw/plugin-sdk"; -import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk"; +import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/account-id"; import type { ResolvedZalouserAccount, ZalouserAccountConfig, ZalouserConfig } from "./types.js"; import { runZca, parseJsonOutput } from "./zca.js"; diff --git a/package.json b/package.json index bd2cba2361..0fa5304382 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,10 @@ "types": "./dist/plugin-sdk/index.d.ts", "default": "./dist/plugin-sdk/index.js" }, + "./plugin-sdk/account-id": { + "types": "./dist/plugin-sdk/account-id.d.ts", + "default": "./dist/plugin-sdk/account-id.js" + }, "./cli-entry": "./openclaw.mjs" }, "scripts": { diff --git a/scripts/test-parallel.mjs b/scripts/test-parallel.mjs index cfa80dfa87..b685d41820 100644 --- a/scripts/test-parallel.mjs +++ b/scripts/test-parallel.mjs @@ -5,7 +5,7 @@ import path from "node:path"; const pnpm = process.platform === "win32" ? "pnpm.cmd" : "pnpm"; -const unitIsolatedFiles = [ +const unitIsolatedFilesRaw = [ "src/plugins/loader.test.ts", "src/plugins/tools.optional.test.ts", "src/agents/session-tool-result-guard.tool-result-persist-hook.test.ts", @@ -28,6 +28,7 @@ const unitIsolatedFiles = [ "src/browser/server-context.remote-tab-ops.test.ts", "src/browser/server-context.ensure-tab-available.prefers-last-target.test.ts", ]; +const unitIsolatedFiles = unitIsolatedFilesRaw.filter((file) => fs.existsSync(file)); const children = new Set(); const isCI = process.env.CI === "true" || process.env.GITHUB_ACTIONS === "true"; diff --git a/src/plugin-sdk/account-id.ts b/src/plugin-sdk/account-id.ts new file mode 100644 index 0000000000..fa82eca8a8 --- /dev/null +++ b/src/plugin-sdk/account-id.ts @@ -0,0 +1 @@ +export { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "../routing/session-key.js"; diff --git a/tsconfig.plugin-sdk.dts.json b/tsconfig.plugin-sdk.dts.json index 4883a7809d..4361da3b71 100644 --- a/tsconfig.plugin-sdk.dts.json +++ b/tsconfig.plugin-sdk.dts.json @@ -10,6 +10,6 @@ "rootDir": "src", "tsBuildInfoFile": "dist/plugin-sdk/.tsbuildinfo" }, - "include": ["src/plugin-sdk/index.ts", "src/types/**/*.d.ts"], + "include": ["src/plugin-sdk/index.ts", "src/plugin-sdk/account-id.ts", "src/types/**/*.d.ts"], "exclude": ["node_modules", "dist", "src/**/*.test.ts"] } diff --git a/tsdown.config.ts b/tsdown.config.ts index f4078fa564..c299492965 100644 --- a/tsdown.config.ts +++ b/tsdown.config.ts @@ -30,6 +30,13 @@ export default defineConfig([ fixedExtension: false, platform: "node", }, + { + entry: "src/plugin-sdk/account-id.ts", + outDir: "dist/plugin-sdk", + env, + fixedExtension: false, + platform: "node", + }, { entry: "src/extensionAPI.ts", env, diff --git a/vitest.config.ts b/vitest.config.ts index 6ff20f192a..8635fd1034 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -11,9 +11,17 @@ const ciWorkers = isWindows ? 2 : 3; export default defineConfig({ resolve: { - alias: { - "openclaw/plugin-sdk": path.join(repoRoot, "src", "plugin-sdk", "index.ts"), - }, + // Keep this ordered: the base `openclaw/plugin-sdk` alias is a prefix match. + alias: [ + { + find: "openclaw/plugin-sdk/account-id", + replacement: path.join(repoRoot, "src", "plugin-sdk", "account-id.ts"), + }, + { + find: "openclaw/plugin-sdk", + replacement: path.join(repoRoot, "src", "plugin-sdk", "index.ts"), + }, + ], }, test: { testTimeout: 120_000,