Skip to content

Commit a907668

Browse files
committed
fix(plugin-sdk): stop exporting vitest test helpers
1 parent 95c8fc9 commit a907668

11 files changed

Lines changed: 84 additions & 90 deletions

docs/plugins/sdk-subpaths.md

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,17 @@ For the plugin authoring guide, see [Plugin SDK overview](/plugins/sdk-overview)
3333

3434
### Deprecated compatibility and test helpers
3535

36-
These subpaths remain package exports for older plugins and OpenClaw test suites,
37-
but new code should not add imports from them: `agent-runtime-test-contracts`,
36+
These subpaths remain package exports for older plugins, but new code should not
37+
add imports from them: `channel-runtime`, `compat`, `config-types`,
38+
`infra-runtime`, `text-runtime`, and `zod`. Import `zod` directly from `zod` in
39+
new plugin code.
40+
41+
OpenClaw's Vitest-backed test-helper subpaths are repo-local only and are no
42+
longer package exports: `agent-runtime-test-contracts`,
3843
`channel-contract-testing`, `channel-target-testing`, `channel-test-helpers`,
39-
`plugin-test-api`, `plugin-test-contracts`, `provider-http-test-mocks`,
40-
`provider-test-contracts`, `test-env`, `test-fixtures`, `test-node-mocks`,
41-
`testing`, `channel-runtime`, `compat`, `config-types`, `infra-runtime`,
42-
`text-runtime`, and `zod`. Import `zod` directly from `zod` in new plugin code.
43-
`plugin-test-runtime` is still an active focused test helper subpath.
44+
`plugin-test-api`, `plugin-test-contracts`, `plugin-test-runtime`,
45+
`provider-http-test-mocks`, `provider-test-contracts`, `test-env`,
46+
`test-fixtures`, `test-node-mocks`, and `testing`.
4447

4548
### Reserved bundled plugin helper subpaths
4649

docs/plugins/sdk-testing.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ plugins.
2020
## Test utilities
2121

2222
These test-helper subpaths are repo-local source entrypoints for OpenClaw's own
23-
bundled plugin tests. They are not package exports for third-party plugins.
23+
bundled plugin tests. They are not package exports for third-party plugins, and
24+
they may import Vitest or other repo-only test dependencies.
2425

2526
**Plugin API mock import:** `openclaw/plugin-sdk/plugin-test-api`
2627

@@ -46,7 +47,8 @@ bundled plugin tests. They are not package exports for third-party plugins.
4647

4748
**Node builtin mock import:** `openclaw/plugin-sdk/test-node-mocks`
4849

49-
Prefer the focused subpaths below for new plugin tests. The broad
50+
Inside the OpenClaw repo, prefer the focused subpaths below for new bundled
51+
plugin tests. The broad
5052
`openclaw/plugin-sdk/testing` barrel is legacy compatibility only.
5153
Repo guardrails reject new real imports from `plugin-sdk/testing` and
5254
`plugin-sdk/test-utils`; those names remain only as deprecated compatibility

package.json

Lines changed: 30 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,36 @@
3232
"!dist/.runtime-postbuildstamp",
3333
"!dist/**/*.map",
3434
"!dist/plugin-sdk/.tsbuildinfo",
35+
"!dist/plugin-sdk/agent-runtime-test-contracts.js",
36+
"!dist/plugin-sdk/agent-runtime-test-contracts.d.ts",
37+
"!dist/plugin-sdk/channel-contract-testing.js",
38+
"!dist/plugin-sdk/channel-contract-testing.d.ts",
39+
"!dist/plugin-sdk/channel-target-testing.js",
40+
"!dist/plugin-sdk/channel-target-testing.d.ts",
41+
"!dist/plugin-sdk/channel-test-helpers.js",
42+
"!dist/plugin-sdk/channel-test-helpers.d.ts",
43+
"!dist/plugin-sdk/plugin-test-api.js",
44+
"!dist/plugin-sdk/plugin-test-api.d.ts",
45+
"!dist/plugin-sdk/plugin-test-contracts.js",
46+
"!dist/plugin-sdk/plugin-test-contracts.d.ts",
47+
"!dist/plugin-sdk/plugin-test-runtime.js",
48+
"!dist/plugin-sdk/plugin-test-runtime.d.ts",
49+
"!dist/plugin-sdk/provider-http-test-mocks.js",
50+
"!dist/plugin-sdk/provider-http-test-mocks.d.ts",
51+
"!dist/plugin-sdk/provider-test-contracts.js",
52+
"!dist/plugin-sdk/provider-test-contracts.d.ts",
53+
"!dist/plugin-sdk/test-env.js",
54+
"!dist/plugin-sdk/test-env.d.ts",
55+
"!dist/plugin-sdk/test-fixtures.js",
56+
"!dist/plugin-sdk/test-fixtures.d.ts",
57+
"!dist/plugin-sdk/test-node-mocks.js",
58+
"!dist/plugin-sdk/test-node-mocks.d.ts",
59+
"!dist/plugin-sdk/testing.js",
60+
"!dist/plugin-sdk/testing.d.ts",
61+
"!dist/plugin-sdk/src/agents/test-helpers/**",
62+
"!dist/plugin-sdk/src/test-helpers/**",
63+
"!dist/plugin-sdk/src/test-utils/**",
64+
"!dist/plugin-sdk/src/plugin-sdk/test-helpers/**",
3565
"!dist/extensions/acpx/**",
3666
"!dist/extensions/amazon-bedrock/**",
3767
"!dist/extensions/amazon-bedrock-mantle/**",
@@ -570,54 +600,6 @@
570600
"types": "./dist/plugin-sdk/lazy-runtime.d.ts",
571601
"default": "./dist/plugin-sdk/lazy-runtime.js"
572602
},
573-
"./plugin-sdk/agent-runtime-test-contracts": {
574-
"types": "./dist/plugin-sdk/agent-runtime-test-contracts.d.ts",
575-
"default": "./dist/plugin-sdk/agent-runtime-test-contracts.js"
576-
},
577-
"./plugin-sdk/channel-target-testing": {
578-
"types": "./dist/plugin-sdk/channel-target-testing.d.ts",
579-
"default": "./dist/plugin-sdk/channel-target-testing.js"
580-
},
581-
"./plugin-sdk/channel-test-helpers": {
582-
"types": "./dist/plugin-sdk/channel-test-helpers.d.ts",
583-
"default": "./dist/plugin-sdk/channel-test-helpers.js"
584-
},
585-
"./plugin-sdk/plugin-test-api": {
586-
"types": "./dist/plugin-sdk/plugin-test-api.d.ts",
587-
"default": "./dist/plugin-sdk/plugin-test-api.js"
588-
},
589-
"./plugin-sdk/plugin-test-contracts": {
590-
"types": "./dist/plugin-sdk/plugin-test-contracts.d.ts",
591-
"default": "./dist/plugin-sdk/plugin-test-contracts.js"
592-
},
593-
"./plugin-sdk/plugin-test-runtime": {
594-
"types": "./dist/plugin-sdk/plugin-test-runtime.d.ts",
595-
"default": "./dist/plugin-sdk/plugin-test-runtime.js"
596-
},
597-
"./plugin-sdk/provider-http-test-mocks": {
598-
"types": "./dist/plugin-sdk/provider-http-test-mocks.d.ts",
599-
"default": "./dist/plugin-sdk/provider-http-test-mocks.js"
600-
},
601-
"./plugin-sdk/provider-test-contracts": {
602-
"types": "./dist/plugin-sdk/provider-test-contracts.d.ts",
603-
"default": "./dist/plugin-sdk/provider-test-contracts.js"
604-
},
605-
"./plugin-sdk/test-env": {
606-
"types": "./dist/plugin-sdk/test-env.d.ts",
607-
"default": "./dist/plugin-sdk/test-env.js"
608-
},
609-
"./plugin-sdk/test-fixtures": {
610-
"types": "./dist/plugin-sdk/test-fixtures.d.ts",
611-
"default": "./dist/plugin-sdk/test-fixtures.js"
612-
},
613-
"./plugin-sdk/test-node-mocks": {
614-
"types": "./dist/plugin-sdk/test-node-mocks.d.ts",
615-
"default": "./dist/plugin-sdk/test-node-mocks.js"
616-
},
617-
"./plugin-sdk/testing": {
618-
"types": "./dist/plugin-sdk/testing.d.ts",
619-
"default": "./dist/plugin-sdk/testing.js"
620-
},
621603
"./plugin-sdk/temp-path": {
622604
"types": "./dist/plugin-sdk/temp-path.d.ts",
623605
"default": "./dist/plugin-sdk/temp-path.js"
@@ -686,10 +668,6 @@
686668
"types": "./dist/plugin-sdk/boolean-param.d.ts",
687669
"default": "./dist/plugin-sdk/boolean-param.js"
688670
},
689-
"./plugin-sdk/channel-contract-testing": {
690-
"types": "./dist/plugin-sdk/channel-contract-testing.d.ts",
691-
"default": "./dist/plugin-sdk/channel-contract-testing.js"
692-
},
693671
"./plugin-sdk/dangerous-name-runtime": {
694672
"types": "./dist/plugin-sdk/dangerous-name-runtime.d.ts",
695673
"default": "./dist/plugin-sdk/dangerous-name-runtime.js"

scripts/lib/plugin-sdk-deprecated-public-subpaths.json

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
[
22
"agent-config-primitives",
3-
"agent-runtime-test-contracts",
43
"channel-config-schema-legacy",
5-
"channel-contract-testing",
64
"channel-reply-pipeline",
75
"channel-runtime",
86
"channel-secret-runtime",
9-
"channel-target-testing",
10-
"channel-test-helpers",
117
"command-auth",
128
"compat",
139
"config-runtime",
@@ -28,11 +24,7 @@
2824
"memory-host-files",
2925
"memory-host-status",
3026
"music-generation-core",
31-
"plugin-test-api",
32-
"plugin-test-contracts",
3327
"provider-auth-login",
34-
"provider-http-test-mocks",
35-
"provider-test-contracts",
3628
"provider-zai-endpoint",
3729
"reply-dedupe",
3830
"runtime-logger",
@@ -41,10 +33,6 @@
4133
"setup-adapter-runtime",
4234
"telegram-account",
4335
"telegram-command-config",
44-
"test-env",
45-
"test-fixtures",
46-
"test-node-mocks",
47-
"testing",
4836
"text-runtime",
4937
"webhook-path",
5038
"zalouser",

scripts/lib/plugin-sdk-entries.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ export function buildPluginSdkPackageExports() {
5252
}
5353

5454
export function listPluginSdkDistArtifacts() {
55-
return pluginSdkEntrypoints.flatMap((entry) => [
55+
return publicPluginSdkEntrypoints.flatMap((entry) => [
5656
`dist/plugin-sdk/${entry}.js`,
5757
`dist/plugin-sdk/${entry}.d.ts`,
5858
]);
Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,22 @@
11
[
2+
"agent-runtime-test-contracts",
3+
"channel-contract-testing",
4+
"channel-target-testing",
5+
"channel-test-helpers",
26
"codex-native-task-runtime",
7+
"plugin-test-api",
8+
"plugin-test-contracts",
9+
"plugin-test-runtime",
10+
"provider-http-test-mocks",
11+
"provider-test-contracts",
312
"qa-channel",
413
"qa-channel-protocol",
514
"qa-lab",
615
"qa-runtime",
716
"ssrf-runtime-internal",
8-
"test-utils"
17+
"test-env",
18+
"test-fixtures",
19+
"test-node-mocks",
20+
"test-utils",
21+
"testing"
922
]

scripts/release-check.ts

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -124,13 +124,11 @@ const laneFloorAdoptionDateKey = 20260227;
124124
const SAFE_UNIX_SMOKE_PATH = "/usr/bin:/bin";
125125
export const MAX_CRITICAL_PLUGIN_SDK_ENTRYPOINT_BYTES = 2 * 1024 * 1024;
126126
export const CRITICAL_PLUGIN_SDK_SIZE_CHECK_SPECIFIERS = [
127-
"openclaw/plugin-sdk/agent-runtime-test-contracts",
128-
"openclaw/plugin-sdk/plugin-test-contracts",
129-
"openclaw/plugin-sdk/provider-test-contracts",
130-
] as const;
131-
export const CRITICAL_PLUGIN_SDK_IMPORT_SMOKE_SPECIFIERS = [
132-
"openclaw/plugin-sdk/plugin-test-contracts",
127+
"openclaw/plugin-sdk/core",
128+
"openclaw/plugin-sdk/provider-entry",
129+
"openclaw/plugin-sdk/runtime",
133130
] as const;
131+
export const CRITICAL_PLUGIN_SDK_IMPORT_SMOKE_SPECIFIERS = ["openclaw/plugin-sdk/core"] as const;
134132
export const PACKED_CLI_SMOKE_COMMANDS = [
135133
["--help"],
136134
["onboard", "--help"],
@@ -939,7 +937,7 @@ export function collectCriticalPluginSdkEntrypointSizeErrors(rootDir = process.c
939937
}
940938
if (stat.size > MAX_CRITICAL_PLUGIN_SDK_ENTRYPOINT_BYTES) {
941939
errors.push(
942-
`${relativePath} is ${stat.size} bytes, exceeding ${MAX_CRITICAL_PLUGIN_SDK_ENTRYPOINT_BYTES} bytes. Keep public SDK test-contract entrypoints lazy and avoid bundling compiler/runtime internals.`,
940+
`${relativePath} is ${stat.size} bytes, exceeding ${MAX_CRITICAL_PLUGIN_SDK_ENTRYPOINT_BYTES} bytes. Keep public SDK package entrypoints lazy and avoid bundling compiler/runtime internals.`,
943941
);
944942
}
945943
}

src/agents/tools/sessions-send-tool.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,9 @@ async function startAgentRun(params: {
231231
} catch (err) {
232232
const queueSummary =
233233
formatEmbeddedPiQueueFailureSummary(queueOutcome) ?? "active run queue rejected";
234-
throw new Error(`${queueSummary}; fallback_failed error=${formatErrorMessage(err)}`);
234+
throw new Error(`${queueSummary}; fallback_failed error=${formatErrorMessage(err)}`, {
235+
cause: err,
236+
});
235237
}
236238
}
237239
const response = await params.callGateway<{ runId: string }>({

src/plugin-sdk/entrypoints.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ export function buildPluginSdkPackageExports() {
108108

109109
/** List the dist artifacts expected for every generated plugin SDK entrypoint. */
110110
export function listPluginSdkDistArtifacts() {
111-
return pluginSdkEntrypoints.flatMap((entry) => [
111+
return publicPluginSdkEntrypoints.flatMap((entry) => [
112112
`dist/plugin-sdk/${entry}.js`,
113113
`dist/plugin-sdk/${entry}.d.ts`,
114114
]);

src/plugins/contracts/plugin-sdk-package-contract-guardrails.test.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -692,6 +692,16 @@ describe("plugin-sdk package contract guardrails", () => {
692692
expect(collectPluginSdkPackageExports()).toEqual([...publicPluginSdkEntrypoints].toSorted());
693693
});
694694

695+
it("keeps Vitest-backed SDK test helpers local-only", () => {
696+
const localOnly = new Set(privateLocalOnlyPluginSdkEntrypoints);
697+
698+
expect(
699+
["plugin-test-contracts", "provider-test-contracts", "testing"].every((entrypoint) =>
700+
localOnly.has(entrypoint),
701+
),
702+
).toBe(true);
703+
});
704+
695705
it("keeps configured local-origin fetch helpers out of deprecated infra-runtime", () => {
696706
const source = fs.readFileSync(resolve(REPO_ROOT, "src/plugin-sdk/infra-runtime.ts"), "utf8");
697707

0 commit comments

Comments
 (0)