diff --git a/extensions/tsconfig.package-boundary.paths.json b/extensions/tsconfig.package-boundary.paths.json index e16e1b841979..93576d43ddd0 100644 --- a/extensions/tsconfig.package-boundary.paths.json +++ b/extensions/tsconfig.package-boundary.paths.json @@ -5,6 +5,54 @@ "openclaw/extension-api": ["../src/extensionAPI.ts"], "openclaw/plugin-sdk": ["../dist/plugin-sdk/index.d.ts"], "openclaw/plugin-sdk/*": ["../dist/plugin-sdk/*.d.ts"], + "openclaw/plugin-sdk/reply-payload-testing": [ + "../packages/plugin-sdk/dist/src/plugin-sdk/reply-payload-testing.d.ts" + ], + "openclaw/plugin-sdk/ssrf-runtime-internal": [ + "../packages/plugin-sdk/dist/src/plugin-sdk/ssrf-runtime-internal.d.ts" + ], + "openclaw/plugin-sdk/codex-native-task-runtime": [ + "../packages/plugin-sdk/dist/src/plugin-sdk/codex-native-task-runtime.d.ts" + ], + "openclaw/plugin-sdk/agent-runtime-test-contracts": [ + "../packages/plugin-sdk/dist/src/plugin-sdk/agent-runtime-test-contracts.d.ts" + ], + "openclaw/plugin-sdk/channel-target-testing": [ + "../packages/plugin-sdk/dist/src/plugin-sdk/channel-target-testing.d.ts" + ], + "openclaw/plugin-sdk/channel-test-helpers": [ + "../packages/plugin-sdk/dist/src/plugin-sdk/channel-test-helpers.d.ts" + ], + "openclaw/plugin-sdk/plugin-test-api": [ + "../packages/plugin-sdk/dist/src/plugin-sdk/plugin-test-api.d.ts" + ], + "openclaw/plugin-sdk/plugin-test-contracts": [ + "../packages/plugin-sdk/dist/src/plugin-sdk/plugin-test-contracts.d.ts" + ], + "openclaw/plugin-sdk/plugin-test-runtime": [ + "../packages/plugin-sdk/dist/src/plugin-sdk/plugin-test-runtime.d.ts" + ], + "openclaw/plugin-sdk/provider-http-test-mocks": [ + "../packages/plugin-sdk/dist/src/plugin-sdk/provider-http-test-mocks.d.ts" + ], + "openclaw/plugin-sdk/provider-test-contracts": [ + "../packages/plugin-sdk/dist/src/plugin-sdk/provider-test-contracts.d.ts" + ], + "openclaw/plugin-sdk/test-env": [ + "../packages/plugin-sdk/dist/src/plugin-sdk/test-env.d.ts" + ], + "openclaw/plugin-sdk/test-fixtures": [ + "../packages/plugin-sdk/dist/src/plugin-sdk/test-fixtures.d.ts" + ], + "openclaw/plugin-sdk/test-node-mocks": [ + "../packages/plugin-sdk/dist/src/plugin-sdk/test-node-mocks.d.ts" + ], + "openclaw/plugin-sdk/testing": [ + "../packages/plugin-sdk/dist/src/plugin-sdk/testing.d.ts" + ], + "openclaw/plugin-sdk/channel-contract-testing": [ + "../packages/plugin-sdk/dist/src/plugin-sdk/channel-contract-testing.d.ts" + ], "openclaw/plugin-sdk/account-id": ["../dist/plugin-sdk/account-id.d.ts"], "openclaw/plugin-sdk/channel-entry-contract": [ "../dist/plugin-sdk/channel-entry-contract.d.ts" diff --git a/extensions/xai/tsconfig.json b/extensions/xai/tsconfig.json index 619ed5d5a1d5..49e363054200 100644 --- a/extensions/xai/tsconfig.json +++ b/extensions/xai/tsconfig.json @@ -6,6 +6,54 @@ "openclaw/extension-api": ["../../src/extensionAPI.ts"], "openclaw/plugin-sdk": ["../../dist/plugin-sdk/index.d.ts"], "openclaw/plugin-sdk/*": ["../../dist/plugin-sdk/*.d.ts"], + "openclaw/plugin-sdk/reply-payload-testing": [ + "../../packages/plugin-sdk/dist/src/plugin-sdk/reply-payload-testing.d.ts" + ], + "openclaw/plugin-sdk/ssrf-runtime-internal": [ + "../../packages/plugin-sdk/dist/src/plugin-sdk/ssrf-runtime-internal.d.ts" + ], + "openclaw/plugin-sdk/codex-native-task-runtime": [ + "../../packages/plugin-sdk/dist/src/plugin-sdk/codex-native-task-runtime.d.ts" + ], + "openclaw/plugin-sdk/agent-runtime-test-contracts": [ + "../../packages/plugin-sdk/dist/src/plugin-sdk/agent-runtime-test-contracts.d.ts" + ], + "openclaw/plugin-sdk/channel-target-testing": [ + "../../packages/plugin-sdk/dist/src/plugin-sdk/channel-target-testing.d.ts" + ], + "openclaw/plugin-sdk/channel-test-helpers": [ + "../../packages/plugin-sdk/dist/src/plugin-sdk/channel-test-helpers.d.ts" + ], + "openclaw/plugin-sdk/plugin-test-api": [ + "../../packages/plugin-sdk/dist/src/plugin-sdk/plugin-test-api.d.ts" + ], + "openclaw/plugin-sdk/plugin-test-contracts": [ + "../../packages/plugin-sdk/dist/src/plugin-sdk/plugin-test-contracts.d.ts" + ], + "openclaw/plugin-sdk/plugin-test-runtime": [ + "../../packages/plugin-sdk/dist/src/plugin-sdk/plugin-test-runtime.d.ts" + ], + "openclaw/plugin-sdk/provider-http-test-mocks": [ + "../../packages/plugin-sdk/dist/src/plugin-sdk/provider-http-test-mocks.d.ts" + ], + "openclaw/plugin-sdk/provider-test-contracts": [ + "../../packages/plugin-sdk/dist/src/plugin-sdk/provider-test-contracts.d.ts" + ], + "openclaw/plugin-sdk/test-env": [ + "../../packages/plugin-sdk/dist/src/plugin-sdk/test-env.d.ts" + ], + "openclaw/plugin-sdk/test-fixtures": [ + "../../packages/plugin-sdk/dist/src/plugin-sdk/test-fixtures.d.ts" + ], + "openclaw/plugin-sdk/test-node-mocks": [ + "../../packages/plugin-sdk/dist/src/plugin-sdk/test-node-mocks.d.ts" + ], + "openclaw/plugin-sdk/testing": [ + "../../packages/plugin-sdk/dist/src/plugin-sdk/testing.d.ts" + ], + "openclaw/plugin-sdk/channel-contract-testing": [ + "../../packages/plugin-sdk/dist/src/plugin-sdk/channel-contract-testing.d.ts" + ], "openclaw/plugin-sdk/account-id": ["../../dist/plugin-sdk/account-id.d.ts"], "openclaw/plugin-sdk/channel-entry-contract": [ "../../dist/plugin-sdk/channel-entry-contract.d.ts" diff --git a/package.json b/package.json index a02960bb51c5..316e606151ff 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,8 @@ "!dist/plugin-sdk/channel-target-testing.d.ts", "!dist/plugin-sdk/channel-test-helpers.js", "!dist/plugin-sdk/channel-test-helpers.d.ts", + "!dist/plugin-sdk/codex-native-task-runtime.js", + "!dist/plugin-sdk/codex-native-task-runtime.d.ts", "!dist/plugin-sdk/plugin-test-api.js", "!dist/plugin-sdk/plugin-test-api.d.ts", "!dist/plugin-sdk/plugin-test-contracts.js", @@ -53,12 +55,16 @@ "!dist/plugin-sdk/provider-test-contracts.d.ts", "!dist/plugin-sdk/reply-payload-testing.js", "!dist/plugin-sdk/reply-payload-testing.d.ts", + "!dist/plugin-sdk/ssrf-runtime-internal.js", + "!dist/plugin-sdk/ssrf-runtime-internal.d.ts", "!dist/plugin-sdk/test-env.js", "!dist/plugin-sdk/test-env.d.ts", "!dist/plugin-sdk/test-fixtures.js", "!dist/plugin-sdk/test-fixtures.d.ts", "!dist/plugin-sdk/test-node-mocks.js", "!dist/plugin-sdk/test-node-mocks.d.ts", + "!dist/plugin-sdk/test-utils.js", + "!dist/plugin-sdk/test-utils.d.ts", "!dist/plugin-sdk/testing.js", "!dist/plugin-sdk/testing.d.ts", "!dist/plugin-sdk/src/agents/test-helpers/**", diff --git a/scripts/lib/extension-package-boundary.ts b/scripts/lib/extension-package-boundary.ts index d0d96a1770d2..b43c7becbb3d 100644 --- a/scripts/lib/extension-package-boundary.ts +++ b/scripts/lib/extension-package-boundary.ts @@ -1,5 +1,6 @@ import { existsSync, readFileSync, readdirSync } from "node:fs"; import { join, posix, resolve } from "node:path"; +import { privateLocalOnlyPluginSdkEntrypoints } from "./plugin-sdk-entries.mjs"; export const EXTENSION_PACKAGE_BOUNDARY_INCLUDE = ["./*.ts", "./src/**/*.ts"] as const; export const EXTENSION_PACKAGE_BOUNDARY_EXCLUDE = [ @@ -11,10 +12,19 @@ export const EXTENSION_PACKAGE_BOUNDARY_EXCLUDE = [ "./src/**/*test-harness.ts", "./src/**/*test-support.ts", ] as const; + +const privateLocalOnlyPluginSdkPackageDtsPaths = Object.fromEntries( + privateLocalOnlyPluginSdkEntrypoints.map((entrypoint) => [ + `openclaw/plugin-sdk/${entrypoint}`, + [`../packages/plugin-sdk/dist/src/plugin-sdk/${entrypoint}.d.ts`], + ]), +) as Record; + export const EXTENSION_PACKAGE_BOUNDARY_BASE_PATHS = { "openclaw/extension-api": ["../src/extensionAPI.ts"], "openclaw/plugin-sdk": ["../dist/plugin-sdk/index.d.ts"], "openclaw/plugin-sdk/*": ["../dist/plugin-sdk/*.d.ts"], + ...privateLocalOnlyPluginSdkPackageDtsPaths, "openclaw/plugin-sdk/account-id": ["../dist/plugin-sdk/account-id.d.ts"], "openclaw/plugin-sdk/channel-entry-contract": ["../dist/plugin-sdk/channel-entry-contract.d.ts"], "openclaw/plugin-sdk/browser-maintenance": [ diff --git a/scripts/lib/plugin-sdk-entries.d.mts b/scripts/lib/plugin-sdk-entries.d.mts index a6d83f567086..704593af4473 100644 --- a/scripts/lib/plugin-sdk-entries.d.mts +++ b/scripts/lib/plugin-sdk-entries.d.mts @@ -15,3 +15,4 @@ export function buildPluginSdkPackageExports(): Record< } >; export function listPluginSdkDistArtifacts(): string[]; +export function listPrivateLocalOnlyPluginSdkDistArtifacts(): string[]; diff --git a/scripts/lib/plugin-sdk-entries.mjs b/scripts/lib/plugin-sdk-entries.mjs index 2749c3355887..1ba61caeb39b 100644 --- a/scripts/lib/plugin-sdk-entries.mjs +++ b/scripts/lib/plugin-sdk-entries.mjs @@ -57,3 +57,10 @@ export function listPluginSdkDistArtifacts() { `dist/plugin-sdk/${entry}.d.ts`, ]); } + +export function listPrivateLocalOnlyPluginSdkDistArtifacts() { + return privateLocalOnlyPluginSdkEntrypoints.flatMap((entry) => [ + `dist/plugin-sdk/${entry}.js`, + `dist/plugin-sdk/${entry}.d.ts`, + ]); +} diff --git a/scripts/release-check.ts b/scripts/release-check.ts index f153b86f3d51..9ed898ead8a7 100755 --- a/scripts/release-check.ts +++ b/scripts/release-check.ts @@ -36,7 +36,10 @@ import { } from "./lib/bundled-plugin-build-entries.mjs"; import { collectPackUnpackedSizeErrors as collectNpmPackUnpackedSizeErrors } from "./lib/npm-pack-budget.mjs"; import { collectBundledPluginPackageDependencySpecs } from "./lib/plugin-package-dependencies.mjs"; -import { listPluginSdkDistArtifacts } from "./lib/plugin-sdk-entries.mjs"; +import { + listPluginSdkDistArtifacts, + listPrivateLocalOnlyPluginSdkDistArtifacts, +} from "./lib/plugin-sdk-entries.mjs"; import { runInstalledWorkspaceBootstrapSmoke, WORKSPACE_TEMPLATE_PACK_PATHS, @@ -105,6 +108,7 @@ const forbiddenPrefixes = [ "dist/plugin-sdk/src/plugin-sdk/qa-channel-protocol.d.ts", "dist/plugin-sdk/src/plugin-sdk/qa-lab.d.ts", "dist/plugin-sdk/src/plugin-sdk/qa-runtime.d.ts", + ...listPrivateLocalOnlyPluginSdkDistArtifacts(), "dist/qa-runtime-", "dist/plugin-sdk/.tsbuildinfo", "docs/.generated/", diff --git a/test/release-check.test.ts b/test/release-check.test.ts index 1f9fbc6aac56..54a34ed3c442 100644 --- a/test/release-check.test.ts +++ b/test/release-check.test.ts @@ -4,7 +4,10 @@ import { dirname, join, win32 } from "node:path"; import { bundledDistPluginFile, bundledPluginFile } from "openclaw/plugin-sdk/test-fixtures"; import { describe, expect, it } from "vitest"; import { listBundledPluginPackArtifacts } from "../scripts/lib/bundled-plugin-build-entries.mjs"; -import { listPluginSdkDistArtifacts } from "../scripts/lib/plugin-sdk-entries.mjs"; +import { + listPluginSdkDistArtifacts, + listPrivateLocalOnlyPluginSdkDistArtifacts, +} from "../scripts/lib/plugin-sdk-entries.mjs"; import { WORKSPACE_TEMPLATE_PACK_PATHS, createWorkspaceBootstrapSmokeEnv, @@ -47,6 +50,7 @@ function makePackResult(filename: string, unpackedSize: number) { } const requiredPluginSdkPackPaths = [...listPluginSdkDistArtifacts(), "dist/plugin-sdk/compat.js"]; +const privateLocalOnlyPluginSdkPackPaths = listPrivateLocalOnlyPluginSdkDistArtifacts(); const requiredBundledPluginPackPaths = listBundledPluginPackArtifacts(); describe("collectAppcastSparkleVersionErrors", () => { @@ -472,6 +476,20 @@ describe("collectForbiddenPackPaths", () => { expect(pkg.files).toContain("!dist/plugin-sdk/src/**"); }); + it("blocks private local-only plugin SDK artifacts from npm pack output", () => { + expect( + collectForbiddenPackPaths(["dist/index.js", ...privateLocalOnlyPluginSdkPackPaths]), + ).toEqual([...privateLocalOnlyPluginSdkPackPaths].toSorted()); + }); + + it("keeps private local-only plugin SDK artifacts excluded by package files", () => { + const pkg = JSON.parse(readFileSync("package.json", "utf8")) as { files?: string[] }; + + for (const entry of privateLocalOnlyPluginSdkPackPaths) { + expect(pkg.files).toContain(`!${entry}`); + } + }); + it("blocks legacy runtime dependency stamps from npm pack output", () => { expect( collectForbiddenPackPaths([ @@ -768,6 +786,7 @@ describe("createPackedPluginSdkTypescriptSmokeProject", () => { expect(source).toContain('"openclaw/plugin-sdk/runtime-env"'); expect(source).toContain("type PublicPluginSdkModules = ["); expect(source).not.toContain("TelegramAccountConfig"); + expect(source).not.toContain("openclaw/plugin-sdk/channel-contract-testing"); } finally { rmSync(root, { recursive: true, force: true }); }