fix(build): externalize Feishu Lark SDK

Externalize @larksuiteoapi/node-sdk from the bundled Feishu ESM runtime so packaged startup loads the SDK as a plugin-local runtime dependency instead of inlining the SDK's ESM __dirname path.

Adds changelog credit and a tsdown-config regression assertion.

Fixes #76291.
Fixes #76494.

Co-authored-by: Chris Zhang <4436110+zqchris@users.noreply.github.com>
This commit is contained in:
Chris Zhang
2026-05-03 14:27:13 +08:00
committed by GitHub
parent 14312ff570
commit cb7b2850e4
3 changed files with 9 additions and 1 deletions

View File

@@ -22,6 +22,7 @@ Docs: https://docs.openclaw.ai
- Agents/sessions: keep delayed `sessions_send` A2A replies alive after soft wait-window timeouts, while preserving terminal run timeouts and avoiding stale target replies in requester sessions. Fixes #76443. Thanks @ryswork1993 and @vincentkoc.
- Config/doctor: cap `.clobbered.*` forensic snapshots per config path and serialize snapshot writes so repeated `doctor --fix` recovery loops cannot flood the config directory. Fixes #76454; carries forward #65649. Thanks @JUSTICEESSIELP, @rsnow, and @vincentkoc.
- Feishu: suppress duplicate text when replies send native voice media while preserving captions for ordinary audio files and falling back to text plus attachment links when voice uploads fail.
- Feishu: keep packaged Feishu startup from bundling the Lark SDK's ESM `__dirname` path by loading the SDK as a plugin-local runtime dependency. Fixes #76291 and #76494. (#76392) Thanks @zqchris.
- Channels/secrets: resolve SecretRef-backed channel credentials through external plugin secret contracts after the plugin split, covering runtime startup, target discovery, webhook auth, disabled-account enumeration, and late-bound web_search config. Fixes #76371. (#76449) Thanks @joshavant and @neeravmakwana.
- Docker/Gateway: pass Docker setup `.env` values into gateway and CLI containers and preserve exec SecretRef `passEnv` keys in managed service plans, so 1Password Connect-backed Discord tokens keep resolving after doctor or plugin repair. Thanks @vincentkoc.
- Control UI/WebChat: explain compaction boundaries in chat history and link directly to session checkpoint controls so pre-compaction turns no longer look silently lost after refresh. Fixes #76415. Thanks @BunsDev.

View File

@@ -147,13 +147,19 @@ describe("tsdown config", () => {
if (typeof neverBundle === "function") {
expect(neverBundle("@lancedb/lancedb")).toBe(true);
expect(neverBundle("@larksuiteoapi/node-sdk")).toBe(true);
expect(neverBundle("@matrix-org/matrix-sdk-crypto-nodejs")).toBe(true);
expect(neverBundle("matrix-js-sdk/lib/client.js")).toBe(true);
expect(neverBundle("qrcode-terminal/lib/main.js")).toBe(true);
expect(neverBundle("not-a-runtime-dependency")).toBe(false);
} else {
expect(neverBundle).toEqual(
expect.arrayContaining(["@lancedb/lancedb", "matrix-js-sdk", "qrcode-terminal"]),
expect.arrayContaining([
"@lancedb/lancedb",
"@larksuiteoapi/node-sdk",
"matrix-js-sdk",
"qrcode-terminal",
]),
);
}
expect(typeof external).toBe("function");

View File

@@ -160,6 +160,7 @@ const bundledPluginFile = (pluginId: string, relativePath: string) =>
`${bundledPluginRoot(pluginId)}/${relativePath}`;
const explicitNeverBundleDependencies = [
"@lancedb/lancedb",
"@larksuiteoapi/node-sdk",
"@matrix-org/matrix-sdk-crypto-nodejs",
"matrix-js-sdk",
"qrcode-terminal",